LINUX

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>
Agregar un dispositivo a btrfs
Agregar un dispositivo a btrfs

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>
cambio de tamaño del sistema de archivos
Cambiar el tamaño del sistema de archivos

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
Salida de 'df' en btrfs
Información de uso de espacio de Btrfs

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.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar