Btrfs (Español)

From ArchWiki
Esta traducción de Btrfs fue revisada el 2022-10-28. Si existen cambios puede actualizarla o avisar al equipo de traducción.

De Btrfs Wiki:

btrfs es un moderno Sistema de archivos para Linux Copy-on-Write (CoW) enfocado en implementar características avanzadas al mismo tiempo que se centra en la tolerancia a los errores, reparación y fácil administración.
Advertencia: Btrfs tiene algunas características inestables. Véase el estado de la Wiki de Btrfs, ¿Es Btrfs estable? y Guía de inicio para información más detallada. Véase la sección de #Solución de problemas.

Requisitos

Para utilidades de espacio de usuario instale el paquete btrfs-progs que se requiere para operaciones básicas.

Si necesita arrancar desde un sistema de archivos Btrfs (por ejemplo su kernel e initramfs están en una partición Btrfs), revise si su gestor de arranque soporta Btrfs.

Creación del sistema de archivos

A continuación se muestra como crear un sistema de archivos Btrfs. Para convertir una partición ext3/4 a Btrfs, véase #Conversión de Ext3/4 a Btrfs. Para una instalación sin particiones, véase #Disco Btrfs sin particiones.

Véase mkfs.btrfs(8) para más información.

Sistema de archivos en un único dispositivo

Para crear un sistema de archivos en la partición /dev/partición:

# mkfs.btrfs -L mietiqueta /dev/partición

El tamaño de nodo (nodesize) para los metadatos por defecto es 16 KB, mientras que el tamaño de sector (sectorsize) predeterminado para los datos es igual al tamaño de página y se detecta automáticamente. Para usar un tamaño de nodo para metadatos más grande (debe ser múltiplo del tamaño de sector, se permite hasta 64KB), especifique un valor para el nodesize a través de -n como se muestra en este ejemplo usando bloques de 32KB:

# mkfs.btrfs -L mietiqueta -n 32k /dev/partición
Nota: De acuerdo a mkfs.btrfs(8) § OPTIONS, "[un] nodesize más pequeño incrementa la fragmentación pero conduce a árboles-b, lo cual conduce a su vez a menor contención de bloqueos. Nodesizes más grandes brindan mejor empaquetado y menos fragmentación al costo de operaciones de memoria más grandes mientras se actualizan los bloques de metadatos".

Sistema de archivos en múltiples dispositivos

Advertencia: Los modos RAID 5 y RAID 6 de Btrfs son fatalmente desastrosos, y no deberían ser usados "en absoluto, salvo se pruebe con datos desechables" Lista de problemas y parciales soluciones. Véase La página de Btrfs en RAID 5 y RAID 6 para actualizaciones de estado (Se ve que no está actualizado).

Múltiples dispositivos pueden ser usados para crear un RAID. Niveles de Raid soportados incluyen RAID 0, RAID 1, RAID 10, RAID 5 y RAID 6. A partir del kernel 5.5 RAID1c3 y RAID1c4 para 3- y 4- copias del nivel RAID 1. Los niveles RAID pueden ser configurados por separado para los datos y metadatos usando las opciones -d y -m respectivamente. Por defecto los datos tienen una copia (single) y los metadatos están reflejados (raid1). Esto es similar a crear configuración de JBOD , donde los discos se ven como un sistema de archivos, pero los ficheros no están duplicados. Véase Usando Btrfs con múltiples dispositivos para mayor información acerca de como crear un volumen Btrfs RAID.

# mkfs.btrfs -d single -m raid1 /dev/part1 /dev/part2 ...

Debe incluir, ya sea el hook udev o el btrfs en /etc/mkinitcpio.conf para utilizar múltiples dispositivos Btrfs. Véase el artículo Mkinitcpio#Common hooks para más información.

Nota:
  • Es posible añadir dispositivos en un sistema de archivos múltiple entonces. Véase este artículo de la wiki de Btrfs Para más información.
  • Los dispositivos pueden estar en diferentes tamaños. De todas formas, si una unidad en la configuración RAID es más grande que los otros, este espacio extra no se usará.
  • Algunos gestores de arranque como Syslinux no tienen soporte para sistemas de archivos con múltiples dispositivos.
  • Btrfs no lee automáticamente del dispositivo más rápido, así que mezclar distintos tipos de discos resulta en un rendimiento inconsistente. Mire [1] para más detalles.

Véase #RAID para conseguir consejos en el mantenimiento específico a sistemas de archivos Btrfs de múltiples dispositivos.

Configurar el sistema de archivos

Copy-on-Write (CoW)

Por defecto, Btrfs usa copy-on-write para todos los ficheros en todo momento. Las escrituras no sobrescriben los datos; en su lugar, se escribe una copia modificada del bloque en una nueva ubicación y los metadatos se actualizan para apuntar a la nueva ubicación. Véase la sección Guía Sysadmin de Btrfs para detalles de implementación, como también sus ventajas y desventajas.

Desactivar CoW

Advertencia: Desactivar CoW en Btrfs también desactiva las sumas de comprobación. Btrfs no podrá detectar archivos nodatacow corruptos. Cuando se combina con RAID 1, los cortes de energía u otras fuentes de corrupción pueden hacer que los datos no estén sincronizados.

Para desactivar copy-on-write para ficheros recién creados en un subvolumen montado, use la opción de montaje nodatacow. Esto solamente afectará a ficheros recién creados. Copy-on-write todavía ocurrirá con archivos existentes. La opción nodatacow además desactiva la compresión. Véase btrfs(5) Para más detalles.

Nota: De btrfs(5) § MOUNT OPTIONS:
Dentro de un único sistema de archivos, no es posible montar algunos subvolúmenes con nodatacow y otros con datacow. La opción de montaje del primer subvolumen montado aplica para cualquier otro subvolumen.

Para desactivar el copy-on-write para ficheros/directorios únicos:

$ chattr +C /dir/file

Esto desactivará copy-on-write para aquellas operaciones en cuales solo haya una referencia al archivo. Si hay más de una referencia, por ejemplo debido a clonaciones / clonaciones ligeras o instantáneas del sistema de archivos, todavía se produce la copia en escritura. Tenga en cuenta que a partir de coreutils 9.0, cp intenta realizar copias ligeras de forma predeterminada; véase cp(1) para obtener más detalles.

Nota: De chattr(1):
Para btrfs, la 'C' flag debe ser establecida en archivos nuevos o vacíos. Si está configurando un archivo el cual ya tenga bloques de datos, es indefinido cuando los bloques asignados al archivo serán completamente estables. Si la 'C' flag está establecida en un directorio, no tendrá efecto en el directorio, pero archivos nuevos creados en este tendrán el atributo No_COW.
Sugerencia: De acuerdo a la nota de arriba, puede utilizar el siguiente truco para desactivar copy-on-write en archivos existentes de un directorio:
$ mv /ruta/al/dir /ruta/al/dir_old
$ mkdir /ruta/al/dir
$ chattr +C /ruta/al/dir
$ cp -a --reflink=never /ruta/al/dir_old/. /ruta/al/dir
$ rm -rf /ruta/al/dir_old
Asegúrese de que los datos no se utilicen durante este proceso. También tenga en cuenta que mv o cp sin --reflink=never como se describe a continuación no funcionarán.

Compresión

Btrfs soporta compresión automática y transparente. Esto reduce el tamaño de los archivos como también aumenta significativamente la duración de medios basados en flash, reduciendo la amplificación de escritura. [2][3][4] También se puede mejorar el rendimiento, en algunos casos (por ejemplo hilo único con E/S de un archivo pesado), mientras que obviamente dañando el rendimiento en otros casos (por ejemplo multihilo y/o tareas intensivas de E/S de la CPU con un archivo grande). Un mejor rendimiento es generalmente logrado con algoritmos más rapidos de compresión como zstd y lzo, y algunos benchmarks proporcionan comparaciones detalladas.

LZO tiene un nivel de compresión fijo, mientras que ZLIB y ZSTD tienen un rango de niveles de 1 (baja compresión) a 9 (ZLIB) o 15 (ZSTD)[5]. Cambiar los niveles afectará a la CPU y el rendimiento de E/S de manera diferente, por lo que deben verificarse / compararse antes y después de cambiar.

La opción de montaje compress=alg[:level] activa considerar automáticamente todos los archivos para compresión, donde alg ya sea zlib, lzo, zstd, o no (para no compresión). Usando esta opción, btrfs revisará si comprimiendo la primera porción de datos lo logra encoger. Si lo hace, la escritura entera del archivo será comprimida. Si no, Nada de eso se va a comprimir. Con esta opción, si la primera porción de la escritura no se encoge, la compresión no sera aplicada a la escritura incluso si el resto de la información encoje tremendamente. [6] Esto está hecho para prevenir que el disco espere para empezar a escribir hasta que todos los datos que se van a escribir estén en btrfs por completo y se compriman.

La opción de montaje compress-force=alg[:level] puede ser usada en su lugar, lo que hace que btrfs omita comprobar si la compresión encogió la primera porción, y activa de forma automática probar la compresión archivo por archivo. En el peor caso, esto puede causar (levemente) más consumo de la CPU sin propósito. En todo caso, pruebas empíricas en múltiples sistemas de uso mixto han mostrado una significativa mejora de al rededor del 10% de compresión de disco usando compress-force=zstd sobre solo compress=zstd, el cual también tenía una compresión de disco del 10%.

Sólo archivos creados o modificados después de la opción de montaje estarán comprimidos.

Advertencia: La desfragmentación de un archivo que tiene una copia COW (ya sea una copia instantánea o una hecha con cp o bcp) además de utilizar -c con un algoritmo de compresión puede dar como resultado dos archivos no relacionados efectivamente, aumentando el uso de disco.

Para aplicar compresión a archivos existentes, utilice la orden btrfs filesystem defragment -calg, cuando alg ya sea zlib, lzo o zstd. Por ejemplo, para volver a comprimir todo el sistema de archivos con zstd, ejecute la siguiente orden:

# btrfs filesystem defragment -r -v -czstd /

Para activar la compresión cuando instala Arch en una partición Btrfs vacía, use la opción compress al montar el sistema de archivos: mount -o compress=zstd /dev/sdxY /mnt/. Durante la configuración, añada compress=zstd a las opciones de montaje del sistema de archivos de root en fstab.

Sugerencia: La compresión además puede ser activada por archivo, sin usar la opción de montajecompress; para hacerlo aplique chattr +c al archivo. Cuando sea aplicada a los directorios, causará que los nuevos archivos sean automáticamente comprimidos.
Advertencia:
  • Sistemas que usan viejos kernels o btrfs-progs sin el soporte de zstd pueden ser incapaces de leer o reparar su sistema de archivos si usa esa opción.
  • GRUB introdujo el soporte de zstd en la versión 2.04. Actualice el gestor de arranque de su MBR/ESP ejecutando grub-install con las opciones apropiadas para su configuración BIOS/UEFI, ya que eso no lo hace automáticamente. Véase FS#63235.

Ver tipos y proporciones de compresión

compsize toma una lista de archivos (o el sistema de archivos btrfs entero) y mide los tipos de compresión usados y proporciones de compresión efectiva. El tamaño sin comprimir puede no coincidir con el número dado por otros programas como du(1), porque cada extensión se cuenta una vez, incluso si se refresca varias veces, e incluso si una parte de ella ya no se usa en ningún lado pero no se ha recogido basura. La opción -x la mantiene en un solo sistema de archivos, lo cual es útil en situaciones como compsize -x / para to evitar que intente buscar en subdirectorios que no sean btrfs y falle toda la ejecución.

Subvolúmenes

"Un subvolumen de btrfs no es un dispositivo de bloque (ni debe ser tratado como uno) en lugar de eso, un subvolumen btrfs puede considerarse como un archivo de namespace POSIX. Estos namespace pueden ser accesibles vía el subvolumen de nivel superior del sistema de archivos, o puede ser montado por derecho propio" [7]

Cada sistema de archivos Btrfs tiene un nivel superior de subvolumen con ID 5. Puede ser montada como / (por defecto), u otro subvolumen puede ser montado en vez de eso. Los subvolúmenes pueden moverse en el sistema de archivos y se identifican más por su ID que por su ruta.

Revise los siguientes links para más detalles:

Crear un subvolumen

Para crear un subvolumen:

# btrfs subvolume create /ruta/al/subvolumen

Listar subvolúmenes

Para ver una lista de los subvolúmenes actuales y sus ID bajo ruta:

# btrfs subvolume list -p ruta

Eliminar un subvolumen

Para eliminar un subvolumen:

# btrfs subvolume delete /ruta/al/subvolumen

Desde Linux 4.18, también se puede eliminar un subvolumen como un directorio regular (rm -r, rmdir).

Montar subvolúmenes

subvolúmenes pueden ser montados como particiones del sistema de archivos usando las flags subvol=/ruta/al/subvolumen o subvolid=objectid. Por ejemplo, puede tener un subvolumen llamado subvol_root y montarlo como /. Uno puede imitar las particiones tradicionales del sistema de archivos creando varios subvolúmenes en el nivel superior del sistema de archivos y luego montándolos en los puntos de montaje apropiados. Se pueden imitar las particiones tradicionales del sistema de archivos creando varios subvolúmenes en el nivel superior del sistema de archivos y luego montándolos en los puntos de montaje apropiados. Es preferible montar utilizando subvol=/ruta/al/subvolumen, en lugar del subvolid, ya que el subvolid puede cambiar al restaurar las #Instantáneas, lo que requiere un cambio de configuración de montaje.

Sugerencia: El cambio de diseño de subvolumen se hace simple al no utilizar el subvolumen del nivel superior (ID=5) como / (lo cual ocurre por defecto). En vez de eso, considere crear un subvolumen para sus datos reales y montarlos como /.
Nota: De btrfs(5) § MOUNT OPTIONS:
La mayor parte de opciones de montaje se aplican al sistema de archivos entero, y sólo las opciones para el primer subvolumen que se va a montar harán. Esto se debe a la implementación y puede cambiar en el futuro.

Véase Preguntas Frecuentes en la Wiki de Btrfs para cuales opciones pueden ser usadas por subvolumen.

Véase Snapper#Suggested filesystem layout, Btrfs SysadminGuide#Managing Snapshots, y Btrfs SysadminGuide#Layout para ejemplos de diseños de sistemas de archivo que usan subvolúmenes.

Véase btrfs(5) para una lista completa de opciones específicas de montado para btrfs.

Montar subvolumen en raíz

Para utilizar un subvolumen como punto de montaje raíz, especifique el subvolumen vía parámetros del kernel usando rootflags=subvol=/ruta/al/subvolumen. Edite el punto de montaje raíz en /etc/fstab y especifique el punto de montaje subvol=. Alternativamente el subvolumen puede ser pesecificado con su id, rootflags=subvolid=objectid como parámetro del kernel y subvolid=objectid como opción de montaje en /etc/fstab. Es preferible montar utilizando subvol=/ruta/al/subvolumen, en lugar del subvolid, ya que el subvolid puede cambiar al restaurar las #Instantáneas, lo que requiere un cambio de montar la configuración, de lo contrario el sistema no arrancará.


Cambiar el subvolumen por defecto

El subvolumen por defecto se monta si no se provee la opción de montado subvol=. Para cambiar el subvolumen por defecto, haga:

# btrfs subvolume set-default subvolume-id /

cuando subvolume-id sea encontrado listando.

Nota: Después de cambiar el subvolumen predeterminado en un sistema con GRUB, debe ejecutar grub-install otra vez para avisarle al gestor de arranque sobre los cambios. Véase este hilo del foro.

Cambiando el subvolumen por defecto con btrfs subvolume set-default hará que el nivel superior del sistema de archivos sea inaccesible, excepto usando las opciones de montado subvol=/ o subvolid=5 [8].

Quota

Advertencia: Qgroup aún es inestable y combinar Quota con (demasiadas) snapshots o subvolúmenes puede causar problemas de rendimiento, por ejemplo eliminando snapshots. Además hay varios problemas más.

El soporte de Quota en Btrfs se implementa al nivel de subvolumen por el uso de quota groups (grupos) o qgroup: Cada subvolumen es asignado a quota groups en forma de 0/subvolume_id por defecto. No obstante, es posible crear un quota group usando cualquier número si lo desea.

Para usar qgroups necesita activar la quota primero, usando:

# btrfs quota enable ruta

A partir de este punto en adelante los subvolúmenes recién creados serán controlados por esos grupos. Con el fin de, retrospectivamente activelos para subvolúmenes existentes, active la quota normalmente, luego cree un qgroup (quota group) para cada uno de esos subvolúmenes usando subvolume_id y reescaneelos:

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

Quota groups en Btrfs forma una jerarquía de árbol, por lo cual qgroups está adjunto a los subvolúmenes. El tamaño límite se establece por qgroup y se aplican cuando cualquier límite del árbol que contenga un determinado subvolumen es alcanzado.

Límites en quota groups pueden aplicarse al uso total de los datos, ya sea, uso no compartido, datos comprimidos o ambos. Eliminar y copiar archivos puede afectar los límites de ambos debido a que el límite no compartido de otro qgroup puede cambiar si los archivos del volumen original se eliminan y solo queda una copia. Por ejemplo, una nueva snapshot comparte casi todos los bloques con el subvolumen original, nuevas escrituras a cualquiera de los subvolúmenes hacia el límite exlusivo, eliminaciones de datos comunes en un volumen aumentan hacia el límite exclusivo en el otro.

Para aplicar un límite a un grupo, utilice la orden btrfs qgroup limit. Dependiendo de su uso utilice un límite total, límite sin comprimir (-e) o límite comprimido (-c). Para ver utilización y límites de una ruta dada dentro del sistema de archivos

# btrfs qgroup show -reF ruta

Intervalo de commit

La resolución de cuáles datos son escritos en el sistema de archivos es dictada por el mismo Btrfs y por los ajustes system-wide. Btrfs por defecto tiene 30 segundos de intervalo de punto de control en el cual nuevos datos son cometidos al sistema de archivos. Esto puede ser cambiado añadiendo la opción de montado commit en /etc/fstab para la partición btrfs.

LABEL=arch64 / btrfs defaults,compress=zstd,commit=120 0 0

Ajustes en el sistema también afectan el intervalo de commits. Incluyen los archivos debajo de /proc/sys/vm/* y están fuera del foco de este artículo Wiki. La documentación del kernel sobre estos está disponible aquí.

SSD TRIM

Un sistema de archivos Btrfs es capaz de liberar bloques no utilizados de una unidad SSD que admita la orden TRIM. A partir de la versión del kernel 5.6 hay soporte de descarte asíncrono, activado con la opción de montado discard=async. Las extensiones libreadas no se descartan de inmediato, sino que se agrupan y recortan después por un subproceso de trabajo independiente, lo que mejora la latencia del commit.

Más información sobre utilizar y activar TRIM está disponible en Solid State Drives (Español)#TRIM.

Utilización

Archivo como espacio de intercambio

Btrfs soporta archivo como espacio de intercambio (swap) a partir del kernel de Linux 5.0.[9] La manera apropiada de iniciar un archivo como espacio de intercambio es primero crear un subvolumen sin instantánea para albergar el archivo y luego establecer el atributo No_COW en todo el directorio con chattr:

# chattr +C /ruta/al/subvolumendeintercambio

De ahora en adelante, cualquier archivo nuevo creado dentro del subvolumen de intercambio tendrá el conjunto de atributos No_COW.

Continúe con los siguientes pasos en Swap#Swap file creation. Configure la hibernación del archivo como espacio de intercambio como está descrito en Power management (Español)/Suspend and hibernate (Español)#Hibernar en un archivo swap.

Nota: No se admiten los archivos de intercambio en sistemas de archivos que abarcan varios dispositivos. Véase btrfs(5) § SWAPFILE SUPPORT y esta discusión en los foros de Arch.

Ver espacio usado/libre

Herramientas de espacio de usuario de linux como df(1) reportarán de forma incorrecta espacio libre en una partición Btrfs. Se recomienda usar btrfs filesystem usage para consultar particiones Btrfs. Por ejemplo, para un desglose completo de asignación de dispositivos y estadísticas de utilización:

# btrfs filesystem usage /
Nota: La orden btrfs filesystem usage actualmente no funciona correctamente con los niveles RAID5/RAID6

Alternativamente, btrfs filesystem df permite un vistazo rápido del uso del espacio asignado sin el requisito de ejecutarse como superusuario:

$ btrfs filesystem df /

Véase [10] para más información.

Las mismas limitaciones se aplican a las herramientas que analizan el uso del espacio para algún subconjunto del sistema de archivos, como du(1) o ncdu(1), ya que no tienen en cuenta los enlaces de referencia, las instantáneas y la compresión. En su lugar, véase btduAUR y compsize para ver alternativas compatibles con btrfs.

Desfragmentación

Advertencia: Una regresión importante en la versión del kernel de Linux 5.16.x < 5.16.5 hace que la desfragmentación de Btrfs se repita infinitamente en algunos sistemas, lo que afecta tanto a la desfragmentación manual como a la automática. Esto provoca cargas de E/S extremas en las unidades afectadas, lo que puede acortar considerablemente su vida útil y afectar su rendimiento. Como tal, no se recomienda utilizar autodefrag en estas versiones, incluso se debe usar noautodefrag para asegurarse de que la desfragmentación en línea esté desactivada. Véase [11] y [12].

Btrfs admite la desfragmentación en línea a través de la opción de montaje autodefrag, véase btrfs(5) § MOUNT OPTIONS. Para desfragmentar manualmente su raíz, utilice:

# btrfs filesystem defragment -r /

El uso de la orden anterior sin el modificador -r dará como resultado que solo se desfragmenten los metadatos del subvolumen que contiene el directorio. Esto permite la desfragmentación de un solo archivo simplemente especificando la ruta.

Advertencia: La desfragmentación de un archivo que tiene una copia COW (ya sea una copia instantánea o una hecha con cp o bcp) además de utilizar -c con un algoritmo de compresión puede resultar en dos archivos no relacionados aumentando efectivamente el uso del disco.

RAID

Btrfs ofrece "RAID" nativo para sistemas de archivos en múltiples dispositivos. Las características notables que distinguen al RAID de btrfs de mdadm son las matrices redundantes de recuperación automática y el balance en línea. Véase la página wiki de Btrfs para obtener más información. La página de administración de sistemas de Btrfs también tiene una sección con más antecedentes técnicos.

Advertencia: El código de paridad RAID (RAID 5/6) tiene varios errores graves de pérdida de datos. Véase la página de Btrfs Wiki RAID5/6 y un informe de errores en la lista de correo linux-btrfs para obtener información más detallada. En junio de 2020, alguien publicó una lista completa de problemas actuales y una útil guía de recuperación.

Scrub

El Glosario de la Wiki de Btrfs dice que Btrfs Scrub es "[una] herramienta de verificación de sistemas de archivos en línea. Lee todos los datos y metadatos en el sistema de archivos y utiliza sumas de verificación y las copias duplicadas del almacenamiento RAID para identificar y reparar cualquier dato corrupto".

Nota: Un proceso de limpieza en ejecución evitará que el sistema se suspenda, véase este hilo para más detalles.

Iniciar manualmente

Para iniciar una limpieza (de fondo) en el sistema de archivos que contiene /:

# btrfs scrub start /

Para comprobar el estado de una limpieza en ejecución:

# btrfs scrub status /

Iniciar con un servicio o temporizador

El paquete btrfs-progs trae la unidad btrfs-scrub@.timer para limpiar mensualmente el punto de montaje especificado. Active el temporizador con una ruta de escape, por ejemplo btrfs-scrub@-.timer para / y btrfs-scrub@home.timer para /home. Puede utilizar systemd-escape -p /ruta/al/punto/de/montaje para escapar la ruta; véase systemd-escape(1) para obtener más detalles.

También puede ejecutar la limpieza iniciando btrfs-scrub@.service (con la misma ruta codificada). La ventaja de esto sobre btrfs scrub (como superusuario root) es que los resultados de la limpieza se registrarán en el registro de systemd.

En unidades NVMe grandes con refrigeración insuficiente (por ejemplo, en una computadora portátil), la limpieza puede leer la unidad lo suficientemente rápido y durante el tiempo suficiente para calentarla mucho. Si está ejecutando limpiezas con systemd, puede limitar fácilmente la tasa de limpieza con la opción IOReadBandwidthMax descrita en systemd.resource-control(5) usando un archivo insertado.

Balance

"Un balance pasa todos los datos en el sistema de archivos a través del asignador nuevamente. Su objetivo principal es rebalancear los datos en el sistema de archivos entre los dispositivos cuando se agrega o elimina un dispositivo. Un balance regenerará las copias faltantes para los niveles RAID redundantes, si un el dispositivo ha fallado". [13] Véase Página de preguntas frecuentes de upstream.

En un sistema de archivos de un solo dispositivo, un balance también puede ser útil para (temporalmente) reducir la cantidad de fragmentos de (meta)datos asignados pero no utilizados. A veces, esto es necesario para arreglar problemas de "sistema de archivos lleno".

# btrfs balance start --bg /
# btrfs balance status /

Instantáneas

"Una instantánea (snapshot) es simplemente un subvolumen que comparte sus datos (y metadatos) con algún otro subvolumen, utilizando las capacidades COW de btrfs". Véase Btrfs Wiki SysadminGuide#Snapshots para obtener más información.

Para crear una instantánea:

# btrfs subvolume snapshot fuente [destino/]nombre

Para crear una instantánea de solo lectura, añada -r. Para crear una versión de escritura de una instantánea de solo lectura, simplemente cree una instantánea de la misma.

Nota:
  • Es posible convertir una instantánea de solo lectura a escritura. Sin embargo, esto no se recomienda porque causa problemas con cualquier envío/recepción incremental futuro. Crear una nueva instantánea grabable evita estos problemas.
  • Las instantáneas no son recursivas. Cada subvolumen anidado será un directorio vacío dentro de la instantánea.

Enviar/Recibir

Se puede enviar un subvolumen a la salida estándar o a un archivo mediante la orden send. Esto suele ser más útil cuando se canaliza a una orden receive de Btrfs. Por ejemplo, para enviar una instantánea llamada /root_backup (quizás de una instantánea que hizo de / anteriormente) a /backup, haga lo siguiente:

# btrfs send /root_backup | btrfs receive /backup

La instantánea que se envía debe ser de solo lectura. La orden anterior es útil para copiar un subvolumen a un dispositivo externo (por ejemplo, un disco USB montado en /backup indicado antes).

También puede enviar solo la diferencia entre dos instantáneas. Por ejemplo, si ya ha enviado una copia de root_backup y ha creado una nueva instantánea de solo lectura en su sistema llamada root_backup_new, entonces envíe solo la diferencia incremental a /backup mediante:

# btrfs send -p /root_backup /root_backup_new | btrfs receive /backup

Ahora, un nuevo subvolumen llamado root_backup_new estará presente en /backup.

Véase la página de copia de seguridad incremental en la Wiki de Btrfs y #Copia de seguridad incremental en disco externo sobre cómo utilizar esto para copias de seguridad incrementales y para las herramientas que automatizan el proceso.

Deduplicación

Utilizando Copy-on-Write, Btrfs puede copiar archivos o subvolúmenes completos sin copiar los datos. Sin embargo, cada vez que se modifica un archivo, se crea una nueva copia adecuada. La deduplicación lleva esto un paso más allá, identificando activamente bloques de datos que comparten secuencias comunes y combinándolos en una extensión con la misma semántica de copia en escritura.

Las herramientas dedicadas a deduplicar una partición con formato Btrfs incluyen duperemove, bees, bedupAUR y btrfs-dedup. También es posible que desee simplemente deduplicar datos en un nivel basado en archivos en lugar de utilizar, por ejemplo rmlint, jdupesAUR o dduper-gitAUR. Para obtener una descripción general de las funciones disponibles de esos programas e información adicional, véase upstream Wiki entry.

Además, los desarrolladores de Btrfs están trabajando en la deduplicación en banda (también conocida como sincrónica o en línea), lo que significa que la deduplicación se realiza al escribir nuevos datos en el sistema de archivos. Actualmente sigue siendo algo experimental que se desarrolla fuera del árbol principal. Los usuarios que deseen probar la nueva función deben leer la página wiki del kernel correspondiente.

Cambio de tamaño

Advertencia: Para evitar la pérdida de datos, asegúrese de hacer una copia de seguridad de sus datos antes de comenzar cualquier tarea de cambio de tamaño.

Puede hacer crecer un sistema de archivos hasta el espacio máximo disponible en el dispositivo o especificar un tamaño exacto. Asegúrese de aumentar el tamaño del dispositivo o volumen lógico antes de intentar aumentar el tamaño del sistema de archivos.

Al especificar un tamaño exacto para el sistema de archivos en un dispositivo, ya sea aumentando o disminuyendo, asegúrese de que el nuevo tamaño cumpla las siguientes condiciones:

  • El nuevo tamaño debe ser mayor que el tamaño de los datos existentes; de lo contrario, se produce una pérdida de datos.
  • El nuevo tamaño debe ser igual o menor que el tamaño del dispositivo actual porque el tamaño del sistema de archivos no puede extenderse más allá del espacio disponible.
Nota: Si planea reducir también el tamaño del volumen lógico que contiene el sistema de archivos, asegúrese de reducir el tamaño del sistema de archivos antes de intentar reducir el tamaño del dispositivo o volumen lógico.

Para extender el tamaño del sistema de archivos al tamaño máximo disponible del dispositivo:

# btrfs filesystem resize max /

Para extender el sistema de archivos a un tamaño específico:

# btrfs filesystem resize tamaño /

Reemplace tamaño con el tamaño deseado en bytes. También puede especificar unidades en el valor, como K (kibibytes), M (mebibytes) o G (gibibytes). Como alternativa, puede especificar un aumento o disminución del tamaño actual anteponiendo el valor con un signo más (+) o menos (-), respectivamente:

# btrfs filesystem resize +tamaño /
# btrfs filesystem resize -tamaño /

Problemas conocidos

Se deben conocer algunas limitaciones antes de intentarlo.

Cifrado

Btrfs no tiene soporte de cifrado integrado, pero esto puede venir en el futuro. Los usuarios pueden cifrar la partición antes de ejecutar mkfs.btrfs. Véase dm-crypt (Español)/Encrypting an entire system (Español)#Subvolúmenes btrfs con espacio de intercambio.

Los sistemas de archivos Btrfs existentes pueden utilizar algo como EncFS o TrueCrypt, aunque quizás sin algunas de las características de Btrfs.

Problemas de comprobación de btrfs

La herramienta btrfs check tiene problemas conocidos y no debe ejecutarse sin leer más; véase la sección #Comprobar btrfs.

Consejos y trucos

Disco Btrfs sin particiones

Advertencia: La mayoría de los usuarios no desean este tipo de configuración y, en su lugar, deben instalar Btrfs en una partición normal. Además, GRUB desaconseja encarecidamente la instalación en un disco sin particiones.

Btrfs puede ocupar un dispositivo de almacenamiento de datos completo, reemplazando los esquemas de partición MBR o GPT, utilizando subvolúmenes para simular particiones. Sin embargo, no es necesario utilizar una configuración sin particiones para simplemente crear un sistema de archivos Btrfs en una partición existente que se creó con otro método. Existen algunas limitaciones para las configuraciones de un solo disco sin particiones:

Para sobrescribir la tabla de particiones existente con Btrfs, ejecute la siguiente orden:

# mkfs.btrfs /dev/sdX

Por ejemplo, utilice /dev/sda en lugar de /dev/sda1. Este último formatearía una partición existente en lugar de reemplazar todo el esquema de particiones. Debido a que la partición raíz es Btrfs, asegúrese de que btrfs esté compilado en el kernel, o coloque btrfs en mkinitcpio.conf#MODULES y regenere initramfs.

Instale el gestor de arranque como lo haría con un dispositivo de almacenamiento de datos con un Registro de arranque maestro (MBR). Véase Syslinux (Español)#Manual install o Instalar GRUB en un disco con o sin particiones. Si su kernel no arranca debido a Failed to mount /sysroot., añada GRUB_PRELOAD_MODULES="btrfs" en /etc/default/grub y genere la configuración de GRUB.

Conversión de Ext3/4 a Btrfs

Advertencia: Hay muchos informes en la lista de correo de btrfs sobre conversiones incompletas/corruptas/rotas. Asegúrese de tener copias de seguridad "en funcionamiento" de todos los datos que no pueda permitirse perder. Véase Conversión desde Ext3 en la wiki de btrfs para obtener más información.

Arranque desde un CD de instalación, luego convierta haciendo:

# btrfs-convert /dev/partición

Monte la partición y pruebe la conversión comprobando los archivos. Asegúrese de cambiar /etc/fstab para reflejar el cambio (type a btrfs y fs_passno [el último campo] a 0 ya que Btrfs no realiza una comprobación del sistema de archivos en el arranque). También tenga en cuenta que el UUID de la partición habrá cambiado, así que actualice fstab en consecuencia cuando utilice UUID. Haga chroot en el sistema y reconstruya la lista de menú de su gestor de arranque (véase Instalar desde un Linux existente). Si está convirtiendo un sistema de archivos raíz (root), mientras aún está en chroot, ejecute mkinitcpio -p linux para regenerar initramfs, o el sistema no se iniciará correctamente.

Nota: Si hay algún problema, ya sea que no se pueden montar o escribir archivos en los sistemas de archivos btrfs recién convertidos, existe la opción de revertir siempre que el subvolumen de respaldo /ext2_saved todavía esté allí. Utilice la orden btrfs-convert -r /dev/partición para retroceder, esto descartará cualquier modificación al sistema de archivos btrfs recién convertido.

Después de confirmar que no hay problemas, complete la conversión eliminando el subvolumen de copia de seguridad ext2_saved. Tenga en cuenta que no puede volver a Ext3/4 sin él.

# btrfs subvolume delete /ext2_saved

Finalmente balancee el sistema de archivos para recuperar el espacio.

Recuerde que algunas aplicaciones que se instalaron previamente deben adaptarse a Btrfs.

Nota: La conversión de Ext3/4 a Btrfs es una operación que requiere mucho tiempo. Para un sistema de archivos de 4 TB y un HDD normal, puede demorar hasta 10 horas.

Aceleración por hardware de la suma de comprobación

CRC32 es una nueva instrucción en Intel SSE4.2. Para verificar si la suma de comprobación de Btrfs está acelerada por hardware:

# dmesg | grep crc32c
Btrfs loaded, crc32c=crc32c-intel

Si ve crc32c=crc32c-generic, probablemente se deba a que su partición raíz es Btrfs y tendrá que compilar crc32c-intel en el kernel para que funcione. Poner crc32c-intel en mkinitcpio.conf no funciona.

Recuperación de la corrupción

Advertencia: La herramienta btrfs check tiene problemas conocidos, véase la sección #btrfs check.

btrfs-check no se puede utilizar en un sistema de archivos montado. Para poder utilizar btrfs-check sin arrancar desde un USB en vivo, agréguelo al ramdisk inicial:

/etc/mkinitcpio.conf
BINARIES=(btrfs)

Regenere los initramfs.

Luego, si hay un problema al arrancar, la utilidad está disponible para su reparación.

Nota: Si el proceso fsck tiene que invalidar el caché de espacio (¿y/u otros cachés?), es normal que un arranque posterior se cuelgue por un tiempo (puede dar mensajes de consola sobre el bloqueo de la transacción btrfs). El sistema debería recuperarse de esto después de un tiempo.

Véase la página Wiki de Btrfs para obtener más información.

Arrancando en instantáneas

Para arrancar en una instantánea, se aplica el mismo procedimiento que para montar un subvolumen como su partición raíz, como se indica en la sección #Montar subvolumen en raíz, porque las instantáneas se pueden montar como subvolúmenes.

  • Si utiliza GRUB, puede completar automáticamente su menú de inicio con instantáneas de btrfs al regenerar el archivo de configuración con la ayuda de grub-btrfs o grub-btrfs-gitAUR.
  • Si utiliza rEFInd, puede completar automáticamente su menú de inicio con instantáneas btrfs con la ayuda de refind-btrfsAUR, después de activar refind-btrfs.service.

Utilizar subvolúmenes Btrfs con systemd-nspawn

Véase los artículos Systemd-nspawn#Use Btrfs subvolume as container root y Systemd-nspawn#Use temporary Btrfs snapshot of container.

Reducción de las actualizaciones del tiempo de acceso de los metadatos

Debido a la naturaleza copy-on-write de Btrfs, simplemente acceder a los archivos puede desencadenar la copia y escritura de metadatos. Reducir la frecuencia de las actualizaciones del tiempo de acceso puede eliminar este uso inesperado del disco y aumentar el rendimiento. Véase fstab (Español)#Opciones de atime para conocer las opciones disponibles.

Copia de seguridad incremental en disco externo

Los siguientes paquetes utilizan btrfs send y btrfs receive para enviar copias de seguridad de forma incremental a una unidad externa. Véase su documentación para las diferencias en la implementación, las características y los requisitos.

  • btrbk — Herramienta para crear instantáneas y copias de seguridad remotas de subvolúmenes Btrfs.
https://github.com/digint/btrbk || btrbkAUR
  • buttersink — Buttersink es como rsync para instantáneas Btrfs. Necesita Python 2.
https://github.com/AmesCornish/buttersink.git || buttersink-gitAUR
  • snap-sync — Utiliza instantáneas Snapper para realizar una copia de seguridad en una unidad externa o máquina remota.
https://github.com/wesbarnett/snap-sync.git || snap-sync
  • snapsync — Una herramienta de sincronización para Snapper.
https://github.com/doudou/snapsync || ruby-snapsyncAUR

El siguiente paquete permite realizar copias de seguridad de instantáneas de Snapper en sistemas de archivos que no sean Btrfs.

  • snapborg — Herramienta similar a borgmatic que integra instantáneas de snapper con copias de seguridad borg.
https://github.com/enzingerm/snapborg || snapborgAUR

Solución de problemas

Véase Preguntas frecuentes sobre problemas de Btrfs para obtener información general sobre la resolución de problemas.

GRUB

Desplazamiento de la partición

El problema de desplazamiento (offset) puede ocurrir cuando intenta incrustar core.img en un disco particionado. Significa que está bien para incrustar core.img de GRUB en un grupo Btrfs en un disco sin partición (por ejemplo, /dev/sdX) directamente.

GRUB puede iniciar particiones Btrfs, sin embargo, el módulo puede ser más grande que otros sistemas de archivos. Y es posible que el archivo core.img creado por grub-install no quepa en los primeros 63 sectores (31,5 KiB) de la unidad entre el MBR y la primera partición. Las herramientas de partición actualizadas como fdisk y gdisk evitan este problema desplazando la primera partición en aproximadamente 1MiB o 2MiB.

Raíz inexistente

Los usuarios que experimenten lo siguiente: error no such device: root al iniciar desde una configuración de tipo RAID, modifiquen /usr/share/grub/grub-mkconfig_lib y eliminen ambas comillas de la línea echo " search --no-floppy --fs-uuid --set=root ${hints} ${fs_uuid}". Vuelva a generar la configuración para grub y el sistema debería arrancar sin errores.

Tiempo de montaje agotado

A veces, especialmente con matrices RAID1 grandes, el montaje puede expirar durante el arranque con un mensaje de registro como:

Jan 25 18:05:12 host systemd[1]: storage.mount: Mounting timed out. Terminating.
Jan 25 18:05:46 host systemd[1]: storage.mount: Mount process exited, code=killed, status=15/TERM
Jan 25 18:05:46 host systemd[1]: storage.mount: Failed with result 'timeout'.
Jan 25 18:05:46 host systemd[1]: Failed to mount /storage.
Jan 25 18:05:46 host systemd[1]: Startup finished in 32.943s (firmware) + 3.097s (loader) + 7.247s (kernel)>
Jan 25 18:05:46 host kernel: BTRFS error (device sda): open_ctree failed

Esto se puede solucionar fácilmente al proporcionar un tiempo de espera más largo a través de la opción de montaje específica de systemd x-systemd.mount-timeout en fstab. Por ejemplo:

/dev/sda      /storage    btrfs       rw,relatime,x-systemd.mount-timeout=5min  0 0

BTRFS: open_ctree failed

A partir de noviembre de 2014, parece haber un error en systemd o mkinitcpio que causa el siguiente error en los sistemas con sistema de archivos Btrfs multidispositivo que utilizan el enlace btrfs en mkinitcpio.conf:

BTRFS: open_ctree failed
mount: wrong fs type, bad option, bad superblock on /dev/sdb2, missing codepage or helper program, or other error

In some cases, useful info is found in syslog - try dmesg|tail or so.

You are now being dropped into an emergency shell.

Una solución consiste en eliminar btrfs de la matriz HOOKS en /etc/mkinitcpio.conf y, en su lugar, añadir btrfs a la matriz MODULES. Luego regenere initramfs y reinicie.

Obtendrá el mismo error si intenta montar una matriz RAID sin uno de los dispositivos. En ese caso, debe añadir la opción de montaje degraded a /etc/fstab. Si su raíz reside en la matriz, también debe añadir rootflags=degraded a sus parámetros del kernel.

A partir de agosto de 2016, una posible solución para este error es montar la matriz en una sola unidad en /etc/fstab, y permitir que btrfs descubra y añada las otras unidades automáticamente. Los identificadores basados en grupos como UUID y LABEL parecen contribuir al fallo. Por ejemplo, una matriz RAID1 de dos dispositivos que consta de disco1 y disco2 tendrá un UUID asignado, pero en lugar de utilizar el UUID, use solo /dev/mapper/disk1 en /etc/fstab. Para obtener una explicación más detallada, véase la siguiente entrada de blog.

Otra posible solución es eliminar el enlace udev en mkinitcpio.conf y reemplazarlo con el enlace systemd. En este caso, btrfs no debería estar en las matrices HOOKS o MODULES.

Véase el hilo original de los foros y FS#42884 para obtener más información.

btrfs check

Advertencia: Dado que Btrfs está bajo un fuerte desarrollo, especialmente la orden btrfs check, se recomienda crear una copia de seguridad y consultar btrfs-check(8) antes de ejecutar btrfs check con --repair.

La orden btrfs-check(8) se puede utilizar para verificar o reparar un sistema de archivos Btrfs desmontado. Sin embargo, esta herramienta de reparación aún no está madura y no puede reparar ciertos errores del sistema de archivos, incluso aquellos que no hacen que el sistema de archivos no se pueda montar.

Véase también