요약: 긴 이야기 덕분에 장치 /dev/sde1
및 (ID 1과 2) /dev/sde1
로 구성된 Btrfs RAID1 파일 시스템을 얻었습니다. Btrfs는 rw를 마운트하지 않으며 이는 장치가 없음을 나타냅니다. 다른 장치를 제거할 수 있도록 이들 장치 중 어느 장치가 작동하는지 어떻게 확인하고 올바른 두 번째 드라이브를 추가하려면 어떻게 합니까 /dev/sdb1
? 현재는 읽기 전용으로만 마운트할 수 있기 때문에 드라이브 추가에 실패합니다.
Btrfs를 사용하는 RAID1(미러)에 2개의 외장 하드 드라이브가 있습니다. A 드라이브는 괜찮았지만 정기 청소 중에 B 드라이브에서 수백만 개의 오류가 발생했습니다. 테스트하는 동안 장치 B는 괜찮아 보였으므로 동기화가 맞지 않은 것 같습니다(호스트는 노트북이므로 배터리로 인해 정전이 되어도 살아남을 수 있지만 드라이브는 그럴 수 없으므로 한 대가 올 것 같습니다). 다른 것보다 먼저 온라인으로)). 장치 B에서 장치 A의 이미지를 다시 작성하고 싶습니다.
replace
검색을 좀 해보니 하위 명령을 사용해야 할 것 같습니다 . 장치 B를 장치 B로 교체하고 싶습니다. 물론 btrfs를 사용해 이 명령을 이해하는지 확인했습니다.
btrfs replace start /dev/deviceB /dev/deviceB /mountpoint
불행히도 이것은 작동하지 않습니다. 매뉴얼 페이지에는 "라이브 파일 시스템에서 현재 소스 장치에 저장된 대상 장치로 데이터를 복사하기 시작합니다." 따라서 거기에서 복사할 수 있으므로 사용 가능한 다른 장치를 전달했습니다.
btrfs replace start /dev/deviceA /dev/deviceB /mountpoint
나중에 "작업이 완료된 후 소스 장치가 파일 시스템에서 제거됩니다."라는 내용이 있으므로 매뉴얼 페이지를 더 잘 읽어야 했습니다. 이제 /dev/deviceB
해당 장치만 있는 파일 시스템이 생겼습니다.
하지만 원래(손상된) 장치 B는 삭제되지 않았습니다.
이제 이런 상황이 생겼습니다.
$ btrfs device usage /mountpoint
/dev/sde1, ID: 1
Device size: 3.64TiB
Device slack: 0.00B
Data,single: 1.00GiB
Data,RAID1: 2.00TiB
Data,DUP: 40.91GiB
Metadata,single: 1.00GiB
Metadata,RAID1: 5.00GiB
Metadata,DUP: 3.00GiB
System,single: 32.00MiB
System,RAID1: 32.00MiB
System,DUP: 128.00MiB
Unallocated: 1.59TiB
/dev/sde1, ID: 2
Device size: 3.64TiB
Device slack: 0.00B
Data,RAID1: 2.00TiB
Metadata,RAID1: 5.00GiB
System,RAID1: 32.00MiB
Unallocated: 1.63TiB
( /dev/sde1
장치 B는 어디에 있습니까? 로 마운트할 수 있습니다 -o degraded,ro
.)
이 상황을 어떻게 해결할 수 있나요?
장치 A( )를 추가하려고 시도했지만 sdb1
"오류: '/dev/sdb1' 장치 추가 중 오류 발생: 읽기 전용 파일 시스템"이라는 메시지와 함께 실패했습니다. 어떤 장치 ID가 어느 것인지 알 수 없기 때문에 어떻게 진행해야 할지 모르겠습니다. 따라서 그 중 하나를 제거하면(rw를 마운트하기 위해) 재앙이 될 수 있습니다. 그럼에도 불구하고, 현재로서는 기기를 삭제하는 것이 최선의 조치인지는 잘 모르겠습니다. 어쩌면 (어떤 장치 ID인지 알아낸 후) replace
장치 ID를 매개변수로 사용해야 할까요?
장치 A의 파일 시스템은 더 이상 Btrfs로 인식되지 않으며 hexdumper로 확인할 때 유효하지 않은 것처럼 보입니다. 처음 부분 근처(0x10 000 바로 뒤의 iirc)에 리터럴 문자열 BTRFS가 포함되어 있었지만 더 이상 포함되지 않습니다. 데이터는 여전히 있는 것 같습니다. 단지 헤더가 잘못된 것뿐입니다(0이 아닌 첫 번째 데이터는 이제 0x400 000에 있습니다).
답변1
종종 무시되는 경고부터 시작하겠습니다(나도 이것에 대해 유죄입니다)...지금 데이터를 백업하세요. 물론, 데이터를 백업할 여유 공간이 충분하다면 파일 시스템을 다시 생성하면 되겠죠? 이것은 예술이며 제대로 이해하기 어렵다는 점을 명심하십시오. 이것이 바로 irc.freenode.net의 btrfs IRC 채널에 있는 사람들과 대화하는 것을 권장하는 이유입니다.
가장 먼저 시도한 것은 장치 A를 복원하는 것이었습니다. 이는 btrfs rescue super-recover /dev/deviceA
또는 로 수행 할 수 있습니다 btrfsck --repair /dev/deviceA
. 이들 중 하나라도 성공하면 해당 장치를 지우고 deviceB
새 장치로 추가할 수 있습니다(또는 deviceA
여전히 손상되었다고 생각되면 교체하십시오).
dm-snapshot
그렇지 않으면, 이 경우에는 장치의 스냅샷을 먼저 생성하고 스냅샷 작업을 해서 상황이 악화되지 않도록 하는 것을 좋아합니다 . 때때로 btrfs 명령의 순서를 올바르게 얻으려면 몇 번의 시도가 필요합니다. 스냅샷 파일을 저장하려면 많은 여유 공간이 필요합니다(위 기준으로 10~100G 정도 되는 것 같아요).
위 출력 을 보면 devid 1
. 옆에 있는 경로). btrfs를 읽기 전용으로 마운트하지 않았는지 확인하십시오. 그렇지 않으면 문제를 해결하기 위해 쓰기를 수행할 수 없습니다. 그래도 작동하지 않으면 먼저 장치를 사용하고 제거해 보십시오 . 실패하면 블록을 with 로 변환한 후 장치를 다시 제거해 보세요. 모두 성공하면 장치로 추가하고 모든 것을 다시 변환 할 수 있습니다 . 또한 이러한 변환 명령에는 많은 시간이 걸릴 수 있으므로 인내심이 필요합니다.devid 2
btrfs filesystem show
btrfs device delete missing /mountpoint
btrfs device remove 2 /mountpoint
RAID1
single
btrfs balance -mconvert=single -sconvert=single -dconvert=single /mountpoint
deviceA
RAID1