Some time ago, when I replaced Ubuntu 7.10 on my Dell Vostro 200 ST with Fedora 9 I bumped into an issue that prevented Fedora from booting randomly. After some searching with Google I found a solution on Dell's wiki. However, I never gave it a try. Instead, when Ubuntu 8.04 LTS came out, I installed Ubuntu instead, not expecting to run into the same issue because 7.10 worked fine (or maybe I was just lucky).
And today I decided to finally look into the issue by installing Ubuntu 8.04.1 LTS and seeing if the solution on Dell's wiki would fix the issue.
To do, short intro
BusyBox v1.1.3 (Debian 1:1.1-3-5ubuntu12) Built-in shell (ash)
Enter 'help' for a list of built-in commands.
(initramfs) [ 111-913848] ata1.00: revaildation failed (errno=-5)
[ 147.035278] ata1.00: revalidation failed (errno=-5)
[ 153.831363] ata2.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x2 frozen
[ 153.831399] ata2.00: cmd a0/00:00:00:24:00/00:00:00:00:00/a0 tag 0 pio 36 in
[ 153.831433] ata2.00: status: { DRDY }
[ 153.968230] ata2.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x2 frozen
[ 153.968266] ata2.00: cmd a0/00:00:00:24:00/00:00:00:00:00/a0 tag 0 pio 36 in
[ 153.968299] ata2.00: status: { DRDY }
[ 166.105293] ata2.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x2 frozen
[ 166.105329] ata2.00: cmd a0/00:00:00:24:00/00:00:00:00:00/a0 tag 0 pio 36 in
[ 166.105362] ata2.00: status: { DRDY }
[ 172.242372] ata2.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x2 frozen
[ 172.242407] ata2.00: cmd a0/00:00:00:24:00/00:00:00:00:00/a0 tag 0 pio 36 in
[ 172.242441] ata2.00: status: { DRDY }
To do, short explanation
The workaround for the hang issue is to force the SATA driver to load before the USB driver via a script. In a terminal I typed the following command to create the script:
$ gksudo gedit /usr/share/initramfs-tools/scripts/init-top/load_ata_piix
Next I copy pasted the script from Dell's wiki page, and modified the indent; I removed some spaces:
#!/bin/sh
PREREQ=""
prereqs()
{
echo "$PREREQ"
}
case $1 in
# get pre-requisites
prereqs)
prereqs
exit 0
;;
esac
modprobe -Qb ata_piix
Since the above code is a script, I used chmod to make it executable (implied on Dell's wiki but not mentioned):
$ sudo chmod +x /usr/share/initramfs-tools/scripts/init-top/load_ata_piix
Next, I executed the script per instructions given on Dell's wiki:
$ sudo /usr/share/initramfs-tools/scripts/init-top/load_ata_piix
And finally I rebuild initrd in order to make the kernel probe for the SATA driver before the USB driver:
$ sudo update-initramfs -u -k all
update-initramfs: Generating /boot/initrd.img-2.6.24-19-generic
At the time of writing I've rebooted the Dell Vostro 200 Slim Tower several times after the above workaround without a single issue.