Copy Linux to a new Harddisk

In the following howto i assume that sda is your source drive and sdb is your target drive.. please make sure not to mix this up in your setup! also i assume that your operating system disk has three partitions, sda1 as /boot, sda2 as swap and sda3 as /

  • stop any running services like apache, mysql etc. on the source system. or even better, boot from a live linux and work from there..
  • partition and format the new harddisk
    • parted /dev/sda –> print shows the current partitions of sda including their sizes.. that should help :)
  • create mountpoints for source and target
    mkdir /tmp/source
    mkdir /tmp/target
  • mount source and targed partitions:
    mount /dev/sda3 /tmp/source
    mount /dev/sda1 /tmp/source/boot
    mount /dev/sdb3 /tmp/target
    mkdir /tmp/target/boot
    mount /dev/sdb1 /tmp/target/boot
  • now copy the os:
    rsync -aHvx --numeric-ids /tmp/source /tmp/target
  • edit /tmp/target/etc/fstab and /tmp/target/boot/grub/menu.lst and update UUID according to harddisks_by_uuid_in_debian_lenny
  • chroot to the target drive and install grub:
    mount --bind /dev/ /tmp/target/dev
    mount --bind /sys/ /tmp/target/sys
    mount --bind /proc/ /tmp/target/proc
    chroot /tmp/target
    grub-install /dev/sdb
    update-grub
    grub
    find /boot/grub/menulst

    (if you have an own partiton for boot, you can leave boot away in the above command)

    root (hd0,0)
    setup (hd0)
  • if you are moving your installation to new hardware (other than just the harddisk) you might need to update your initrd image to contain the necessary drivers (i.e. in redhat based systems). run dracut
  • reboot your system