From: Harald Hoyer Date: Thu, 27 Sep 2012 12:05:50 +0000 (+0200) Subject: add "rd.auto" parameter and switch off automatic assembly X-Git-Tag: 024~52 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e064127729af69c5147a0e91eb9147124340004d;p=thirdparty%2Fdracut.git add "rd.auto" parameter and switch off automatic assembly No automatic assembly is done anymore by default. You will have to specify exactly what devices to assemble ("rd.md.uuid=" "rd.luks.uuid" ...) or use "rd.auto=1" or "rd.auto" on the kernel command line. For big servers with thousands of disks we don't want to assemble everything by default (error prone, slow). --- diff --git a/dracut.cmdline.7.asc b/dracut.cmdline.7.asc index 910006dd1..1c5277109 100644 --- a/dracut.cmdline.7.asc +++ b/dracut.cmdline.7.asc @@ -69,6 +69,10 @@ rootfstype=ext3 force mounting _/_ and _/usr_ (if it is a separate device) read-write. See also ro option. +**rd.auto=1**:: + enable autoassembly of special devices like cryptoLUKS, dmraid, mdraid or lvm. + Default is off as of dracut version >= 024. + **rd.fstab=0**:: do not honor special mount options for the root filesystem found in _/etc/fstab_ of the real root. diff --git a/modules.d/90crypt/parse-crypt.sh b/modules.d/90crypt/parse-crypt.sh index 8d1c8cd47..54d157c6b 100755 --- a/modules.d/90crypt/parse-crypt.sh +++ b/modules.d/90crypt/parse-crypt.sh @@ -47,7 +47,7 @@ else printf -- 'warn "crypto LUKS UUID "%s" not found"\n' $luksid } >> $hookdir/emergency/90-crypt.sh done - else + elif getargbool 0 rd.auto; then if [ -z "$DRACUT_SYSTEMD" ]; then { printf -- 'ENV{ID_FS_TYPE}=="crypto_LUKS", RUN+="%s ' $(command -v initqueue) diff --git a/modules.d/90dmraid/dmraid.sh b/modules.d/90dmraid/dmraid.sh index e4f879915..68e051593 100755 --- a/modules.d/90dmraid/dmraid.sh +++ b/modules.d/90dmraid/dmraid.sh @@ -6,38 +6,42 @@ type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh DM_RAIDS=$(getargs rd.dm.uuid -d rd_DM_UUID=) -DM_CLEANUP="no" +if [ -n "$DM_RAIDS" ] || getargbool 0 rd.auto; then -# run dmraid if udev has settled -info "Scanning for dmraid devices $DM_RAIDS" -SETS=$(dmraid -c -s) + DM_CLEANUP="no" -if [ "$SETS" = "no raid disks" -o "$SETS" = "no raid sets" ]; then - return -fi + # run dmraid if udev has settled + info "Scanning for dmraid devices $DM_RAIDS" + SETS=$(dmraid -c -s) + + if [ "$SETS" = "no raid disks" -o "$SETS" = "no raid sets" ]; then + return + fi -info "Found dmraid sets:" -echo $SETS|vinfo + info "Found dmraid sets:" + echo $SETS|vinfo -if [ -n "$DM_RAIDS" ]; then + if [ -n "$DM_RAIDS" ]; then # only activate specified DM RAIDS - for r in $DM_RAIDS; do - for s in $SETS; do - if [ "${s##$r}" != "$s" ]; then - info "Activating $s" - dmraid -ay -i -p --rm_partitions "$s" 2>&1 | vinfo - [ -e "/dev/mapper/$s" ] && kpartx -a -p p "/dev/mapper/$s" 2>&1 | vinfo - udevsettle - fi + for r in $DM_RAIDS; do + for s in $SETS; do + if [ "${s##$r}" != "$s" ]; then + info "Activating $s" + dmraid -ay -i -p --rm_partitions "$s" 2>&1 | vinfo + [ -e "/dev/mapper/$s" ] && kpartx -a -p p "/dev/mapper/$s" 2>&1 | vinfo + udevsettle + fi + done done - done -else + else # scan and activate all DM RAIDS - for s in $SETS; do - info "Activating $s" - dmraid -ay -i -p --rm_partitions "$s" 2>&1 | vinfo - [ -e "/dev/mapper/$s" ] && kpartx -a -p p "/dev/mapper/$s" 2>&1 | vinfo - done -fi + for s in $SETS; do + info "Activating $s" + dmraid -ay -i -p --rm_partitions "$s" 2>&1 | vinfo + [ -e "/dev/mapper/$s" ] && kpartx -a -p p "/dev/mapper/$s" 2>&1 | vinfo + done + fi -need_shutdown + need_shutdown + +fi diff --git a/modules.d/90dmraid/parse-dm.sh b/modules.d/90dmraid/parse-dm.sh index bc7ed428b..76dfb5d1d 100755 --- a/modules.d/90dmraid/parse-dm.sh +++ b/modules.d/90dmraid/parse-dm.sh @@ -16,3 +16,9 @@ if ! command -v mdadm >/dev/null || ! getargbool 1 rd.md.ddf -n rd_NO_MDDDF -n info "rd.md.ddf=0: no MD RAID for SNIA ddf raids" udevproperty rd_NO_MDDDF=1 fi + +DM_RAIDS=$(getargs rd.dm.uuid -d rd_DM_UUID=) + +if [ -z "$DM_RAIDS" ] && ! getargbool 0 rd.auto; then + udevproperty rd_NO_DM=1 +fi diff --git a/modules.d/90lvm/parse-lvm.sh b/modules.d/90lvm/parse-lvm.sh index 2194abd98..3e6b371ba 100755 --- a/modules.d/90lvm/parse-lvm.sh +++ b/modules.d/90lvm/parse-lvm.sh @@ -5,11 +5,14 @@ if [ -e /etc/lvm/lvm.conf ] && ! getargbool 1 rd.lvm.conf -d -n rd_NO_LVMCONF; t rm -f /etc/lvm/lvm.conf fi -if ! getargbool 1 rd.lvm -d -n rd_NO_LVM; then +LV_DEVS="$(getargs rd.lvm.vg -d rd_LVM_VG=) $(getargs rd.lvm.lv -d rd_LVM_LV=)" + +if ! getargbool 1 rd.lvm -d -n rd_NO_LVM \ + || ( [ -z "$LV_DEVS" ] && ! getargbool 0 rd.auto ); then info "rd.lvm=0: removing LVM activation" rm -f /etc/udev/rules.d/64-lvm*.rules else - for dev in $(getargs rd.lvm.vg -d rd_LVM_VG=) $(getargs rd.lvm.lv -d rd_LVM_LV=); do + for dev in $LV_DEVS; do wait_for_dev "/dev/$dev" done fi diff --git a/modules.d/90mdraid/parse-md.sh b/modules.d/90mdraid/parse-md.sh index 69d58f874..2de435b3d 100755 --- a/modules.d/90mdraid/parse-md.sh +++ b/modules.d/90mdraid/parse-md.sh @@ -4,7 +4,7 @@ MD_UUID=$(getargs rd.md.uuid -d rd_MD_UUID=) -if ! [ -n "$MD_UUID" ] && ! getargbool 1 rd.md -d -n rd_NO_MD; then +if ( ! [ -n "$MD_UUID" ] && ! getargbool 0 rd.auto ) || ! getargbool 1 rd.md -d -n rd_NO_MD; then info "rd.md=0: removing MD RAID activation" udevproperty rd_NO_MD=1 else diff --git a/test/TEST-10-RAID/test.sh b/test/TEST-10-RAID/test.sh index 8e5b9e5e7..88a6d6239 100755 --- a/test/TEST-10-RAID/test.sh +++ b/test/TEST-10-RAID/test.sh @@ -11,7 +11,7 @@ test_run() { -hda $DISKIMAGE \ -m 256M -nographic \ -net none -kernel /boot/vmlinuz-$KVERSION \ - -append "root=/dev/dracut/root rd.auto=1 rw rd.retry=10 console=ttyS0,115200n81 selinux=0 $DEBUGFAIL" \ + -append "root=/dev/dracut/root rd.auto rw rd.retry=10 console=ttyS0,115200n81 selinux=0 $DEBUGFAIL" \ -initrd $TESTDIR/initramfs.testing grep -m 1 -q dracut-root-block-success $DISKIMAGE || return 1 } diff --git a/test/TEST-11-LVM/test.sh b/test/TEST-11-LVM/test.sh index 61ebdfab4..89fff8f49 100755 --- a/test/TEST-11-LVM/test.sh +++ b/test/TEST-11-LVM/test.sh @@ -11,7 +11,7 @@ test_run() { -hda $TESTDIR/root.ext2 \ -m 256M -nographic \ -net none -kernel /boot/vmlinuz-$KVERSION \ - -append "root=/dev/dracut/root rw quiet rd.retry=3 rd.info console=ttyS0,115200n81 selinux=0 rd.debug $DEBUGFAIL" \ + -append "root=/dev/dracut/root rw rd.auto=1 quiet rd.retry=3 rd.info console=ttyS0,115200n81 selinux=0 rd.debug $DEBUGFAIL" \ -initrd $TESTDIR/initramfs.testing grep -m 1 -q dracut-root-block-success $TESTDIR/root.ext2 || return 1 } diff --git a/test/TEST-12-RAID-DEG/test.sh b/test/TEST-12-RAID-DEG/test.sh index 558e3b0e2..641b8cadc 100755 --- a/test/TEST-12-RAID-DEG/test.sh +++ b/test/TEST-12-RAID-DEG/test.sh @@ -32,18 +32,21 @@ client_run() { test_run() { eval $(grep --binary-files=text -m 1 MD_UUID $TESTDIR/root.ext2) echo "MD_UUID=$MD_UUID" + read LUKS_UUID < $TESTDIR/luksuuid - client_run || return 1 + client_run failme && return 1 + client_run rd.auto || return 1 - client_run rd.md.uuid=$MD_UUID rd.md.conf=0 || return 1 + client_run rd.luks.uuid=$LUKS_UUID rd.md.uuid=$MD_UUID rd.md.conf=0 rd.lvm.vg=dracut || return 1 - client_run rd.md.uuid=failme rd.md.conf=0 failme && return 1 + client_run rd.luks.uuid=$LUKS_UUID rd.md.uuid=failme rd.md.conf=0 rd.lvm.vg=dracut failme && return 1 - client_run rd.lvm=0 failme && return 1 - client_run rd.lvm.vg=failme failme && return 1 - client_run rd.lvm.vg=dracut || return 1 - client_run rd.lvm.lv=dracut/failme failme && return 1 - client_run rd.lvm.lv=dracut/root || return 1 + client_run rd.luks.uuid=$LUKS_UUID rd.md.uuid=$MD_UUID rd.lvm=0 failme && return 1 + client_run rd.luks.uuid=$LUKS_UUID rd.md.uuid=$MD_UUID rd.lvm=0 rd.auto=1 failme && return 1 + client_run rd.luks.uuid=$LUKS_UUID rd.md.uuid=$MD_UUID rd.lvm.vg=failme failme && return 1 + client_run rd.luks.uuid=$LUKS_UUID rd.md.uuid=$MD_UUID rd.lvm.vg=dracut || return 1 + client_run rd.luks.uuid=$LUKS_UUID rd.md.uuid=$MD_UUID rd.lvm.lv=dracut/failme failme && return 1 + client_run rd.luks.uuid=$LUKS_UUID rd.md.uuid=$MD_UUID rd.lvm.lv=dracut/root || return 1 return 0 } @@ -107,6 +110,7 @@ test_setup() { grep -m 1 -q dracut-root-block-created $TESTDIR/root.ext2 || return 1 eval $(grep --binary-files=text -m 1 MD_UUID $TESTDIR/root.ext2) eval $(grep -a -m 1 ID_FS_UUID $TESTDIR/root.ext2) + echo $ID_FS_UUID > $TESTDIR/luksuuid ( export initdir=$TESTDIR/overlay diff --git a/test/TEST-13-ENC-RAID-LVM/test.sh b/test/TEST-13-ENC-RAID-LVM/test.sh index dff3229b7..db33337f1 100755 --- a/test/TEST-13-ENC-RAID-LVM/test.sh +++ b/test/TEST-13-ENC-RAID-LVM/test.sh @@ -17,7 +17,7 @@ test_run() { -hdb $TESTDIR/check-success.img \ -m 256M -nographic \ -net none -kernel /boot/vmlinuz-$KVERSION \ - -append "root=/dev/dracut/root rw quiet rd.retry=20 rd.info console=ttyS0,115200n81 selinux=0 rd.debug $LUKSARGS $DEBUGFAIL" \ + -append "root=/dev/dracut/root rw quiet rd.auto rd.retry=20 rd.info console=ttyS0,115200n81 selinux=0 rd.debug $LUKSARGS $DEBUGFAIL" \ -initrd $TESTDIR/initramfs.testing grep -m 1 -q dracut-root-block-success $TESTDIR/check-success.img || return 1 echo "CLIENT TEST END: [OK]" @@ -30,7 +30,7 @@ test_run() { -hdb $TESTDIR/check-success.img \ -m 256M -nographic \ -net none -kernel /boot/vmlinuz-$KVERSION \ - -append "root=/dev/dracut/root rw quiet rd.retry=20 rd.info console=ttyS0,115200n81 selinux=0 rd.debug $DEBUGFAIL" \ + -append "root=/dev/dracut/root rw quiet rd.auto rd.retry=20 rd.info console=ttyS0,115200n81 selinux=0 rd.debug $DEBUGFAIL" \ -initrd $TESTDIR/initramfs.testing grep -m 1 -q dracut-root-block-success $TESTDIR/check-success.img || return 1 echo "CLIENT TEST END: [OK]" @@ -43,7 +43,7 @@ test_run() { -hdb $TESTDIR/check-success.img \ -m 256M -nographic \ -net none -kernel /boot/vmlinuz-$KVERSION \ - -append "root=/dev/dracut/root rw quiet rd.retry=10 rd.info console=ttyS0,115200n81 selinux=0 rd.debug $DEBUGFAIL rd.luks.uuid=failme" \ + -append "root=/dev/dracut/root rw quiet rd.auto rd.retry=10 rd.info console=ttyS0,115200n81 selinux=0 rd.debug $DEBUGFAIL rd.luks.uuid=failme" \ -initrd $TESTDIR/initramfs.testing grep -m 1 -q dracut-root-block-success $TESTDIR/check-success.img && return 1 echo "CLIENT TEST END: [OK]" diff --git a/test/TEST-30-ISCSI/test.sh b/test/TEST-30-ISCSI/test.sh index c3d2c39e0..2b025515f 100755 --- a/test/TEST-30-ISCSI/test.sh +++ b/test/TEST-30-ISCSI/test.sh @@ -45,7 +45,7 @@ run_client() { -net nic,macaddr=52:54:00:12:34:00,model=e1000 \ -net socket,connect=127.0.0.1:12330 \ -kernel /boot/vmlinuz-$KVERSION \ - -append "$* rw quiet rd.retry=5 rd.debug rd.info console=ttyS0,115200n81 selinux=0 $DEBUGFAIL" \ + -append "$* rw quiet rd.auto rd.retry=5 rd.debug rd.info console=ttyS0,115200n81 selinux=0 $DEBUGFAIL" \ -initrd $TESTDIR/initramfs.testing if ! grep -m 1 -q iscsi-OK $TESTDIR/client.img; then echo "CLIENT TEST END: $test_name [FAILED - BAD EXIT]" diff --git a/test/TEST-40-NBD/test.sh b/test/TEST-40-NBD/test.sh index b8fb04dd3..b38ba1cfb 100755 --- a/test/TEST-40-NBD/test.sh +++ b/test/TEST-40-NBD/test.sh @@ -58,7 +58,7 @@ client_test() { -net nic,macaddr=$mac,model=e1000 \ -net socket,connect=127.0.0.1:12340 \ -kernel /boot/vmlinuz-$KVERSION \ - -append "$cmdline $DEBUGFAIL rd.debug rd.info rd.retry=10 ro quiet console=ttyS0,115200n81 selinux=0" \ + -append "$cmdline $DEBUGFAIL rd.debug rd.auto rd.info rd.retry=10 ro quiet console=ttyS0,115200n81 selinux=0" \ -initrd $TESTDIR/initramfs.testing if [[ $? -ne 0 ]] || ! grep -m 1 -q nbd-OK $TESTDIR/flag.img; then diff --git a/test/TEST-50-MULTINIC/test.sh b/test/TEST-50-MULTINIC/test.sh index 066ad8029..a43a1c52e 100755 --- a/test/TEST-50-MULTINIC/test.sh +++ b/test/TEST-50-MULTINIC/test.sh @@ -91,10 +91,10 @@ test_client() { # ...:02 receives a dhcp root-path # PXE Style BOOTIF= -# client_test "MULTINIC root=nfs BOOTIF=" \ -# 00 01 02 \ -# "root=nfs:192.168.50.1:/nfs/client BOOTIF=52-54-00-12-34-00" \ -# "eth0" || return 1 + client_test "MULTINIC root=nfs BOOTIF=" \ + 00 01 02 \ + "root=nfs:192.168.50.1:/nfs/client BOOTIF=52-54-00-12-34-00" \ + "eth0" || return 1 # PXE Style BOOTIF= with dhcp root-path client_test "MULTINIC root=dhcp BOOTIF=" \