sábado, 7 de maio de 2011

Montando imagens de disco (RAW / QCOW / VMDK / VDI / VHD / ...)

O Linux e outros Unix-like podem montar imagens criadas no formato RAW - CRU - usando um dispositivo de loopback. Isso é realmente muito útil pois permite, sem precisar iniciar uma máquina virtual, preparar o conteúdo de uma imagem de disco ou copiar arquivos de/para uma imagem sem ter que usar algum tipo de protocolo de rede para fazê-lo.

E para imagens que não estejam no formato RAW?
VDI - Virtualbox;
QCOW/QCOW2 - QEmu;
VHD - MS Virtual PC;
DMG - Apple Disk Image;
PARALLELS - Parallels Workstation,

Para todos os formatos de imagens listas acima, pode-se usar a ferramenta qemu-nbd do "canivete suiço" QEmu.

Nota: o VMDK da VMWare é formato RAW.

Montando todos os outros formatos de imagem, incluindo RAW

O QEmu é um conjunto de ferramentas que permitem emular uma máquina de forma completa. Além de emular um processador, o QEmu permite a emulação de todos os subsistemas necessários, tais como redes e hardware de vídeo. Ele também permite a emulação de sistemas de multiprocessamento simétrico e até outras arquiteturas de processador, como ARM ou PowerPC.

A ferramenta qemu-nbd permite exportar um imagem usando o protocolo Network Block Device e montar usando o módulo do kernel nbd.
qemu-nbd(8) supports disk formats supported by QEMU: QEMU supports following disk formats: raw, qcow2, qcow, vmdk, vdi, bochs, cow (user-mode Linux copy-on-write), parallels, dmg, cloop, vpc, vvfat (virtual VFAT), and host_device.
Abaixo um exemplo detalhado de como montar uma imagem. Esta imagem é de um WindowsXP rodando em VMWare ESX 3.5:

Verifique se seu kernel possui em módulo suporte ao nbd e obter mais informações sobre o módulo.

[root@rbawsesop03 andre]# modinfo nbd
filename:       /lib/modules/2.6.38-ARCH/kernel/drivers/block/nbd.ko.gz
license:        GPL
description:    Network Block Device
depends:      
vermagic:       2.6.38-ARCH SMP preempt mod_unload
parm:           nbds_max:number of network block devices to initialize (default: 16) (int)
parm:           max_part:number of partitions per device (default: 0) (int)
parm:           debugflags:flags for controlling debug output (int)

Carregue o módulo e defina o número máximo de partições por dispositivo, max_part. Se não for definido o max_part não será possível acessar nenhuma partição que contenha na imagem.

[root@rbawsesop03 andre]# modprobe nbd max_part=16

Após o modulo carregado, serão criados vários dispositivos de bloco de nomes /dev/nbd*. Conecte algum dos arquivos de bloco nbd à imagem do disco virtual.

[root@rbawsesop03 andre]# qemu-nbd -c /dev/nbd0 winxp-flat.vmdk

Depois de conectado serão criados novos dispositivos de bloco correspondentes as partições existentes na imagem . Monte o bloco correspondente a partição desejada em alguma pasta do sistema.

[root@rbawsesop03 andre]# mount /dev/nbd0p1 /mnt/visit/
[root@rbawsesop03 andre]# ls -l /mnt/visit/
total 1049305
drwxrwxrwx 1 root root       8192 Dez 22 15:02 Arquivos de programas
-rwxrwxrwx 1 root root          0 Set 11  2010 AUTOEXEC.BAT
-rwxrwxrwx 1 root root        211 Set 11  2010 boot.dat
-rwxrwxrwx 1 root root       4952 Abr 14  2008 Bootfont.bin
-rwxrwxrwx 1 root root        211 Set 11  2010 boot.ini
-rwxrwxrwx 1 root root          0 Set 11  2010 CONFIG.SYS
drwxrwxrwx 1 root root       4096 Jan 26 16:18 Documents and Settings
-rwxrwxrwx 1 root root          0 Set 11  2010 IO.SYS
-rwxrwxrwx 1 root root          0 Set 11  2010 MSDOS.SYS
-rwxrwxrwx 1 root root      47564 Abr 14  2008 NTDETECT.COM
-rwxrwxrwx 1 root root     251696 Set 11  2010 ntldr
-rwxrwxrwx 1 root root     251696 Abr 14  2008 ntldr.bak
-rwxrwxrwx 1 root root 1073741824 Abr 28 15:06 pagefile.sys
drwxrwxrwx 1 root root          0 Set 11  2010 RECYCLER
drwxrwxrwx 1 root root       8192 Abr 11 10:55 Seguranca
drwxrwxrwx 1 root root       4096 Set 11  2010 System Volume Information
drwxrwxrwx 1 root root      45056 Mai  2 09:20 temp
drwxrwxrwx 1 root root     110592 Abr 28 15:00 WINDOWS

Para desconectar, é preciso desmontar as partições montadas anteriormente e desconectar o dispositivo

[root@rbawsesop03 andre]# umount /mnt/visit/
[root@rbawsesop03 andre]# qemu-nbd -d /dev/nbd0
/dev/nbd0 disconnected

Mais informações use qemu-nbd -h ou man qemu-nbd.

Montando imagens no formato RAW utilizando offset - deslocamento

Para montar uma image RAW é necessário calcular o offset da partição, ou seja, multiplicar o setor inicial pela quantidade de bytes por setor. Exemplo abaixo:

[root@rbawsesop03 andre]# fdisk -l winxp-flat.vmdk

Disk winxp-flat.vmdk: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders, total 83886080 sectors
Units = setores of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xd499d499

            Dispositivo Boot      Start         End      Blocks   Id  System
winxp-flat.vmdk1   *         63    41945714    20972826    7  HPFS/NTFS/exFAT
winxp-flat.vmdk2        41945715    83875364    20964825    7  HPFS/NTFS/exFAT

Aos cálculos...
tamanho do setor * setor inicial = offset
512 * 63 = 32256

Agora é só montar utilizando o offset calculado acima e acessar normalmente.

[root@rbawsesop03 andre]# mount -o loop,offset=32256 -t ntfs winxp-flat.vmdk /mnt/visit/
[root@rbawsesop03 andre]# ls -l /mnt/visit/
total 1049305
drwxrwxrwx 1 root root       8192 Dez 22 15:02 Arquivos de programas
-rwxrwxrwx 1 root root          0 Set 11  2010 AUTOEXEC.BAT
-rwxrwxrwx 1 root root        211 Set 11  2010 boot.dat
-rwxrwxrwx 1 root root       4952 Abr 14  2008 Bootfont.bin
-rwxrwxrwx 1 root root        211 Set 11  2010 boot.ini
-rwxrwxrwx 1 root root          0 Set 11  2010 CONFIG.SYS
drwxrwxrwx 1 root root       4096 Jan 26 16:18 Documents and Settings
-rwxrwxrwx 1 root root          0 Set 11  2010 IO.SYS
-rwxrwxrwx 1 root root          0 Set 11  2010 MSDOS.SYS
-rwxrwxrwx 1 root root      47564 Abr 14  2008 NTDETECT.COM
-rwxrwxrwx 1 root root     251696 Set 11  2010 ntldr
-rwxrwxrwx 1 root root     251696 Abr 14  2008 ntldr.bak
-rwxrwxrwx 1 root root 1073741824 Abr 28 15:06 pagefile.sys
drwxrwxrwx 1 root root          0 Set 11  2010 RECYCLER
drwxrwxrwx 1 root root       8192 Abr 11 10:55 Seguranca
drwxrwxrwx 1 root root       4096 Set 11  2010 System Volume Information
drwxrwxrwx 1 root root      45056 Mai  2 09:20 temp
drwxrwxrwx 1 root root     110592 Abr 28 15:00 WINDOWS


Ref.:
http://www.ibm.com/developerworks/linux/library/l-linux-kvm/
http://en.wikibooks.org/wiki/QEMU/Images
http://cabelovivaolinux.wordpress.com/2009/08/11/qemu-montando-imagens/

Nenhum comentário:

Postar um comentário

Dúvidas ou sugestões? Envie seu comentário.