Filesystems BTRFS en Linux

Share on facebook
Share on twitter
Share on linkedin
Share on whatsapp
Share on telegram
Share on email

La comunidad de Linux Fedora ha anunciado que a partir de Fedora 33, BTRFS (B-Tree Filesystem) será el sistema de archivos por defecto. Esto es importante porque Fedora es la distribución experimental en la cual está basado RedHat, lo que significa que en un futuro, BTRFS, podría llegar también a RedHat.

Para testear BTRFS, me he instalado Fedora 32 en un servidor virtual de pruebas, ya que Fedora 33 todavía no ha salido en el momento en que escribo este artículo.

¡Vamos a ello!

Creación de un filesystem BTRFS

Las opciones de creación de un FS BTRFS por defecto son con mirror (RAID1) y striping,

Rebajas
Western Digital My Book Disco Duro Externo de Sobremesa de 6 TB ,3.5", USB 3.0, Negro
  • Connexion USB 3.0, compatible con USB 2.0
  • Hasta 8 TB de capacidad
[[email protected] ~]# mkfs.btrfs /dev/sdb /dev/sdc
btrfs-progs v5.7 
See http://btrfs.wiki.kernel.org for more information.

Label:              (null)
UUID:               551a9ae6-1495-4fd6-86a6-75890bb4d43b
Node size:          16384
Sector size:        4096
Filesystem size:    2.00GiB
Block group profiles:
  Data:             single            8.00MiB
  Metadata:         RAID1           102.38MiB
  System:           RAID1             8.00MiB
SSD detected:       no
Incompat features:  extref, skinny-metadata
Runtime features:   
Checksum:           crc32c
Number of devices:  2
Devices:
   ID        SIZE  PATH
    1     1.00GiB  /dev/sdb
    2     1.00GiB  /dev/sdc

[[email protected] ~]#

Como podemos observar, tenemos un espacio reservado para datos y otro para metadatos (información sobre la estructura del filesystem).

Rebajas
Crucial CT2000X8SSD9 X8-SSD portátil 2TB, de hasta 1050 MB/s, USB 3.2, Unidad de estado...
  • Rendimiento óptimo con velocidades de lectura de hasta 1050 MB/s
  • Funciona con Windows, Mac, iPad Pro, Chromebook, Android, Linux, PS4 y Xbox One con conectores USB-C 3.2 Gen2 y USB-A
  • Diseño hermoso y duradero, con un núcleo unibody de aluminio anodizado

Otros tipos de RAID que se pueden crear con BTRFS

  • RAID10. Al menos, requiere cuatro discos:
mkfs.btrfs /dev/sdb /dev/sdc /dev/sdd /dev/sde
  • Striping de los metadatos sin mirror de datos:
mkfs.btrfs -m raid0 /dev/sdb /dev/sdc
  • RAID10 para datos y metadatos:
mkfs.btrfs -m raid10 -d raid10 /dev/sdb /dev/sdc /dev/sdd /dev/sde
  • Evitar duplicar metadatos en un único disco:
mkfs.btrfs -m single /dev/sdb

Montaje de un filesystem BTRFS

Al ser un filesystem multidispositivo, podemos montarlo con cualquiera de ellos. Eso sí, si lo eliminas, acuérdate de sustituirlo en el fichero /etc/fstab.

[[email protected] ~]# tail -1 /etc/fstab
/dev/sdb	/testbtrfs	btrfs	device=/dev/sdb,device=/dev/sdc	0 0
[[email protected] ~]# df -hP /testbtrfs/
S.ficheros     Tamaño Usados  Disp Uso% Montado en
/dev/sdb         2,0G   3,6M  1,8G   1% /testbtrfs
[[email protected] ~]# 

Añadir un nuevo disco a un filesystem BTRFS

Si necesitamos más espacio, siempre podemos añadir un disco más al filesystem.

[[email protected] ~]# btrfs device add /dev/sdd /testbtrfs/
[[email protected] ~]# 

También podemos optar por la opción de ampliar una LUN y luego el filesystem, algo que veremos más abajo en este documento.

Visualizar el estado de un filesystem BTRFS

Tenemos varias opciones para ver el estado de un filesystem BTRFS. Básicamente, sabremos qué discos se están utilizando y cuánto espacio se está usando para datos y metadatos.

[[email protected] ~]# btrfs filesystem show /testbtrfs/
Label: none  uuid: 551a9ae6-1495-4fd6-86a6-75890bb4d43b
	Total devices 3 FS bytes used 192.00KiB
	devid    1 size 1.00GiB used 118.38MiB path /dev/sdb
	devid    2 size 1.00GiB used 110.38MiB path /dev/sdc
	devid    3 size 1.00GiB used 0.00B path /dev/sdd

[[email protected] ~]#

[[email protected] ~]# btrfs filesystem df /testbtrfs 
Data, single: total=8.00MiB, used=64.00KiB
System, RAID1: total=8.00MiB, used=16.00KiB
Metadata, RAID1: total=102.38MiB, used=112.00KiB
GlobalReserve, single: total=3.25MiB, used=0.00B
[[email protected] ~]# 

[[email protected] ~]# btrfs filesystem usage /testbtrfs 
Overall:
    Device size:		   3.00GiB
    Device allocated:		   1.59GiB
    Device unallocated:		   1.41GiB
    Device missing:		     0.00B
    Used:			   1.00GiB
    Free (estimated):		   1.66GiB	(min: 977.44MiB)
    Data ratio:			      1.00
    Metadata ratio:		      2.00
    Global reserve:		   3.25MiB	(used: 0.00B)
    Multiple profiles:		        no

Data,single: Size:1.25GiB, Used:1.00GiB (80.01%)
   /dev/sdc	 320.00MiB
   /dev/sdd	 320.00MiB
   /dev/sdb	 640.00MiB

Metadata,RAID1: Size:142.38MiB, Used:1.17MiB (0.82%)
   /dev/sdd	 142.38MiB
   /dev/sdb	 142.38MiB

System,RAID1: Size:32.00MiB, Used:16.00KiB (0.05%)
   /dev/sdd	  32.00MiB
   /dev/sdb	  32.00MiB

Unallocated:
   /dev/sdc	 704.00MiB
   /dev/sdd	 529.62MiB
   /dev/sdb	 209.62MiB
[[email protected] ~]#

Eliminar un disco de un filesystem BTRFS

Si intentamos eliminar un disco y no hay espacio para ello, no nos dejará eliminarlo:

[[email protected] ~]# btrfs device delete /dev/sdd /testbtrfs
ERROR: error removing device '/dev/sdd': No space left on device
[[email protected] ~]# 

Si hay espacio para mover los datos del disco a eliminar a los discos restantes del filesystem BTRFS, podremos eliminar el disco sin problemas:

[[email protected] ~]# btrfs device delete /dev/sdd /testbtrfs
[[email protected] ~]# btrfs filesystem show /testbtrfs/
Label: none  uuid: 551a9ae6-1495-4fd6-86a6-75890bb4d43b
	Total devices 2 FS bytes used 102.76MiB
	devid    1 size 1.00GiB used 110.38MiB path /dev/sdb
	devid    2 size 1.00GiB used 430.38MiB path /dev/sdc

[[email protected] ~]# 

En BTRFS el equivalente al PVMOVE de LVM es automático cuando eliminamos un disco.

Eliminar un disco averiado

Si tenemos una avería hardware en un disco, podemos eliminarlo de la estrctura BTRFS para sustituirlo por otro.

Primero, desmontamos el disco y luego lo eliminamos:

mount -o degraded /dev/sdb /mnt
btrfs device delete missing /mnt

A continuación, ya podemos añadir un disco nuevo como lo hacemos habitualmente y rebalancear los datos entre todos los discos.

Rescanear discos BTRFS

Si necesitamos hacer un rescan de discos con formato BTRFS, lo haremos con el siguiente comando:

[[email protected] ~]# btrfs device scan
Scanning for Btrfs filesystems
[[email protected] ~]# 

Para escanear de nuevo un disco en concreto, lo haríamos así:

btrfs device scan /dev/sdb

Equilibrar los datos entre todos los discos BTRFS

Si queremos rebalancear los datos que contiene cada uno de los discos de un FS BTRFS para que cada uno soporte el mismo volumen de carga, ejecutaremos el siguiente comando:

[[email protected] ~]# btrfs filesystem balance /testbtrfs
Done, had to relocate 7 out of 7 chunks
[[email protected] ~]# 

De esta manera evitamos que, por ejemplo, todos los datos estén almacenados en el disco /dev/sdb.

Reducir el tamaño de un filesystem BTRFS

Lo que haremos será revisar el ID (devid) de cada uno de los discos que forman el filesystem y reducir el tamaño del que nos interese. Por ejemplo:

[[email protected] ~]# btrfs filesystem show /testbtrfs/
Label: none  uuid: 551a9ae6-1495-4fd6-86a6-75890bb4d43b
	Total devices 3 FS bytes used 1.00GiB
	devid    2 size 1.00GiB used 896.00MiB path /dev/sdc
	devid    3 size 1.00GiB used 608.00MiB path /dev/sdd
	devid    4 size 1.00GiB used 352.00MiB path /dev/sdb

[[email protected] ~]# btrfs filesystem resize 2:-100m /testbtrfs/
Resize '/testbtrfs/' of '2:-100m'
[[email protected] ~]# btrfs filesystem show /testbtrfs/
Label: none  uuid: 551a9ae6-1495-4fd6-86a6-75890bb4d43b
	Total devices 3 FS bytes used 1.00GiB
	devid    2 size 924.00MiB used 896.00MiB path /dev/sdc
	devid    3 size 1.00GiB used 608.00MiB path /dev/sdd
	devid    4 size 1.00GiB used 352.00MiB path /dev/sdb

[[email protected] ~]# 

Como podemos observar, se ha reducido el espacio asignado al dispositivo «2» (/dev/sdc).

Ampliar un filesystem BTRFS

La ampliación de un filesystem BTRFS es muy similar al la reducción. Para ampliar el espacio máximo disponible:

[[email protected] ~]# btrfs filesystem resize 2:max /testbtrfs/
Resize '/testbtrfs/' of '2:max'
[[email protected] ~]# btrfs filesystem show /testbtrfs/
Label: none  uuid: 551a9ae6-1495-4fd6-86a6-75890bb4d43b
	Total devices 3 FS bytes used 1.00GiB
	devid    2 size 1.00GiB used 896.00MiB path /dev/sdc
	devid    3 size 1.00GiB used 608.00MiB path /dev/sdd
	devid    4 size 1.00GiB used 352.00MiB path /dev/sdb

[[email protected] ~]# 

Aunque también podemos utilizar el comando especificando el tamaño exacto al que queremos ampliar. Por ejemplo:

btrfs filesystem resize 2:+200M /testbtrfs/

Creación de subvolúmenes y snapshots

Los snapshots únicamente se pueden crear a partir de subvolúmenes de BTRFS, así que, primero, crearemos un subvolumen:

[[email protected] ~]# btrfs subvolume create /testbtrfs/subvol1
Create subvolume '/testbtrfs/subvol1'
[[email protected] ~]# btrfs subvolume list /testbtrfs 
ID 322 gen 203 top level 5 path subvol1
[[email protected] ~]# 

A continuación, ya podemos crear el snapshot:

[[email protected] testbtrfs]# btrfs subvolume snapshot /testbtrfs/subvol1/ /testbtrfs/subvol1/snapshot
Create a snapshot of '/testbtrfs/subvol1/' in '/testbtrfs/subvol1/snapshot'
[[email protected] testbtrfs]#

[[email protected] testbtrfs]# cd /testbtrfs/subvol1/snapshot
[[email protected] snapshot]# ll
total 1048576
-rw-r--r--. 1 root root 1073741824 sep  7 06:29 test_file2
[[email protected] snapshot]# 

Eliminación de un snapshot de BTRFS

Antes de eliminar el snapshot, vamos a borrar todos sus datos. Luego ya lo podremos eliminar sin problemas, de la siguiente manera:

[[email protected] testbtrfs]# rm -r /testbtrfs/subvol1/*
rm: ¿descender al directorio '/testbtrfs/subvol1/snapshot'? (s/n) s
rm: ¿borrar el fichero regular '/testbtrfs/subvol1/snapshot/test_file2'? (s/n) s
rm: ¿borrar el directorio '/testbtrfs/subvol1/snapshot'? (s/n) s
[[email protected] testbtrfs]#

[[email protected] testbtrfs]# btrfs subvolume delete /testbtrfs/subvol1
Delete subvolume (no-commit): '/testbtrfs/subvol1'
[[email protected] testbtrfs]# 

Te puede interesar

¿Te ha gustado? Compártelo

Share on facebook
Share on twitter
Share on linkedin
Share on whatsapp
Share on telegram
Share on email
About Author

Contenido Relacionado

Linux
David Martínez Perales

Guía de Linux

Tabla de contenidos1 Historia de Linux2 ¿Qué es una distribución Linux y cuál instalar?3 ¿Cómo iniciar una sesión en Linux?4

Leer más »

Artículos Recientes

Deja un comentario