BTRFS 참조/백포인터 불일치 및 역참조 손실 처리

BTRFS 참조/백포인터 불일치 및 역참조 손실 처리

btrfs receivebtrfs 파일 시스템은 확장 누락으로 인해 작업 중 일부 오류를 보고했습니다. 로그에서:

BTRFS error (device dm-1): unable to find ref byte nr 190303420416 \
      parent 0 root 594  owner 1 offset 0
BTRFS: error (device dm-1) in __btrfs_free_extent:6944: errno=-2 No such entry
BTRFS info (device dm-1): forced readonly
BTRFS: error (device dm-1) in btrfs_run_delayed_refs:2956: errno=-2 No such entry

A btrfs scrub(umount + mount 이후)도 유사한 오류로 인해 실패합니다.

3개의 확장 프로그램에 대해 보고된 문제 btrfs check- 각 확장 프로그램 문제는 다음과 같이 보고됩니다.

checking extents
ref mismatch on [190303420416 16384] extent item 0, found 1
Backref 190303420416 parent 594 root 594 not found in extent tree
backpointer mismatch on [190303420416 16384]
owner ref check failed [190303420416 16384]

내 질문은: 이 숫자를 어떻게 유용한 것으로 바꿀 수 있습니까? 예를 들어 특정 파일/디렉토리가 영향을 받는지 확인합니까?

그리고 그러한 오류를 처리하는 방법은 무엇입니까?

A는 btrfs check --repair심각한 불만 없이 잘 작동하는 것 같습니다.

  ref mismatch on [190303420416 16384] extent item 0, found 1
* repair deleting extent record: key 190303420416 169 1
* adding new tree backref on start 190303420416 len 16384 parent 0 root 594
  Backref 190303420416 parent 594 root 594 not found in extent tree
  backpointer mismatch on [190303420416 16384]
  owner ref check failed [190303420416 16384]

( *마크는 내꺼야)

이는 수리가 성공했고 데이터가 손실되지 않았음을 의미합니까?

답변1

성공적인 btrfs check --repair명령이 반드시 일관된 btrfs 파일 시스템을 가져오는 것은 아닙니다.

btrfs scrub한 경우에는 After 가 btrfs check트리거 되고 스냅샷을 수신하면 IO가 실패(읽기 전용 다시 마운트 강제)하는 것을 관찰했습니다 .WARN_ON()fs/btrfs/extent-tree.c

btrfs check따라서 a, a 및 a btrfs check --repair의 실행 시간이 btrfs scrub매우 중요할 수 있으며 이러한 작업은 불확실한 결과를 가져옵니다. 실용적인 대안은 btrfs 파일 시스템을 다시 만들고 백업을 복원하는 것입니다.

2021-12-14 후속 조치:FWIW, 이러한 오류는 결함이 있거나 품질이 낮은 USB 허브(공급업체 문자열: "Genesys Logic, Inc.")로 인해 발생합니다. USB 디스크 드라이브를 직접 연결한 후에는 이러한 오류가 더 이상 발생하지 않습니다. 이전에는 일일 스냅샷을 외부 USB 드라이브로 보낼 때 이와 같은 오류가 몇 달에 한 번씩 나타납니다. 다른 Genesys USB 허브(레이블은 다르지만)를 사용해 보았지만 유사한 오류 패턴이 발생했습니다.

관련 정보