Introducción
En este artículo se va a explicar como montar un RAID 0, RAID 1, RAID 5.
Para montar un RAID hay que hacer 3 cosas:
- Conectar los discos que vayamos a usar e iniciar la máquina.
- Resetear los RAID existentes (opcional).
- Crear el RAID/ARRAY.
- Asignar un sistema de ficheros (FAT, NTFS, EXT4, etc.) al RAID y montarlo.
- Hacer persistentes los cambios haciendo que en el inicio del sistema se cree el RAID y se monte correctamente.
Crear y añadir discos a la máquina virtual
En la máquina deseada, hacemos click en “Configuración”:
Vamos al apartado “Almacenamiento” y hacemos click en “Añadir disco duro”:
Hacemos click en “Crear imagen de disco”:
Seleccionamos la opción por defecto:
Ponemos el tamaño deseado al disco, en mi caso 100 MB:
Observamos que se a añadido a la lista de discos.
- Si queremos crear más discos le volveremos a dar a “Crear imagen de disco” y repetiremos el proceso.
- Si queremos añadir a la máquina virtual cualquier disco lo marcamos y hacemos click en “Seleccionar”.
Repetimos este último paso por cada disco que queramos conectar a la máquina virtual hasta que tengamos un resultado similar al mio:
RAID 0
Instalamos los programas que vamos a usar si no los tenemos ya instalados:
1
$sudo apt-get install mdadm
Las siglas MDADM vienen de Multiple Disk and Device Administration.
Nos aseguramos que no exista una configuración en sdb:
1
2
$sudo mdadm -E /dev/sdb
mdadm: No md superblock detected on /dev/sdb.
Podemos hacer lo mismo con el resto de discos.
Se obtiene información sobre todos los discos que el sistema reconoce y que están debidamente montados:
1
$sudo fdisk -l
Creamos la tabla de particionamiento:
1
$sudo fdisk /dev/sdb
Seguimos la siguiente secuencia:
n
para crear una nueva particiónp
para indicar que la partición es primaria1
para decir que es el número de la particiónenter
para los valores de los sectores y el tamaño de la partición a no ser que queramos especificarlop
si queremos imprimir ahora la tabla de particionesl
para listar los tipos disponiblest
para cambiar a tipo RAIDfd
para cambiar a RAIDw
para escribir los cambios y poder salir
Esta misma secuencia hay que repetirla para cada disco que vaya a estar en el RAID. Otra opción es copiar la configuración directamente de un disco a otro:
1
#sfdisk -d /dev/sdb | sfdisk /dev/sdc
Una vez tengamos todos los discos configurados podemos crear el RAID:
1
2
3
$sudo mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb1 /dev/sdc1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
Observamos el estado del raid md0:
1
$cat /proc/mdstat
o
1
$watch -n1 cat /proc/mdstat
Comprobamos el estado del RAID:
1
2
$sudo mdadm -E /dev/sd[b-c]1
$sudo mdadm --detail /dev/md0
El comando
mdadm -E /dev/sd[b-c]1
hace lo mismo quemdadm -E /dev/sdb1 /dev/sdc1
pero utilizando una expresión regular.
Creamos el sistema de ficheros:
1
$sudo mkfs.ext4 /dev/md0
Creamos la carpeta donde vamos a montar el RAID:
1
$sudo mkdir /mnt/raid0
Montamos el sistema de ficheros en la carpeta creada:
1
$sudo mount /dev/md0 /mnt/raid0/
Hacemos persistentes los cambios añadiendo al fichero /etc/fstab
la siguiente línea al final:
1
/dev/md0 /mnt/raid0 ext4 defaults,nofail,discard 0 0
Guardamos la configuración del RAID en /etc/mdadm/mdadm.conf
siendo el usuario root:
1
#mdadm --detail --scan --verbose >> /etc/mdadm/mdadm.conf
¡Cuidado! Con el comando
mdadm --detail --scan --verbose >> /etc/mdadm/mdadm.conf
cargaremos toda la configuración actual en el fichero/etc/mdadm/mdadm.conf
. Si solo queremos añadir la configuración de un RAID deberemos borrar la configuración anterior o hacermdadm --detail --scan --verbose /dev/md<númeroDeRaid> >> /etc/mdadm/mdadm.conf
.
Actualizamos para evitar que se nos actualize el nombre del RAID en siguientes inicios:
1
$sudo update-initramfs -u
Apagamos para comprobar que el montado es persistente:
1
$sudo reboot
Al reiniciar, a veces se cambia el nombre del RAID de md0 a md127. Por lo que habrá que volver a cambiar el fichero
/etc/fstab
y el fichero/etc/mdadm/mdadm.conf
para que haga referencia al nuevo nombre.
Para probar que estamos usando el RAID y está montado correctamente:
1
$df -h -x devtmpfs -x tmpfs
o de un RAID en específico:
1
$sudo mdadm --detail /dev/md0
Hacer que falle un disco en el RAID 0
Para hacer que una partición falle podemos desconectarlo directamente o podemos ejecutar el siguiente comando:
1
$sudo mdadm --manage /dev/md0 --fail /dev/sdb1
El disco que falle se marcará con una “(F)”.
No podemos hacer que falle un disco que haga que falle el sistema RAID.
Opcionalmente podemos quitarlo del todo:
1
$sudo mdadm --manage /dev/md0 --remove /dev/sdb1
Para deshacer esto podemos volver a añadirlo:
1
$sudo mdadm --manage /dev/md0 --add /dev/sdb1
Deberíamos hacer una copia de seguridad antes para evitar perder información.
Hacer crecer el RAID 0 y añadir disco
Si queremos incorporar discos al RAID solo tenemos que hacer lo siguiente:
1
$sudo mdadm --grow /dev/md0 --level=0 --raid-devices=3 --add /dev/sdd
Deberíamos hacer una copia de seguridad antes para evitar perder información añadiendo la opción
--backup-file=/backupdelraid
.
RAID 1
Se crearán dos discos y se usarán para el nuevo RAID. A diferencia de la solución para un RAID 0, se usará el nivel 1 en el comando:
1
$sudo mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
Hacer crecer el RAID 1 y añadir disco
Añadimos un nuevo disco al raid1 y se deja a la espera:
1
$sudo mdadm --manage /dev/md1 --add /dev/sdd1
Lo añadimos al sistema raid1:
1
$mdadm --grow /dev/md1 --raid-disk=3
Deberíamos hacer una copia de seguridad antes para evitar perder información añadiendo la opción
--backup-file=/backupdelraid
.
Comprobamos el estado del RAID 1:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$sudo mdadm --detail /dev/md1
/dev/md1:
Version : 1.2
Creation Time : Mon Dec 19 12:44:21 2022
Raid Level : raid1
Array Size : 100352 (98.00 MiB 102.76 MB)
Used Dev Size : 100352 (98.00 MiB 102.76 MB)
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Mon Dec 19 12:52:23 2022
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0
Consistency Policy : resync
Name : mrugserver:1 (local to host mrugserver)
UUID : 59c306f7:8c65734d:2136f333:cd0c3cf8
Events : 41
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
2 8 48 2 active sync /dev/sdd1
Pruebas con el RAID 1 de tres discos
Actualmente tengo 3 discos en el RAID 1 como se puede ver en la salida del último comando del apartado anterior.
Hacemos que falle la partición sdb1
y vemos que seguimos pudiendo acceder a mrug.txt:
1
2
3
4
$sudo mdadm --manage /dev/md1 --fail /dev/sdb1
$sudo mdadm --manage /dev/md1 --remove /dev/sdb1
$sudo mdadm --detail /dev/md1
$cat /mnt/raid1/mrug.txt
Hacemos que falle la partición sdc1
y vemos que seguimos pudiendo acceder a mrug.txt:
1
2
3
4
$sudo mdadm --manage /dev/md1 --fail /dev/sdc1
$sudo mdadm --manage /dev/md1 --remove /dev/sdc1
$sudo mdadm --detail /dev/md1
$cat /mnt/raid1/mrug.txt
Hacemos que falle la partición sdd1
y vemos que no nos deja:
1
2
$sudo mdadm --manage /dev/md1 --fail /dev/sdd1
mdadm: set device faulty failed for /dev/sdd1: Device or resource busy
Volvemos a añadir las particiones sdb1 y sdc1.
1
2
$sudo mdadm --manage /dev/md1 --add /dev/sdb1
$sudo mdadm --manage /dev/md1 --add /dev/sdc1
RAID 1+0
Una vez tenemos 4 nuevos discos conectados iniciamos le sistema. Una vez hemos hecho login con nuestro usuario (del grupo sudoers), nos logeamos como root:
1
$sudo su
$sudo mdadm –manage /dev/md1 –fail /dev/sdb1
Creamos el RAID 1+0
Copiamos la configuración del disco sdb al resto de discos:
1
2
3
4
#sfdisk -d /dev/sdb | sfdisk /dev/sde
#sfdisk -d /dev/sdb | sfdisk /dev/sdf
#sfdisk -d /dev/sdb | sfdisk /dev/sdg
#sfdisk -d /dev/sdb | sfdisk /dev/sdh
Creamos el RAID, en mi caso le he puesto el identificador md10:
1
#mdadm --create /dev/md10 --level=raid10 --raid-devices=4 /dev/sde1 /dev/sdf1 /dev/sdg1 /dev/sdh1
Comprobamos el estado del RAID 1+0 y todos los discos por los que está compuesto el mismo:
1
2
3
#cat /proc/mdstat
#mdadm -E /dev/sd[e-h]1
#mdadm --detail /dev/md10
Asignamos el sistema de ficheros al RAID 1+0 y montamos
Creamos el sistema de ficheros
1
#mkfs.ext4 -F /dev/md10
Creamos la carpeta donde vamos a montar el RAID:
1
#mkdir -p /mnt/raid10
Montamos el RAID en la ruta creada:
1
#mount /dev/md10 /mnt/raid10
Comprobamos el espacio disponible:
1
#df -h -x devtmpfs -x tmpfs
Hacemos persistentes los cambios
Guardamos la configuración del RAID:
1
#mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
Comprobar que en el fichero
/etc/mdadm/mdadm.conf
no hay nada duplicado.
1
#update-initramfs -u
Hacemos que se monte en el inicio del sistema:
1
#echo '/dev/md10 /mnt/raid10 ext4 defaults,nofail,discard 0 0' | sudo tee -a /etc/fstab
Comprobar que en el fichero
/etc/fstab
no hay nada duplicado.
Reiniciamos:
1
#reboot
Comprobamos que todo está bien:
1
2
3
4
5
$sudo df -h -x devtmpfs -x tmpfs
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv 9,8G 4,3G 5,0G 47% /
/dev/sda2 1,8G 247M 1,4G 15% /boot
/dev/md10 166M 24K 153M 1% /mnt/raid10
Eliminar el RAID 1+0
Este proceso destruirá el RAID y cualquier dato escrito en él. Asegúrate de que estás trabajando con el RAID correcto y que has copiado todos los datos que necesites preservar.
Listamos los RAIDs que tenemos mirando el contenido del fichero /proc/mdstat
:
1
2
3
4
5
6
$cat /proc/mdstat
Personalities : [raid0] [raid10] [linear] [multipath] [raid1] [raid6] [raid5] [raid4]
md10 : active raid10 sdh1[3] sdg1[2] sdf1[1] sde1[0]
198656 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
unused devices: <none>
Desmontamos el RAID del sistema de ficheros:
1
$sudo umount /dev/md10
Paramos y eliminamos el RAID:
1
$sudo mdadm --stop /dev/md10
Eliminamos la configuración e inicio del ARRAY:
1
$sudo nano /etc/mdadm/mdadm.conf
Averiguamos que discos son los que forman parte del RAID:
Ten en cuenta que los nombres de los discos
/dev/sd<letra>
pueden cambiar cada vez que reinicias por lo que deberías asegurarte de que seleccionas los dispositivos correctos.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
NAME SIZE FSTYPE TYPE MOUNTPOINT
sde 100M disk
└─sde1 99M linux_raid_member part
└─md10 194M ext4 raid10 /mnt/raid10
sdf 100M disk
└─sdf1 99M linux_raid_member part
└─md10 194M ext4 raid10 /mnt/raid10
sdg 100M disk
└─sdg1 99M linux_raid_member part
└─md10 194M ext4 raid10 /mnt/raid10
sdh 100M disk
└─sdh1 99M linux_raid_member part
└─md10 194M ext4 raid10 /mnt/raid10
sr0 1024M rom
Y quitamos la metainforamción de los discos:
1
2
3
4
$sudo mdadm --zero-superblock /dev/sde1
$sudo mdadm --zero-superblock /dev/sdf1
$sudo mdadm --zero-superblock /dev/sdg1
$sudo mdadm --zero-superblock /dev/sdh1
Elimina o comenta toda referencia que haya del raid en /etc/fstab
.
1
$sudo nano /etc/fstab
Actualiza el initramfs
de nuevo para que el sistema de ficheros no intente montar el RAID al inicio:
1
$sudo update-initramfs -u
Reiniciamos con sudo reboot
y comprobamos que todo está limpio:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
NAME SIZE FSTYPE TYPE MOUNTPOINT
loop0 103M squashfs loop /snap/lxd/23541
loop1 63,2M squashfs loop /snap/core20/1738
loop2 49,6M squashfs loop /snap/snapd/17883
loop3 79,9M squashfs loop /snap/lxd/22923
loop4 63,2M squashfs loop /snap/core20/1695
sda 20G disk
├─sda1 1M part
├─sda2 1,8G ext4 part /boot
└─sda3 18,2G LVM2_member part
└─ubuntu--vg-ubuntu--lv 10G ext4 lvm /
sdb 100M disk
└─sdb1 99M part
sdc 100M disk
└─sdc1 99M part
sdd 100M disk
└─sdd1 99M part
sde 100M disk
└─sde1 99M part
sdf 100M disk
└─sdf1 99M part
sdg 100M disk
└─sdg1 99M part
sdh 100M disk
└─sdh1 99M part
sr0 1024M rom
Como podemos ver no queda rastro de ningún md.
RAID 5
Se crearán tres discos y se usarán para el nuevo RAID. A diferencia de la solución para un RAID1 se usará el nivel 5 en el comando:
1
$sudo mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdd1 /dev/sde1 /dev/sdf1
Comandos para comprobar estado del RAID
1
2
3
4
$sudo mdadm --detail /dev/md<número>
$df -h -x devtmpfs -x tmpfs
$cat /proc/mdstat
$sudo lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT