Automated disk cloning

Hi,

I'm running Ubuntu on my laptop. To keep my data safe and easy disaster recovery as well I bought similar HDD to one installed in my laptop with higher capacity and using USB box I'm doing disk clone to it. So at any time I can replace disk and carry on with my work as before.

I'm trying to simplify this, automate it. My goal is:

  1. plug external USB disk and boot from it
  2. "one click" action to execute cloning, let it work.
  3. when done, unplug disk and reboot as normal.

I don't want to look for live CDs or use USB key linux installations to do this job everytime, I just want something that will reside on the same external disk, will boot up and do its job.

I tried something like this on virtual machine:
disk A: 300 MB disk, one primary partition, linux installation (DSL) (grub)
disk B: 1GB, actuall back up disk (USB)

I have created primary partition 4 on disk B of size 300MB at the end of the drive. Installed GRML linux on it and Grub as a boot manager. This is suppose to be backu up performing OS.

I've created shell script which does this:

  1. backup MBR of disk B
dd if=/dev/sdb of=bMBR bs=512 count=1
  1. backup MBR of disk A
dd if=/dev/sda of=aMBR bs=512 count=1
  1. clone disk A to disk B from possition 0
dd_rescue /dev/sda /dev/sdb
  1. restore disk B MBR so it can be used to backup next time again
dd of=/dev/sdb if=bMBR bs=512 count=1

when I wanted to use disk B as regular disk I copied back MBR of disk A.

dd of=/dev/sdb if=aMBR bs=512 count=1

and it shoudl boot up from disk B as it would from disk A, disk B should be regular clone of disk A.

I didn't get expected results.
In first case when disk B should have its original MBR, after cloning it does hang at boot time with black screen and GRUB written on top.
If I copy MBR of disk A to disk B and try to boot from disk B, boot manager seem to be ok but I get kernel panic message from DSL linux with no more info.

I'm not an expert in this field I just wanted to confirm with more experienced users whether I'm just missing something or going completely wrong route. So I won't spend ages of trying to fix something that can't work this way.

Is there anyone who can direct me or give me some clues?

Thanks

I am confused as to why you are copying and restoring MBRs. What are you trying to achieve doing this?

You state that you have a laptop and a similar external hard disk. Then you start talking about a virtual machine with a 300Mb disk and a 1GB disk. Which is it? Actual hardware or a virtual environment?

Well I'm trying to prove the Idea first in virtual environment, I don't want to screw up actually backed up data on real external disk and also it would take 2 hours each try on real drives to copy 100GB.
So I installed 2 different small linux distributions on 2 virtual disks in virtual machine simulating the stuff with much less data, so I have a sandbox to play with.

I want the external disk to be bootable. So I can boot directly from it and it will handle copying data from live OS disk to external disk itself.
I prepared external disk with small partition in the end of disk and made disk bootable from it. Linux starts up and runs shell script with steps I described.
I'm copying the data from lsource disk to external disk from position 0 which overwrites MBR on external disk with MBR of source disk, so I back up MBR of external and then restore it.
I coudl possibly do copy of data from position 513 which possible is the same thing as backing up and restoring later isn't it?

I just want to copy data from source disk to external but keeping external in its actual state, bootable and booting from partition at the end of the disk.
What I assumed was that if I keep external disk MBR including partition table created for one partition at the end, it would not matter on other data copied to the disk after MBR and not touching partition at the end of the disk.
I'm I completely wrong here?