Was macht man, wenn man Linux auf einem Embedded-System ohne RTC, Bildschirm und Tastatur installiert, und bei jedem Booten einen e2fsck-Fehler bekommt, und das System steht?

Checking root file system...fsck from util-linux-ng 2.16.1
ROOT: Superblock last mount time (Fri Mar 26 18:53:39 2010,
   now = Sat Jan  1 00:00:14 2000) is in the future.

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

Klar, wir haben keine Hardware-Uhr bzw. keine Stützbatterie, es ist "Sat Jan 1 00:00:14 2000" (14 Sekunden nach Power-On), NTP läuft so früh noch nicht, und beim letzten Herunterfahren war es März 2010.

Die Lösung ist, diesen Fehler (und nur diesen!) einfach zu ignorieren. Dafür in /etc/e2fsck.conf folgendes einfügen:

# See the e2fsck.conf man page for more info

[options]

# allow fsck to run sanely at any point in time #142850
buggy_init_scripts = yes
broken_system_clock = yes

# allow cancel (CTRL-C)
allow_cancellation = true

[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
}

Hier steht preen_ok = true für "ignorieren" und preen_nomessage = true für "Nicht melden". 0x000031 bzw. 0x000031 sind aus den e2fsck-Sourcen, oder auch an anderen Stellen im Netz zu finden.

buggy_init_scripts = 1 ist nur für 24h Toleranz zuständig, schadet aber trotzdem nicht.

Um die lästigen und bremsenden "One of the files in /etc/{conf.d,init.d} or /etc/rc.conf has a modification time in the future"-Meldungen noch los zu werden, kann man in /etc/conf.d/local.stop (oder das Pendent der jewiligen Distribution) noch folgendes einfügen

# /etc/conf.d/local.stop

# Zurueck in die Steinzeit - 01.01.2000, 01:00 Uhr!
touch -t 198001010100 /etc/conf.d/*
touch -t 198001010100 /etc/init.d/*
touch -t 198001010100 /etc/rc.conf

um die beanstandeten Dateien für das nächste Booten auf den 01.01.1980, 01:00 Uhr zu setzen.

Eine Möglich keit ist natürlich auch, Laufzeit-Basierte fscks auf dem Dateisystem mit tune2fs -i 0 /dev/sdx komplett auszuschalten,.

Um was es geht?

Ein Alix.2D2 - Board mit Gentoo als Router.

Edit (22.04.2011):

In der Schweiz hat man nachgedacht - das Alix 2d13 z.B. hat eine RTC-Batterie - soeben bestellt.

Vorheriger Eintrag Nächster Eintrag