web-dev-qa-db-fra.com

Comment créez-vous et partitionnez-vous une image disque brute?

J'ai besoin de créer une image de disque brut pour une utilisation dans une machine virtuelle, mais je dois créer les partitions avant de créer le système de fichiers ou l'installation du système d'exploitation.

Quelqu'un peut-il décrire un processus pour faire cela?

7
Aethylred

Créez d'abord une image de disque brut vide (25 Go dans ce cas):

    # dd if=/dev/zero of=disk.img bs=1024k seek=25600 count=0
    0+0 records in
    0+0 records out
    0 bytes (0 B) copied, 2.7301e-05 s, 0.0 kB/s
    # ls -lh
    total 2.0G
    -rw-r--r-- 1 root root  25G Dec 13 11:13 disk.img

Donnez-lui une table de partition:

    # parted disk.img mklabel msdos

Montez comme un dispositif de bouclage (le moyen le plus simple de définir des cylindres, des têtes et des secteurs):

    # losetup -f disk.img
    # losetup -a
    /dev/loop0: [0801]:12059103 (/path/to/disk.img)

Vérifiez qu'il semble être un élément de bloc valide:

    # fdisk /dev/loop0

    WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
     switch off the mode (command 'c') and change display units to
     sectors (command 'u').

    Command (m for help): p

    Disk /dev/loop0: 26.8 GB, 26843545600 bytes
    255 heads, 63 sectors/track, 3263 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: 0x000db005

    Device Boot      Start         End      Blocks   Id  System

Ensuite, utilisez fdisk pour la partitionner comme vous le souhaitez:

    # fdisk /dev/loop0

Lorsque vous avez terminé, vous devez détester le périphérique (il aura besoin d'une démapping et de démontage en premier):

# losetup -d /dev/loop0
4
Aethylred

Procédure entièrement automatisée

Créer un my.img Image avec une seule partition ext4:

Sudo apt-get install kpartx
img='my.img'
dd if=/dev/zero of="$img" bs=512 count=131072
printf 'o\nn\np\n1\n\n\nw\n' | fdisk "$img"
Sudo kpartx -av "$img"
Sudo mke2fs -t ext4 /dev/mapper/loop0p1
mkdir d
Sudo mount /dev/mapper/loop0p1 d
# Do something to the ext partition.
Sudo touch a
Sudo umount d
Sudo kpartx -dv "$img"

Testé sur Ubuntu 14.04.

Les parties "dures" sont: