[root@fedora-arm ~]# df -Th /
Filesystem Type Size Used Avail Use% Mounted on
/dev/root nfs 7.4G 1.8G 5.3G 25% /
Why is it NFS-mounting a USB flash drive? And /dev/root doesn't tell me what the device name is. I was expecting to see something like sda1 or mmcblk0p1.
I thought that was weird, so I edited /etc/fstab and changed the device and filesystem type:
[root@fedora-arm ~]# diff -u /etc/fstab.ORIG /etc/fstab
--- /etc/fstab.ORIG 2011-11-14 10:09:40.000000000 -0600
+++ /etc/fstab 2011-11-14 12:48:58.000000000 -0600
@@ -1,4 +1,4 @@
-/dev/root / nfs defaults 1 1
+/dev/sda1 / ext3 defaults 1 1
And then I rebooted my PandaBoard and quickly learned why it's set to NFS:
Welcome to Fedora
Press 'I' to enter interactive startup.
Starting udev: [ OK ]
Setting hostname fedora-arm: [ OK ]
Setting up Logical Volume Management: No volume groups found
[ OK ]
Checking filesystems
Checking all file systems.
[/sbin/fsck.ext3 (1) -- /] fsck.ext3 -a /dev/sda1
fedoraroot: Superblock last mount time (Mon Nov 14 11:19:35 2011,
now = Sat Jan 1 00:00:01 2000) is in the future.
fedoraroot: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
(i.e., without -a or -p options)
[FAILED]
There's no battery-backed clock on the PandaBoard so the clock gets reset to 2000-01-01 00:00:00 every time it's power-cycled, and this causes the Fedora boot scripts to get confused and force a filesystem check.
Apparently mounting the root filesystem as NFS is one way to workaround this problem.
I mentioned this in #fedora-arm on freenode and Chris Tyler suggested modifying the boot scripts to set the clock to 1 minute past the previous write time of the root filesystem.
Here's what I came up with:
--- /etc/rc.d/rc.sysinit.ORIG 2011-03-08 15:51:46.000000000 -0600
+++ /etc/rc.d/rc.sysinit 2011-11-14 12:44:28.441405990 -0600
@@ -577,6 +577,15 @@
fi
if [ -z "$fastboot" -a "$READONLY" != "yes" ]; then
+ # set the clock on the PandaBoard to 1 minute after last write
+ # time of root filesystem to avoid "last mount is in the future"
+ echo "Current system clock is $(date)"
+ rootdev=$(egrep '\s/\s' /etc/fstab | awk '{print $1}')
+ lastwrite=$(dumpe2fs -h $rootdev 2>/dev/null | \
+ grep "Last write time" | sed -e 's/^[^:]*:\s*//')
+ echo "Setting system clock to 1 minute after $lastwrite"
+ date -s "$lastwrite + 1 minute"
+
STRING=$"Checking filesystems"
echo $STRING
fsck -T -t noopts=_netdev -A $fsckoptions
Notice the new messages (red text) during boot:
Welcome to Fedora
Press 'I' to enter interactive startup.
Starting udev: [ OK ]
Setting hostname fedora-arm: [ OK ]
Setting up Logical Volume Management: No volume groups found
[ OK ]
Current system clock is Sat Jan 1 00:00:01 CST 2000
Setting system clock to 1 minute after Mon Nov 14 12:45:36 2011
Mon Nov 14 12:46:36 CST 2011
Checking filesystems
Checking all file systems.
[/sbin/fsck.ext3 (1) -- /] fsck.ext3 -a /dev/sda1
fedoraroot: clean, 69076/489600 files, 487736/1957605 blocks
[ OK ]
...
And the root filesystem and device look correct now!
[root@fedora-arm ~]# df -Th /
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda1 ext3 7.4G 1.8G 5.3G 25% /
Note that I do have ntpd start later in the boot process which sets the actual correct time.
Interesting solution. I tend to use
ReplyDelete# tune2fs -i 0 $rootdev
and have the time set by NTP later.
By using the last-write time and assuming the board is always running, the time-reset on a reboot is kept minimal. I expect this to works on disconnected (no NTP) systems too, which is an advantage over the tune2fs setting.
Thanks for sharing!