Switch from old ATA/IDE driver to libata

Today I switched to libata on my laptop. Libata now not only handles SATA anymore, but also got PATA support. Read more here. I suppose I’m early with that switch, libata for PATA is still marked experimental… but sooner or later this will be standard.

On the surface there is not much change, except that my harddisk is /dev/sda now instead of /dev/hda (what caused me to have to change a few scripts and configs here and there). The optical drive is now /dev/sr0 instead of /dev/hdb.

If you want to switch, too, here is what you basically have to do:
In menuconfig, deactivate the whole “ATA/ATAPI/MFM/RLL support” tree under Device Drivers – this is the old driver architecture – nothing inside is needed anymore. Then go to “Serial ATA (prod) and Parallel ATA (experimental) drivers” (which will probably get renamed soon 😉 ). Activate “ATA device support” and find the right option for your IDE controller. My laptop has an ICH 7 built in (00:1f.1 IDE interface: Intel Corporation 82801G (ICH7 Family) IDE Controller (rev 02)).
Now here is one thing which took me a while. Because I never needed /dev/sd* devices in an early stage of booting, I had “Device Drivers / SCSI device support / SCSI disk support” (CONFIG_BLK_DEV_SD) only compiled as module. But modules can only be loaded after the Kernel can access the root partition. So make sure this option is compiled into the kernel.
Then change your GRUB config so that root=/dev/hd* is root=/dev/sd* now. Furthermore you need to adjust the /dev/hd* entries in your /etc/fstab to also read as /dev/sd*.
After building the kernel you should be able to boot your system as normal.

I had another minor complication involving udev: It symlinked /dev/cdrom7 to /dev/sr0. Why the hell 7? I only have exactly one optical drive in my laptop. After poking around a bit in /etc/udev, I figured out that there was some cruft in /etc/udev/rules.d/70-persistent-cd.rules. After I deleted it and re-initialised udev (“udevstart”), the file respawned without the cruft, and I have my good old /dev/cdrom symlink back (which links to /dev/sr0).

That’s it. Enjoy the new technology 🙂 I bet in a few years, we will consider /dev/hd* device names as archaic relics from long gone times 😉