如何 btrfs 检查根分区

如何 btrfs 检查根分区

我确信我脑子一片空白是因为时间太晚了,但是我该如何对根分区执行 btrfs 检查呢?

该设备需要卸载,但由于它是根分区,因此无法卸载......

谢谢

答案1

如果您正在使用systemd,则可以传递内核参数fsck.mode=force来检查所有文件系统。这将修复所有“安全”错误。

如果您仍然有问题(请检查您的日志),请fsck.repair=yes按照上述方法操作,以尝试修复所有问题。

shutdown -F有关此选项和其他选项(例如)的来源upstartsysvinit请参阅这里

答案2

警告fsck.btrfs实用程序什么也没做btrfs check并返回成功!手册页解释说必须使用单独的命令。请参见此处:https://man7.org/linux/man-pages/man8/fsck.btrfs.8.html

唯一办法检查 BTRFS 系统需要使用它自己的工具btrfs check,您必须卸载根卷,因此唯一的选择是真正从 livecd 启动。

任何最终导致打电话的建议fsck.btrfs都是完全错误的,危险的,这只是一个打印出消息但不执行任何操作的存根。这还包括带有fsck.mode内核命令行选项或文件的答案。.forcefsck

[root@nuc ~]# cat /usr/sbin/fsck.btrfs
#!/usr/bin/sh -f
AUTO=false
while getopts ":aApy" c
do
    case $c in
    a|A|p|y)    AUTO=true;;
    esac
done
shift $(($OPTIND - 1))
eval DEV=\${$#}
if [ ! -e $DEV ]; then
    echo "$0: $DEV does not exist"
    exit 8
fi
if ! $AUTO; then
    echo "If you wish to check the consistency of a BTRFS filesystem or"
    echo "repair a damaged filesystem, see btrfs(8) subcommand 'check'."
fi
exit 0

但是如果您不确定断电或类似情况后一切是否正常,btrfs check可以对已挂载的文件系统执行只读检查:

[root@nuc ~]# btrfs check --readonly --force /dev/sda5
Opening filesystem to check...
WARNING: filesystem mounted, continuing because of --force
Checking filesystem on /dev/sda5
UUID: 8c44de9c-c91b-4ac4-857b-da191dc62274
[1/7] checking root items
[2/7] checking extents
[3/7] checking free space cache
[4/7] checking fs roots
[5/7] checking only csums items (without verifying data)
[6/7] checking root refs
[7/7] checking quota groups skipped (not enabled on this FS)
found 3628683264 bytes used, no error found
total csum bytes: 3093864
total tree bytes: 136937472
total fs tree bytes: 126074880
total extent tree bytes: 6455296
btree space waste bytes: 23047273
file data blocks allocated: 5676253184
 referenced 4705763328

答案3

从 livecd 启动并从那里执行检查。

相关内容