Sfondo
Uno dei miei server virtuali Xen doveva dividere e ridimensionare il suo disco da 400G durante il fine settimana e volevo ridurre al minimo i tempi di inattività. Il disco aveva 240G utilizzati, 235G dei quali era una directory /backup e il restante 5G dedicato a una normale installazione di Debian Linux. Volevo dividere il disco in due dischi:un disco da 20 GB contenente il sistema Linux e un disco da 300 GB da montare come /backup. Quindi potrei applicare la mia configurazione DRBD per replicare quella partizione di backup da 300G su una seconda macchina di backup separata.
Non volevo finire in una situazione in cui dovevo copiare un carico di dati sull'host fisico e di certo non volevo che la macchina virtuale si spegnesse mentre lo facevo.
Imposta immagini
La macchina virtuale ha la sua immagine disco situata in /vm/domains/b1/disk.img e un file swap.img di accompagnamento di cui non dobbiamo preoccuparci.
Problema:
losetup -a
Per individuare tutti i dispositivi loop utilizzati. Nel mio caso, /dev/loop20 è stato il primo dispositivo gratuito. Successivamente, imposterò un dispositivo di loopback per l'immagine, quindi lo monterò:
mkdir -p /mnt/loop-copy-from /mnt/loop-copy-to
losetup /dev/loop20 /vm/domains/b1/disk.img
mount /dev/loop20 /mnt/loop-copy-from
Crea una nuova immagine sparse vuota
Ora, non sposteremo /backup, ma sposteremo tutto il resto nella nuova immagine 20G. Creeremo un file immagine sparso di 20G con:
dd if=/dev/zero of=/vm/domains/b1/disk-root.img bs=1k count=1 seek=$(((20*1024*1024)-1))
Successivamente, dovremo configurare un nuovo dispositivo loop, creare un filesystem e infine montare questa nuova immagine
losetup /dev/loop21 /vm/domains/b1/disk-root.img
mkfs.ext3 /dev/loop21
mount /dev/loop21 /mnt/loop-copy-to
Copia il filesystem radice
Ora copierò tutto da /mnt/loop-copy-from a /mnt/loop-copy-to a parte la directory di backup 235G:
rsync -arplogu --exclude "/backup" --stats --progress /mnt/loop-copy-from/ /mnt/loop-copy-to
Ripulisci il filesystem esistente
Voglio rimuovere tutto su /mnt/loop-copy-from tranne la directory di backup:
cd /mnt/loop-copia-da; ls | grep -v 'backup' | xargs rm -rf
Smonteremo quindi entrambi i dispositivi:
smonta /mnt/loop-copy-from
smonta /mnt/loop-copy-to
Riduci il filesystem esistente
Ora dovrò ridurre /dev/loop20 da 400G a 300G:
e2fsck -f /dev/loop20
resize2fs /dev/loop20 300G
Copia dati di avvio
E quindi, copia i dati di avvio prima di distruggere i dispositivi di loopback:
dd if=/dev/loop20 of=/dev/loop21 bs=1 conteggio=512
losetup -d /dev/loop20
losetup -d /dev/loop21
Configurazione Xen e avvio VM
Ora modifica il file di configurazione di Xen VM, nel mio caso, /etc/xen/b1.cfg, cambiando:
disk = [ 'file:/vm/domains/b1/disk.img,xvda2,w', 'file:/vm/domains/b1/swap.img,xvda1,w', ]
Con:
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', ]E infine:
xm crea b1.cfg
Link
IO Digital Sec
Debian Wheezy XEN + Configurazione ospite