我的网络服务器出现了问题:当它运行了很长一段时间后,由于某种原因突然关闭,需要很长时间才能启动。
我解决这个问题的方法是创建一个 cron 来不时地重启服务器(我为此受到了侮辱,请保持友好)。重启速度非常快,服务器能够在请求超时之前响应请求,所以我对此很满意。
但是现在有人告诉我,造成这种情况的原因可能是在 X 天后强制执行 fsck,并且在 Y 安装后也强制执行 fsck,所以我的修复不会有太大帮助。
所以问题是我应该如何处理 fsck?强制它更频繁地运行,还是禁用它?它可以随时运行,还是必须在启动期间运行?也欢迎提供一个如何使用 tune2fs 执行此操作的示例。
答案1
首先回答最简单的问题:“随时”(即系统运行时)检查文件系统被称为“在线”检查,一般不支持。原因很简单:挂载文件系统时,内核会对实际的块设备执行任意操作——这很好,因为它会跟踪正在执行的操作。但是当你将 fsck 也加入其中时,它也会弄乱原始块设备并且不通知内核关于它正在做什么。因此,当对磁盘进行更改时,它们本质上是互相干扰的,最终导致文件系统损坏。即使您只是在只读模式下“检查”,fsck 返回的结果也将毫无意义,因为 fsck 不知道内核正在做什么。
要更改挂载文件系统时检查文件系统的频率,可以使用 tune2fs,正如您提到的。假设您希望每 30 次重启进行一次 fsck。请执行
# tune2fs -c 30 /dev/sdaX
(用块设备替代您的文件系统。)
或者,如果出于某种原因你想完全禁用基于挂载计数的检查,
# tune2fs -c 0 /dev/sdaX
如果您更喜欢查看日历,可以使用-i
。例如,要查看每周,请执行
# tune2fs -i 1w /dev/sdaX
您可以使用d
天、w
周和月。同样,要禁用基于日历的检查,请为间隔 m
指定一个值。0
请,请,请不要禁用所有检查。有时,这会损坏您的文件系统。
一般来说,如果文件系统有日志记录,那么你可以使用稍长的间隔,尽管它不是替代品。有关更多信息,请阅读 e2fsck 和 tune2fs 的手册页;它们是我获得大部分相关信息的地方。希望这对你有所帮助!
答案2
更改计划重启以包含以下之一
touch /forcefsck; reboot
或者
shutdown -rF now
它的存在/forcefsck
将会告诉操作系统扫描磁盘(无论如何我很确定这是第二个命令所做的。
使用 cron 将此操作安排在服务器负载最小的时间段内,并在确信其正常运行后禁用其他计划的扫描(日期/挂载次数)。