2개의 분기가 있는 BTRFS RAID-1 파일 시스템이 있습니다. 또 다른 읽기 오류로 인해 디스크를 교체해야 합니다.
따라서 계획은 다음과 같습니다.
- 세 번째 다리를 추가하세요 -> 결과는 다음과 같습니다: 삼방 거울
- 결함이 있는 디스크를 제거합니다. -> 결과는 다음과 같습니다. 양방향 미러
그래서 다음 단계를 수행했습니다.
btrfs dev add /dev/new_device /mnt/foo
btrfs balance /mnt/foo
나는 btrfs가 3방향 미러를 만드는 것이 옳은 일을 했다고 생각합니다.
또 다른 옵션은 균형 잡힌 필터를 사용하는 것입니다. 하지만 파일 시스템은 이미 RAID-1이므로 필요하지 않겠죠?
btrfs fi show
다음과 같이 인쇄되어 있기 때문에 조금 걱정됩니다 .
밸런싱을 시작하기 전:
Total devices 3 FS bytes used 2.15TiB
devid 1 size 2.73TiB used 2.16TiB path /dev/left
devid 2 size 2.73TiB used 2.16TiB path /dev/right
devid 3 size 2.73TiB used 0.00B path /dev/new_device
균형 기간:
Total devices 3 FS bytes used 2.15TiB
devid 1 size 2.73TiB used 1.93TiB path /dev/left
devid 2 size 2.73TiB used 1.93TiB path /dev/right
devid 3 size 2.73TiB used 458.03GiB path /dev/new_device
내 말은, 이것은 btrfs가 기존 RAID-1 그룹의 절반을 단일 디스크로 균형을 맞추는 것처럼 보입니다... 맞습니까?
그래서 제 질문은 3방향 거울을 얻으려면 균형 잡힌 필터를 지정해야 합니까?입니다.
첨부된:btrfs는 n방향 미러링을 지원합니까? ㅏbtrfs 위키의 참고 사항그렇지 않다고 말하지만 아마도 구식일까요? 좋은 사람,cks는 최근 양방향 제한에 관한 기사를 게재했습니다..
답변1
Btrfs에는 특별한 대체 하위 명령이 있습니다.
btrfs replace start /dev/left /dev/new_device /mnt/foo
매뉴얼 페이지의 줄 사이를 읽으면 btrfs-replace
명령은 두 개의 기존 분기를 사용할 수 있어야 합니다(예를 들어 두 분기 모두 읽기 오류가 있는 경우). 하지만 두 오류 세트는 서로 분리되어 있습니다.
btrfs 대체 명령은 백그라운드에서 실행됩니다. status
예를 들어 하위 명령을 통해 상태를 확인할 수 있습니다.
btrfs replace status /mnt/foo
45.4% done, 0 write errs, 0 uncorr. read errs
또는 raid-1 파일 시스템에 장치를 추가한 다음 기존 분기를 삭제할 수 있습니다.
btrfs dev add /dev/mapper/new_device /mnt/foo
btrfs dev delete /dev/mapper/right /mnt/foo
add
장치를 추가하기만 하면 빨리 반환 되어야 합니다 ( btrfs fi show
확인하려면 a를 실행하세요).
다음은 delete
나머지 모든 장치에서 각 확장을 사용할 수 있도록 나머지 장치 간의 균형 조정을 트리거해야 합니다. 따라서 명령이 오랫동안 실행될 수 있습니다. 이 방법은 질문에 설명된 상황을 처리하는 데에도 적합합니다.
시스템 로그에는 스팸 추가/제거에 비해 btrfs replace
낮은 수준의 정보 메시지가 포함되어 있습니다 . 또한 완료하는 데 훨씬 더 오랜 시간이 걸립니다(예를 들어 3TB SATA 드라이브, 80% FS 사용량을 갖춘 테스트 시스템에서는 2-3배 더 오래 걸렸습니다).
btrfs fi resize
마지막으로 실제 교체 후 새 장치가 원래 장치보다 큰 경우 사용 가능한 전체 디스크 공간을 활용하려면 각 장치에서 를 실행 해야 합니다 . 상단의 예를 들면 replace
다음과 같습니다.
btrfs fi resize <devid>:max /mnt/foo
devid
반환된 장치 ID를 나타 냅니다 btrfs fi show
.
답변2
사용하는 것이 replace
선호되는 솔루션이며2~3배 빠르다.balance
. ( device remove
먼저 재조정합니다. 전환 유형을 사용하지 않아 soft
속도가 느려질 수도 있습니다.)
이렇게 하면 장애가 발생한 디스크가 커널 I/O를 차단하는 것을 방지할 수 있습니다.
나는 다음을 수행했습니다.
- 다운그레이드된 파일 시스템이 다음
noauto
위치에 있는지 확인하세요./etc/fstab
- 머신 재부팅(I/O 중단으로 인해 약 20분 소요)
실패한 드라이브에서 btrfs fs를 포함하는 LVM VG를 비활성화합니다.
sudo vgchange -an <failed-vg>
실패한 장치를 비활성화합니다.
echo 1 | sudo tee /sys/block/sdb/device/delete
파일 시스템 마운트
-o rw,degraded
(노트:degraded
만 사용할 수 있습니다한 번)실패 이유는 다음
devid
과 같습니다.btrfs filesystem show /mountpoint
btrfs replace start -B <devid> /dev/new-disk /mountpoint
내가 이것을 쓰는 동안 :
replace status
30초마다 0.1%의 체력 진행률을 표시합니다.iostat -d 1 -m <target-dev>
디스플레이는 약 145MB/s입니다(Seagate에서는 160MB/s를 광고함).
답변3
btrfs replace
이를 제안하는 데에는 단점이 있습니다. 활용도가 낮더라도 더 큰 장치를 더 작은 장치로 교체하는 것을 허용하지 않습니다. 예를 들어 1TB HDD를 500GB SSD로 교체하는 시나리오는 작동하지 않으며 추가/제거 옵션만 허용됩니다.
유일한 장점은 SSD에 쓰기가 매우 빠르며, 삭제는 HDD에만 의존하고, 분당 몇 GB, 로드된 시스템에서 HDD 드라이브를 100% 활용한다는 점입니다(검색 시간이 성능보다 훨씬 더 중요하며, 1TB는 하루가 걸릴 수 있음). 삭제 ).