如何使用BOOM从LVM快照引导Linux主机(CentOS/RHEL 8)

时间:2020-01-09 10:37:31  来源:igfitidea点击:

在本文中,我将分享"使用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