====== ZFS - Clone a system - Detailed Instructions ======
===== Boot the target system =====
Boot the target system that will receive the ZFS Snapshot.
----
===== Remove all previous snapshots on the target system =====
zpool import -f tank
zfs destroy -Rv 'tank@%'
----
===== Create a snapshot on the source system =====
On the source system, create a new snapshot, and send it to the target.
zfs snapshot -r 'tank@p1snap'
zfs send -v --props --replicate --large-block --compressed tank@p1snap | ssh root@target 'zfs receive -F tank'
----
===== Mount the received tank on the target system =====
On the target:
zfs set mountpoint=/sysroot tank/root
zfs set mountpoint=/sysroot/boot tank/root/boot
zfs set mountpoint=/sysroot/tmp tank/root/tmp
zfs set mountpoint=/sysroot/var tank/root/var
zfs mount -a
mount --rbind /dev/ /sysroot/dev/
mount --rbind /proc/ /sysroot/proc/
mount --rbind /sys/ /sysroot/sys/
mount --rbind /run/ /sysroot/run/
chroot /sysroot/ /bin/bash
**NOTE:** This mounts the freshly received tank, and chroots into it.
----
===== SELinux relabel =====
Sets the system to do an SELinux relabel:
touch /.autorelabel
----
===== Update /etc/fstab =====
Edit /etc/fstab, and fix any UUIDs:
UUID="ABCD-E123" /boot/efi vfat defaults 0 0
----
===== Update hostname =====
Correct the hostname on the target:
echo some_hostname > /etc/hostname
----
===== Limit Memory Usage (Optional) =====
If the system receiving the clone is low spec, add the zfs configuration limiting memory usage:
cp /root/tiny-modprobe.d-zfs.conf /etc/modprobe.d/zfs.conf
----
===== Rebuild boot =====
dracut --force /boot/initramfs-5.2.9-200.fc30.x86_64.img 5.2.9-200.fc30.x86_64
ZPOOL_VDEV_NAME_PATH=YES grub2-mkconfig > /boot/grub2/grub.cfg
sed -i '/^set pager/ s/1/0/' /boot/grub2/grub.cfg
**NOTE: This:
* rebuilds the initial ram-filesystem.
* rebuilds the grub.cfg.
* disables the grub pager.
----
===== Export the tank =====
On the target:
Exit the chroot, unmount filesystems, and export tank:
exit
umount -l /sysroot/{dev,proc,sys,run}/
zfs set mountpoint=/ tank/root
zfs set mountpoint=legacy tank/root/boot
zfs set mountpoint=legacy tank/root/tmp
zfs set mountpoint=legacy tank/root/var
zpool export tank
----
===== Reboot the Target =====
reboot -f
----
===== Remove the snapshot on the target =====
On the target, remove the snapshot p1snap:
zfs destroy -vr 'tank@p1snap'
----
===== Remove the snapshot on the source =====
On the sender, remove the snapshot p1snap:
zfs destroy -vr 'tank@p1snap'