Sistema de archivos BTRFS multidispositivo con disco de diferente tamaño

14

Tengo un sistema de archivos BTRFS existente compuesto por un disco de 500GB y acabo de comprar un disco de 2TB para aumentar la capacidad de almacenamiento de mi servidor doméstico y quiero agregar el nuevo disco al sistema de archivos existente. Por lo que leí, parece que ninguna configuración de BTRFS puede manejar discos de diferentes tamaños sin desperdiciar la diferencia de tamaño entre el disco más grande y el más pequeño, pero soy nuevo en BTRFS y es posible que me haya perdido algo, por lo que hay una configuración que me permite combinar dos discos en un sistema de archivos sin perder espacio?

fokenrute
fuente
¿Cómo maneja los discos subyacentes? Con LVM?
Andy Smith
@Andy, btrfs maneja múltiples discos en estilo LVM / RAID, revisa esto .
OneOfOne
Whoops ... mi mal. Saludos por eso ;-)
Andy Smith

Respuestas:

4

Btrfs puede usar diferentes niveles de incursión para datos y metadatos:

el valor predeterminado (incluso para un disco) es raid1 para los metadatos (directorios, etc.) y raid0 para los datos.

Si no cambió esto, es probable que no tenga problemas para agregar el segundo disco y volver a equilibrar. porque solo los metadatos se copiarán en ambos discos (puede ver el tamaño de sus metadatos con btrfs filesystem df /). Solo tenga en cuenta que si alguno de sus discos falla, perderá datos.

debido a que el disco de 2tb es muuuuucho más grande que los 500g, quizás le daría mejores probabilidades si agrega el nuevo y luego elimina el anterior (las probabilidades de que falle una unidad específica son mucho menores que las probabilidades de cualquiera de las unidades defecto).

si planea tener una matriz de incursiones más tarde (con unidades de tamaño más similar), puede volver a crear el sistema de archivos en la nueva unidad con raid1 para datos y metadatos y luego copiar todo. luego, cuando tenga más dinero, compre la segunda unidad de 2tb.

ps: el uso de raid1 en una unidad individual significa que los datos se almacenarán en dos ubicaciones en esa unidad (para proteger contra la corrupción) y reducirá el espacio de almacenamiento (es una muy buena idea para los metadatos).

pss: en serio, no sientas la tentación de no usar raid1 para metadatos. psss: hay una muy buena posibilidad de que btrfs obtenga la capacidad de cambiar los niveles de ataque dinámicamente.

Arthur Ulfeldt
fuente
personalmente estoy planeando recrear mi btrfs fs / arrays / what-do-i-call-this tan pronto como btrfs tenga soporte para raid5 y raid6.
Arthur Ulfeldt
12

Depende de qué perfil utilice para los bloques de datos del sistema de archivos Btrfs de dispositivos múltiples.

  • Cuando utiliza RAID0 (el valor predeterminado para los bloques de datos), cada disco solo puede llenarse hasta la capacidad del disco más pequeño de la matriz.

  • Cuando utiliza el perfil "único" para los bloques de datos, cada disco se llenará hasta su capacidad máxima. p.ejmkfs.btrfs -d single /dev/sda /dev/sdb

Tengo un servidor de archivos con un disco de 2TB y 3TB. Arranca Ubuntu 12.10 desde una unidad flash USB. Primero creé el sistema de archivos Btrfs sin la -d singleopción:

mkfs.btrfs /dev/sda /dev/sdb

El resultado fue que solo podía almacenar alrededor de 4 TB (3.45 datos de archivo binario TB).

# btrfs fi show
Label: none  uuid: 3a63a407-dd3c-46b6-8902-ede4b2b79465
 Total devices 2 FS bytes used 3.22TB
 devid    2 size 2.73TB used 1.82TB path /dev/sdb
 devid    1 size 1.82TB used 1.82TB path /dev/sda
# btrfs fi df /mnt/btrfs1/
Data, RAID0: total=3.45TB, used=3.22TB
Data: total=8.00MB, used=0.00
System, RAID1: total=8.00MB, used=264.00KB
System: total=4.00MB, used=0.00
Metadata, RAID1: total=94.00GB, used=4.29GB
Metadata: total=8.00MB, used=0.00
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        4.6T  3.3T  241G  94% /mnt/btrfs1

Tenga en cuenta el used 1.82TBpara la unidad de 3 TB.

Luego utilicé el comando "balance" para convertir los bloques de datos de RAID0 al perfil "único":

btrfs balance start -dconvert=single /mnt/btrfs1

Se tardó mucho tiempo (aproximadamente 30 horas) en equilibrar los datos de 4 TB. Pero después de que se completó, pude usar los 5 TB completos (4.36 datos binarios del archivo TB).

# btrfs fi show
Label: none  uuid: 3a63a407-dd3c-46b6-8902-ede4b2b79465
 Total devices 2 FS bytes used 4.34TB
 devid    2 size 2.73TB used 2.73TB path /dev/sdb
 devid    1 size 1.82TB used 1.82TB path /dev/sda
# btrfs fi df /mnt/btrfs1/
Data: total=4.36TB, used=4.34TB
System, RAID1: total=40.00MB, used=500.00KB
System: total=4.00MB, used=0.00
Metadata, RAID1: total=94.00GB, used=4.01GB
Metadata: total=8.00MB, used=0.00
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        4.6T  4.4T   27G 100% /mnt/btrfs1
Christian d'Heureuse
fuente
2

He usado múltiples dispositivos con btrfs en Ubuntu, y ha funcionado bien. Tenga en cuenta que btrfs no implementa niveles RAID estándar. Implementa franjas y reflejos opcionales, pero no RAID verdadero.

Michael Trausch
fuente
1

Es posible combinar unidades con diferentes tamaños en btrfs.
Pero actualmente btrfs no maneja muy bien ENOSPC (no queda espacio en el dispositivo).

Por ejemplo, instalé 3 unidades en una matriz RAID0 (rayada). 1x500GB, 1x250GB, 1x160GB.
Asumiría que tendrá un espacio en disco entre 800-900GB.

Esto es lo que df -hmuestra:
/ dev / sdf 848G 615G 234G 73% / media / btrfs

Pero no puedo almacenar más datos en la matriz. (No hay espacio)

btrfs filesystem df /media/btrfsme muestra esto:
Datos: total = 612.51GB, usado = 612.51GB
Metadatos: total = 1.62GB, usado = 990.73MB
Sistema: total = 12.00MB, usado = 48.00KB

Incluso el reequilibrio no ayudó.

En una lista de correo vi este callculation:
tamaño de la unidad más pequeña * número de unidades en la matriz
(aunque tengo más espacio: 612 GB en lugar de 160 GB * 3 = 480 GB)

Por lo tanto, en el estado actual de desarrollo, es probable que no pueda usar todo el espacio que tiene, aunque btrfs admite diferentes tamaños en una matriz.

Estoy usando Ubuntu 10.10 con el kernel 2.6.35-22-generic.

torusJKL
fuente
No creo que alguna vez admita lo que desea, al menos hasta que admita diferentes niveles de incursión por archivo / por directorio. Para raid0 (stripe), se requiere btrfs para mantener partes del mismo tamaño de cada archivo en los 3 dispositivos. ¿Cómo puede hacer eso si le permite usar los 500 GB de un dispositivo? Si en lugar de "raid0" usó "single" (no estoy seguro de que esta opción estuviera disponible cuando publicó), btrfs no intenta duplicar archivos en ningún lugar y le permitirá usar todo el espacio en todos los dispositivos. Pero para los niveles de banda, no tiene sentido: estás tratando de violar la definición del nivel de banda.
bobpaul
No importa, estoy equivocado. btrfs raid0 / 1 solo rayas / espejos a 1 otro dispositivo, no todos los dispositivos, por lo que 1TB + 500GB + 500GB funciona exactamente tan bien como 1TB + 1TB para raid0 y raid1 (al menos a partir de Linux 3.0). Antes de Linux 3.0, tenía el problema que describiste.
bobpaul
1

actualización: la respuesta a continuación se escribió antes de que se lanzara Linux 3.0. Linux 3.0 incluye el parche cuasi-round-robin.

Cuando realiza la duplicación o división de datos, el segundo reflejo o fragmento de banda debe asignarse en otro dispositivo con espacio libre. BTRFS asigna trozos a los dispositivos de forma circular, lo que puede causar la pérdida de espacio si tiene dispositivos de diferentes tamaños.

Hay un parche cuasi-round-robin en la tubería para mejorar esto. Por supuesto, aún es imposible emparejar todos los fragmentos en diferentes dispositivos si tiene un disco de 500 GB y un disco de 2 TB. El parche está destinado más a situaciones como 1 x 1TB + 2 x 500GB donde cada disco pequeño debería preferir duplicar / rayar con el disco grande en lugar del otro disco pequeño.

En su situación, simplemente usaría el modo "único" para sus datos ( mkfs.btrfs -d single). Los fragmentos no están emparejados en ese modo, por lo que creo que no habría problemas con dispositivos de diferentes tamaños. Sin embargo, no lo he probado.

Wim Coenen
fuente
0

Este problema solo se aplica a las configuraciones de btrfs-raid1, desde la página Gotchas :

  • La asignación se realiza por turnos. Si tiene una estrategia raid1 en un volumen compuesto por unidades no coincidentes (volúmenes de diferentes tamaños), su volumen más pequeño puede llenarse y dejar mucho espacio libre en su unidad más grande. Puede verificar que se trata de un problema si existe alguna discrepancia entre 'df' y 'btrfs filesystem df [punto de montaje]' Y si el último comando también muestra que "total" y "usado" son los mismos en la línea "Datos" . Un reequilibrio puede mitigar este problema. (2.6.33)
    • Si su volumen se llena de esta manera, un reequilibrio puede causar rápidamente un error ENOSPC ("Error NO queda espacio en el dispositivo"). Es posible que deba eliminar un archivo relativamente grande para resolver este impasse, luego se realizará un reequilibrio. (2.6.33)
    • El reequilibrio puede causar un uso muy rápido de la CPU por períodos prolongados de tiempo. (2.6.34 y 2.6.35)
Uno de uno
fuente
Lamento hacerte repetir, pero estoy a punto de agregar el nuevo dispositivo y tengo que estar seguro. Todas las fuentes verificadas acerca de RAID0 indican que los discos deben ser del mismo tamaño (por ejemplo, freebsd geom doc: "Cada disco en una banda RAID0 debe ser del mismo tamaño, ya que las solicitudes de E / S están intercaladas para leer o escribir a varios discos en paralelo "). ¿Puedes confirmar que funciona con Btrfs por favor?
fokenrute
Lo siento, no tengo btrfs de dispositivos múltiples que no puedo confirmar, sin embargo, nada de lo que puedo encontrar dice nada sobre tener el mismo tamaño de dispositivo para raid0 + btrfs, sin embargo, si tiene suficiente tiempo, divida el nuevo disco para 1tb / 1tb, haga una copia de seguridad del disco antiguo en una de las particiones, agregue el 1tb vacío, si funciona, agregue la segunda parición.
OneOfOne