Gentoo Linux Hard Drive Upgrade

# Filed on by / reply

I recently had to upgrade a Gentoo Linux system from a 40 GB hard drive to a new 80 GB drive.  This system powers the stereo in my car, and I have a full backup of the system on the main PC in my house.  So I started by putting the new drive into a USB2 enclosure and hooking it up to the main PC, but of course you could also hook it directly to the system you’re upgrading, or even just put it inside the system you’re upgrading.  Anyway, here’s what I did.

Determine which /dev/sdX device the USB drive gets:

# dmesg |grep sd

Use cfdisk to partition the drive (I usually use a simple 2-partition setup: one partition of about 1GB for swap, and the other partition is the rest of the disk):

# cfdisk /dev/sda

Create the filesystems:

# mke2fs -j -m 1 /dev/sda1
# mkswap /dev/sda2

Mount the main partition:

# mkdir /mnt/new80gig
# mount /dev/sda1 /mnt/new80gig

Copy all the data over:

# rsync -av --delete /home/carstereo_backup/ /mnt/new80gig/

Edit the filesystem configuration if the new partition scheme isn’t exactly the same as the old one:

# vim /mnt/new80gig/etc/fstab

Unmount the new drive:

# umount /mnt/new80gig

Next I disconnected the USB2 enclosure and took the new 80 gig drive out of it.  I then opened up the old system (the one from my car), removed its old 40 gig drive, and installed the new 80 gig drive.  But of course, this new drive is not yet bootable.  The system is running an older version of Gentoo, and it uses LILO, which means I need to run the lilo command from within the system itself.  But since it won’t boot, I need to boot from a CD (or USB thumb drive, etc) and then chroot into the system.  I used a Gentoo install disc (install-x86-universal-2005.1) in an external USB CDROM drive to boot the system, then:

Mount the proc filesystem (if it’s not already):

# mkdir -p /mnt/gentoo/proc
# mount -t proc none /mnt/gentoo/proc

Mount the main partition from the new 80 gig drive:

# mount /dev/hda1 /mnt/gentoo

Activate/switch to the installation on the new drive:

# chroot /mnt/gentoo /bin/bash
# env-update
# source /etc/profile

Edit the LILO configuration if the new partition scheme isn’t exactly the same as the old one:

# vim /etc/lilo.conf

Run lilo to make the new drive bootable:

# lilo

If that command doesn’t give any errors, then you should be all finished.  Just reboot.

I ran into one other issue after rebooting, though: the boot-time filesystem check (e2fsck) was giving me an error, saying that "Filesystem has unsupported feature(s) ... Get a newer version of e2fsck!"  Since I had created the filesystem on a newer system with a newer version of ext2/ext3, it apparently included some features that the older system’s ext2/3 did not support.  So I had to determine which features were enabled:

# dumpe2fs /dev/hda1 |grep -i features

This showed the features has_journal, resize_inode, dir_index, filetype, sparse_super, and large_file.  I then ran "man mke2fs" to see which of those features were supported by the currently-installed ext2/3, and saw that all except resize_inode and large_file were supported.  The debugfs command can be used to disable features on a filesystem:

# debugfs -w /dev/hda1
debugfs: feature -resize_inode
debugfs: feature -large_file
debugfs: quit

(It’s apparently fine to run debugfs on a mounted partition.)

I then rebooted and everything worked fine.



Reply to this message here:

Your name
Email (why?)
Website (if you have one)
Subject
search posts:

[ archives ]