在允许尝试更改系统时间的同时,如何避免出现“手动运行fsck”消息?


18

我正在使用一个系统,在该系统上,我们希望允许用户随意使用日期和时间,并且可以任意重新启动。这很好,除了一件事:如果有大量的时间向后跳,则重新启动时会出现以下错误:

Checking filesystems
IMAGE2: Superblock last mount time (Tue Mar  1 17:32:48 2011,
        now = Thu Feb 24 17:34:29 2011) is in the future.

IMAGE2: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
        (i.e., without -a or -p options)

*** An error occurred during the file system check.
*** Dropping you to a shell; the system will reboot
*** when you leave the shell.

…然后引导挂起,等待用户控制台输入,即使获得控制台访问权限,也需要输入root密码才能继续。

这绝对不理想。有什么方法可以跳过检查或在重新启动时强制检查自动进行吗?

Google仅提供帮助,如果需要/当被击中时,需要手动运行fsck,这不是我要的。设置时间后手动运行fsck无效,因为此时文件系统仍处于挂载状态,仅完全禁用fsck并不理想。

我正在使用RedHat 6。

更新:我当前正在使用的解决方案是破解fstab以在重新启动时禁用fsck检查。我尝试使用来编辑磁盘上的上次安装时间debugfs,这对于ext3驱动器工作正常,但似乎在ext4上出现不一致的故障。

Answers:


15

我打算建议黑客e2fsck在将来的最后一次装载时间或最后一次写入时间禁用特定检查。这些定义在problem.c / problem.h中,并在super.c中使用。但是从外观上,我发现E2fsprogs 1.41.10向/etc/e2fsck.conf名为broken_system_clock的对象添加了一个新选项。这似乎正是您所需要的,并且由于您使用的是Red Hat Enterprise Linux 6,因此您应该拥有1.41.12,其中包括此选项。从手册页:

   broken_system_clock
          The e2fsck(8) program has some hueristics that assume  that  the
          system clock is correct.  In addition, many system programs make
          similar assumptions.  For example, the UUID library  depends  on
          time  not going backwards in order for it to be able to make its
          guarantees about issuing universally unique ID’s.  Systems  with
          broken  system clocks, are well, broken.  However, broken system
          clocks, particularly in embedded systems, do exist.  E2fsck will
          attempt  to  use  hueristics to determine if the time can no tbe
          trusted; and to skip time-based checks if this is true.  If this
          boolean  is set to true, then e2fsck will always assume that the
          system clock can not be trusted.

是的,手册页不能拼写“启发式”。哎呀。但是大概代码仍然可以工作。:)


看起来很棒,但手册页暗示它仅影响ext2和ext3,而我使用的是ext3和ext4的组合。不过,我现在就去尝试一下,就好像它可以正常工作一样,这正是我想要的。
2011年

1
有用!包括在ext4上。谢谢!
2011年

1

我怀疑是否有一种方法可以删除此检查,而无需修改源代码。忽略fsck中的所有错误听起来很危险,如果还有其他问题怎么办?

因此,我建议采取以下解决方法:在运行fsck之前,更改引导脚本以将系统日期设置为将来的某个时间(例如在32位计算机上为2038-01-18),然后从硬件中读取该日期。之后的时钟(hwclock --hctosys,根据您的硬件和硬件时钟中GMT的使用,根据需要提供更多选项。)


这是否意味着下次将有一个窗口可以再次击中相同的错误?也就是说,上次安装时间是2038-01-18,因此,如果当前时间也设置为2038-01-18,则存在一种竞争条件,在这种情况下,我们(就系统而言)正在尝试在上次安装之前再次进行安装。
2011年

@me_and:是的,恐怕我的恶意软件无法帮助对抗恶意用户。如果这是您要面对的问题,则修补fsck似乎是最好的选择。
吉尔(Gilles)“所以,别再邪恶了”,

0

听起来应该在虚拟机中运行,在虚拟机中您可以拥有更多控制权(或仅恢复为快照)。


在VM中运行对我们来说真的不是一个选择,无论如何,仅恢复到快照意味着我们将删除用户可能已设置的所有其他状态。
2011年

0

这是一个对我有用的解决方案:

创建/etc/e2fsck.conf:

[problems]

# Superblock last mount time is in the future (PR_0_FUTURE_SB_LAST_MOUNT).
0x000031 = {
preen_ok = true
preen_nomessage = true
}

# Superblock last write time is in the future (PR_0_FUTURE_SB_LAST_WRITE).
0x000032 = {
preen_ok = true
preen_nomessage = true
}

有关此修复的更多信息,请参见:

http://stillstup.blogspot.com/2010/02/superblock-last-mount-time-is-in-future.html

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.