Resize IMG file
Sommaire
Comment redimensionner un fichier .IMG ?
Agrandir l'espace disque
Assurez vous que le fichier n'est plus utilisé (ni par une VM, ni monté dans un loop device)
(faites-en une copie, on sait jamais)
cp /my/file.img /my/file.img.backup
Agrandissez la taille du fichier IMG (exemple donné pour étendre le fichier à 50Go (50000 x 1Mb) :
dd if=/dev/zero of=/my/file.img bs=1M conv=notrunc count=1 seek=50000
Étendre le filesystem
Deux possibilités s'offrent a présent, le fichier contient, ou pas, un partitionnement propre.
Pour le vérifier : fdisk -l /my/file.img
Si fdisk sors ce genre de choses
Disk /my/file.img: 0 MB, 0 bytes 255 heads, 63 sectors/track, 0 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /my/file.img1 * 1 25 200781 83 Linux /my/file.img2 26 156 1052257+ 82 Linux swap / Solaris /my/file.img3 157 6527 51175057+ 83 Linux
Sinon,
Le fichier contient des partitions
Si le fichier contient des partitions
- Vérifier le FS, puis mapper le fichier dans un loop device (la sortie indique les mappings réalisés avec le partitionnement du fichier, on va prendre loop0 comme exemple, nous voulons resizer la 3eme partition)
e2fsck -f /dev/loop0p3 kpartx -av /my/file.img
- pour étendre la partition, il faut en réalité la supprimer, puis la recréer. Cette opération ne supprime PAS les données, si le bloc de début de la partition reste le même et que le bloc de fin se est plus loin. Ces opérations sont réalisées avec fdisk :
fdisk /dev/loop0 # on affiche les propriétés des partitions actuelles p # on supprime la partition à étendre d [1-4] # on la recréée, avec le même type, même numéro de partition et le même bloc de départ n [1-4] # on sauvegarde le tout w
- Pour que les modifications soient prises en comptes, fdisk demande de rebooter le systeme. Il est possible de détacher puis de rattacher, avec kpartx, le fichier IMG :
kpartx -d /my/file.img kpartx -av /my/file.img
Un checkdisk devient obligatoire à cet instant, afin de pouvoir resizer par la suite la partition :
e2fsck -f /dev/loop0p3 resize2fs /dev/loop0p3
Normalement, si tout c'est bien passé, il devrait y avoir un joli message :
Resizing the filesystem on /dev/mapper/loop0p3 to 12793764 (4k) blocks. The filesystem on /dev/mapper/loop2p3 is now 12793764 blocks long.
Il ne reste plus qu'à vérifier l'intégrité du système de fichiers, et à détacher le tout
e2fsck -f /dev/loop0p3 kpartx -d /my/file.img
Le fichier ne contient pas de partitions
Sans partitionnement, il est plus simple d'ajuster la taille du filesystem :
- Chercher un loopdevice vide (la commande sors les loopdevice utilisés)
losetup -a
- Monter en loop le fichier img
losetup /dev/loop0 /my/file.img
- Forcer le fsck
e2fsck -f /dev/loop0
- Resizer le fs à la taille maxi du volume :
resize2fs /dev/loop0
- Forcer le fsck
e2fsck -f /dev/loop0
- Démonter le loopdevice
losetup -d /my/file.img