]>
Commit | Line | Data |
---|---|---|
95d2dabc HH |
1 | #!/bin/bash |
2 | # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- | |
3 | # ex: ts=8 sw=4 sts=4 et filetype=sh | |
4 | ||
8bcfd683 | 5 | # called by dracut |
95d2dabc | 6 | check() { |
29b10e65 | 7 | local _rootdev |
95d2dabc | 8 | # No mdadm? No mdraid support. |
30e6e809 | 9 | require_binaries mdadm || return 1 |
95d2dabc | 10 | |
1b7fd0fa | 11 | [[ $hostonly ]] || [[ $mount_needs ]] && { |
281327f7 HH |
12 | for dev in "${!host_fs_types[@]}"; do |
13 | [[ "${host_fs_types[$dev]}" != *_raid_member ]] && continue | |
14 | ||
15 | DEVPATH=$(get_devpath_block "$dev") | |
16 | ||
17 | for holder in "$DEVPATH"/holders/*; do | |
18 | [[ -e "$holder" ]] || continue | |
19 | [[ -e "$holder/md" ]] && return 0 | |
20 | break | |
21 | done | |
22 | ||
d351541e HH |
23 | done |
24 | return 255 | |
95d2dabc HH |
25 | } |
26 | ||
27 | return 0 | |
28 | } | |
29 | ||
8bcfd683 | 30 | # called by dracut |
95d2dabc HH |
31 | depends() { |
32 | echo rootfs-block | |
33 | return 0 | |
34 | } | |
35 | ||
8bcfd683 | 36 | # called by dracut |
95d2dabc HH |
37 | installkernel() { |
38 | instmods =drivers/md | |
39 | } | |
40 | ||
8bcfd683 | 41 | # called by dracut |
1743473b HH |
42 | cmdline() { |
43 | local _activated dev line UUID | |
44 | declare -A _activated | |
45 | ||
46 | for dev in "${!host_fs_types[@]}"; do | |
47 | [[ "${host_fs_types[$dev]}" != *_raid_member ]] && continue | |
48 | ||
49 | UUID=$( | |
50 | /sbin/mdadm --examine --export $dev \ | |
51 | | while read line; do | |
52 | [[ ${line#MD_UUID=} = $line ]] && continue | |
53 | printf "%s" "${line#MD_UUID=} " | |
54 | done | |
55 | ) | |
56 | ||
57 | if ! [[ ${_activated[${UUID}]} ]]; then | |
58 | printf "%s" " rd.md.uuid=${UUID}" | |
59 | _activated["${UUID}"]=1 | |
60 | fi | |
61 | ||
62 | done | |
63 | } | |
64 | ||
8bcfd683 | 65 | # called by dracut |
95d2dabc | 66 | install() { |
ecc13ef1 | 67 | local rule rule_path |
af119460 HH |
68 | inst_multiple cat |
69 | inst_multiple -o mdmon | |
24a38bc1 HH |
70 | inst $(command -v partx) /sbin/partx |
71 | inst $(command -v mdadm) /sbin/mdadm | |
95d2dabc | 72 | |
1743473b | 73 | cmdline >> "${initdir}/etc/cmdline.d/90mdraid.conf" |
575733aa | 74 | echo >> "${initdir}/etc/cmdline.d/90mdraid.conf" |
d351541e | 75 | |
ecc13ef1 | 76 | # <mdadm-3.3 udev rule |
c46cda82 | 77 | inst_rules 64-md-raid.rules |
ecc13ef1 AT |
78 | # >=mdadm-3.3 udev rules |
79 | inst_rules 63-md-raid-arrays.rules 64-md-raid-assembly.rules | |
c46cda82 HH |
80 | # remove incremental assembly from stock rules, so they don't shadow |
81 | # 65-md-inc*.rules and its fine-grained controls, or cause other problems | |
82 | # when we explicitly don't want certain components to be incrementally | |
83 | # assembled | |
ecc13ef1 AT |
84 | for rule in 64-md-raid.rules 64-md-raid-assembly.rules; do |
85 | rule_path="${initdir}${udevdir}/rules.d/${rule}" | |
86 | [ -f "${rule_path}" ] && sed -i -r \ | |
87 | -e '/RUN\+?="[[:alpha:]/]*mdadm[[:blank:]]+(--incremental|-I)[[:blank:]]+(\$env\{DEVNAME\}|\$tempnode|\$devnode)/d' \ | |
88 | "${rule_path}" | |
89 | done | |
95d2dabc HH |
90 | |
91 | inst_rules "$moddir/65-md-incremental-imsm.rules" | |
92 | ||
c46cda82 HH |
93 | inst_rules "$moddir/59-persistent-storage-md.rules" |
94 | prepare_udev_rules 59-persistent-storage-md.rules | |
95 | ||
cf589142 | 96 | # guard against pre-3.0 mdadm versions, that can't handle containers |
aa09b74a | 97 | if ! mdadm -Q -e imsm /dev/null >/dev/null 2>&1; then |
95d2dabc HH |
98 | inst_hook pre-trigger 30 "$moddir/md-noimsm.sh" |
99 | fi | |
aa09b74a | 100 | if ! mdadm -Q -e ddf /dev/null >/dev/null 2>&1; then |
cf589142 MS |
101 | inst_hook pre-trigger 30 "$moddir/md-noddf.sh" |
102 | fi | |
95d2dabc | 103 | |
3b403b32 | 104 | if [[ $hostonly ]] || [[ $mdadmconf = "yes" ]]; then |
95d2dabc HH |
105 | if [ -f /etc/mdadm.conf ]; then |
106 | inst /etc/mdadm.conf | |
107 | else | |
108 | [ -f /etc/mdadm/mdadm.conf ] && inst /etc/mdadm/mdadm.conf /etc/mdadm.conf | |
109 | fi | |
5bcf262d AT |
110 | if [ -d /etc/mdadm.conf.d ]; then |
111 | local f | |
112 | inst_dir /etc/mdadm.conf.d | |
113 | for f in /etc/mdadm.conf.d/*.conf; do | |
114 | [ -f "$f" ] || continue | |
115 | inst "$f" | |
116 | done | |
117 | fi | |
95d2dabc HH |
118 | fi |
119 | ||
95d2dabc | 120 | inst_hook pre-udev 30 "$moddir/mdmon-pre-udev.sh" |
95d2dabc | 121 | inst_hook pre-trigger 30 "$moddir/parse-md.sh" |
a1abd64a | 122 | inst_hook pre-mount 10 "$moddir/mdraid-waitclean.sh" |
e4297a66 | 123 | inst_hook cleanup 99 "$moddir/mdraid-needshutdown.sh" |
657d68cf | 124 | inst_hook shutdown 30 "$moddir/md-shutdown.sh" |
53fe81e7 HH |
125 | inst_script "$moddir/mdraid-cleanup.sh" /sbin/mdraid-cleanup |
126 | inst_script "$moddir/mdraid_start.sh" /sbin/mdraid_start | |
6c6d8057 HH |
127 | if dracut_module_included "systemd"; then |
128 | if [ -e $systemdsystemunitdir/mdmon@.service ]; then | |
129 | inst_simple $systemdsystemunitdir/mdmon@.service | |
130 | fi | |
ffc4f173 HH |
131 | fi |
132 | inst_hook pre-shutdown 30 "$moddir/mdmon-pre-shutdown.sh" | |
95d2dabc | 133 | } |