Btrfs 파일 시스템을 사용하여 3TB USB 외장 하드 드라이브(WD MyBook)에 데이터를 쓰고 있던 중 실수로 드라이브의 전원 모듈 전원을 껐습니다.
이상한 점 - 쓰기 작업이 계속되는 것 같습니다(즉시 I/O 오류가 발생할 것으로 예상했습니다). 프로세스 를 수동으로 종료 rsync
하고 파일 시스템을 다시 마운트해 보았습니다.
노드 /dev/sdf
가 여전히 존재하지만 설치할 수 없습니다.
나는 성공 partprobe
하지 않고 이것을 시도했습니다 btrfs device scan
.
재부팅 후 파일 시스템을 다시 마운트할 수 없습니다. 나는 드라이브에서 하나를 실행했고 btrfs rescue chunk-recover -v
약 14시간 후에 다음을 발견했습니다.
(A long list of good chunks)
Chunk: start = 1992919351296, len = 1073741824, type = 1, num_stripes = 1
Stripes list:
[ 0] Stripe: devid = 1, offset = 1975739482112
No block group.
Device extent list:
[ 0]Device extent: devid = 1, start = 1975739482112, len = 1073741824, chunk offset = 1992919351296
Chunk: start = 1993993093120, len = 1073741824, type = 1, num_stripes = 1
Stripes list:
[ 0] Stripe: devid = 1, offset = 1976813223936
No block group.
Device extent list:
[ 0]Device extent: devid = 1, start = 1976813223936, len = 1073741824, chunk offset = 1993993093120
Unrecoverable Chunks:
Chunk: start = 1995066834944, len = 1073741824, type = 1, num_stripes = 1
Stripes list:
[ 0] Stripe: devid = 1, offset = 1977886965760
No block group.
No device extent.
Chunk: start = 1996140576768, len = 1073741824, type = 1, num_stripes = 1
Stripes list:
[ 0] Stripe: devid = 1, offset = 1978960707584
No block group.
No device extent.
Chunk: start = 1997214318592, len = 1073741824, type = 1, num_stripes = 1
Stripes list:
[ 0] Stripe: devid = 1, offset = 1980034449408
No block group.
No device extent.
Chunk: start = 1998288060416, len = 1073741824, type = 1, num_stripes = 1
Stripes list:
[ 0] Stripe: devid = 1, offset = 1981108191232
No block group.
No device extent.
Chunk: start = 1361559158784, len = 1073741824, type = 1, num_stripes = 0
Stripes list:
Block Group: start = 1361559158784, len = 1073741824, flag = 1
No device extent.
Total Chunks: 1850
Recoverable: 1845
Unrecoverable: 5
Orphan Block Groups:
Orphan Device Extents:
parent transid verify failed on 1634923266048 wanted 1530 found 1532
parent transid verify failed on 1634923266048 wanted 1530 found 1532
Ignoring transid failure
Couldn't setup extent tree
open with broken chunk error
Chunk tree recovery failed
일련의 긴 블록 이후에는 일부 블록을 복구할 수 없습니다. 그게 무슨 뜻이야?
스크럽, 확인, --init-extent-tree, 로그 없음을 포함하여 가능한 모든 btrfs 명령을 시도했지만 다음과 같은 작업은 수행되지 않았습니다.
# btrfs check -p /dev/sdc
Opening filesystem to check...
parent transid verify failed on 1634923266048 wanted 1530 found 1532
parent transid verify failed on 1634923266048 wanted 1530 found 1532
Ignoring transid failure
Couldn't setup extent tree
ERROR: cannot open file system
예상치 못한 정전으로 인해 Btrfs 파일 시스템이 완전히 파괴되었을 가능성이 있습니까?
이 사건에 대한 자세한 내용은 여기에서 확인할 수 있습니다. https://forum.manjaro.org/t/unfixable-btrfs-filesystem-after-a-power-failure/80994
답변1
btrfs check
당신이 무엇을 하고 있는지 정말로 알지 않는 이상 사용하지 마세요! 파일 시스템이 손상될 수 있습니다!
나는 Btrfs 메일링 리스트에 연락하여 어떤 용도 btrfs check --repair
로든 파일 시스템 손상이 증가할 수 있다는 것을 알게 되었습니다.
벽돌이 된 파일 시스템을 초래한 사소한 문제 이후에 해당 명령을 어리석게 사용한 것 같습니다.
도움말을 읽기 위해 실행하면 다음과 같은 경고가 표시됩니다.
# btrfs check
btrfs check: too few arguments
usage: btrfs check [options] <device>
Check structural integrity of a filesystem (unmounted).
Check structural integrity of an unmounted filesystem. Verify internal
trees' consistency and item connectivity. In the repair mode try to
fix the problems found.
WARNING: the repair mode is considered dangerous and should not be used
without prior analysis of problems found on the filesystem.