Btrfs (Español)
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.
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
Sistema de archivos en múltiples dispositivos
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.
- 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
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.
- Dentro de un único sistema de archivos, no es posible montar algunos subvolúmenes con
nodatacow
y otros condatacow
. 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.
- 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 atributoNo_COW
.
$ 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_oldAsegú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.
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.
compress
; para hacerlo aplique chattr +c
al archivo. Cuando sea aplicada a los directorios, causará que los nuevos archivos sean automáticamente comprimidos.- 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:
- Btrfs Wiki SysadminGuide#Subvolumes
- Btrfs Wiki Getting started#Basic Filesystem Commands
- Btrfs Wiki Trees
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.
/
(lo cual ocurre por defecto). En vez de eso, considere crear un subvolumen para sus datos reales y montarlos como /
.- 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.
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
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 (Español)#Creación de archivos de intercambio. 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.
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 /
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
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.
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.
Scrub
El Glosario de la Wiki de Btrfs[enlace roto 2023-04-22] 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".
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][enlace roto 2023-04-22] 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.
- 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[enlace roto: package not found] 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
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.
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 #btrfs check.
Consejos y trucos
Disco Btrfs 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:
- No se pueden colocar otros sistemas de archivos en otra partición del mismo disco.
- Debido al punto anterior, no es posible tener un ESP en este disco. Se necesita otro dispositivo para el arranque UEFI.
- Si utiliza una versión del kernel de Linux anterior a la 5.0, no puede usar un espacio de intercambio ya que Btrfs no admitía un archivo como espacio de intercambioswap files anterior a 5.0 y no hay lugar para crear una partición como espacio de intercambio.
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#Manually 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
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.
/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.
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
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)
Luego, si hay un problema al arrancar, la utilidad está disponible para su reparación.
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.
- snap-sync — Utiliza instantáneas Snapper para realizar una copia de seguridad en una unidad externa o máquina remota.
- snapsync — Una herramienta de sincronización para Snapper.
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.
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
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
- Sitio oficial
-
Relacionado con el rendimiento
- ¿Btrfs en discos sin formato?
- Variando el tamaño de hoja y tamaño de nodo en Btrfs
- Soporte de Btrfs para un funcionamiento eficiente en SSD (alineación de bloques de datos)
- ¿Btrfs está optimizado para SSD?
- Evaluación comparativa de opciones de montura de Phoronix
- Lzo vs. zLib
-
Misceláneos
- Funtoo:BTRFS Fun
- Avi Miller presenting Btrfs at SCALE 10x, Enero 2012.
- Summary of Chris Mason's talk from LFCS 2012
- Btrfs: stop providing a bmap operation to avoid swapfile corruptions 2009-01-21
- Doing Fast Incremental Backups With Btrfs Send and Receive