Jak zamontować obraz karty SD utworzony za pomocą DD?

21

Stworzyłem obraz mojej karty SD Raspberry Pi przy użyciu dd:

sudo dd if=/dev/sdf of=/home/myusername/raspberry-backup-2014-04-10.img

Karta SD zawiera dwie partycje (jedna vat, jedna ext4), które są automatycznie montowane po podłączeniu karty.

Moje pytanie: Jak mogę zamontować te partycje z pliku .img?


Więcej szczegółów:

$ fdisk -l raspberry-backup-2014-04-10.img 

Disk raspberry-backup-2014-04-10.img: 3974 MB, 3974103040 bytes
255 heads, 63 sectors/track, 483 cylinders, total 7761920 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000981cb

                          Device Boot      Start         End      Blocks   Id  System
raspberry-backup-2014-04-10.img1            8192      122879       57344    c  W95 FAT32 (LBA)
raspberry-backup-2014-04-10.img2          122880     7761919     3819520   83  Linux
MrD
źródło
Chcesz zamontować obraz bez zapisywania go na karcie SD?
OrangeTux,
Tak, chcę mieć pełny dostęp do systemu plików zapisanego w pliku .img, aby móc kopiować / modyfikować / usuwać / itp. pliki bez karty SD
MrD
Może to pytanie ci pomoże.
OrangeTux,
Niestety to nie działa, próbowałem obu prób. Pierwszy nie utworzył urządzenia / dev / loop0p1. Drugi (odpowiednio obliczyłem punkt początkowy) rzuca wrong fs type, bad option, bad superblock on /dev/loop0, missing codepage or helper program, or other errorproblem
Mr
Ponadto sudo fdisk -l /dev/loop0twierdzi: Dysk / dev / loop0 nie zawiera prawidłowej tablicy partycji.
Mr

Odpowiedzi:

33

Aby uniknąć konieczności tworzenia osobnych obrazów dla każdej partycji lub instalowania narzędzia, takiego jak kpartx, możesz zamontować każdą partycję osobno, określając polecenie offsetw mountpoleceniu.

Najpierw sprawdź partycje w pliku obrazu i określ przesunięcie, używając fdisk:

$ fdisk -u -l rpi_image280914 

Disk rpi_image280914: 16.0 GB, 16012804096 bytes
255 heads, 63 sectors/track, 1946 cylinders, total 31275008 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000cdac7

           Device Boot      Start         End      Blocks   Id  System
rpi_image280914p1   *        2048      514047      256000    c  W95 FAT32 (LBA)
rpi_image280914p2          540672    31242239    15350784   83  Linux

Wybierz żądany Startsektor partycji i pomnóż tę wartość przez Unitsrozmiar. Więc jeśli chcesz drugą partycję, dostaniesz 540672 * 512 = 276824064.

Teraz utwórz folder i zamontuj partycję:

mkdir rpi_partition2
sudo mount -o loop,offset=276824064 rpi_image280914 rpi_partition2/

Po zakończeniu robienia tego, co chcesz z danymi partycji:

sudo umount rpi_partition2/
rm -r rpi_partition2/
Pasza
źródło
17

Po dodatkowych testach sam znalazłem rozwiązanie: kpartx

sudo kpartx -a raspberry-backup-2014-04-10.img

To polecenie zostało utworzone /dev/mapper/loop0p1i /dev/mapper/loop0p2. Następnie partycje te można zamontować prosto:

sudo mount -o rw -t ext4 /dev/mapper/loop0p2 mount_target/
MrD
źródło
1

jeśli Twoim celem jest eksploracja lub modyfikacja zawartości partycji (systemu plików), ten wiersz poleceń zainstaluje system plików zrzutu karty SD moja_sdcard_dump.img do katalogu katalog_instalacyjny .

part_id=2; INFILE=my_sdcard_dump.img; MOUNTPT=mount_dir PARTITION=${part_id}; sudo mount "$INFILE" "$MOUNTPT" -o loop,offset=$[ `/sbin/sfdisk -d "$INFILE" | grep "start=" | head -n $PARTITION | tail -n1 | sed 's/.*start=[ ]*//' | sed 's/,.*//'` * 512 ]
Davlar
źródło
0

Radzenie sobie z obrazem całego dysku z wieloma partycjami jest dość trudne . Linux nie został zaprojektowany do odczytywania tabeli partycji ze zwykłego pliku, nawet gdy jest podłączony do urządzenia z pętlą zwrotną, więc musisz dokładnie zidentyfikować przesunięcia partycji i przekazać je do mountpolecenia.

Preferowanym sposobem byłoby utworzenie osobnych obrazów dla każdej partycji:

sudo dd if=/dev/sdf1 of=/home/myusername/raspberry-backup-sdf1-2014-04-10.img
sudo dd if=/dev/sdf2 of=/home/myusername/raspberry-backup-sdf2-2014-04-10.img

Teraz możesz łatwo traktować te pliki tak, jakby były pojedynczymi partycjami na dysku, instalując je tak, jak normalną partycję dysku, poprzez mapowanie ich na urządzenie pętlowe . Urządzenie pętli lub urządzenie pętli zwrotnej to urządzenie wirtualne, które zapewnia warstwę tłumaczenia dla systemu Linux w celu traktowania pliku jako urządzenia blokowego (takiego jak dysk lub partycja).

Urządzenia z pętlą są zwykle /dev/loop0przez /dev/loop8. Zidentyfikuj nieużywane urządzenie pętli za pomocą losetuppolecenia:

$ sudo losetup /dev/loop0
loop: can't get info on device /dev/loop0: No such device or address

Ta odpowiedź wskazuje nieprzypisane urządzenie pętli. Teraz możemy przypisać urządzenie pętli do jednego z naszych plików obrazów:

$ sudo losetup /dev/loop0 /home/myusername/raspberry-backup-sdf1-2014-04-10.img

Brak wyniku tego polecenia oznacza sukces. Teraz /dev/loop0jest dla większości celów funkcjonalnie równoważny /dev/sdf1z kartą SD i możesz go zamontować w normalny sposób:

sudo mount -t vfat /dev/loop0 /media/sdimage-1

Powtórz ten proces, używając innego urządzenia pętli, aby zamontować drugą partycję. Po zakończeniu odmontuj systemy plików i usuń przypisanie urządzeń pętli:

sudo umount /dev/loop0
sudo losetup -d /dev/loop0
tgies
źródło
Chciałbym uniknąć tworzenia dwóch plików obrazów, ponieważ - oprócz innych drobnych powodów - chciałbym rozpowszechniać obraz innym osobom, aby mogli go użyć do inicjalizacji kart SD. Dlatego różne partycje, takie jak / boot itp., Muszą znajdować się w jednym pliku.
Mr