]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
add "rd.auto" parameter and switch off automatic assembly
authorHarald Hoyer <harald@redhat.com>
Thu, 27 Sep 2012 12:05:50 +0000 (14:05 +0200)
committerHarald Hoyer <harald@redhat.com>
Thu, 27 Sep 2012 12:05:50 +0000 (14:05 +0200)
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).

13 files changed:
dracut.cmdline.7.asc
modules.d/90crypt/parse-crypt.sh
modules.d/90dmraid/dmraid.sh
modules.d/90dmraid/parse-dm.sh
modules.d/90lvm/parse-lvm.sh
modules.d/90mdraid/parse-md.sh
test/TEST-10-RAID/test.sh
test/TEST-11-LVM/test.sh
test/TEST-12-RAID-DEG/test.sh
test/TEST-13-ENC-RAID-LVM/test.sh
test/TEST-30-ISCSI/test.sh
test/TEST-40-NBD/test.sh
test/TEST-50-MULTINIC/test.sh

index 910006dd15333ec217314cf77ec9273caa6c0ed1..1c52771091cb837487198a5b068e913d0d0c0572 100644 (file)
@@ -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.
index 8d1c8cd47ffae555313511497a7f7a9b17bbf1c0..54d157c6b4201080a5a38e8dee1e94310ab29e8e 100755 (executable)
@@ -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)
index e4f879915871ddff12449f1e1904a244db020279..68e051593cad69fd617d6921f3d47cb52fcebf0a 100755 (executable)
@@ -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
index bc7ed428b4c3b620d0460e33bc04ebe1a83830bd..76dfb5d1d12dea2e8b698ba0b47eeb7cffdd4a08 100755 (executable)
@@ -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
index 2194abd9856a2f86ba12fec8abcb16abfd842e9c..3e6b371ba5bbc5a63aa413b5580505fe683e62c0 100755 (executable)
@@ -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
index 69d58f874361ea880d3e46062e102ad20d3941c2..2de435b3d4500db33a7ab89fd31f5df3371af0f3 100755 (executable)
@@ -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
index 8e5b9e5e775f63a063f15066d0ab5a923d8c1884..88a6d6239b7b6a181daa0ca3975361f4a598504b 100755 (executable)
@@ -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
 }
index 61ebdfab456c0ced044ef10bd0ebbfffcf023291..89fff8f494352ec72f794c286d478e10ba448e6a 100755 (executable)
@@ -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
 }
index 558e3b0e27d9403cdcb4264e99eee0f67f2d0e03..641b8cadcd40eda4671217af9c85bc8268ebbf8f 100755 (executable)
@@ -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
index dff3229b709350d724daa7eaa88b5639f23c2ce1..db33337f1b032cb9b8ee3f3fd46c12049d3b5237 100755 (executable)
@@ -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]"
index c3d2c39e090256e81f64bf7d9129ef39b84b7fb1..2b025515fb2cf8dd1210afad1011f3121be4d31d 100755 (executable)
@@ -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]"
index b8fb04dd30d7f6bc806f85b21ac9d2cae03ae33f..b38ba1cfbb5b4b76ff3b1a2c4172efd9d43ef5c0 100755 (executable)
@@ -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
index 066ad8029caaa3809ca8cf302a43c1a358bfc667..a43a1c52e8d5de5d881fa1aecb143b5b97dec497 100755 (executable)
@@ -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=" \