Entendiendo 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 de Fedora lo convirtió en el sistema de archivos predeterminado para Fedora Workstation 33. No había pensado demasiado en Btrfs a pesar de que estaba disponible para Linux durante varios años. Este artículo lo pondrá al día con el sistema de archivos Btrfs y sus características como instantáneas, subvolúmenes y cuotas.
B-Tree Filesystem (Btrfs) es tanto un sistema de archivos como un administrador de volumen. Ha estado en desarrollo desde 2007 y, desde entonces, ha sido parte del kernel de Linux. Sus desarrolladores apuntan a crear un sistema de archivos moderno que pueda resolver los desafíos asociados con el escalado a grandes subsistemas de almacenamiento. Desde la página de manual de Btrfs, sus principales características se centran en la tolerancia a fallos, la facilidad de administración y la reparación.
Sistema de archivos Btrfs en Fedora Linux
Sus principales características son:
- Instantáneas: instantáneas grabables y de solo lectura.
- REDADA.
- Autorreparación: sumas de comprobación para datos y metadatos.
- Detección automática de corrupción de datos.
- Subvolúmenes.
- Conciencia de SSD.
- Copias de seguridad incrementales eficientes
Puede obtener más información sobre sus funciones avanzadas y beneficios 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 me he encontrado con 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. Tienes que 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
Muestre el 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 usando el comando btrfs filesystem label.
[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 puede administrar Btrfs.
Puede utilizar un subvolumen para tomar instantáneas, establecer una cuota y replicarlo en otras ubicaciones y otros sistemas operativos host siempre que se ejecuten en el sistema de archivos Btrfs.
Enumere los 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 btrfs subvolume delete.
[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, la creación de una nueva cuenta de usuario crearía un directorio de inicio para la cuenta. Básicamente, el directorio de usuarios creado es un subdirectorio de / home. Significaba que la propiedad y los privilegios se adaptaron al propietario del directorio / home. También significó 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 hogares de usuarios
Puede acomodar subvolúmenes Btrfs como hogares 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 btrfs subvolume list / command, 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 ha tenido 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 porque el disco se llena configurando e implementando cuotas de Btrfs.
El primer paso es habilitar 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 utilizando el comando btrfs subvolume list. Lo mejor sería asociar cada subvolumen con un qgroup en función de su número de identificación mediante el comando btrfs qgroup create. Puede hacer esto de forma individual, pero también puede utilizar 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
# btrfs subvolume list / | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} /
Ejecute el comando btrfs quota rescan 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 2GB.
[root@fosslinux tuts]# btrfs qgroup limit 2G /home/fedoran2
Confirme los cambios del 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, utilizando 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 funciones ofrecen una forma de crear copias de seguridad en su sistema de manera conveniente.
Crea copias de seguridad usando instantáneas
De forma predeterminada, una instantánea residirá en el mismo disco que el subvolumen y puede examinar 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 un sistema remoto mediante SSH. El problema es que el destino debería 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. '
Se pueden tomar instantáneas 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 la marca -r para crear una instantánea de solo lectura. La bandera -r ofrecerá mayor consistencia y seguridad y le permitirá enviar y recibir a 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.
Utilizando btrfs send y btrfs receive para realizar copias de seguridad de instantáneas.
En la siguiente demostració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 haya formateado su unidad USB, es posible que reciba 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 del sistema de archivos btrfs. El comando btrfs send no puede funcionar en un sistema de archivos que no sea btrfs.
Si recibe este mensaje de error, 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 btrfs send se ha completado 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 btrfs incrementales posteriores tardarán menos tiempo.
Copias de seguridad incrementales usando btrfs send
Para usar btrfs send incrementalmente, tendrá que tomar otra instantánea de su subvolumen.
Crea 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 incremental de btrfs:
[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 siguiente 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 incremental de btrfs (el día después):
[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
Limpiar
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 conservara la última instantánea en las ubicaciones de origen y destino para poder realizar un nuevo envío incremental de btrfs.
Recuperar un archivo o directorio de una instantánea btrfs
Errores como eliminar un directorio o 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
Restaurar un archivo eliminado usando el comando cp:
[tuts@fosslinux ~]$ cp $HOME/.myprojectsnapshots/myproject-day1/day0.txt $HOME/Desktop/myproject
Restaurar 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 de 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
Usando el comando btrfs snapshot
Puede restaurar un subvolumen eliminado tomando una instantánea de instantáneas.
Restaure un subvolumen usando el comando btrfs snapshot:
[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 btrfs de 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.
Recupere 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 usando el comando btrfs - - help o la documentación en línea, a la que puede acceder usando 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! Para ti, equipo del proyecto Fedora.
Deja una respuesta