Tente executar o comando fdisk -l <img file>
. Normalmente, se os .img
arquivos são discos inteiros, digamos, uma VM KVM, eles são tecnicamente um disco virtual.
Exemplo
Eu tenho uma VM do CentOS KVM que aparece assim com o file
comando:
$ file centostest.img
centostest.img: x86 boot sector; partition 1: ID=0x83, active, starthead 1, startsector 63, 208782 sectors; partition 2: ID=0x8e, starthead 0, startsector 208845, 20755980 sectors, code offset 0x48
Correndo fdisk
com ele:
$ sudo /sbin/fdisk -lu /kvm/centostest.img
last_lba(): I don't know how to handle files with mode 81ed
You must set cylinders.
You can do this from the extra functions menu.
Disk /kvm/centostest.img: 0 MB, 0 bytes
255 heads, 63 sectors/track, 0 cylinders, total 0 sectors
Units = sectors of 1 * 512 = 512 bytes
Device Boot Start End Blocks Id System
/kvm/centostest.img1 * 63 208844 104391 83 Linux
/kvm/centostest.img2 208845 20964824 10377990 8e Linux LVM
Partition 2 has different physical/logical endings:
phys=(1023, 254, 63) logical=(1304, 254, 63)
Se você deseja montar uma dessas partições, faça o seguinte:
fdisk (saída do cilindro)
- tamanho do bloco de 512 bytes e o bloco inicial é 63.
- O deslocamento é 512 * 63 = 32256.
fdisk (saída do setor)
- tamanho do bloco de 512 bytes e o bloco inicial é 1.
- O deslocamento é 512 * 1 = 512.
Portanto, o comando mount seria:
em cilindros
$ mount -o loop,offset=32256 centostest.img /mnt/tmp
Para montar a outra partição (512 * 208845 = 106928640):
$ mount -o loop,offset=106928640 centostest.img /mnt/tmp
em setores
$ mount -o loop,offset=512 centostest.img /mnt/tmp
Para montar a outra partição (512 * 14 = 7168):
$ mount -o loop,offset=7168 centostest.img /mnt/tmp
NOTA
Isso funcionará apenas se mount puder determinar o tipo de sistema de arquivos na "partição" que você está tentando montar. Pode ser necessário incluir -t auto
ou ser específico e dizer mount
que é -t ext4
por exemplo.
Referências
# mount -t auto -o ro,loop,offset=512 gmapsupp.img /mnt/iso/
\mount: you must specify the filesystem type
# fdisk -l gmapsupp.img Disk gmapsupp.img: 0 MB, 0 bytes 255 heads, 63 sectors/track, 0 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System gmapsupp.img1 1 9 65536 0 Empty Partition 1 has different physical/logical endings: phys=(1023, 15, 8) logical=(8, 40, 32) Partition 1 does not end on cylinder boundary.
-t auto
possa identificar o tipo da partição. Você terá que apenas tentar outros para ver o que funciona.W95 FAT16 (LBA)
-t vfat
falhou ao montar minha primeira partição.Use
parted
para identificar valores de deslocamento.Agora você tem valores de deslocamento e pode usá-los para montar sistemas de arquivos.
fonte
Parece que o @slm tem um pouco de matemática instável ou pelo menos não corresponde à
fdisk -l
saída. A partir das revisões, parece que adicionar ou
parâmetro ao fdisk mudou de cilindros para setores? Não sei, mas não faz nada no meu, já que o padrão deve ser setores.Na minha imagem:
Onde
No meu exemplo, o fdisk está dizendo iniciar em 2048 * 512 tamanho do bloco = 1048576.
fonte
Uma versão moderna do
file
comando reporta o setor de inicialização de uma maneira muito mais conveniente que o fdisk ou parted:file $img Armbian_jw.img: DOS/MBR boot sector; partition 1 : ID=0x83, start-CHS (0x40,0,1), end-CHS (0x3ff,3,32), startsector 8192, 2883584 sectors
Essa saída de uma linha pode ser script como este:
fonte
losetup -P
automaçãoOs scripts a seguir montam automaticamente todas as partições de uma imagem.
Uso:
Fonte:
Testado no Ubuntu 16.04.
fonte