Friday 14 December 2018

Booting CentOS from a ZFS Clone

In the previous article, we showed how to setup CentOS7 with ROOT on ZFS. Here we are about to see how you can snapshot and clone an existing installation, then configure GRUB to boot from the clone.
This can be useful in situations like, when upgrading the operating system, when anything can go wrong or simply when you want to have multiple, individual bootable instances of the same O/S.


Steps
====

Assuming that you have a working CentOS7 with ROOT on ZFS, the first step would be to create a snapshot of the current state of the O/S and then after, clone it.

$ zfs snapshot rpool/ROOT/centos@snap-clone1

$ zfs clone rpool/ROOT/centos@snap-clone1 rpool/ROOT/centos-clone1


Set the mount point for the clone ...

$ zfs set mountpoint=/ rpool/ROOT/centos-clone1

Now, we need to create a customised GRUB entry in order to boot from the clone. To do so, copy/paste the following entries into  /etc/grub.d/40_custom  .
Adapt kernel version and initramfs accordingly. The only change is the one highlighted in red color. That entry instructs GRUB to boot from the clone instead of the normal dataset.

[root@localhost ]# vi /etc/grub.d/40_custom 


menuentry 'CentOS Clone1' --class centos --class gnu-linux --class gnu --class os {
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_gpt
        insmod part_gpt
        insmod diskfilter
        insmod mdraid09
        insmod fat
        set root='mduuid/cc266933031fb13be368bf24bd0fce41'
        linuxefi /vmlinuz-3.10.0-957.1.3.el7.x86_64
root=ZFS=rpool/ROOT/centos-clone1 ro crashkernel=auto
        initrdefi /initramfs-3.10.0-957.1.3.el7.x86_64.img
}


Then run grub2-mkconfig to re-generate the GRUB configuration file.

$ grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

This should add the customised entry into the boot list.
Since /boot is located on a different partition (linux raid), no further steps are required.
Each individual clone instance will of course use the same kernel and initramfs.

That's all, now let's reboot and choose "CentOS Clone1" entry in the GRUB boot menu. If successful, that should boot into the cloned version of CentOS. To verify this, simply run the following command. Note the item highlighted in red color.

$ df -h /
Filesystem         Size  Used Avail Use% Mounted on
rpool/ROOT/centos-clone1  9.3G  3.5G  5.9G  38% /




Now you have two individual versions of CentOS where you can do whatever changes you want, without worrying about destroying the system.
By using the same steps as described above you can create multiple clones and GRUB boot entries, to boot multiple individual versions of the same O/S.


No comments:

Post a Comment