我确信我脑子一片空白是因为时间太晚了,但是我该如何对根分区执行 btrfs 检查呢?
该设备需要卸载,但由于它是根分区,因此无法卸载......
谢谢
答案1
如果您正在使用systemd
,则可以传递内核参数fsck.mode=force
来检查所有文件系统。这将修复所有“安全”错误。
如果您仍然有问题(请检查您的日志),请fsck.repair=yes
按照上述方法操作,以尝试修复所有问题。
shutdown -F
有关此选项和其他选项(例如)的来源upstart
,sysvinit
请参阅这里。
答案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 启动并从那里执行检查。