diff --git a/dracut.8 b/dracut.8 index cb9bedd9..851a5ced 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 10b93117..8c3b5867 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 d5f78320..9d85f69b 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 +