Cómo administrar el sistema de archivos Btrfs en Linux
Btrfs, también pronunciado como ‘Butter FS’ o ‘B-tree FS’, es un sistema de archivos de copia en escritura (CoW) para Linux. Tiene licencia GPL y se enfoca en proporcionar características como escalabilidad, integridad de datos, desfragmentación y tolerancia a fallas, entre otras. En este artículo, aprendamos a instalar y utilizar algunas de las funciones importantes de btrfs.
Instalación y creación
Primero, instale los paquetes btrfs si aún no están instalados. En distribuciones basadas en RedHat, use:
yum install btrfs-progs
En distribuciones basadas en Debian, use:
apt-get install btrfs-tools
Habilite el módulo del kernel btrfs usando:
modprobe btrfs
Hagamos ahora una partición en un disco y creemos el sistema de archivos btrfs en él. En los ejemplos siguientes, usaremos un disco virtual / dev / xvdc que aún no tiene particiones.
Usando ‘fdisk’, cree una nueva partición en el dispositivo. Cuando se le solicite, elija ‘n’ para la nueva partición seguida de ‘P’ para la primaria y ‘1’ para el número de partición. A continuación, seleccione los valores predeterminados seleccionando la tecla ‘Intro’. Luego seleccione ‘w’ para guardar los cambios y salir.
[root@localhost ~]# fdisk /dev/xvdc Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table Building a new DOS disklabel with disk identifier 0x4ea901ae. The device presents a logical sector size that is smaller than the physical sector size. Aligning to a physical sector (or optimal I/O) size boundary is recommended, or performance may be impacted. Command (m for help): p Disk /dev/xvdc: 2097 MB, 2097152000 bytes, 4096000 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disk label type: dos Disk identifier: 0x4ea901ae Device Boot Start End Blocks Id System Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): First sector (2048-4095999, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-4095999, default 4095999): +1G Partition 1 of type Linux and of size 1 GiB is set Command (m for help): p Disk /dev/xvdc: 2097 MB, 2097152000 bytes, 4096000 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disk label type: dos Disk identifier: 0x4ea901ae Device Boot Start End Blocks Id System /dev/xvdc1 2048 2099199 1048576 83 Linux Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
Ahora crearemos el sistema de archivos en la partición.
mkfs.btrfs <device>
[root@localhost ~]# mkfs.btrfs /dev/xvdc1 Detected a SSD, turning off metadata duplication. Mkfs with -m dup if you want to force metadata duplication. Btrfs v3.16.2 See http://btrfs.wiki.kernel.org for more information. Turning ON incompat feature 'extref': increased hardlink limit per file to 65536 fs created label (null) on /dev/xvdc1 nodesize 16384 leafsize 16384 sectorsize 4096 size 1.00GiB
El siguiente paso es crear un punto de montaje y montar el sistema de archivos.
[root@localhost ~]# mkdir /mnt/btrfs_mount [root@localhost ~]# mount /dev/xvdc1 /mnt/btrfs_mount/
Verifique si el montaje fue exitoso usando el comando ‘df -h’
[root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/root 14G 741M 13G 6% / devtmpfs 493M 0 493M 0% /dev tmpfs 494M 0 494M 0% /dev/shm tmpfs 494M 14M 481M 3% /run tmpfs 494M 0 494M 0% /sys/fs/cgroup /dev/xvdc1 1.0G 17M 899M 2% /mnt/btrfs_mount
Algunas opciones de montaje útiles
Btrfs ofrece algunas opciones de montaje especiales que podemos usar para controlar su comportamiento. Para nombrar unos pocos,
compress [=zlib|lzo|no] - To turn on data compression using zlib or LZO compression. While zlib method is faser, LZO offers better compression autodefrag - Enables auto defragmentation of the filesystem in the background. nodatacow - Turn off copy-on-write for newly created files. nodatasum - Turn off data checksum creation for new files.
El siguiente ejemplo monta el sistema de archivos usando compresión lzo
[root@localhost ~]#mount -o compress=lzo /dev/xvdc1 /mnt/btrfs_mount
Agregar y eliminar dispositivos en btrfs
Es posible agregar otro dispositivo al punto de montaje.
btrfs device add <device> <mount point>

Observe en la salida ‘df -h’ anterior que el tamaño del sistema de archivos que antes era 1GB ahora se incrementa a 2GB.
De la misma manera, también podemos eliminar uno o más dispositivos / volúmenes agregados:
btrfs device delete [root@localhost ~]# btrfs device delete /dev/xvdd1 /mnt/btrfs_mount/ [root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/root 14G 786M 13G 6% / devtmpfs 493M 0 493M 0% /dev tmpfs 494M 0 494M 0% /dev/shm tmpfs 494M 51M 444M 11% /run tmpfs 494M 0 494M 0% /sys/fs/cgroup /dev/xvdc1 1.0G 17M 899M 2% /mnt/btrfs_mount
Después de agregar o eliminar dispositivos, es posible redistribuir los datos y metadatos presentes en el sistema de archivos entre los dispositivos disponibles.
btrfs filesystem balance <mount point>
[root@localhost ~]# btrfs filesystem balance /mnt/btrfs_mount Done, had to relocate 4 out of 4 chunks
Cambiar el tamaño del sistema de archivos
Se puede aumentar o disminuir el tamaño del sistema de archivos btrfs mientras está montado, siempre que el dispositivo subyacente tenga suficiente espacio para soportar estas acciones.
btrfs filesystem resize <new size> <mount point>

Compresión y desfragmentación
Btrfs permite la compresión y desfragmentación para aumentar la capacidad del sistema de archivos y el rendimiento de E / S, respectivamente.
La desfragmentación se realiza mediante el siguiente comando:
btrfs filesystem defragment <mount point>
[root@localhost ~]# btrfs filesystem defragment /mnt/btrfs_mount
Para comprimir y desfragmentar en paralelo,
btrfs filesystem defragment -c <mount point>
[root@localhost ~]# btrfs filesystem defragment -c /mnt/btrfs_mount
NOTA: Para usar la opción ‘-c’, la compresión debe estar habilitada en el momento del montaje como se especificó anteriormente en la sección ‘Algunas opciones de montaje útiles’.
También es posible desfragmentar archivos y directorios individualmente proporcionando los archivos y directorios específicos.
btrfs filesystem defragment -c <file-name> ......
Subvolúmenes, instantáneas y cuotas
Los subvolúmenes y las instantáneas son una de las características clave de btrfs. Un subvolumen es un espacio de nombres de archivo POSIX. Es diferente de los volúmenes LVM donde los volúmenes son dispositivos de bloque. Podemos pensar en ellos como aquellos que brindan una vista restringida del sistema de archivos, ya que se pueden montar de forma independiente. Cada subvolumen contiene un directorio correspondiente en su sistema de archivos principal. Además, podemos crear otros directorios bajo este directorio e incluso subvolúmenes, pero su comportamiento es muy similar al de un directorio normal.
Para crear un subvolumen, use el siguiente comando:
#btrfs subvolume create <subvolume>
[root@localhost ~]# btrfs subvolume create /mnt/btrfs_mount/subvol1 Create subvolume '/mnt/btrfs_mount/subvol1'
Enumere los subvolúmenes disponibles
#btrfs subvolume list <mount point>
[root@localhost ~]# btrfs subvolume list /mnt/btrfs_mount/ ID 259 gen 38 top level 5 path subvol1
Podemos intentar copiar algunos datos en el subvolumen recién creado.
[root@localhost ~]# cp /etc/hosts /mnt/btrfs_mount/subvol1 [root@localhost ~]# ls -l /mnt/btrfs_mount/subvol1/ total 4 -rw-r--r-- 1 root root 158 Aug 6 09:44 hosts
Ahora desmontemos el sistema de archivos principal y montemos solo el subvolumen.
[root@localhost ~]# umount /mnt/btrfs_mount/ [root@localhost ~]# mount -o subvol=subvol1 /dev/xvdc1 /mnt [root@localhost ~]# ls -l /mnt total 4 -rw-r--r-- 1 root root 158 Aug 6 09:44 hosts
Observe que ahora solo vemos el contenido del subvolumen. Todo lo que esté por encima de este nivel no es accesible, lo que da una vista restringida.
Al llegar a las instantáneas, ayudan a tomar una instantánea del contenido de los subvolúmenes.
#btrfs subvolume snapshot
[root@localhost ~]# btrfs subvolume snapshot /mnt/btrfs_mount /mnt/btrfs_mount/snapshot1 Create a snapshot of '/mnt/btrfs_mount' in '/mnt/btrfs_mount/snapshot1' [root@localhost ~]# ls -l /mnt/btrfs_mount total 16 drwxr-xr-x 1 root root 14 Aug 4 09:56 snapshot1 drwxr-xr-x 1 root root 10 Aug 6 09:44 subvol1
Curiosamente, una instantánea es en sí misma un subvolumen. Podemos usar la opción ‘-r’ en el comando anterior para crear una instantánea de solo lectura.
Podemos eliminar cualquier subvolumen o instantánea usando el comando ‘btrfs subvol delete’
[root@localhost ~]# btrfs subvol delete /mnt/btrfs_mount/subvol1 Transaction commit: none (default) Delete subvolume '/mnt/btrfs_mount/subvol1'
[root@localhost ~]# btrfs subvol delete /mnt/btrfs_mount/snapshot1/ Transaction commit: none (default) Delete subvolume '/mnt/btrfs_mount/snapshot1' [root@localhost ~]# ls -l /mnt/btrfs_mount/ total 0
Es posible limitar uno o más subvolúmenes para que no consuman todo el espacio del sistema de archivos mediante cuotas.
Para usar esto, primero debemos habilitar las cuotas en el sistema de archivos antes de crear subvolúmenes.
#btrfs quota enable <mount point>
[root@localhost ~]#btrfs quota enable /mnt/btrfs_mount
Ahora el subvolumen se puede limitar:
#btrfs qgroup limit <size-limit> <subvolume-path>
[root@localhost ~]# btrfs subvolume create /mnt/btrfs_mount/svol1 Create subvolume '/mnt/btrfs_mount/svol1' [root@localhost ~]# btrfs qgroup limit 500M /mnt/btrfs_mount/svol1/
Otras opciones útiles
btrfs filesystem df - Shows space usage information of a given mount point

btrfs filesystem show - Shows the filesystem version details
[root@localhost ~]# btrfs filesystem show /mnt/btrfs_mount/ Btrfs v3.16.2
btrfs scrub - Starts error checking on selected or all devices
[root@localhost ~]# btrfs scrub start /mnt/btrfs_mount/ scrub started on /mnt/btrfs_mount/, fsid 199b8fd8-95d4-49d5-b1b5-edc005f9bd48 (pid=20225)
Verifique el estado de crub usando el comando ‘status’:
[root@localhost ~]# btrfs scrub status /mnt/btrfs_mount/ scrub status for 199b8fd8-95d4-49d5-b1b5-edc005f9bd48 scrub started at Thu Aug 6 10:12:22 2015 and finished after 0 seconds total bytes scrubbed: 288.00KiB with 0 errors
btrfs restore [options] - Restores files from a damaged filesystem without unmounting it.
Para obtener más detalles sobre btrfs, consulte la wiki de btrfs.
Conclusión
Aunque se dice que Btrfs todavía es experimental y no completamente estable, algunas distribuciones ya lo han cambiado. Es el sistema de archivos predeterminado en openSuSE 13.2. Tiene muchas características avanzadas y algunas características fabulosas como instantáneas y reversión, lo que lo hace bastante popular. En el futuro, este también podría convertirse en el sistema de archivos elegido para otras distribuciones de Linux.