Btrfs es un sistema de archivos de propósito general y código abierto para Linux. El nombre deriva del uso de árboles B para almacenar estructuras internas del sistema de archivos. Se utilizan diferentes nombres para el sistema de archivos, incluidos "Butter F S" y "B-tree F S". El desarrollo de Btrfs comenzó en Oracle en 2007 y ahora varias empresas (incluidas Red Hat, Fujitsu, Intel, SUSE y muchas otras) están contribuyendo al esfuerzo de desarrollo. Btrfs está incluido en el kernel principal de Linux.
Instantáneas Btrfs
Los subvolúmenes de Btrfs se pueden tomar instantáneas y clonar, lo que crea árboles B adicionales. Una instantánea comienza como una copia de un subvolumen tomada en un momento dado. Puede hacer que se pueda escribir en una instantánea y usarla como un clon en evolución del subvolumen original. O puede utilizar la instantánea como una imagen estable de un subvolumen con fines de copia de seguridad o para la migración a otros sistemas. Las instantáneas se pueden crear rápidamente e inicialmente consumen muy poco espacio en disco.
Utilice el comando de instantánea de subvolumen btrfs para crear una instantánea de escritura/lectura de un subvolumen. El siguiente ejemplo crea una instantánea del subvolumen SV1:
# btrfs subvolume snapshot /btrfs/SV1 /btrfs/SV1/SV1-snap Create a snapshot of '/btrfs/SV1' in '/btrfs/SV1/SV1-snap'
Use la instantánea de subvolumen btrfs -r opción para crear una instantánea de solo lectura:
# btrfs subvolume snapshot -r /btrfs/SV1 /btrfs/SV1-rosnap Create a readonly snapshot of '/btrfs/SV1' in '/btrfs/SV1-rosnap'
Las instantáneas aparecen como un directorio normal cuando se usa el comando ls. Las instantáneas también aparecen en la salida del comando btrfs subvolume list.
# btrfs subvolume list /btrfs ID 257 gen 10 top level 5 path SV1 ID 258 gen 9 top level 257 path SV1/SV1-snap ID 259 gen 10 top level 5 path SV1-rosnap
Tomar una instantánea de un archivo
Puede utilizar el “cp –reflink Comando para tomar una instantánea de un archivo. Con esta opción, el sistema de archivos no crea un nuevo enlace que apunta a un inodo existente, sino que crea un nuevo inodo que comparte los mismos bloques de disco que la copia original. El nuevo archivo parece ser una copia del archivo original pero los bloques de datos no están duplicados. Esto permite que la copia sea casi instantánea y también ahorra espacio en disco. A medida que el contenido del archivo diverge con el tiempo, crece la cantidad de almacenamiento requerido. Una restricción es que esta operación solo puede funcionar dentro de los límites del mismo sistema de archivos y dentro del mismo subvolumen.
El siguiente ejemplo copia un archivo usando el comando cp –reflink. El espacio utilizado se proporciona tanto antes como después de la operación de copia. Tenga en cuenta que el espacio utilizado no aumenta.
# df -hP /btrfs Filesystem Size Used Avail Use% Mounted on /dev/sda 10G 23M 8.0G 1% /btrfs
# cp --reflink /btrfs/SV1/vmlinuz-3.10.0-693.17.1.el7.x86_64 /btrfs/SV1/copy_of_vmlinuz
# df -h /btrfs Filesystem Size Used Avail Use% Mounted on /dev/sda 10G 23M 8.0G 1% /btrfs
Montar un subvolumen o una instantánea
De forma predeterminada, Linux monta el volumen principal Btrfs, que tiene un ID de 0. En este ejemplo, se emitió el siguiente comando de montaje antes de crear subvolúmenes e instantáneas:
# mount /dev/sdb /btrfs
El subvolumen SV1 se creó en /btrfs. El comando ls muestra el subvolumen:
# ls -l /btrfs total 0 drwxr-xr-x. 1 root root 84 Mar 29 11:01 SV1
El siguiente ejemplo copia archivos en SV1, crea una instantánea de SV1 y verifica que tanto el subvolumen como la instantánea contienen los mismos archivos:
# cp -p /boot/vmlinuz-3.10.0-693.17.1.el7.x86_64 /btrfs/SV1
# btrfs sub snapshot /btrfs/SV1 /btrfs/SV1-snap Create a snapshot of '/btrfs/SV1' in '/btrfs/SV1-snap'
# ls /btrfs/SV1* /btrfs/SV1: vmlinuz-3.10.0-693.17.1.el7.x86_64 /btrfs/SV1-snap: vmlinuz-3.10.0-693.17.1.el7.x86_64
Si desmonta /btrfs y lo vuelve a montar, el volumen principal Btrfs se monta de forma predeterminada:
# ls /btrfs/ SV1 SV1-snap # umount /btrfs # mount /dev/sda /btrfs/ # ls /btrfs/ SV1 SV1-snap
Sin embargo, puede montar un subvolumen btrfs o una instantánea como si fuera un dispositivo de disco. Si monta una instantánea en lugar de su subvolumen principal, revierte efectivamente el estado del sistema de archivos al momento en que se tomó la instantánea. El siguiente ejemplo copia un archivo a SV1 para que el contenido sea diferente de SV1-snap:
# cp testfile /btrfs/SV1
# ls -l /btrfs/SV1* /btrfs/SV1: total 5760 -rw-r--r--. 1 root root 19 Mar 29 11:44 testfile -rwxr-xr-x. 1 root root 5890720 Jan 25 20:26 vmlinuz-3.10.0-693.17.1.el7.x86_64 /btrfs/SV1-snap: total 5756 -rwxr-xr-x. 1 root root 5890720 Jan 25 20:26 vmlinuz-3.10.0-693.17.1.el7.x86_64
Para montar un subvolumen o una instantánea, primero debe determinar el número de ID del subvolumen que desea montar. Utilice el comando btrfs subvolume list para mostrar los números de identificación. En el siguiente ejemplo, el ID del subvolumen raíz es 257:
# btrfs sub list /btrfs ID 257 gen 12 top level 5 path SV1 ID 258 gen 9 top level 5 path SV1-snap
Use el btrfs "subvolume set-default ” para establecer el subvolumen predeterminado de un sistema de archivos. Por ejemplo, para montar el subvolumen SV1 Btrfs, que tiene un ID de 257:
# btrfs subvolume set-default 257 /btrfs
A continuación, debe desmontar y volver a montar el sistema de archivos Btrfs. El nivel raíz entonces contiene el contenido del subvolumen SV1 y el subvolumen raíz ya no es visible:
# ls -l /btrfs total 5760 -rw-r--r--. 1 root root 19 Mar 29 11:44 testfile -rwxr-xr-x. 1 root root 5890720 Jan 25 20:26 vmlinuz-3.10.0-693.17.1.el7.x86_64
También puede usar el “-o subvolid ” al comando de montaje para montar el subvolumen raíz, un subvolumen o una instantánea. Por ejemplo, para montar el subvolumen raíz:
# umount /btrfs # mount -o subvolid=5 /dev/sda /btrfs
# ls -l /btrfs total 0 drwxr-xr-x. 1 root root 84 Mar 29 11:44 SV1 drwxr-xr-x. 1 root root 68 Mar 29 11:17 SV1-snapCómo crear y montar un sistema de archivos Btrfs (explicado con ejemplos)
Cómo cambiar el tamaño/expandir un volumen/sistema de archivos Btrfs