PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Harddisk Images manipulieren ?



terabaud
30.06.04, 22:05
Hi :)

ich habe über Bochs ein Harddisk-Image erstellt, was MS-DOS bootet. Der Zweck des Images ist, es mittels memdisk booten zu lassen, damit ich ein altes Spiel wieder spielen kann, was weder unter Dosbox, noch unter Dosemu, noch unter Windows/Wine läuft ;)

Das Problem : es ist immer sehr aufwändig, den Inhalt des Images über den Umweg einer virtuellen Maschine zu verändern. Ich frage mich, gibt es noch einen direkteren Weg, um auf eine Partition innerhalb eines Festplattenimages zuzugreifen ?
Die Partitionierung kann man ja schonmal mit fdisk bearbeiten/anzeigen lassen, z.B. :



fdisk -C 306 -H 4 -S 17 freedos.img
p
Gerät Boot Start End Blocks Id System
freedos.img1 * 1 302 10234 1 FAT12
Partition 1 hat unterschiedliche phys./log. Enden:
phys=(301, 3, 17) logisch=(301, 0, 17)

(es handelt sich hier um das freedos image von bochs)
Ich habe dann mal versucht "w" einzugeben, in der Hoffnung, dass man irgendwie durch das Neu-Einlesen der Partitionstabelle an die Parition "freedos.img1" kommt, aber das geht wohl nicht, da ioctl()-Aufrufe nur bei physikalischen Laufwerken funktionieren :


Die Partitionstabelle wurde verändert!

Rufe ioctl() um Partitionstabelle neu einzulesen.

WARNUNG: Neueinlesen der Partitionstabelle führte zu Fehler 25: Unpassender IOCTL (I/O-Control) für das Gerät.
Der Kernel benutzt noch die alte Tabelle.
Die neue Tabelle wird beim nächsten Neustart verwendet.
Synchronisiere Platten.

Hat jemand ne Ahnung wie man an die Partition kommt ? :)

terabaud
30.06.04, 23:56
Ah.... hat sich erledigt :

Man kann eine Partition innerhalb eines Festplatten-Images wie folgt über das loopback device mounten:


fdisk -l -u -C YYYY freedos.img
mount -o loop,offset=XXXXXX -t msdos image.img /mnt/image

YYYY ist die Anzahl der Zylinder des HDImages (Beim Bochs-freeDOS-Image: 306)
XXXXX ist der Startsektor der Partition * 512 (Ausgabe vom fdisk-Befehl. Beim Bochs-freeDOS-Image: 17*512 = 8704).

Näheres hier : http://www.trekweb.com/~jasonb/articles/linux_loopback.shtml


Alternativ geht auch

losetup -o XXXXXX /dev/loop0 image.img
mount /dev/loop0 -t msdos /mnt/loop

stefan.becker
01.07.04, 22:02
Alternativ kannst du auch die mtools nehmen, dann kannst du uber die Befehle mdir/mcopy/m.. auf das Image vom Host aus zugreifen. Sehr komfortabel und ohne Trickserei.