GNU/Linux >> Tutoriales Linux >  >> Fedora

Comprender el sistema de archivos Btrfs en Fedora Linux

B-Tree Filesystem (Btrfs) es un sistema de archivos de copia en escritura (CoW) para sistemas operativos Linux. Los usuarios de Fedora conocieron Btrfs cuando el equipo del proyecto Fedora lo convirtió en el sistema de archivos predeterminado para Fedora Workstation 33. No había pensado demasiado en Btrfs a pesar de que estuvo disponible para Linux durante varios años. Este artículo lo pondrá al día con el sistema de archivos Btrfs y sus funciones, como instantáneas, subvolúmenes y cuotas.

B-Tree Filesystem (Btrfs) es tanto un sistema de archivos como un administrador de volúmenes. Ha estado en desarrollo desde 2007 y, desde entonces, ha sido parte del kernel de Linux. Sus desarrolladores tienen como objetivo crear un sistema de archivos moderno que pueda resolver los desafíos asociados con la escalabilidad a grandes subsistemas de almacenamiento. Desde la página de manual de Btrfs, sus características principales se centran en la tolerancia a fallas, la fácil administración y la reparación.

Sistema de archivos Btrfs en Fedora Linux

Sus principales características son:

  • Instantáneas:instantáneas de escritura y de solo lectura.
  • RAID.
  • Recuperación automática:sumas de verificación para datos y metadatos.
  • Detección automática de corrupción de datos.
  • Subvolúmenes.
  • Conocimiento de SSD.
  • Copias de seguridad incrementales eficientes

Puede obtener más información sobre sus características y beneficios avanzados en la página de manual oficial de Btrfs.

Requisito previo

Si ya está ejecutando Fedora Workstation 33, entonces está listo para los siguientes pasos. De lo contrario, puede descargar la ISO oficial de Fedora Workstation e instalarla o ejecutarla en una nueva máquina virtual desde cualquier distribución de Linux que esté utilizando.

Al escribir este artículo, no he encontrado una herramienta gráfica para trabajar con Btrfs (¡las sugerencias son bienvenidas!). Por lo tanto, trabajaremos con la línea de comandos para la mayoría de las demostraciones de este artículo. Debe trabajar con Btrfs como superusuario para los siguientes pasos.

~]$ sudo su # change into super user mode

Puede examinar el formato Btrfs ejecutando el siguiente comando.

Echando un vistazo más de cerca al sistema de archivos Btrfs

Mostrar sistema de archivos Fedora Btrfs:

[root@fosslinux tuts]# btrfs filesystem show
Label: 'fedora_localhost-live' uuid: 688a6af2-77e1-4da4-bc63-878c5b0f063b
Total devices 1 FS bytes used 18.94GiB
devid 1 size 148.05GiB used 21.02GiB path /dev/sda2

Puede notar que la etiqueta del sistema de archivos es 'fedora_localhost-live'. Puede cambiar la etiqueta para representar una representación más precisa de su sistema ya que no estamos ejecutando la versión USB en vivo de Fedora.

Cambio de etiquetas Btrfs:

Puede cambiar la etiqueta con el comando de etiqueta del sistema de archivos btrfs.

[root@fosslinux tuts]# btrfs filesystem label /
fedora_localhost-live
[root@fosslinux tuts]# btrfs filesystem label / fedoraworkstation33
[root@fosslinux tuts]# btrfs filesystem label /
fedoraworkstation33
[root@fosslinux tuts]#
Btrfs Fedora filesystem label
Btrfs subvolumes

Los subvolúmenes no son lo mismo que las particiones, pero se pueden comparar con las particiones y se usan de manera similar a como se usan las particiones. Un subvolumen es el directorio estándar que Btrfs puede administrar.

Puede usar un subvolumen para tomar instantáneas, establecer una cuota y replicarlo en otras ubicaciones y otros sistemas operativos host siempre que se ejecuten bajo el sistema de archivos Btrfs.

Lista de subvolúmenes de Btrfs:

[root@fosslinux tuts]# btrfs subvolume list /
ID 256 gen 24421 top level 5 path home
ID 258 gen 24407 top level 5 path root
ID 265 gen 22402 top level 258 path var/lib/machines

Crear subvolumen:

Puede crear un nuevo subvolumen ejecutando el comando btrfs subvolume create.

[root@fosslinux tuts]# btrfs subvolume create /opt/foo
Create subvolume '/opt/foo'
[root@fosslinux tuts]# btrfs subvolume list /
ID 256 gen 24469 top level 5 path home
ID 258 gen 24469 top level 5 path root
ID 265 gen 22402 top level 258 path var/lib/machines
ID 279 gen 24469 top level 258 path opt/foo

Eliminar subvolumen:

Puede eliminar un subvolumen ejecutando el comando de eliminación de subvolumen btrfs.

[root@fosslinux tuts]# btrfs subvolume delete /opt/foo
Delete subvolume (no-commit): '/opt/foo'
[root@fosslinux tuts]# btrfs subvolume list /
ID 256 gen 24495 top level 5 path home
ID 258 gen 24493 top level 5 path root
ID 265 gen 22402 top level 258 path var/lib/machines

Los subvolúmenes pueden resultar útiles para los administradores de sistemas, especialmente al agregar usuarios.

Agregar un usuario

Antes de Fedora Linux 33, crear una nueva cuenta de usuario crearía un directorio de inicio para la cuenta. Esencialmente, el directorio de usuarios creado es un subdirectorio de /home. Significaba que la propiedad y los privilegios se adaptaban al propietario del directorio /home. También significaba que no había funciones especiales para administrar el subdirectorio. Con Btrfs, tiene más control para administrar y aplicar restricciones a los directorios de usuarios creados.

La forma tradicional de agregar un nuevo usuario.

Agregue un nuevo usuario, 'fedoran1', usando el comando useradd:

[root@fosslinux tuts]# useradd fedoran1
[root@fosslinux tuts]# getent passwd fedoran1
fedoran1:x:1001:1001::/home/fedoran1:/bin/bash
[root@fosslinux tuts]# ls -l /home
total 0
drwx------. 1 fedoran1 fedoran1 80 Apr 7 19:00 fedoran1
drwx------. 1 tuts tuts 308 Apr 6 08:33 tuts
Uso de subvolúmenes Btrfs como inicios de usuarios

Puede acomodar subvolúmenes Btrfs como inicios de usuarios agregando –btrfs-subvolume-home al comando useradd. El comando creará un nuevo subvolumen Btrfs para el usuario.

[root@fosslinux tuts]# useradd --btrfs-subvolume-home fedoran2
Create subvolume '/home/fedoran2'
[root@fosslinux tuts]# getent passwd fedoran2
fedoran2:x:1002:1002::/home/fedoran2:/bin/bash

Si ejecuta el comando / lista de subvolumen btrfs, notará un nuevo subvolumen para el directorio de inicio del nuevo usuario.

[root@fosslinux tuts]# btrfs subvolume list /
ID 256 gen 24732 top level 5 path home
ID 258 gen 24731 top level 5 path root
ID 265 gen 22402 top level 258 path var/lib/machines
ID 280 gen 24728 top level 256 path home/fedoran2
Eliminar un usuario:

A veces, desea eliminar un usuario con todos los archivos del usuario y su directorio de inicio simultáneamente. Puede usar el comando userdel con la opción -r, que también eliminará el subvolumen Btrfs del usuario.

[root@fosslinux tuts]# userdel -r fedoran2
Delete subvolume (commit): '/home/fedoran2'

Cuotas de Btrfs

¿Alguna vez tuvo un programa que se salió de control y escribió en su disco hasta que se llenó todo el directorio /home? Estos problemas surgen, especialmente con aplicaciones o servidores que almacenan contenido y archivos de registro. Puede evitar que su sistema o servidor se detenga debido a que el disco se llena configurando e implementando cuotas Btrfs.

El primer paso es habilitar las cuotas en su sistema de archivos Btrfs:

[root@fosslinux tuts]# btrfs quota enable /

A continuación, anote el número de identificación del grupo de cuotas (qgroup) de cada subvolumen mediante el comando btrfs subvolume list. Sería mejor asociar cada subvolumen con un qgroup basado en su número de ID usando el comando btrfs qgroup create. Puede hacer esto de forma individual, pero también puede usar el siguiente comando para acelerar la creación de qgroups para subvolúmenes.

>btrfs subvolume list \<path> | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup destroy 0/{} \<path>

En su Fedora 33, reemplace \ con la ruta raíz ( / ) de su sistema de archivos.

 # btrfs subvolume list / | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} /

Ejecute el comando de búsqueda de cuotas btrfs para ver los qgroups que ha creado.

[root@fosslinux tuts]# btrfs qgroup show /
WARNING: rescan is running, qgroup data may be incorrect
qgroupid rfer excl
-------- ---- ----
0/5 16.00KiB 16.00KiB
0/256 23.70MiB 23.70MiB
0/258 449.61MiB 449.61MiB
0/265 16.00KiB 16.00KiB
0/279 16.00KiB 16.00KiB

Ahora puede asignar una cuota a un qgroup que aplicará los cambios al subvolumen asociado.

Ahora podemos usar el comando btrfs qgroup limit para limitar el uso del directorio de inicio del usuario fedoran2 a 2 GB.

[root@fosslinux tuts]# btrfs qgroup limit 2G /home/fedoran2

Confirme los cambios en el límite de cuota para el usuario fedoran2.

[root@fosslinux tuts]# btrfs qgroup show -reF /home/fedoran2
qgroupid rfer excl max_rfer max_excl
-------- ---- ---- -------- --------
0/279 16.00KiB 16.00KiB 2.00GiB none

Muestre todos los qgroups y los límites de cuota asignados, si los hay, mediante btrfs qgroup show -re //

[root@fosslinux tuts]# btrfs qgroup show -reF /home/fedoran2
qgroupid rfer excl max_rfer max_excl
-------- ---- ---- -------- --------
0/279 16.00KiB 16.00KiB 2.00GiB none

Instantáneas de Btrfs

Una instantánea en el sistema de archivos Btrfs es simplemente una copia de un subvolumen. Por lo tanto, una instantánea es un subvolumen que puede compartir sus datos y metadatos con otros subvolúmenes utilizando las capacidades de copia en escritura (CoW). Tomar una instantánea es inmediato, pero no ocupa un espacio tan pronto como se crea.

Cuando toma una instantánea, el espacio de la instantánea aumentará con los cambios en el subvolumen original o en la instantánea si se puede escribir. Además, cualquier archivo agregado, modificado o eliminado en el subvolumen seguirá residiendo en la instantánea. Estas características ofrecen una forma de crear copias de seguridad en su sistema de manera conveniente.

Crea copias de seguridad usando instantáneas

De manera predeterminada, una instantánea residirá en el mismo disco que el subvolumen, y puede explorar o incluso recuperar una copia de un archivo en su estado original como cuando se tomó la instantánea. Una característica interesante de las instantáneas es que puede enviarlas a un disco duro externo o a un sistema remoto mediante SSH. El problema es que el destino debe tener un sistema de archivos Btrfs. Para aprovechar esta función en las instantáneas, utilizará los comandos btrfs send y btrfs receive.

Nota:almacenar una instantánea en el mismo disco que el subvolumen no es una estrategia de copia de seguridad ideal. Si su disco se daña, perderá tanto el subvolumen como las instantáneas.

Siga estos pasos para crear una copia de seguridad de un subvolumen.

1:crea un subvolumen para tu proyecto

Para fines de demostración, crearemos un subvolumen Btrfs (myproject) dentro de $HOME/Desktop/myproject. El subvolumen Btrfs se verá y funcionará como un directorio estándar.

Cree un subvolumen usando el siguiente comando:

[tuts@fosslinux ~]$ btrfs subvolume create $HOME/Desktop/myproject
Create subvolume '/home/tuts/Desktop/myproject'

Cree un directorio oculto para almacenar sus instantáneas:

[tuts@fosslinux ~]$ mkdir $HOME/.myprojectsnapshots

Cree un archivo de texto dentro del subvolumen $HOME/Desktop/myproject:

[tuts@fosslinux ~]$ cd /home/tuts/Desktop/myproject
[tuts@fosslinux myproject]$ ls
[tuts@fosslinux myproject]$ vi day0.txt
[tuts@fosslinux myproject]$ ls
day0.txt

2:Toma una instantánea

De forma predeterminada, las instantáneas se pueden escribir, pero tendrá que crear una instantánea de solo lectura para usar los comandos btrfs send y btrfs receive. ‘

Las instantáneas se pueden tomar cada día, cada hora o incluso cada minuto.

Tome una instantánea de solo lectura del subvolumen $HOME/Desktop/myproject y organícela en $HOME/.myprojectsnapshots usando el siguiente comando.

[tuts@fosslinux ~]$ btrfs subvolume snapshot -r $HOME/Desktop/myproject $HOME/.myprojectsnapshots/myproject-day0
Create a readonly snapshot of '/home/tuts/Desktop/myproject' in '/home/tuts/.myprojectsnapshots/myproject-day0'

Nota:

  • Utilice el indicador -r para crear una instantánea de solo lectura. El indicador -r ofrecerá una mejor consistencia y seguridad y le permitirá enviar y recibir en un disco duro externo.
  • Las instantáneas no tomarán instantáneas recursivas de sí mismas. Una instantánea del subvolumen /home no tomará una instantánea del subvolumen $HOME/Desktop/myproject.
Uso de btrfs send y btrfs receive para realizar copias de seguridad de instantáneas.

En la demostración a continuación, la instantánea del volumen Btrfs (/.myprojectsnapshots/myproject-day0) se enviará a una unidad USB montada como /run/media/tuts/bk.

[tuts@fosslinux ~]$ sudo btrfs send $HOME/.myprojectsnapshots/myproject-day0 | sudo btrfs receive /run/media/tuts/bk
At subvol /home/tuts/.myprojectsnapshots/myproject-day0
ERROR: /run/media/tuts/bk doesn't belong to btrfs mount point

Dependiendo de cómo hayas formateado tu unidad USB, es posible que recibas el siguiente mensaje de error:

ERROR: /run/media/tuts/bk doesn't belong to btrfs mount point.’

El error es una indicación de que su unidad USB no tiene el formato de sistema de archivos btrfs. El comando de envío btrfs no puede funcionar en un sistema de archivos que no sea btrfs.

Si recibe un mensaje de error de este tipo, formatee su unidad USB a btrfs usando el siguiente comando.

Formatee la unidad USB al formato del sistema de archivos btrfs:

[tuts@fosslinux ~]$ sudo mkfs.btrfs /dev/sdb -L 'bk' -f

Ahora ejecute el comando btrfs send y btrfs receive:

[tuts@fosslinux ~]$ sudo btrfs send $HOME/.myprojectsnapshots/myproject-day0 | sudo btrfs receive /run/media/tuts/bk
[sudo] password for tuts:
At subvol /home/tuts/.myprojectsnapshots/myproject-day0
At subvol myproject-day0

El comando de envío de btrfs se completó con éxito y puede ver y explorar su instantánea 'myproject-day0' en su unidad USB.

El comando puede tardar algún tiempo dependiendo del tamaño de su subvolumen ($HOME/.myprojectsnapshots/myproject-day0). Los envíos de btrfs incrementales subsiguientes tardarán menos tiempo.

Copias de seguridad incrementales usando btrfs send

Para usar el envío de btrfs de forma incremental, deberá tomar otra instantánea de su subvolumen.

Crear instantáneas:

[tuts@fosslinux ~]$ btrfs subvolume snapshot -r $HOME/Desktop/myproject $HOME/.myprojectsnapshots/myproject-day1
Create a readonly snapshot of '/home/tuts/Desktop/myproject' in '/home/tuts/.myprojectsnapshots/myproject-day1'

Envío de btrfs incrementales:

[tuts@fosslinux ~]$ sudo btrfs send -p $HOME/.myprojectsnapshots/myproject-day0 $HOME/.myprojectsnapshots/myproject-day1 | sudo btrfs receive /run/media/tuts/bk
At subvol /home/tuts/.myprojectsnapshots/myproject-day1
At snapshot myproject-day1

La próxima copia de seguridad incremental (el día siguiente).

Crea una instantánea:

[tuts@fosslinux ~]$ btrfs subvolume snapshot -r $HOME/Desktop/myproject $HOME/.myprojectsnapshots/myproject-day2
Create a readonly snapshot of '/home/tuts/Desktop/myproject' in '/home/tuts/.myprojectsnapshots/myproject-day2'

Envío de btrfs incrementales (el día siguiente):

[tuts@fosslinux ~]$ sudo btrfs send -p $HOME/.myprojectsnapshots/myproject-day1 $HOME/.myprojectsnapshots/myproject-day2 | sudo btrfs receive /run/media/tuts/bk
At subvol /home/tuts/.myprojectsnapshots/myproject-day2
At snapshot myproject-day2
Limpieza

Nota:necesita al menos la última instantánea para realizar el envío incremental de btrfs. Asegúrese de que la instantánea esté presente en el origen y el destino.

Eliminar instantáneas en la ubicación de origen

Puede eliminar instantáneas innecesarias con el siguiente comando:

[tuts@fosslinux ~]$ sudo btrfs subvolume delete $HOME/.myprojectsnapshots/myproject-day0
[sudo] password for tuts:
Delete subvolume (no-commit): '/home/tuts/.myprojectsnapshots/myproject-day0'
[tuts@fosslinux ~]$ sudo btrfs subvolume delete $HOME/.myprojectsnapshots/myproject-day1
[sudo] password for tuts:
Delete subvolume (no-commit): '/home/tuts/.myprojectsnapshots/myproject-day1'

Eliminar instantáneas en la ubicación de destino:

[tuts@fosslinux ~]$ sudo btrfs subvolume delete /run/media/tuts/bk/myproject-day0
Delete subvolume (no-commit): '/run/media/tuts/bk/myproject-day0'
[tuts@fosslinux ~]$ sudo btrfs subvolume delete /run/media/tuts/bk/myproject-day1
Delete subvolume (no-commit): '/run/media/tuts/bk/myproject-day1'

Nota:Sería mejor si mantuviera la última instantánea en las ubicaciones de origen y destino para que pueda realizar un nuevo envío de btrfs incremental.

Recuperar un archivo o directorio desde una instantánea btrfs

Los errores como eliminar un directorio o un archivo por error son inevitables. Cuando ocurren tales errores, puede recuperar archivos o directorios de la instantánea reciente. También puede recuperar una versión anterior del directorio o archivo a partir de una instantánea anterior.

Dado que las instantáneas funcionan como directorios, puede usar el comando cp para restaurar un archivo usando el siguiente comando.

Usando el comando cp

Restaure un archivo eliminado usando el comando cp:

[tuts@fosslinux ~]$ cp $HOME/.myprojectsnapshots/myproject-day1/day0.txt $HOME/Desktop/myproject

Restaure un directorio eliminado usando el comando cp:

[tuts@fosslinux ~]$ cp -r $HOME/.myprojectsnapshots/myproject-day1/directory $HOME/Desktop/myproject

Si elimina todo el directorio $HOME/Desktop/myproject (subvolumen), puede volver a crear el subvolumen y usar el comando cp para restaurar todo el contenido desde una instantánea.

Restaurar un subvolumen eliminado:

[tuts@fosslinux ~]$ btrfs subvolume create $HOME/Desktop/myproject
Create subvolume '/home/tuts/Desktop/myproject'
[tuts@fosslinux ~]$ cp -rT $HOME/.myprojectsnapshots/myproject-day1 $HOME/Desktop/myproject
Uso del comando de instantánea btrfs

Puede restaurar un subvolumen eliminado tomando una instantánea de instantáneas.

Restaure un subvolumen usando el comando de instantánea btrfs:

[tuts@fosslinux ~]$ btrfs subvolume snapshot $HOME/.myprojectsnapshots/myproject-day1 $HOME/Desktop/myproject
Create a snapshot of '/home/tuts/.myprojectsnapshots/myproject-day1' in '/home/tuts/Desktop/myproject'
Recuperar instantáneas de btrfs desde una unidad externa

Puede usar el comando cp para restaurar una instantánea desde una unidad USB o una unidad externa.

Recuperar un archivo:

[tuts@fosslinux ~]$ cp /run/media/tuts/bk/myproject-day1/day0.txt $HOME/Desktop/myproject

Puede utilizar los comandos btrfs send y btrfs receive para recuperar una instantánea completa. Debe establecer la opción de solo lectura en falso para restaurar un subvolumen grabable.

Recuperar una instantánea completa:

[tuts@fosslinux ~]$ sudo btrfs send /run/media/tuts/bk/myproject-day1 | sudo btrfs receive $HOME/Desktop/
[sudo] password for tuts:
At subvol /run/media/tuts/bk/myproject-day1
At subvol myproject-day1

Resumen

El artículo ha destacado algunas características de Btrfs que vale la pena aprender. Btrfs se creó como una alternativa al sistema de archivos ZFS y ofrece muchas características avanzadas del sistema de archivos para los sistemas operativos Fedora y Linux.

Puede obtener más información sobre Btrfs utilizando el comando btrfs – – help o la documentación en línea, a la que puede acceder mediante man btrfs-subvolume, man btrfs-send o man btrfs-receive. También encuentro útil la Wiki oficial de Btrfs.

¡A todos nos vendría bien una herramienta gráfica para interactuar con Btrfs! A usted, equipo de proyecto de Fedora.


Fedora
  1. Linux:¿por qué no hay un sistema de archivos Rootfs presente en el sistema?

  2. Linux:¿con qué frecuencia se actualiza el sistema de archivos Proc en Linux?

  3. Comprender el sistema de archivos sysfs (/sys) en Linux

  4. ¿Cuáles son las opciones de montaje para mejorar el rendimiento del sistema de archivos ext4 en Linux?

  5. Linux:dónde colocar el archivo de intercambio

Cómo agregar un nuevo dispositivo al sistema de archivos BTRFS en Linux

Cómo montar un sistema de archivos Linux remoto usando SSHFS

Elija el mejor sistema de archivos para su Linux

Todo lo que necesita saber sobre el sistema de archivos de Linux

Comprender los niveles de ejecución de Linux de la manera correcta

Comprender el archivo /etc/fstab en Linux