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 :-)