You are not logged in.

#1 2013-01-29 04:01:44

jynnantonix
Member
Registered: 2012-09-07
Posts: 33

["solved"] udev not finding device with key file

EDIT 02/04 - I "fixed" this by re-installing arch. Since it was on a relatively new system anyway (I had just installed it the previous week and hadn't touched it since), it's possible I messed something up while doing various installer things.  Anyway, everything works now and the mystery will continue...

I have an encrypted root partition with a keyfile on a usb stick and a persistent udev rule to find the stick and mount it at boot.  Before I upgraded today, this was working fine.  I would normally see "Waiting 10 seconds for /dev/.." followed by a bunch of messages about the usb stick not having a cache and then it would find my keyfile and continue with the boot process.

After upgrading today, I see the "Waiting 10 seconds for ..." message but then it says device not found and reverts to password (which I don't have).  I tried putting my keyfile on my boot partition (on my hard drive) and loading it from there but that didn't work either - it couldn't find the device.

I know the problem occurs here

 elif resolved=$(resolve_device "${ckdev}" ${rootdelay}); then

in the encrypt hook because resolve_device is returning an error.  Following the rabbit hole I found this in /usr/lib/initcpio/init_functions

poll_device() {
    local device=$1 seconds=${2//[!0-9]}

    [ "${seconds:-x}" = x ] && seconds=10
    deciseconds=$(( seconds * 10 ))

    # tenths of a second
    sleepinterval=1

    [ -b "$device" ] && return 0

    if [ "$udevd_running" -eq 1 ]; then
        msg "Waiting $seconds seconds for device $device ..." >&2
        while [ ! -b "$device" -a "$deciseconds" -gt 0 ]; do
            if [ "$sleepinterval" -ge 10 ]; then
                sleep 1
                deciseconds=$(( deciseconds - 10 ))
            else
                sleep .$sleepinterval
                deciseconds=$(( deciseconds - sleepinterval ))
                sleepinterval=$(( sleepinterval * 2 ))
            fi
        done
    fi

    [ -b "$device" ]
}

From which I gather that udev is not finding the device I am looking for.  I'm not sure where to go from here, suggestions would be greatly appreciated.

Last edited by jynnantonix (2013-02-05 03:56:47)

Offline

Board footer

Powered by FluxBB