hmm, well, finally got around to performing the transfer... wow i'm a procrastinator...
The specifics: moving the entire linux install root from an ATA harddisk located on hdb5 to a SATA harddisk partition located at sda5 ; all file attributes needed to be preserved (ownerships, times, symlinks, etc).
First, (in the hdb5 install), I recompiled my kernel to include the necessary SATA options into the kernel as opposed to modules (initrd is another option); these options/modules were configured in - sg (scsi generic), sd_mod, scsi_mod, ata_piix (the controller for my intel motherboard)
Second, I updated my lilo.conf to include a new entry with root = /dev/sda5 . Since the kernel included support for the ata and sata drives, both hdb5 and sda5 used the same image = /boot/vmlinuz . Run lilo to install these new configuration options.
Third, booted up knoppix (any live cd with (c)fdisk and mke2fs would work) to reformat the sda drive. As advice, do not use qtparted to do partitioning and formatting work becauses it had some tendencies to incorrectly write partition data.
As root, I ran cfdisk to delete all parititions. I create a separate primary partition for /boot, an logical partition for swap, and a logical partition taking the rest of the space for / . Rebooted the live cd (to have the partition table re-read correctly), I then created the filesystems with mkfs.ext3 /dev/sda1 , mkfs.ext3 /dev/sda5 , mkswap /dev/sda6 .
Fourth, mounted all the necessary partitions with suid and dev permissions. For example, mount /dev/hdb5 and /dev/sda5 with -o dev,suid as they are corresponding partitions. In knoppix, I changed directory as root into the hdb5 mount at /mnt/hdb5. I then issued
cp -a . /mnt/sda5/ ; the -a flag stands for "archive" and preserves as much about the files as possible. The "." states that the current directory's contents are to be used and the destination area is provided. The total time it took to copy 40 gigs of info on a 3.0 ghz processor with 512 meg ram was about 4 hours. The same approach was used to copy the contents of /boot .
Fifth, edited the /mnt/sda5/etc/fstab file to change where /boot , / , and swap to be located at /dev/sda1 , /dev/sda5 , and /dev/sda6 respectively. Edit /mnt/sda5/etc/lilo.conf to change the boot parameter to boot = /dev/sda . Other minor cleanups can be done, such as editing rc.modules to comment out unneeded entries, etc.
Sixth, reboot, remove the live cd, and the lilo screen will be read from the old harddisk (hdb5 in this case). Choose the entry for booting from the SATA drive. There should be no problems. Once booted and everything checks ok, rerun lilo to place the loader on the new drive. Reboot, go into the BIOS and have it boot from the new drive before the old drive. With that, and you've successfully transferred to a new harddrive.
The transfer was extremely smooth and I had no troubles (once I stopped using qtparted...
) . The steps seem long, but once you get going, the process will feel more natural and sensical . Also, you can transfer to a new filesystem should you desire (I somewhat wish I had created a reiserfs filesystem).
Thanks again!