하드웨어 문제 없이 btrfs가 자체적으로 충돌합니까? 회복하는 방법?

하드웨어 문제 없이 btrfs가 자체적으로 충돌합니까? 회복하는 방법?

BTRFS로 포맷된 LUKS 암호화 SSD에 Manjaro KDE를 설치했습니다. 시스템은 대부분 최신 상태이며 마지막 업데이트는 아마도 1~2주 전이었을 것입니다.

갑자기 읽기 전용으로 전환되고 dmesg는 다음과 같은 수십 개의 오류를 표시합니다.

parent transid verify failed on * wanted * found *

(그런데 매우 짜증납니다. Firefox는 쓰기 가능한 디스크가 없으면 페이지를 로드할 수 없습니다. 이것이 제가 이 문제를 처음 발견한 이유입니다.)

재부팅을 시도했지만 부팅 프로세스에서 동일한 문제가 발생했습니다. 읽기 전용으로만 마운트할 수 있었기 때문에 비상 루트 쉘에 들어갔습니다.

이제 USB를 통해 시작된 라이브 세션에 참여하고 있습니다. 모든 데이터를 백업할 수 있었습니다(어차피 대부분은 백업되었지만 확실히 하기 위해).

시스템을 다시 설치할 필요가 없도록 파일 시스템을 복구해 보았지만 지금까지 아무 것도 작동하지 않았습니다. 나는 시도했다:

# btrfs check --repair /dev/mapper/luks-455a911f-2d10-4548-a671-e1d4b8295bce 
enabling repair mode
WARNING:

        Do not use --repair unless you are advised to do so by a developer
        or an experienced user, and then only after having accepted that no
        fsck can successfully repair all types of filesystem corruption. Eg.
        some software or hardware bugs can fatally damage a volume.
        The operation will start in 10 seconds.
        Use Ctrl-C to stop it.
10 9 8 7 6 5 4 3 2 1
Starting repair.
Opening filesystem to check...
Checking filesystem on /dev/mapper/luks-455a911f-2d10-4548-a671-e1d4b8295bce
UUID: 4dd8f7e8-5ffb-4405-b3d8-789ea877483d
[1/7] checking root items
parent transid verify failed on 429604962304 wanted 724347 found 724505
parent transid verify failed on 429604962304 wanted 724347 found 724505
Ignoring transid failure
parent transid verify failed on 429597687808 wanted 722745 found 724505
parent transid verify failed on 429597687808 wanted 722745 found 724505
Ignoring transid failure
ERROR: child eb corrupted: parent bytenr=449465008128 item=361 parent level=1 child bytenr=429597687808 child level=1
ERROR: failed to repair root items: Input/output error

반품:

# btrfs scrub start /mnt/1/
scrub started on /mnt/1/, fsid 4dd8f7e8-5ffb-4405-b3d8-789ea877483d (pid=16297)
# btrfs scrub status /mnt/1/
UUID:             4dd8f7e8-5ffb-4405-b3d8-789ea877483d
Scrub started:    Tue Sep 21 11:31:18 2021
Status:           aborted
Duration:         0:00:01
Total to scrub:   446.54GiB
Rate:             2.47GiB/s
Error summary:    no errors found

btrfs는 dmesg 출력을 정리했습니다:

[Sep21 09:32] BTRFS info (device dm-1): scrub: started on devid 1
[  +1.497704] BTRFS error (device dm-1): parent transid verify failed on 429604962304 wanted 724347 found 724505
[  +0.001083] BTRFS info (device dm-1): scrub: not finished on devid 1 with status: -5

반품:

# btrfs filesystem balance start -dusage=60 -musage=60 /mnt/1
ERROR: error during balancing '/mnt/1': Input/output error
There may be more info in syslog - try dmesg | tail

밸런싱 중 dmesg:

[Sep21 09:34] BTRFS info (device dm-1): disk space caching is enabled
[  +0.000011] BTRFS info (device dm-1): has skinny extents
[  +0.175630] BTRFS info (device dm-1): enabling ssd optimizations
[  +6.367553] BTRFS error (device dm-1): csum mismatch on free space cache
[  +0.000004] BTRFS warning (device dm-1): failed to load free space cache for block group 19349372928, rebuilding it now
[  +0.001476] BTRFS error (device dm-1): space cache generation (724505) does not match inode (720863)
[  +0.000003] BTRFS warning (device dm-1): failed to load free space cache for block group 21496856576, rebuilding it now
[  +0.149606] BTRFS info (device dm-1): balance: start -dusage=60 -musage=60 -susage=60
[  +0.000677] BTRFS info (device dm-1): relocating block group 670257119232 flags data
[  +1.210621] BTRFS info (device dm-1): found 7370 extents, stage: move data extents
[  +0.033649] BTRFS error (device dm-1): parent transid verify failed on 429608239104 wanted 724347 found 724505
[  +0.007518] BTRFS info (device dm-1): balance: ended with status: -5

dmesg 라인 중 어느 것도 하드웨어 문제처럼 보이지 않기 때문에 btrfs 버그로 인해 자체 파괴되는 것으로 의심됩니다... :(

또한 SMART가 좋아 보입니다.

# nvme smart-log /dev/nvme0
Smart Log for NVME device:nvme0 namespace-id:ffffffff
critical_warning                        : 0
temperature                             : 39 C (312 Kelvin)
available_spare                         : 100%
available_spare_threshold               : 10%
percentage_used                         : 0%
endurance group critical warning summary: 0
data_units_read                         : 5,042,443
data_units_written                      : 11,709,865
host_read_commands                      : 34,269,040
host_write_commands                     : 109,286,265
controller_busy_time                    : 284
power_cycles                            : 482
power_on_hours                          : 417
unsafe_shutdowns                        : 13
media_errors                            : 0
num_err_log_entries                     : 1
Warning Temperature Time                : 0
Critical Composite Temperature Time     : 0
Thermal Management T1 Trans Count       : 0
Thermal Management T2 Trans Count       : 0
Thermal Management T1 Total Time        : 0
Thermal Management T2 Total Time        : 0

관련 정보