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.

Usunięte
źródło
stackoverflow.com/questions/1419489/...
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

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
bhelm
źródło
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.

GrGr
źródło
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
baumgart
źródło
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.

Richard June
źródło
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ż

Ciro Santilli
źródło
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.

Kasun
źródło
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
Journeyman Geek
źródło