Linux HotClone Rsync

http://users.telenet.be/mydotcom/howto/linux/clone.htm

RSYNC – simply clone an entire system ?

To clone an entire system, we will execute rsync with options to :

  • recurse directories
  • preserve permissions, owner and group
  • preserve soft and hard links
  • preserve devices (/dev directory)
  • ignore times, so that ‚newer’ files on target system will get modified to mach those on the model
  • reset timestamps, so that next replications can ignore files that are ‚newer’
  • exclude the copying of running processes
  • show progress, because it’s a lenghty proces. You can also add -v for verbose to just get a list of files being processed

On a clean, fresh installed system, run

rsync -vrpoglHDIt --rsync-path="nice rsync" --exclude=/proc --progress remotemodel:/ /

which will make every file on the new system identical to the remotesystem. Could be tricky re. hostnames and ip configuration, and you have to be pretty sure the hardware of both machines is identical (because you’re also cloning the kernel image, hardware-specific modules, and so on). What you do is actually replacing a running system – by copying another running system. Ain’t that cool.

So image you create 1 model configuration. Then, install Linux on as many PC’s as you require. The configuration does not matter much so this can easily be automated, although it helps if the configuration is already close to the model : rsync only transfers the difference between the machines. Then, rsync the pc’s with the model, using the rsync options shown earlier. The pc’s will become exact copies of the model. You may want to change some things (everything that needs to be unique), then reboot. Finished.

Synchronising running systems

When you add an rsync statement in a cron job or startup script, the ‚clones’ will synchronise at regular intervals and / or everytime they reboot (or when a user logs on). By choosing the directories that need to be synchronised, you can avoid trouble with duplication of values that need to remain unique.

As rsync only transfers differences, this is a nice way to transfer modified configuration files : just edit the config on the model machine, and wait for the others to synchronise. Also works for software distribution : install packages on the model, and configure them. When synchronising, all added files and modifications to existing files will be replicated to the clones. And it can be done while they’re online …

As only changes will be processed, you can use the same rsync statement (without -v and –progress, with -q for quit) : you’ve started with a synchronised system, and only subsequent changes will be transferred, or you can fine-tune it a bit, eg like so:

rsync -rpoglHtu --rsync-path="nice rsync" --exclude=/proc --exclude=/tmp --exclude=/sys  remotehost.com:/ /

-r, –recursive             recurse into directories
-p, –perms                 preserve permissions
-o, –owner                 preserve owner (super-user only)
-g, –group                 preserve group
-l, –links                 copy symlinks as symlinks
-H, –hard-links            preserve hard links
-t, –times                 preserve modification times
-u, –update                skip files that are newer on the receiver
-q, –quiet                 suppress non-error messages

 

 

  • refer to earlier example
  • do not overwrite newer files on target (= do not undo changes made by users)
  • multiple exclude paths for irrelevant directories
  • run quiet