Pozadí
Jeden z mých virtuálních serverů Xen potřeboval přes víkend rozdělit 400G disk a změnit jeho velikost a já jsem chtěl omezit výpadky na minimum. Disk měl použito 240G, z toho 235G byl adresář /backup a zbývajících 5G bylo vyhrazeno pro běžnou instalaci Debian Linuxu. Chtěl jsem rozdělit disk na dva disky - 20GB disk obsahující systém Linux a 300G disk pro připojení jako / záloha. Pak bych mohl použít své nastavení DRBD k replikaci tohoto 300G zálohovacího oddílu na samostatný 2. zálohovací stroj.
Nechtěl jsem se dostat do situace, kdy budu muset kopírovat hromadu dat na fyzickém hostiteli, a rozhodně jsem nechtěl, aby byl virtuální stroj vypnutý, když jsem to dělal.
Nastavení obrázků
Virtuální počítač má svůj obraz disku umístěný v /vm/domains/b1/disk.img a doprovodný swap.img, o který se nemusíme starat.
Problém:
losetup -a
K vyhledání všech použitých smyčkových zařízení. V mém případě bylo /dev/loop20 prvním bezplatným zařízením. Dále nastavím zařízení zpětné smyčky pro obraz a poté jej připojím:
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
Vytvořit nový prázdný řídký obrázek
Nyní nebudeme přesouvat / zálohu, místo toho přesuneme vše ostatní do nového 20G obrazu. Vytvoříme řídký soubor obrázku o velikosti 20G s:
dd if=/dev/zero of=/vm/domains/b1/disk-root.img bs=1k count=1 seek=$(((20*1024*1024)-1))
Dále budeme muset nastavit nové smyčkové zařízení, vytvořit souborový systém a nakonec připojit tento nový obraz
losetup /dev/loop21 /vm/domains/b1/disk-root.img
mkfs.ext3 /dev/loop21
mount /dev/loop21 /mnt/loop-copy-to
Kopírovat kořenový souborový systém
Nyní zkopíruji vše z /mnt/loop-copy-from do /mnt/loop-copy-to kromě záložního adresáře 235G:
rsync -arplogu --exclude "/backup" --stats --progress /mnt/loop-copy-from/ /mnt/loop-copy-to
Vyčištění stávajícího souborového systému
Chci odstranit vše v /mnt/loop-copy-from kromě záložního adresáře:
cd /mnt/loop-copy-from; ls | grep -v 'záloha' | xargs rm -rf
Poté obě zařízení odpojíme:
umount /mnt/loop-copy-from
umount /mnt/loop-copy-to
Zmenšit existující souborový systém
Nyní budu muset zmenšit /dev/loop20 ze 400G na 300G:
e2fsck -f /dev/loop20
resize2fs /dev/loop20 300G
Kopírovat spouštěcí data
A pak zkopírujte spouštěcí data před zničením zařízení zpětné smyčky:
dd if=/dev/loop20 of=/dev/loop21 bs=1 count=512
losetup -d /dev/loop20
losetup -d /dev/loop21
Konfigurace Xen a spouštění virtuálního počítače
Nyní upravte konfigurační soubor Xen VM, v mém případě /etc/xen/b1.cfg, změnou:
disk = [ 'file:/vm/domains/b1/disk.img,xvda2,w', 'file:/vm/domains/b1/swap.img,xvda1,w', ]
S:
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', ]A nakonec:
xm vytvořit b1.cfg
Odkazy
IO Digital Sec
Debian Wheezy XEN + nastavení hosta