In my experience, Ubuntu is the most trouble-free Linux distribution. That being said, there is a fundamental issue with the Grub boot loader that can cause issues with some types of hardware that doesn't fit into the mold of the "typical desktop machine". There are basically two types of hardware that have the "issue": a. Early SATA controllers that emulate IDE and b. Other various machines that try to manage controller order in the BIOS. This causes a conflict between the ordering of the hard drive controllers between the BIOS vs. the PCI bus.
When Grub loads at boot time, it does not know what
/dev/sda1,
/dev/hda1,
/dev/cciss/c0d0p1, or
/dev/{anything} are. The kernel and udev need to be loaded before those devices exist, so Grub has to rely on the BIOS to get its information about which devices are available to get a kernel booted. On systems with a more-or-less linear boot order, this is not an issue. However, sometimes the BIOS can be set to a different boot order than the Linux kernel will agree with. Once the BIOS passes control of the boot process to the kernel, the kernel no longer requires the help of the BIOS at all (unless compiled in an unusual way). It can look directly at the PCI bus to figure out the order of the disks.
Grub and the Linux Kernel use different naming schemes for hard disks. Since Grub is all BIOS-based, SCSI vs. IDE are not an issue. All hard drives are
(hdD,P) where "
D" is the disk number and "
P" is the partition number. These start with Zero, so if you are used to referring to a partition as
/dev/sda2 it will be
(hd0,1) and
/dev/sdb1 will be
(hd1,0).
Linux Kernel Hard Disk Devices:
/dev/TdDPwhere
"
T" is the type of driver used (s for SCSI or h for IDE)
"
D" is the disk letter, starting with a
"
P" is the partition number, starting with 1
Example:
/dev/sdb2 == SCSI driver, Second disk, Second partition
Linux Kernel Hard Disk Devices: (Some RAID arrays)
/dev/cciss/cCdDpPwhere
"
C" is the number of the controller, starting with 0
"
D" is the disk number, starting with 0
"
P" is the partition number, starting with 1
Example:
/dev/cciss/c0d1p2 == RAID Array, First controller, Second disk, Second partition
Grub Hard Disk Devices:
(hdD,P)where
"
D" is the disk number, starting with 0
"
P" is the partition number, starting with 0
Example:
(hd1,0) == Second drive, First partition
Here is the part of the Ubuntu installer where things can get messed up:

If
(hd0) happens to be on a different controller than will be booted to, the boot process will fail. This requires some very manual intervention. I will go through this step-by-step.
Boot to a Live CD of your choice. For the purposes of this tutorial I will use an Ubuntu 8.10 Live CD.
Choose "
Try Ubuntu without any change to your computer":
When the CD starts up, open a Terminal window:

To become a super user, type:
sudo su - Change to the
/mnt directory, where we will be doing most of the work
cd /mnt List the available partitions in the system:
fdisk -lBased on the list of partitions, create a directory under
/mnt with an appropriate name, for example:
mkdir sda1Mount the partition to this directory:
mount /dev/sda1 sda1Verify this is indeed the partition you wanted to mount:
ls sda1
Bind-Mount the existing
/dev,
/proc,
/sys (located in RAM) to the
/dev,
/proc,
/sys folders on the partition you just mounted:
mount --bind /dev /mnt/sda1/dev
mount --bind /proc /mnt/sda1/proc
mount --bind /sys /mnt/sda1/sysEnter a chroot environment. This tells the kernel that within this environment, it will assume a new path is the root of the filesystem. The above filesystems will now be available in this new environment:
chroot sda1
With your favorite text editor (beginners should use "
nano", help is at the bottom of the screen) edit the file
/etc/fstab:
nano /etc/fstabYou should see a string similar to this: "
UUID=c6d12c7f-fac9-4e0b-b86a-4e0b4cd5b29b" with a slash "
/" next to it. Replace it with the kernel's version of the root "
/" partition. For example:
/dev/sda1 / ext3 relatime,errors=remount-ro 0 1Do the same for the swap partition:
/dev/sda5 none swap sw 0 0This certainly cleans up the file a bit, as well as helps if you are planning on making a disk image of this system and need to put it in a different system on a different hard drive. Save and exit. (in nano this is accomplished with
<Ctrl>-<x> followed by a "
y" to the question of whether to save)
Enter the Grub shell:
grubGet a listing of your available partitions:
root (hd<tab><tab> (don't press enter)
Based on the output of the above command, note the grub disk name for the root (
/) partition, for example
(hd0,0).
Quit Grub
quitWith your favorite text editor, edit the file /boot/grub/menu.lst:
nano /boot/grub/menu.lstPage down to the end of the file. There should be three entries, each beginning with a "
title" line. Comment out (Put a
# in front of) the line that starts with "
uuid". Do this for all three entries:
#uuid c6d12c7f-fac9-4e0b-b86a-4e0b4cd5b29bIn the first two entries, there is a line that begins with "
kernel". On this line you will find a string similar to "
root=UUID=c6d12c7f-fac9-4e0b-b86a-4e0b4cd5b29b". Change this to "
root=/dev/TdDP" based on the kernel name of your root (
/) partition. (see chart at top of article, example is
/dev/sda1) Also, add a line above the "
kernel" line to point grub to the partition in the format "
root (hdD,P). (see chart at top of article, example is
root (hd0,0)):
root (hd0,0)
kernel /boot/vmlinuz-2.6.27-7-generic root=/dev/sda1 ro quiet splashRepeat this step for the recovery mode entry:
root (hd0,0)
kernel /boot/vmlinuz-2.6.27-7-generic root=/dev/sda1 ro singleSave and exit this file.
Now, run the Grub shell again:
grubEnter the root partition that contains
menu.lst, in Grub format:
root (hd0,0)Install Grub into the master boot record of the hard disk:
setup (hd0)Quit Grub:
quitExit the chroot environment:
exitList your mount points:
mountYou will get a long list of all the mounts that have been done in the Live CD environment. We are only concerned with the last 4 displayed. Start at the bottom and work your way up the list, unmounting only the mount points, not the devices:
umount /mnt/sda1/sys
umount /mnt/sda1/proc
umount /mnt/sda1/dev
umount /mnt/sda1Exit the superuser environment:
exitExit the shell:
exitFinally, restart your system and cross your fingers: