btrfs raid1이 모든 디스크를 사용하지 않습니까?

btrfs raid1이 모든 디스크를 사용하지 않습니까?

Ubuntu 16.04에 3개의 디스크가 있는 Btrfs raid1이 있습니다. 그런데 디스크 3개를 모두 사용하지 않고 2개만 사용하고 있는 것 같습니다. 이 문제를 어떻게 해결해야 합니까?

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

변환 필터를 실행해 보았으나 여전히 /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

처음에는 Ubuntu 서버 설치 중에 디스크가 1개만 있습니다. 그런 다음 디스크를 추가하고 raid1로 변환했습니다. 그런 다음 세 번째 디스크 /dev/sdb3을 추가하고 다시 밸런싱을 시도했습니다. 세 번째 디스크는 사용되지 않습니다.

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

/dev/sdb3을 잘 마운트할 수 있습니다.

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

답변1

편집하다:

참고:btrfs FAQ@jeff-schaller(강조 광산)의 의견에 따라 다음과 같이 말합니다.

btrfs는 RAID-0, RAID-1 및 RAID-10을 지원합니다. Linux 3.9부터 btrfs는 RAID-5 및 RAID-6도 지원하지만 해당 코드는 아직 실험적입니다.

btrfs는 먼저 모든 장치를 스토리지 풀로 결합한 다음 파일 데이터가 생성될 때 청크를 복제합니다. RAID-1은 현재 "다른 장치에 있는 모든 데이터의 복사본 2개". 이는 n 장치에 대해 정확히 n 복사본을 만든다는 점에서 MD-RAID 및 dmraid와 다릅니다. btrfs RAID-1의 경우3개의 1TB 장치에서 1.5TB의 사용 가능한 데이터를 얻습니다.. 왜냐하면각 블록은 2개의 장치에만 복사됩니다., 주어진 블록을 쓰려면 정확히 2개의 장치만 써야 합니다. 독서는 하나만 할 수 있습니다.

RAID-0도 유사하게 정의되어 스트라이프가 가능한 많은 장치에 걸쳐 분할됩니다. 3 × 1TB 장치는 3TB의 사용 가능한 공간을 제공하지만 중복성은 전혀 제공되지 않습니다.

RAID-10은 이러한 정의를 바탕으로 구축되었습니다. 모든 스트라이프는 정확히 2개의 RAID-1 세트로 분할되고 해당 RAID-1 세트는 정확히 2개의 장치에 기록됩니다(따라서 최소 4개의 장치). 6 × 1TB 장치가 있는 btrfs RAID-10 볼륨은 모든 데이터의 복사본 2개로 3TB의 사용 가능한 공간을 제공합니다.

현재로서는 이것을 테스트할 만큼 큰 드라이브가 없지만, 내 추측은 단순히 상대적으로 큰 드라이브를 가지고 있기 때문에 btrfs가 지금까지 처음 두 드라이브에 데이터를 쓰기로 선택했다는 것입니다. 드라이브에 더 많은 데이터가 기록되면 앞으로는 이러한 상황이 바뀔 것으로 예상됩니다.

더 작은 드라이브를 사용한 테스트에 관심이 있는 경우:

단일 SATA 드라이브가 있는 VM에 Ubuntu Server 16.04 LTS를 설치하고 단일 btrfs 파티션에 OS를 설치했습니다.

그런 다음 다른 SATA 드라이브를 추가하고 파티션을 나누고 실행한 다음 btrfs device add /dev/sdb1 /다음과 같이 raid1로 변환하는 동안 균형을 맞췄습니다.btrfs balance start -dconvert=raid1 -mconvert=raid1 /

/dev/sdc1 장치에 대해 반복했습니다. 결과는 동일합니다. 세 개의 드라이브에 걸쳐 있는 btrfs가 있습니다. 또한 2GiB 파일을 잘못 배치했는데 실제로 세 디스크 모두에서 액세스할 수 있었습니다. 내 btrfs fi sh쇼는 다음과 같습니다.

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

mkfs.btrfs를 어떻게 호출했나요? btrfs-progs 버전은 무엇입니까?

# btrfs --version
btrfs-progs v4.4

나는 당신의 상황을 재현할 수 없습니다. /dev/sdb3을 마운트하려고 하면 어떻게 됩니까?

파티셔닝을 수행할 가상 머신이나 예비 디스크가 있는 경우 3개의 파티션을 생성하고 다음을 시도하십시오.

Ubuntu 16.04 VM을 생성하고 /dev/vda를 각각 2GiB의 3개 파티션으로 분할했습니다.

# 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

/dev/vda1을 마운트하고 여기에 파일을 쓴 다음 대신 /dev/vda2 또는 /dev/vda3을 마운트하고 파일이 있는지 확인하십시오(확실히 있어야 합니다).

추신: 저는 처음에 btrfs-progs 버전 4.10.2를 사용하여 Arch에서 동일한 결과를 얻었지만 아마도 Ubuntu 16.04에는 다르게 동작할 수 있는 이전 버전이 함께 제공될 것이라고 생각했습니다. v4.4와 함께 제공되는 것으로 밝혀졌지만 파일 시스템 생성 및 미러링 등과 관련하여 동일하게 작동하는 것 같습니다.

답변2

이제 볼륨이 모든 디스크를 사용하고 있습니다. 나는 Rabban의 추측이 정확해야 한다고 생각합니다. 처음 두 디스크가 세 번째 디스크보다 크기 때문에 "btrfs는 지금까지 처음 두 드라이브에 데이터를 쓰기로 선택했습니다".

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

관련 정보