Como montar uma imagem de disco com várias partições no Linux?


23

Eu baixei uma imagem bruta do cartão SD com duas partições.

Causou alguns erros no sistema de arquivos quando tentei dd diretamente em um cartão SD. Não tenho certeza se o cartão está com defeito ou a imagem.

Existe uma maneira de examinar essa imagem sem gravá-la em um cartão físico? Como tentar montar as partições separadamente ou verificar as tabelas?

Respostas:


20

Você pode usar o kpartx ou o partx para criar dispositivos de loop para as partições na imagem e montá-los. Então:

$ 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

ou:

$ 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

Consulte também Como montar uma imagem de disco?


Obrigado @ frank-breitling. A edição foi rejeitada pelos revisores antes que eu tivesse a chance de acessá-la.
Catskul 9/01/19

14

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

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

Consulte a página do manual losetup (8) e também /ubuntu/69363/mount-single-partition-from-image-of-entire-disk-device/673257#673257

losetup -P automação

Aqui estão as funções para automatizar se ainda mais. 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

Você poderia tentar:

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

onde "type" = fs type e "image" é o nome do seu arquivo baixado


3
Pensando nisso, isso pode não funcionar com uma imagem que contém várias partições.
Tog

2
você terá que especificar o deslocamento da única partição para montar com algo como "mount -o loop, ro, offset = XXXXXXXX imagefile / mnt"
Sr. Shunz

11
O losetup não funcionaria para especificar um deslocamento?
Tog

você está certo ... com losetup você pode definir um deslocamento para a partição para criar um dispositivo de auto-retorno que pode ser simplesmente montado com mount / dev / loopX / mnt
Sr. Shunz

1

Esta resposta no ServerFault sugere:

usar losetup para obter um / dev / loop? dispositivo, use o kpartx para criar mapeamentos de desenvolvimento para as partições no arquivo de imagem.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.