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.
signature.asc
Description: This is a digitally signed message part