Jak mogę zamontować obraz dysku?

26

Mam obraz dysku, myimage.diskktóry zawiera tablicę partycji i partycję podstawową (tj. System plików FAT32). Pomyśl o tym jak o obrazie z pióra USB.

Chcę zamontować partycję podstawową w katalogu lokalnym. Wiem, jak zamontować obraz partycji za pomocą narzędzi pętli, ale tutaj mam obraz dysku. Domyślam się, że muszę zamontować obraz „pomijając” tablicę partycji, ale jak to zrobić?

Emiliano
źródło
7
Zobacz także superuser.com/questions/117136/... Możesz użyć po prostu losetup --partscan --find --show disk.imgnastępujemount /dev/loop0p1 /mnt/disk
Flow

Odpowiedzi:

44

Narzędzie kpartx ułatwia to. Tworzy urządzenia pętlowe w / dev / mapper dla każdej partycji na obrazie. Następnie możesz zamontować urządzenie pętli odpowiadające żądanej partycji bez konieczności ręcznego obliczania przesunięcia.

Na przykład, aby zamontować pierwszą partycję obrazu dysku:

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

Po zakończeniu pracy z obrazem usuń urządzenia pętlowe:

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

Alternatywnie, jeśli masz najnowsze jądro i przekazujesz loop.max_part = 63 podczas rozruchu (jeśli pętla jest wbudowana) lub do modprobe (jeśli pętla jest modułem), możesz to zrobić w ten sposób:

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

Po zakończeniu pętli:

losetup -d /dev/loop0
scott.squires
źródło
1
Nie potrzebujesz -o looppowyższego, /dev/mapper/loop0p1jest już urządzeniem blokowym (urządzenie odwzorowujące na urządzeniu pętli, nie chcesz na nim kolejnej warstwy urządzenia pętli).
sch
2
Jeśli /dev/loop0p1po uruchomieniu nie otrzymasz urządzeń partycji ( itp.) losetup, Uruchom partprobe /dev/loop0.
Vladimir Panteleev
kpartxwydaje się być domyślnie zainstalowany w Linux Mint 18.
unfa
4

Znajdź to:

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

co wydaje się dokładnie tym, czego szukałem.

Oto kluczowa część:

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

gdzie wartość przesunięcia jest w bajtach. Sugerowanym sposobem uzyskania przesunięcia jest wskazanie partedobrazu, a następnie jednostki B dla bajtów i pobranie wartości początkowej z wydruku. Alternatywnie, zakładając, że masz miejsce na dysku, zrób to oczywiste: po uzyskaniu przesunięcia i rozmiaru wystarczy ddwyodrębnić każdą partycję do osobnego pliku.

Emiliano
źródło
1
Czy za napisanie naprawdę świetnej odpowiedzi mógłbyś tu wyjaśnić najważniejsze części? Posiadanie linku jest świetne, ale najlepiej byłoby mieć tutaj informacje.
slhck 10.10.11
1
Oto kluczowa część: mount -o loop,ro,offset=32256 hda.img /mnt/rabbitgdzie wartość offsetjest w bajtach. Sugerowanym sposobem uzyskania przesunięcia jest wskazanie parted na obrazie, a następnie unit Bna bajty i pobranie startwartości z printwyjścia. Alternatywnie, zakładając, że masz miejsce na dysku, zrób to oczywiste: po uzyskaniu przesunięcia i rozmiaru wystarczy ddwyodrębnić każdą partycję do osobnego pliku.
CVn
Tak, przepraszam, że jestem za krótki. Jak zauważył Michael, istotną częścią jest oczywiście mountlinia zawierająca offsetopcję.
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}
rzygać
źródło
1
Chociaż może to odpowiedzieć na pytanie, lepszym rozwiązaniem byłoby podanie wyjaśnienia, dlaczego tak się dzieje.
DavidPostill
2

Obecnie możesz zminimalizować swoją pracę, używając udisks. Rozwiązanie z ArchWiki: udisks - Mount loop devices

Aby łatwo zamontować obrazy ISO, użyj następującego polecenia:

udisksctl loop-setup -r -f image.iso

Spowoduje to utworzenie urządzenia pętlowego i wyświetlenie obrazu ISO gotowego do zamontowania. Po odmontowaniu urządzenie pętli zostanie zakończone przez udev.

-r tam dla opcji tylko do odczytu.

efemerydy
źródło
To niesamowite, dziękuję za informacje. Szalony, jak po raz pierwszy znalazłem odniesienie do udisksctl.
Oxwivi