如何使用BOOM从LVM快照引导Linux主机(CentOS/RHEL 8)
在本文中,我将分享"使用BOOM从LVM快照启动RHEL 8 Linux主机的步骤"。
我们已经具有在逻辑卷上创建快照的功能,但是现在从RHEL 7开始。
5引入了BOOM实用程序,用于管理LVM快照和镜像启动项。
向卷组添加额外的空间
我们需要在卷组中具有备用存储,才能创建LVM快照。应该为快照分配足够的空间,以容纳更新所应用的更改。一个简单的经验法则总是可以产生足够的空间(但是可能需要比绝对必要更多的空间),是使快照的大小与卷上已消耗的空间相同,如df之类的工具所报告。如果需要添加存储,请参阅如何在Red Hat Enterprise Linux中在线扩展逻辑卷及其文件系统?
[root@node4 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 8G 0 disk ├─sda1 8:1 0 512M 0 part /boot └─sda2 8:2 0 7.5G 0 part ├─rhel-root 253:0 0 16.1G 0 lvm / └─rhel-swap 253:1 0 956M 0 lvm [SWAP] sdb 8:16 0 17G 0 disk sdc 8:32 0 10G 0 disk └─sdc1 8:33 0 10G 0 part └─rhel-root 253:0 0 16.1G 0 lvm / sr0 11:0 1 6.5G 0 rom sr1 11:1 1 1024M 0 rom
为了本文的方便,我在系统上添加了/dev/sdb,并创建了分区/dev/sdb1,文件系统类型为" 8e"
在RHEL 8 Linux上安装BOOM
第一步是安装boom-boot软件包。
说明:
为了能够使用yum命令安装必备的rpm,我们必须有一个存储库。
我们可以使用subscription-manager注册Red Hat节点,也可以使用香草RHEL 8 DVD ISO创建离线仓库。
[root@node4 ~]# dnf install boom-boot -y Updating Subscription Management repositories. Last metadata expiration check: 12:44:30 ago on Thu 20 Jun 2019 12:00:09 AM IST. Dependencies resolved. ========================================================================================== Package Arch Version Repository ========================================================================================== Installing: boom-boot noarch 0.9-5.el8 rhel_dvd_baseos Installing dependencies: boom-boot-conf noarch 0.9-5.el8 rhel_dvd_baseos python3-boom noarch 0.9-5.el8 rhel_dvd_baseos Installing weak dependencies: boom-boot-grub2 noarch 0.9-5.el8 rhel_dvd_baseos Transaction Summary ========================================================================================== Install 4 Packages Total size: 443 k Installed size: 2.2 M Downloading Packages: Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : Installed: boom-boot-conf-0.9-5.el8.noarch Installing : boom-boot-conf-0.9-5.el8.noarch Installed: boom-boot-conf-0.9-5.el8.noarch Installed: python3-boom-0.9-5.el8.noarch Installing : python3-boom-0.9-5.el8.noarch Installed: python3-boom-0.9-5.el8.noarch Installed: boom-boot-grub2-0.9-5.el8.noarch Installing : boom-boot-grub2-0.9-5.el8.noarch Installed: boom-boot-grub2-0.9-5.el8.noarch Installed: boom-boot-0.9-5.el8.noarch Installing : boom-boot-0.9-5.el8.noarch Installed: boom-boot-0.9-5.el8.noarch Running scriptlet: boom-boot-0.9-5.el8.noarch Verifying : boom-boot-0.9-5.el8.noarch Verifying : boom-boot-conf-0.9-5.el8.noarch Verifying : boom-boot-grub2-0.9-5.el8.noarch Verifying : python3-boom-0.9-5.el8.noarch Installed: boom-boot-0.9-5.el8.noarch boom-boot-grub2-0.9-5.el8.noarch boom-boot-conf-0.9-5.el8.noarch python3-b Complete!
创建LVM快照
在创建LVM快照之前,请使用验证RHEL 8 Linux主机上的某些内容。以便稍后我们可以验证快照合并和删除是否正常工作。
我创建了一个具有以下内容的重要文件:
[root@node4 ~]# echo "This is an important file" > importantfile [root@node4 ~]# cat importantfile This is an important file
我的RHEL 8 Linux主机上也有一个testuser
:
[root@node4 ~]# id testuser uid=1000(testuser) gid=1000(testuser) groups=1000(testuser),10(wheel)
由于我已通过添加驱动器扩展了卷组,因此现在我有足够的空间来创建快照
[root@node4 ~]# vgs VG #PV #LV #SN Attr VSize VFree rhel 3 2 0 wz--n- <34.49g 17.49g
以下是我现有的逻辑卷:
[root@node4 ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root rhel -wi-ao---- 16.06g swap rhel -wi-ao---- 956.00m
现在让我们使用lvcreate为根逻辑卷创建LVM快照,如下所示:
[root@node4 ~]# lvcreate -s rhel/root -n root_snapshot_20062019 -L 16G Logical volume "root_snapshot_20062019" created.
重新验证可用的逻辑卷:
[root@node4 ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root rhel owi-aos--- 16.06g root_snapshot_20062019 rhel swi-a-s--- 16.00g root 0.16 swap rhel -wi-ao---- 956.00m
创建操作系统配置文件
Boom使用模板驱动的系统来为不同的操作系统生成启动项。在创建启动项之前,必须使用必需的模板定义来创建OS配置文件。可以使用从正在运行的系统获得的默认值来完成此操作,或者用户可以指定命令行选项来自定义配置文件。 uname模式是与系统内核版本匹配的正则表达式,以确定运行系统是否与给定的Os Profile相匹配。通过将其设置为" el8",它将在创建或者修改引导条目时自动检测到正确的OS配置文件。
[root@node4 ~]# boom profile create --from-host --uname-pattern el8 Created profile with os_id e6f881a: OS ID: "e6f881ae3f8a2e010375fb840bb4f386b330db6e", Name: "Red Hat Enterprise Linux", Short name: "rhel", Version: "8.0 (Ootpa)", Version ID: "8.0", UTS release pattern: "el8", 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}"
暗示:
用于Red Hat Enterprise Linux 8的该实用程序的未来版本将包含操作系统的内置配置文件,因此无需执行此步骤
列出可用的操作系统配置文件:
[root@node4 ~]# boom profile list OsID Name OsVersion e6f881a Red Hat Enterprise Linux 8.0 (Ootpa)
要检查操作系统配置文件的内容:
[root@node4 ~]# boom profile show e6f881a OS Profile (os_id=e6f881a) OS ID: "e6f881ae3f8a2e010375fb840bb4f386b330db6e", Name: "Red Hat Enterprise Linux", Short name: "rhel", Version: "8.0 (Ootpa)", Version ID: "8.0", UTS release pattern: "el8", 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@node4 ~]# boom create --title "Root Snapshot - 20/06/2019" --rootlv rhel/root_snapshot_20062019 Created entry with boot_id 3e1b376: title Root Snapshot - 20/06/2019 machine-id 818ab41d69e9442fac4a0eaa1ece0b1f version 4.18.0-32.el8.x86_64 linux /vmlinuz-4.18.0-32.el8.x86_64 initrd /initramfs-4.18.0-32.el8.x86_64.img options root=/dev/rhel/root_snapshot_20062019 ro rd.lvm.lv=rhel/root_snapshot_20062019
重要的提示:
对于RHEL 7主机,如果我们先前未在该系统上配置臂架,则必须重新创建Grub2配置。
#grub2-mkconfig>/boot/grub2/grub.cfg`在RHEL 8上不需要此步骤,因为它默认情况下使用BLS-请勿在RHEL 8中修改GRUB2配置。
通过运行以下命令,我们可以查看要配置使用哪些快照:
[root@node4 ~]# boom list BootID Version Name RootDevice 3e1b376 4.18.0-32.el8.x86_64 Red Hat Enterprise Linux /dev/rhel/root_snapshot_20062019
接下来,我们将对RHEL 8 Linux系统进行一些更改,然后从快照重启。当我们从快照启动时,拍摄快照后对根逻辑卷所做的任何更改都将不可见。 。我将删除测试用户并删除我的重要文件
[root@node4 ~]# userdel testuser [root@node4 ~]# id testuser id: ‘testuser’: no such user [root@node4 ~]# rm importantfile rm: remove regular file 'importantfile'? y
完成后,可以重新启动系统。在grub初始屏幕上,应该有一个Root Snapshot条目。选择该条目将允许启动到备用根目录。
我们可以通过按e进行编辑来验证此菜单的内容
一旦我们在此处按Enter键,系统将从该快照启动。
登录到系统后,我们可以看到快照创建后在根逻辑卷中所做的更改不存在:
[root@node4 ~]# id testuser uid=1000(testuser) gid=1000(testuser) groups=1000(testuser),10(wheel)
如我们所见,我的测试用户仍然存在,如果我们还记得的话,我是在拍摄快照后删除的。因此,我们所做的更改似乎运行良好。
验证用于引导rhel 8 linux主机的GRUB2选项:
[root@node4 ~]# cat /proc/cmdline BOOT_IMAGE=(hd0,msdos1)/vmlinuz-4.18.0-32.el8.x86_64 root=/dev/rhel/root_snapshot_20062019 ro rd.lvm.lv=rhel/root_snapshot_20062019
将快照合并回原始逻辑卷
常见的工作流程是在更改之前制作快照,然后进行更改。
如果更改成功,通常会在一段时间后删除快照。
如果更改不成功,则我们需要将快照合并到原始逻辑卷中,以便永久回滚创建快照后所做的不成功更改。
因此,让我们假设我们的更改没有成功,我们希望回滚到快照状态。
重要的提示:
尝试合并之前,请确保已使用原始基本内核而不是使用快照选项引导了系统。
接下来执行以下命令合并快照。
[root@node4 ~]# lvconvert --merge /dev/rhel/root_snapshot_20062019 Delaying merge since origin is open. Merging of snapshot rhel/root_snapshot_20062019 will occur on next activation of rhel/root.
lvconvert命令报告由于快照已打开并正在使用中,因此无法合并快照,并且下次激活时快照将完成。
要删除快照,请运行以下命令,将3e1b376替换为先前命令中显示的" BootID":
[root@node4 ~]# boom entry delete 3e1b376 Deleted 1 entry
要验证该条目已被删除,请执行以下操作:
[root@node4 ~]# boom list BootID Version Name RootDevice
现在,既然我们已经合并了LVM快照并从GRUB2中删除了所有与BOOM相关的条目,那么我们将继续使用" reboot"命令重新启动服务器。
[root@node4 ~]# reboot
一旦RHEL 8 Linux主机启动,请验证内容。它应与拍摄LVM快照之前的快照相同。
[root@node4 ~]# id testuser uid=1000(testuser) gid=1000(testuser) groups=1000(testuser),10(wheel) [root@node4 ~]# cat importantfile This is an important file
现在,合并之后,我们没有逻辑卷快照文件:
[root@node4 ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root rhel -wi-ao---- 16.06g swap rhel -wi-ao---- 956.00m
我们可以在系统从主内核启动后验证GRUB2的内容
[root@node4 ~]# cat /proc/cmdline BOOT_IMAGE=(hd0,msdos1)/vmlinuz-4.18.0-32.el8.x86_64 root=/dev/mapper/rhel-root ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet