Jak mogę zamontować partycję z obrazu urządzenia blokowego (np. HDD) utworzonego w formacie dd w systemie Linux?


34

Mam obraz całego dysku utworzonego za pomocą dd . Struktura dysku jest następująca:

kent@cow:~$ sudo fdisk -l

Disk /dev/sda: 750.1 GB, 750156374016 bytes
255 heads, 63 sectors/track, 91201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000b8508

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           5       90872   729929303+  83  Linux
/dev/sda2           90873       91201     2642692+   5  Extended
/dev/sda5           90873       91201     2642661   82  Linux swap / Solaris

Obraz został utworzony przy użyciu:

dd if=/dev/sda of=image750.img

Jak miałbym, jeśli to możliwe, zamontować / dev / sda1 z obrazu, aby móc odczytać zawartość?

To nie jest opcja ponownego klonowania dysku twardego, wiem, jak to zrobić, jeśli sklonowałem tylko pojedynczą partycję. Mam nadzieję, że nadal jest to możliwe przy obecnym obrazie.



Odpowiedzi:


48

Obecnie istnieje lepszy sposób, nie trzeba już używać przesunięć ani kpartx:

losetup --partscan --find --show disk.img

mount /dev/loop0p1 /mnt

aby zwolnić pętlę 0, użyj po umount:

losetup -d /dev/loop0

8
W mojej instalacji Ubuntu 14.04, losetup nie zapewnia opcji --partscan.
Kuter

1
@Cutter został dodany w util-linux 2.21, Ubuntu 16.04. :-)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Po kpartxpierwszym użyciu, który montuje partycje jak /dev/mapper/loop3p1, chcę tylko wskazać, że losetuptworzy takie urządzenia /dev/loop0p1. Odpowiedź wskazuje na to, ale przeczytałem ją prawdopodobnie 10 razy. : /
Randy Syring

13

Zetknąłem się dzisiaj z tym problemem i chciałem zaktualizować odpowiedzi jako przypomnienie dla siebie. Zamiast samodzielnie obliczać przesunięcie, możesz użyć narzędzia, które zapewnia montowalne urządzenia z obrazu dd: kpartx

http://robert.penz.name/73/kpartx-a-tool-for-mounting-partitions-within-an-image-file/

http://linux.die.net/man/8/kpartx

W danym przypadku potrzebowałoby czegoś takiego

sudo kpartx -a image750.img
sudo mount /dev/mapper/loop1p1 /mount/point -o loop,ro

gdzie pętla1p1 oznacza pierwszą partycję, pętla1p2 dla drugiej itd.


6

Masz pierwszą część: fdisk -l, aby znaleźć przesunięcie początkowe. Weź tę liczbę, pomnóż przez 512, a dostaniesz opcję przesunięcia do zamontowania. Tak więc, dla twojego sda1, 5 * 512 = 2560. Następnie uruchom mount:

mount -o loop,offset=2560 -t auto /path/to/image.dd /mount/point

4

Loopmounting to tylko część odpowiedzi.

Zajrzyj na http://wiki.edseek.com/guide:mount_loopback#accessing_specific_partitions_in_the_image, aby uzyskać pomoc na temat określania partycji. Myślę, że pętla mount -o, offset = 32256 /path/to/image750.img / mnt będzie dla ciebie działać. ale naprawdę powinieneś przeczytać wspomniany samouczek.


przesunięcie wygląda źle; co odpowiada początkowi partycji wynoszącemu 63 (<i> 63 * 512 = 32256 </i>). przesunięcie w odpowiedzi baumgart wygląda bardziej poprawnie dla tej sytuacji. link jest dobrym odniesieniem, ale byłaby lepszą odpowiedzią, gdybyś poświęcił czas na podsumowanie kroków lub poleceń wymaganych dla tej procedury. dzięki!
szarlatan

1

losetup -P automatyzacja

Metoda wspomniana przez https://superuser.com/a/684707/128124 (dodana w util-linux v2.21, dodana Ubuntu 16.04), tutaj są funkcje do jej dalszej automatyzacji. 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 konfiguracja max_part

Przyzwoita metoda przed util-linux v2.21.

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 na stronie : https://askubuntu.com/questions/51226/how-to-add-kernel-module-parameters

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ż


0

Jeśli masz system plików w trybie użytkownika, taki jak bezpiecznik, to w środowiskach stacjonarnych lubi Gnome i zainstalowałeś narzędzie takie jak gnome-disk-image-mounter, to bez rootowania, klikając prawym przyciskiem myszy i otwierając go.


0

Wierzę, że loopmounting jest odpowiedzią -

sudo mkdir /path/to/dir/
mount -o loop example.img /path/to/dir/

Powyższe powinno zamontować go w tym katalogu.

Powinno to odmontować:

umount /path/to/dir
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.