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ć?


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

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.


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}

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.


To niesamowite, dziękuję za informacje. Szalony, jak po raz pierwszy znalazłem odniesienie do udisksctl.
Oxwivi
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.