Raid 0 reciclando pendrives

Sección Unicamente para Tutoriales y Guías
Responder
Sadrarin
Pi Alpha
Pi Alpha
Mensajes: 30
Registrado: 28 Jul 2017, 22:12
Agradecido: 0
Agradecimiento recibido: 0

Estos días me ha dado por trastear con la pi, hace tiempo que tengo el swap en un archivo ubicado en un disco externo usb. Así puedo tener más swap y además aumento la vida útil de la tarjeta. Con este experimento creo que puedo liberar al disco usb para que entre en reposo cuando no esté en uso.

Hace poco me puse a hacer limpieza por casa y me he dado cuenta de que tengo muchos pendrives de 2, 4 y 8 Gb. Así que me he propuesto darles algo de utilidad.

Lo primero ha sido escoger los pendrives que creía que estaban mejor, son 4 de 8Gb de diferentes marcas:

Imagen

También voy a reutilizar un hub usb 3.0 alimentado para no sobrecargar la pi:
Imagen

Así la idea es era usar los 4 pendrives para tener una unidad raid 0 de 32Gb.
Imagen


Por desgracia, dos de los pendrives no se cargaban bien al arrancar la pi y fallaba el raid, así que me quedé con dos.

- Lo primero es instalar mdadm, que será el encargado de crear y gestionar el raid:

Código: Seleccionar todo

pi@central:~ $ sudo apt-get install mdadm
- Para saber que unidades son las usaremos para el raid, usamos el comando lsblk:

Código: Seleccionar todo

pi@central:~ $ sudo lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sdd           8:48   1   7,5G  0 disk    <----- Pendrive
sdb           8:16   0   7,3T  0 disk
├─sdb4        8:20   0     3T  0 part /disco
├─sdb2        8:18   0   4,2T  0 part /winbackup
├─sdb3        8:19   0    20G  0 part /www
└─sdb1        8:17   0   128M  0 part
sde           8:64   1   7,5G  0 disk    <----- Pendrive
sdc           8:32   0 931,5G  0 disk
└─sdc1        8:33   0 931,5G  0 part /disco2
sda           8:0    0 931,5G  0 disk
├─sda2        8:2    0  18,6G  0 part /www2
└─sda1        8:1    0 912,9G  0 part /disco3
mmcblk0     179:0    0  14,4G  0 disk
├─mmcblk0p2 179:2    0     1K  0 part
├─mmcblk0p7 179:7    0  13,1G  0 part /
├─mmcblk0p5 179:5    0    32M  0 part
├─mmcblk0p1 179:1    0   1,2G  0 part
└─mmcblk0p6 179:6    0    66M  0 part /boot
Como veis, hay dos discos de 7,5Gb (/dev/sdd y /dev/sde). Esos son los que usaremos para el raid.

- Creamos el raid, en este caso será un raid 0:

Código: Seleccionar todo

pi@central:~ $ sudo mdadm --create /dev/md0 -l 0 -n 2 /dev/sdd /dev/sde
mdadm: chunk size defaults to 512K
mdadm: /dev/sdd appears to contain an ext2fs file system
       size=7864320K  mtime=Thu Jan  1 01:00:00 1970
mdadm: /dev/sde appears to contain an ext2fs file system
       size=7839744K  mtime=Thu Jan  1 01:00:00 1970
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
Con --create le decimos que crearemos el raid en /dev/md0, con -l 0 que será un raid 0 y con -n 2 que estará formado por dos discos: /dev/sdd y /dev/sde. Nos pedirá la confirmación y ya tenemos el raid montado.

- Para comprobar si realmente está creado, volvemos a usar el comando lsblk:

Código: Seleccionar todo

pi@central:~ $ sudo lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sdd           8:48   1   7,5G  0 disk
└─md0         9:0    0    15G  0 raid0    <----- Pendrive
sdb           8:16   0   7,3T  0 disk
├─sdb4        8:20   0     3T  0 part  /disco
├─sdb2        8:18   0   4,2T  0 part  /winbackup
├─sdb3        8:19   0    20G  0 part  /www
└─sdb1        8:17   0   128M  0 part
sde           8:64   1   7,5G  0 disk
└─md0         9:0    0    15G  0 raid0    <----- Pendrive
sdc           8:32   0 931,5G  0 disk
└─sdc1        8:33   0 931,5G  0 part  /disco2
sda           8:0    0 931,5G  0 disk
├─sda2        8:2    0  18,6G  0 part  /www2
└─sda1        8:1    0 912,9G  0 part  /disco3
mmcblk0     179:0    0  14,4G  0 disk
├─mmcblk0p2 179:2    0     1K  0 part
├─mmcblk0p7 179:7    0  13,1G  0 part  /
├─mmcblk0p5 179:5    0    32M  0 part
├─mmcblk0p1 179:1    0   1,2G  0 part
└─mmcblk0p6 179:6    0    66M  0 part  /boot
Como veis, tenemos las dos unidades asignadas al raid0 /dev/md0

- Ahora toca formatear el disco, en este caso voy a formatearlo desactivando el journal para mejorar el rendimiento:

Código: Seleccionar todo

pi@central:~ $ sudo mkfs.ext4 -O ^has_journal /dev/md0
mke2fs 1.43.3 (04-Sep-2016)
/dev/md0 contiene un sistema de ficheros ext4
        última fecha de montaje Tue Aug  1 10:18:10 2017
¿Continuar de todas formas? (s,n) s
Se está creando un sistema de ficheros con 3923968 bloques de 4k y 981120 nodos-i
UUID del sistema de ficheros: f2b31600-3b3c-4549-8854-ad981badb764
Respaldo del superbloque guardado en los bloques:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208

Reservando las tablas de grupo: hecho
Escribiendo las tablas de nodos-i: hecho
Escribiendo superbloques y la información contable del sistema de ficheros: hecho
- Para probar si todo va bien, creamos la carpeta donde montaremos el raid y procedemos a montarlo:

Código: Seleccionar todo

pi@central:~ $ sudo mkdir /raid0 

pi@central:~ $ sudo mount /dev/md0 /raid0
(En mi caso lo he montado en /raid0, vosotros montarlo donde soleis montar las unidades)

- Y comprobamos que todo esté bien:

Código: Seleccionar todo

pi@central:~ $ sudo df -h
S.ficheros            Tamaño Usados  Disp Uso% Montado en
/dev/root                13G   7,1G  5,2G  58% /
devtmpfs                474M      0  474M   0% /dev
tmpfs                   478M      0  478M   0% /dev/shm
tmpfs                   478M    19M  459M   4% /run
tmpfs                   5,0M   4,0K  5,0M   1% /run/lock
tmpfs                   478M      0  478M   0% /sys/fs/cgroup
/dev/mmcblk0p6           66M    22M   45M  33% /boot
/dev/sda2                19G   835M   17G   5% /www2
/dev/sdb3                20G   955M   18G   6% /www
/dev/sda1               913G   888G   26G  98% /disco3
/dev/sdc1               917G   604G  267G  70% /disco2
/dev/sdb2               4,3T   1,1T  3,2T  25% /winbackup
/dev/sdb4               3,0T   888G  2,0T  31% /disco
tmpfs                    96M      0   96M   0% /run/user/1000
/dev/md0                 15G    41M   14G   1% /raid0    <----- Raid
Bien, ya tenemos un disco raid 0 de 15Gb.

- Lo siguiente será asegurarnos de que mdadm monte el raid en cada inicio, ejecutamos:

Código: Seleccionar todo

pi@central:~ $ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
ARRAY /dev/md0 metadata=1.2 name=central:0 UUID=1a39fe6d:d72d63f5:b61cdeb0:022f3319
Así el raid queda registrado en el archivo de configuración de mdadm:

Código: Seleccionar todo

pi@central:~ $ sudo cat /etc/mdadm/mdadm.conf
# mdadm.conf
#
# Please refer to mdadm.conf(5) for information about this file.
#

# by default (built-in), scan all partitions (/proc/partitions) and all
# containers for MD superblocks. alternatively, specify devices to scan, using
# wildcards if desired.
DEVICE partitions containers

# auto-create devices with Debian standard permissions
CREATE owner=root group=disk mode=0660 auto=yes

# automatically tag new arrays as belonging to the local system
HOMEHOST <system>

# instruct the monitoring daemon where to send mail alerts
MAILADDR root

# definitions of existing MD arrays

# This configuration was auto-generated on Mon, 31 Jul 2017 15:49:27 +0200 by mkconf
ARRAY /dev/md0 metadata=1.2 name=central:0 UUID=1a39fe6d:d72d63f5:b61cdeb0:022f3319
Es importante que las opciones DEVICE, CREATE, HOMEHOST estén descomentadas (al final del post explico por qué).

- Ahora añadimos nuestro raid al fstab (ojo con este paso, ya sabeis que podemos liarla) :x En mi caso mi fstab quedaría así:

Código: Seleccionar todo

pi@central:~ $ sudo nano /etc/fstab
proc            /proc           proc    defaults          0       0
/dev/mmcblk0p6  /boot           vfat    defaults          0       2
/dev/mmcblk0p7  /               ext4    defaults,noatime  0       1
UUID="01D24A82897F9750" /disco3 ntfs    defaults,noatime,nofail 0       2
UUID="dd4c9a6b-4bcf-4554-a179-6818c13459e5"     /www2   ext4    defaults,noatime,nofail 0       2
UUID="59a6f298-cfc0-491a-9152-423f45db773e"     /disco2 ext4    defaults,noatime,nofail 0       2
UUID="01D2FB048D1832E0" /winbackup      ntfs    defaults,noatime,nofail 0       2
UUID="b21f5430-a633-4cd4-99ac-e249ebef54dd"     /www    ext4    defaults,noatime,nofail 0       2
UUID="4a04e880-fd6c-4423-91f1-bcff4e1c63a0"     /disco  ext4    defaults,noatime,nofail 0       2
/dev/md0        /raid0  ext4    defaults,noatime,nofail 0       2     <----- Raid
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that
ES MUY IMPORTANTE añadir la opción nofail. Si por cualquier motivo alguno de los pendrives falla, el sistema se pondría en Emergency Mode y no arrancaría con normalidad (es lo que me pasó la primera vez y no veais el jaleo que tuve que armar para sacar la pi de donde la tengo guardada). Con esta opción el sistema no se detiene si no puede montar el disco.

-[PD] En mi caso, por algún motivo mdadm monta el raid cuando le da la gana. Lo he solucionado con el comando:

Código: Seleccionar todo

sudo update-initramfs -u
- Y ya tenemos listo nuestro raid 0, no será una gran mejora pero podemos liberar de trabajo a la tarjeta sd moviendo el archivo swap y usándolo para meter archivos temporales o lo que se os ocurra.
Os dejo una prueba de velocidad, como podeis comprobar, no es gran cosa pero para ir empezando lo veo interesante:

ESCRITURA

Código: Seleccionar todo

pi@central:/raid0 $ sudo dd if=/dev/zero of=/raid0/test.tmp bs=1M count=1024 oflag=direct
1024+0 registros leídos
1024+0 registros escritos
1073741824 bytes (1,1 GB) copiados, 90,6049 s, 11,9 MB/s
LECTURA

Código: Seleccionar todo

pi@central:/raid0 $ sudo dd if=/raid0/test.tmp of=/dev/null bs=1M count=1024
1024+0 registros leídos
1024+0 registros escritos
1073741824 bytes (1,1 GB) copiados, 38,4241 s, 27,9 MB/s

CONCLUSION

Para ser mi primer experimento con discos raid, ha sido muy frustrante y gratificante (como casi todo para un novato de linux).

Un fallo de mdadm es que al instalarlo, no descomenta la opción DEVICE y así al reiniciar, no realiza un escaneo en busca de dispositivos raid. Casi me vuelvo loco (es lo que tiene no leer la documentación).

Con los puertos USB 2.0 no lo veo muy aprovechable, pero lo tendré en cuenta en el futuro cuando las próximas versiones de la Raspberry tengan puertos 3.0. Ahí quizá podamos aprovechar la velocidad para tener algo decente.

Espero que os sirva, un saludo. :|

EDITO:

Después de varios reinicios, mdadm no le da la gana de montar el raid. :twisted:

Al final lo he solucionado asi:

1.- Cuando tengais el raid montado y funcionando hay que ejecutar el comando: sudo update-initramfs -u

Así por ahora va funcionando, cualquier cosa ya os aviso :xd :xd
luchognr
Pi Newbie
Pi Newbie
Mensajes: 2
Registrado: 12 Abr 2017, 13:38
Agradecido: 0
Agradecimiento recibido: 0

Excelente trabajo y muy bueno el tutorial. Se agradece
Avatar de Usuario
eneteache
Pi Beta
Pi Beta
Mensajes: 182
Registrado: 10 Abr 2017, 20:13
Agradecido: 0
Agradecimiento recibido: 0

Esto ya es otro nivel!!! :P

Espero que a alguien le sirve o incluso a mi mismo cuando me pique el gusanillo aun que sea por probar... Gracias por el tutorial :inform
arnekia
Pi Omega
Pi Omega
Mensajes: 89
Registrado: 11 Abr 2017, 22:12
Agradecido: 0
Agradecimiento recibido: 0

Esto ya es nivel GOD, :mrgreen: :mrgreen: :mrgreen: buen trabajo!
Sadrarin
Pi Alpha
Pi Alpha
Mensajes: 30
Registrado: 28 Jul 2017, 22:12
Agradecido: 0
Agradecimiento recibido: 0

Ahora mismo no le estoy sacando mucho provecho porque los pendrives están muy viejos. Si sacan la pi4 con usb3 seguro que lo hago para tener los archivos temporales y el swap en él. Un saludo.
Responder