다음 상태의 btrfs RAID1 시스템이 있습니다.
# btrfs filesystem show
Label: none uuid: 975bdbb3-9a9c-4a72-ad67-6cda545fda5e
Total devices 2 FS bytes used 1.65TiB
devid 1 size 1.82TiB used 1.77TiB path /dev/sde1
*** Some devices missing
분실된 장치는 완전히 고장나서 운영 체제에서 인식되지 않는 디스크 드라이브입니다. 고장난 디스크를 제거하고 재활용을 위해 보냈습니다.
이제 /dev/sdd에 새 디스크가 마운트되었습니다. 온라인으로 검색해봐도 이 상황에 대한 설명을 찾을 수 없습니다(검색어를 잘못 선택했나요?). 운영 체제가 장애가 발생한 디스크에 계속 액세스할 수 있는 동안 RAID 시스템을 복구하는 방법에 대한 많은 예가 있습니다. btrfs replace
이 명령에는 소스 디스크가 필요합니다.
나는 다음을 시도했다:
# btrfs replace start 2 /dev/sdd /mnt/brtfs-raid1-b
# btrfs replace status /mnt/brtfs-raid1-b
Never started
오류 메시지는 없지만 상태에는 시작되지 않았다고 표시됩니다. 내 시도에 어떤 문제가 있는지 알 수 없습니다.
저는 Ubuntu 16.04 LTS Xenial Xerus, Linux 커널 4.4.0-57-generic을 실행하고 있습니다.
업데이트 #1
"비백그라운드 모드(-B)"에서 명령을 실행하면 이전에 본 적이 없는 오류가 표시됩니다.
# btrfs replace start -B 2 /dev/sdd /mnt/brtfs-raid1-b
ERROR: ioctl(DEV_REPLACE_START) failed on "/mnt/brtfs-raid1-b": Read-only file system
/mnt/brtfs-raid1-b
RO가 설치되었습니다(읽기 전용). 선택의 여지가 없습니다. Btrfs는 나머지 디스크를 RW(읽기-쓰기)로 마운트하는 것을 허용하지 않습니다. 디스크 RW를 마운트하려고 하면 시스템 로그에 다음 오류가 표시됩니다.
BTRFS: missing devices(1) exceeds the limit(0), writeable mount is not allowed
RO 모드에서는 아무것도 할 수 없는 것 같습니다. 디스크를 교체하거나 추가하거나 제거할 수 없습니다. 하지만 디스크를 RW로 마운트할 방법이 없습니다. 어떤 옵션이 남았나요?
단순 디스크에 장애가 발생하더라도 상황이 이렇게 복잡해져서는 안 됩니다. 시스템은 계속해서 RW를 실행하고 드라이브 오류에 대해 경고해야 합니다. 애플리케이션이 여전히 디스크 문제를 인식하지 못한 채 새 디스크를 삽입하고 그 안의 데이터를 다시 복사할 수 있어야 합니다. 이것이 올바른 RAID입니다.
답변1
replace
실행 하려면 파일 시스템을 마운트해야 합니다 rw
.
다운그레이드된 BTRFS RAID1 파일 시스템에는그리고 딱 하나rw
마운트된 파일 시스템을 사용할 수 있는 기회가 있습니다-o degraded
:
degraded (default: off) Allow mounts with less devices than the RAID profile constraints require. A read-write mount (or remount) may fail when there are too many devices missing, for example if a stripe member is completely missing from RAID0.
마운트한 후 누락된 장치를 rw
찾으십시오 .devid
btrfs filesystem show /mountpoint
분실된 장치를 새 장치로 교체하십시오.
btrfs replace start -B <devid> /dev/new-disk /mountpoint
상태 확인:
btrfs replace status /mountpoint
답변2
고쳐 쓰다: @mkudlacek에 따르면 이 문제는 해결되었습니다.
번영을 위해 2017년에 손실된 드라이브로 RAID를 재구축할 수 없는 이유에 대한 답변은 다음과 같습니다.
이는 2017년 초 현재 btrfs의 한계인 것으로 밝혀졌습니다. 파일 시스템 rw를 다시 마운트하려면 커널을 패치해야 합니다. 하지만 아직 시도하지는 않았습니다. 그래서 나는 btrfs를 포기할 것입니다. 사람들은 단지 결함이 있는 디스크를 교체하기 위해 커널을 패치할 필요가 없습니다.
자세한 내용을 보려면 아래 링크를 클릭하세요.
2020년 현재에도 이 문제가 지속된다면 댓글을 남겨주세요.. 사람들이 이 문제가 해결되었는지 궁금해할 것 같아요.
고쳐 쓰다: 2020년 10월 20일 현재 저는 이전 mdadm 및 lvm으로 마이그레이션했으며 RAID10 4x4Tb(8Tb 총 공간)에 매우 만족하고 있습니다. 입증되었고 잘 작동하며 리소스를 많이 차지하지 않으며 저는 이에 대해 완전한 신뢰를 갖고 있습니다.
답변3
파일 시스템에 새 드라이브를 추가한 다음 btrfs device add /dev/sdd /mountpoint
누락된 드라이브를 삭제합니다. btrfs dev del missing /mountpoint
이 경우 파일 시스템을 다시 설치해야 btrfs dev del missing
작동할 수 있습니다.
답변4
btrfs replace
시도해 볼 가치가 있는 것은 분명하지만 호출에는 두 가지 문제가 있습니다. 사용하는 경우에만 오류가 표시됩니다 -B
(그렇지 않으면 모든 것이 괜찮은 것처럼 상태 0으로 종료되지만 "시작하지 않음" 상태로 사용하는 경우). 확인) 잘못된 인수로 인해 관련 없는 오류가 발생합니다.
예를 들어, 내 디스크는 괜찮다고 생각했지만 RAID1이 어떻게든 동기화되지 않았습니다(아마 정전으로 인해 호스트는 살아남았지만 디스크에 백업 전원이 없었고 약간 다른 시간에 온라인 상태가 되었을 수 있음). 확인하자면, 디스크 B를 끄면(마운트하는 동안) 데이터를 잘 읽을 수 있습니다. 디스크 A의 전원을 끄면(디스크 B가 켜져 있고 파일 시스템이 마운트됨) 오류가 발생하고 데이터가 손상되었습니다. 분명히 A 드라이브는 정상이고 B 드라이브가 손상되었습니다. 그런데 B디스크는 작동하는 것 같아서 재사용해서 재구축하고 싶습니다. 그러므로 /dev/diskB
로 교체하고 싶습니다 /dev/diskB
.
내가 그것을 사용했을 때 btrfs replace start -B /dev/diskB /dev/diskB /mnt/btrfs
그것은 나에게 보여주었다 ERROR: ioctl(DEV_REPLACE_START) failed on "/mnt/btrfs": Invalid argument, <illegal result value>
. 그러면 마운트 지점에 문제가 있는 것 같습니다. 그렇죠? 아니요, 첫 번째 항목 /dev/diskB
을 로 변경했을 때 /dev/diskA
작동했습니다. 오류는 마운트 지점이 아닌 장치에 있습니다.
이번에도 첫 번째 매개변수( 2
)가 조금 이상하다고 생각합니다. 어쩌면 오류가 잘못된 것이며 장치를 사용하여 교체할 수 있습니까 2
?
btrfs replace
작동 모드에는 두 가지가 있습니다. 하나는 손상된 장치를 첫 번째 인수로 사용하는 것(그 이후 start -B
또는 다른 것)이고, 다른 하나는 복사할 작업 장치를 사용하는 것입니다(첫 번째 옵션을 사용할 수 없는 경우). 두 경우 모두 두 번째 매개변수는 재구축에 사용할 디스크입니다.
파일 시스템이 읽기 전용으로 마운트되었는지, 읽기-쓰기로 마운트되었는지는 중요하지 않은 것 같습니다. 그렇기 때문에 귀하의 주장을 거부하고 올바른 오류 대신 잘못된 오류를 제공한다고 생각합니다.