Contexte
L'un de mes serveurs virtuels Xen devait diviser et redimensionner son disque 400G au cours du week-end, et je voulais réduire au minimum les temps d'arrêt. Le disque avait 240 Go utilisés, dont 235 Go étaient un répertoire /backup et les 5 Go restants étaient dédiés à une installation standard de Debian Linux. Je voulais diviser le disque en deux disques - un disque de 20 Go contenant le système Linux et un disque de 300 Go à monter en tant que /backup. Ensuite, je pourrais appliquer ma configuration DRBD pour répliquer cette partition de sauvegarde 300G sur une deuxième machine de sauvegarde distincte.
Je ne voulais pas me retrouver dans une situation où je devais copier une charge de données sur l'hôte physique, et je ne voulais certainement pas que la machine virtuelle s'arrête pendant que je le faisais.
Configurer les images
La machine virtuelle a son image disque située dans /vm/domains/b1/disk.img et un swap.img qui l'accompagne dont nous n'avons pas à nous soucier.
Problème :
losetup -a
Pour localiser tous les dispositifs de boucle utilisés. Dans mon cas, /dev/loop20 était le premier périphérique gratuit. Ensuite, je vais configurer un périphérique de bouclage pour l'image, puis le monter :
mkdir -p /mnt/loop-copy-from /mnt/loop-copy-to
losetup /dev/loop20 /vm/domains/b1/disk.img
monter /dev/loop20 /mnt/loop-copy-from
Créer une nouvelle image sparse vide
Maintenant, nous n'allons pas déplacer/sauvegarder, à la place, nous allons déplacer tout le reste vers la nouvelle image 20G. Nous allons créer un fichier image clairsemé de 20G avec :
dd if=/dev/zero of=/vm/domains/b1/disk-root.img bs=1k count=1 seek=$(((20*1024*1024)-1))
Ensuite, nous devrons configurer un nouveau périphérique de boucle, créer un système de fichiers et enfin monter cette nouvelle image
losetup /dev/loop21 /vm/domains/b1/disk-root.img
mkfs.ext3 /dev/loop21
monter /dev/loop21 /mnt/loop-copy-to
Copier le système de fichiers racine
Maintenant, je vais tout copier de /mnt/loop-copy-from vers /mnt/loop-copy-to en dehors du répertoire de sauvegarde 235G :
rsync -arplogu --exclude "/backup" --stats --progress /mnt/loop-copy-from/ /mnt/loop-copy-to
Nettoyer le système de fichiers existant
Je veux tout supprimer sur /mnt/loop-copy-from sauf le répertoire de sauvegarde :
cd /mnt/loop-copy-from ; ls | grep -v 'sauvegarde' | xargs rm -rf
Nous démonterons ensuite les deux appareils :
umount /mnt/loop-copy-from
démonter /mnt/loop-copy-to
Réduire le système de fichiers existant
Je vais maintenant devoir réduire /dev/loop20 de 400G à 300G :
e2fsck -f /dev/loop20
resize2fs /dev/loop20 300G
Copier les données de démarrage
Et ensuite, copiez les données de démarrage avant de détruire les périphériques de bouclage :
jj if=/dev/loop20 of=/dev/loop21 bs=1 count=512
losetup -d /dev/loop20
losetup -d /dev/loop21
Configuration Xen et démarrage de la VM
Modifiez maintenant le fichier de configuration Xen VM, dans mon cas, /etc/xen/b1.cfg, en changeant :
disk = [ 'file:/vm/domains/b1/disk.img,xvda2,w', 'file:/vm/domains/b1/swap.img,xvda1,w', ]
Avec :
disk = [ 'file:/vm/domains/b1/disk-root.img,xvda2,w', 'file:/vm/domains/b1/disk.img,xvda3,w', 'file:/vm/domains/b1/swap.img,xvda1,w', ]Et enfin:
xm créer b1.cfg
Liens
Sec numérique IO
Debian Wheezy XEN + configuration invité