Dear Marco, here is the patched version of the script. Basically if we can't find the root device with udev, we try to find it by parsing /proc/cmdline. If that is not a valid block device the script exists, if it is that device is used for the /dev/root symlink.
Ciao, Paride
#!/bin/sh -e RUNDIR=$(udevadm info --run || exit 0) [ -d $RUNDIR ] || exit 0 mkdir -p $RUNDIR/rules.d/ [ ! -e $RUNDIR/rules.d/61-dev-root-link.rules ] || exit 0 eval $(udevadm info --export --export-prefix=ROOT_ --device-id-of-file=/ || true) [ "$ROOT_MAJOR" -a "$ROOT_MINOR" ] || exit 0 # btrfs filesystems have bogus major/minor numbers if [ "$ROOT_MAJOR" != 0 ]; then echo 'ACTION=="add|change", SUBSYSTEM=="block", ENV{MAJOR}=="'$ROOT_MAJOR'", ENV{MINOR}=="'$ROOT_MINOR'", \ SYMLINK+="root"' > $RUNDIR/root-link-rule else # btrfs filesystems have bogus major/minor numbers, # let's try to infer the root device from /proc/cmdline DEVNAME=`cat /proc/cmdline` DEVNAME=${DEVNAME##*root=} DEVNAME=${DEVNAME%% *} DEVNAME=${DEVNAME##*/} # If $DEVNAME is not a valid block device then exit now. if [ ! -b "$DEVNAME" ]; then exit 0 fi echo 'ACTION=="add|change", SUBSYSTEM=="block", KERNEL=="'$DEVNAME'", SYMLINK+="root"' > $RUNDIR/root-link-rule fi mv $RUNDIR/root-link-rule $RUNDIR/rules.d/61-dev-root-link.rules
signature.asc
Description: Digital signature