btrfs에 잘못된 csum이 있고 I/O 오류로 인해 정리가 중단되었지만 SSD는 괜찮은 것 같습니다.

btrfs에 잘못된 csum이 있고 I/O 오류로 인해 정리가 중단되었지만 SSD는 괜찮은 것 같습니다.

문제가 발생했습니다. 일부 패키지를 설치한 후 openSUSE Tumbleweed 시스템의 업데이트가 실패하고 /var가 읽기 전용 파일 시스템이라고 주장했습니다.

이전 스냅샷으로 되돌리고 /var가 읽기 전용이 아닌지 테스트한 후 업데이트를 다시 실행하고 일부 오류 메시지 후에 읽기 전용으로 돌아갔습니다.

이것질문으로 인해 시작 메시지를 확인하게 되었는데 BTRFS에 문제가 있다는 것을 모르시겠습니까?

[  231.762975] BTRFS info (device sda2): scrub: started on devid 1
[  287.021834] BTRFS error (device sda2): parent transid verify failed on 31572885504 wanted 278272 found 278280
[  287.060064] BTRFS info (device sda2): scrub: not finished on devid 1 with status: -5
[  643.134491] BTRFS info (device sda2): qgroup scan completed (inconsistency flag cleared)
[  971.347644] BTRFS info (device sda2): scrub: started on devid 1
[ 1026.335159] BTRFS error (device sda2): parent transid verify failed on 31572885504 wanted 278272 found 278280
[ 1026.374518] BTRFS info (device sda2): scrub: not finished on devid 1 with status: -5

마지막 3줄에 대해 다시 반복합니다. 이전 스냅샷으로 전환해도 아무런 영향을 미치지 않는 것 같으므로 이는 파일 시스템 내용에 대한 최근 변경 사항이 아닐 수도 있고 중간에 중단되었을 수도 있습니다. 한동안 주변에 있었거나 뭔가 다른 것입니다.

정리를 시도했지만 I/O 오류로 인해 1분 동안(약 14GiB) 프로세스가 종료됩니다.

> sudo btrfs scrub start -B /dev/sda2
ERROR: scrubbing /dev/sda2 failed for device id 1: ret=-1, errno=5 (Input/output error)
scrub canceled for 8b283f24-277b-4cf8-8d87-6107bca1ef57
Scrub started:    Wed Jul 15 14:20:22 2020
Status:           aborted
Duration:         0:00:55
Total to scrub:   60.00GiB
Rate:             183.09MiB/s
Error summary:    no errors found

그렇다면 오류는 발견되지 않았지만 I/O 오류로 인해 중단되었습니까? 있는 것 같네요예전에는결국 그것은 실수였습니다.

드라이브의 SMART 상태를 테스트했는데 제가 알 수 있는 한 완벽하게 괜찮은 것 같습니다. 드라이브의 수명은 약 2700시간이므로 마모가 심할 것으로 예상되지는 않습니다.

좀 더 검색해서 알아냈어요이것백업에서 디스크 내용을 교체하는 것이 좋습니다. 이것이 내 기본 시스템 파티션이므로 전체 파티션이 마운트되는 것을 전혀 원하지 않습니다. 최근 부분 복제 백업이 있지만 오류가 있습니다(한동안 오류가 있었을 수 있음). 또한: 업데이트를 시도하지 않는 한 내 시스템은 잘 작동하므로 어떻게든 복구할 수 있을까요?

csum 오류만 확인하십시오.

> sudo btrfs check --check-data-csum /dev/sda2
Opening filesystem to check...
WARNING: filesystem mounted, continuing because of --force
Checking filesystem on /dev/sda2
UUID: 8b283f24-277b-4cf8-8d87-6107bca1ef57
[1/7] checking root items
[2/7] checking extents
parent transid verify failed on 31572885504 wanted 278272 found 278280
parent transid verify failed on 31572885504 wanted 278272 found 278280
Ignoring transid failure
[3/7] checking free space cache
[4/7] checking fs roots
parent transid verify failed on 31572885504 wanted 278272 found 278280
Ignoring transid failure
parent transid verify failed on 31572885504 wanted 278272 found 278280
Ignoring transid failure
parent transid verify failed on 31572885504 wanted 278272 found 278280
Ignoring transid failure
root 259 inode 4735696 errors 800, odd csum item
root 259 inode 4746779 errors 800, odd csum item
root 259 inode 4747724 errors 800, odd csum item
parent transid verify failed on 31572885504 wanted 278272 found 278280
Ignoring transid failure
[... lots of repetitions of the previous two lines ...]
Ignoring transid failure
ERROR: errors found in fs roots
found 49867616256 bytes used, error(s) found
total csum bytes: 38229736
total tree bytes: 1010974720
total fs tree bytes: 895434752
total extent tree bytes: 57819136
btree space waste bytes: 215524051
file data blocks allocated: 869778038784
 referenced 68509286400

아...그렇다면 하나의 블록만 체크섬 문제의 영향을 받는다는 뜻인가요? 이것은 단지 파일이라는 뜻인가요? 아니면 "fs 루트에서 오류가 발견되었습니다" 줄이 파일 시스템에 더 많은 문제가 있음을 나타냅니까?

나는 보았다이것제로 로깅이 권장되지만 해당 명령은 내 시스템이나 제거 시 디스크를 확인하는 데 사용한 Manjaro Live 시스템에 없는 것 같습니다. su 더 이상 필요/지원되지 않는다고 가정합니까? 그래도,위키피디아파일 시스템을 마운트할 수 있는 한 제로 로그는 쓸모가 없으며 내 로그도 마운트할 수 있다고 말합니다. 그러나 그것은 또한 말한다btrfs 없이 확인다른 모든 방법이 실패하지 않는 한 수리를 수행하십시오.

나에게는 다른 모든 방법이 실제로 실패한 것처럼 보이지만 이 문제를 처리하는 다른 방법을 간과하고 있는지 아니면 처음에 무엇이 잘못되었는지 알아낼 수도 있는지 확실하지 않습니다.

btrfs check --init-csum-tree그렇다면 (또는 ?) 로 이 문제를 해결해 볼 가치가 있습니까? btrfs check --repair아니면 시스템을 다시 설치하지 않고 이 문제를 해결할 수 있는 더 현명한 방법이 있습니까? 어떤 파일이 영향을 받았는지 확인하고 해당 파일을 복구하거나 재생성할 수 있는지 확인하시겠습니까?

답변1

어떤 파일이 transid 오류의 영향을 받았는지 알아내기 위해 찾을 수 있는 다른 분석 방법을 모두 실행했지만 실제로는 그리 멀리 가지 못했습니다. 그래서 나는 를 사용하여 여전히 읽을 수 btrfs restore있고 라이브 부팅 시스템에서 실행 중인 btrfs check --repair모든 것을 백업했습니다 . btrfs check --init-csum-tree이렇게 하면 오류 보고가 제거되지만 여유 공간이 거의 남지 않습니다. 그래서 좋은 측정을 위해 후속 작업을 수행했습니다 brfs balance(몇 번 실행해야 했지만 처음에는 usage=10여유 공간이 너무 적기 때문에 거의 빈 블록( )으로 제한되었습니다. 몇 번 스크럽하고 균형을 맞춘 후에 드라이브가 다시 제대로 작동하는 것 같았습니다. , 그러나 일부 파일이 손상되거나 누락되었습니다. 더 이상 작동하지 않는 영향을 받는 일부 패키지를 제거/재설치하고 전체 시스템 업데이트를 실행했으며 모든 것이 다시 정상적으로 작동했습니다.

이러한 유형의 오류가 다시 발생하고 눈에 띄지 않게 될 가능성을 줄이기 위해 이제 openSUSE에 정기적으로 디스크를 정리하고 균형을 맞추는 서비스를 설정했습니다. 그 이후로 잘 돌아가고 있어요. 나는 이런 종류의 위생이 BTRFS의 일부가 되기를 진심으로 바랍니다. 모든 X 쓰기를 스크럽하고, 블록의 Y%를 재할당한 후 균형을 맞추며, 문제가 발생하면 플래그를 올립니다. 또는 최소한 기본적으로 BTRFS를 제공하는 배포판에는 비슷한 것이 미리 구성되어 있어야 합니다. BTRFS를 사용하는 사람은 누구나 이를 정리하고 균형을 맞춰야 하기 때문입니다.

관련 정보