Btrfs, 체크섬 손상

Btrfs, 체크섬 손상

3개의 디스크에 Btrfs가 설정되어 있고 메타데이터와 데이터는 RAID1에 있습니다. 하지만 이제는 복구할 수 없는 체크섬 오류가 발생했습니다.

두 복사본의 체크섬은 동일하며 예상 체크섬과 1비트만 다릅니다. 따라서 체크섬이 디스크에 기록되기 전에 약간의 반전이 있는 것으로 생각됩니다(컴퓨터에 ECC RAM이 없음). 이 파일 시스템에 쓰기 전에 실제 파일의 복사본을 다른 컴퓨터에 가지고 있는데 아래에서 볼 수 있듯이 파일 시스템의 I/O 오류로 인해 데이터를 읽을 수 없어서 ' 비교하지 마세요.

이 오류를 해결하려면 어떻게 해야 합니까?

일부 세부정보:

$ uname -a
Linux stan 4.15.0-112-generic #113-Ubuntu SMP Thu Jul 9 23:41:39 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
$ btrfs --version
btrfs-progs v4.15.1
$ sudo btrfs fi usage /media/btrfs/
Overall:
    Device size:           7.28TiB
    Device allocated:          3.91TiB
    Device unallocated:        3.36TiB
    Device missing:          0.00B
    Used:              3.83TiB
    Free (estimated):          1.72TiB  (min: 1.72TiB)
    Data ratio:               2.00
    Metadata ratio:           2.00
    Global reserve:      512.00MiB  (used: 0.00B)

Data,RAID1: Size:1.95TiB, Used:1.91TiB
   /dev/sdb    1.95TiB
   /dev/sdc  998.00GiB
   /dev/sdd 1001.00GiB

Metadata,RAID1: Size:4.00GiB, Used:2.63GiB
   /dev/sdb    4.00GiB
   /dev/sdc    3.00GiB
   /dev/sdd    1.00GiB

System,RAID1: Size:64.00MiB, Used:304.00KiB
   /dev/sdb   64.00MiB
   /dev/sdc   64.00MiB

Unallocated:
   /dev/sdb    1.68TiB
   /dev/sdc  861.95GiB
   /dev/sdd  861.02GiB

미사일 발사 중지:

$ sudo btrfs scrub status /media/btrfs/

scrub status for xxxxxx
    scrub started at Mon Aug 24 11:23:27 2020 and finished after 03:41:54
    total bytes scrubbed: 3.81TiB with 2 errors
    error details: csum=2
    corrected errors: 0, uncorrectable errors: 2, unverified errors: 0

스크러빙 후 Dmesg 오류가 발생했습니다.

$ dmesg
...
196755.786038] BTRFS warning (device sdb): checksum error at logical 3099310968832 on dev /dev/sdb, physical 1300730499072, root 5223, inod
e 6521311, offset 7614464, length 4096, links 1 (path: users/joachim/Bilder/Canon/270CANON/IMG_7003.CR2)
[196755.786168] BTRFS warning (device sdb): checksum error at logical 3099310968832 on dev /dev/sdb, physical 1300730499072, root 5303, inod
e 6521311, offset 7614464, length 4096, links 1 (path: users/joachim/Bilder/Canon/270CANON/IMG_7003.CR2)
[196755.786245] BTRFS warning (device sdb): checksum error at logical 3099310968832 on dev /dev/sdb, physical 1300730499072, root 5302, inod
e 6521311, offset 7614464, length 4096, links 1 (path: users/joachim/Bilder/Canon/270CANON/IMG_7003.CR2)
...
[196755.788274] BTRFS error (device sdb): bdev /dev/sdb errs: wr 0, rd 0, flush 0, corrupt 2, gen 0
[196755.814044] BTRFS error (device sdb): unable to fixup (regular) error at logical 3099310968832 on dev /dev/sdb

블록 내부를 확인하세요.

$ sudo btrfs inspect-internal logical-resolve -v 3099310968832 /media/btrfs/
ioctl ret=0, total_size=4096, bytes_left=3456, bytes_missing=0, cnt=78, missed=0
ioctl ret=0, bytes_left=4023, bytes_missing=0, cnt=1, missed=0
/media/btrfs//snapshots/stansafe.20200601T032501+0200/users/joachim/Bilder/Canon/270CANON/IMG_7003.CR2
ioctl ret=0, bytes_left=4023, bytes_missing=0, cnt=1, missed=0
/media/btrfs//snapshots/stansafe.20200910T032501+0200/users/joachim/Bilder/Canon/270CANON/IMG_7003.CR2
ioctl ret=0, bytes_left=4023, bytes_missing=0, cnt=1, missed=0
/media/btrfs//snapshots/stansafe.20200909T032502+0200/users/joachim/Bilder/Canon/270CANON/IMG_7003.CR2
...

파일을 확인해 보세요.

$ sha256sum /media/btrfs//stansafe/users/joachim/Bilder/Canon/270CANON/IMG_7003.CR2
sha256sum: /media/btrfs//stansafe/users/joachim/Bilder/Canon/270CANON/IMG_7003.CR2: Input/output error

$ dmesg
...
[1642985.509498] BTRFS warning (device sdb): csum failed root 259 ino 6521311 off 7614464 csum 0x151ad4ce expected csum 0x150ad4ce mirror 1
[1642985.509942] BTRFS warning (device sdb): csum failed root 259 ino 6521311 off 7614464 csum 0x151ad4ce expected csum 0x150ad4ce mirror 2

답변1

Linux 커널 5.11에는 파일 체크섬을 마운트하고 무시하는 옵션이 도입되었습니다. 이렇게 하면 데이터가 잘못된 csum에서 복사될 수 있습니다.

mount -o rescue=ignoredatacsums /dev/sdX /mnt

이를 통해 파일이 최소한으로 손상되었고 일종의 패리티가 있는 경우 파일을 완전히 복구할 수 있습니다.2스트로크

원천: https://btrfs.readthedocs.io/en/latest/btrfs-man5.html

답변2

3개의 하드 드라이브 또는 3개의 파티션에 모든 파일의 복사본 3개를 저장하려는 경우

raid1c3 사용

이렇게 하면 하드 드라이브 2개를 잃어버리더라도 하드 드라이브 1개에 있는 데이터는 그대로 유지됩니다.

raid1은 사용하는 하드 드라이브 수에 관계없이 2개의 복사본만 저장합니다.

관련 정보