Hi, I think I have a patch. Could you try it? I am not using LVM.
I added a new function in the initramfs script, to change the device given to a /dev/mapper device (if exists), so now LVM can boot the resume partition independently if is /dev/mapper/x /dev/dm-x or /dev/otherthing. This patch supports UUID and LABEL devices, the script translate it to /dev device. I changed the severity to critical because if LVM cannot handle other devices names than /dev/mapper and the image is stored in /dev/dm-x, the system cannot boot. The user needs edit the boot configuration and set the flag "noresume", else the system won't boot forever. Cheers, kix -- .''`. Rodolfo García Peñas (kix) <k...@debian.org> : :' : Proud Debian Developer `. `'` 4096R / 3F48 0B8C C385 AD41 9E28 006A 7B1F 5490 72B7 4923 `- Debian - when you have better things to do than fixing systems
#!/bin/sh -x PREREQ="mdadm mdrun multipath" prereqs() { echo "$PREREQ" } case $1 in # get pre-requisites prereqs) prereqs exit 0 ;; esac label_to_dev() { local dev="$1" local link1 local link2 if [ -d /dev/disk/by-label ]; then dev="${dev#LABEL=}" if [ "$dev" != "$1" ]; then link1="/dev/disk/by-label/"${dev} if [ -e $link1 ]; then link2=$(readlink -f "$link1") echo $link2 return 0 fi fi fi return 1 } uuid_to_dev() { local dev="$1" local link1 local link2 if [ -d /dev/disk/by-uuid ]; then dev="${dev#UUID=}" if [ "$dev" != "$1" ]; then link1="/dev/disk/by-uuid/"${dev} if [ -e $link1 ]; then link2=$(readlink -f "$link1") echo $link2 return 0 fi fi fi return 1 } # Get the /dev/mapper device for a /dev given device_to_mapper() { local dev="$1" local link1 local link2 local path if [ -d /dev/mapper ]; then link1=$(readlink -f "$dev") for path in /dev/mapper/*; do link2=$(readlink -f "$path") if [ "$link1" = "$link2" ]; then echo "$path" return 0 fi done fi return 1 } activate_vg() { local dev="$1" local ndev # Make sure that we have a non-empty argument if [ -z "$dev" ]; then return 1 fi # Take care of lilo boot arg, risky activating of all vg case "$dev" in fe[0-9]*) lvm vgchange -aly --ignorelockingfailure exit 0 ;; # FIXME: check major /dev/root) lvm vgchange -aly --ignorelockingfailure exit 0 ;; esac # Make sure that we have a d-m path ndev=$(label_to_dev "$dev") if [ $? = 0 ]; then dev=$ndev fi ndev=$(uuid_to_dev "$dev") if [ $? = 0 ]; then dev=$ndev fi ndev=$(device_to_mapper "$dev") if [ $? != 0 ]; then return 1 fi eval $(dmsetup splitname --nameprefixes --noheadings --rows "$ndev") if [ "$DM_VG_NAME" ] && [ "$DM_LV_NAME" ]; then lvm lvchange -aly --ignorelockingfailure "$DM_VG_NAME/$DM_LV_NAME" rc=$? if [ $rc = 5 ]; then echo "Unable to find LVM volume $DM_VG_NAME/$DM_LV_NAME" fi fi } if [ ! -e /sbin/lvm ]; then exit 0 fi modprobe -q dm-mod activate_vg "$ROOT" activate_vg "$resume" exit 0
signature.asc
Description: Digital signature