Había una vez un servidor LAMP en Ubuntu 12.04 que funcionaba en una sola unidad. En consecuencia, surgió el problema de garantizar la transferencia del servidor a una configuración más tolerante a fallas: RAID1. Los camaradas a cargo de este servidor instalaron el segundo disco, y el resto me fue asignado, y el acceso al servidor fue solo a través de ssh, lo que complicó la tarea.
Después de buscar, se encontró una
guía y comenzó la capacitación en una máquina virtual. Cuando logré el resultado deseado en él, con algo de emoción, pero, sin embargo, transferí con éxito el servidor mencionado a RAID1 y preparé los pasos necesarios por adelantado. Decidí colocar el artículo en el que se describe el proceso de transferencia con más detalle en "Habr".
El desglose del disco fue el siguiente:
/dev/sda1 2048 1574911 786432 swap /dev/sda2 * 1574912 16254975 7340032 / /dev/sda3 16254976 31457279 7601152 /home
Como el segundo disco era nuevo, no se requirieron operaciones para eliminar la partición anterior.
Lo primero se modificó en
/etc/default/grub
:
GRUB_TIMEOUT = 5 (acortar el tiempo de espera);
GRUB_RECORDFAIL_TIMEOUT = 10 (agregue para que el sistema pueda arrancar en caso de error, sin requerir intervención interactiva; tiempo de espera para probar);
GRUB_CMDLINE_LINUX_DEFAULT = "bootdegraded" (asegúrese de agregar "bootdegraded" para que el sistema pueda arrancar desde una matriz inferior);
# GRUB_HIDDEN_TIMEOUT_QUIET = true (debe comentarse para que siempre se muestre el menú GRUB).
Deshabilite temporalmente el intercambio, establezca / f / disk usando fdisk para establecer el tipo en
fd (detección automática de incursiones de Linux), y luego haga que la partición del segundo disco sea la misma que la primera (todas las operaciones se realizan con derechos de superusuario):
sfdisk –d /dev/sda | sfdisk –f /dev/sdb
Luego comenzamos a construir nuestro RAID paso a paso:
mdadm --create --verbose /dev/md0 --raid-devices=2 --level=1 --metadata=1.2 /dev/sda1 /dev/sdb1
Crea una sección bajo
swap
:
mkswap /dev/md0
Corregimos
/etc/fstab
, reemplazando las particiones del primer disco con particiones RAID y cambiando los números en la sexta columna (la necesidad de verificar fsck) a ceros:
/dev/sda1 → /dev/md0
Activar
swap
:
swapon -a
Como nuestro servidor está trabajando actualmente en el primer disco, creamos el RAID usando hasta ahora solo el segundo disco:
mdadm --create --verbose /dev/md1 --raid-devices=2 --level=1 --metadata=1.2 missing /dev/sdb2 mkfs.ext4 /dev/md1 mdadm --create --verbose /dev/md2 --raid-devices=2 --level=1 --metadata=1.2 missing /dev/sdb3 mkfs.ext4 /dev/md2
Actualización de la configuración de
mdadm.conf
:
mdadm --examine --scan >> /etc/mdadm/mdadm.conf
initramfs
para que
initramfs
información sobre nuestro RAID:
update-initramfs -u
A continuación, comienza el proceso más largo: la sincronización de datos. Dado que nuestro servidor realiza algunas tareas, puede resultar que después de que se complete la sincronización, parte de la información en las secciones de la matriz diferirá de los datos en las secciones correspondientes del disco de trabajo. Hay varias opciones: puede elegir el tiempo de menor carga, puede detener parte de los servicios durante la sincronización o puede descuidar las discrepancias. En general, montamos y sincronizamos:
mount /dev/md1 /mnt/ && [tmux|screen] rsync -axu / /mnt mount /dev/md2 /mnt/home && [tmux|screen] rsync -axu /home/ /mnt/home
Para evitar que la sincronización se interrumpa debido a una interrupción inesperada en la conexión ssh, el uso de un multiplexor de terminal no obstaculizará.
Después de esperar el final de la sincronización, monte los directorios del sistema en una nueva raíz:
mount --bind /proc /mnt/proc mount --bind /dev /mnt/dev mount --bind /var /mnt/var mount --bind /run /mnt/run mount --bind /sys /mnt/sys
Nos estamos moviendo a un nuevo sistema
chroot /mnt
e instale el gestor de arranque en ambos discos
grub-install -–recheck /dev/sda grub-install --recheck /dev/sdb
Actualizamos la configuración de arranque para cargar los módulos necesarios para RAID (
mdraid1x
):
update-grub
Regresamos al sistema original y, si es necesario, volvemos a sincronizar las secciones:
[tmux|screen] rsync -axu / /mnt [tmux|screen] rsync -axu /home/ /mnt/home
Como no tenemos acceso físico ni a la consola ni al servidor y no podemos seleccionar el disco desde el que se iniciará el RAID, utilizamos este truco: transferimos la configuración preparada del cargador de arranque al disco desde el que se inicia el sistema y que no está en RAID Quién sabe sobre RAID. Copie grub.cfg del disco ubicado en el RAID a nuestro disco de arranque actual. Esto permitirá que el sistema comience con / dev / sda, pero monte los arreglos y continúe arrancando desde la partición que ya está en el RAID. Primero, guarde el archivo antiguo, que puede ser necesario al restaurar el sistema si no es posible iniciar desde RAID, y luego copie el archivo de configuración de "combate":
cp -p /boot/grub/grub.cfg /boot/grub/grub.old cp -p /mnt/boot/grub/grub.cfg /boot/grub/grub.cfg
Además, puede comparar estos archivos y asegurarse de que en el nuevo archivo de configuración del cargador de arranque, la partición raíz aparezca como RAID.
Ahora pasamos a la etapa más importante del trabajo realizado y reiniciamos. Puede comenzar a hacer
ping
al servidor en la consola para que quede claro cuándo volverá a estar disponible el servidor. Iniciamos sesión y vemos que todo salió como queríamos:
lsblk
muestra que los directorios
/
y
/home
están en particiones RAID.
Queda un trabajo fácil y agradable para el aperitivo: agregue dos particiones del primer disco a la matriz, después de configurarlas con
fdisk
escribir
fd :
mdadm /dev/md1 --add /dev/sda2 mdadm /dev/md2 --add /dev/sda3
y luego mire periódicamente cómo va la sincronización espejo:
watch -n 5 cat /proc/mdstat
Déjame terminar aquí, ¡gracias por tu atención!