Cómo mover un sistema linux de un disco duro a otro, reparticionando y añadiendo soporte RAID

Disco duroHa surgido la necesidad de redimensionar las particiones de un servidor de oficina, cambiando bastante el esquema de particiones. Disponemos de un segundo disco duro, así que lo utilizaremos como plantilla, copiaremos los datos del disco viejo al nuevo y de paso montaremos un RAID en espejo (RAID 1). Al acabar deberíamos tener ambos discos duros con la nueva distribución de particiones, con RAID activado y sin haber perdido ningún dato.

De los dos discos del sistema, /dev/sda es el disco duro actual que está funcionando ya en el equipo, y /dev/sdb es el disco duro nuevo al que queremos mover el sistema. Lo ideal es que ambos discos duros tengan el mismo tamaño para un montaje en espejo, o por lo menos, que las particiones que queramos espejar quepan en ambos discos (se pueden dejar particiones fuera del RAID, lo veremos ahora). El procedimiento es casi idéntico utilicemos RAID o no, pero ya puestos, vamos con todo. 🙂

Antes de empezar, haced un backup de todo lo importante que haya en ese equipo. No debería ser necesario, pero es mejor no correr riesgos innecesarios.

Este es el sistema actual antes de empezar, tiene un LVM configurado que no se necesita:

El siguiente paso es crear en el disco nuevo /dev/sdb las particiones a nuestro gusto:

cfdisk

No es obligatorio marcar el tipo de las particiones como Linux raid autodetect (código FD en el tipo de partición) pero lo veo recomendable para ser conscientes, y tomar las medidas pertinentes, si alguno de estos discos duros son utilizados en otro equipo con posterioridad.

/dev/sdb1 será la partición /boot configurada como RAID 1 (espejo)

/dev/sdb2 será una partición usada como SWAP, no configuraremos ningún RAID en ella por ahora, posteriormente añadiremos un RAID 0 para mejorar el rendimiento (será /dev/md/swap).

/dev/sdb3 será la partición / configurada como RAID 1

/dev/sdb4 será la partición /home configurada como RAID 1

Ahora montamos el RAID, esto hará que aparezcan unos dispositivos por cada partición controlada mediante RAID, y son los que utilizaremos en lugar de /dev/sda1 o /dev/sda2 a la hora de trabajar con los discos duros (en el fstab por ejemplo):

Lo que hacemos es crear los volúmenes únicamente con las particiones del disco sdb, el disco sda lo añadiremos una vez que el sistema consiga arrancar desde el RAID (por eso indicamos ahora que está missing). Cuando incluyamos el disco sda en el RAID, se borrará por completo y se clonará a partir del disco duro que estamos configurando.

El parámetro name indica la etiqueta que tendrá, muy útil porque sino será algo como md0. El otro parámetro homehost indica el nombre del servidor, en nuestro caso no queremos que lo coloque, por eso le indicamos <none>, es útil cuando se mueven discos duros físicamente entre servidores.

Ahora toca formatear las particiones:

La opción -m 0 hace que se reserven un 0% de los bloques del sistema de archivos (generalmente se reserva un cierto porcentaje para evitar colapsos si se llena mucho, pero por experiencia propia tengo llegado a 0 bytes libres y todo sigue funcionando :D), y el parámetro -L XXXX establece una etiqueta.

Tuve un problema extraño con el disco duro al formatear la partición home, por alguna razón, tras dos horas generando el sistema de archivos, mostró este mensaje y el disco duro mostraba errores en dmesg:

ext2fs_mkdir: Attempt to read block from filesystem resulted in short read

smartctl -i /dev/sdb

smartctl muestra 600 Petabytes

Tras reiniciar, procedí a volver a generar el sistema de archivos y parece que funcionó:

Ahora toca copiar los datos:

/dev/sda1 lo copiaremos en /dev/md/boot

/dev/mapper/espejo-root lo copiaremos en /dev/md/root

/dev/mapper/var lo copiaremos dentro de /dev/md/root en la carpeta var que existirá después de copiar el espejo-root

/dev/mapper/usr lo copiaremos dentro de /dev/md/root en la carpeta usr que existirá después de copiar el espejo-root

/dev/mapper/espejo-tmp no lo copiaremos, son sólo archivos temporales.

/dev/mapper/espejo-home lo copiaremos en /dev/md/home

Vamos a ello, montamos las unidades RAID y transferimos los ficheros:

Ya está todo copiado, vamos a configurar el equipo para que pueda arrancar desde el RAID:

Parece que todo fue bien, pero tenemos que comprobarlo. Revisamos el fichero grub.cfg, tiene que cargar los módulos raid y mdraid1x. Además de eso, los identificadores de las particiones deberían ser los de las particiones RAID:

Todo correcto. Si no funcionase, podéis colocar ese texto (menuentry { … }) en el archivo /etc/grub/40_custom y volver a ejecutar update-grub.

Ahora mismo tenemos un disco duro configurado para arrancar sin RAID, y el otro configurado para arrancar con RAID. Reiniciamos el equipo y o bien entramos en la BIOS para cambiar el orden de arranque de los discos duros, o bien intercambiamos físicamente los cables SATA. Yo he optado por intercambiar los cables (¡Ojo! ahora /dev/sda será el RAID bueno y /dev/sdb será el disco antiguo que sobreescribiremos). Si todo va bien deberíais ver esto:

Ahora tenemos que borrar el disco duro antiguo e integrarlo en el RAID, para ello, copiamos la tabla de particiones desde el disco nuevo al viejo, reiniciamos para que el kernel redetecte todo bien y lo añadimos al array:

Podéis ver como avanza la sincronización con los siguientes comandos:

Se puede lanzar el comando automáticamente cada 10 segundos usando:

En mi caso, tardará 4 horas en sincronizar los dos discos duros de más de 400 GB. Mientras tanto, vamos con un bonus, vamos a crear un RAID 0 sobre la segunda partición de ambos discos, que era la que reservamos para SWAP (1024 MB + 1024 MB). RAID 0 no ofrece redundancia pero sí mejora el rendimiento, algo que tiene mucho sentido para la SWAP. Vamos a ello, es igual que lo que hicimos antes, pero con nivel 0:

Listo, ahora sólo queda esperar a que acabe de sincronizar el disco y habremos terminado. 🙂

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *