크기가 다른 디스크가있는 다중 장치 BTRFS 파일 시스템


14

하나의 500GB 디스크로 구성된 기존 BTRFS 파일 시스템이 있고 홈 서버의 저장 용량을 늘리기 위해 2TB 디스크를 구입했으며 기존 파일 시스템에 새 디스크를 추가하려고합니다. 내가 읽은 바에 따르면 더 큰 디스크와 작은 디스크 사이의 크기 차이를 낭비하지 않고 다른 크기의 디스크를 처리 할 수있는 BTRFS 설치 프로그램이없는 것 같습니다. 공간을 낭비하지 않고 파일 시스템에서 두 개의 디스크를 결합 할 수 있습니까?


기본 디스크를 어떻게 처리하고 있습니까? LVM과 함께?
Andy Smith

@Andy, 핸들에게 LVM / RAID 스타일에 여러 개의 디스크를 BTRFS 확인 .
OneOfOne

으악 ... 내 나쁜. 그것을 위해 건배 ;-)
Andy Smith

답변:


4

Btrfs는 데이터 및 메타 데이터에 서로 다른 레이드 레벨을 사용할 수 있습니다.

메타 데이터 (디렉토리 등)의 경우 기본값 (한 디스크의 경우에도)은 raid1이고 데이터의 경우 raid0입니다.

이것을 변경하지 않으면 두 번째 디스크를 추가하고 재조정을 실행하는 데 아무런 문제가 없을 것입니다. 메타 데이터 만 두 디스크에 모두 복사되므로 메타 데이터 크기는로 볼 수 있습니다 btrfs filesystem df /. 디스크 중 하나라도 실패하면 데이터가 손실된다는 점에 유의하십시오.

2TB 디스크가 500g보다 훨씬 큰 sooooooooo이기 때문에 새 디스크를 추가하고 이전 디스크를 제거하면 더 나은 확률을 제공 할 것입니다 (하나의 특정 드라이브의 실패 확률은 두 드라이브 중 하나의 확률보다 훨씬 적습니다) 실패).

나중에 비슷한 크기의 드라이브를 사용하여 RAID 어레이를 확보하려는 경우 데이터와 메타 데이터 모두에 대해 raid1을 사용하여 새 드라이브에서 파일 시스템을 다시 만든 다음 모든 것을 복사 할 수 있습니다. 나중에 더 많은 돈이 있으면 두 번째 2TB 드라이브를 구입하십시오.

추신 : 단일 드라이브에서 raid1을 사용하면 데이터가 해당 드라이브의 두 위치에 저장되어 손상을 방지하고 저장 공간이 줄어 듭니다 (메타 데이터에 대한 정말 좋은 아이디어).

추신 : 진지하게, 메타 데이터에 raid1을 사용하지 않으려 고 유혹하십시오. psss : btrfs가 공격 레벨을 동적으로 변경할 수있는 가능성이 매우 높습니다.


개인적으로 btrfs가 raid5 및 raid6를 지원하는 즉시 btrfs fs / arrays / what-do-i-call-this를 다시 만들 계획입니다.
Arthur Ulfeldt

12

다중 장치 Btrfs 파일 시스템의 데이터 블록에 사용하는 프로파일에 따라 다릅니다.

  • RAID0 (데이터 블록의 기본값)을 사용하면 각 디스크는 어레이에서 가장 작은 디스크 용량까지만 채워질 수 있습니다.

  • 데이터 블록에 "단일"프로파일을 사용하면 각 디스크가 전체 용량으로 채워집니다. 예 :mkfs.btrfs -d single /dev/sda /dev/sdb

2TB 및 3TB 디스크가있는 파일 서버가 있습니다. USB 플래시 드라이브에서 Ubuntu 12.10을 부팅합니다. 먼저 -d single옵션 없이 Btrfs 파일 시스템을 만들었습니다 .

mkfs.btrfs /dev/sda /dev/sdb

결과는 약 4TB (3.45 바이너리 TB 파일 데이터) 만 저장할 수있었습니다.

# btrfs fi show
Label: none  uuid: 3a63a407-dd3c-46b6-8902-ede4b2b79465
 Total devices 2 FS bytes used 3.22TB
 devid    2 size 2.73TB used 1.82TB path /dev/sdb
 devid    1 size 1.82TB used 1.82TB path /dev/sda
# btrfs fi df /mnt/btrfs1/
Data, RAID0: total=3.45TB, used=3.22TB
Data: total=8.00MB, used=0.00
System, RAID1: total=8.00MB, used=264.00KB
System: total=4.00MB, used=0.00
Metadata, RAID1: total=94.00GB, used=4.29GB
Metadata: total=8.00MB, used=0.00
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        4.6T  3.3T  241G  94% /mnt/btrfs1

used 1.82TB3TB 드라이브에 유의하십시오 .

그런 다음 "balance"명령을 사용하여 데이터 블록을 RAID0에서 "single"프로필로 변환했습니다.

btrfs balance start -dconvert=single /mnt/btrfs1

4TB 데이터의 균형을 맞추는 데 오랜 시간 (약 30 시간)이 걸렸습니다. 그러나 완료 후 전체 5TB (4.36 이진 TB 파일 데이터)를 사용할 수 있습니다.

# btrfs fi show
Label: none  uuid: 3a63a407-dd3c-46b6-8902-ede4b2b79465
 Total devices 2 FS bytes used 4.34TB
 devid    2 size 2.73TB used 2.73TB path /dev/sdb
 devid    1 size 1.82TB used 1.82TB path /dev/sda
# btrfs fi df /mnt/btrfs1/
Data: total=4.36TB, used=4.34TB
System, RAID1: total=40.00MB, used=500.00KB
System: total=4.00MB, used=0.00
Metadata, RAID1: total=94.00GB, used=4.01GB
Metadata: total=8.00MB, used=0.00
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        4.6T  4.4T   27G 100% /mnt/btrfs1

2

우분투에서 btrfs와 함께 여러 장치를 사용했으며 정상적으로 작동했습니다. btrfs는 실제로 표준 RAID 레벨을 구현하지는 않습니다. 선택적 스트라이핑 및 미러링을 구현하지만 실제 RAID는 아닙니다.


1

btrfs에서 다른 크기의 드라이브를 결합 할 수 있습니다.
그러나 현재 btrfs는 ENOSPC (장치에 남은 공간 없음)를 잘 처리하지 못합니다.

예를 들어 RAID0 (스트라이프) 어레이에 3 개의 드라이브를 설치했습니다. 1x500GB, 1x250GB, 1x160GB
800-900GB의 디스크 공간이 있다고 가정합니다.

이것은 df -h다음과 같습니다 :
/ dev / sdf 848G 615G 234G 73 % / media / btrfs

그러나 어레이에 더 이상 데이터를 저장할 수 없습니다. (공백 없음)

btrfs filesystem df /media/btrfs방송이 저 :
데이터 : 총 = 612.51GB가 사용될 = 612.51GB
메타 데이터 합계 = 1.62GB 사용 = 990.73MB
시스템 : 총 = 12.00MB가 사용될 = 48.00KB

리 밸런싱조차도 도움이되지 않았습니다.

메일 링리스트에서 나는이 호출 계산을 보았습니다 :
가장 작은 드라이브의 크기 * 배열의 드라이브 수
(공간이 더 필요하지만 160GB * 3 = 480GB 대신 612GB)

따라서 현재 개발 상태에서는 btrfs가 한 배열에서 다른 크기를 지원하더라도 모든 공간을 사용할 수는 없습니다.

2.6.35-22-generic 커널과 함께 Ubuntu 10.10을 사용하고 있습니다.


적어도 파일 / 디렉토리마다 다른 레이드 레벨을 지원할 때까지 원하는 것을 지원한다고 생각하지 않습니다. raid0 (스트라이프)의 경우 btrfs는 3 개의 모든 장치에서 각 파일의 동일한 크기 부분을 유지해야합니다. 500GB의 한 장치를 모두 사용할 수 있다면 어떻게 할 수 있습니까? "raid0"대신 "single"을 사용한 경우 (게시시이 옵션을 사용할 수 있는지 확실하지 않음) btrfs는 파일을 어디에서나 복제하려고하지 않으며 모든 장치의 모든 공간을 사용할 수 있습니다. 그러나 레이드 레벨의 경우에는 의미가 없습니다. 레이드 레벨의 정의를 위반하려고합니다.
bobpaul

신경 쓰지 마, 내가 틀렸어 btrfs raid0 / 1은 모든 장치가 아닌 다른 장치 1 개에만 스트라이프 / 미러를 표시하므로 1TB + 500GB + 500GB는 raid0 및 raid1의 경우 1TB + 1TB (정확히 Linux 3.0 이상)와 동일하게 작동합니다. Linux 3.0 이전에는 설명 된 문제가있었습니다.
bobpaul

1

업데이트 : 아래 답변은 Linux 3.0이 출시되기 전에 작성되었습니다. Linux 3.0에는 준 라운드 로빈 패치가 포함되어 있습니다.

데이터 미러링 또는 스트라이핑을 수행 할 때 여유 공간이있는 다른 장치에 두 번째 미러 또는 스트라이프 청크를 할당해야합니다. BTRFS는 라운드 로빈 방식으로 장치에 청크를 할당하므로 크기가 다른 장치가있는 경우 공간이 손실 될 수 있습니다.

이를 개선하기 위해 파이프 라인 에는 준 라운드 로빈 패치 가 있습니다. 물론 500GB와 2TB 디스크가 있으면 다른 장치의 모든 청크를 페어링하는 것은 여전히 ​​불가능합니다. 이 패치는 1 x 1TB + 2 x 500GB와 같은 상황에서 각 작은 디스크가 다른 작은 디스크 대신 큰 디스크로 미러링 / 스트라이핑을 선호해야하는 경우에 더 적합합니다.

귀하의 상황에서는 데이터에 "단일"모드를 사용합니다 ( mkfs.btrfs -d single). 청크는 해당 모드에서 쌍을 이루지 않으므로 크기가 다른 장치에는 문제가 없다고 생각합니다. 그래도 테스트하지 않았습니다.


0

이 문제는 Gotchas 페이지의 btrfs-raid1 설정에만 적용됩니다 .

  • 할당은 라운드 로빈 단위로 수행됩니다. 일치하지 않는 드라이브 (크기가 다른 볼륨)로 구성된 볼륨에 대한 raid1 전략이있는 경우 가장 큰 단일 드라이브에 많은 공간이 남아있는 동안 더 작은 볼륨이 채워질 수 있습니다. 이이 문제가되는 것을 확인할 수 있는 경우 사이에 차이가 'DF'및 'btrfs를 파일 시스템 DF [마운트 포인트] AND 경우 "사용", "총"및 "데이터"라인에서 같은 것으로 후자 명령은 방송 . 균형 재조정은이 문제를 완화시킬 수 있습니다. (2.6.33)
    • 볼륨이 이러한 방식으로 채워지면 재조정으로 인해 ENOSPC ( "NO SPaCe 남은 장치에 NO NO SPaCe 오류")가 재 빠르게 발생할 수 있습니다. 이 손상을 해결하기 위해 비교적 큰 파일을 삭제해야 할 경우 재조정이 성공합니다. (2.6.33)
    • 균형을 다시 맞추면 장시간 동안 CPU 사용량이 매우 높아질 수 있습니다. (2.6.34 및 2.6.35)

반복해서 죄송하지만 새 기기를 추가하려고하는데 확실해야합니다. 디스크의 크기가 동일해야 함을 RAID0에 대해 확인한 모든 소스 (예 : freebsd geom doc) : "RAID0 스트라이프의 각 디스크는 동일한 크기 여야합니다. I / O 요청은 읽거나 쓰도록 인터리브되기 때문입니다. 여러 디스크에 병렬로 연결합니다. "). Btrfs와 함께 작동하는지 확인할 수 있습니까?
fokenrute

죄송합니다, 확인 할 수없는 다중 장치 btrfs가 없지만 raid0 + btrfs와 동일한 장치 크기를 갖는 것에 대해 아무것도 말할 수 없지만 시간이 충분하면 새 디스크를 1tb / 1tb, 이전 디스크를 파티션 중 하나에 백업하고 비어있는 1tb를 추가하면 두 번째 파티션을 추가하십시오.
OneOfOne
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.