¿btrfs raid1 no usa todos los discos?

¿btrfs raid1 no usa todos los discos?

Tengo un Btrfs raid1 con 3 discos en Ubuntu 16.04. Sin embargo, parece que sólo se utilizan 2 discos en lugar de los 3. ¿Cómo debería solucionar este problema?

root@one:~# btrfs fi sh
Label: none  uuid: 3880b9fa-0824-4ffe-8f61-893a104f3567
            Total devices 3 FS bytes used 54.77GiB
            devid    1 size 2.73TiB used 56.03GiB path /dev/sda2
            devid    2 size 2.73TiB used 56.03GiB path /dev/sdc2
            devid    3 size 2.59TiB used 0.00B path /dev/sdb3

Intenté ejecutar un filtro de conversión pero aún no se utiliza /dev/sdb3.

root@one:~# btrfs balance start -dconvert=raid1 -mconvert=raid1 /top/raid/
Done, had to relocate 112 out of 112 chunks

root@one:~# btrfs fi df /top/raid/
Data, RAID1: total=55.00GiB, used=54.40GiB
System, RAID1: total=32.00MiB, used=16.00KiB
Metadata, RAID1: total=1.00GiB, used=373.06MiB
GlobalReserve, single: total=128.00MiB, used=0.00B

Al principio, solo hay 1 disco durante la instalación del servidor Ubuntu. Luego agregué un disco y lo convertí a raid1. Luego agregué un tercer disco /dev/sdb3 e intenté equilibrarlo nuevamente. El tercer disco no se está utilizando.

root@one:~# btrfs --version
btrfs-progs v4.4

Puedo montar /dev/sdb3 muy bien.

root@one:~# mount /dev/sdb3 /mnt
root@one:~# ll /mnt
total 16
drwxr-xr-x 1 root    root     74 Apr 13 09:37 ./
drwxr-xr-x 1 root    root    200 Apr 12 21:19 ../
drwxr-xr-x 1 root    root    200 Apr 12 21:19 @/
drwxr-xr-x 1 root    root    152 Apr 12 15:31 @home/
drwxrwx--t 1 root    root     36 Apr 13 09:38 @samba/

root@one:~# btr fi sh
Label: none  uuid: 3880b9fa-0824-4ffe-8f61-893a104f3567
        Total devices 3 FS bytes used 54.82GiB
        devid    1 size 2.73TiB used 56.03GiB path /dev/sda2
        devid    2 size 2.73TiB used 56.03GiB path /dev/sdc2
        devid    3 size 2.59TiB used 0.00B path /dev/sdb3

Respuesta1

EDITAR:

Nota laPreguntas frecuentes sobre btrfsafirma lo siguiente, según lo comentado por @ jeff-schaller (el énfasis es mío):

btrfs admite RAID-0, RAID-1 y RAID-10. A partir de Linux 3.9, btrfs también admite RAID-5 y RAID-6, aunque ese código aún es experimental.

btrfs primero combina todos los dispositivos en un grupo de almacenamiento y luego duplica los fragmentos a medida que se crean los datos del archivo. RAID-1 se define actualmente como "2 copias de todos los datos en diferentes dispositivos". Esto difiere de MD-RAID y dmraid, en que hacen exactamente n copias para n dispositivos. En un btrfs RAID-1 entres dispositivos de 1 TB obtenemos 1,5 TB de datos utilizables. Porquecada bloque solo se copia en 2 dispositivos, escribir un bloque determinado solo requiere escribir exactamente en 2 dispositivos; La lectura se puede realizar a partir de uno solo.

RAID-0 se define de manera similar, con la franja dividida en tantos dispositivos como sea posible. Los dispositivos de 3 × 1 TB producen 3 TB de espacio utilizable, pero no ofrecen ninguna redundancia.

RAID-10 se basa en estas definiciones. Cada franja se divide en exactamente 2 conjuntos RAID-1 y esos conjuntos RAID-1 se escriben en exactamente 2 dispositivos (por lo tanto, un mínimo de 4 dispositivos). Un volumen btrfs RAID-10 con dispositivos de 6 × 1 TB producirá 3 TB de espacio utilizable con 2 copias de todos los datos.

No tengo unidades lo suficientemente grandes a mano para probar esto en este momento, pero mi especulación es simplemente que, dado que tiene unidades relativamente grandes, btrfs simplemente eligió escribir los datos en las dos primeras unidades hasta el momento. Espero que eso cambie en el futuro a medida que se escriban más datos en las unidades.

En caso de que esté interesado en mis pruebas con unidades más pequeñas:

Instalé Ubuntu Server 16.04 LTS en una máquina virtual con una sola unidad SATA, instalé el sistema operativo en una sola partición btrfs.

Luego agregué otra unidad SATA, la particioné, ejecuté btrfs device add /dev/sdb1 /y luego la equilibré mientras la convertía a raid1 conbtrfs balance start -dconvert=raid1 -mconvert=raid1 /

Repetí para el dispositivo /dev/sdc1. El resultado para mí es el mismo: tengo un btrfs que abarca tres unidades. También ubiqué un archivo de 2GiB y, de hecho, era accesible desde los tres discos. Mi btrfs fi shmuestra lo siguiente:

Label: none  uuid: cdfe192c-36da-4a3c-bc1a-74137abbb190
    Total devices 3 FS bytes used 3.07GiB
    devid    1 size 10.00GiB used 5.25GiB path /dev/sda1
    devid    2 size 10.00GiB used 5.03GiB path /dev/sdb1
    devid    3 size 8.00GiB used 2.28GiB path /dev/sdc1

¿Cómo llamaste a mkfs.btrfs? ¿Cuál es tu versión de btrfs-progs?

# btrfs --version
btrfs-progs v4.4

No puedo reproducir tu situación. ¿Qué sucede si intentas montar /dev/sdb3?

Si tiene una máquina virtual o un disco de repuesto para jugar con la partición, cree 3 particiones e intente lo siguiente.

Creé una máquina virtual Ubuntu 16.04 y particioné /dev/vda en tres particiones de 2GiB cada una.

# mkfs.btrfs -d raid1 -m raid1 /dev/vda{1..3}

Label:              (null)
UUID:               0d6278f7-8830-4a73-a72f-0069cc560aaf
Node size:          16384
Sector size:        4096
Filesystem size:    6.00GiB
Block group profiles:
  Data:             RAID1           315.12MiB
  Metadata:         RAID1           315.12MiB
  System:           RAID1            12.00MiB
SSD detected:       no
Incompat features:  extref, skinny-metadata
Number of devices:  3
Devices:
   ID        SIZE  PATH
    1     2.00GiB  /dev/vda1
    2     2.00GiB  /dev/vda2
    3     2.00GiB  /dev/vda3

# btrfs fi sh

Label: none  uuid: 0d6278f7-8830-4a73-a72f-0069cc560aaf
    Total devices 3 FS bytes used 112.00KiB
    devid    1 size 2.00GiB used 614.25MiB path /dev/vda1
    devid    2 size 2.00GiB used 315.12MiB path /dev/vda2
    devid    3 size 2.00GiB used 315.12MiB path /dev/vda3

Intente montar /dev/vda1, escribirle un archivo, luego montar /dev/vda2 o /dev/vda3 y verificar si el archivo está allí (definitivamente debería estarlo).

PD: Probé esto por primera vez en Arch con btrfs-progs versión 4.10.2 con los mismos resultados, pero pensé que probablemente Ubuntu 16.04 viene con una versión anterior que podría comportarse de manera diferente. Resulta que viene con la versión 4.4, pero parece comportarse igual con respecto a la creación y duplicación del sistema de archivos, etc.

Respuesta2

El volumen ahora está usando todos los discos. Supongo que la especulación de Rabban debería ser correcta. Dado que los dos primeros discos son más grandes que el tercero, "btrfs simplemente eligió escribir los datos en las dos primeras unidades hasta el momento".

root@one:~# btrfs fi sh
Label: none  uuid: 3880b9fa-0824-4ffe-8f61-893a104f3567
        Total devices 3 FS bytes used 151.00GiB
        devid    1 size 2.73TiB used 148.03GiB path /dev/sda2
        devid    2 size 2.73TiB used 148.03GiB path /dev/sdc2
        devid    3 size 2.59TiB used 8.00GiB path /dev/sdb3

root@one:~# btrfs dev usage /
/dev/sda2, ID: 1
   Device size:             2.73TiB
   Data,RAID1:            147.00GiB
   Metadata,RAID1:          1.00GiB
   System,RAID1:           32.00MiB
   Unallocated:             2.58TiB

/dev/sdb3, ID: 3
   Device size:             2.59TiB
   Data,RAID1:              8.00GiB
   Unallocated:             2.58TiB

/dev/sdc2, ID: 2
   Device size:             2.73TiB
   Data,RAID1:            147.00GiB
   Metadata,RAID1:          1.00GiB
   System,RAID1:           32.00MiB
   Unallocated:             2.58TiB

información relacionada