Btrfs es muy flexible y potente, entre otro nos permite crear varios tipos de RAID fácilmente. Aun no soporta cifrar los discos de forma nativa, pero si se puede hacer usando LUKS. En este caso vamos a ver que crear un pequeño raid 0, 1 o 10 con Btrfs es muy fácil. También se podría hacer un RAID 5 o 6, pero no se consideran estables, por lo tanto no se deben usar para almacenar datos, unicamente para testear. Para esta mini guía simplemente nos hace falta tener instalado 'btrfs-progs' y 'cryptsetup', tened en cuenta que puede cambiar ligeramente el nombre según la distro.
En Debian:
1 |
$ sudo apt install cryptsetup btrfs-progs -y |
En Gentoo:
1 |
$ sudo emerge btrfs-progs cryptsetup |
Ahora debemos de formatear los discos o particiones. Tanto LUKS como Btrfs permiten usar discos enteros, no estamos obligados a crear una partición ????. Podemos elegir si desbloquear los discos mediante una contraseña o usando un keyfile. Un keyfile es un archivo que contiene la contraseña o caracteres aleatorios (recomendable).
En caso que vayamos a usar un keyfile lo generamos simplemente empleando dd:
1 |
# dd if=/dev/random of=/root/KeyFile bs=1 count=4096 |
Esto va a generar un archivo de 4KB (muy seguro) en el directorio de /root. Podemos usar el tamaño que queramos pero a más grande mejor. También podemos usar '/dev/urandom' pero el keyfile sera de menor calidad.
Es muy recomendable cambiar los permisos:
1 |
# chmod 0400 /root/KeyFile |
Esto nos sera muy útil ya que los discos se van a desbloquear y montar automáticamente durante el arranque. Eso si, hay que tener el disco duro principal cifrado o no serviría de nada cifrar los discos, ya que un atacante tendría acceso directo a la clave de desbloqueo. Por lo tanto se debe proteger de alguna forma o usar contraseña.
Ahora vamos a cifrar los discos:
1 2 3 |
# cryptsetup luksFormat --key-file /root/KeyFile /dev/sdb # cryptsetup luksFormat --key-file /root/KeyFile /dev/sdc # cryptsetup luksFormat --key-file /root/KeyFile /dev/sdd |
Si deseamos usar contraseña(nos la pedirá al iniciar el equipo):
1 2 3 |
# cryptsetup luksFormat /dev/sdb # cryptsetup luksFormat /dev/sdc # cryptsetup luksFormat /dev/sdd |
Este paso lo debemos de repetir con todos los discos o particiones correspondientes. Una vez que tengamos todos los discos cifrados debemos de desbloquearlos y dar formato:
1 2 3 |
# cryptsetup luksOpen --key-file /root/keyfileRaid /dev/sdb Raid-1 # cryptsetup luksOpen --key-file /root/keyfileRaid /dev/sdc Raid-2 # cryptsetup luksOpen --key-file /root/keyfileRaid /dev/sdd Raid-3 |
Cada disco nuevo aumentamos el numero "Raid-2", "Raid-3", etc
Ahora vamos a formatear todos los discos a la vez. Dependiendo del tipo de RAID debemos usar diferentes opciones, para RAID 0:
1 |
# mkfs.btrfs /dev/mapper/Raid-1 /dev/mapper/Raid-2 /dev/mapper/Raid-3 |
RAID 10 (mínimo 4 discos):
1 |
# mkfs.btrfs -d raid10 -m raid10 /dev/mapper/Raid-1 /dev/mapper/Raid-2 /dev/mapper/Raid-3 /dev/mapper/Raid-4 |
Finalmente nos queda configurar el archivo '/etc/crypttab' o '/etc/conf.d/dmcrypt' según nuestra distro. Se puede saber cual de los 2 es porque el otro no debería de existir.
Vamos a empezar con el archivo '/etc/conf.d/dmcrypt':
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
target=Raid-1 source=/dev/disk/by-uuid/5abd4768-582b-4972-b58b-b51e0840cbc4 key=/root/KeyFile target=Raid-2 source=/dev/disk/by-uuid/fc8b691f-df86-46ef-bf8a-280015b73812 key=/root/KeyFile target=Raid-3 source=/dev/disk/by-uuid/11550fbd-c730-46ec-a54a-81e3933ea174 key=/root/KeyFile ##Para desbloquear con contraseña ???? target=Raid-4 source=/dev/disk/by-uuid/11550fbd-c730-46ec-a54a-81e3933ea174 options="--allow-discards" |
Debería de quedar algo parecido. En 'target' es el nombre que recibirá en '/dev/mapper' una vez desbloqueado.
'source' es el disco a desbloquear. 'key' es el lugar donde se encuentra nuestro keyfile (se omite si se desbloquea con contraseña).
1 2 3 4 5 |
Raid-1 UUID=5abd4768-582b-4972-b58b-b51e0840cbc4 /root/KeyFile luks Raid-2 UUID=11550fbd-c730-46ec-a54a-81e3933ea174 /root/KeyFile luks Raid-3 UUID=fc8b691f-df86-46ef-bf8a-280015b73812 /root/KeyFile luks ##Para desbloquear con contraseña ???? Raid-4 UUID=a2913e58-fae0-4cb3-8910-927d394d9e44 none luks,discard |
Primero debemos de poner el nombre que recibirá en '/dev/mapper', el segundo argumento es el UUID o dirección del disco, el tercer argumente puede ser 'none' para desbloquear con contraseña o la ruta completa al keyfile, y el último argumento son las opciones (separadas por una coma), en este caso solo usamos 'luks' pero nos podría interesar emplear la opción de 'discard' si fuera un SSD.
Por último solo queda configurar el archivo '/etc/fstab'
1 |
UUID=6ba0f329-228a-405b-b4a5-3d0140e91107 /home/void/RAID btrfs nofail,compress=lzo,noatime,thread_pool=6,space_cache,autodefrag,commit=1800,device=/dev/mapper/Raid-1,device=/dev/mapper/Raid-2,device=/dev/mapper/Raid-3 0 0 |
Para montar el RAID debemos montar unicamente uno de los discos (por ejemplo /dev/sdb) y el resto se montan automáticamente. Lo más importante es la parte de 'device=/dev/mapper/...', normalmente Btrfs no tendría problemas para montar los discos con normalidad, pero durante el arranque Btrfs no puede escanear los dispositivos y por lo tanto le debemos de marcar de forma manual todas las unidades.
Lecturas recomendadas:
Raid con Btrfs
Wiki de Arch sobre Btrfs
Wiki de Arch sobre dm-crypt
Sobre LUKS y keyfiles