Un tutoriel très technique (uniquement des commandes à taper et un bref commentaire) pour expliquer comment redimensionner une image disque d’un guest xen. De plus prenons le cas le plus compliqué, ce fichier image contient une partition LVM avec plusieurs volumes logiques.
La technique consiste à "mounter" toutes les partitions contenues dans le fichier image et la partition LVM de cette image disque puis de copier les données dans une nouvelle image disque de dimension différente.
Prérequis :
fdisk, dd, losetup (package util-linux), kpartx (package kpartx), outils LVM (package lvm2)
Topologie du fichier image actuel :
# si necessaire, stopper le guest xen xm shutdown guest losetup /dev/loop0 /var/xendisks/guestimage.disk fdisk /dev/loop0 -l
Par exemple :
Disk /dev/loop0: 26.2 GB, 26214400000 bytes 255 heads, 63 sectors/track, 3187 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/loop0p1 * 1 13 104391 83 Linux /dev/loop0p2 14 2933 23454900 8e Linux LVM /dev/loop0p3 2934 3187 2040255 82 Linux swap / Solaris
Forcer la lecture de la table de partition :
kpartx -av /dev/loop0 ls /dev/mapper/loop0* /dev/mapper/loop0p1 /dev/mapper/loop0p2 /dev/mapper/loop0p3 # exemple de resultat
Détection du Volume Group LVM :
vgscan Reading all physical volumes. This may take a while... Found volume group 'VolGroup1' using metadata type lvm2
Détection des Volumes Logiques LVM :
vgchange -ay VolGroup1 3 logical volume(s) in volume group 'VolGroup1' now active ls /dev/VolGroup1/* /dev/VolGroup1/tmp /dev/VolGroup1/var /dev/VolGroup1/volroot # exemple de resultat
Montage (à adapter suivant la topologie du disque image) :
mount /dev/VolGroup1/volroot /mnt/old/ mount /dev/VolGroup1/var /mnt/old/var/ mount /dev/VolGroup1/tmp /mnt/old/tmp/ mount /dev/mapper/loop0p1 /mnt/old/boot/
Création du nouveau disque image :
Faire un df pour juger de la taille du disque image et des partitions nécessaires.
# exemple /dev/mapper/VolGroup1-volroot 7.6G 1.4G 5.9G 19% /mnt/old /dev/mapper/VolGroup1-var 13G 911M 11G 8% /mnt/old/var /dev/mapper/VolGroup1-tmp 2.0G 36M 1.8G 2% /mnt/old/tmp /dev/mapper/loop0p1 99M 26M 68M 28% /mnt/old/boot
Création d’un disque (15Go ici) :
dd if=/dev/zero of=/var/xendisks/guestimage-smaller.disk oflag=direct bs=1M count=15360 losetup /dev/loop1 /var/xendisks/guestimage-smaller.disk fdisk /dev/loop1 # creation de partitions suivantes # (a adapter) # 100 Mo /boot # 12.9 Go LVM # 2 Go swap
Re lecture de la table de partition :
kpartx -av /dev/loop1 # verification ls /dev/mapper/loop1p* /dev/mapper/loop1p1 /dev/mapper/loop1p2 /dev/mapper/loop1p3
Création des partitions, récupérer les éventuels noms de partition dans /mnt/old/etc/fstab :
mkswap -L 'SWAP-xvda3' /dev/mapper/loop1p3 mkfs.ext3 -L '/boot' /dev/mapper/loop1p1 pvcreate /dev/mapper/loop1p2 vgcreate VolGroup2 /dev/mapper/loop1p2 lvcreate -L 4g -nvolroot VolGroup2 lvcreate -L 2g -ntmp VolGroup2 lvcreate -l 100%FREE -nvar VolGroup2 # verification lvdisplay VolGroup2
Formatage des volumes logiques :
mkfs.ext3 /dev/VolGroup2/tmp mkfs.ext3 /dev/VolGroup2/var mkfs.ext3 /dev/VolGroup2/volroot
Montage des partitions du futur disque image :
mount /dev/VolGroup2/volroot /mnt/new/ cd /mnt/new/ mkdir boot var tmp mount /dev/VolGroup2/var /mnt/new/var/ mount /dev/VolGroup2/tmp /mnt/new/tmp/ mount /dev/mapper/loop1p1 /mnt/new/boot/
Copie des anciennes données :
cp -rpv /mnt/old/* .
Démonter l’ancien système :
umount /mnt/old/boot/ umount /mnt/old/var/ umount /mnt/old/tmp/ umount /mnt/old vgchange -an VolGroup1 kpartx -d /dev/loop0 losetup -d /dev/loop0
Renommer le groupe de volume (VG) :
cd /mnt umount /mnt/new/boot/ umount /mnt/new/var/ umount /mnt/new/tmp/ umount /mnt/new vgchange -an VolGroup2 vgrename VolGroup2 VolGroup1
Désactiver le loopback du nouveau disque image :
kpartx -d /dev/loop1 losetup -d /dev/loop1
Démarrer le Guest Xen sur le nouveau disque :
mv guestimage.disk guestimage-old.disk mv guestimage-smaller.disk guestimage.disk xm create -c guest
Et voilà !
Sur ce blog j'expose mes expériences des tous les jours. Principalement axées autour du monde du logiciel libre, il peut aussi m'arriver de parler de faits d'actualités qui m'intéresse. Bonne lecture et n'hésitez pas à commenter ou à m'écrire
Troopy
mai 30th, 2008 at 9:26
J’ai rien compris mais t’étais ou ses 15 derniers jours ? ralalala !
Pierre-Yves
mai 30th, 2008 at 9:34
Mince ! Ca s’est remarqué
Avec les beaux jours, mon VTT m’a vu bien + que mon clavier
Saturnas
juin 2nd, 2008 at 9:25
Rien compris non plus !
C’est du Linux de haut vol ça !
Troopy
juin 2nd, 2008 at 15:19
Je dirais même plus c’est pas linux de tapette :o)