Jak zamontować obraz dysku z wieloma partycjami w systemie Linux?

23

Pobrałem surowy obraz karty SD, który ma dwie partycje.

Powodowało to pewne błędy systemu plików, gdy próbowałem zapisać go bezpośrednio na karcie SD. Nie jestem pewien, czy karta jest uszkodzona, czy obraz.

Czy istnieje sposób na sprawdzenie tego obrazu bez zapisywania go na karcie fizycznej? Jak próba zamontowania partycji osobno lub sprawdzenie tabel?

Atilla Filiz
źródło

Odpowiedzi:

20

Za pomocą kpartx lub partx można tworzyć urządzenia pętlowe dla partycji na obrazie, a następnie montować je. Więc albo:

$ sudo kpartx -v -a file.iso
add map loop0p1 (253:17): 0 8382464 linear 7:1 2048
$ mount /dev/mapper/loop0p1 ./mnt_point
...  do something with the partition  ...
$ umount ./mnt_point
$ kpartx -d -v file.iso
del devmap : loop0p1
loop deleted : /dev/loop0

lub:

$ sudo partx -a -v file.iso
partition: none, disk: file.iso, lower: 0, upper: 0
Trying to use '/dev/loop0' for the loop device
/dev/loop0: partition table type 'dos' detected
range recount: max partno=1, lower=0, upper=0
/dev/loop0: partition #1 added
$ mount /dev/loop0p1 ./mnt_point
...  do something with the partition  ...
$ umount /dev/loop0p1 ./mnt_point
$ sudo partx -d -v /dev/loop0
partition: none, disk: /dev/loop0, lower: 0, upper: 0
/dev/loop0: partition #1 removed

Zobacz także Jak zamontować obraz dysku?

Catskul
źródło
Dzięki @ frank-breitling. Edycja została odrzucona przez recenzentów, zanim miałem okazję się do niej dostać.
Catskul
14

losetup -Pf w util-linux> = 2.21 (Ubuntu 16.04)

sudo losetup -Pf disk.img
sudo mkdir /mnt/loop0p1
sudo mount /dev/loop0p1 /mnt/loop0p1

Zobacz stronę podręcznika użytkownika losetup (8), a także /ubuntu/69363/mount-single-partition-from-image-of-entire-disk-device/673257#673257

losetup -P automatyzacja

Oto funkcje automatyzacji, jeśli 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"
)
Ciro Santilli
źródło
1

Możesz spróbować:

mount -t type -o loop ./image / mnt

gdzie „type” = fs type, a „image” to nazwa pobranego pliku

Elegantować się
źródło
3
Myśląc o tym, może nie działać z obrazem zawierającym wiele partycji.
Tog
2
będziesz musiał określić przesunięcie pojedynczej partycji do zamontowania za pomocą czegoś takiego jak „mount -o loop, ro, offset = XXXXXXXX imagefile / mnt”
Mr Shunz
1
Czy losetup nie działałby w celu określenia przesunięcia?
Tog
masz rację ... z losetup możesz ustawić przesunięcie partycji, aby utworzyć urządzenie loopback, które można po prostu zamontować za pomocą mount / dev / loopX / mnt
Mr Shunz
1

Ta odpowiedź na ServerFault sugeruje:

użyć programu losetup, aby uzyskać / dev / loop? urządzenie, a następnie użyj na nim kpartx, aby utworzyć odwzorowania deweloperskie dla partycji w pliku obrazu.

Pan Shunz
źródło