Having installed Debian GNU/Linux 5.0 (“lenny”) on a PC Engines Alix 2D3 system I ran into problems with the external USB disk drive not being mounted at boot-up.
Mounting local filesystems…mount: special device UUID=… does not exist
These error messages were coming when /etc/rcS.d/S35mountall.sh was attempting to mount all the local filesystems from /etc/fstab. In my case the USB subsystem had not yet initialised and so the entries in /dev had not been created yet.
I could simply wait until booting has finished and mount the partitions manually, or add them to /etc/rc.local, but I was after a more elegant solution.
The answer is to introduce a deliberate pause into the boot sequence to allow the USB subsystem to initialise before the mounts are started.
#!/bin/sh
# Script to force boot sequence to wait for USB disk detection
# Copy to /etc/init.d/waitforusb
# ln -s /etc/init.d/waitforusb /etc/rcS.d/S25waitforusb
# Disk drive mount we're waiting on
usbdrive="/dev/sda"
# Max time to wait (in seconds)
maxwait=30
case "$1" in
start)
echo "Waiting for USB disk drive $usbdrive"
for (( i = 0; i <= $maxwait; i++ ))
do
[ -b $usbdrive ] && exit 0
echo -n "."
sleep 1
done
exit 1
;;
stop)
;;
esac
Copy this startup file to /etc/init.d and then create a symbolic link in /etc/rcS.d just before the filesystem checks:
ln -s /etc/init.d/waitforusb /etc/rcS.d/S25waitforusb
The script will check for the disk drive entries in /dev every second and allow boot execution to continue when it’s there. There is a safety timeout which allows execution to continue regardless after 30 seconds.