From: Harald Hoyer Date: Thu, 26 Nov 2009 10:15:59 +0000 (+0100) Subject: rootfs-block/mount-root: remount root with /etc/fstab filesystem options X-Git-Tag: 003~21 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=57c6b805ce0a2a5bffa6ad862565b47414b41635;p=thirdparty%2Fdracut.git rootfs-block/mount-root: remount root with /etc/fstab filesystem options --- diff --git a/dracut.8 b/dracut.8 index cb9bedd9b..851a5ced9 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= -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 10b93117e..8c3b58677 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 d5f78320b..9d85f69b2 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 +