When a current kernel boots without an initramfs provided, it creates
/dev/root on an empty initramfs and mounts that.  There is no
/dev/root on the running system, so we fail to find the real device.
In that case, look up the root device in /proc/cmdline.

Related-to: #760127
Signed-off-by: Ben Hutchings <b...@decadent.org.uk>
---
 hook-functions | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/hook-functions b/hook-functions
index dbe8cd2..ed22164 100644
--- a/hook-functions
+++ b/hook-functions
@@ -262,7 +262,29 @@ dep_add_modules()
        fi
 
        if [ "${root}" = "/dev/root" ] ; then
-               root="/dev/disk/by-uuid/"$(blkid -o value -s UUID ${root}) 
2>/dev/null
+               if [ -b "${root}" ]; then
+                       # Match it to the canonical device name by UUID
+                       root="/dev/disk/by-uuid/"$(blkid -o value -s UUID 
${root}) 2>/dev/null
+               else
+                       # Does not exist in our namespace, so look at the
+                       # kernel command line
+                       root=
+                       for arg in $(cat /proc/cmdline); do
+                               case "$arg" in
+                               root=*)
+                                       root="${arg#root=}"
+                                       if [ "${root#/dev/}" = "$root" ]; then
+                                               root="/dev/$root"
+                                       fi
+                                       ;;
+                               --)
+                                       break
+                                       ;;
+                               *)
+                                       ;;
+                               esac
+                       done
+               fi
        fi
 
        # recheck root device


-- 
Ben Hutchings
This sentence contradicts itself - no actually it doesn't.

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to