Introducción a btrfs
Butter Filesystem, o btrfs, es un "nuevo" filesystem que toma bastantes ideas de ZFS de Solaris. Su idea fundamental es unificar la gestión de ficheros y de volúmenes (tipo LVM) bajo un mismo entorno. De esta forma, operaciones como añadir o quitar discos en caliente, redistribuir los datos (balance) o cambiar el nivel de protección (RAID) son factibles y mucho más eficientes al conocer qué ficheros están involucrados en cada operación (y no simplemente unos bloques que desconocemos si contienen datos o no).
Teniendo ya creado un filesystem btrfs, podemos empezar a sacar algo de información de esta forma:
$ df -ht btrfs Filesystem Size Used Avail Use% Mounted on /dev/dm-5 838G 123G 715G 15% /run/media/fran/wd20btrfs $ sudo btrfs filesystem show /run/media/fran/wd20btrfs/ Label: 'wd20btrfs' uuid: 7bb1d318-c7a9-40d8-995a-972a9d43544f Total devices 1 FS bytes used 120.15GiB devid 1 size 837.59GiB used 124.04GiB path /dev/mapper/luks-0aad2fa7-f2c9-4acb-81f5-5197751fee3e Btrfs v3.18.1
Dentro de btrfs existe el concepto de subvolúmenes, que vendrían a ser similares
a los filesystems zfs. Los subvolúmenes tienen una estructura jerárquica y
pueden ser susceptibles de hacer snapshots con ellos, enviarlos con btrfs send/receive
, etc.
$ sudo btrfs subvolume list -puta /run/media/fran/wd20btrfs/ ID gen parent top level uuid path -- --- ------ --------- ---- ---- 257 944 5 5 75a8331b-9cd3-0d46-b773-9aaba88b6369 root 514 950 5 5 c767358c-83e0-134f-9698-2ae535742284 backup 556 951 514 514 54f942af-31e7-6e4c-ae4a-691d4642ddfd <FS_TREE>/backup/.snapshots 558 828 556 556 add72c57-3f1b-a143-8902-cc0242e971bf <FS_TREE>/backup/.snapshots/2/snapshot 559 841 556 556 9e6e71aa-8ddc-ee44-a0cc-628ab659c544 <FS_TREE>/backup/.snapshots/3/snapshot 560 848 556 556 fc44d63a-393d-294e-b868-6d12c9e5515f <FS_TREE>/backup/.snapshots/4/snapshot $ sudo btrfs subvolume show /run/media/fran/wd20btrfs/ /run/media/fran/wd20btrfs is btrfs root $ sudo btrfs subvolume show /run/media/fran/wd20btrfs/backup/ /run/media/fran/wd20btrfs/backup Name: backup uuid: c767358c-83e0-134f-9698-2ae535742284 Parent uuid: - Creation time: 2015-01-20 22:03:20 Object ID: 514 Generation (Gen): 950 Gen at creation: 202 Parent: 5 Top Level: 5 Flags: - Snapshot(s): .snapshots/2/snapshot .snapshots/3/snapshot .snapshots/4/snapshot .snapshots/5/snapshot
Al igual que en ZFS, las herramientas df
y du
no necesariamente muestran
información correcta sobre nuestro filesystem. Factores como la compresión,
nivel de RAID, etc harán que no concuerden estas informaciones con el uso
real de espacio en disco y sobre la cantidad de información que este contiene.
En el ejemplo de abajo, podemos ver que hay 119.01 GiB de datos, pero solo ocupan en disco 118.45.
$ btrfs filesystem df /run/media/fran/wd20btrfs Data, single: total=119.01GiB, used=118.45GiB System, DUP: total=8.00MiB, used=32.00KiB System, single: total=4.00MiB, used=0.00B Metadata, DUP: total=2.50GiB, used=1.70GiB Metadata, single: total=8.00MiB, used=0.00B GlobalReserve, single: total=512.00MiB, used=0.00B
Cada subvolumen de btrfs puede tener distintas propiedades establecidas,
fundamentalmente ro
para cambiar un filesystem a sólo-lectura, y compression
para establecer el algoritmo de compresión a utilizar para nuevos datos
escritos en el subvolumen:
$ sudo btrfs prop list /run/media/fran/wd20btrfs/ ro Set/get read-only flag of subvolume. label Set/get label of device. compression Set/get compression for a file or directory $ sudo btrfs prop get /run/media/fran/wd20btrfs/ ro=false label=wd20btrfs $ sudo btrfs prop get /run/media/fran/wd20btrfs/backup/ ro=false compression=zlib
Otra de las características que tiene btrfs
es que podemos comprobar la
integridad de nuestros datos. No nos servirá para arreglar nada si no tenemos
otra copia de los mismos (bien por RAID, o de un backup externo), pero al menos
nos enteraremos si nuestros datos están bien.
$ sudo btrfs scrub status -d /run/media/fran/wd20btrfs/ scrub status for 7bb1d318-c7a9-40d8-995a-972a9d43544f scrub device /dev/mapper/luks-0aad2fa7-f2c9-4acb-81f5-5197751fee3e (id 1) status scrub started at Fri Apr 17 21:48:08 2015, running for 25 seconds total bytes scrubbed: 847.03MiB with 0 errors $ sudo btrfs scrub status -d /run/media/fran/wd20btrfs/ scrub status for 7bb1d318-c7a9-40d8-995a-972a9d43544f scrub device /dev/mapper/luks-0aad2fa7-f2c9-4acb-81f5-5197751fee3e (id 1) history scrub started at Fri Apr 17 21:48:08 2015 and finished after 3460 seconds total bytes scrubbed: 121.84GiB with 0 errors
Por lo visto anteriormente, btrfs
es un sistema de ficheros prometedor y
llamado a reemplazar a filesystems más tradicionales como ext4 ó XFS, a la vez
que sistemas de volúmenes como LVM. Ahora sólo hace falta que gane algo más
de soporte por parte de la comunidad y usuarios que lo prueben hasta el límite.
Happy Hacking :-)