Um arquivo .img é um arquivo de imagem de um disco completo. Por isso, pode conter mais de uma partição. Por ser uma imagem de disco, você pode usar ferramentas de gerenciamento de disco, como fdisk
, para ver que tipo de partições ela contém.
Conteúdo do archlinux-hf-2013-06-06.img
$ fdisk -l archlinux-hf-2013-06-06.img
Disk archlinux-hf-2013-06-06.img: 1960 MB, 1960837120 bytes
64 heads, 32 sectors/track, 1870 cylinders, total 3829760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0004f23a
Device Boot Start End Blocks Id System
archlinux-hf-2013-06-06.img1 * 2048 186367 92160 c W95 FAT32 (LBA)
archlinux-hf-2013-06-06.img2 186368 3667967 1740800 83 Linux
Então, olhando para a saída, podemos ver que existem 2 partições dentro do arquivo .img. O primeiro, rchlinux-hf-2013-06-06.img1, é um tipo de partição FAT32. A segunda partição, archlinux-hf-2013-06-06.img2, é uma partição do Linux.
Anote os setores iniciais das duas partições (2048 e 186368). Você precisará disso mais tarde. Observe também quantos bytes um determinado setor contém (512 bytes).
Montando as partições
Para montar a partição Linux, primeiro você precisa calcular sua posição inicial em termos de bytes. Então faça a seguinte matemática:
part1: 2048 sectors * 512 bytes/sector = 1048576 bytes
part2: 186368 sectors * 512 bytes/sector = 95420416 bytes
Então, para montar as partições do Linux (segunda):
$ sudo mount -o loop,offset=95420416 archlinux-hf-2013-06-06.img /mnt/
NOTA: Para montar a partição FAT32, você pode usar este comando:
$ sudo mount -t vfat -o loop,offset=1048576 archlinux-hf-2013-06-06.img /mnt/
E agora podemos ver o conteúdo:
$ ls /mnt|columns -c 4
bin boot dev etc
home lib lost+found media
mnt opt proc root
run sbin srv sys
tmp usr var
Desmontando
Para desmontar uma partição quando terminar, faça o seguinte comando:
$ sudo umount /mnt
Comparando o conteúdo de arquivos .img
Então aqui está uma ideia. Você pode montar 2 arquivos .img em /mnt1
e /mnt2
e, em seguida, executar uma comparação recursiva das duas árvores de diretórios contidas em cada arquivo .img.
Com os 2 arquivos .img montados, você pode executar um comando como este, que faria uma comparação:
$ diff -qr /mnt1 /mnt2
Isso resultaria em uma saída que mostrava um arquivo e se era diferente e / ou ausente nas duas árvores de diretório.
kpartx - maneira alternativa de montar partições
Se você está com preguiça de executar as contas acima usando fdisk
, pode usar kpartx
e mapear as partições para dispositivos de loopback que podem ser facilmente montados / desmontados. Os comandos seriam mais ou menos assim:
monte o arquivo .img # 1
$ sudo kpartx -av your-image1.img
add map loop0p1 (252:5): 0 117187 linear /dev/loop0 1
add map loop0p2 (252:6): 0 3493888 linear /dev/loop0 118784
$ sudo mount /dev/mapper/loop0p2 /mnt1
monte o arquivo .img # 2
$ sudo kpartx -av your-image2.img
add map loop1p1 (252:5): 0 117187 linear /dev/loop1 1
add map loop1p2 (252:6): 0 3493888 linear /dev/loop1 118784
$ sudo mount /dev/mapper/loop1p2 /mnt2