Migrate FreeBSD From One Harddrive To Another

General Information

This guide will explain how you can move your FreeBSD installation from one hard disk drive to another. I have done this many times using the dump/restore utility. Before you begin, be sure you have read this document carefully.


  1. Root Access or Sudo Rights.
  2. A List of Your Old and new Hardrive Information like /dev/ad* /dev/da* /dev/sd* and so on this can be checked by doing cat /var/log/messages and read the disctypes that come along.


Let’s assume that our FreeBSD installation is on a 4 gigabyte drive (ide master ad0) and we would like to move it to a new 20 gig drive.

What you need to do is remove the old hard disk, install the new [20G] drive as an ide master and perform a minimal clean install of FreeBSD, setting up the partitions exactly how you want them. Be se sure to set the drive as bootable and boot from it one time as a test.

Next, put your old [4G] drive back in the system as an ide master and the new [20G] drive in as an ide slave. Boot the system on your old installation in single user mode.

To boot in single user mode press 4 at the 10 second countdown.

At the (#) prompt type:

# fsck -p
# mount -u /
# mount -a
# swapon -a
# adjkerntz -i

Next, make sure you have the device files made so you can mount the partitions on the slave drive.

# cd /dev
# ./MAKEDEV ad1s1a
# ./MAKEDEV ad1s1e
# ./MAKEDEV ad1s1f

Now make mount points for the new drive’s partitions:

# mkdir /backup
# mkdir /backup/root
# mkdir /backup/usr
# mkdir /backup/var

Lastly, I use a shell script to do the following:

  1. create new filesystems (newfs the drive)
  2. mount the partitions
  3. dump the data from my old drive, and restore it to my new one
  4. unmount the new drives partitions
  5. enable softupdates on the new drive (optional)

Here is the script I use:

newfs /dev/ad1s1a
newfs /dev/ad1s1e
newfs /dev/ad1s1f

mount /dev/ad1s1a /backup/root
mount /dev/ad1s1e /backup/var
mount /dev/ad1s1f /backup/usr

( dump -0f - / ) | ( cd /backup/root ; restore -rf - )
( dump -0f - /var ) | ( cd /backup/var ; restore -rf - )
( dump -0f - /usr ) | ( cd /backup/usr ; restore -rf - )

umount /backup/root
umount /backup/var
umount /backup/usr

tunefs -n enable /dev/ad1s1a
tunefs -n enable /dev/ad1s1e
tunefs -n enable /dev/ad1s1f


It will probably take several hours to perform the dump/restore, so be patient. Once the data has been dumped and restored to the new drive, all you have to do is remove your old drive and put it in a safe place, set the new drive to a master and reboot. Your system will now boot your old FreeBSD installation on your new hard disk.

Speak Your Mind