
내 NAS에는 BTRFS가 포함된 500GB 디스크가 있었습니다. 최근에 4TB 디스크를 받았는데 다운타임 없이 새 디스크만 사용하고 싶었습니다. 그래서 나는 실행하고 btrfs replace start 1 /dev/sdb .
그것이 끝날 때까지 기다렸다가 500GB 드라이브를 뽑았습니다.
이제 4TB 디스크에 액세스할 수 없으므로 교체된 500GB 디스크에서 모든 데이터를 복구하고 싶지만 해당 디스크의 BTRFS 파티션은 더 이상 인식되지 않습니다. -o degraded
, , 심지어 시도 -o recovery,ro
했지만 모두 실패했습니다. 여기서 내 옵션은 무엇입니까?btrfs restore
btrfs check
답변1
과거의 질문입니다만, 저도 같은 상황을 접해서 답변드립니다.
나는 btrfs replace
debian Bullseye(5.10.0-13-amd64)에서 RAID1 파일 시스템을 실행했고 다음 절차를 사용하여 Manjaro(5.13.19-2)에서 복구했습니다.
원인
적어도 커널 버전 5.10의 경우 btrfs replace
명령은 결국 btrfs_scratch_superblocks
다음 위치에서 함수를 호출합니다.GitHub
이 기능은 원본 디스크의 슈퍼블록에 있는 "마법의 문자열"을 제거합니다.
실제로 내 환경에서 다음과 같은 결과를 얻었습니다.
# btrfs inspect-internal dump-super -F /dev/sdb1
superblock: bytenr=65536, device=/dev/sdb1
---------------------------------------------------------
csum_type 0 (crc32c)
csum_size 4
csum 0x7d4435b9 [DON'T MATCH]
bytenr 65536
flags 0x1
( WRITTEN )
magic ........ [DON'T MATCH]
에 따르면btrfs 위키, "마법"(= "마법의 문자열")은 이어야 합니다 _BHRfS_M
.
복구 절차
What if I don't have wipefs at hand?
에 참고하여btrfs 위키, 쉘에서 다음을 실행하십시오.
교체된 디스크가 연결된 PC가 아닌 다른 PC에서 실행하는 것이 더 안전할 것입니다.
사용자 환경에 맞게 장치 및 마운트 지점 위치를 다시 작성하십시오.
(제 환경에서는 /dev/sdb1 로 성공했습니다!)
# # backup magic strings just in case
# dd bs=1 count=8 if=/dev/sdb skip=$((64*1024+64)) of=~/magic1
# dd bs=1 count=8 if=/dev/sdb skip=$((64*1024*1024+64)) of=~/magic2
# dd bs=1 count=8 if=/dev/sdb skip=$((256*1024*1024*1024+64)) of=~/magic3
# # write magic string
# echo "_BHRfS_M" | dd bs=1 count=8 of=/dev/sdb seek=$((64*1024+64))
# echo "_BHRfS_M" | dd bs=1 count=8 of=/dev/sdb seek=$((64*1024*1024+64))
# echo "_BHRfS_M" | dd bs=1 count=8 of=/dev/sdb seek=$((256*1024*1024*1024+64))
# btrfs device scan
# mkdir -p /mnt/before_replace
# mount -o degraded,ro /dev/sdb /mnt/before_replace
제가 영어를 잘 못해서 읽기 힘들면 죄송합니다. 하지만 이것이 같은 상황에 있는 다른 사람들에게도 도움이 되기를 바랍니다.