btrfs raid1 não está usando todos os discos?

btrfs raid1 não está usando todos os discos?

Eu tenho um Btrfs raid1 com 3 discos em um Ubuntu 16.04. No entanto, parece que apenas 2 discos estão sendo usados ​​em vez de todos os 3. Como devo corrigir isso?

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

Tentei executar um filtro de conversão, mas ainda assim o /dev/sdb3 não está sendo usado.

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

A princípio, há apenas 1 disco durante a instalação do servidor Ubuntu. Então adicionei um disco e converti para raid1. Então adicionei um terceiro disco /dev/sdb3 e tentei equilibrar novamente. O terceiro disco não está sendo usado.

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

Posso montar /dev/sdb3 perfeitamente.

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

Responder1

EDITAR:

Note oPerguntas frequentes sobre btrfsafirma o seguinte, conforme comentado por @ jeff-schaller (ênfase minha):

btrfs suporta RAID-0, RAID-1 e RAID-10. A partir do Linux 3.9, o btrfs também suporta RAID-5 e RAID-6, embora esse código ainda seja experimental.

O btrfs combina primeiro todos os dispositivos em um pool de armazenamento e depois duplica os pedaços à medida que os dados do arquivo são criados. RAID-1 é definido atualmente como "2 cópias de todos os dados em dispositivos diferentes". Isso difere de MD-RAID e dmraid, pois eles fazem exatamente n cópias para n dispositivos. Em um btrfs RAID-1 emtrês dispositivos de 1 TB, obtemos 1,5 TB de dados utilizáveis. Porquecada bloco é copiado apenas para 2 dispositivos, escrever um determinado bloco requer apenas a gravação de exatamente 2 dispositivos; a leitura pode ser feita a partir de apenas um.

O RAID-0 é definido de forma semelhante, com a faixa dividida em tantos dispositivos quanto possível. Dispositivos 3 × 1 TB rendem 3 TB de espaço utilizável, mas não oferecem nenhuma redundância.

O RAID-10 é construído com base nessas definições. Cada faixa é dividida em exatamente 2 conjuntos RAID-1 e esses conjuntos RAID-1 são gravados em exatamente 2 dispositivos (portanto, no mínimo 4 dispositivos). Um volume RAID-10 btrfs com dispositivos 6 × 1 TB produzirá 3 TB de espaço utilizável com 2 cópias de todos os dados.

Não tenho unidades grandes o suficiente para testar isso no momento, mas minha especulação é simplesmente que, como você tem unidades relativamente grandes, o btrfs simplesmente optou por gravar os dados nas duas primeiras unidades até o momento. Eu esperaria que isso mudasse no futuro, à medida que mais dados fossem gravados nas unidades.

Caso você esteja interessado em meus testes com drives menores:

Instalei o Ubuntu Server 16.04 LTS em uma VM com uma única unidade SATA, instalei o sistema operacional em uma única partição btrfs.

Então adicionei outra unidade SATA, particionei-a, executei btrfs device add /dev/sdb1 /e balanceei-a enquanto convertia para raid1 combtrfs balance start -dconvert=raid1 -mconvert=raid1 /

Repeti para o dispositivo /dev/sdc1. O resultado para mim é o mesmo - tenho um btrfs abrangendo três unidades. Também localizei um arquivo de 2GiB e ele estava realmente acessível a partir de todos os três discos. Meu btrfs fi shmostra o seguinte:

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

Como você ligou para mkfs.btrfs? Qual é a sua versão do btrfs-progs?

# btrfs --version
btrfs-progs v4.4

Não consigo reproduzir sua situação. O que acontece se você tentar montar /dev/sdb3?

Se você tiver uma máquina virtual ou um disco sobressalente para brincar com o particionamento, crie 3 partições e tente o seguinte.

Criei uma VM Ubuntu 16.04 e particionei/dev/vda em três partições de 2GiB cada.

# 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

Tente montar /dev/vda1, gravar um arquivo nele e, em seguida, montar /dev/vda2 ou /dev/vda3 e verificar se o arquivo está lá (definitivamente deveria estar).

PS: Eu tentei isso pela primeira vez no Arch com btrfs-progs versão 4.10.2 com os mesmos resultados, mas pensei que provavelmente o Ubuntu 16.04 vem com uma versão mais antiga que pode se comportar de maneira diferente. Acontece que ele vem com a v4.4, mas parece se comportar da mesma forma em relação à criação e espelhamento do sistema de arquivos, etc.

Responder2

O volume agora está usando todos os discos. Acho que a especulação de Rabban deveria estar correta. Como os dois primeiros discos são maiores que o terceiro, "o btrfs simplesmente optou por gravar os dados nas duas primeiras unidades até agora".

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

informação relacionada