]>
Commit | Line | Data |
---|---|---|
8ce58f1f | 1 | #!/bin/sh |
77fa3301 HH |
2 | # we really need to use `expr substr` with dash |
3 | # shellcheck disable=SC2003 | |
cc4037d1 VG |
4 | |
5 | MD_UUID=$(getargs rd.md.uuid -d rd_MD_UUID=) | |
746135dd HH |
6 | # normalize the uuid |
7 | MD_UUID=$(str_replace "$MD_UUID" "-" "") | |
8 | MD_UUID=$(str_replace "$MD_UUID" ":" "") | |
cc4037d1 | 9 | |
909961d0 | 10 | if { [ -z "$MD_UUID" ] && ! getargbool 0 rd.auto; } || ! getargbool 1 rd.md -d -n rd_NO_MD; then |
fa7ada31 | 11 | info "rd.md=0: removing MD RAID activation" |
1dd5bc3f | 12 | udevproperty rd_NO_MD=1 |
f874872f | 13 | else |
f874872f HH |
14 | # rewrite the md rules to only process the specified raid array |
15 | if [ -n "$MD_UUID" ]; then | |
cc02093d HH |
16 | for f in /etc/udev/rules.d/65-md-incremental*.rules; do |
17 | [ -e "$f" ] || continue | |
77fa3301 | 18 | while read -r line || [ -n "$line" ]; do |
cc02093d | 19 | if [ "${line%%UUID CHECK}" != "$line" ]; then |
746135dd | 20 | for uuid in $MD_UUID; do |
77fa3301 | 21 | printf 'ENV{ID_FS_UUID}=="%s", GOTO="md_uuid_ok"\n' "$(expr substr "$uuid" 1 8)-$(expr substr "$uuid" 9 4)-$(expr substr "$uuid" 13 4)-$(expr substr "$uuid" 17 4)-$(expr substr "$uuid" 21 12)" |
9a52c3fd | 22 | done |
77fa3301 | 23 | # shellcheck disable=SC2016 |
a025cc17 | 24 | printf 'IMPORT{program}="/sbin/mdadm --examine --export $tempnode"\n' |
cc02093d | 25 | for uuid in $MD_UUID; do |
77fa3301 | 26 | printf 'ENV{MD_UUID}=="%s", GOTO="md_uuid_ok"\n' "$(expr substr "$uuid" 1 8):$(expr substr "$uuid" 9 8):$(expr substr "$uuid" 17 8):$(expr substr "$uuid" 25 8)" |
9a52c3fd | 27 | done |
a025cc17 MS |
28 | printf 'GOTO="md_end"\n' |
29 | printf 'LABEL="md_uuid_ok"\n' | |
cc02093d | 30 | else |
a025cc17 | 31 | echo "$line" |
cc02093d | 32 | fi |
1b434f1b | 33 | done < "${f}" > "${f}.new" |
3b403b32 | 34 | mv "${f}.new" "$f" |
cc02093d | 35 | done |
3cea0658 | 36 | for uuid in $MD_UUID; do |
77fa3301 | 37 | uuid="$(expr substr "$uuid" 1 8):$(expr substr "$uuid" 9 8):$(expr substr "$uuid" 17 8):$(expr substr "$uuid" 25 8)" |
3cea0658 HH |
38 | wait_for_dev "/dev/disk/by-id/md-uuid-${uuid}" |
39 | done | |
f874872f HH |
40 | fi |
41 | fi | |
42 | ||
68e7661c | 43 | if [ -e /etc/mdadm.conf ] && getargbool 1 rd.md.conf -d -n rd_NO_MDADMCONF; then |
1dd5bc3f | 44 | udevproperty rd_MDADMCONF=1 |
77fa3301 | 45 | rm -f -- "$hookdir"/pre-pivot/*mdraid-cleanup.sh |
2f02ae9d HH |
46 | fi |
47 | ||
68e7661c | 48 | if ! getargbool 1 rd.md.conf -d -n rd_NO_MDADMCONF; then |
32bd2fbb | 49 | rm -f -- /etc/mdadm/mdadm.conf /etc/mdadm.conf |
77fa3301 | 50 | ln -s "$(command -v mdraid-cleanup)" "$hookdir"/pre-pivot/31-mdraid-cleanup.sh 2> /dev/null |
21a7b844 HH |
51 | fi |
52 | ||
d6a5b040 HG |
53 | # noiswmd nodmraid for anaconda / rc.sysinit compatibility |
54 | # note nodmraid really means nobiosraid, so we don't want MDIMSM then either | |
68e7661c | 55 | if ! getargbool 1 rd.md.imsm -d -n rd_NO_MDIMSM -n noiswmd -n nodmraid; then |
fa7ada31 | 56 | info "no MD RAID for imsm/isw raids" |
1dd5bc3f | 57 | udevproperty rd_NO_MDIMSM=1 |
345f5735 | 58 | fi |
cf589142 MS |
59 | |
60 | # same thing with ddf containers | |
68e7661c | 61 | if ! getargbool 1 rd.md.ddf -n rd_NO_MDDDF -n noddfmd -n nodmraid; then |
cf589142 MS |
62 | info "no MD RAID for SNIA ddf raids" |
63 | udevproperty rd_NO_MDDDF=1 | |
64 | fi |