BTRFS RAID-1 파일 시스템에서 장치를 교체하는 방법은 무엇입니까?

BTRFS RAID-1 파일 시스템에서 장치를 교체하는 방법은 무엇입니까?

2개의 분기가 있는 BTRFS RAID-1 파일 시스템이 있습니다. 또 다른 읽기 오류로 인해 디스크를 교체해야 합니다.

따라서 계획은 다음과 같습니다.

  1. 세 번째 다리를 추가하세요 -> 결과는 다음과 같습니다: 삼방 거울
  2. 결함이 있는 디스크를 제거합니다. -> 결과는 다음과 같습니다. 양방향 미러

그래서 다음 단계를 수행했습니다.

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확실히지원하다N 방향 거울.

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를 차단하는 것을 방지할 수 있습니다.

나는 다음을 수행했습니다.

  1. 다운그레이드된 파일 시스템이 다음 noauto위치에 있는지 확인하세요./etc/fstab
  2. 머신 재부팅(I/O 중단으로 인해 약 20분 소요)
  3. 실패한 드라이브에서 btrfs fs를 포함하는 LVM VG를 비활성화합니다.

    sudo vgchange -an <failed-vg>
    
  4. 실패한 장치를 비활성화합니다.

    echo 1 | sudo tee /sys/block/sdb/device/delete
    
  5. 파일 시스템 마운트 -o rw,degraded(노트: degraded만 사용할 수 있습니다한 번)

  6. 실패 이유는 다음 devid과 같습니다.

    btrfs filesystem show /mountpoint
    
  7. btrfs replace start -B <devid> /dev/new-disk /mountpoint
    

내가 이것을 쓰는 동안 :

  • replace status30초마다 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는 하루가 걸릴 수 있음). 삭제 ).

관련 정보