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