如何修复 btrfs 根 inode 错误

How to fix btrfs root inode errors

运行 btrfsck,或更正式地说,btrfs check --repair 给出此输出,指出存在根 inode 错误。修复命令无法解决问题,重新运行将显示相同的输出。系统完全可挂载和运行,但我无法对分区执行高级操作(调整大小)。

sudo btrfs check --repair /dev/sda9
enabling repair mode
Checking filesystem on /dev/sda9
UUID: 82fca3c2-703b-4fae-aec2-6b7df1be71c1
checking extents
Fixed 0 roots.
checking free space cache
cache and super generation don't match, space cache will be invalidated
checking fs roots
root 257 inode 452001 errors 400, nbytes wrong
root 257 inode 452004 errors 400, nbytes wrong
root 257 inode 452005 errors 400, nbytes wrong
root 257 inode 452006 errors 400, nbytes wrong
root 257 inode 452010 errors 400, nbytes wrong
root 257 inode 452011 errors 400, nbytes wrong
root 257 inode 452012 errors 400, nbytes wrong
root 257 inode 1666032 errors 400, nbytes wrong
checking csums
checking root refs
found 33957216263 bytes used err is 0
total csum bytes: 32206988
total tree bytes: 968933376
total fs tree bytes: 886636544
total extent tree bytes: 35323904
btree space waste bytes: 199109273
file data blocks allocated: 41090113536
 referenced 32584159232
btrfs-progs v4.0.1

假设损坏的 inode 是唯一 问题,解决方法是简单地删除它们。可能有一种更快的方法可以做到这一点,但这对我有用。从 here 我了解到您可以使用 find 命令来搜索 inode,如下所示:

find / -inum XXXXXX -print

当然是通过 btrfsck 命令给它指定的 inode。它会向您显示有问题的文件,您可以将其删除。全部删除后,btrfsck就会清零,系统就会正常运行。