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