Como montar uma imagem de disco a partir da linha de comando?

28

Eu sei montar uma unidade que tenha um arquivo de dispositivo correspondente em / dev, mas não sei como fazer isso para uma imagem de disco que não represente um dispositivo físico e não tenha um análogo em / dev (por exemplo, um arquivo ISO ou uma imagem de disquete). Eu sei que posso fazer isso no Mac OS X clicando duas vezes no ícone da imagem do disco no Finder, que montará a unidade automaticamente, mas eu gostaria de poder fazer isso a partir do terminal. Não tenho certeza se existe uma maneira geral do Unix de fazer isso, ou se isso é específico da plataforma.

    
por user628544 14.10.2016 / 14:56

4 respostas

29

Se fosse uma imagem do disco rígido com uma tabela de partições MBR, eu iria fdisk a imagem para encontrar o deslocamento para a partição que eu preciso montar.

fdisk -lu /path/disk.img

Então eu montaria passando o offset.

mount -o loop,offset=xxxx /path/disk.img /mnt/disk.img.partition

O valor de deslocamento é em bytes, enquanto fdisk mostra uma contagem de blocos, então você deve multiplicar o valor da coluna "Início" ou "Iniciar" da fdisk output por 512 (ou qualquer que seja o bloco tamanho é) para obter o deslocamento para montar em.

    
por 14.10.2016 / 15:30
26

Na maioria dos sistemas GNU modernos, o comando mount pode lidar com isso:

mount -o loop file.iso /mnt/dir

para desmontar, basta usar o comando umount

umount /mnt/dir

Se o seu sistema operacional não tiver essa opção, você poderá criar um dispositivo de loop :

losetup -f # this will print the first available loop device ex:/dev/loop0
losetup /dev/loop0 /path/file.iso #associate loop0 with the specified file
mount /dev/loop0 /mnt/dir #It may be necessary specify the type (-t iso9660)

para desmontar você pode usar -d :

umount /mnt/dir
losetup -d /dev/loop0

Se o arquivo tiver partições, por exemplo, uma imagem HD, você pode usar o parâmetro -P (dependendo do seu SO), ele irá mapear as partições no conteúdo do arquivo:

losetup -P /dev/loop0 /path/file.iso # will create /dev/loop0 
ls /dev/loop0p* #the partitions in the format /dev/loop0pX
    
por 14.10.2016 / 15:17
7

Tente:

mount -o loop /path/to/file.iso /mnt

Você pode adicionar, depois de loop :

  • -t msdos para o disquete
  • -t iso9660 para imagem de CD-ROM

O Linux geralmente tenta adivinhar o tipo de arquivo.

    
por 14.10.2016 / 15:05
4

losetup -P de automação para imagens com várias partições

Como montar uma imagem de disco a partir da linha de comando? | Unix & O Stack Stack do Linux mencionou losetup -P , e aqui estão algumas funções úteis do Bash para automatizar ainda mais as coisas. 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"
)
    
por 15.03.2018 / 16:10