Montando vários arquivos img como dispositivo de loop único

15

Existe uma maneira de pegar um arquivo img de disco que é dividido em partes e montá-lo como um dispositivo de loop único?

    
por Prospero 20.07.2011 / 20:53

4 respostas

15

Eu não acho que você possa fazer isso no lugar, mas se você tiver espaço suficiente, isso deve funcionar:

# Create the files that will hold your data
dd if=/dev/zero of=part-00 bs=1M count=4k
dd if=/dev/zero of=part-01 bs=1M count=4k

# Create the loop devices
losetup /dev/loop0 part-00
losetup /dev/loop1 part-01

# Create a RAID array
mdadm --create /dev/md0 --level=linear --raid-devices=2 /dev/loop0 /dev/loop1

# Copy the original filesystem
dd if=original-file-00 of=/dev/md0 bs=512
# Look at the records written value
dd if=original-file-01 of=/dev/md0 bs=512 seek=<sum of records written values so far>

# Mount the new filesystem
mount /dev/md0 /mnt

Você não pode simplesmente criar uma matriz RAID a partir dos arquivos originais, pois os discos RAID possuem um cabeçalho específico, onde o número de discos, o nível do RAID, etc. é armazenado. Se você fizer isso, parte dos seus arquivos originais será sobrescrita.

Você pode usar o mdadm --build para criar uma matriz sem metadados, mas, em seguida, você deve primeiro fazer um backup. Ou se a montagem somente leitura for suficiente:

losetup -r /dev/loop0 original-00
losetup -r /dev/loop1 original-11
mdadm --build /dev/md0 --level=linear --raid-devices=2 /dev/loop0 /dev/loop1
mount /dev/md0 /mnt

Por que você quer fazer isso? Se o seu sistema de arquivos não puder manipular arquivos de > 4GB, você deve simplesmente mudar para um sano.

    
por 21.07.2011 / 23:30
2

Para montar uma imagem de disco dividido (ou imagem de partição) você deve usar affuse dos afftools que são mantidos atualmente aqui: link

Então, se você tiver um arquivo, divida em vários subficheiros test_img.000, test_img.001, test_img.002, test_img.003, test_img.004, test_img.005, test_img.006, test_img.007, test_img.008, test_img.009

então você pode se juntar a eles virtualmente com affuse

# affuse test_img.000 /mnt/combine
# ls -lh /mnt/combine
total 0
-r--r--r-- 1 root root 2.0G 1969-12-31 16:00 test_img.000.raw

(isso combina todos os arquivos juntos, começando com o arquivo 000, depois 001, 002,…)

E depois monte a imagem

mount -o ro,loop,offset=329043456 /mnt/combine/test_img.000.raw /mnt/test

O uso é descrito aqui e alguns exemplos aqui . Uma página de manual também está disponível após a compilação e instalação, ou aqui .

PS: Para mim, affuse só funcionou se os arquivos divididos tivessem um tamanho que fosse múltiplo de 512 bytes.

    
por 19.11.2015 / 14:17
0

A coisa mais próxima que eu sei até agora de uma solução é criar uma VM VMware. Você inicia um live CD do Linux, como o Rescatux ou o Knoppix, cria uma pasta compartilhada SMB no computador host, monta esse compartilhamento SMB em sua VM e, em seguida, vocêdd a imagem no HD virtual. Por padrão, o VMware salva suas imagens de disco como arquivos divididos, por isso é a coisa mais próxima de ler diretamente uma imagem de disco dividida em vários arquivos.

Mais tarde, se quiser acessar os arquivos do seu computador host, você pode tentar adicionar um segundo HD virtual à imagem e copiar os arquivos lá. Em seguida, você configura uma pasta compartilhada SMB na VM e se conecta a ela a partir do seu host. Dessa forma, você pode, por exemplo, violar o limite de arquivo de 4 GB do FAT32 caso esteja usando um iPod Classic (que apenas grava o fat32) ou o cartão SD do smartphone (geralmente é necessário instalar uma ROM personalizada para para usar Ext3 ou NTFS no armazenamento externo, para isso você precisa de um telefone de um fabricante popular como Samsung ou Motorola, então se você tiver um smartphone chinês, você está perplexo).

No entanto, não é uma solução eficiente, mas desde que me limitei a não poder usar nenhum FS além do fat32 no meu iPod Classic ou em meus smartphones Samsung com ROM de estoque, vasculhei praticamente todo o internet no passado e ainda não consigo encontrar uma solução eficiente para isso. Eu posso até ter que escrever eu mesmo.

PS: Esqueci de mencionar que, se você estiver no Windows, essa pode ser a única maneira de fazer isso.

    
por 21.10.2013 / 00:59
-1

Sob o BSD você pode usar a opção union para montar. No Linux, você pode tentar o unionFS.

    
por 22.08.2011 / 10:03