ユーザーが必要に応じて日付と時刻を操作できるようにし、再起動が勝手に発生する可能性があるシステムを使用しています。これは問題ありませんが、1つだけ例外があります。逆方向にジャンプする時間が長い場合、再起動時に次のエラーが表示されます。
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を使用しています。
更新:現在私が行っている解決策は、再起動時にfsckチェックを無効にするためにfstabをハックすることです。私はdebugfs
を使用してディスクの最後のマウント時間を編集しようとしましたが、これはext3ドライブでは正常に機能しますが、ext4で一貫して失敗するようです。
私は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が必要です。 manページから:
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.
はい、manページは「ヒューリスティックス」を綴ることができません。おっとっと。しかし、おそらくコードはとにかく動作します。 :)
ソースコードを変更する以外に、このチェックを削除する方法はないと思います。 fsckからのすべてのエラーを無視すると危険に聞こえますが、他の問題があった場合はどうなりますか?
したがって、次の回避策をお勧めします:fsckを実行する直前にブートスクリプトを変更して、システム日付を将来のある時点(たとえば、32ビットマシンでは2038-01-18)に設定し、ハードウェアから読み取ります。その後の時計(hwclock --hctosys
、ハードウェアとハードウェアクロックでのGMTの使用に応じて、必要に応じてオプションを追加します。)
これは私にとってうまくいった解決策です:
/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
これは、仮想マシンで実行する必要があるようです。そこでは、より詳細な制御が可能です(またはスナップショットに戻るだけです)。