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

1

Eu tenho um BTRFS raid1 com 3 discos no 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

Eu tentei executar um filtro de conversão, mas mesmo 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

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

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

Eu posso montar / dev / sdb3 muito bem.

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
    
por tkittich 13.04.2017 / 14:21

2 respostas

1

EDITAR :

OBSERVAÇÃO: A FAQ do btrfs afirma o seguinte, conforme comentado por @ jeff-schaller ( ênfase minha):

btrfs supports RAID-0, RAID-1, and RAID-10. As of Linux 3.9, btrfs also supports RAID-5 and RAID-6 although that code is still experimental.

btrfs combines all the devices into a storage pool first, and then duplicates the chunks as file data is created. RAID-1 is defined currently as "2 copies of all the data on different devices". This differs from MD-RAID and dmraid, in that those make exactly n copies for n devices. In a btrfs RAID-1 on three 1 TB devices we get 1.5 TB of usable data. Because each block is only copied to 2 devices, writing a given block only requires exactly 2 devices to be written to; reading can be made from only one.

RAID-0 is similarly defined, with the stripe split across as many devices as possible. 3 × 1 TB devices yield 3 TB usable space, but offers no redundancy at all.

RAID-10 is built on top of these definitions. Every stripe is split across to exactly 2 RAID-1 sets and those RAID-1 sets are written to exactly 2 devices (hence 4 devices minimum). A btrfs RAID-10 volume with 6 × 1 TB devices will yield 3 TB usable space with 2 copies of all data.

Eu 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. Espero que isso mude no futuro, à medida que mais dados forem gravados nas unidades.

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

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

Em seguida, adicionei outra unidade SATA, particionei-a, executei btrfs device add /dev/sdb1 / e balancei-a ao converter para raid1 com btrfs balance start -dconvert=raid1 -mconvert=raid1 /

Eu repeti para o dispositivo / dev / sdc1. O resultado para mim é o mesmo - tenho um btrfs abrangendo três unidades. Eu também coloquei um arquivo de 2GiB, e era de fato acessível de todos os três discos. Meu btrfs fi sh mostra 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ê chama o 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 o / dev / sdb3?

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

Eu 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, escrevendo um arquivo para ele, e então monte / dev / vda2 ou / dev / vda3 e verifique se o arquivo está lá (definitivamente deveria ser).

PS: Eu tentei pela primeira vez isso no Arch com o 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 vem com v4.4, mas parece se comportar da mesma forma no que diz respeito à criação de sistema de arquivos e espelhamento, etc.

    
por 13.04.2017 / 15:31
0

O volume agora está usando todos os discos. Eu 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é o 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
    
por 15.04.2017 / 11:10