First, put the old server in rescue mode. Mount the disk on /mnt/old On the new server, allow root to connect to ssh by setting PermitRootLogin to Yes in /etc/ssh/sshd_config. Mount through sshfs the whole disk of the new server.

old-server# sshfs root@new-server:/ /mnt/new

Open a new tmux/screen to do the copy and start the replication

old-server-rescue# cd /mnt/old
old-server-rescue /mnt/old# rsync -a -H -R -A -X --devices --specials -t --delete --progress --human-readable . /mnt/new

** and wait a few hours **

Beware, as /mnt/old/dev is not fully populated, devices on the new server will be deleted. Devices like /dev/urandom won't be available and further ssh connections wont be possible.

Once the rsync is done, put the new server in rescue mode. Mount the disk :

rescue-new-server# mount /dev/sda1 /mnt

Bind some extra directories :

rescue-new-server# for i in dev proc sys; do mount -o bind /$i /mnt/$i; done

And chroot in /mnt:

rescue-new-server# chroot /mnt

Modify the folowing files :

  • /etc/udev/rules.d/70-persistent-net.rules and update the new mac address for eth0
  • /etc/fstab if needed to update the disk's UUID (not necessary if you use /dev/sda1 as device name)
  • /etc/network/interface to update the new ip address/gateway/...

Install grub and update the configuration file:

new-server# grub-install /dev/sda
new-server# update-grub

Once done, exit the chroot and umount everything

new-server# exit
rescue-new-server# umount /mnt/dev /mnt/proc /mnt/sys /mnt

And reboot. Your new server should be up in no time with all your datas