Como posso montar uma imagem de disco?

21

Eu tenho uma imagem de disco myimage.disk que 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 eu tenho imagem de disco. Meu palpite é que eu tenho que montar a imagem "pulando" a tabela de partição, mas como posso fazer isso?

    
por Emiliano 10.10.2011 / 12:04

5 respostas

42

A ferramenta kpartx facilita isso. Cria dispositivos de loop em / dev / mapper para cada partição na sua imagem. Então 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ê tiver um kernel recente e passar o loop.max_part = 63 na inicialização (se o loop estiver integrado) ou com o modprobe (se o loop for um módulo), você poderá fazê-lo desta maneira:

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 terminar o loop:

losetup -d /dev/loop0
    
por 11.10.2011 / 23:39
4

Encontrou isto:

link

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 é em bytes. A maneira sugerida para obter o deslocamento é apontar parted na imagem, depois a unidade B para bytes e obter o valor inicial da saída de impressão. Como alternativa, supondo que você tenha o espaço em disco, faça o óbvio: depois de ter o deslocamento e o tamanho, use apenas dd para extrair cada partição para um arquivo separado.

    
por 10.10.2011 / 12:23
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}
    
por 20.01.2015 / 23:59
0

Hoje você pode minimizar seu trabalho usando udisks . Solução de ArchWiki: udisks - Dispositivos de loop de montagem

To easily mount ISO images, use the following command:

udisksctl loop-setup -r -f image.iso

This will create a loop device and show the ISO image ready to mount. Once unmounted, the loop device will be terminated by udev.

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

    
por 07.06.2017 / 08:20
-2

Obrigado pelo kpartx, é realmente ótimo, ou pelo menos se funcionasse como deveria.

Meu problema é montar arquivos .VHD criados pela ferramenta M $ diskpart e ter partições criadas pela mesma ferramenta.

Pelo menos o kpartx cria o / dev / loop1 e com o gparted / dev / loop1 eu pude ver que a partição NTFS tem algum tipo de problema.

Eu digo em voz alta, os arquivos .VHD são de tamanho fixo e todos eles podem ser montados pela ferramenta vhdmount no Windows Vista e com o gerenciador de disco em 7, 8, 8.1 e 10 sem qualquer problema, também pode ser usado por Grub2 + memdisk como a unidade de inicialização para o Vista, 7, 8, 8.1 e 10, etc. Sim, um arquivo VHD para cada Windows, então não misture nada (todas as partições de sistema em um disco com apenas uma partição 100% estendida, cada Windows em sua própria partição lógica), então tudo é inicializado bem sem qualquer partição primária física (arquivos VHD também são armazenados dentro da partição lógica).

Cada VHD tem apenas uma partição primária NTFS (estilo MBR).

Cada disco VHD é 32MiB e a partição interna é 31MiB (1MiB livre no final).

Também executando fdisk e usando o comando i mostra uma geometria C / H / S muito rara! Dependio do SO tambem os valores mudam! o que diabos está fazendo o diskpart ao criar as partições!

Se eu tiver tempo eu tentaria recriar a partição e refazer todo o trabalho para colocar lá os bootloaders (bootmgr + BCD).

Mas eu tenho medo se arquivos .VHD são suportados pelo kpartx, e como refazer todo o trabalho para colocar bootloaders, um dentro de cada VHD, é uma tarefa enorme, eu não quero perder meu tempo (mais de 8 horas para fazer essa tarefa).

Eu odeio o mount -o loop, ele tende a quebrar coisas dentro desses arquivos.

P.D .: losetup --partscan ... me diz também menos que gparted / dev / loop1, ele não detecta a partição (somente saídas / dev / loop1).

    
por 25.01.2017 / 13:24