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에서는1TB 장치 3개로 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 드라이브가 있는 가상 머신에 Ubuntu Server 16.04 LTS를 설치하고 단일 btrfs 파티션에 운영 체제를 설치했습니다.

그런 다음 다른 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

이제 볼륨이 모든 디스크를 사용하고 있습니다. 저는 라반의 추측이 맞다고 생각합니다. 처음 두 디스크가 세 번째 디스크보다 크기 때문에 "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

관련 정보