Zamontuj pojedynczą partycję z obrazu całego dysku (urządzenia)


117

Zrobiłem obraz całego dysku

dd if=/dev/sda of=/media/external_media/sda.img

Teraz problem polega na tym, że chciałbym zamontować system plików ext4, który był na tym dysku, ale

mount -t ext4 -o loop /media/external_media/sda.img /media/sda_image

oczywiście powoduje błąd superbloku, ponieważ obraz zawiera cały dysk (MBR, inne partycje), a nie tylko partycję, której potrzebuję. Myślę, że powinienem znaleźć sposób, aby obraz dysku pojawił się w /dev/folderze ...

Czy ktoś wie jak to zrobić?

PS: Zawsze mogę utworzyć ddkopię zapasową obrazu na oryginalnym dysku, ale byłoby to bardzo niewygodne (zaktualizowałem system operacyjny i chciałbym go zachować bez zmian)

Odpowiedzi:


142

Pobierz układ partycji obrazu

$ sudo fdisk -lu sda.img
...
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
...
  Device Boot      Start         End      Blocks   Id  System
sda.img1   *          56     6400000     3199972+   c  W95 FAT32 (LBA)

Oblicz przesunięcie od początku obrazu do początku partycji

Rozmiar sektora * Start = (w przypadku) 512 * 56 = 28672

Zamontuj go na / dev / loop0 za pomocą offsetu

sudo losetup -o 28672 /dev/loop0 sda.img

Teraz partycja znajduje się na / dev / loop0 . Możesz go sprawdzić , zamontować itp

sudo fsck -fv /dev/loop0
sudo mount /dev/loop0 /mnt

Odmontuj

sudo umount /mnt
sudo losetup -d /dev/loop0

Dziękuję bardzo! Działa jak urok! Sprawiłeś, że mój dzień (i uratowałeś niewinnego Ocelota przed brutalnym usunięciem; P)
Nicola Feltrin

8
Przynajmniej podczas bashu powłoka może nawet wykonać matematykę dla ciebie:sudo losetup -o $((56*512)) /dev/loop0 sda.img
Enno Gröper

1
Jest to nie tylko pomocne, jest absolutnie niesamowite.
andho

Co jeśli są .img1 i .img2? „win8.raw1 * 2048 718847 358400 7” i „win8.raw2 718848 52426751 25853952 7”
Enkouyami

6
Jeszcze prostsze: mount -o loop,offset=$((56 * 512)) sda.img /mnt. Źródło: madduck.net/blog/…
ostrokach

105

Aktualizacja dla Ubuntu 16.04: dzięki nowemu losetupjest to teraz łatwiejsze:

sudo losetup -Pf disk_image.raw

Zobacz resztę odpowiedzi dla starszych wersji Ubuntu.


Prostym rozwiązaniem jest użycie kpartx : obliczy układ partycji i odwzoruje każde z nich na urządzenia blokowe. Następnie wszystko, co musisz zrobić, to zamontować ten, który chcesz.

Otwórz terminal, zlokalizuj obraz dysku i wprowadź następujące polecenie:

$ sudo kpartx -av disk_image.raw 
add map loop0p1 (252:2): 0 3082240 linear /dev/loop0 2048
add map loop0p2 (252:3): 0 17887232 linear /dev/loop0 3084288

To zostało utworzone loop0p1i loop0p2pod /dev/mapper. Na podstawie danych wyjściowych widać rozmiary partycji, które pomagają je zidentyfikować. Możesz zamontować ten, który chcesz:

$ sudo mount /dev/mapper/loop0p2 /mnt

Alternatywnie, urządzenie blokujące jest wykrywane przez Nautilus i można je zamontować z paska bocznego:

wprowadź opis zdjęcia tutaj

Po zakończeniu odmontuj zamontowane urządzenie i usuń mapowanie urządzenia:

$ sudo umount /mnt
$ sudo kpartx -d disk_image.raw

Doskonała odpowiedź, szybka i łatwa, unikanie kroku pomnażania jest fajna
Starszy Geek

sudo apt-get install kpartx- aby uzyskać dostęp do kpartx. kpartxOgniwem początku postu jest „pułapka” moim zdaniem. Linki sugerujące instalację oprogramowania są nie-nie.
Hannu,

1
@Hannu, linki integrujące się z Software Center są powszechną praktyką na askubuntu , chociaż w tym konkretnym przypadku można dodać typową ikonę i zaktualizować adres URL.
Joni

losetup -Pfzostał wcześniej wspomniany przez askubuntu.com/a/496576/52975 Polecam przynajmniej link do tej odpowiedzi.
Ciro Santilli 22 改造 中心 法轮功 六四 事件 事件

1
Do Twojej wiadomości, losetup -Pf ..polecenie utworzy takie urządzenia /dev/loopXpY, które nadal trzeba zamontować. Możesz znaleźć Xod patrząc na wynik losetuppolecenia. Jest Yto numer partycji.
Gunchars,

26

Edycja : działa z util-linux> = 2.21 . W czasie statków pisanie Ubuntu z wersji 2.20 tylko

Od człowieka losetup :

       -P, --partscan
          force kernel to scan partition table on newly created loop device

Więc po prostu biegnij

$ sudo losetup -f --show -P /path/to/image.img

aby utworzyć węzły urządzeń dla każdej partycji obrazu dysku na pierwszym nieużywanym urządzeniu pętli i wydrukować je na standardowe wyjście. Jeśli użyjesz /dev/loop0urządzenia, stworzy to przynajmniej /dev/loop0p1, że będziesz mógł zamontować jak zwykle.


2
Gdzie znajdę tę wersję losetup? Ten, który mam w Ubuntu 14.04, ma stronę podręczną z lipca 2003 r. (Util-linux) i nie ma opcji `-P` (ani nic innego) do skanowania partycji.
Hannu,

1
Przepraszam, popełniłem błąd, korzystałem z tej opcji w Arch Linux, która jest wyposażona w nowszą wersję pakietu util-linux. Wygląda na to, że Ubuntu niestety utkwiło w wersji 2.20.1, która została wydana w styczniu 2012 roku! --partscanOpcja została wprowadzona w util-linux 2.21
Ludovic Ronsin

1
Cóż, gnome-disksma możliwość montowania obrazu dysku i jego partycji. (<- to jest do instalacji i używania bash / Terminal, Disksw myślniku też to znajduje).
Hannu

2
To powinna być zaakceptowana odpowiedź ...
matthid,

@matthid Czy w ogóle można zmienić zaakceptowaną odpowiedź? To jest dobre (a odpowiedź kpartx jest w rzeczywistości zależna od tej wersji losetup), ale jest prawie trzy lata nowsza niż zaakceptowana odpowiedź - co było wtedy sposobem.
Auspex,

9

Spróbuj gnome-disk-image-mounter:

gnome-disk-image-mounter sda.img

Nie sudowymagane Zostanie zamontowany na /media/your_user_name/partition_name, podobnie jak napędy USB.


1
Działa dobrze 16.04. Właśnie zainstalowałem nową wersję 18.04, a narzędzia pytają o hasło sudo, aby uzyskać dostęp do urządzenia wirtualnego / dev / loopXX :(
Laurent

7

losetup -P automatyzacja

losetup -Pjest najlepszą metodą zaczynającą się od Ubuntu 16.04, jak wspomniano na https://askubuntu.com/a/496576/52975 , tutaj są funkcje automatyzacji, jeśli są dalsze. Stosowanie:

$ los my.img
/dev/loop0
/mnt/loop0p1
/mnt/loop0p2

$ ls /mnt/loop0p1
/whatever
/files
/youhave
/there

$ sudo losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                                                                                      DIO
/dev/loop1         0      0         0  0 /full/path/to/my.img

$ # Cleanup.
$ losd 0
$ ls /mnt/loop0p1
$ ls /dev | grep loop0
loop0

Źródło:

los() (
  img="$1"
  dev="$(sudo losetup --show -f -P "$img")"
  echo "$dev"
  for part in "$dev"?*; do
    if [ "$part" = "${dev}p*" ]; then
      part="${dev}"
    fi
    dst="/mnt/$(basename "$part")"
    echo "$dst"
    sudo mkdir -p "$dst"
    sudo mount "$part" "$dst"
  done
)
losd() (
  dev="/dev/loop$1"
  for part in "$dev"?*; do
    if [ "$part" = "${dev}p*" ]; then
      part="${dev}"
    fi
    dst="/mnt/$(basename "$part")"
    sudo umount "$dst"
  done
  sudo losetup -d "$dev"
)

moduł pętli max_part config

To przyzwoita metoda przed 16.04.

loop jest modułem jądra wbudowanym w jądro w Ubuntu 14.04.

Jeśli odpowiednio skonfigurujesz, Linux automatycznie podzieli urządzenia.

cat /sys/module/loop/parameters/max_part

mówi, ile partycji loopmogą wygenerować urządzenia.

Jest to 0domyślnie na Ubuntu 14.04, dlatego nie następuje automatyczne dzielenie.

Aby to zmienić, możemy dodać:

options loop max_part=31

do pliku w /etc/modprobelub:

GRUB_CMDLINE_LINUX="loop.max_part=31"

do /etc/default/grubi wtedy sudo update-grub.

Jak ustawić parametr modułu jest również omówiony w: Jak dodać parametry modułu jądra?

Po ponownym uruchomieniu komputera:

sudo losetup -f --show my.img

montuje obraz na /dev/loopXurządzeniu i automatycznie montuje partycje na /dev/loopXpYurządzeniach.

Jest to więc najwygodniejsza metoda, jeśli chcesz zrestartować komputer.

Zobacz też


5

Użyj losetup, aby dołączyć cały obraz dysku.

# sudo losetup /dev/loop2 sda.img

Następnie użyj mdadm, aby utworzyć urządzenie md, a urządzenia blokowe zostaną utworzone dla wszystkich partycji.

# sudo mdadm --build --level=0 --force --raid-devices=1 /dev/md2 /dev/loop2
mdadm: array /dev/md2 built and started.

Teraz powinieneś zobaczyć urządzenia partycji.

nile-172-b0fef38-76:/mnt/sdb1 # ls -l /dev/md2*
brw-rw---- 1 root disk   9, 2 Oct 10 12:37 /dev/md2
brw-rw---- 1 root disk 259, 0 Oct 10 12:37 /dev/md2p1

To zabawna sztuczka :)
Johan Boulé

4

Moim zdaniem najprostszym sposobem jest użycie, mount -o loop,offset=...jak wspomniano w tej odpowiedzi na StackOverflow . Pomysł jest następujący:

fdisk -l $IMAGE
# calculate the offset in bytes
mount -o loop,offset=$OFFSET $IMAGE $MOUNTPOINT

Ta metoda jest najlepsza, ponieważ nie wymaga usuwania urządzenia pętli po zamontowaniu zamontowanej partycji.

Aby jeszcze bardziej uprościć zadanie (które jest potrzebne, jeśli robisz to często), możesz użyć mojego skryptu, mountimgaby zrobić wszystko za Ciebie. Wystarczy pobrać go z https://github.com/AlexanderAmelkin/mountimg i użyć w ten sposób:

mountimg /media/external_media/sda.img 2 /media/sda_image

Możesz również określić typ systemu plików i inne dodatkowe opcje montowania, jeśli chcesz:

mountimg /media/external_media/sda.img 2 /media/sda_image -t vfat -o codepage=866,iocharset=utf-8

Kiedy skończysz z partycją, po prostu umount:

umount /media/sda_image
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.