Une fonctionnalité dont j’ai très peu entendu parler… mais le fait que la fonctionnalité soit prévue d’être activée dans la prochaine RHEL a attiré mon attention
De quoi s’agit-il ? Et bien d’un petit programme en python qui s’interface avec grub2, si grub a le patch BLS (RHEL 7 & dernières versions de Fedora) comme indiqué sur le site upstream :
https://github.com/bmr-cymru/boom
OK, mais c’est quoi l’intérêt du dit programme ? Bah c’est simplement de pouvoir booter très facilement sur un snapshot LVM du / d’un serveur et donc de pouvoir revenir rapidement sur une version d’OS précédent l’application de patchs…. Et là ça rejoint justement quelque chose que je regardais en ce moment et j’avais justement creusé plusieurs solutions telles :
– Un miroir de LV que je peux synchroniser et désynchroniser à loisir… Le mirroring LV commence à bien mûrir désormais, les fonctionnalités –splitmirrors & –trackchanges sont plutôt intéressantes à regarder. En fait ce qui manque vraiment au niveau du mirroring au niveau LV c’est un bon support au niveau des distributions qui ne chargent souvent pas les modules correspondants au niveau de leur noyau de boot par défaut et surtout de leur noyau en mode rescue… Comme malgré tout c’est ce que j’ai mis en place au niveau de mon OS sur mes serveurs chez OVH, si j’ai un jour du temps je finirais peut-être par proposer un patch pour Debian & Fedora au niveau de leur installateur.
– Les snapshots LV… Là encore j’ai découvert qu’il existait désormais deux types de snapshot, les snapshot classique et le splitsnapshot, je dois creuser les différences…
Sur ces deux solutions, le truc à gérer c’est qu’il faut faire les entrées « à la main » dans grub pour pouvoir booter rapidement en cas de soucis sur la version N-1… Et c’est là justement qu’intervient boom, j’y reviens dans 2 secondes…
– La troisième solution consiste à avoir un autre VG (potentiellement sur le même DD) activable/désactivable à loisir contenant une copie complète au niveau des FS…. Et là rsync avec l’option -x peut être intéressante.
Reprenons nos explications sur boom…
Par défaut tout semble configurer pour que boom apparaisse dans grub
[root@testrhel75 ~]# more /etc/default/boom
BOOM_USE_SUBMENU= »yes »
BOOM_SUBMENU_NAME= »Snapshots »
BOOM_ENABLE_GRUB= »yes »
[root@testrhel75 ~]#
Et le fichier /etc/grub.d/42_boom montre bien que la création des entrées va se faire lors du lancement du grub2-mkconfig
Mais par défaut rien n’est présent… Et c’est bien là que la doc est pas top. Il faut « juste » lancer la commande suivante :
[root@testrhel75 ~]# boom profile create --
from-host --
uname-pattern Linux
Created profile with os_id 2bd22ca:
OS ID: « 2bd22ca1d1cf1a59e24623c92fcbb6aa7fbc867c »,
Name: « Red Hat Enterprise Linux Server », Short name: « rhel »,
Version: « 7.5 (Maipo) », Version ID: « 7.5 »,
UTS release pattern: « Linux »,
Kernel pattern: « /vmlinuz-%{version} », Initramfs pattern: « /initramfs-%{version}.img »,
Root options (LVM2): « rd.lvm.lv=%{lvm_root_lv} »,
Root options (BTRFS): « rootflags=%{btrfs_subvolume} »,
Options: « root=%{root_device} ro %{root_opts} »
[root@testrhel75 ~]#
A partir de là on voit que le profil existe :
[root@testrhel75 ~]# boom profile list
OsID Name OsVersion
2bd22ca Red Hat Enterprise Linux Server 7.5 (Maipo)
[root@testrhel75 ~]#
Créons alors un nouveau LV de snapshot… (Note: On a pas le droit d’appeler les LV en commençant par « snapshot »)
[root@testrhel75 ~]# lvcreate -s -L500M -n snap20180222 /dev/mapper/rhel-root
Logical volume « snap20180222 » created.
[root@testrhel75 ~]#
[root@testrhel75 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rhel owi-aos— <17.00g
snap20180222 rhel swi-a-s— 500.00m root 0.02
swap rhel -wi-ao—- 2.00g
[root@testrhel75 ~]#
On peut alors créer l’entrée correspondante dans boom :
boom create --
title snap20180222 --
root-device /dev/mapper/rhel-snap20180222 --
profile 2bd22ca
Et relancer la création du fichier de configuration de grub :
grub2-mkconfig > /boot/grub2/grub.cfg
J’ai une erreur sur le duplicate UUID ce qui est bien normal 😉
[root@testrhel75 ~]# grub2-mkconfig > /boot/grub2/grub.cfg
Generating grub configuration file …
Found linux image: /boot/vmlinuz-3.10.0-830.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-830.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-46f4128a747747718e53b6edf2592896
Found initrd image: /boot/initramfs-0-rescue-46f4128a747747718e53b6edf2592896.img
[126444.820507] XFS (dm-4): Filesystem has duplicate UUID beb5c54c-a3b1-4e28-92b1-61df4b1873ea – can’t mount
done
[root@testrhel75 ~]
On peut vérifier que grub a désormais la config liée à boom activé si on a les lignes suivantes dans le grub.cfg
### BEGIN /etc/grub.d/42_boom ###
submenu « Snapshots » {
insmod blscfg
bls_import
}
D’ailleurs il n’y a pas besoin de relancer la création du grub.cfg une fois cette opération faite…
On peut désormais faire un touch d’un fichier (mais on pourrait faire une mise à jour de tout un tas de package RHEL, hein)
[root@testrhel75 ~]# touch /toto
[root@testrhel75 ~]#
Et rebooter sur notre snapshot :
Red Hat Enterprise Linux Server (3.10.0-830.el7.x86_64) 7.5 (Maipo)
Red Hat Enterprise Linux Server (0-rescue-46f4128a747747718e53b6edf25928>
SnapshotsUse the ^ and v keys to change the selection.
Press ‘e’ to edit the selected item, or ‘c’ for a command prompt.
snap20180222
Use the ^ and v keys to change the selection.
Press ‘e’ to edit the selected item, or ‘c’ for a command prompt.
Press Escape to return to the previous menu.
Et là c’est le drame…. J’utilise virsh en ligne de commande et donc avec l’émulation du port série et l’option n’est pas reprise…. Ce qui est vite corrigé en faisant ça :
boom profile edit 2bd22ca --
os-options="
root=%{root_device} ro %{root_opts} console=ttyS0"
Et en détruisant/recréant l’entrée correspondant à mon snapshot…
Désormais si je boote sur le snapshot et lorsque je fais un ls sur /, je ne trouve pas le fichier /toto créé précédemment…
En espérant avoir un peu éclairé vos lanternes sur le sujet boom 😉
Je vois bien cette solution avec snapper. La mise à jour fait le snapshot et une entrée dans le grub sur l’ancienne version.
C’est excellent.