chuck wrote this at 8:02 am:
Dear Lazyweb,
I've been trying for about two years to make this demon spawn Dell XPS400 take a proper decent dual-boot install, and it seems I need help with some GRUB incantations or possibly BIOS wrangling…
The latest distro I'm attempting is the latest Ubuntu, AMD64, but in the past both Fedora and Debian and probably a couple others have been tried. The deal is that I ordered this machine not having ever encountered SATA or knowing anything about it before, assuming that I could just add a certain Seagate drive that I keep a lot of "important" data (the entire Ragman Records archive, among other things) on to the machine as an extra drive and everything would be fine. So I get the thing and realize that I've nowhere to hook this drive up; the board has one IDE connector and it's home to the CD/DVD drives. So I head down to that awful place in the blue building with the big yellow sign and purchase me an Adaptec ASH-1233 IDE controller, slap it into a PCI slot, hook the drive up as secondary master. Windows has no problem with this: "Hey look, another hard drive, and it's not the one I'm booting from. I'm going to love it and hug it and squeeze it and call it G:"
Here's the deal: I want to install dual boot, with the Linux partition on the same drive with the Windows one (the SATA the box came with). I boot the Ubuntu Live CD, and everything is great. The Windows partition and the old Seagate are detected and slapped into the "Places" menu where I can mount them and do whatever to them. Yay!
Booting once actually installed is another matter, however. During install, once the partitioning step comes up, note that the drive with the Windows partition shows up as sdb and "SCSI3", but the Seagate pops in as sda-something and SCSI2.
By default, the installer decides to put the bootloader on the Seagate, which it has decided is (hd0), I don't know why, but it is what it is. So if I go ahead with that, I can boot either Windows or Ubuntu, but to do so I have to hit F12 during startup and pick the Seagate drive from the boot menu; and if I then proceed to boot the new Ubuntu install, it appears to have no idea that any other drives/partitions exist — the Seagate and the Windows partition are nowhere to be found, and that sucks.
On the other hand, if I tell the installer to put the bootloader on (hd1) a.k.a. sdb instead, and let the machine boot to the SATA drive, GRUB comes up, but neither OS will boot. Selecting Ubuntu gives me error 17 "Could not mount partition," and selecting Windows gives me error 22 "Partition Does Not Exist." And that sucks way worse.
I'm semi-convinced that if I can just convince this machine that the SATA is sda instead of sdb, and/or is (hd0) or is a lower SCSI(\d) than the Seagate, consistent with the general concept that i intend it to be my "main" drive and the other drive is "second," my troubles will be over. Also, having to boot from the drive that has no OS installed on it just feels wrong.
Some things I've tried:
- giving the ide=reverse option to the liveCD in hopes it will detect the drives in the opposite order and install GRUB to do likewise. ide=reverse appeared to have no effect.
- moving the Seagate to the primary connector on the IDE controller. Might not have been a good idea, since I think it conflicts with the CD drives there, I didn't go that far. What I do know is, it doesn't seem to change anything about how the drives get detected.
- going to BIOS setup and changing SATA behavior to "Combination Mode." Before I did this, the live CD/installer would show the SATA drive as SCSI5 instead of SCSI3 as described above. I'm not sure if this has helped, hurt, or been neutral. Everything else seems to be the same.
- messing with device.map in GRUB by switching the way around that the drives are listed. I gave up on this because I only sort of know what I'm doing here, and once I went into the GRUB console after making this edit, my attempts at doing a "root" or "setup" were met with only error messages.
- going into the IDE controller's BIOS. I got a small menu that said something along the lines of "Press F1 to add HDD set, press F2 to remove HDD set." I had no idea what it was talking about here, but I pressed one of those keys and was asked to enter a number. Having even less idea what was going on at this point, and not being able to find any documentation on the subject, I ditched on this plan as well.
Thing I have not tried because it would involve babysitting a partition-resize:
- putting a /boot partition on the SATA drive.
Any light bulbs go on out there?
Update:
I think I might have hit on something here.
First, I'm not absolutely sure now, that F12-booting from the Seagate caused the other partitions to not be detected. Upon further exploration, it appears that they did not get added to the Places menu in GNOME, but might well have been accessible.
There seems to be a lot of issue with Linux detecting drives in back-asswards order versus what BIOS really does with them, and that's what's behind this. Lots of people are having this problem, it seems.
I went and edited me some /boot/grub/menu.lst and switched everywhere that it says "root (hd1,n)" to "root (hd0,n)" or maybe it was the other way around, or both. And did likewise with the "# groot (hdn,n)" line. Booted from the SATA; the windows partition mounted on /windows and the Seagate on /chuck2 just like I asked the installer to do. Crazy.
I think I might be almost ready to call this fixed… those of you who have this problem and can't boot to the partition at all, however, are going to have to boot from the live CD to get somewhere where you can edit the menu.lst. For this you'll need to get to a terminal, do a sudo -s, mount the partition you installed to, and chroot to it.
Even more update: Yeah, I think that did the trick… unfortunately I'm going to have to do it all over again, as it seems that somewhere in my experimentations I managed to bork my Windows install. The data was still there, Ubuntu mounted the partition fine, but it wouldn't boot anymore. So I had to reinstall Windows, which unfortunately clobbers the MBR, meaning I'll have to redo GRUB entirely. A fine way to waste a couple days.
Update #3: It may be specific to how my system is set up, but there seems to be no way to put GRUB on the SATA drive without borking the Windows partition's boot section (not the MBR). I ended up doing fixboot and fixmbr from a recovery disk and installing Ubuntu again with GRUB on the Seagate. I guess I'll just have to put up with F12ing to the boot device menu. Also: 64-bit dual core my ass, this Dell XPS400 still runs Ubuntu like a lumbering dinosaur (and as I found out from doing a Windows reinstall, it's even worse in Windows XP if you use the drivers it installs with by default, until you go install all of Dell's). It gets almost acceptable if I turn off all the effects in GNOME. Worst computer I've ever owned.