summaryrefslogtreecommitdiffstats
path: root/modules.d/90dm
diff options
context:
space:
mode:
Diffstat (limited to 'modules.d/90dm')
-rw-r--r--modules.d/90dm/11-dm.rules5
-rw-r--r--modules.d/90dm/59-persistent-storage-dm.rules15
-rwxr-xr-xmodules.d/90dm/dm-pre-udev.sh4
-rwxr-xr-xmodules.d/90dm/dm-shutdown.sh53
-rwxr-xr-xmodules.d/90dm/module-setup.sh38
5 files changed, 115 insertions, 0 deletions
diff --git a/modules.d/90dm/11-dm.rules b/modules.d/90dm/11-dm.rules
new file mode 100644
index 0000000..89941c4
--- /dev/null
+++ b/modules.d/90dm/11-dm.rules
@@ -0,0 +1,5 @@
+SUBSYSTEM!="block", GOTO="dm_end"
+KERNEL!="dm-[0-9]*", GOTO="dm_end"
+ACTION!="add|change", GOTO="dm_end"
+OPTIONS+="db_persist"
+LABEL="dm_end"
diff --git a/modules.d/90dm/59-persistent-storage-dm.rules b/modules.d/90dm/59-persistent-storage-dm.rules
new file mode 100644
index 0000000..3e0b8f6
--- /dev/null
+++ b/modules.d/90dm/59-persistent-storage-dm.rules
@@ -0,0 +1,15 @@
+SUBSYSTEM!="block", GOTO="dm_end"
+ACTION!="add|change", GOTO="dm_end"
+# Also don't process disks that are slated to be a multipath device
+ENV{DM_MULTIPATH_DEVICE_PATH}=="1", GOTO="dm_end"
+
+KERNEL!="dm-[0-9]*", GOTO="dm_end"
+ACTION=="add", GOTO="dm_end"
+IMPORT{program}="/sbin/dmsetup info -c --nameprefixes --unquoted --rows --noheadings -o name,uuid,suspended,readonly,major,minor,open,tables_loaded,names_using_dev -j%M -m%m"
+ENV{DM_NAME}!="?*", GOTO="dm_end"
+ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}=="1", GOTO="dm_end"
+ENV{DM_UUID}=="CRYPT-TEMP-?*", GOTO="dm_end"
+ENV{DM_UUID}!="?*", ENV{DM_NAME}=="temporary-cryptsetup-?*", GOTO="dm_end"
+IMPORT{builtin}="blkid"
+
+LABEL="dm_end"
diff --git a/modules.d/90dm/dm-pre-udev.sh b/modules.d/90dm/dm-pre-udev.sh
new file mode 100755
index 0000000..ba8d962
--- /dev/null
+++ b/modules.d/90dm/dm-pre-udev.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+strstr "$(cat /proc/misc)" device-mapper || modprobe dm_mod
+modprobe dm_mirror 2> /dev/null
diff --git a/modules.d/90dm/dm-shutdown.sh b/modules.d/90dm/dm-shutdown.sh
new file mode 100755
index 0000000..bd7134a
--- /dev/null
+++ b/modules.d/90dm/dm-shutdown.sh
@@ -0,0 +1,53 @@
+#!/bin/sh
+
+_remove_dm() {
+ local dev="$1"
+ local s
+ local devname
+
+ for s in /sys/block/"${dev}"/holders/dm-*; do
+ [ -e "${s}" ] || continue
+ _remove_dm "${s##*/}"
+ done
+ # multipath devices might have MD devices on top,
+ # which are removed after this script. So do not
+ # remove those to avoid spurious errors
+ case $(cat /sys/block/"${dev}"/dm/uuid) in
+ mpath-*)
+ return 0
+ ;;
+ *)
+ read -r devname < /sys/block/"${dev}"/dm/name
+ dmsetup -v --noudevsync remove "$devname" || return $?
+ ;;
+ esac
+ return 0
+}
+
+_do_dm_shutdown() {
+ local ret=0
+ local final="$1"
+ local dev
+
+ info "Disassembling device-mapper devices"
+ for dev in /sys/block/dm-*; do
+ [ -e "${dev}" ] || continue
+ if [ "x$final" != "x" ]; then
+ _remove_dm "${dev##*/}" || ret=$?
+ else
+ _remove_dm "${dev##*/}" > /dev/null 2>&1 || ret=$?
+ fi
+ done
+ if [ "x$final" != "x" ]; then
+ info "dmsetup ls --tree"
+ dmsetup ls --tree 2>&1 | vinfo
+ fi
+ return $ret
+}
+
+if command -v dmsetup > /dev/null \
+ && [ "x$(dmsetup status)" != "xNo devices found" ]; then
+ _do_dm_shutdown "$1"
+else
+ :
+fi
diff --git a/modules.d/90dm/module-setup.sh b/modules.d/90dm/module-setup.sh
new file mode 100755
index 0000000..0c4cba3
--- /dev/null
+++ b/modules.d/90dm/module-setup.sh
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+# called by dracut
+check() {
+ require_binaries dmsetup || return 1
+ return 255
+}
+
+# called by dracut
+depends() {
+ return 0
+}
+
+# called by dracut
+installkernel() {
+ instmods '=drivers/md' dm_mod dm-cache dm-cache-mq dm-cache-cleaner
+}
+
+# called by dracut
+install() {
+ modinfo -k "$kernel" dm_mod > /dev/null 2>&1 \
+ && inst_hook pre-udev 30 "$moddir/dm-pre-udev.sh"
+
+ inst_multiple dmsetup
+
+ inst_rules 10-dm.rules 13-dm-disk.rules 95-dm-notify.rules
+ # Gentoo ebuild for LVM2 prior to 2.02.63-r1 doesn't install above rules
+ # files, but provides the one below:
+ inst_rules 64-device-mapper.rules
+ # debian udev rules
+ inst_rules 60-persistent-storage-dm.rules 55-dm.rules
+
+ inst_rules "$moddir/11-dm.rules"
+
+ inst_rules "$moddir/59-persistent-storage-dm.rules"
+
+ inst_hook shutdown 25 "$moddir/dm-shutdown.sh"
+}