OpenBSD con raid 1 por software

Escrito por Adrian Ali el 13 de julio de 2021, usando OpenBSD Release 7.0 contacto: adrianali arroba fortix.com.ar

Índice

1. Introducción
2. Instalación con softraid raid1
3. Administración
4. Prueba de desenchufar un disco de una raid1
5. Referencias

1. Introducción

OpenBSD ofrece algunos niveles de RAID a través del driver llamado softraid(4). En esta guía vamos a detallar los pasos para instalar OpenBSD sobre una raid1 por software montada en dos discos, ademas de documentar comandos de administración.

2. Instalación con softraid raid1

Cuando estamos instalando OpenBSD, para poder montar su raiz (/) sobre una raid1 debemos entrar al shell cuando aparece el siguiente mensaje:

Welcome to the OpenBSD/amd64 X.X installation program.
(I)nstall, (U)pgrade, (A)utoinstall or (S)hell? s
#

podemos consultar los discos con el siguiente comando:

# sysctl

como hemos arrancado con el instalador en una ramdisk limitada, no tenemos todos los devices creados, debemos crearlo con:

# cd /dev
# sh MAKEDEV sd0 sd1 sd2

ahora tenemos que inicializar el sector de arranque de los discos a usar:

MBR:

# fdisk -iy sd0
# fdisk -iy sd1

UEFI:

# fdisk -iy -g -b 960 sd0
# fdisk -iy -g -b 960 sd1

particionamos el primer disco:

# disklabel -E sd0
Label editor (enter '?' for help at any prompt)
sd0> a a
offset: [64]
size: [39825135] *
FS type: [4.2BSD] RAID
sd0*> w
sd0> q
No label changes.

Copio el esquema de particionado en el segundo disco:

# disklabel sd0 > layout
# disklabel -R sd1 layout
# rm layout

ensamblo el RAID1 con el comando de administración bioctl(8) :

# bioctl -c 1 -l sd0a,sd1a softraid0
sd3: at scsibus2 targ 1 lun 0: <OPENBSD , SR RAID 1, 006>
sd3: 305242MB, 512 bytes/sector , 625136753 sectors
softraid0: RAID 1 volume attached as sd3

Esto muestra que ahora tenemos un nuevo bus SCSI y un nuevo disco, "sd3" , no lo crea como "sd2" porque el mismo esta ocupado con el pen drive de arranque de instalación. Este volumen se detectara y ensamblara automáticamente cuando se inicie el sistema. Incluso si crea varias RAID array, el nombre del dispositivo siempre sera softraid0 , nunca softraid1 ni nada parecido. Debido a que el nuevo dispositivo probablemente tiene mucha basura donde se espera un registro de arranque maestro y una etiqueta de disco, es muy recomendable poner a cero la primera parte. Tener mucho cuidado con este comando; emitirlo en el dispositivo incorrecto podría provocar un mal día. Esto supone que el nuevo dispositivo softraid se creo como sd3.

hay q crear el device para el nuevo sd3:

cd /dev
sh MAKEDEV sd3

y ahora limpiamos el device con el comando "dd":

# dd if=/dev/zero of=/dev/rsd3c bs=1m count=1

hemos terminado de preparar la raid1, ahora con el comando "exit" volvemos al menú de instalación desde donde continuamos la misma.

3. Administración

Una ves instalado y reiniciado el sistema podemos administrar la raid1, esta es una secuencia de comandos para ver primero, en que device esta instalado el sistema; segundo, cuales son los discos del sistema. Con esto deducimos que hay un device raid1 (sd2), vemos sus propiedades y estado con los comandos bioctl y sysctl :

Consulamos el espacio libre:

puffy # df
Filesystem  512-blocks      Used     Avail Capacity  Mounted on
/dev/sd2a    604723056   3182944 571303960     1%    /
puffy #

consultamos los dispositivos de disco disponibles en el sistema:

puffy # sysctl hw.disknames
hw.disknames=sd0:7af8d5850aa5fe84,sd1:39ab931146a1e4b4,sd2:fe9801d4570827e8
puffy #

consultamos información especifica de un disco, en este caso es el device de la raid1:

puffy # bioctl -q sd2
sd2: <OPENBSD, SR RAID 1, 006>, serial (unknown)
puffy #

consultamos el estado de la raid por software:

puffy # sysctl -a | grep softraid0
hw.sensors.softraid0.drive0=online (sd2), OK
puffy #

otra forma de consultar el estado con más detalle:

puffy # bioctl softraid0
Volume      Status               Size Device
softraid0 0 Degraded     320070017536 sd2     RAID1
          0 Online       320070017536 0:0.0   noencl <sd0a>
          1 Offline                 0 0:1.0   noencl <sd1a>
puffy #

4. Prueba de desenchufar un disco de una raid1

Vamos aprender a reconstruir "rebuild" una raid1 degradada, para ello vamos a desenchufar un disco, ya sea desde su alimentación, desde el cable de datos o ambos, noté que en algunos servidores con controladoras SAS/SCSI muy viejas se producía un delay de unos 10 segundos aproximadamente en donde el IO de acceso a disco se congelaba, no sé si este comportamiento es particular del servidor donde hice las pruebas o general cuando usamos raid1 por software con OpenBSD.

Una ves desenchufado el disco con estos comandos vemos que la raid ahora esta degradada:

puffy # sysctl -a | grep softraid0
hw.sensors.softraid0.drive0=degraded (sd2), WARNING
puffy #

con más detalle:

puffy # bioctl softraid0
Volume      Status               Size Device
softraid0 0 Degraded     320070017536 sd2     RAID1
          0 Offline                 0 0:0.0   noencl <sd0a>
          1 Online       320070017536 0:1.0   noencl <sd1a>
puffy #

confirmamos que esta degradada puesto se informa que el device sd2 que es la raid que creamos esta en estado "Degraded". Se prueba reiniciar en este estado el sistema operativo y arranca bien, las pruebas las hice degradando la raid ya sea desenchufando el primer disco SATA o el segundo, en ambos casos el sistema soporta arrancar sin problemas.

Cuando arrancamos con una raid degrada, en el sistema solo aparecen dos discos, el que esta online y el disco/device de la raid1:

puffy # sysctl hw.disknames
hw.disknames=sd0:7af8d5850aa5fe84,sd1:fe9801d4570827e8
puffy #

el device raid paso de ser "sd2" a ser "sd1" , lo comprobamos:

puffy # bioctl -q sd1
sd1: <OPENBSD, SR RAID 1, 006>, serial (unknown)
puffy #

muestra que esta degradada:

puffy # sysctl -a | grep softraid0
hw.sensors.softraid0.drive0=degraded (sd1), WARNING
puffy #

ahora volvemos a enchufar el disco faltante, después que reiniciamos aparece el disco que volvimos a enchufar:

puffy # sysctl hw.disknames
hw.disknames=sd0:7af8d5850aa5fe84,sd1:39ab931146a1e4b4,sd2:fe9801d4570827e8
puffy #

El device del disco que volvimos a enchufar es el "sd1" , pero aún sigue degradada la raid:

puffy # sysctl -a | grep softraid0
hw.sensors.softraid0.drive0=degraded (sd2), WARNING
puffy #

consultamos con más detalle:

puffy # bioctl softraid0
Volume      Status               Size Device
softraid0 0 Degraded     320070017536 sd2     RAID1
          0 Online       320070017536 0:0.0   noencl <sd0a>
          1 Offline                 0 0:1.0   noencl <sd1a>
puffy #

ahora hago el rebuild agregando el disco/particion a la raid:

puffy # bioctl -R /dev/sd1a sd2
softraid0: rebuild of sd2 started on sd1a
puffy #

controlamos:

puffy # sysctl -a | grep softraid0
hw.sensors.softraid0.drive0=rebuilding (sd2), WARNING
puffy #

con más detalle:

puffy # bioctl softraid0
Volume      Status               Size Device
softraid0 0 Rebuild      320070017536 sd2     RAID1 0% done
          0 Online       320070017536 0:0.0   noencl <sd0a>
          1 Rebuild      320070017536 0:1.0   noencl <sd1a>
puffy #

Tener en cuenta que el rebuild es un proceso lento que puede demorar varias horas dependiendo del servidor, después de 30 minutos en este servidor el avance solo fue de un 4%:

puffy # bioctl softraid0
Volume      Status               Size Device
softraid0 0 Rebuild      320070017536 sd2     RAID1 4% done
          0 Online       320070017536 0:0.0   noencl <sd0a>
          1 Rebuild      320070017536 0:1.0   noencl <sd1a>
puffy #

se soporta perfectamente reiniciar el servidor o apagarlo mientras esta en proceso de rebuild, una ves encendido continua desde donde quedo.

5. Referencias

man softraid

man bioctl