I set up machines, customize them a bit and then restore them onto other machines, almost always with different hardware, so here's what I normally do:
NOTE: sometimes I have issues with graphic drivers, (frequently nvidia) when moving to and from a machine that didn't have them or had
a different version of them.
FIRST: run most of this as root with sudo (you can lock the command line on root using sudo -s )
Backup
1. boot the source machine with a live CD
2. plug in a storage device large enough to hold a snapshot of the machine.
3. backup everything to the external hard drive using tar command.
for example:
tar cvpzf /media/BackupDrive/SystemBackup.tar.gz ./
Restore
1. boot the destination machine from a live CD
2. use the partitioning tool (gparted) to create the ext4 and swap partition
3. untar the backup onto the recently created partition.
for example:
tar xvpzf /media/BackupDrive/SystemBackup.tar.gz ./
Fix Grub and boot sector
I usually use the boot-repair-disk for this
https://sourceforge.net/projects/boot-repair-cd/
if the machines are going to live in the same network you might want to change it's name (edit /etc/hostname )
you may also want to update /etc/fstab with the proper hard drive ID's
for this run the command blkid and get the UUID string for each partition and then use your favorite text editor to replace it in your respective fstab file line