저는 전체 디스크 암호화 기능을 갖춘 시스템에서 Arch Linux를 실행하고 있으며 스토리지는 Samsung 950 Pro NVMe 드라이브(512GB)입니다. 나는 이 컴퓨터를 몇 달 동안 사용해왔습니다. 지금까지 나쁜 행동은 없었습니다. (디스크에는 512개 중 21GB만 사용했습니다.)
btrfs-progs v4.5.1
오늘은 정상적으로 시스템을 사용하고 웹서핑을 했습니다. Firefox가 뚜렷한 이유 없이 갑자기 응답을 멈췄습니다. 그러면 플라즈마가 반응을 멈춥니다. 나는 KDE를 그만둘 수 없습니다.
사용자 세션을 종료하고(pkill -u me) startx에 지쳤습니다. 그때 내 루트 파일 시스템이 읽기 전용이라는 것을 알게 되었습니다.
첫 번째 단계는 재부팅합니다. 그것은 도움이 되지 않습니다.
루트 파일 시스템은 마운트되지 않습니다. 오류 메시지는 다음과 같습니다.
running hook [encrypt]
performing fsck on /dev/mapper/cryptroot
mounting /dev/mapper/cryptroot on real root
BTRFS error (device dm-0) in btrfs_replay_log: 2421: errno=-22 unknown (failed to recover log tree)
BTRFS error (device dm-0): cleaner transaction attach returned -30
BTRFS open_ctree failed
mount: wrong fs type, bad option, bad superblock on /dev/mapper/cryptroot
dropped into emergency shell
손으로 직접 작성하다 보니 작은 구두점 등은 내용이 정확하지 않습니다.
Journalctl -p3은 관련성이 있어 보이는 어떤 것도 보고하지 않습니다.
편집하다: 반복해서 다시 시작해도 문제가 해결되지 않습니다. 오류는 여전히 동일합니다.
LiveUSB 환경으로 부팅하고 다음 명령을 실행합니다.
cryptsetup open --type luks /dev/xxx cryptroot
mount -t btrfs -o noatime,nodiratime,ssd,compress=lzo,defaults,space_cache,subvolid=257 /dev/mapper/cryptroot /mnt
오류 메시지는 동일합니다.
[ 2300.967048] BTRFS info (device dm-0): use ssd allocation scheme
[ 2300.967058] BTRFS info (device dm-0): use lzo compression
[ 2300.967066] BTRFS info (device dm-0): disk space caching is enabled
[ 2300.967069] BTRFS: has skinny extents
[ 2300.995393] BTRFS: error (device dm-0) in btrfs_replay_log:2413: errno=-22 unknown (Failed to recover log tree)
[ 2300.997617] BTRFS info (device dm-0): delayed_refs has NO entry
[ 2300.997673] BTRFS error (device dm-0): cleaner transaction attach returned -30
[ 2301.035405] BTRFS: open_ctree failed
편집 2:
다음 두 링크를 기반으로 합니다.
https://btrfs.wiki.kernel.org/index.php/Problem_FAQ
https://btrfs.wiki.kernel.org/index.php/Btrfs-zero-log
나는 기회를 잡고 다음 명령을 실행하기로 결정했습니다.
btrfs rescue zero-log
이것은 작동하며 파일 시스템을 마운트할 수 있습니다.
편집 3:
btrfs check --repair를 실행했습니다. 출력은 다음과 같습니다.
root@broken / # umount /mnt
root@broken / # btrfs check --repair /dev/mapper/cryptroot
enabling repair mode
Checking filesystem on /dev/mapper/cryptroot
checking extents
bad metadata [292414476288, 292414492672) crossing stripe boundary
bad metadata [292414541824, 292414558208) crossing stripe boundary
bad metadata [292414672896, 292414689280) crossing stripe boundary
bad metadata [292414869504, 292414885888) crossing stripe boundary
bad metadata [292415000576, 292415016960) crossing stripe boundary
bad metadata [292415066112, 292415082496) crossing stripe boundary
bad metadata [292415131648, 292415148032) crossing stripe boundary
bad metadata [292415262720, 292415279104) crossing stripe boundary
bad metadata [292415328256, 292415344640) crossing stripe boundary
bad metadata [292415393792, 292415410176) crossing stripe boundary
repaired damaged extent references
Fixed 0 roots.
checking free space cache
cache and super generation don't match, space cache will be invalidated
checking fs roots
checking csums
checking root refs
checking quota groups
Ignoring qgroup relation key 258
Ignoring qgroup relation key 263
Ignoring qgroup relation key 71776119061217538
Ignoring qgroup relation key 71776119061217543
Counts for qgroup id: 257 are different
our: referenced 10412273664 referenced compressed 10412273664
disk: referenced 10411311104 referenced compressed 10411311104
diff: referenced 962560 referenced compressed 962560
our: exclusive 10412273664 exclusive compressed 10412273664
disk: exclusive 10412273664 exclusive compressed 10412273664
found 21570773057 bytes used err is 0
total csum bytes: 19563456
total tree bytes: 403767296
total fs tree bytes: 349667328
total extent tree bytes: 27328512
btree space waste bytes: 66313360
file data blocks allocated: 39882014720
referenced 28043988992
extent buffer leak: start 20987904 len 16384
extent buffer leak: start 292688068608 len 16384
extent buffer leak: start 60915712 len 16384
extent buffer leak: start 29569581056 len 16384
extent buffer leak: start 29569597440 len 16384
extent buffer leak: start 292412063744 len 16384
extent buffer leak: start 292405870592 len 16384
extent buffer leak: start 292405936128 len 16384
extent buffer leak: start 292413964288 len 16384
그런 다음 dmesg를 확인하고 다음 오류 메시지를 보았습니다.
[ 4925.562422] BTRFS info (device dm-0): use ssd allocation scheme
[ 4925.562432] BTRFS info (device dm-0): use lzo compression
[ 4925.562440] BTRFS info (device dm-0): disk space caching is enabled
[ 4925.562444] BTRFS: has skinny extents
[ 4925.578705] BTRFS error (device dm-0): qgroup generation mismatch, marked as inconsistent
[ 4925.584033] BTRFS: checking UUID tree
내 질문:
- 그 원인은 무엇입니까?
- 다음에 무엇을 해야 합니까?
목표를 벗어난 참조: https://wiki.archlinux.org/index.php/Btrfs#BTRFS:_open_ctree_failed (이것은 내 문제가 아닌 것 같습니다. 다중 장치 btrfs fs가 없으며 /etc/mkinitcpio.conf의 HOOKS에서 btrfs를 사용하지 않습니다.)