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:

root@oficina:~# df -h
S.ficheros              Tamaño Usados  Disp Uso% Montado en
rootfs                    322M   120M  186M  40% /
udev                       10M      0   10M   0% /dev
tmpfs                      89M   556K   88M   1% /run
/dev/mapper/espejo-root   322M   120M  186M  40% /
tmpfs                     5,0M      0  5,0M   0% /run/lock
tmpfs                     177M      0  177M   0% /run/shm
/dev/sda1                 228M    12M  204M   6% /boot
/dev/mapper/espejo-home   446G   218G  206G  52% /home
/dev/mapper/espejo-tmp    368M    11M  339M   3% /tmp
/dev/mapper/espejo-usr    8,3G   7,4G  464M  95% /usr
/dev/mapper/espejo-var    2,8G   1,6G  1,2G  58% /var
root@oficina:~#root@oficina:~# fdisk -l /dev/sda

Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, 976773168 sectores en total
Units = sectores of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identificador del disco: 0x000317f3

Disposit. Inicio    Comienzo      Fin      Bloques  Id  Sistema
/dev/sda1   *        2048      499711      248832   83  Linux
/dev/sda2          501758   976771071   488134657    5  Extendida
/dev/sda5          501760   976771071   488134656   8e  Linux LVM
root@oficina:~# fdisk -l /dev/sdb

Disk /dev/sdb: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, 976773168 sectores en total
Units = sectores of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identificador del disco: 0x00000000

El disco /dev/sdb no contiene una tabla de particiones válida
root@oficina:~#

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

cfdisk

root@oficina:~# fdisk -l /dev/sdb

Disk /dev/sdb: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, 976773168 sectores en total
Units = sectores of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identificador del disco: 0x00000000

Disposit. Inicio    Comienzo      Fin      Bloques  Id  Sistema
/dev/sdb1   *          63      996029      497983+  fd  Linux raid autodetect
/dev/sdb2          996030     2988089      996030   fd  Linux raid autodetect
/dev/sdb3         2988090    43054199    20033055   fd  Linux raid autodetect
/dev/sdb4        43054200   976773167   466859484   fd  Linux raid autodetect
root@oficina:~#

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):

root@oficina:~# apt-get install mdadm
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias       
Leyendo la información de estado... Hecho
mdadm ya está en su versión más reciente.
0 actualizados, 0 se instalarán, 0 para eliminar y 0 no actualizados.
root@oficina:~# mdadm --create boot --name=boot --homehost="<none>" --level=1 --raid-devices=2 missing /dev/sdb1
mdadm: Note: this array has metadata at the start and
 may not be suitable as a boot device. If you plan to
 store '/boot' on this device please ensure that
 your boot-loader understands md/v1.x metadata, or use
 --metadata=0.90
Continue creating array? yes
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md/boot started.
root@oficina:~# mdadm --create root --name=root --homehost="<none>" --level=1 --raid-devices=2 missing /dev/sdb3
mdadm: Note: this array has metadata at the start and
 may not be suitable as a boot device. If you plan to
 store '/boot' on this device please ensure that
 your boot-loader understands md/v1.x metadata, or use
 --metadata=0.90
Continue creating array? yes
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md/root started.
root@oficina:~# mdadm --create home --name=home --homehost="<none>" --level=1 --raid-devices=2 missing /dev/sdb4
mdadm: Note: this array has metadata at the start and
 may not be suitable as a boot device. If you plan to
 store '/boot' on this device please ensure that
 your boot-loader understands md/v1.x metadata, or use
 --metadata=0.90
Continue creating array? yes
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md/home started.
root@oficina:~# ls -la /dev/md
total 0
drwxr-xr-x 2 root root 100 oct 22 20:36 .
drwxr-xr-x 15 root root 3360 oct 22 20:36 ..
lrwxrwxrwx 1 root root 8 oct 22 20:31 boot -> ../md127
lrwxrwxrwx 1 root root 8 oct 22 20:36 home -> ../md125
lrwxrwxrwx 1 root root 8 oct 22 20:35 root -> ../md126
root@oficina:~#

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 , es útil cuando se mueven discos duros físicamente entre servidores.

Ahora toca formatear las particiones:

root@oficina:~# mkfs.ext4 -m 0 -L BOOT /dev/md/boot
mke2fs 1.42.5 (29-Jul-2012)
Etiqueta del sistema de ficheros=BOOT
OS type: Linux
Tamaño del bloque=1024 (bitácora=0)
Tamaño del fragmento=1024 (bitácora=0)
Stride=0 blocks, Stripe width=0 blocks
124440 inodes, 497664 blocks
0 blocks (0.00%) reserved for the super user
Primer bloque de datos=1
Número máximo de bloques del sistema de ficheros=67633152
61 bloque de grupos
8192 bloques por grupo, 8192 fragmentos por grupo
2040 nodos-i por grupo
Respaldo del superbloque guardado en los bloques: 
    8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409

Allocating group tables: hecho                           
Escribiendo las tablas de nodos-i: hecho                           
Creating journal (8192 blocks): hecho
Escribiendo superbloques y la información contable del sistema de ficheros:  0/6hecho

root@oficina:~# mkswap /dev/sdb2
Setting up swapspace version 1, size = 996024 KiB
no label, UUID=ec3df6d1-1774-4606-8c46-72e02e5d7737
root@oficina:~# mkfs.ext4 -m 0 -L ROOT /dev/md/root
mke2fs 1.42.5 (29-Jul-2012)
Etiqueta del sistema de ficheros=ROOT
OS type: Linux
Tamaño del bloque=4096 (bitácora=2)
Tamaño del fragmento=4096 (bitácora=2)
Stride=0 blocks, Stripe width=0 blocks
1253376 inodes, 5004144 blocks
0 blocks (0.00%) reserved for the super user
Primer bloque de datos=0
Número máximo de bloques del sistema de ficheros=0
153 bloque de grupos
32768 bloques por grupo, 32768 fragmentos por grupo
8192 nodos-i por grupo
Respaldo del superbloque guardado en los bloques: 
 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
 4096000

Allocating group tables: hecho 
Escribiendo las tablas de nodos-i: hecho 
Creating journal (32768 blocks): hecho
Escribiendo superbloques y la información contable del sistema de ficheros: 0/hecho 

root@oficina:~# 

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ó:

root@oficina:~# mkfs.ext4 -m 0 -L HOME /dev/md/home
mke2fs 1.42.5 (29-Jul-2012)
Etiqueta del sistema de ficheros=HOME
OS type: Linux
Tamaño del bloque=4096 (bitácora=2)
Tamaño del fragmento=4096 (bitácora=2)
Stride=0 blocks, Stripe width=0 blocks
29171712 inodes, 116682064 blocks
0 blocks (0.00%) reserved for the super user
Primer bloque de datos=0
Número máximo de bloques del sistema de ficheros=0
3561 bloque de grupos
32768 bloques por grupo, 32768 fragmentos por grupo
8192 nodos-i por grupo
Respaldo del superbloque guardado en los bloques: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
    102400000

Allocating group tables: hecho                           
Escribiendo las tablas de nodos-i: hecho                           
Creating journal (32768 blocks): hecho
Escribiendo superbloques y la información contable del sistema de ficheros: hecho

root@oficina:~#

Ahora toca copiar los datos:

root@oficina:~# mount | grep \/dev
udev on /dev type devtmpfs (rw,relatime,size=10240k,nr_inodes=112460,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
/dev/mapper/espejo-root on / type ext3 (rw,relatime,errors=remount-ro,barrier=1,data=ordered)
/dev/sda1 on /boot type ext2 (rw,relatime,errors=continue)
/dev/mapper/espejo-home on /home type ext3 (rw,relatime,errors=continue,barrier=1,data=ordered)
/dev/mapper/espejo-tmp on /tmp type ext3 (rw,relatime,errors=continue,barrier=1,data=ordered)
/dev/mapper/espejo-usr on /usr type ext3 (rw,relatime,errors=continue,barrier=1,data=ordered)
/dev/mapper/espejo-var on /var type ext3 (rw,relatime,errors=continue,barrier=1,data=ordered)
root@oficina:~#

/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:

root@oficina:~# mkdir /mnt/root
root@oficina:~# mkdir /mnt/boot
root@oficina:~# mkdir /mnt/home
root@oficina:~# mount /dev/md/root /mnt/root/
root@oficina:~# mount /dev/md/boot /mnt/boot/
root@oficina:~# mount /dev/md/home /mnt/home/
root@oficina:~# cp -xaRP /boot/* /mnt/boot/
root@oficina:~# rsync -auxHAX --exclude=/proc/* --exclude=/sys/* --exclude=/tmp/* / /mnt/root
root@oficina:~# cp -xaRP /var/* /mnt/root/var/
root@oficina:~# cp -xaRP /usr/* /mnt/root/usr/
root@oficina:~# cp -xaRP /home/* /mnt/home/
root@oficina:~# mount -o bind /dev/ /mnt/root/dev/
root@oficina:~# mount -o bind /proc/ /mnt/root/proc/
root@oficina:~# mount -o bind /sys/ /mnt/root/sys/
root@oficina:~# umount /mnt/boot/
root@oficina:~# chroot /mnt/root/

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

root@oficina:/# mount /dev/md/boot /boot/
root@oficina:/# vi /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
/dev/md/root / ext4 errors=remount-ro 0 1
/dev/md/boot /boot ext4 defaults 0 2
/dev/md/home /home ext4 defaults 0 2
#/dev/mapper/espejo-swap_1 none swap sw 0 0

root@oficina:/# /usr/share/mdadm/mkconf > /etc/mdadm/mdadm.conf
root@oficina:/# update-initramfs -k all -u
update-initramfs: Generating /boot/initrd.img-4.1.3-devel
root@oficina:/# grub-install --recheck /dev/sdb
Installation finished. No error reported.
root@oficina:/# update-grub
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-4.1.3-devel
Found initrd image: /boot/initrd.img-4.1.3-devel
done
root@oficina:/#

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:

root@oficina:/# vi /boot/grub/grub.cfg 

...
### BEGIN /etc/grub.d/10_linux ###
menuentry 'Debian GNU/Linux, with Linux 4.1.3-devel' --class debian --class gnu-linux --class gnu --class os {
    load_video
    insmod gzio
    insmod raid
    insmod mdraid1x
    insmod part_msdos
    insmod ext2
    set root='(mduuid/a88ec28f7b0f29d73baa2ebb96f1f2aa)'
    search --no-floppy --fs-uuid --set=root 871c9c73-47f5-4497-bd37-d123b04b9db5
    echo    'Loading Linux 4.1.3-devel ...'
    linux    /vmlinuz-4.1.3-devel root=UUID=addeade3-fda8-4927-8e84-1749ec9d96d9 ro  quiet
    echo    'Loading initial ramdisk ...'
    initrd    /initrd.img-4.1.3-devel
} 
... 

root@oficina:/# blkid /dev/md/root 
/dev/md/root: LABEL="ROOT" UUID="addeade3-fda8-4927-8e84-1749ec9d96d9" TYPE="ext4" 
root@oficina:/# blkid /dev/md/boot
/dev/md/boot: LABEL="BOOT" UUID="871c9c73-47f5-4497-bd37-d123b04b9db5" TYPE="ext4" 
root@oficina:/#

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:

root@oficina:~# df -h
S.ficheros                                             Tamaño Usados  Disp Uso% Montado en
rootfs                                                    19G    11G  8,2G  57% /
udev                                                      10M      0   10M   0% /dev
tmpfs                                                     89M   628K   88M   1% /run
/dev/disk/by-uuid/addeade3-fda8-4927-8e84-1749ec9d96d9    19G    11G  8,2G  57% /
tmpfs                                                    5,0M      0  5,0M   0% /run/lock
tmpfs                                                    177M      0  177M   0% /run/shm
/dev/md127                                               463M    23M  437M   5% /boot
/dev/md125                                               438G   217G  222G  50% /home
root@oficina:~# ls -la /dev/disk/by-uuid/ | grep md
lrwxrwxrwx 1 root root  11 jul 22 19:01 1697cc5b-d157-4b80-9422-597c38519d40 -> ../../md125
lrwxrwxrwx 1 root root  11 jul 22 19:01 871c9c73-47f5-4497-bd37-d123b04b9db5 -> ../../md127
lrwxrwxrwx 1 root root  11 jul 22 19:01 addeade3-fda8-4927-8e84-1749ec9d96d9 -> ../../md126
root@oficina:~# ls -la /dev/md/
total 0
drwxr-xr-x  2 root root  100 jul 22 19:01 .
drwxr-xr-x 15 root root 3520 jul 22 19:01 ..
lrwxrwxrwx  1 root root    8 jul 22 19:01 boot -> ../md127
lrwxrwxrwx  1 root root    8 jul 22 19:01 home -> ../md125
lrwxrwxrwx  1 root root    8 jul 22 19:01 root -> ../md126
root@oficina:~# cat /proc/mdstat 
Personalities : [raid1] 
md125 : active raid1 sda4[1]
      466728256 blocks super 1.2 [2/1] [_U]

md126 : active raid1 sda3[1]
      20016576 blocks super 1.2 [2/1] [_U]

md127 : active raid1 sda1[1]
      497664 blocks super 1.2 [2/1] [_U]

unused devices: <none>
root@oficina:~# fdisk -l /dev/sda

Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, 976773168 sectores en total
Units = sectores of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identificador del disco: 0x00000000

Disposit. Inicio Comienzo Fin Bloques Id Sistema
/dev/sda1 * 63 996029 497983+ fd Linux raid autodetect
/dev/sda2 996030 2988089 996030 fd Linux raid autodetect
/dev/sda3 2988090 43054199 20033055 fd Linux raid autodetect
/dev/sda4 43054200 976773167 466859484 fd Linux raid autodetect
root@oficina:~# fdisk -l /dev/sdb

Disk /dev/sdb: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, 976773168 sectores en total
Units = sectores of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identificador del disco: 0x000317f3

Disposit. Inicio Comienzo        Fin   Bloques Id Sistema
/dev/sdb1   *      2048       499711    248832 83 Linux
/dev/sdb2        501758    976771071 488134657  5 Extendida
/dev/sdb5        501760    976771071 488134656 8e Linux LVM
root@oficina:~#

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:

root@oficina:~# dd if=/dev/sda of=/dev/sdb bs=512 count=1
1+0 registros leídos
1+0 registros escritos
512 bytes (512 B) copiados, 0,000153029 s, 3,3 MB/s
root@oficina:~# fdisk -l /dev/sdb

Disk /dev/sdb: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, 976773168 sectores en total
Units = sectores of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identificador del disco: 0x00000000

Disposit. Inicio    Comienzo      Fin      Bloques  Id  Sistema
/dev/sdb1   *          63      996029      497983+  fd  Linux raid autodetect
/dev/sdb2          996030     2988089      996030   fd  Linux raid autodetect
/dev/sdb3         2988090    43054199    20033055   fd  Linux raid autodetect
/dev/sdb4        43054200   976773167   466859484   fd  Linux raid autodetect
root@oficina:~# reboot
...
root@oficina:~# mdadm /dev/md/boot -a /dev/sdb1
mdadm: added /dev/sdb1
root@oficina:~# mdadm /dev/md/root -a /dev/sdb3
mdadm: added /dev/sdb3
root@oficina:~# mdadm /dev/md/home -a /dev/sdb4
mdadm: added /dev/sdb4
root@oficina:~#

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

root@oficina:~# cat /proc/mdstat 
Personalities : [raid1] 
md125 : active raid1 sdb4[2] sda4[1]
 466728256 blocks super 1.2 [2/1] [_U]
 resync=DELAYED

md126 : active raid1 sdb3[2] sda3[1]
 20016576 blocks super 1.2 [2/1] [_U]
 [==========>..........] recovery = 51.8% (10377088/20016576) finish=4.1min speed=38823K/sec

md127 : active raid1 sdb1[2] sda1[1]
 497664 blocks super 1.2 [2/2] [UU]

unused devices: <none>
root@oficina:~# mdadm --detail /dev/md/home
/dev/md/home:
        Version : 1.2
  Creation Time : Wed Jul 22 20:36:26 2015
     Raid Level : raid1
     Array Size : 466728256 (445.11 GiB 477.93 GB)
  Used Dev Size : 466728256 (445.11 GiB 477.93 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Wed Jul 22 19:14:16 2015
          State : clean, degraded, resyncing (DELAYED) 
 Active Devices : 1
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 1

           Name : home
           UUID : 6d19ec6c:1498b05d:aa842f0a:f4ade329
         Events : 3470

    Number   Major   Minor   RaidDevice State
       2       8       20        0      spare rebuilding   /dev/sdb4
       1       8        4        1      active sync   /dev/sda4
root@oficina:~# cat /proc/mdstat 
Personalities : [raid1] 
md125 : active raid1 sdb4[2] sda4[1]
 466728256 blocks super 1.2 [2/1] [_U]
 [>....................] recovery = 1.0% (4936064/466728256) finish=228.6min speed=33654K/sec

md126 : active raid1 sdb3[2] sda3[1]
 20016576 blocks super 1.2 [2/2] [UU]

md127 : active raid1 sdb1[2] sda1[1]
 497664 blocks super 1.2 [2/2] [UU]

unused devices: <none>
root@oficina:~# mdadm --detail /dev/md/root
/dev/md/root:
        Version : 1.2
  Creation Time : Wed Jul 22 20:35:43 2015
     Raid Level : raid1
     Array Size : 20016576 (19.09 GiB 20.50 GB)
  Used Dev Size : 20016576 (19.09 GiB 20.50 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Wed Jul 22 19:24:13 2015
          State : clean 
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : root
           UUID : d725447d:6141736f:ffbdb132:42ee270b
         Events : 4383

    Number   Major   Minor   RaidDevice State
       2       8       19        0      active sync   /dev/sdb3
       1       8        3        1      active sync   /dev/sda3
root@oficina:~#

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

watch -n 10 cat /proc/mdstat

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:

root@oficina:~# mdadm --create swap --name=swap --homehost="<none>" --level=0 --raid-devices=2 /dev/sda2 /dev/sdb2
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md/swap started.
root@oficina:~# mkswap -L SWAP /dev/md/swap 
mkswap: /dev/md/swap: warning: don't erase bootbits sectors
        on whole disk. Use -f to force.
Setting up swapspace version 1, size = 1991676 KiB
LABEL=SWAP, UUID=5be8a945-aa1c-4a1c-89f7-7419ebed388c
root@oficina:~# cat /proc/mdstat 
Personalities : [raid1] [raid0] 
md124 : active raid0 sdb2[1] sda2[0]
      1991680 blocks super 1.2 512k chunks

md125 : active raid1 sdb4[2] sda4[1]
      466728256 blocks super 1.2 [2/1] [_U]
      [>....................]  recovery =  3.5% (16569216/466728256) finish=407.6min speed=18404K/sec

md126 : active raid1 sdb3[2] sda3[1]
      20016576 blocks super 1.2 [2/2] [UU]

md127 : active raid1 sdb1[2] sda1[1]
      497664 blocks super 1.2 [2/2] [UU]

unused devices: <none>
root@oficina:~# /usr/share/mdadm/mkconf > /etc/mdadm/mdadm.conf
root@oficina:~# update-initramfs -k all -u && update-grub
update-initramfs: Generating /boot/initrd.img-4.1.3-devel
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-4.1.3-devel
Found initrd image: /boot/initrd.img-4.1.3-devel
  No volume groups found
done
root@oficina:~# vi /etc/fstab
...
#/dev/mapper/espejo-swap_1 none swap sw 0 0
/dev/md/swap none swap sw 0 0 
... 
root@oficina:~# swapon -a 
root@oficina:~# free 
      total   used    free   shared buffers cached 
Mem:  903268  138012  765256 0      14600   75796 
-/+ buffers/cache: 47616 855652 
Swap: 1991676 0       1991676 
root@oficina:~#

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