Utilisation des images VirtualBox (vdi)

Suite à l’article Accéder aux partitions d’un fichier image, voici comment accéder aux partitions d’un fichier image VirtualBox (vdi).

Utilisation de vditool

Cette application est normalement fournie par l’installation de VirtualBox.

$ vditool dump vista.vdi
vditool    Copyright (c) 2004-2008 innotek GmbH.

Dumping VDI image file="vista.vdi" into the log file...
Log created: 2008-04-07T22:21:24.901576000Z
Executable: /usr/lib/virtualbox/vditool
Arg[0]: vditool
Arg[1]: dump
Arg[2]: vista.vdi
--- Dumping VDI Disk, Images=1
Dumping VDI image "vista.vdi" mode=r/o fOpen=1 File=00000004
Header: Version=00010001 Type=2 Flags=0 Size=16106127360
Header: cbBlock=1048576 cbBlockExtra=0 cBlocks=15360 cBlocksAllocated=15360
Header: offBlocks=512 offData=61952
Header: Geometry: C/H/S=31207/16/63 cbSector=512 Mode=3
Header: uuidCreation={76a7017b-df0f-4a61-1a98-86d9abed5098}
Header: uuidModification={3f2921ea-ff02-4229-94ab-6960293cd315}
Header: uuidParent={00000000-0000-0000-0000-000000000000}
Header: uuidParentModification={00000000-0000-0000-0000-000000000000}
Image:  fFlags=00000000 offStartBlocks=512 offStartData=61952
Image:  uBlockMask=000FFFFF uShiftIndex2Offset=20 uShiftOffset2Index=20 offStartBlockData=0
The operation completed successfully!

La ligne qui nous intéresse:

Header: offBlocks=512 offData=61952

D’après la sortie, on sait que les données utilisateur commencent à l’offset 61952.

Cette valeur correspond au début du MBR.

Détecter le début de la 1ère partition

$ losetup -o 61952 /dev/loop0 vista.vdi
$ fdisk -ul /dev/loop0

Disque /dev/loop0: 16.1 Go, 16106127360 octets
255 heads, 63 sectors/track, 1958 cylinders, total 31457280 secteurs
Units = secteurs of 1 * 512 = 512 bytes
Disk identifier: 0xfc7d9eb7

Périphérique Amorce    Début         Fin      Blocs    Id  Système
/dev/loop0p1   *        2048    31455231    15726592    7  HPFS/NTFS

Utilisation de la partition

On peut réutiliser losetup pour recréer un autre périphérique ou tout simplement spécifier l’offset directement à la commande mount:

mount -o offset=$((2048*512)) /dev/loop0 disk/

Commentaires (5)