[CentOS] Create CentOS 6 system as "clone" of another - with LVM and different disk sizes

Fri Apr 13 14:38:13 UTC 2018
m.roth at 5-cent.us <m.roth at 5-cent.us>

Toralf Lund wrote:
> Hi,
>
> I just found myself having to set up a new CentOS 6 system with a nearly
> identical configuration to an existing host, so I thought I would just
>
>  1. Do a minimal install to set up partitions etc. on the new system.
>  2. Create an image of the existing system using Clonezilla
>     (http://www.clonezilla.org)
>  3. Run a Clonezilla restore on the new system.
>
> - as I though it would be a lot simpler than replicating the exact
> package selection, installing the same users, doing the same manual
> config edits (which are required) etc.
>
> It turns out that it wasn't quite as easy, though. The problem is that
> the system use LVM2 volumes for the filesystems, and the new host has a
> slightly smaller disk than the other, and Clonezilla seems unable to
> restore to a volume that's smaller than the one that was cloned - even
> if the actual data fits.
>
> I guess I could temporarily reduce the LVM volume sizes on the existing
> units and clone again, but I'd rather not if I can avoid it. Just
> copying file-by-file could be an option, too, but I somehow feel less
> comfortable doing that than the above; there is something about the way
> I could end up with a mixture of my "minimal install" and the "cloned"
> data, I suppose.
>
> Does anyone have any other ideas about how I might achieve what I want?

Manually clone it.

On the new machine:
mkdir /new
mkdir /boot/new
rsync -HPavzx --exclude=/old --exclude=/var/log/wtmp $machine:/. /new/.
rsync -HPavzx $machine:/boot/. /boot/new/.

where $machine is the system you're cloning from. You might want to
exclude other logfiles.

To prevent problems with the Ethernet interfaces:

rsync -HPavzx /etc/sysconfig/network-scripts/ifcfg-eth*
/new/etc/sysconfig/network-scripts
rsync -HPavzx /etc/sysconfig/hwconf /new/etc/sysconfig
rsync -HPavzx /boot/grub/device.map /boot/new/grub/
rsync -HPavzx /etc/udev/rules.d/70-persistent-net.rules
/new/etc/udev/rules.d/

Clean log files - you don't really want any of the old systems:

find /new/var/log/ -type f -exec cp /dev/null {} \;

Copy the original SSH keys - you do *not* want the keys of the system
you're cloning from:

rsync -HPavzx /etc/ssh/ssh_host* /new/etc/ssh

Now rotate: zsh, because it lets you load it's builtin-s, so mv works

zsh
zmodload zsh/files

cd /boot
mkdir old
mv * old
mv old/lost+found .
mv old/new/* .

# Root partition.
cd /
mkdir old
mv * old
mv old/lost+found .
#mv old/root . -- WHY?
mv old/scratch .
mv old/new/* .

sync
sync

Also you might want to

  touch /.autorelabel

to shut up selinux.

Note that this assumes the same CPU, etc, Otherwise, you might need to
make a new initrd.

  mark