Come montare un'immagine del disco multi-partizione in Linux?


22

Ho scaricato un'immagine della scheda SD grezza che ha due partizioni.

Ha causato alcuni errori del file system quando ho provato a dd direttamente su una scheda SD. Non sono sicuro se la scheda sia difettosa o l'immagine.

C'è un modo per esaminare questa immagine senza scriverla su una carta fisica? Ti piace provare a montare le partizioni separatamente o controllare le tabelle?

Risposte:


18

Puoi usare kpartx o partx per creare dispositivi loop per le partizioni sull'immagine, e poi montarle. Quindi neanche:

$ 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

o:

$ 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

Vedi anche Come posso montare un'immagine del disco?


Grazie a Frank Breitling. La modifica è stata rifiutata dai revisori prima che io potessi accedervi.
Catskul,

13

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

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

Vedi la pagina man losetup (8) e anche https://askubuntu.com/questions/69363/mount-single-partition-from-image-of-entire-disk-device/673257#673257

losetup -P automazione

Ecco le funzioni per automatizzare se ulteriormente. Uso:

$ 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

Fonte:

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"
)

1

Puoi provare:

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

dove "type" = fs type e "image" è il nome del file scaricato


3
Pensandoci, potrebbe non funzionare con un'immagine contenente più partizioni.
Tog

2
dovrai specificare l'offset della singola partizione da montare con qualcosa come "mount -o loop, ro, offset = XXXXXXXX imagefile / mnt"
Mr Shunz,

1
Losetup non funzionerebbe per specificare un offset?
Tog

hai ragione ... con losetup puoi impostare un offset sulla partizione per creare un dispositivo loopback che può essere semplicemente montato con mount / dev / loopX / mnt
Mr Shunz,

1

Questa risposta su ServerFault suggerisce:

usare losetup per ottenere un / dev / loop? dispositivo, quindi usa kpartx su di esso per creare mappature di sviluppo per le partizioni nel file di immagine.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.