Wie kann ich ein Disk-Image mounten?

26

Ich habe ein Disk-Image, myimage.diskdas die Partitionstabelle und eine primäre Partition enthält (dh ein FAT32-Dateisystem). Denken Sie das als ein USB-Stiftbild.

Ich möchte die primäre Partition in ein lokales Verzeichnis laden. Ich weiß, wie man ein Partitions-Image mit den Loop-Utils mounten kann, aber hier habe ich ein Disk-Image. Ich vermute, dass ich das Image mounten muss, um die Partitionstabelle zu "überspringen", aber wie kann ich das tun?

Emiliano
quelle
7
Siehe auch superuser.com/questions/117136/…. Möglicherweise möchten Sie einfach verwenden, losetup --partscan --find --show disk.imggefolgt vonmount /dev/loop0p1 /mnt/disk
Flow

Antworten:

44

Das kpartx-Tool macht dies einfacher. Es erstellt Loop-Geräte in / dev / mapper für jede Partition in Ihrem Image. Dann können Sie das Loop-Gerät einbinden, das Ihrer gewünschten Partition entspricht, ohne den Offset manuell berechnen zu müssen.

So hängen Sie beispielsweise die erste Partition des Datenträgerabbilds ein:

kpartx -a -v myimage.disk
mount /dev/mapper/loop0p1 /mnt/myimage

Wenn Sie mit dem Image fertig sind, entfernen Sie die Loop-Geräte:

umount /mnt/myimage
kpartx -d -v myimage.disk

Wenn Sie alternativ einen aktuellen Kernel haben und loop.max_part = 63 beim Booten übergeben (wenn loop eingebaut ist) oder modprobe (wenn loop ein Modul ist), können Sie dies folgendermaßen tun:

losetup /dev/loop0 myimage.disk
partprobe /dev/loop0             # Re-read partition table if /dev/loop0 was used with a different image before
mount /dev/loop0p1 /mnt/myimage

Wenn Sie mit der Schleife fertig sind:

losetup -d /dev/loop0
scott.squires
quelle
1
Sie brauchen das -o loopObige nicht, es /dev/mapper/loop0p1ist bereits ein Block-Gerät (ein Mapper-Gerät über einem Loop-Gerät, Sie möchten keine weitere Schicht von Loop-Geräten darüber).
sch
2
Wenn Sie /dev/loop0p1nach dem Ausführen keine Partitionsgeräte ( usw.) erhalten losetup, führen Sie aus partprobe /dev/loop0.
Vladimir Panteleev
kpartxscheint, die standardmäßig in Linux Mint 18 installiert werden
unfa
4

Ich habe es gefunden:

http://www.andremiller.net/content/mounting-hard-disk-image-including-partitions-using-linux

Das scheint genau das zu sein, wonach ich gesucht habe.

Hier ist der Schlüsselteil:

mount -o loop,ro,offset=32256 hda.img /mnt/rabbit

Wobei der Wert von Offset in Bytes ist. Der vorgeschlagene Weg, um den Offset zu erhalten, ist, partedauf das Bild zu zeigen, dann die Einheit B für Bytes und den Startwert von der Druckausgabe zu nehmen. Angenommen, Sie haben Speicherplatz auf der Festplatte, dann tun Sie das Offensichtliche: Sobald Sie den Versatz und die Größe haben, ddextrahieren Sie einfach jede Partition in eine separate Datei.

Emiliano
quelle
1
Können Sie hier die wichtigsten Teile erklären, um eine wirklich gute Antwort zu schreiben? Einen Link zu haben ist großartig, aber die Informationen hier zu haben wäre am besten.
Slhck
1
Hier ist der Schlüsselteil:, mount -o loop,ro,offset=32256 hda.img /mnt/rabbitwobei der Wert von offsetin Bytes ist. Der vorgeschlagene Weg, um den Offset zu erhalten, besteht darin, auf das Bild zu zeigen, dann unit Bnach Bytes zu suchen und den startWert aus der printAusgabe zu übernehmen. Angenommen, Sie haben Speicherplatz auf der Festplatte, dann tun Sie das Offensichtliche: Sobald Sie den Versatz und die Größe haben, ddextrahieren Sie einfach jede Partition in eine separate Datei.
ein Lebenslauf vom
Ja, tut mir leid, dass ich zu kurz bin. Wie Michael betonte, ist der relevante Teil natürlich die mountZeile, die die offsetOption enthält.
Emiliano
2
local_image_file=/var/tmp/image.img
first_byte=$(parted -m ${local_image_file} unit B print | grep Linux | cut --fields 2 --delimiter ':' | sed 's/.$//')
loop_file=/var/tmp/loop
mkdir -p ${loop_file}
mount -o loop,ro,offset=${first_byte} ${local_image_file} ${loop_file}
speien
quelle
1
Während dies die Frage beantworten mag, wäre es eine bessere Antwort, wenn Sie eine Erklärung dafür liefern könnten .
DavidPostill
2

Heutzutage können Sie Ihre Arbeit minimieren, indem Sie verwenden udisks. Lösung von ArchWiki: udisks - Mount-Loop-Geräte

Verwenden Sie den folgenden Befehl, um ISO-Images einfach bereitzustellen:

udisksctl loop-setup -r -f image.iso

Dadurch wird ein Loop-Gerät erstellt und das ISO-Image wird bereit zum Mounten angezeigt. Nach dem Abmelden wird das Loop-Gerät von udev beendet.

-r gibt es nur zum lesen.

ephemerr
quelle
Das ist unglaublich, danke für die Info. Verrückt, wie es das erste Mal ist, dass ich einen Hinweis darauf gefunden habe udisksctl.
Oxwivi