Btrfs (Español)

Esta traducción de
Btrfs
fue revisada el
2022-10-28
. Si existen
cambios
puede
actualizarla
o avisar al
equipo de traducción
.
Artículos relacionados
Sistemas de archivos
Cifrado de un sistema completo
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 -c
alg
, 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/sd
xY
/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 montaje
compress
; 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:
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.
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 (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
.
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
btdu
AUR
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
[
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".
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]
[
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.
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
,
bedup
AUR
[
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-git
AUR
,
jdupes
AUR
o
dduper-git
AUR
. 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
#btrfs check
.
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:
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/sd
X
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
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-git
AUR
.
Si utiliza
rEFInd
, puede completar automáticamente su menú de inicio con instantáneas btrfs con la ayuda de
refind-btrfs
AUR
, 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
||
btrbk
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
AUR
snapsync
— Una herramienta de sincronización para
Snapper
.
https://github.com/doudou/snapsync
||
ruby-snapsync
AUR
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
||
snapborg
AUR
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/sd
X
) 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
Sitio oficial
Wiki de Btrfs
Documentación de Btrfs
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
Linux 5.8
Linux 5.0
Linux 4.9
Linux 3.14
Linux 3.11
Linux 3.9
Linux 3.7
Linux 3.2
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