Main menu:


Please consider a small donation:



Or you can donate bitcoin:


Thanks to TekLinks in Birmingham, AL, for providing colocation and bandwidth.

Page Rank


FOSS Force Best Blog--2013 Award

Recent posts

Recent comments

About this blog

I am Eric Hameleers, and this is where I think out loud.
More about me.


Subscribe to Blog via Email

Enter your email address to subscribe to this blog and receive notifications of new posts by email.

Join 426 other subscribers

My Favourites

Online me



May 2019
« Apr    

RSS Alien's Slackware packages

RSS Alien's unofficial KDE Slackware packages

RSS Alien's multilib packages

RSS Slackware64-current



Robby’s libata switchover howto

The new kernels in Slackware (post 13.0) have one important change compared to previous kernels. This change will affect anyone with Slackware installed on an IDE disk (like /dev/hda) who wants to upgrade to the latest state of affairs.

The new kernels exclusively use “libata”. The last bits of the old IDE/ATA subsystem have finally been removed.

This means, that your IDE disk will be recognized as a “SCSI disk”. The device name “/dev/hda” will change to “/dev/sda” when you boot the new kernel. As a result, your computer will refuse to boot because the bootloader (grub or lilo) can not find the root device.

Robby Workman has written a HOWTO for anyone who wants to do this upgrade. The article was published as By following the HOWTO you will not have any issues in upgrading to the new kernel.

I will print Robby’s HOWTO in full below to give it some more coverage:


Thanks to David Somero, Old_Fogie, gegechris99, and GazL for valuable
feedback and enhancements to this document.

This is written to provide one of several ways to retain a working system after upgrading from Slackware 13.0’s kernel to the newer kernel in -current (which removes support for the “old” ide subsytem, thereby causing all /dev/hd* devices to have /dev/sd* names.

1. Upgrade the kernel and kernel-modules packages normally.

2. Edit /etc/fstab to reflect the change from hd* to sd*.

If you have multiple SATA devices, and especially if you have some of
both hd* and sd* devices present already, then you’re basically going
to be playing a guessing game right now, and you probably want to
consider using some of the persistent symlinks in /dev/disk/by-*/
instead of raw device nodes.

* If you are using one of the generic kernels (requiring an initrd),
then use the sd* name for the root device when creating the image
(edit /boot/initrd-tree/rootdev and then re-run “mkinitrd”).

* You will almost surely want to remove the udev rules file for cdrom
devices (it will be regenerated on the next boot with correct
information reflecting the new libata stuff):
# rm -f /etc/udev/rules.d/70-persistent-cd.rules

* Speaking of optical devices, if you have multiple disk drives and an
optical drive using the old ide subsystem, then be aware that the
optical drive will get a /dev/sr* name instead of /dev/sd* — this is
relevant because you might see something like this (if your optical
drive is currently /dev/hdb):

Old Name –> New Name
/dev/hda /dev/sda
/dev/hdb /dev/sr0
/dev/hdc /dev/sdb

3. Run lilo. Note that you have made no edits at all to it yet, unless
you needed to edit it for the new kernel. Specifically, do not make
any changes with respect to hd* –> sd*.

4. Reboot. At the lilo prompt, press <TAB> and add an append for the
real root device (which will no longer be /dev/hd*). For example, if
the old root device was /dev/hda1, and it will now be /dev/sda1, and
the name of your kernel image is “Linux” then you would type this:

Linux root=/dev/sda1

5. Once the system comes back up, then fix /etc/lilo.conf, run lilo, and
reboot again to be sure everything is correct.

Good luck! Eric

PS: I have refreshed the copy of Robby’s text so that it reflects the updates he made to the original after feedback from several people.


Comment from Christophe Nguyen
Posted: January 9, 2010 at 21:36

In my opinion, lilo should be run as a last step just before reboot to account for the update of initrd image in step 3 (when using a generic kernel). I’ve made the same comment in the thread Robby opened in on that topic.

Comment from Robby Workman
Posted: January 13, 2010 at 05:36

Hey Eric,
I’ve updated the HOWTO after some great feedback from a few people; you might want to edit your page here.

Comment from alienbob
Posted: January 13, 2010 at 10:49

Thanks Robby, I have updated the post with the current text.


Comment from AlBundy
Posted: February 13, 2010 at 21:10

The removal of the old IDE subsystem, is present only in Slackware or it is a change in the vanilla kernel?

Sorry, I can not find the relevant commit in the kernel git repo. Can you give me a link?.

Comment from alienbob
Posted: February 14, 2010 at 13:24

Slackware removed support for the old IDE subsystem from the kernel build. The code is still there in the sources, but it’s being disabled during compilation now, so that Slackware’s kernels no longer contain the IDE drivers.


Pingback from Problems after slackware upgrade to current – can’t boot –
Posted: April 7, 2010 at 11:14

[…] ran into the issue described in…tchover-howto/ (thanks to Robby Workman for writing up the fix procedure) […]

Pingback from With new kernel the device names are changed and lilo still looks for old device
Posted: April 29, 2010 at 23:14

[…] this:…tchover-howto/ […]

Pingback from VFS: Cannot open root device "801" or unknownblock(8,1).
Posted: October 27, 2012 at 14:06

[…] have jumped from Slackware 12.0 to Slackware 14.0 and hit the libata switchover problem.…tchover-howto/ Try changing 'root=/dev/sda1 # slack 12' to 'root=/dev/hda1 # slack 12' in your lilo.conf. You […]

Write a comment