summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHarald Hoyer <harald@redhat.com>2009-11-26 11:15:59 +0100
committerHarald Hoyer <harald@redhat.com>2009-11-26 19:12:10 +0100
commit57c6b805ce0a2a5bffa6ad862565b47414b41635 (patch)
tree3a9a4d282ccaf99b43f0a8b08495183ae5acc866
parent17ed15182ab1841a6249c1dfab7a27f63ff89ea3 (diff)
rootfs-block/mount-root: remount root with /etc/fstab filesystem options
-rw-r--r--dracut.89
-rwxr-xr-xmodules.d/95rootfs-block/mount-root.sh30
-rwxr-xr-xmodules.d/99base/init2
3 files changed, 39 insertions, 2 deletions
diff --git a/dracut.8 b/dracut.8
index cb9bedd..851a5ce 100644
--- a/dracut.8
+++ b/dracut.8
@@ -111,7 +111,14 @@ specify e.g. \fI/dev/sda1\fR or
"auto" if not specified, e.g. \fIrootfstype=ext3\fR
.TP
.B rootflags=<mount options>
-specify additional mount options for the root filesystem
+specify additional mount options for the root filesystem. If not set, /etc/fstab
+of the real root will be parsed for special mount options and mounted
+accordingly.
+.TP
+.B rd_NO_FSTAB
+do not honor special mount options for the root filesystem found in
+/etc/fstab of the real root.
+
.SH I18N
e.g. LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYTABLE=de-latin1-nodeadkeys
.TP
diff --git a/modules.d/95rootfs-block/mount-root.sh b/modules.d/95rootfs-block/mount-root.sh
index 10b9311..8c3b586 100755
--- a/modules.d/95rootfs-block/mount-root.sh
+++ b/modules.d/95rootfs-block/mount-root.sh
@@ -1,5 +1,33 @@
#!/bin/sh
+. /lib/dracut-lib.sh
+
if [ -n "$root" -a -z "${root%%block:*}" ]; then
- mount -t ${fstype:-auto} -o "$rflags" "${root#block:}" "$NEWROOT" && ROOTFS_MOUNTED=yes
+ mount -t ${fstype:-auto} -o "$rflags" "${root#block:}" "$NEWROOT" \
+ && ROOTFS_MOUNTED=yes
+
+ if ! getarg rd_NO_FSTAB \
+ && ! getarg rootflags \
+ && [ -f "$NEWROOT/etc/fstab" ] \
+ && ! [ -L "$NEWROOT/etc/fstab" ]; then
+ # if $NEWROOT/etc/fstab contains special mount options for
+ # the root filesystem,
+ # remount it with the proper options
+ rootfs="auto"
+ rootopts="defaults"
+ while read dev mp fs opts rest; do
+ if [ "$mp" = "/" ]; then
+ rootfs=$fs
+ rootopts=$opts
+ break
+ fi
+ done < "$NEWROOT/etc/fstab"
+
+ if [ "$rootopts" != "defaults" ]; then
+ umount $NEWROOT
+ info "Remounting ${root#block:} with -o $rflags,$rootopts"
+ mount -t "$rootfs" -o "$rflags","$rootopts" \
+ "${root#block:}" "$NEWROOT" 2>&1 | vinfo
+ fi
+ fi
fi
diff --git a/modules.d/99base/init b/modules.d/99base/init
index d5f7832..9d85f69 100755
--- a/modules.d/99base/init
+++ b/modules.d/99base/init
@@ -282,3 +282,5 @@ exec switch_root "$NEWROOT" "$INIT" $initargs || {
echo "file a bug against dracut."
emergency_shell
}
+# vim:ts=8:sw=4:sts=4:et
+