Como montar uma imagem de disco?


26

Eu tenho uma imagem de disco myimage.diskque contém a tabela de partições e uma partição primária (ou seja, um sistema de arquivos FAT32). Pense nisso como uma imagem de caneta USB.

Eu quero montar a partição primária em um diretório local. Eu sei como montar uma imagem de partição usando os utilitários de loop, mas aqui tenho uma imagem de disco. Meu palpite é que tenho que montar a imagem "pulando" a tabela de partição, mas como posso fazer isso?


7
Veja também superuser.com/questions/117136/…. Você pode querer usar simplesmente losetup --partscan --find --show disk.imgseguido demount /dev/loop0p1 /mnt/disk
Flow

Respostas:


44

A ferramenta kpartx facilita isso. Ele cria dispositivos de loop no / dev / mapper para cada partição na sua imagem. Em seguida, você pode montar o dispositivo de loop que corresponde à partição desejada sem precisar calcular o deslocamento manualmente.

Por exemplo, para montar a primeira partição da imagem de disco:

kpartx -a -v myimage.disk
mount /dev/mapper/loop0p1 /mnt/myimage

Quando terminar a imagem, remova os dispositivos de loop:

umount /mnt/myimage
kpartx -d -v myimage.disk

Como alternativa, se você possui um kernel recente e passa loop.max_part = 63 na inicialização (se o loop estiver embutido) ou no modprobe (se o loop for um módulo), é possível fazer o seguinte:

losetup /dev/loop0 myimage.disk
partprobe /dev/loop0             # Re-read partition table if /dev/loop0 was used with a different image before
mount /dev/loop0p1 /mnt/myimage

Quando você terminar o loop:

losetup -d /dev/loop0

1
Você não precisa do -o loopacima, /dev/mapper/loop0p1já é um dispositivo de bloco (um dispositivo mapeador em cima de um dispositivo de loop, você não deseja outra camada de dispositivo de loop em cima disso).
7284 sch

2
Se você não receber dispositivos de partição ( /dev/loop0p1etc.) após a execução losetup, execute partprobe /dev/loop0.
Vladimir Panteleev 15/02

kpartxparece ser instalado por padrão no Linux Mint 18.
UNFA

4

Encontrou isto:

http://www.andremiller.net/content/mounting-hard-disk-image-including-partitions-using-linux

o que parece exatamente o que eu estava procurando.

Aqui está a parte principal:

mount -o loop,ro,offset=32256 hda.img /mnt/rabbit

onde o valor do deslocamento está em bytes. A maneira sugerida de obter o deslocamento é apontar partedpara a imagem, depois a unidade B para bytes e obter o valor inicial da saída de impressão. Como alternativa, supondo que você tenha espaço em disco, faça o óbvio: depois de ter o deslocamento e o tamanho, use apenas ddpara extrair cada partição para um arquivo separado.


1
Para escrever uma resposta realmente ótima, você poderia explicar as partes mais importantes aqui? Ter um link é ótimo, mas ter as informações aqui seria melhor.
slhck

1
Aqui está a parte principal: mount -o loop,ro,offset=32256 hda.img /mnt/rabbitonde o valor de offsetestá em bytes. A maneira sugerida de obter o deslocamento é apontar para a imagem e depois unit Bpara bytes e pegar o startvalor da printsaída. Como alternativa, supondo que você tenha espaço em disco, faça o óbvio: depois de ter o deslocamento e o tamanho, use apenas ddpara extrair cada partição para um arquivo separado.
um CVn

Sim, desculpe por ser muito curto. Como Michael apontou, a parte relevante é, obviamente, a mountlinha que contém a offsetopção.
Emiliano

2
local_image_file=/var/tmp/image.img
first_byte=$(parted -m ${local_image_file} unit B print | grep Linux | cut --fields 2 --delimiter ':' | sed 's/.$//')
loop_file=/var/tmp/loop
mkdir -p ${loop_file}
mount -o loop,ro,offset=${first_byte} ${local_image_file} ${loop_file}

1
Embora isso possa responder à pergunta, seria uma resposta melhor se você pudesse fornecer alguma explicação para isso.
DavidPostill

2

Hoje em dia você pode minimizar seu trabalho usando udisks. Solução do ArchWiki: udisks - Mount loop devices

Para montar facilmente imagens ISO, use o seguinte comando:

udisksctl loop-setup -r -f image.iso

Isso criará um dispositivo de loop e mostrará a imagem ISO pronta para montar. Uma vez desmontado, o dispositivo de loop será finalizado pelo udev.

-r lá para a opção somente leitura.


Isso é incrível, obrigado pela informação. Louco como é a primeira vez que encontrei uma referência udisksctl.
Oxwivi 01/01
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.