Fondo
Uno de mis servidores virtuales Xen necesitaba tener su disco de 400 G dividido y redimensionado durante el fin de semana, y quería reducir al mínimo el tiempo de inactividad. El disco tenía 240G utilizados, 235G de los cuales eran un directorio /backup y los 5G restantes dedicados a una instalación normal de Debian Linux. Quería dividir el disco en dos discos:un disco de 20 GB que contiene el sistema Linux y un disco de 300 G para montar como copia de seguridad. Entonces podría aplicar mi configuración DRBD para replicar esa partición de copia de seguridad de 300 G en una segunda máquina de copia de seguridad separada.
No quería terminar en una situación en la que tuviera que copiar una gran cantidad de datos en el host físico, y ciertamente no quería que la máquina virtual se apagara mientras lo hacía.
Configurar imágenes
La máquina virtual tiene su imagen de disco ubicada en /vm/domains/b1/disk.img y un swap.img adjunto del que no debemos preocuparnos.
Problema:
losetup -a
Para localizar todos los dispositivos de bucle usados. En mi caso, /dev/loop20 fue el primer dispositivo gratuito. A continuación, configuraré un dispositivo de bucle invertido para la imagen y luego lo montaré:
mkdir -p /mnt/bucle-copiar-desde /mnt/bucle-copiar-a
losetup /dev/loop20 /vm/domains/b1/disk.img
mount /dev/loop20 /mnt/loop-copy-from
Crear una nueva imagen dispersa vacía
Ahora, no vamos a mover / respaldar, sino que vamos a mover todo lo demás a la nueva imagen 20G. Crearemos un archivo de imagen dispersa de 20G con:
dd if=/dev/zero of=/vm/domains/b1/disk-root.img bs=1k count=1 seek=$(((20*1024*1024)-1))
A continuación, necesitaremos configurar un nuevo dispositivo de bucle, crear un sistema de archivos y finalmente montar esta nueva imagen
losetup /dev/loop21 /vm/domains/b1/disk-root.img
mkfs.ext3 /dev/loop21
mount /dev/loop21 /mnt/loop-copy-to
Copiar sistema de archivos raíz
Ahora, copiaré todo desde /mnt/loop-copy-from a /mnt/loop-copy-to aparte del directorio de copia de seguridad 235G:
rsync -arplogu --exclude "/backup" --stats --progress /mnt/bucle-copiar-desde/ /mnt/bucle-copiar-a
Limpiar el sistema de archivos existente
Quiero eliminar todo en /mnt/loop-copy-from excepto el directorio de copia de seguridad:
cd /mnt/bucle-copiar-desde; ls | grep -v 'copia de seguridad' | xargs rm -rf
Luego desmontaremos ambos dispositivos:
desmontar /mnt/bucle-copiar-desde
desmontar /mnt/bucle-copiar-a
Reducir el sistema de archivos existente
Ahora necesitaré reducir /dev/loop20 de 400G a 300G:
e2fsck -f /dev/loop20
resize2fs /dev/loop20 300G
Copiar datos de arranque
Y luego, copie los datos de arranque antes de destruir los dispositivos de loopback:
dd if=/dev/loop20 of=/dev/loop21 bs=1 cuenta=512
losetup -d /dev/loop20
losetup -d /dev/loop21
Configuración de Xen y arranque de VM
Ahora edite el archivo de configuración de Xen VM, en mi 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', ]Y finalmente:
xm crear b1.cfg
Enlaces
Seguridad digital de E/S
Debian Wheezy XEN + Configuración de invitado