Comment 14 for bug 563618

Revision history for this message
Oliver Grawert (ogra) wrote :

here is a proof of concept code snippet (untested yet) we could put in initramfs to work around the issue ...

#!/bin/sh
#
# use the fixrtc cmdline option in your bootloader to
# automatically set the hardware clock to the date of
# the last mount of your root filesystem to avoid fsck
# to get confused by the superblock being in the future

BROKEN_CLOCK=""

for x in $(cat /proc/cmdline); do
 case ${x} in
 root=*)
  UUID=${x#*=}
  UUID="${UUID#*=}"
 ;;
 fixrtc)
  BROKEN_CLOCK=1
 ;;
 esac
done

if [ -n $BROKEN_CLOCK ];then
 ROOTDISK=$(readlink -f /dev/disk/by-uuid/$UUID)

 TIMESTR=$(dumpe2fs -h $ROOTDISK 2>/dev/null|grep "Last mount time")
 TIME=${TIMESTR#*:}

 DISKYEAR=$(date -d "${TIME}" +%Y)
 CLOCKYEAR=$(date +%Y)

 if [ $DISKYEAR -gt $CLOCKYEAR ]; then
  hwclock --set --date="${TIME}"
 fi
fi