¿ Que son ?
Son sistemas de archivos de alto rendimiento aunque con diferente licenciamiento motivo por el cual ZFS no es parte oficial del kernel de Linux aunque puede instalarse módulos externos que le dan a Linux la capacidad de usar ZFS, BTRFS si es parte del código de Linux aunque RedHat mantiene desactivado el módulo y si se requiere se tiene que re compilar el kernel
¿ Cual es mejor ?
En las pruebas hechas tienen sus fuertes y sus desventajas.
Ventajas de ambos sobre otros sistemas de archivos.
Tienen Snapshot
Tienen volúmenes
Pueden sustituir el RAID y los volúmenes lógicos, sus funcionalidades lo integran
Ventajas de ZFS sobre BTRFS
Tiene cifrado nativo
Tiene auto reparación, como si fuera el poder mutante de Wolfverine, sin intervención del administrador
Tiene Volúmenes Z ( Zvols ) que le permiten tener sistemas de archivos internos diferentes por ejemplo ext4 o xfs dentro del propio ZFS, entrega dispositivos de bloques que además pueden ser cifrados nativamente por ZFS.
¿ Por que un ZVOL es ventajoso ?
Por su forma de funcionar ni BTRFS ni ZFS permiten archivos de overlay, ni archivos loop con sistemas de archivos, significa que Docker no correría sobre ZFS o que no podrías activar un archivo de SWAP para ayuda a la memoria RAM, el ZVOL te da un dispositivo de bloques que puede ser formateado como xfs, ext4 , ntfs si por alguna extraña razón se requiere el caso es que es un depósito de bloques donde podrías correr tu Docker o tener SWAP
Tiene Raid nativo 0, 5,6, y soporta spare ( respuestos ) al mismo tiempo es una desventaja contra BTFS debido a que se comporta como un RAID en toda regla, aumentar los discos de un arrelo, no es recomendado si no es para agregar Spare disk
Desventaja de ZFS frente a BTRFS
No tiene rebalanceo de datos al agregar un nuevo disco a un pool con RAID
Hasta la versión 5.9.2 no se incluye en el kernel por un problema de licenciamiento de incompatibilidad con la GPL, siendo esto un problema filosofo mas que técnico. Para usarlo en Linux debe conseguir se el código, compilar los módulos de forma externa e instalarlos, aunque en estos momentos se puede instalar en muchas distros con sus gestores de paquetes sin mayor problema.
Ventajas de BTRFS
Tiene RAID como ZFS pero al agregar mas discos, estos pueden participar del arreglo después de hacer un rebalanceo, un proceso donde los discos se reajustan para aceptar un nuevo disco en el RAID manteniendo la integridad a tolerancia de fallos
Tiene su código integrado al kernel, solo debe activarse a la hora de compilar
Tiene la capacidad de desfragmentar o desfragmentar y comprimir en un volumen montado y trabajando en vivo
Sus de ventajas frente ZFS
No tiene cifrado nativo, pero puede tenerlo con Luks y dm-crypt como cualquier otro sistema de archivos.
Como usar ambos sistemas de archivos
A continuación se da una lista de comandos equivalente en ambos sistemas de archivos
Inicializar el sistema de archivos en los discos duros ( formateo )
BTRFS Un solo disco
mkfs.btrfs /dev/hda
ZFS un solo disco
zpool create NombrePool /dev/hda
• En ZFS al formatear se debe crear el POOL que es el volumen root con el nombre dado en NombrePool y del cual pueden salir sub-volúmenes
BTRFS 2 discos RAID 0 automático
mkfs.btrfs /dev/hda /dev/hdb
• En BTRFS se puede especificar el tipo de RAID al formatear sin embargo al agregar discos y tener suficientes para un RAID 5 se puede rebalanceo datos convirtiendo un RAID 1 o RAID 0 en RAID 5
ZFS 2 discos RAID 0
zpool create NombrePOOL /dev/hda /dev/hdb
BRTFS 2 o más discos RAID 1 espejo o mirror
mkfs.btrfs /dev/hda /dev/hdb
btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt
• La conversión se hace con BTRFS ya montado y en vivo sin afectar operaciones.
ZFS 2 o más discos RAID 1 espejo o mirror
zpool create NombrePool mirror /dev/hda /dev/hdb
BRTFS Raid 5
mkfs.btrfs /dev/hda /dev/hdb /dev/hdc
btrfs balance start -dconvert=raid5 -mconvert=raid5 /mnt
• La conversión se hace con BTRFS ya montado y en vivo sin afectar operaciones, si al iniciar el formateo de BRTFS no se tienen los 3 discos mínimos se puede agregar después y rebalancear
ZFS Raid 5
zpool create grupo1 raidz1 /dev/hda /dev/hdb /dev/hdc
• Agregar más discos a un arreglo ZFS no se recomienda, excepto para usarlos como spare. Por lo que debe tenerse los discos necesarios desde el inicio y saber muy bien si requiere el raid 5 llamado raidz1 o el raid6 llamado raidz2
Montado de los sistemas de archivos
BTRFS
mount /dev/hda /mnt
• Se monta como cualquier sistema tradicional, también se puede montar llamando cualquiera de los discos de un arreglo, hace un mount con /dev/hdb llamara al /dev/hda y al /dev/hdc en automatico para recrear el raid y también puede ser agregado como una entrada en el archivo /etc/fstab para montados automáticos después de un reinicio
ZFS
Asignar punto de montura del pool o de los volúmenes
zfs set mountpoint=/mnt/ NombrePool
zfs mount NombrePool
• Zfs no usa el comando mount, incluye sus propios comandos de montado y tampoco se usa el /etc/fstab para montados después del reinicio. En caso de reiniciar deberá importarse el pool con el comando zpool import NombrePool el cual debe ser agregado a los scripts de inicio así como los comandos de montado de ser necesario.
ZFS agregar un volumen
zfs create NombreVolumen/home
ZFS crear un ZVOL
zfs create -V 10G NombreVolumen/ext4
• Esta acción crearía un dispositivo especial /dev/zvol/raid0/ext4 de 10G, espacio tomado del pool con alias o linksimbolico en /dev/zd0 los cuales son un dispositivo de bloques que puede ser formateado por cualquier sistema de archivo o ser usado para swap mkfs.ext4 /dev/zvol/raid0/ext4
BTRFS Agregar un volumen y montado
btrfs subvolume create mnt/home
mount /dev/hda /home/ -o subvol=home,rw
ZFS Agregar un volumen y montado
zfs create NombrePool/home
zfs set mountpoint=/home NombreVolumen/home
zfs mount NombreVolumen/home
BTRFS Desmontar un volumen
umount /home
ZFS Desmontar un volumen
zfs umount NombreVolumen
BTRFS cifrado del sistema de archivos con todo y volúmenes
BTRFS no cuenta con un cifrado nativo, pero puede ayudarse de Luks2
ZFS cifrado de volumen o de Zvols
zfs create -o encryption=aes-256-gcm -o keyformat=passphrase -o keylocation=prompt NombrePool/home
zfs create -o encryption=aes-256-gcm -o keyformat=passphrase -o keylocation=prompt -V 5G NombreVolumen/ext4
ZFS Abrir un volumen cifrado después un reinicio
Pregunta la clave de todos los volúmenes cifrados
zfs load-key -a
Pregunta la clave un volumen especifico
zfs load-key NombreVolumen/home
BTRFS Comprimir un volumen
mount /dev/hda /home/ -o subvol=home,rw,nosuid,nodev,noexec,compress=lzo
• Se recomienda montar un volumen con compresión si eso se desea desde su creacion por que los archivos que hayan quedado sin compresión se mantendrán así a menos que manualmente se le indique como una opción de desfragmentación en vivo sobre un sistema de archivos montado
ZFS Comprimir un volumen
zfs set compression=lz4 NombrePool/home
• Al igual que con BTRFS, si se planea que sea comprimido debe hacerse desde la creación, por que los archivos que no se hayan comprimido se quedaran sin comprimir, solo los nuevos serán comprimidos.
BTRFS borrar un volumen
btrfs subvolume delete mnt/home
ZFS Borrar un volumen
zfs destroy NombreVolumen/home
BTRFS comandos para la revisión de salud del sistema de archivos
btrfs filesystem show
btrfs filesystem df home/
btrfs device stats /home
ZFS comandos para la revisión de salud del sistema de archivos
zpool status
BTRFS reemplazar disco por otro (spare)
btrfs replace start /dev/hda /dev/hdd /home/
• Se hace con los sistemas de archivos montados en vivo
Retirar un disco o retirar un disco faltante físicamente
btrfs device delete /dev/hda /mnt/
btrfs device delete missing /dev/hda /mnt/
• Se puede retirar un disco de un arreglo, si el resto de los discos tienen suficiente espacio para respaldar el contenido del que se va a retirar, al poner un disco nuevo que lo sustituya se deberá hacer un rebalanceo de los datos que han quedado desordenados y sin tolerancia a fallos al retirar un disco del arreglo, se usa missing para retirar un disco que se ha dañado por completo y no hay nada que se pueda respaldar, si el arreglo permite la perdida de un disco por tolerancia a fallos podrá continuar en modo degradado
ZFS retirar un disco del arreglo del pool.
zpool remove NombrePool /dev/hda
o
zpool detach NombrePool /dev/had
• Debido a que los RAID con tolerancia a fallos en zfs son muy parecidos a los tradicionales, no se podrá remover discos que hagan fallar la integridad del arreglo. Solo pueden ser removido discos declarados como spare o de un arreglo mirror
ZFS reemplazar disco por otro (spare)
zpool replace NombrePool /dev/hda /dev/hdd
Video con comparativo de velocidades de sistemas de archivos en GNU/Linux