rsync cloning (don’t do this)

 18.11.2019 -  Louis Kowolowski -  ~2 Minutes

This is a really terrible way of cloning one box to another.

I don’t recommend it. Its very gross. There is manual work needed and no guarantee that it won’t really mess up parts of a system.

Don’t do this

If you need to clone something, a much better option would be to use ZFS snapshots, send the snapshot to the remote host, and then boot from something like mfsbsd, clone the snapshot (need it writable), and then set the mountpoint of the clone to /.

Clone a box with Rsync

On the target host:

  • enable root ssh in sshd_config
  • set a root password
  • stop services / remove from pools
  • sudo umount -t nfs -a
  • Remove schange flag from files that need it
    • start by finding all the ones that have it set on target system:
    • sudo find / -flags +schange
    • sudo chflags -R noschg /usr/bin /usr/lib /usr/lib32 /bin /lib /sbin /libexec
      • Make sure to undo this after the copy – restore the ones from your find.
cd /
rsync -av --exclude /boot/loader.conf --exclude /etc/fstab --exclude /etc/rc.conf --exclude /etc/ssh --exclude /tmp/ --exclude /var/tmp/ --exclude /var/log/ --exclude /etc/pf.conf --exclude /etc/hosts --exclude \*.core --exclude /boot/zfs --delete / $HOSTNAME:/

better yet boot the target machine into mfsbsd

zpool import -o altroot=/tank tank
chflags -R noschg /tank
cd /
rsync -avHX --exclude /etc/rc.conf --exclude /tmp --exclude /var/tmp/ --exclude /var/log/ --exclude *.core --exclude /boot/zfs --exclude /usr/src --exclude /usr/obj --exclude /usr/ports --exclude /dev/ --exclude /mnt/ --delete . $machine_running_mfsbsd:/tank

Then fixup stuff and reboot…

  • -H or –hard-links - preserve hard links, keeps rsyncing the rescue busybox-type thing from blowing out the root filesystem
  • -X or –xattrs - preserve extended attributes

Things that may need attention afterwards

  • /etc/rc.conf
  • /etc/fstab - nfs mounts, maybe other stuff

If doing nfs, put your nfs stuff in /etc/fstab and rc.conf AND pf.conf,

sysrc touch /etc/exports
  • Create your mount directories
sysrc nfs_client_enable="YES"
sysrc nfs_client_flags="-n 16"
sysrc rpcbind_enable="YES"

And don’t forget

sysrc dumpdev="AUTO"

Footnotes and References