]> git.ipfire.org Git - thirdparty/dracut.git/blame - modules.d/90mdraid/parse-md.sh
docs: update NEWS.md and AUTHORS
[thirdparty/dracut.git] / modules.d / 90mdraid / parse-md.sh
CommitLineData
8ce58f1f 1#!/bin/sh
77fa3301
HH
2# we really need to use `expr substr` with dash
3# shellcheck disable=SC2003
cc4037d1
VG
4
5MD_UUID=$(getargs rd.md.uuid -d rd_MD_UUID=)
746135dd
HH
6# normalize the uuid
7MD_UUID=$(str_replace "$MD_UUID" "-" "")
8MD_UUID=$(str_replace "$MD_UUID" ":" "")
cc4037d1 9
909961d0 10if { [ -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 13else
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
41fi
42
68e7661c 43if [ -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
46fi
47
68e7661c 48if ! 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
51fi
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 55if ! 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 58fi
cf589142
MS
59
60# same thing with ddf containers
68e7661c 61if ! 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
64fi