[Eisfair] Dringend - initrd und usb-storage !

Thomas Bork tom at eisfair.org
Sa Nov 14 22:52:29 CET 2020


Am 11.11.2020 um 17:29 schrieb Uwe Kunze:

> Während des Bootens (also des Zugreifens auf die / - Partition) habe ich 
> eine Logmeldung durchlaufen sehen, die ich leider nicht mehr angezeigt 
> bekomme, aber die sinngemäß hieß:
> "convert UUID=xxxxxxx to device ..." (oder so ähnlich).
> Auf dem eis mit dem problematischen Kernel-Update ist mir diese Zeile 
> nicht aufgefallen (denke ich).

Siehe Ausgabe von

cat /proc/cmdline

Das ist das, was in der Kernel-Kommandozeile beim Booten mitgegeben wird 
- bei eisfair von lilo.

Beispiel:
auto BOOT_IMAGE=eis ro root=UUID=acb49829-ed5f-4b00-b9fd-f44637702364 
raid=noautodetect

Spannend in Deinem Fall ist das, was hinter root= angegeben ist. Das 
wird vom Skript init in der initramfs ausgewertet:

[...]
# Kernel command-line (convenience variable).
KCMD="/proc/cmdline"
[...]
# Create rootdev function.
echo '#!/bin/sh' > /bin/rootdev
echo 'echo "$1" > /rootdev' >> /bin/rootdev
echo 'exit $?' >> /bin/rootdev
$CHMOD 0755 /bin/rootdev
RDEV="/bin/rootdev"
[...]
# Get the args to pass to init, minus key=val pairs.
INIT_ARGS="$($AWK '{gsub(/[[:graph:]]+=[[:graph:]]+/,""); print}' $KCMD)"
# Remove any initramfs commands from INIT_ARGS.
INIT_ARGS="$(echo $INIT_ARGS | $AWK '{gsub(/noresume/,""); print}')"
INIT_ARGS="$(echo $INIT_ARGS | $AWK '{gsub(/shell/,""); print}')"
[...]
# Get the default root device if it exist on the kernel command-line.
RTDEV="$($AWK '/root=/ {sub(/.*root=/,""); sub(/[ ].*/,""); print}' $KCMD)"

# Check if /rootdev is empty or missing.
if [ ! -s /rootdev ]
then
     # Get root dev from kernel boot command-line.
     # Uses some awk magic to extract first "root=.*",
     # then extracts the ".*" from within that.
     $RDEV "$RTDEV" || echo "Failed to make /rootdev!"
fi

if $($GREP -q '^UUID' /rootdev)
then
     # UUID=2381eff1-9677-4a04-9faa-323247ec2f83
     string="$($CAT /rootdev)"
     echo "rootdev is a UUID: $string"

     root_uuid="$(echo "$string" | $AWK -F'=' '{print $2}')"
     # 2381eff1-9677-4a04-9faa-323247ec2f83
     for try in 0 1 2 3 4 5 6 7 8 9
     do
         # wait max 10 seconds
         test -L /dev/disk/by-uuid/${root_uuid} && break
         echo "Waiting for ${root_uuid} to appear in /dev/disk/by-uuid ..."
         sleep 1
     done

     if [ ! -L /dev/disk/by-uuid/${root_uuid} ]
     then
         echo ""
         echo "Cannot find ${root_uuid} in /dev/disk/by-uuid/. Giving up 
..."
         shell
     fi

     echo "Converting $string to device ..."
     UUIDDEV="$(findfs "$string")"
     echo "UUIDDEV is $UUIDDEV."
     $RDEV "$UUIDDEV"
     echo "rootdev is now $($CAT /rootdev)."
fi

usw.

-- 
der tom


Mehr Informationen über die Mailingliste Eisfair