[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