문제 배경
btrfs의 가장 큰 장점 중 하나는 다양한 크기의 드라이브를 효율적으로 사용할 수 있다는 것입니다. 그러나 기본 RAID-0(스트라이핑) 프로필에서는 그렇지 않다는 것을 방금 알게 되었습니다.
8TB, 4TB, 4TB의 3개 드라이브로 RAID-0을 사용하고 총 16TB를 얻고 싶습니다. 8TB의 전반부는 첫 번째 4TB 드라이브와 두 번째 변경으로 스트라이핑될 수 있습니다. 절반은 두 번째 4TB 드라이브를 사용하여 스트라이프할 수 있습니다.
그러나 (매우 유용함)에 따르면Btrfs 디스크 사용량 계산기12TB만 얻을 수 있습니다. 각 블록은 3개 드라이브 모두에 스트라이프되어 8TB 드라이브에 4TB의 사용되지 않은 공간이 남습니다. 이 질문에 대한 답변에서도 언급되었습니다.드라이브 크기가 다른 btrfs RAID0을 사용하면 여유 공간이 부족해집니다..
삽화
설명서에는 뭐라고 적혀 있나요?
잘 읽어보신 후mkfs.btrfs이는 기본 RAID-0 프로필 설정 때문인 것 같습니다.최저 한도에서장치 수는 2개이지만 상한은 없습니다. 이는 데이터 블록이 풀에서 찾을 수 있는 만큼의 장치에 걸쳐 스트라이프된다는 의미입니다. 이것은 확실히 합리적인 선택이며 완벽하게 이해됩니다.
btrfs 디스크 사용량 계산기를 사용하는 동안 다음을 설정하면 원하는 결과를 얻을 수 있다는 것을 발견했습니다.최고장치 수는 2입니다. 추가 속도를 위해 여전히 두 드라이브에 걸쳐 데이터를 제거하지만 사용 가능한 공간을 더 많이 사용할 수 있도록 스트라이핑을 두 장치로 제한합니다. 나에게 이는 매우 유리한 절충안이며, 그렇게 생각하는 사람이 나뿐만이 아닐 것입니다.
질문
나는 길을 찾지 못했습니다.변화파일 시스템 생성 시 최대 장치 수입니다.
- 가능합니까?
- 그렇다면 어떻게 변경할 수 있나요?
- 만약 내가하다이를 변경하면 다른 도구가 레이아웃을 이해할 수 있습니까?
답변1
직접적으로 할 수는 없지만 약간의 행운과 노력이 있다면 가능합니다.
문제는 현재(btrfs-progs 5.7 기준) 이를 수행할 방법이 없다는 것입니다 mkfs.btrfs
. 온라인 공간 계산기에는 기본 RAID 레벨에서 이 효과에 대한 참고 사항도 포함되어 있습니다.
이는 현재 btrfs에서 지원하는 유일한 매개변수 설정입니다.
mkfs.btrfs
두 개의 드라이브, btrfs device add
세 번째 드라이브 및 btrfs balance
(8+4+4 GiB LV를 "드라이브"로 사용) 의 다양한 조합을 시도했습니다 . 불행하게도 FS에 12GiB 이상의 데이터를 저장할 수 있는 경우가 많았지만 필요한 16GiB에 근접한 적은 없었습니다. 에 따르면 btrfs device usage
, 저는 항상 2개와 3개의 드라이브에 걸쳐 블록이 혼합되어 스트라이프되어 있습니다.
즉, 그것은가능한mkfs.btrfs
코드를 수정하여 맞춤형 스트립 카운트를 사용할 수 있습니다. 블록 레이아웃은 btrfs-progs btrfs_alloc_chunk()
에서 설정됩니다. volume.c
이 함수 호출은 init_alloc_chunk_ctl()
RAID 사전 설정을 스트라이프 수로 변환합니다. min_stripes
RAID0의 경우 2 num_stripes
(실제로 블록을 생성하는 데 사용된 스트라이프 수) 로 설정합니다 min(ctl->max_stripes, ctl->total_devs)
. max_stripes
에 설정된 블록 유형 관련 제한 사항은 다음과 같습니다 btrfs_alloc_chunk()
.
따라서 이 루틴을 수정하여 num_stripes
원하는 값(2)으로 제한하고 이러한 수정을 사용하여 mkfs.btrfs
원하는 방식으로 작동하는 파일 시스템을 만들 수 있습니다. 이 가설을 철저히 테스트할 시간이 없었기 때문에 커널이나 btrfs-progs에서 버그가 발생할 가능성이 있지만 IMHO에는 작동할 가능성이 높습니다. 결국, 수정되지 않은 도구를 사용하고 장치를 추가/제거할 때(위의 테스트와 같은) 원하는 디스크 레이아웃이 여전히 자주 발생하므로 원칙적으로 지원되어야 합니다. 하지만 레이아웃이 나중에 device add
/ 다시 엉망이 되어도 별로 놀라지 않을 것입니다 balance
.
답변2
이러한 매개변수의 필요성은 구현 가치가 있는 프로젝트 아이디어로 등록되었습니다.
https://btrfs.wiki.kernel.org/index.php/Project_ideas#Limits_on_number_of_stripes_.28stripe_width.29
2022년 2월 12일 현재, 누구도 이에 대해 작업 중이라고 주장하지 않으며 메일링 리스트에 패치가 전송되지 않았습니다.
답변3
이것은 귀하의 질문에 대한 답변이지만 제목에 묻는 질문은 아닙니다.
리눅스 5.15에서는,btrfs는 단일 드라이브에서 RAID0("성능 저하된 raid")을 허용합니다.. 이렇게 하면 성능 분포가 최적이 아닐 수 있지만 전체 16TB를 사용할 수 있습니다.
처음 12TB의 스트라이프 너비는 3(질문에 표시된 대로)이고 마지막 4TB의 스트라이프 너비는 1입니다.
귀하의 필요에 따라 이는 긍정적일 수도 있고 부정적일 수도 있습니다.