두 개의 동일한 장치를 사용하여 btrfs 파일 시스템을 복원하는 방법

두 개의 동일한 장치를 사용하여 btrfs 파일 시스템을 복원하는 방법

요약: 긴 이야기 덕분에 장치 /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 2btrfs filesystem showbtrfs device delete missing /mountpointbtrfs device remove 2 /mountpointRAID1singlebtrfs balance -mconvert=single -sconvert=single -dconvert=single /mountpointdeviceARAID1

관련 정보