dracut/0048-rootfs-block-module-se...

69 lines
2.1 KiB
Diff

From 3cc4c8ba9b43ff646701d4236c1a70860c16d02c Mon Sep 17 00:00:00 2001
From: Harald Hoyer <harald@redhat.com>
Date: Thu, 26 Jul 2012 17:00:47 +0200
Subject: [PATCH] rootfs-block/module-setup.sh: add support for xfs / reiserfs
separate journal device
xfs and reiserfs (among other) supports storing journal data to a
separate device. Unfortunately, XFS requires this information to boot
properly (reiserfs can embed the information in its metadata but you
might want to override it).
Frederic Crozat <fcrozat@suse.com>
---
modules.d/95rootfs-block/module-setup.sh | 41 ++++++++++++++++++++++++++++++++
1 file changed, 41 insertions(+)
diff --git a/modules.d/95rootfs-block/module-setup.sh b/modules.d/95rootfs-block/module-setup.sh
index 243a174..4d87fab 100755
--- a/modules.d/95rootfs-block/module-setup.sh
+++ b/modules.d/95rootfs-block/module-setup.sh
@@ -2,6 +2,47 @@
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh
+search_option() {
+ rootopts=$1
+ option=$2
+ local OLDIFS="$IFS"
+ IFS=,
+ set -- $rootopts
+ IFS="$OLDIFS"
+ while [ $# -gt 0 ]; do
+ case $1 in
+ $option=*)
+ echo ${1#${option}=}
+ break
+ esac
+ shift
+ done
+}
+
+check() {
+ rootopts="defaults"
+ while read dev mp fs opts dump fsck; do
+ # skip comments
+ [ "${dev%%#*}" != "$dev" ] && continue
+
+ if [ "$mp" = "/" ]; then
+ # sanity - determine/fix fstype
+ rootfs=$(find_mp_fstype /)
+ rootfs=${rootfs:-$fs}
+ rootopts=$opts
+ break
+ fi
+ done < "$NEWROOT/etc/fstab"
+
+ [ "$rootfs" = "reiserfs" ] && journaldev=$(search_option $rootopts "jdev")
+ [ "$rootfs" = "xfs" ] && journaldev=$(search_option $rootopts "logdev")
+ if [ -n "$journaldev" ]; then
+ echo "root.journaldev=$journaldev" >> "${initdir}/etc/cmdline.d/95root-jurnaldev.conf"
+ fi
+ return 0
+
+}
+
depends() {
echo fs-lib
}