系统设计指南
设计 RHEL 8 系统
摘要
对红帽文档提供反馈 复制链接链接已复制到粘贴板!
我们感谢您对我们文档的反馈。让我们了解如何改进它。
通过 Jira 提交反馈(需要帐户)
- 登录到 Jira 网站。
- 单击顶部导航栏中的 Create。
- 在 Summary 字段中输入描述性标题。
- 在 Description 字段中输入您对改进的建议。包括文档相关部分的链接。
- 点对话框底部的 Create。
部分 I. 安装的设计 复制链接链接已复制到粘贴板!
第 1 章 系统要求和支持的构架 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 8 在混合云部署环境中提供稳定、安全、持续的基础,并提供更迅速地提供工作负载所需的工具。您可以将 RHEL 部署为受支持的 hypervisor 和云提供商环境以及物理基础架构上的客户机,因此您的应用程序可以利用领先的硬件架构平台中的创新。
在安装前,请查看为系统、硬件、安全性、内存和 RAID 提供的指南。
如果要将您的系统用作虚拟化主机,请查看 虚拟化所需的硬件要求。
Red Hat Enterprise Linux 支持以下构架:
- AMD 和 Intel 64 位构架
- 64 位 ARM 架构
- IBM Power Systems, Little Endian
- 64 位 IBM Z 架构
1.1. 支持的安装目标 复制链接链接已复制到粘贴板!
安装目标是保存 Red Hat Enterprise Linux 并引导系统的存储设备。Red Hat Enterprise Linux 支持用于 IBMZ、IBM Power、AMD64、Intel 64 和 64 位 ARM 系统的以下安装目标:
- 通过标准内部接口(如 DASD、SCSI、SATA 或 SAS)连接的存储
- Intel64、AMD64 和 arm64 构架上的 BIOS/固件 RAID 设备
-
Intel64 和 AMD64 架构上扇区模式下的 NVDIMM 设备,由
nd_pmem驱动程序支持。 - 通过光纤通道主机总线适配器连接的存储,如 DASD (仅限 IBM Z 架构)和 SCSI LUN,包括多路径设备。有些操作可能需要厂商提供的驱动程序。
- Xen 虚拟机上 Intel 处理器上的 Xen 块设备.
- KVM 虚拟机上 Intel 处理器上的 VirtIO 块设备.
红帽不支持安装到 USB 盘或 SD 内存卡。有关支持第三方虚拟化技术的详情,请查看 红帽硬件兼容性列表。
1.2. 系统规格 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 安装程序自动侦测并安装您的系统硬件,因此您不必提供具体系统信息。然而,对于某些 Red Hat Enterprise Linux 安装场景,建议您记录系统规格以备将来参考。这些情况包括:
使用自定义分区布局安装 RHEL
Record:附加到系统的磁盘的模型号、大小、类型和接口。例如: SATA0 上的 Seagate ST3320613AS 320 GB、SATA1 上的 Western Digital WD7500AAKS 750 GB。
在现有系统中将 RHEL 作为附加操作系统安装
Record:系统中使用的分区。此信息可以包括文件系统类型、设备节点名称、文件系统标签和大小,并允许您在分区过程中识别特定的分区。如果某个操作系统是 Unix 操作系统,Red Hat Enterprise Linux 可能会报告不同的设备名称。通过执行与 mount 命令和 blkid 命令等效的命令,以及在 /etc/fstab 文件中可以找到其他信息。
如果安装了多个操作系统,Red Hat Enterprise Linux 安装程序会尝试自动探测它们,并配置引导装载程序来引导它们。如果没有自动探测到它们,您可以手动配置附加操作系统。
从本地磁盘上的镜像安装 RHEL
Record:保存镜像的磁盘和目录。
从网络位置安装 RHEL
如果需要手动配置网络,即不使用 DHCP。
Record:
- IP 地址
- 子网掩码
- 网关的 IP 地址
- 服务器 IP 地址(如果需要)
如果您需要网络支持,请联系您的网络管理员。
在 iSCSI 目标上安装 RHEL
Record:iSCSI 目标的位置。根据您的网络,可能需要 CHAP 用户名和密码,以及反向 CHAP 用户名和密码。
如果系统是某个域的一部分,请安装 RHEL
验证域名是否由 DHCP 服务器提供。如果没有,在安装过程中输入域名。
1.3. 磁盘和内存要求 复制链接链接已复制到粘贴板!
如果安装了一些操作系统,必须确定分配的磁盘空间与 Red Hat Enterprise Linux 要求的磁盘空间分离。在某些情况下,将特定分区专用于 Red Hat Enterprise Linux 很重要,例如 AMD64、Intel 64 和 64 位 ARM,至少两个分区(/ 和 swap)必须专用于 RHEL,对于 IBM Power 系统服务器,至少有三个分区(/、swap 和 PReP 引导分区)必须专用于 RHEL。
另外,您必须有至少 10 GiB 的可用磁盘空间。要安装 Red Hat Enterprise Linux,必须至少有 10GiB 未分区磁盘空间或可删除分区。如需更多信息,请参阅 分区参考。
| 安装类型 | 最小 RAM |
|---|---|
| 本地介质安装(USB、DVD) |
|
| NFS 网络安装 |
|
| HTTP、HTTPS 或者 FTP 网络安装 |
|
可使用比最低要求小的内存完成安装。具体的要求取决于您的环境和安装路径。测试各种配置,以确定您环境所需的最小 RAM。使用 Kickstart 文件安装 Red Hat Enterprise Linux 与标准安装有相同的最小 RAM 要求。然而,如果您的 Kickstart 文件包含需要额外内存的命令,或者将数据写入 RAM 磁盘,则可能需要额外的 RAM。如需更多信息,请参阅 自动安装 RHEL。
1.4. 图形显示器分辨率要求 复制链接链接已复制到粘贴板!
您的系统必须具有以下最低分辨率,以确保 Red Hat Enterprise Linux 的顺利和无错安装。
| 产品版本 | 解决方案 |
|---|---|
| Red Hat Enterprise Linux 8 | 最小 :800 x 600 建议 :1026 x 768 |
1.5. UEFI 安全引导和 Beta 版本要求 复制链接链接已复制到粘贴板!
如果您计划在启用了 UEFI 安全引导的系统中安装 Red Hat Enterprise Linux Beta 版本,请首先禁用 UEFI 安全引导选项,然后开始安装。
UEFI 安全引导要求操作系统内核使用可识别的私钥签名,而系统固件使用相应的公钥对该私钥进行了验证。对于 Red Hat Enterprise Linux Beta 版本,内核使用特定于红帽 Beta 的公钥进行签名,系统默认无法识别该公钥。因此,系统甚至无法引导安装介质。
第 2 章 自定义安装介质 复制链接链接已复制到粘贴板!
详情请参阅 制作自定义的 RHEL 系统镜像。
第 3 章 为 RHEL 创建一个可引导的安装介质 复制链接链接已复制到粘贴板!
您可以从 客户门户网站 下载 ISO 文件,以准备可引导的物理安装介质,如 USB 或者 DVD。从 RHEL 8 开始,红帽不再为 Server 和 Workstation 分别提供变体。Red Hat Enterprise Linux for x86_64 包括 Server 和 Workstation 功能。Server 和 Workstation 之间的区别是在安装或配置过程中通过系统目的角色进行管理。
从客户门户网站下载 ISO 文件后,创建一个可引导的物理安装介质,如 USB 或者 DVD ,来继续安装过程。
对于禁止了 USB 驱动器的安全环境的情况,请考虑使用镜像构建器创建和部署参考镜像。此方法可确保遵守安全策略,同时保持系统的完整性。如需了解更多详细信息,请参阅 镜像构建器文档。
默认情况下,安装介质中使用 inst.stage2= 引导选项,并被设置为特定标签,例如: inst.stage2=hd:LABEL=RHEL8\x86_64。如果您修改了包含运行时镜像的文件系统的默认标签,或者使用自定义流程引导安装系统,请验证标签是否已设置为正确的值。
3.1. 安装引导介质选项 复制链接链接已复制到粘贴板!
引导 Red Hat Enterprise Linux 安装程序有多个选项。
- 完整的安装 DVD 或者 USB 闪存驱动器
- 使用 DVD ISO 镜像创建完整的安装 DVD 或者 USB 闪存驱动器。DVD 或者 USB 闪存驱动器可用作引导设备,并作为安装软件包的安装源。
- 最小安装 DVD、CD 或者 USB 闪存驱动器
- 使用 引导 ISO 镜像生成最小安装 CD、DVD 或者 USB 闪存驱动器,该镜像只包含引导系统并启动安装程序所需的最小文件。如果您不使用 Content Delivery Network(CDN)下载所需的软件包,则 Boot ISO 镜像需要一个包含所需软件包的安装源。
- PXE 服务器
- 预启动执行环境 (PXE)服务器允许安装程序通过网络引导。系统引导后,您必须从不同的安装源(如本地磁盘或网络位置)完成安装。
- 镜像构建器
- 使用镜像构建器,您可以创建自定义的系统和云镜像,以便在虚拟和云环境中安装 Red Hat Enterprise Linux。
3.2. 创建可引导的 DVD 复制链接链接已复制到粘贴板!
您可以使用 DVD 刻录软件和 DVD 刻录机创建可引导的安装 DVD。从 ISO 镜像文件生成 DVD 的具体步骤会有很大不同,具体取决于操作系统以及安装的刻录软件。有关从 ISO 镜像文件刻录 DVD 的具体步骤,请参考您系统的刻录软件文档。
您可以使用 DVD ISO 镜像(完整安装)或 Boot ISO 镜像(最小安装)来创建可引导的 DVD。但是,DVD ISO 镜像大于 4.7 GB,因此它可能不适合单个或双层 DVD。继续操作前,请检查 DVD ISO 镜像文件的大小。当使用 DVD ISO 镜像创建可引导的安装介质时,请使用 USB 闪存。有关禁止了 USB 驱动器的环境的情况,请参阅 镜像构建器文档。
3.3. 在 Linux 中创建可引导 USB 设备 复制链接链接已复制到粘贴板!
您可以创建一个可引导 USB 设备,然后您可以用来在其他机器上安装 Red Hat Enterprise Linux。这个流程会覆盖 USB 驱动器上的现有数据,而没有任何警告。备份任何数据或使用一个空闪存。可引导的 USB 驱动器不能用于存储数据。
先决条件
- 您已从 产品下载 页面下载了完整的安装 DVD ISO 或最小安装 Boot ISO 镜像。
- 您有一个有足够容量的 USB 闪存驱动器 ISO 镜像。所需的大小会有所不同,但推荐的 USB 大小为 8 GB。
流程
- 将 USB 闪存驱动器连接到该系统。
打开一个终端窗口,并显示最近事件的日志。
dmesg|tail
$ dmesg|tailCopy to Clipboard Copied! Toggle word wrap Toggle overflow 附加的 USB 闪存驱动器的消息会在日志的底部显示。记录连接设备的名称。
以 root 用户身份登录:
su -
$ su -Copy to Clipboard Copied! Toggle word wrap Toggle overflow 提示时请输入您的根密码。
查找分配给该驱动器的设备节点。在这个示例中,驱动器名称是
sdd。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
如果插入的 USB 设备自动挂载,请在继续执行后续步骤前将其卸载。要卸载,请使用
umount命令。如需更多信息,请参阅 使用 umount 卸载文件系统。 将 ISO 镜像直接写到 USB 设备:
dd if=/image_directory/image.iso of=/dev/device
# dd if=/image_directory/image.iso of=/dev/deviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用您下载的 ISO 镜像文件的完整路径替换 /image_directory/image.iso,
使用您通过
dmesg命令得到的设备名称替换 device。在这个示例中,ISO 镜像的完整路径为
/home/testuser/Downloads/rhel-8-x86_64-boot.iso,设备名称为sdd:dd if=/home/testuser/Downloads/rhel-8-x86_64-boot.iso of=/dev/sdd
# dd if=/home/testuser/Downloads/rhel-8-x86_64-boot.iso of=/dev/sddCopy to Clipboard Copied! Toggle word wrap Toggle overflow 分区名称通常是设备名称附带一个数字后缀。例如:
sdd是设备名称,,sdd1是设备sdd中的分区名称。
-
等待
dd命令完成将镜像写入该设备。运行sync命令,来将缓存的写同步到设备。当 # 提示符出现时,代表数据传输已完成。当看到提示符时,从 root 帐户注销,并拔出 USB 驱动器。USB 驱动器现在准备用作引导设备。
3.4. 在 Windows 中创建可引导 USB 设备 复制链接链接已复制到粘贴板!
您可以使用各种工具在 Windows 系统上创建一个可引导的 USB 设备。您可以使用 Fedora Media Writer ,可从 https://github.com/FedoraQt/MediaWriter/releases 下载。Fedora Media Writer 是一 个社区产品,它不被红帽支持。您可以在 https://github.com/FedoraQt/MediaWriter/issues 中报告任何问题。
创建可引导的驱动器会覆盖 USB 驱动器上的现有数据,而不会出现任何警告。备份任何数据或使用一个空闪存。可引导的 USB 驱动器不能用于存储数据。
先决条件
- 您已从 产品下载 页面下载了完整的安装 DVD ISO 或最小安装 Boot ISO 镜像。
- 您有一个有足够容量的 USB 闪存驱动器 ISO 镜像。所需的大小会有所不同。
流程
- 从 https://github.com/FedoraQt/MediaWriter/releases 下载并安装 Fedora Media Writer。
- 将 USB 闪存驱动器连接到该系统。
- 打开 Fedora Media Writer。
- 在主窗口中点击 并选择之前下载的 Red Hat Enterprise Linux ISO 镜像。
- 在 Write Custom Image 窗口中,选择要使用的驱动器。
- 点 。引导介质创建过程开始。操作完成后不要拔出驱动器。这个操作可能需要几分钟,具体要看 ISO 镜像的大小以及 USB 驱动器的写入速度。
- 当操作完成后,卸载 USB 驱动器。USB 驱动器现在可作为引导设备使用。
3.5. 在 macOS 上创建一个可引导 USB 设备 复制链接链接已复制到粘贴板!
您可以创建一个可引导 USB 设备,然后您可以用来在其他机器上安装 Red Hat Enterprise Linux。创建可引导 USB 驱动器会覆盖之前存储在 USB 驱动器上的任何数据,而不会出现任何警告。备份任何数据或使用一个空闪存。可引导的 USB 驱动器不能用于存储数据。
先决条件
- 您已从 产品下载 页面下载了完整的安装 DVD ISO 或最小安装 Boot ISO 镜像。
- 您有一个有足够容量的 USB 闪存驱动器 ISO 镜像。所需的大小会有所不同。
流程
- 将 USB 闪存驱动器连接到该系统。
使用
diskutil list命令识别设备路径。设备路径的格式为/dev/disknumber,其中number是磁盘号。该磁盘从零(0)开始编号。通常,disk0是 OS X 恢复磁盘,disk1是主 OS X 安装。在以下示例中,USB 设备为disk2:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 通过将 NAME、TYPE 和 SIZE 列与您的闪存驱动器进行比较来识别您的 USB 闪存驱动器。例如,NAME 应为 Finder 工具中闪存驱动器图标的标题。您还可以将这些值与闪存驱动器信息面板中的值进行比较。
卸载闪存驱动器的文件系统卷:
diskutil unmountDisk /dev/disknumber Unmount of all volumes on disknumber was successful
$ diskutil unmountDisk /dev/disknumber Unmount of all volumes on disknumber was successfulCopy to Clipboard Copied! Toggle word wrap Toggle overflow 该命令完成后,该闪存驱动器图标会从桌面消失。如果图标没有消失,您可能选择了错误的磁盘。尝试卸载系统磁盘会意外返回 failed to unmount 错误。
将 ISO 镜像写入闪存驱动器。macOS 为每个存储设备提供块(
/dev/disk*)和字符设备(/dev/rdisk*)文件。将镜像写入/dev/rdisknumber字符设备比写入/dev/disknumber块设备要快。例如,要将/Users/user_name/Downloads/rhel-8-x86_64-boot.iso文件写入/dev/rdisk2设备,请输入以下命令:sudo dd if=/Users/user_name/Downloads/rhel-8-x86_64-boot.iso of=/dev/rdisk2 bs=512K status=progress
# sudo dd if=/Users/user_name/Downloads/rhel-8-x86_64-boot.iso of=/dev/rdisk2 bs=512K status=progressCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
if=- 安装镜像的路径。 -
of=- 代表目标磁盘的原始磁盘设备 (/dev/rdisknumber)。 -
bs=512K- 将块大小设置为 512 KB,以加快数据传输。 -
status=progress- 在操作过程中显示进度指示器。
-
-
等待
dd命令完成将镜像写入该设备。当 # 提示符出现时,代表数据传输已完成。当出现提示符后,退出 root 帐户并拔出 USB 驱动器。USB 驱动器现在可作为引导设备使用。
第 4 章 引导安装介质 复制链接链接已复制到粘贴板!
您可以使用 USB 或者 DVD 引导 Red Hat Enterprise Linux 安装。
您可以使用 Red Hat Content Delivery Network (CDN)注册 RHEL。CDN 是地理上分散的一系列 Web 服务器。例如,这些服务器使用有效的订阅为 RHEL 主机提供软件包和更新。
在安装过程中,从 CDN 注册并安装 RHEL 有以下优点:
- 在安装后立即为最新的系统使用最新的软件包,并为
- 连接到 Red Hat Insights 和启用系统目的使用集成的支持。
先决条件
- 您已创建了一个可引导安装介质(USB 或者 DVD)。
流程
- 关闭您要安装 Red Hat Enterprise Linux 的系统。
- 断开任何与系统的驱动器连接。
- 打开系统。
- 插入可引导安装介质(USB、DVD 或者 CD)。
- 关闭系统但不删除引导介质。
- 打开系统。
- 您可能需要按特定键或组合键来从介质引导,或者将系统的基本输入/输出系统(BIOS)配置为从介质引导。如需更多信息,请参阅您系统附带的文档。
- Red Hat Enterprise Linux 引导 窗口会打开并显示有关各种可用引导选项的信息。
使用键盘中的箭头键选择您需要的引导选项,然后按 Enter 键选择引导选项。Welcome to Red Hat Enterprise Linux 窗口将打开,您可以使用图形用户界面安装 Red Hat Enterprise Linux。
如果在 60 秒之内引导窗口中没有执行任何动作,安装程序会自动开始。
可选:编辑可用的引导选项:
- 基于 UEFI 的系统:按 E 键进入编辑模式。更改预定义的命令行来添加或删除引导选项。按 Enter 键确认您的选择。
- 基于 BIOS 的系统:按键盘上的 Tab 键进入编辑模式。更改预定义的命令行来添加或删除引导选项。按 Enter 键确认您的选择。
第 5 章 可选:自定义引导选项 复制链接链接已复制到粘贴板!
当您在 x86_64 或 ARM64 架构上安装 RHEL 时,您可以编辑引导选项,以根据您的特定环境自定义安装过程。
5.1. 引导选项 复制链接链接已复制到粘贴板!
您可以将由空格分开的多个选项附加到引导命令行中。安装程序专用的引导选项总是以 inst 开始。以下是可用的引导选项:
- 带有 "=" 的选项
-
您必须为使用
=的引导选项指定一个值。例如:inst.vncpassword=选项必须包含一个值,在本例中是 password。这个示例的正确语法为inst.vncpassword=password。 - 没有 "=" 的选项
-
该引导选项不接受任何值或参数。例如:
rd.live.check选项强制安装程序在开始安装前验证安装介质。如果这个引导选项存在,安装程序会执行验证。如果引导选项不存在,则会跳过验证。
您可以使用以下方法为特定菜单条目自定义引导选项:
-
在基于 BIOS 的系统上:按
Tab键,并向命令行中添加自定义引导选项。您还可以按Esc键访问boot:提示,但不会预先设置所需引导选项。在这种情况下,您必须总是在使用其它引导选项前指定 Linux 选项。如需更多信息,请参阅在 BIOS 中编辑 boot: 提示符 -
在基于 UEFI 的系统上:按
e键,并向命令行中添加自定义引导选项。准备好按Ctrl+X引导修改选项时。
如需更多信息 ,请参阅为基于 UEFI 的系统编辑引导选项
5.2. 编辑 BIOS 中的 boot: 提示符 复制链接链接已复制到粘贴板!
在使用 boot: 提示符时,第一个选项必须总是指定您要载入的安装程序镜像文件。在大多数情况下,您可以使用关键字来指定镜像。您可以根据要求指定附加选项。
先决条件
- 已创建了可引导安装介质(USB、CD 或者 DVD)。
- 已使用该介质引导安装,并打开了安装引导菜单。
流程
- 打开引导菜单后,按键盘上的 Esc 键。
-
boot:提示符现在可以访问。 - 按 Tab 键显示帮助命令。
-
按 Enter 键启动安装。要从
boot:提示符返回到引导菜单,请重启系统并重新从安装介质引导。
5.3. 使用 > 提示符编辑预定义的引导选项 复制链接链接已复制到粘贴板!
在基于 BIOS 的 AMD64 和 Intel 64 系统中,您可以使用 & gt; 提示符编辑预定义的引导选项。
先决条件
- 已创建了可引导安装介质(USB、CD 或者 DVD)。
- 已使用该介质引导安装,并打开了安装引导菜单。
流程
-
在引导菜单中选择一个选项,然后按键盘上的 Tab 键。可访问
>提示符并显示可用选项。 -
可选:要查看完整的选项集合,请选择
Test this media and install RHEL 8。 在
>提示符后附加您需要的选项。例如,要启用联邦信息处理标准(FIPS) 140 强制的加密模块自我检查,请添加
fips=1:>vmlinuz initrd=initrd.img inst.stage2=hd:LABEL=RHEL-9-5-0-BaseOS-x86_64 rd.live.check quiet fips=1
>vmlinuz initrd=initrd.img inst.stage2=hd:LABEL=RHEL-9-5-0-BaseOS-x86_64 rd.live.check quiet fips=1Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 按 Enter 键开始安装。
- 按 Esc 键取消编辑,并返回到引导菜单。
5.5. 在安装过程中更新驱动程序 复制链接链接已复制到粘贴板!
您可以在 Red Hat Enterprise Linux 安装过程中更新驱动程序。更新驱动程序完全是可选的。除非需要,否则不要执行驱动程序更新。确保红帽、您的硬件厂商或可信的第三方供应商通知您在 Red Hat Enterprise Linux 安装过程中需要更新驱动程序。
5.5.1. 概述 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 支持很多硬件设备的驱动程序,但可能不支持一些新发布驱动程序。只有在不支持的驱动程序无法完成安装时才应执行驱动程序更新。通常在安装过程中需要更新驱动程序来支持特定的配置。例如:为存储适配器卡安装驱动程序,提供对您的系统存储设备的访问。
驱动程序更新磁盘可能会禁用冲突内核驱动程序。在个别情况下,卸载内核模块可能会导致安装错误。
5.5.2. 驱动程序更新的类型 复制链接链接已复制到粘贴板!
红帽、您的硬件零售商或可信第三方以 ISO 镜像文件的形式提供驱动程序更新。您收到 ISO 镜像文件后,请选择驱动程序更新的类型。
驱动程序更新的类型
- 自动
-
在这个驱动程序更新方法中;标有
OEMDRV的存储设备(包括 CD、DVD 或者 USB 闪存驱动器)物理连接到系统。如果在安装启动时存在OEMDRV存储设备,它将被视为驱动程序更新磁盘,且安装程序会自动载入其驱动程序。 - Assisted
-
安装程序会提示您定位驱动程序更新。您可以使用任何带
OEMDRV以外的标签的本地存储设备。在开始安装时会指定inst.dd引导选项。如果您在没有参数的情况下使用这个选项,安装程序会显示所有连接到该系统的存储设备,并提示您选择包含驱动程序更新的设备。 - Manual(手动)
-
手动指定到驱动程序更新镜像或 RPM 软件包的路径。您可以使用任何带
OEMDRV标签的本地存储设备,或者可从安装系统访问的网络位置。在开始安装时会指定inst.dd=location引导选项,其中 location 是驱动程序更新磁盘或 ISO 镜像的路径。当您指定这个选项时,安装程序会尝试载入在指定位置找到的所有驱动程序更新。使用手动驱动程序更新,您可以指定本地存储设备或者网络位置(HTTP、HTTPS 或者 FTP 服务器)。您可以同时使用inst.dd=location和inst.dd,其中 location 是驱动程序更新磁盘或 ISO 镜像的路径。在这种情况下,安装程序会尝试从位置载入所有可用的驱动程序更新,并提示您选择包含驱动程序更新的设备。
在从网络位置加载驱动程序更新时,使用 ip= 选项初始化网络。
限制
在启用了安全引导技术的 UEFI 系统中,必须使用有效证书为所有驱动程序签名。红帽驱动程序使用红帽的私钥签署,并由内核中对应的公钥验证。如果您载入了额外的独立驱动程序,请确认它们已进行了签名。
5.5.3. 准备驱动程序更新 复制链接链接已复制到粘贴板!
这个步骤描述了如何在 CD 和 DVD 中准备驱动程序更新。
先决条件
- 您已收到来自红帽、您的硬件厂商或可信的第三方供应商提供的驱动程序更新 ISO 镜像。
- 您已将驱动程序更新 ISO 镜像刻录到 CD 或者 DVD 。
如果 CD 或者 DVD 中只有一个以 .iso 结尾的 ISO 镜像文件,则刻录过程将无法成功。有关如何将 ISO 镜像刻录到 CD 或者 DVD 的说明,请查看您的系统刻录软件文档。
流程
- 将驱动程序更新 CD 或者 DVD 插入系统的 CD/DVD 驱动器中,并使用系统的文件管理器工具浏览。
-
验证单个文件
rhdd3是否可用。rhdd3是一个签名文件,其中包含驱动程序描述和名为rpms的目录,其中包含具有不同架构的实际驱动程序的 RPM 软件包。
5.5.4. 执行自动驱动程序更新 复制链接链接已复制到粘贴板!
这个步骤描述了如何在安装过程中执行自动驱动程序更新。
先决条件
-
您已将驱动程序更新镜像放在带有
OEMDRV标签的标准磁盘分区中,或将OEMDRV驱动程序更新镜像刻录到 CD 或者 DVD 中。在驱动程序更新过程中可能无法访问高级存储,比如 RAID 或者 LVM 卷。 -
您已将块设备与
OEMDRV卷标签连接到您的系统,或者在开始安装过程前将准备的 CD 或 DVD 插入系统的 CD/DVD 驱动器中。
流程
- 完成先决条件步骤后,安装程序在系统安装过程中启动并安装时会自动载入驱动程序。
5.5.5. 执行驱动程序更新 复制链接链接已复制到粘贴板!
这个步骤描述了如何在安装过程中执行驱动程序更新。
先决条件
-
您已将没有
OEMDRV卷标签的块设备连接到您的系统,并将驱动程序磁盘镜像复制到这个设备中,或者您已准备了一个驱动程序更新 CD 或者 DVD,并在开始安装进程前将其插入到系统的 CD 或者 DVD 驱动器中。
如果您将 ISO 镜像文件刻录为 CD 或者 DVD,但没有 OEMDRV 卷标签,您可以使用没有参数的 inst.dd 选项。安装程序提供从 CD 或者 DVD 中扫描和选择驱动程序的选项。在这种情况下,安装程序不会提示您选择驱动程序更新 ISO 镜像。另一个情况是使用 CD 或者 DVD 与 inst.dd=location 引导选项 ; 这允许安装程序自动扫描 CD 或者 DVD 进行驱动程序更新。如需更多信息,请参阅 执行手动驱动程序更新。
流程
- 在引导菜单窗口中按键盘中的 Tab 键显示引导命令行。
-
在命令行中附加
inst.dd引导选项,然后按 Enter 键以执行引导过程。 - 在菜单中选择本地磁盘分区或者 CD 或者 DVD 设备。安装程序扫描 ISO 文件或驱动程序更新 RPM 软件包。
可选:选择驱动程序更新 ISO 文件。
如果选择的设备或者分区包含驱动程序更新 RPM 软件包而不是 ISO 镜像文件(例如:包含驱动程序更新 CD 或者 DVD 的光驱),则不需要这一步。
选择所需驱动程序。
- 使用键盘上的数字键切换驱动器选择。
- 按 c 键安装所选驱动程序。载入所选驱动程序并开始安装过程。
5.5.6. 执行手动驱动程序更新 复制链接链接已复制到粘贴板!
这个步骤描述了如何在安装过程中手动驱动程序更新。
先决条件
- 您已将驱动程序更新 ISO 镜像文件放在 USB 闪存驱动器或 web 服务器中,并将其连接到您的计算机。
流程
- 在引导菜单窗口中按键盘中的 Tab 键显示引导命令行。
-
在命令行中附加
inst.dd=location引导选项,其中 location 是驱动程序更新的路径。通常,镜像文件位于 web 服务器上,例如 http://server.example.com/dd.iso 或在 USB 闪存驱动器上,例如/dev/sdb1。您还可以指定包含驱动程序更新的 RPM 软件包,例如 http://server.example.com/dd.rpm。 - 按 Enter 执行引导过程。指定位置中的可用驱动程序会自动载入并启动安装过程。
5.5.7. 禁用驱动程序 复制链接链接已复制到粘贴板!
这个步骤描述了如何禁用发生故障的驱动程序。
先决条件
- 您已引导安装程序引导菜单。
流程
- 在引导菜单中,按键盘中的 Tab 键显示引导命令行。
将
modprobe.blacklist=driver_name引导选项附加到命令行。使用您要禁用的驱动程序或驱动程序名称替换 driver_name,例如:
modprobe.blacklist=ahci
modprobe.blacklist=ahciCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
modprobe.blacklist=引导选项禁用的驱动程序在安装的系统中保持禁用状态,并出现在/etc/modprobe.d/anaconda-blacklist.conf文件中。- 按 Enter 执行引导过程。
第 6 章 在安装程序中自定义系统 复制链接链接已复制到粘贴板!
在安装的自定义阶段,您必须执行某些配置任务,以启用 Red Hat Enterprise Linux 的安装。这些任务包括:
- 配置存储并分配挂载点。
- 选择一个要安装软件的基础环境。
- 为 root 用户设置密码或创建一个本地用户。
另外,您还可以进一步自定义系统,例如通过配置系统设置并将主机连接到网络。
6.1. 设置安装程序语言 复制链接链接已复制到粘贴板!
您可以在开始安装前选择安装程序所使用的语言。
先决条件
- 您已创建了安装介质。
- 如果您使用引导 ISO 镜像文件,您可以指定一个安装源。
- 您已引导了安装。
流程
- 从引导菜单中选择安装 Red Hat Enterprise Linux 选项后,会出现 Welcome to Red Hat Enterprise 屏幕。
在 Welcome to Red Hat Enterprise Linux 窗口的左侧窗格中选择语言。或者,使用文本框搜索首选语言。
注意默认预选语言。如果配置了网络访问,也就是说,如果您从网络服务器而不是本地介质引导,则预先选择的语言是由 GeoIP 模块的自动位置检测功能决定的。如果您在引导命令行或 PXE 服务器配置中使用
inst.lang=选项,则会选择您使用引导选项定义的语言。- 在 Welcome to Red Hat Enterprise Linux 右侧窗格中选择特定于您所在地区的位置。
- 点 进入到图形安装窗口。
如果您在安装 Red Hat Enterprise Linux 的预发布版本,则会显示有关安装介质预发布状态的警告信息。
- 要继续安装,请点击 ,或者
- 要退出安装并重新引导系统,请单击 。
6.2. 配置存储设备 复制链接链接已复制到粘贴板!
您可以在各种存储设备中安装 Red Hat Enterprise Linux。您可以在安装目的窗口配置基本的、可以通过本地访问的存储设备。直接连接到本地系统的基本存储设备(如磁盘和固态驱动器)都显示在窗口的 Local Standard Disks 部分中。在 64 位 IBM Z 上,本部分包含激活的 Direct Access Storage Devices(DASD)。
一个已知问题,在安装完成后,防止将配置为 HyperPAV 别名的 DASD 自动附加到系统。这些存储设备会在安装过程中可用,但完成安装并重启后无法立即访问。要附加 HyperPAV 别名设备,请手动将它们添加到系统的 /etc/dasd.conf 配置文件中。
6.2.1. 配置安装目的地 复制链接链接已复制到粘贴板!
您可以使用 Installation Destination 窗口来配置存储选项,例如,您要用作 Red Hat Enterprise Linux 安装的安装目标的磁盘。您必须至少选择一个磁盘。
先决条件
- 打开 安装概述 窗口。
- 如果您计划使用已包含数据的磁盘,请确保备份您的数据。例如: 如果要缩小现有 Microsoft Windows 分区并将 Red Hat Enterprise Linux 安装为第二个系统,或者要升级之前的 Red Hat Enterprise Linux 版本。操作分区总是会带有风险。例如,如果因为磁盘中的某种原因造成进程中断或者失败,则可能会丢失磁盘中的数据。
流程
在 安装概述 窗口中点击 Installation Destination。在 Installation Destination 窗口中执行以下操作:
在 Local Standard Disks 部分中,选择您需要的存储设备;白色复选标记表示您的选择。在安装过程中,没有白色复选标记的磁盘不会被使用;如果您选择自动分区,它们会被忽略,且在手动分区中不可用。
Local Standard Disks 显示所有本地可用的存储设备,如 SATA、IDE 和 SCSI 磁盘、USB 闪存和外部磁盘。安装程序启动后,任何连接的存储设备都不会被检测。如果您使用可移动驱动器安装 Red Hat Enterprise Linux,在删除了该设备后您的系统将无法使用。
可选:如果要配置额外的本地存储设备来连接新磁盘,请点击窗口右下角的 Refresh 链接。此时会打开 Rescan Disks 对话框。
点 并等到扫描过程完成。
当您点击扫描磁盘时,您在安装过程中进行的所有存储更改都会丢失。
- 点击 返回 安装目标 窗口。所有探测到的磁盘(包括新磁盘)都会在 本地标准磁盘 部分显示。
可选:点 添加专用的存储设备。
存储设备选择 窗口将打开,并列出安装程序可访问的所有存储设备。
可选:在 Storage Configuration 下,为自动分区选择 Automatic 单选按钮。
您还可以配置自定义分区。如需了解更多详细信息,请参阅 配置手动分区。
- 可选:选择 I would like to make additional space available 以便从现有分区布局回收空间。例如,如果您想要使用的磁盘已有不同的操作系统,并且您希望使该系统的分区小些,以便为 Red Hat Enterprise Linux 留出更多空间。
可选:选择 Encrypt my data 来加密除需要使用 Linux Unified Key Setup (LUKS)来引导系统(如
/boot) 所需分区以外的所有分区。加密磁盘以添加额外的安全层。点 。Disk Encryption Passphrase 对话框将打开。
- 在 Passphrase 和 Confirm 字段中输入您的密码短语。
单击 来完成磁盘加密。
警告如果您丢失了 LUKS 密码短语,那么就完全无法访问所有加密的分区及其数据。丢失的密码短语是无法找回的。但是,如果您执行 Kickstart 安装,您可以保存加密密码短语并在安装过程中生成加密密码短语备份。如需更多信息,请参阅 自动安装 RHEL 文档。
可选:单击窗口左下角的 Full disk summary and bootloader 链接,来选择包含引导装载程序的存储设备。如需更多信息,请参阅 配置引导装载程序。
在大多数情况下,将启动加载器保留在默认位置就足够了。例如,需要从另一个引导装载程序进行链载入的系统需要手工指定引导驱动器。
- 点 。
可选:如果您选择了 自动分区,并且 我希望提供额外空间可用选项,或者 所选磁盘上没有足够的可用空间来安装 Red Hat Enterprise Linux,则会出现 Reclaim Disk Space 对话框。它列出所有配置的磁盘设备,以及这些设备上的所有分区。对话框显示系统使用当前选定的软件包集安装所需的最小磁盘空间信息,以及您已回收了多少空间。要启动回收进程:
- 查看显示的可用存储设备列表。Reclaimable Space 列显示每个条目可以回收多少空间。
- 选择要回收空间的磁盘或分区。
- 使用 按钮,来使用分区上的可用空间,同时保留现有数据。
- 使用 按钮删除所选磁盘上的该分区或所有分区,包括现有数据。
- 使用 按钮删除所有磁盘上所有现有的分区,包括现有数据,并使此空间可用于安装 Red Hat Enterprise Linux。
点 来应用更改并返回图形安装。
除非点了 Installation Summary 窗口中的 ,不会有磁盘变化。Reclaim Space 对话框仅标记用于调整大小或删除的分区,不会执行任何操作。
6.2.2. 安装目的地配置过程中的特殊情况 复制链接链接已复制到粘贴板!
以下是配置安装目的地时需要考虑的一些特殊情况:
-
某些 BIOS 类型不支持从 RAID 卡引导。在这些实例中,
/boot分区必须在 RAID 阵列之外的分区上创建,比如在单独的磁盘上。对于使用有问题的 RAID 卡,必需使用内部磁盘创建分区。软件 RAID 设置也需要/boot分区。如果选择自动为系统分区,应该手动编辑/boot分区。 - 要将 Red Hat Enterprise Linux 引导装载程序配置为不同的引导装载程序的 链加载,您必须通过点击 Installation Destination 窗口中的 Full disk summary and bootloader 链接来手动指定引导驱动器。
- 当您在具有多路径和非多路径存储设备的系统上安装 Red Hat Enterprise Linux 时,安装程序中的自动分区布局会创建包含多路径和非多路径设备组合的卷组。这违背了多重路径存储的目的。在 Installation Destination 窗口中选择多路径或非多路径设备。或者手动分区。
6.2.3. 配置引导装载程序 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 使用 GRand Unified Bootloader 版本 2(GRUB2)作为 AMD64、 Intel 64、IBM Power Systems 和 ARM 的引导加载程序。对于 64 位 IBM Z,使用 zipl 引导装载程序。
引导装载程序是系统启动时所运行的第一个程序,它负责载入和向操作系统传输控制。GRUB2 可以引导任何兼容的操作系统(包括 Microsoft Windows),也可以使用链加载将控制权传给其他不支持的操作系统的引导加载程序。
安装 GRUB2 可能会覆盖您现有的引导装载程序。
如果已经安装了操作系统,Red Hat Enterprise Linux 安装程序会尝试自动探测并配置引导装载程序,以启动另一个操作系统。如果没有检测到引导装载程序,您可以在完成安装后手动配置任意附加操作系统。
如果正在安装有多个磁盘的 Red Hat Enterprise Linux 系统,您可能需要手动指定要安装引导装载程序的磁盘。
流程
在 安装目标 窗口中点 Full disk summary and bootloader此时会打开 Selected Disks 对话框。
引导装载程序安装在您选择的设备上,或者 UEFI 系统上;EFI 系统分区 在引导分区过程中创建在目标设备上。
- 要更改引导设备,请从列表中选择设备并点击 。您只能将一个设备设定为引导设备。
- 要禁用新的引导装载程序安装,请选择当前标记为引导的设备,然后单击 。这样可保证不在任何设备中安装 GRUB2。
如果选择不安装引导装载程序,则不能直接引导系统,而且必须使用另外一种引导方法,如独立的商业引导装载程序应用程序。只有在您有其它引导系统的方法时才使用这个选项。
引导装载程序可能还需要创建一个特殊分区,具体取决于您的系统是否使用 BIOS 或 UEFI 固件,或者如果引导驱动器有 GUID 分区表 (GPT)或 主引导记录(MBR,也称为 msdos)标签。如果您使用自动分区,安装程序会创建该分区。
6.2.4. 存储设备选择 复制链接链接已复制到粘贴板!
存储设备选择窗口列出了安装程序可访问的所有存储设备。根据您的系统和可用的硬件, 一些标签可能无法显示。在以下标签页下对设备进行分组:
- 多路径设备
- 存储设备可通过多个路径访问,例如通过同一系统上的多个 SCSI 控制器或光纤通道端口。安装程序只检测序列号为 16 或 32 个字符的多路径存储设备。
- 其他 SAN 设备
- 在存储区域网络(SAN)上可用的设备。
- 固件 RAID
- 附加到固件 RAID 控制器的存储设备。
- NVDIMM 设备
- 在特定情况下,Red Hat Enterprise Linux 8 可以在 Intel 64 和 AMD64 架构上的扇区模式下引导和运行(NVDIMM)设备。
- IBM Z 设备
- 通过 zSeries Linux FCP(光纤通道协议)驱动程序连接的存储设备或逻辑单元(LUN) DASD。
6.2.5. 过滤存储设备 复制链接链接已复制到粘贴板!
在存储设备选择窗口中,您可以通过其全球识别符(WWID)或端口、目标或逻辑单元号(LUN)过滤存储设备。
先决条件
- 打开 Installation Summary 窗口。
流程
- 在 Installation Summary 窗口中点击 Installation Destination。此时会打开 Installation Destination 窗口,列出所有可用的驱动器。
- 在 Specialized & Network Disks 部分中,点 。存储设备选择窗口将打开。
点 Search by 标签页来根据端口、目标、LUN 或 WWID 进行搜索。
通过 WWID 或 LUN 搜索,需要在对应的输入文本字段中输入额外的值。
- 从搜索下拉菜单中选择您需要的选项。
- 点 开始搜索。每个设备都会显示在一个独立的行中,并有一个对应的复选框。
选择要启用安装过程中所需设备的复选框。
之后在安装过程中,您可以选择在任意选择的设备中安装 Red Hat Enterprise Linux,您可以选择自动挂载其它选择的设备作为安装系统的一部分。所选设备不会被安装过程自动清除,而选择设备不会将数据存储在设备中。
注意您可以在安装后通过修改
/etc/fstab文件在系统中添加设备。- 点 返回 Installation Destination 窗口。
所有您没有选择的存储设备都会在安装程序中完全隐藏。要使用不同的引导装载程序链载入引导装载程序,请选择所有存在的设备。
6.2.6. 使用高级存储选项 复制链接链接已复制到粘贴板!
要使用高级存储设备,您可以配置 iSCSI(TCP/IP 上的 SCSI)目标或 FCoE(以太网光纤通道)SAN(存储区域网络)。
要使用 iSCSI 存储设备进行安装,安装程序必须能够将其发现为 iSCSI 目标,并能够创建 iSCSI 会话来访问它们。这些步骤的每一步都可能需要 Challenge Handshake Authentication Protocol(CHAP)身份验证的用户名和密码。此外,您可以配置 iSCSI 目标,来在目标(反向 CHAP)连接的系统上验证 iSCSI 启动器,以进行发现和会话。CHAP 和反向 CHAP 一起使用时称为双向 CHAP。双向 CHAP 为 iSCSI 连接提供最高级别的安全性,尤其是当 CHAP 身份验证和反向 CHAP 身份验证的用户名和密码不同时。
重复 iSCSI 发现和 iSCSI 登录步骤,以添加所有必需的 iSCSI 存储。第一次尝试发现后,您无法更改 iSCSI initiator 的名称。要更改 iSCSI initiator 名称,您必须重新开始安装。
6.2.6.1. 发现并启动 iSCSI 会话 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 安装程序可以通过两种方式发现并登录到 iSCSI 磁盘:
- iSCSI Boot Firmware Table (iBFT)
-
当安装程序启动时,它会检查 BIOS 或系统附加的引导 ROM 是否支持 iBFT。它是可以从 iSCSI 引导的系统的 BIOS 扩展。如果 BIOS 支持 iBFT,安装程序会从 BIOS 读取配置的引导磁盘的 iSCSI 目标信息,并登录到此目标,使它可用作安装目标。要自动连接到 iSCSI 目标,请激活网络设备以访问目标。为此,请使用
ip=ibft引导选项。如需更多信息,请参阅 网络引导选项。 - 手动发现并添加 iSCSI 目标
- 您可以在安装程序的图形用户界面中发现并启动 iSCSI 会话,来识别可用的 iSCSI 目标(网络存储设备)。
先决条件
- 打开 Installation Summary 窗口。
流程
- 在 Installation Summary 窗口中点击 Installation Destination。此时会打开 Installation Destination 窗口,列出所有可用的驱动器。
- 在 Specialized & Network Disks 部分中,点 。存储设备选择窗口将打开。
单击 。此时会打开 Add iSCSI Storage Target 窗口。
重要您不能将
/boot分区放在使用此方法(包含/boot分区的 iSCSI 目标必须配置为与 iBFT 一起使用)手动添加的 iSCSI 目标上。但是,如果安装的系统预期从具有固件 iBFT 以外的方法提供的 iBFT 配置的 iSCSI 启动(例如使用 iPXE),则您可以使用inst.nonibftiscsiboot安装程序引导选项删除/boot分区限制。- 在 Target IP Address 字段中输入 iSCSI 目标的 IP 地址。
在 iSCSI 启动器的 iSCSI Initiator Name 字段中输入 iSCSI 限定名称(IQN)格式的名称。有效的 IQN 条目包含以下内容:
-
字符串
iqn.(注意句号)。 -
指定组织 Internet 域或子域名注册的年份和月份的日期代码,以四位数字表示年份,一个短划线,两位数字表示月份,后跟一个句点。例如,
2010-09.代表 2010 年 9 月。 -
您的组织的 Internet 域或子域名,以与顶级域相反的顺序显示。例如,
com.example.storage代表子域storage.example.com。 一个冒号,后面接着一个在您的域或子域中指定这个特定 iSCSI initiator 的字符串。例如
:diskarrays-sn-a8675309。一个完整的 IQN:
iqn.2010-09.storage.example.com:diskarrays-sn-a8675309。安装程序使用这种格式的名称预填充iSCSI Initiator Name字段,来帮助您使用结构。如需更多与 IQN 相关的信息,请参阅 tools.ietf.org 中的 RFC 3720 - Internet Small Computer Systems Interface (iSCSI) 的 3.2.6. iSCSI Names 部分,以及 tools.ietf.org 中的 RFC 3721 - Internet Small Computer Systems Interface (iSCSI) Naming and Discovery 的1. iSCSI Names and Addresses 部分。
-
字符串
选择
Discovery Authentication Type下拉菜单来指定用于 iSCSI 发现的验证类型。可用的选项如下:- No credentials
- CHAP pair
- CHAP pair and a reverse pair
执行以下操作之一:
-
如果您选择了
CHAP pair作为验证类型,在CHAP Username和CHAP Password中输入 iSCSI 目标的用户名和密码。 -
如果选择
CHAP pair and a reverse pair作为验证类型,在CHAP Username和CHAP Password的字段中输入 iSCSI 目标的用户名和密码。在Reverse CHAP Username和Reverse CHAP Password项中输入 iSCSI initiator 的用户名和密码。
-
如果您选择了
-
可选:选中
Bind targets to network interfaces复选框。 点 。
安装程序会尝试根据提供的信息发现 iSCSI 目标。如果成功发现,
添加 iSCSI 存储目标窗口会显示在目标上发现的所有 iSCSI 节点列表。选中您要用于安装的节点的复选框。
Node login authentication type菜单包括了与Discovery Authentication Type菜单相同的选项。但是,如果您需要发现身份验证的凭证,请使用相同的凭证登录到发现的节点。-
单击额外的
Use the credentials from discovery下拉菜单。当您提供正确的凭证时, 按钮变为可用。 - 点击 启动 iSCSI 会话。
安装程序使用 iscsiadm 查找并登录到 iSCSI 目标,iscsiadm 会自动将这些目标的任何信息存储在 iscsiadm iSCSI 数据库中。然后,安装程序将此数据库复制到安装的系统,并标记任何不用于 root 分区的 iSCSI 目标,以便系统在启动时可以自动登录到这些 iSCSI 目标。如果 root 分区放在 iSCSI 目标上,则 initrd 会登录到这个目标,且安装程序不会将这个目标包含在启动脚本中,以避免多次尝试登录到同一目标。
6.2.6.2. 配置 FCoE 参数 复制链接链接已复制到粘贴板!
您可以通过相应地配置 FCoE 参数,从 Installation Destination 窗口中发现 FCoE(以太网上的光纤通道)设备。
先决条件
- 打开 Installation Summary 窗口。
流程
- 在 Installation Summary 窗口中点击 Installation Destination。此时会打开 Installation Destination 窗口,列出所有可用的驱动器。
- 在 Specialized & Network Disks 部分中,点 。存储设备选择窗口将打开。
- 点 。此时会打开一个对话框,供您为发现的 FCoE 存储设备配置网络接口。
-
在
NIC下拉菜单中选择连接到 FCoE 交换机的网络接口。 - 点击 在网络中扫描 SAN 设备。
选择所需的复选框:
- Use DCB:数据中心桥接 (DCB)是以太网协议的一组增强,旨在提高存储网络和集群中以太网连接的效率。选择复选框来启用或禁用安装程序对 DCB 的感知。仅对需要基于主机的 DCBX 客户端的网络接口启用此选项。对于使用硬件 DCBX 客户端的接口的配置,请禁用复选框。
- Use auto vlan :Auto VLAN 默认启用,并指示是否应该执行 VLAN 发现。如果启用了此复选框,那么当验证链路配置后,FIP(FCoE 启动协议)VLAN 发现协议要运行在以太网接口上。如果尚未配置它们,则会自动创建任何发现的 FCoE VLAN 的网络接口,FCoE 实例会创建在 VLAN 接口上。
-
在 Installation Destination 窗口的
Other SAN Devices标签页中会显示所发现的 FCoE 设备。
6.2.6.3. 配置 DASD 存储设备 复制链接链接已复制到粘贴板!
您可以从 Installation Destination 窗口中发现并配置 DASD 存储设备。
先决条件
- 打开 Installation Summary 窗口。
流程
- 在 Installation Summary 窗口中点击 Installation Destination。此时会打开 Installation Destination 窗口,列出所有可用的驱动器。
- 在 Specialized & Network Disks 部分中,点 。存储设备选择窗口将打开。
- 点 。Add DASD Storage Target 对话框会打开,提示您输入一个设备号,如 0.0.0204,并附加在安装开始时没有被发现的额外 DASD。
- 在 Device number 字段输入您要附加的 DASD 设备号。
点 。
如果找到一个具有指定设备号的 DASD,如果还没有附加,对话框会关闭,新发现的驱动器会出现在驱动器列表中。然后,您可以选择所需设备的复选框,并点击 。新的 DASD 可以被选择,在 Installation Destination 窗口中的 Local Standard Disks 部分被标记为
DASD device 0.0.xxxx。
如果您输入了一个无效的设备号码,或者带有指定设备号的 DASD 已被附加到系统,那么会在对话框中出现出错信息,解释错误原因并提示您使用不同的设备号码再次尝试。
6.2.6.4. 配置 FCP 设备 复制链接链接已复制到粘贴板!
FCP 设备启用 64 位 IBM Z 来使用 SCSI 设备,而不是使用或额外使用 Direct Access Storage Device(DASD)设备。FCP 设备提供了一种交换结构拓扑,它允许 64 位 IBM Z 系统除了使用传统的 DASD 设备,还可使用 SCSI LUN 作为磁盘设备。
先决条件
- 打开 Installation Summary 窗口。
-
对于仅 FCP 安装,您已从 CMS 配置文件中删除
DASD=选项,或从参数文件中删除rd.dasd=选项,以指示没有 DASD。
流程
- 在 Installation Summary 窗口中点击 Installation Destination。此时会打开 Installation Destination 窗口,列出所有可用的驱动器。
- 在 Specialized & Network Disks 部分中,点 。存储设备选择窗口将打开。
点击 。Add zFCP Storage Target 对话框将允许您添加 FCP(光纤通道协议)存储设备。
64 位 IBM Z 要求您手动输入任何 FCP 设备,以便安装程序可以激活 FCP LUN。您可以在图形安装中输入 FCP 设备,或者在参数或 CMS 配置文件中作为唯一的参数条目输入。您输入的值对于您配置的每个站点来说都必须是唯一的。
- 在 Device number 字段输入 4 位十六进制设备号码。
当安装 RHEL-8.6 或旧版本时,或者没有在 NPIV 模式下配置
zFCP设备,或者auto LUN扫描被zfcp.allow_lun_scan=0内核模块参数禁用时,请提供以下值:- 在 WWPN 字段中输入 16 位的十六进制 World Wide Port Number(WWPN)。
- 在 LUN 字段中输入 16 位的十六进制 FCP LUN 标识符。
- 点 连接到 FCP 设备。
新添加的设备在 Installation Destination 窗口的 IBM Z 选项卡中显示。
仅使用十六进制值中的小写字母。如果您输入了不正确的值并点击 ,安装程序会显示一个警告。您可以编辑配置信息并重试发现尝试。有关这些值的更多信息,请参阅硬件文档并与系统管理员联系。
6.2.7. 安装到一个 NVDIMM 设备 复制链接链接已复制到粘贴板!
非易失性双内存模块(NVDIMM)设备将在没有电源时将 RAM 的性能与类似磁盘的数据持久性结合起来。在特定情况下,Red Hat Enterprise Linux 8 可以从 NVDIMM 设备引导和运行。
6.2.7.1. 将 NVDIMM 设备用作安装目标的条件 复制链接链接已复制到粘贴板!
您可以在 Intel 64 和 AMD64 构架上,以扇区模式(NVDIMM)将 Red Hat Enterprise Linux 8 安装到非易失性双列直插式内存模块(NVDIMM)设备,这由 nd_pmem 驱动程序支持。
将 NVDIMM 设备用作存储的条件
要将 NVDIMM 设备用作存储,必须满足以下条件:
- 系统的构架是 Intel 64 或者 AMD64。
- NVDIMM 设备被配置为扇区模式。安装程序可将 NVDIMM 设备重新配置为这个模式。
- NVDIMM 设备必须被 nd_pmem 驱动程序支持。
从 NVDIMM 设备引导的条件
在以下情况下可使用 NVDIMM 设备引导:
- 满足将 NVDIMM 设备用作存储的所有条件。
- 系统使用 UEFI。
- NVDIMM 设备必须得到系统上提供的固件或 UEFI 驱动程序的支持。UEFI 驱动程序可以从设备本身的 ROM 选项加载。
- NVDIMM 设备必须在命名空间中可用。
在引导过程中利用 NVDIMM 设备高度性能,将 /boot 和 /boot/efi 目录放在该设备中。引导过程中不支持 NVDIMM 设备的 Execute-in-place(XIP)功能,内核被加载到传统内存中。
6.2.7.2. 使用图形安装模式配置 NVDIMM 设备 复制链接链接已复制到粘贴板!
在使用图形安装时,必须正确配置非线性内存模块(NVDIMM)设备供 Red Hat Enterprise Linux 8 使用。
NVDIMM 设备的重新配置过程会销毁存储在设备上的任何数据。
先决条件
- 系统中有 一 个 NVDIMM 设备,并满足所有其他可作为安装对象使用的条件。
- 安装已引导,并打开了 Installation Summary 窗口。
流程
- 在 Installation Summary 窗口中点击 Installation Destination。此时会打开 Installation Destination 窗口,列出所有可用的驱动器。
- 在 Specialized & Network Disks 部分中,点 。存储设备选择窗口将打开。
- 点击 NVDIMM Devices 选项卡。
要重新配置某个设备,请从列表中选择它。
如果一个设备没有列出,则代表它不是扇区模式。
- 点 。此时会打开重新配置对话框。
输入您需要的扇区大小并点击 。
支持的扇区大小为 512 和 4096 字节。
- 当重新配置完成时,请点击 。
- 选择设备复选框。
点 返回 Installation Destination 窗口。
重新配置的 NVDIMM 设备会在 Specialized & Network Disks 部分显示。
- 点击 返回 安装概述 窗口。
现在您可以选择 NVDIMM 设备作为安装目标。另外,如果设备满足引导要求,您可以将设备设置为引导设备。
6.3. 配置 root 用户,并创建本地帐户 复制链接链接已复制到粘贴板!
6.3.1. 配置一个根密码 复制链接链接已复制到粘贴板!
您必须配置 root 密码来完成安装过程,并登录到用于系统管理任务的管理员(也称为超级用户或 root)帐户。这些任务包括安装和更新软件包以及更改系统范围的配置,如网络和防火墙设置、存储选项,以及添加或修改用户、组和文件权限。
要获得已安装的系统的 root 特权,您可以使用 root 帐户或创建一个具有管理权限的用户帐户(wheel 组的成员)。安装过程会创建 root 帐户。只有在您需要执行需要管理员权限的任务时,才切换到管理员帐户。
root 账户对系统有完全的控制权。如果未授权的人可以访问该帐户,他们就可以访问或删除用户个人文件。
流程
- 在 Installation Summary 窗口中选择 User Settings > Root Password。此时会打开 Root 密码 窗口。
在 Root 密码字段输入您的密码。
创建强大的 root 密码的要求是:
- 至少需要 8 个字符的长度
- 可以包含数字、字母(大写和小写)和符号
- 区分大小写
- 在 Confirm 项中再次输入同一密码。
点击 来确认您的 root 密码,并返回到 Installation Summary 窗口。
如果继续使用弱密码,您必须单击 两次。
6.3.2. 创建用户帐户 复制链接链接已复制到粘贴板!
创建用户帐户以完成安装。如果您不创建用户帐户,您必须作为 root 用户直接登录该系统,我们 不建议这样做。
流程
- 在 Installation Summary 窗口中选择 User Settings > User Creation。此时将打开 Create User 窗口。
- 在 Full name 字段输入用户帐户名称,例如:John Smith。
在 User name 字段输入用户名,例如: jsmith。
User name 是用于从命令行登录的;如果您安装图形环境,则图形登录管理器将使用 Full name 。
如果用户需要管理权限,请选择 Make this user administrator 复选框(安装程序将该用户添加到
wheel组。)管理员用户可以使用自己的用户密码,通过
sudo命令来执行只有root用户可以执行的操作,而不必使用root密码。这可能更为方便,但也可能导致安全风险。选择 Require a password to use this account 复选框。
如果您为用户授予了管理员特权,请确保帐户受密码保护。在没有为用户设置密码前,不要授予用户管理员的权限。
- 在 Password 项中输入密码。
- 在 Confirm password 项中再次输入同一密码。
- 点击 来应用更改,并返回到 Installation Summary 窗口。
6.3.3. 编辑高级用户设置 复制链接链接已复制到粘贴板!
这个流程描述了如何在 Advanced User Configuration 对话框中编辑用户帐户的默认设置。
流程
- 在 Create User 窗口中,单击 。
-
如果需要,在 Home directory 字段中编辑详情。该字段默认使用
/home/username。 在 User and Groups IDs 部分,您可以:
选择 Specify a user ID manually 并使用 or 来输入所需的值。
默认值为 1000。用户 ID(UID)0-999 由系统保留,因此不能分配给用户。
选择 Specify a group ID manually 并使用 or 来输入所需的值。
默认组名与用户名相同,默认组 ID(GID)为 1000。GID 0-999 由系统保留,因此不能分配给用户组。
在 Group Membership 字段中,指定用逗号分开的额外组列表。会创建尚不存在的组;您可以在括号中为其他组指定自定义的 GID。如果您没有为新组指定自定义的 GID,则新组会自动接收一个 GID。
创建的用户帐户始终有一个默认组成员资格(用户的默认组,其 ID 在 Specify a group ID manually 字段中设置)。
- 点击 来应用更新,并返回到 Create User 窗口。
6.4. 配置手动分区 复制链接链接已复制到粘贴板!
您可以使用手动分区来配置磁盘分区和挂载点,并定义安装 Red Hat Enterprise Linux 的文件系统。在安装之前,您应该考虑是否使用分区的或未分区的磁盘设备。有关在 LUN 上直接使用或通过 LVM 使用分区的优点和缺点的详情,请查看红帽知识库解决方案 在 LUN 上使用分区的优点和缺点。
您有不同的分区和存储选项,包括 Standard Partitions、LVM 和 LVM thin provisioning。这些选项提供各种优点和配置,来有效地管理系统的存储。
- 标准分区
-
标准分区包含一个文件系统或交换空间。标准分区最常用于
/boot、BIOS 引导和EFI 系统分区。您可以在大多数其他用途中使用 LVM 逻辑卷。 - LVM
-
选择
LVM(或者逻辑卷管理)作为设备类型会生成一个 LVM 逻辑卷。LVM 在使用物理磁盘时提高了性能,并允许高级设置,比如对一个挂载点使用多个物理磁盘,并设置软件 RAID ,以提高性能、可靠性或两者都提高。 - LVM 精简配置
- 使用精简配置,您可以管理一个空闲空间的存储池,称为精简池,可在应用程序需要时将其分配给任意数量的设备。您可以根据需要动态地扩展池,以便有效分配存储空间。
安装 Red Hat Enterprise Linux 需要至少一个分区,但至少使用以下分区或卷:/、/home、/boot 和 swap。您还可以根据需要创建额外的分区和卷。
要防止数据丢失,建议您在继续前备份数据。如果您要升级或创建一个双引导系统,您应该备份所有您要保留在存储设备中的数据。
6.4.1. 推荐的分区方案 复制链接链接已复制到粘贴板!
在以下挂载点创建单独的文件系统。但是,如果需要,您还可以在 /usr、/var 和 /tmp 挂载点创建文件系统。
-
/boot -
/(root) -
/home -
swap -
/boot/efi -
PReP
建议对裸机部署中使用此分区方案,它不适用于虚拟和云部署。
/boot分区 - 建议大小至少为 1 GiB-
挂载的分区
/boot包含操作系统内核,它可允许您的系统引导 Red Hat Enterprise Linux 8,以及在 bootstrap 过程中使用的文件。由于大多数固件的限制,请创建一个可以容纳这些文件的小分区。在大多数情况下,1 GiB 引导分区足够了。和其它挂载点不同,不能使用 LVM 用于/boot-/boot必须位于独立磁盘分区中。
如果有一张 RAID 卡,请注意某些 BIOS 类型不支持从 RAID 卡中引导。在这种情况下,/boot 分区必须在 RAID 阵列之外的分区上创建,比如在单独的磁盘上。
-
通常情况下,
/boot分区由安装程序自动创建。但是,如果/(根)分区大于 2 TiB,且(U)EFI 用于引导,您需要创建一个小于 2 TiB 的独立/boot分区才能成功引导机器。 -
确保
/boot分区在手动分区时位于磁盘的第一个 2 TB 中。将/boot分区放在 2 TB 边界外可能导致安装成功,但系统无法引导,因为 BIOS 无法读取超出这个限制的/boot分区。
root- 推荐的大小为 10 GiB这是"
/"或根目录的位置。root 目录是目录结构的最顶层。默认情况下,所有文件都会写入此文件系统,除非在要写入的路径中挂载了不同的文件系统,例如/boot或/home。虽然 5 GiB 根文件系统允许您最小安装,但建议至少分配 10 GiB,以便可以尽可能安装您想要的软件包组。
不要将 /root 目录与 / 目录混淆。/root 目录是 root 用户的主目录。/root 目录有时被称为 slash root,将其与根目录区分开。
/home- 建议大小至少为 1 GiB-
要独立于系统数据存储用户数据,请为
/home目录创建一个专用的文件系统。文件系统大小基于本地存储的数据大小、用户数量等。您可以在不删除用户数据文件的情况下,升级或重新安装 Red Hat Enterprise Linux 8。如果您选择自动分区,则建议至少有 55 GiB 磁盘空间可用于安装,以确保创建了/home文件系统。 swap分区 - 建议大小至少为 1 GiBswap 文件系统支持虚拟内存 ; 当内存不足以贮存系统正在处理的数据时,数据就会被写入 swap 文件系统。swap 大小是系统内存负载的一个功能,而不是系统内存总量,因此不等于系统内存总量。务必要分析系统将要运行的应用程序以及那些应用程序将服务的负载,以确定系统内存工作负载。应用程序供应商和开发人员可提供支持。
当系统没有 swap 空间时,内核会终止进程,因为系统 RAM 内存已耗尽。配置太多 swap 空间会导致存储设备被分配但处于闲置状态,因此资源使用不足。太多 swap 空间也会隐藏内存泄漏的问题。swap 分区的最大大小以及其它附加信息可在
mkswap(8)手册页中找到。下表根据系统中的 RAM 量以及需要足够的内存以便系统休眠提供推荐的 swap 分区大小。如果您让安装程序自动为系统分区,则使用这个指南建立 swap 分区大小。自动分区设置假设不使用休眠功能。swap 分区的最大大小限制为磁盘总大小的 10%,且安装程序无法创建大于 1TiB 的 swap 分区。要设置足够的 swap 空间以便允许休眠功能,或者想将 swap 分区大小设定为超过系统的存储空间 10%,或者 1TiB 以上,您必须手动编辑分区布局。
| 系统中的 RAM 量 | 推荐的 swap 空间 | 如果允许休眠则推荐使用 swap 空间 |
|---|---|---|
| 小于 2 GiB | RAM 量的 2 倍 | RAM 量的 3 倍 |
| 2 GiB - 8 GiB | 与 RAM 量相等 | RAM 量的 2 倍 |
| 8 GiB - 64 GiB | 4 GiB 到 RAM 量的 0.5 倍 | RAM 量的 1.5 倍 |
| 64 GiB 以上 | 依赖工作负载(至少 4GiB) | 不推荐休眠 |
/boot/efi分区 - 建议大小为 200 MiB- 基于 UEFI 的 AMD64、Intel 64 和 64 位 ARM 需要 200 MiB EFI 系统分区。推荐的最小值是 200 MiB,默认大小为 600 MiB,最大为 600 MiB。BIOS 系统不需要 EFI 系统分区。
例如,在每个范围间有 2 GiB、8 GiB 或 64 GiB 系统 RAM 的系统。可根据所选 swap 空间和休眠支持自由裁量。如果您的系统资源允许此操作,增加 swap 空间可提高性能。
将 swap 空间分布到多个存储设备中 - 特别是对于那些使用高速驱动器、控制程序和接口的系统,还可提高 swap 空间性能。
很多系统的分区和卷超过了最低要求。根据具体系统需要选择分区。如果您不清楚如何配置分区,请接受安装程序提供的自动默认的分区布局。
只为那些您需要的分区立即分配存储容量。您可以在任何时间分配空闲空间来满足需要。
PRePboot 分区 - 建议大小为 4 到 8 MiB-
当在 IBM Power System 服务器上安装 Red Hat Enterprise Linux 时,磁盘的第一个分区应包含一个
PReP引导分区。这包含 GRUB 引导装载程序,它允许其它 IBM Power Systems 服务器引导 Red Hat Enterprise Linux。
6.4.2. 支持的硬件存储 复制链接链接已复制到粘贴板!
非常重要的一点是,了解如何配置存储技术以及如何在 Red Hat Enterprise Linux 主要版本间的更改对存储技术的支持。
硬件 RAID
您的计算机主板或者附加控制器卡提供的所有 RAID 功能都需要在开始安装进程前进行配置。在 Red Hat Enterprise Linux 中,每个活跃的 RAID 阵列都以一个驱动器的形式出现。
软件 RAID
在有多个磁盘的系统上,您可以使用 Red Hat Enterprise Linux 安装程序来把几个驱动器作为 Linux 软件 RAID 阵列操作。使用软件 RAID 阵列时,RAID 功能是由操作系统而非专用硬件控制的。
当预先存在的 RAID 阵列成员设备都是未分区的磁盘/驱动器时,安装程序会将阵列视为一个磁盘,且没有方法来删除阵列。
USB 磁盘
您可在安装后连接和配置外部 USB 存储。大多数设备可被内核识别,但有些设备可能无法识别。如果在安装过程中不需要配置这些磁盘,请断开连接以避免潜在的问题。
NVDIMM 设备
要使用非易失性双内存模块(NVDIMM)设备作为存储,必须满足以下条件:
- Red Hat Enterprise Linux 的版本为 7.6 或更高版本。
- 系统的构架是 Intel 64 或者 AMD64。
- 该设备被配置为扇区模式。Anaconda 可将 NVDIMM 设备重新配置成此模式。
- 该设备必须被 nd_pmem 驱动程序支持。
在以下附加条件下可使用 NVDIMM 设备引导:
- 系统使用 UEFI。
- 该设备必须使用系统中可用的固件或者 UEFI 驱动程序支持。UEFI 驱动程序可以从设备本身的 ROM 选项加载。
- 该设备必须在命名空间下提供。
要在引导过程中利用 NVDIMM 设备的高性能,将 /boot 和 /boot/efi 目录放在该设备中。
引导过程中不支持 NVDIMM 设备的 Execute-in-place(XIP)功能,内核被加载到传统内存中。
Intel BIOS RAID 设定的注意事项
Red Hat Enterprise Linux 使用 mdraid 在 Intel BIOS RAID 组件中安装。这些组件会在引导过程中自动探测到,设备节点路径可在多个引导过程中更改。使用文件系统标签或者设备 UUID 替换设备节点路径(如 /dev/sda)。您可以使用 blkid 命令查找文件系统标签和设备 UUID。
6.4.3. 启动手动分区 复制链接链接已复制到粘贴板!
您可以根据您的要求手动对磁盘进行分区。
先决条件
- 此时会打开 Installation Summary 屏幕。
- 所有磁盘都可用于安装程序。
流程
选择用于安装的磁盘:
- 点 Installation Destination 打开 Installation Destination 窗口。
- 点击对应图标选择安装所需的磁盘。所选磁盘上显示了一个选择框。
- 在 Storage Configuration 下,选择 Custom 按钮。
- 可选:要使用 LUKS 启用存储加密,请选中 Encrypt my data 复选框。
- 点 。
如果您选择加密存储,则会打开一个输入磁盘加密密码短语的对话框。输入 LUKS 密码短语:
在两个文本字段输入密码短语。要切换键盘布局,使用键盘图标。
警告在输入密码短语的对话框中,您不能更改键盘布局。选择英文键盘布局在安装程序中输入密码短语。
- 点击 。Manual Partitioning 窗口被打开。
检测到的挂载点列在左侧窗格中。挂载点是由检测到的操作系统安装来组织。因此,如果在多个安装间共享分区,某些文件系统会被多次显示。
- 在左侧窗格中选择挂载点;可以自定义的选项显示在右侧窗格中。
- 可选:如果您的系统包含现有文件系统,则请确定有足够的可用空间以供安装。要删除任何分区,请在列表中选择它们并点击 按钮。对话框有一个复选框,您可以用它来已删除的分区所属系统所使用的所有其他分区。
可选:如果没有现有分区,并且您想要创建一组分区作为起点,请从左侧窗格(Red Hat Enterprise Linux 的默认分区方案是 LVM)中选择您首选的分区方案,然后单击 Click here to create them automatically 链接。
注意一个
/boot分区、一个/(root)卷和一个与可用存储大小成比例的swap卷被创建 ,并列在左侧窗格中。这些是典型安装的文件系统,但您可以添加额外的文件系统和挂载点。- 点击 确认任何更改,并返回 Installation Summary 窗口。
6.4.4. 支持的文件系统 复制链接链接已复制到粘贴板!
在配置手动分区时,您可以使用 Red Hat Enterprise Linux 中提供的各种文件系统和分区类型优化性能、确保兼容性,并有效地管理磁盘空间。
- xfs
-
XFS是一个高度可扩展的高性能文件系统,它最多支持 16 EB(大约 1600万 TB)的文件系统、8 EB 文件(大约 800万 TB)以及包含千百万条目的目录结构。XFS还支持元数据日志,,提高崩溃恢复速度。单个 XFS 文件系统最多支持 500 TB。XFS是 Red Hat Enterprise Linux 上的默认文件系统。XFS 文件系统无法缩小以获得可用空间。 - ext4
-
ext4文件系统基于ext3文件系统,但包括了很多改进。这包括对更大文件系统和更大文件的支持、更快更有效的磁盘空间分配、一个目录中无限的子目录数、更快速的文件系统检查及更强大的日志能力。单个ext4文件系统最多支持 50 TB。 - ext3
-
ext3文件系统基于ext2文件系统,它有一个主要优点 - 日志。使用日志记录文件系统可减少在文件系统终止后恢复文件系统所花费的时间,因为不需要每次运行 fsck 程序检查文件系统元数据一致性。 - ext2
-
ext2文件系统支持标准 Unix 文件类型,包括常规文件、目录或符号链接。它允许分配长文件名,最多 255 个字符。 - swap
- 交换分区是用来支持虚拟内存的。换句话说,当内存不足以贮存系统正在处理的数据时,数据就会被写入 swap 分区。
- vfat
VFAT文件系统是一个 Linux 文件系统,与 Microsoft Windows 的 FAT 文件系统中的长文件名兼容。注意Linux 系统分区不支持
VFAT文件系统。例如:/、/var、/usr等等。- BIOS 引导
- 从在 BIOS 系统和 BIOS 兼容模式的 UEFI 系统上使用 GUID 分区表(GPT)引导的设备所需小分区。
- EFI 系统分区
- UEFI 系统上引导使用 GUID 分区表(GPT)设备所需小分区。
- PReP
-
这个小引导分区位于磁盘的第一个分区中。
PRePboot 分区包含 GRUB2 引导装载程序,它可允许 IBM Power Systems 服务器引导 Red Hat Enterprise Linux。
6.4.5. 添加挂载点文件系统 复制链接链接已复制到粘贴板!
您可以添加多个挂载点文件系统。您可以使用任何可用的文件系统和分区类型,如 XFS、ext4、ext3、ext2、swap、VFAT 以及 BIOS 引导、EFI 系统分区和 PReP 等特定分区来有效地配置您系统的存储。
先决条件
- 您已规划了您的分区。
-
确保您没有对带有符号链接的路径指定挂载点,如
/var/mail、/usr/tmp、/lib、/sbin、/lib64和/bin。有效负载(包括 RPM 软件包)取决于创建指向特定目录的符号链接。
流程
- 点击 可创建新挂载点文件系统。Add a New Mount Point 对话框被打开。
-
从 挂载点 下拉菜单中选择预先设置的路径之一 ,或者输入自己的路径。例如,为根分区选择
/,或者为引导分区选择/boot。 在 Desired Capacity 项中输入文件系统的大小,例如
2GiB。如果您没有在 Desired Capacity 中指定值,或者指定了一个大于可用空间的大小,则会使用所有剩余的可用空间。
- 点 创建分区并返回到 Manual Partitioning 窗口。
6.4.6. 为挂载点文件系统配置存储 复制链接链接已复制到粘贴板!
您可以为手动创建的每个挂载点设置分区方案。可用的选项包括 Standard Partition、LVM 和 LVM Thin Provisioning。Red Hat Enterprise Linux 8 中删除了对 Btfrs 的支持。
无论选择了什么值,/boot 分区总是位于一个标准的分区中。
流程
- 要更改单个非 LVM 挂载点应所在的设备,请从左侧窗格选择所需的挂载点。
- 在 Device (s) 标题下,单击 。此时会打开 Configure Mount Point 对话框。
- 选择一个或多个设备并点击 确认您的选择,并返回 Manual Partitioning 窗口。
- 点 应用改变。
- 在 Manual Partitioning 窗口中左下方,点 storage device selected 打开 Selected Disks 对话框,检查磁盘信息。
- 可选:点击 按钮(圆形箭头按钮)刷新所有本地磁盘和分区。这只在执行安装程序外的高级分区后才是需要的。点击 按钮重置安装程序中的所有配置更改。
6.4.7. 自定义挂载点文件系统 复制链接链接已复制到粘贴板!
如果需要设置特定的设置,可以自定义分区或卷。如果 /usr 或 /var 是独立于其他 root 卷的分区,引导过程会变得非常复杂,因为这些目录包含关键组件。在某些情况下,比如这些目录位于 iSCSI 驱动器或 FCoE 位置,系统无法引导,或者在关机或重启时出现 Device is busy 错误。
这个限制只适用于 /usr 或 /var,不适用于下面的目录。例如: 一个独立的 /var/www 可以正常工作。
流程
从左侧窗格中,选择挂载点。
图 6.1. 自定义分区
在右侧面板中您可以自定义以下选项:
-
在 Mount Point 项值嗯输入文件系统挂载点。例如: 如果文件系统是 root 文件系统,输入
/; 如果是/boot文件系统,输入/boot,以此类推。对于 swap 文件系统来说,不需要设置挂载点,因为将文件系统类型设置为swap就足够了。 - 在 Desired Capacity 项中输入文件系统的大小。您可以使用常规大小单位,如 KiB 或者 GiB。如果没有设置任何单元,则默认为 MiB。
从下拉菜单中选择您所需的 设备类型 :
Standard Partition,LVM, 或LVM Thin Provisioning.注意只有选择了两个或者多个磁盘进行分区时才可以使用
RAID。如果选择RAID,还可以设置RAID 级别。同样,如果选择LVM,可以指定卷组。- 选择 Encrypt 复选框来加密分区或卷。您必须稍后在安装程序中设置密码。此时会显示 LUKS Version 下拉菜单。
- 从下拉菜单中选择您所需的 LUKS 版本。
从文件系统下拉菜单中为这个分区或者卷选择正确的 文件系统 类型。
注意Linux 系统分区不支持
VFAT文件系统。例如:/、/var、/usr等等。- 选择 重新格式化复选框格式化现有分区,或不选择重新格式化复选框来保留您的数据。新建的分区和卷必须重新格式化,且无法清除复选框。
- 在 Label 字段中输入分区的标签。使用标签可轻松识别和定位各个分区。
-
在 Name 中输入名称。标准分区在创建时被自动命名,您无法编辑标准分区的名称。例如: 您不能编辑
/boot名称sda1。
-
在 Mount Point 项值嗯输入文件系统挂载点。例如: 如果文件系统是 root 文件系统,输入
- 点击 应用您的更改。如果需要,可以选择另外一个分区进行自定义。在点 Installation Summary 窗口中的 前,修改不会生效。
- 可选:点 取消对分区的修改。
当您创建并自定义所有文件系统和挂载点后,点 。如果您选择加密文件系统,则会提示您输入生成密码短语。
Summary of Changes 对话框会打开,它包括了安装程序进行的与所有存储相关的操作的信息。
- 点击 来应用更改,并返回到 Installation Summary 窗口。
6.4.8. 保留 /home 目录 复制链接链接已复制到粘贴板!
在 Red Hat Enterprise Linux 8 图形安装中,您可以保留 RHEL 7 系统使用的 /home 目录。只有 /home 目录位于 RHEL 7 系统中的一个独立 /home 分区时,才可以保留 /home。
保留包含各种配置设置的 /home 目录,使得新 Red Hat Enterprise Linux 8 系统上的 GNOME Shell 环境的设置方式可以与 RHEL 7 系统上的一样。请注意,这只适用在 Red Hat Enterprise Linux 8 上与之前 RHEL 7 系统上的用户名和 ID 一样的用户。
先决条件
- 您已在您的计算机上安装了 RHEL 7。
-
/home目录位于您的 RHEL 7 系统中的一个独立/home分区中。 -
此时会打开 Red Hat Enterprise Linux 8
Installation Summary窗口。
流程
- 点 Installation Destination 打开 Installation Destination 窗口。
- 在 Storage Configuration 下,选择 Custom 单选按钮。点击 Done。
- 点 ,Manual Partitioning 窗口会打开。
选择
/home分区,在Mount Point:下填写/home,并清除 Reformat 复选框。图 6.2. 确定 /home 不会被格式化
-
可选:您还可以自定义 Red Hat Enterprise Linux 8 系统所需的
/home分区的各个方面,如 自定义挂载点文件系统 中所述。但是,要保留 RHEL 7 系统的/home,需要清除 Reformat 复选框。 - 根据您的要求自定义所有分区后,点击 。Summary of changes 将打开。
-
确认在 Summary of changes 对话框中
/home没有任何变化。这意味着/home分区被保留。 - 点击 来应用更改,并返回到 Installation Summary 窗口。
6.4.9. 在安装过程中创建软件 RAID 复制链接链接已复制到粘贴板!
独立磁盘冗余阵列 (RAID) 设备由被安排的多个存储设备组成,以便在一些配置中提供更高的性能和容错能力。创建 RAID 设备只需要一步,并可根据需要添加或者删除磁盘。您可以为系统中的每个物理磁盘配置一个 RAID 分区,因此安装程序可使用的磁盘数决定可用 RAID 设备的级别。例如:如果您的系统有两块磁盘,则无法创建 RAID 10 设备,因为它至少需要三块单独的磁盘。要优化您的系统的存储性能和可靠性,RHEL 支持软件 RAID 0、RAID 1、RAID 4、RAID 5、RAID 6和 RAID 10 类型,并支持使用 LVM 和 LVM Thin Provisioning 在安装的系统上设置存储。
在 64 位 IBM Z 上,存储子系统透明地使用 RAID。您不必手动配置软件 RAID。
先决条件
- 您已经选择了两个或者多个磁盘,然后才能看到 RAID 配置选项。根据您要创建的 RAID 类型,至少需要两个磁盘。
- 您创建了挂载点。通过配置挂载点,您可以配置 RAID 设备。
- 您已在 安装目的 窗口中选择了 单选按钮。
流程
- 在 Manual Partitioning 窗口左面地框中,选所需的分区。
- 在 Device(s) 部分点 。此时会打开 Configure Mount Point 对话框。
- 选择您要包含在 RAID 设备中的磁盘并点击 。
- 点击设备类型下拉菜单并选择 RAID。
- 点击文件系统下拉菜单并选择您首选的文件系统类型。
- 点击RAID 级别下拉菜单并选择您需要的 RAID 级别。
- 点击 保存您的更改。
- 点 应用设置并返回到按照概述窗口。
6.4.10. 创建 LVM 逻辑卷 复制链接链接已复制到粘贴板!
逻辑卷管理器(LVM)表示底层物理存储空间(如磁盘或 LUN)的一个简单的逻辑视图。物理存储分区以物理卷的形式代表,您可以将其分组到卷组中。您可以将每个卷组分成多个逻辑卷,每个逻辑卷都类似于一个标准磁盘分区。因此,LVM 逻辑卷具有跨多个物理磁盘的分区的功能。
- LVM 配置只可用于图形安装程序。在文本模式安装过程中,LVM 配置不可用。
-
要创建 LVM 配置,请按 Ctrl+Alt+F2 ,来在不同的虚拟控制台中使用 shell 提示符。您可以在该 shell 中运行
vgcreate和lvm命令。要返回文本模式安装,请按 Ctrl+Alt+F1。
流程
在 Manual Partitioning 窗口中,使用以下选项之一创建一个新挂载点:
- 使用 Click here to create them automatically 选项,或者点 + 按钮。
- 从下拉列表中选择 Mount Point,或者手动输入。
在 Desired Capacity 字段中输入文件系统的大小,例如:
/70 GiB ,/boot1 GiB 。备注:跳过这一步以使用现有挂载点。
- 选择挂载点。
在下拉菜单中选择
LVM。卷组 下拉菜单显示新创建的卷组名称。注意您无法在配置对话框中指定卷组物理扩展的大小。该大小始终设置为默认值 4 MiB。如果要创建具有不同物理块的卷组,您必须切换到交互式 shell ,并使用
vgcreate命令来手动创建它,或者将 Kickstart 文件与volgroup --pesize=size命令一起使用。有关 Kickstart 的详情,请查看 自动安装 RHEL。- 点击 返回 安装概述 窗口。
6.4.11. 配置 LVM 逻辑卷 复制链接链接已复制到粘贴板!
您可以根据您的要求配置新创建的 LVM 逻辑卷。
不支持将 /boot 分区放在 LVM 卷中。
流程
在 Manual Partitioning 窗口中,使用以下任一选项创建一个挂载点:
- 使用 Click here to create them automatically 选项,或者点 + 按钮。
- 从下拉列表中选择 Mount Point,或者手动输入。
在 Desired Capacity 字段中输入文件系统的大小,例如:
/70 GiB ,/boot1 GiB 。备注:跳过这一步以使用现有挂载点。
- 选择挂载点。
-
点 设备类型下拉菜单并选择
LVM。卷组 下拉菜单显示新创建的卷组名称。 点配置新创建的卷组。此时会打开配置卷组对话框。
注意您无法在配置对话框中指定卷组物理扩展的大小。该大小始终设置为默认值 4 MiB。如果要创建具有不同物理块的卷组,您必须切换到交互式 shell ,并使用
vgcreate命令来手动创建它,或者将 Kickstart 文件与volgroup --pesize=size命令一起使用。如需更多信息,请参阅 自动安装 RHEL 文档。可选:在 RAID 级别下拉菜单中选择您需要的 RAID 级别。
可用的 RAID 级别与实际的 RAID 设备相同。
- 选择 加密 复选框来为卷组进行加密。
在 Size policy 下拉菜单中,为卷组选择以下任何一个大小策略:
可用的策略选项有:
- 自动
- 自动设置卷组大小,使其足够大,以便包含配置的逻辑卷。适合于不需要剩余空间的卷组。
- 尽可能大
- 文件系统以最大大小创建,无论其包含的逻辑卷的大小如何。适合于要将大多数数据保存到 LVM,且之后需要增大一些现有逻辑卷的大小,或者需要在该卷组中生成附加逻辑卷。
- 已修复
- 您可以设置准确的卷组大小。这个固定的大小必须能够容纳所有配置的逻辑卷。适用于知道该卷组的实际大小。
- 点击 以应用设置并返回到 Manual Partitioning 窗口。
- 点击 保存您的更改。
- 点击 返回到 Installation Summary 窗口。
6.4.12. 分区建议 复制链接链接已复制到粘贴板!
无法为每个系统分区最佳方法; 最理想的设置取决于您计划如何使用要安装的系统。然而,下面的提示可能帮助您找到最合适的布局以满足您的需要:
- 首先创建具有特定要求的分区,例如,某个分区必须位于特定磁盘中。
-
考虑加密任何可能包含敏感数据的分区和卷。加密可防止未授权的人访问分区中的数据,即使他们可以访问物理存储设备。在大多数情况下,应该至少为包含用户数据的
/home分区加密。 -
在有些情况下,为
/、/boot和/home以外的目录创建独立挂载点可能非常有用。例如,在运行MySQL数据库的服务器中,拥有一个单独的挂载点/var/lib/mysql允许您在重新安装的过程中保留数据库,而无需之后从备份中恢复它。但是,使用不必要的挂载点使存储管理更为困难。 -
有些特殊限制适用于某些可以放置分区布局的目录。值得注意的是,
/boot目录必须总是位于物理分区(不能在 LVM 卷中)。 - 如果您不熟悉 Linux,请考虑查看 Linux 文件系统层次结构标准,以了解有关各种系统目录及其内容的信息。
- 每个内核大约需要:60MiB(initrd 34MiB、11MiB vmlinuz 和 5MiB System.map)
- 对于救援(rescue)模式:100MiB(initrd 76MiB、11MiB vmlinuz 和 5MiB 系统映射)
当在系统中启用
kdump时,它将需要大约额外的 40MiB(另一个包含 33MiB 的 initrd)/boot的默认 1 GiB 分区大小应该足以满足大多数常见用例的需要。但是,如果您计划保留多个内核版本或勘误内核,请增大这个分区的大小。-
/var目录保存了大量应用程序的内容,包括 Apache Web 服务器,并供 YUM 软件包管理器用于临时存储下载的软件包更新。确保分区或包含/var的卷至少 5 GiB。 -
/usr目录在典型的 Red Hat Enterprise Linux 安装中持有大部分软件。因此,包含此目录的分区或卷应该至少 5 GiB 用于最小安装,使用图形环境的安装需要至少 10 GiB。 如果
/usr或/var是独立于剩余 root 卷的分区,引导过程会变得非常复杂,因为这些目录包含了对引导极为重要的组件。在某些情况下,比如这些目录位于 iSCSI 驱动器或 FCoE 位置,系统可能无法引导,或者在关机或重启时挂起并出现Device is busy出错信息。这个限制只适用于
/usr或/var,不适用于下面的目录。例如:/var/www的单独分区可以正常工作。重要有些安全策略要求将
/usr和/var分离,即使它使管理更加复杂。-
考虑在 LVM 卷组中保留一部分空间不分配。如果您的空间要求改变,但您不希望从其他卷中删除数据,这个未分配空间为您提供了灵活性。您也可以为分区选择
LVM Thin Provisioning设备类型,使其让卷自动处理未使用的空间。 - 不能缩小 XFS 文件系统的大小 - 如果您希望使这个文件系统的分区或卷更小,必须备份数据,销毁文件系统,然后创建一个新的、较小的文件系统。因此,如果您计划稍后更改分区布局,则应使用 ext4 文件系统。
-
如果您希望在安装后通过添加更多磁盘或扩展虚拟机磁盘来扩展存储,请使用逻辑卷管理器(LVM)。通过使用 LVM,您可以在新驱动器中创建物理卷,然后将其分配给任何您认为适合的卷组和逻辑卷 - 例如,您可以轻松地扩展您的系统
/home(或者其它位于逻辑卷的目录)。 - 取决于系统的固件、引导驱动器大小以及引导驱动器磁盘标签,可能需要创建 BIOS 引导分区或者 EFI 系统分区。请注意,如果您的系统不需要,则无法在图形安装中创建 BIOS 引导或 EFI 系统分区 - 在这种情况下,会在菜单中隐藏它们。
-
如果您需要在安装后更改存储配置,Red Hat Enterprise Linux 程序库会提供几个不同的工具来帮助您完成此操作。如果您希望使用命令行工具,请尝试
system-storage-manager。
6.5. 选择基础环境和其他软件 复制链接链接已复制到粘贴板!
使用 软件选择窗口选择所需软件包。软件包被分为 Base Environment 和 Additional Software。
- Base Environment(基本环境) 包含预定义的软件包。您只能选择一个基本环境,例如,Server with GUI (默认)、Server, Minimal Install, Workstation, Custom operating system, Virtualization Host。可用性取决于用作安装源的安装 ISO 镜像。
- Additional Software for Selected Environment(所选环境的额外软件)包含基本环境的额外软件包。您可以选择多个软件软件包。
使用预定义的环境和其他软件自定义您的系统。然而,在标准安装中不能选择要安装的单独软件包。要查看特定环境中的软件包,请查看安装源介质(DVD、CD、USB)中的 repository/repodata/*-comps-repository.architecture.xml 文件。XML 文件包含作为基础环境一部分安装的软件包详情。可用环境由 <environment> 标签标记,其他软件包则标有 <group> 标签。
如果您不确定要安装哪些软件包,请选择 Minimal Install 基础环境。最小安装只安装一个基本的 Red Hat Enterprise Linux 版本,以及少量的附件软件。在系统完成安装且您首次登录后,您可以使用 YUM 软件包管理器来安装其他软件。有关 YUM 软件包管理器的详情,请参考 配置基本系统设置 文档。
-
从任何 RHEL 8 系统使用
yum group list命令,来查看安装在系统上作为软件选择一部分的软件包的列表。如需更多信息,请参阅 配置基本系统设置。 -
如果您需要控制安装哪些软件包,可以使用 Kickstart 文件并在
%packages部分定义软件包。
先决条件
- 您已配置了安装源。
- 安装程序已下载了软件包元数据。
- 打开 安装概述 窗口。
流程
- 在 安装概述 窗口中点击 软件选择。此时会打开 软件选择 窗口。
在 Base Environment 窗格中选择一个基础环境。您只能选择一个基本环境,例如 Server with GUI (默认)、Server、Minimal Install、Workstation、Custom Operating System、Virtualization Host。默认情况下,选择 Server with GUI 基础环境。
图 6.3. Red Hat Enterprise Linux 软件选择
- 在 Additional Software for Selected Environment 框中选择一个或多个选项。
- 点击 来应用设置并返回到图形安装。
6.6. 可选:配置网络和主机名 复制链接链接已复制到粘贴板!
使用 Network and Host name 窗口来配置网络接口。您在此处选择的选项既可以在从远程位置下载包等任务的安装过程中使用,也可在已安装的系统上使用。
按照以下步骤来配置您的网络和主机名。
流程
- 在 Installation Summary 窗口中点击 。
- 在左侧窗格的列表中选择一个接口。详情显示在右侧方框中。
使用 开关来启用或禁用所选接口。
您不能手动添加或删除接口。
- 点击 添加虚拟网络接口,其可以是:Team、Bold、Bridge 或 VLAN。
- 点 删除虚拟接口。
- 点 更改设置,如 IP 地址、DNS 服务器或者现有接口的路由配置(虚拟和物理)。
在 Host Name 字段中输入您系统的主机名。
主机名可以是完全限定域名(FQDN),格式为
hostname.domainname,也可以是没有域的短主机名。许多网络具有动态主机配置协议(DHCP)服务,该服务自动为连接的系统提供域名。要允许 DHCP 服务给这个系统分配域名,请只指定短主机名。主机名只能包含字母数字字符和
-或.。主机名应等于或小于 64 个字符。主机名不能以-和.开头或结尾要符合 DNS 的要求,FQDN 的每个部分都应等于或小于 63 个字符,FQDN 总长度(包括点)不应超过 255 个字符。localhost值意味着没有为目标系统配置特定的静态主机名,安装的系统的实际主机名在处理网络配置的过程中配置,例如,通过使用 DHCP 或 DNS 的 NetworkManager。使用静态 IP 和主机名配置时,使用短名称还是 FQDN 取决于计划的系统用例。Red Hat Identity Management 在置备过程中配置 FQDN,但有些第三方软件产品可能需要短名称。在任何一种情况下,要确保在所有情况下两种形式都可用,请在
/etc/hosts中为主机添加一个条目,格式为IP FQDN 短别名。- 单击 ,将主机名应用到安装程序环境。
- 或者,在 Network and Hostname 窗口中,您可以选择 Wireless 选项。单击右侧窗格中的 以选择您的 wifi 连接,如需要请输入密码,然后点击 。
6.6.1. 添加虚拟网络接口 复制链接链接已复制到粘贴板!
您可以添加虚拟网络接口。
流程
- 在 Network & Host name 窗口中点击 按钮添加虚拟网络接口。此时会打开 Add a device 对话框。
选择四种虚拟接口类型中的一个:
- Bond:NIC(网络接口控制器)绑定,这是一种将多个物理网络接口绑定成单个绑定通道的方法。
- Bridge :表示 NIC 桥接,这是一种将多个独立的网络连接成一个聚合网络的方法。
- Team :NIC Teaming 是一种聚合链接的新实现,旨在提供一个小型内核驱动程序来实现数据包流的快速处理,以及各种应用程序在用户空间中执行其他操作。
- Vlan( 虚拟 LAN):一种创建多个互相隔离的不同的广播域的方法。
选择接口类型并点击 。此时将打开一个编辑界面对话框,允许您编辑所选接口类型的任何可用设置。
如需更多信息,请参阅 编辑网络接口。
- 点击 确认虚拟接口设置,并返回到 Network & Host name 窗口。
- 可选:要更改虚拟接口的设置,请选择接口并单击 。
6.6.2. 编辑网络接口配置 复制链接链接已复制到粘贴板!
您可以编辑安装过程中使用的典型有线连接的配置。配置其他类型的网络与其基本相同,但具体的配置参数可能有所不同。
在 64 位 IBM Z 上,您无法添加新连接,因为网络子通道需要提前分组和设置,这目前只在启动阶段完成。
流程
要手动配置网络连接,请从 Network and Host name 窗口中选择接口,然后单击 。
此时会打开一个特定于所选接口的编辑对话框。出现的选项取决于连接类型 - 可用的选项略有不同,具体取决于连接类型是物理接口(有线或无线网络接口控制器)还是之前在 添加虚拟接口 中配置的虚拟接口(Bond、Bridge、Team 或 Vlan)。
6.6.3. 启用或者禁用接口连接 复制链接链接已复制到粘贴板!
您可以启用或禁用特定的接口连接。
流程
- 点击General标签。
-
选择 与优先级自动连接 框以默认启用连接。使用将默认优先级
0。 可选:使用 All users may connect to this network 选项启用或禁用系统上的所有用户连接到这个网络。如果您禁用这个选项,则只有
root用户可以连接到这个网络。重要当在有线连接中启用时,系统会在启动或重启过程中自动连接。在无线连接中,接口会尝试连接到所有已知的无线网络。有关 NetworkManager 的详情,包括
nm-connection-editor工具,请参阅 配置和管理网络 文档。点击 按钮应用这些更改并返回到 网络和主机名称 窗口。
不可能只允许
root以外的一个特定用户使用这个接口,因为在安装过程中没有创建其它用户。如果您需要其他用户的连接,需要在安装后配置它。
6.6.4. 设置静态 IPv4 或者 IPv6 设置 复制链接链接已复制到粘贴板!
默认情况下,根据当前的网络设置,IPv4 和 IPv6 都被设置为自动配置。这意味着,当接口连接到网络时,会自动检测本地 IP 地址、DNS 地址等地址以及其他设置。在很多情况下,这已经足够了。但您也可以在 IPv4 设置和 IPv6 设置 标签页中对它们进行静态配置。完成以下步骤来配置 IPv4 或 IPv6 设置:
流程
- 要设置静态网络配置,请导航到一个 IPv 设置标签页,并在 方法 下拉菜单中选择除 Automatic 以外的方法,例如Manual。Addresses 窗格已启用。
- 可选:在 IPv6 设置 标签页中,您还可以将方法设置为 Ignore 以禁用此接口上的 IPv6。
- 点 并输入您的地址设置。
-
在Additional DNS servers 字段中输入 IP 地址;它接受一个或多个 DNS 服务器的 IP 地址,例如
10.0.0.1,10.0.0.8。 选中 Require IPvX addressing for this connection to complete 复选框。
在 IPv4 Settings 或 IPv6 Settings 选项卡中选择这个选项,只有在 IPv4 或 IPv6 成功时才允许此连接。如果 IPv4 和 IPv6 的此选项均被禁用,则只要任一 IP 协议上的配置成功,则接口就能够连接。
- 点击 按钮应用这些更改并返回到 Network & Host name 窗口。
6.6.5. 配置路由 复制链接链接已复制到粘贴板!
您可以通过配置路由来控制特定连接的访问。
流程
- 在 IPv4 Settings 和 IPv6 Settings 标签页中,点击 来配置接口上特定 IP 协议的路由设置。一个特定于接口的编辑路由对话框。
- 点击 以添加路由。
- 选择 Ignore automatically obtained routes 复选框,来配置至少一个静态路由,并禁用没有专门配置的所有路由。
选择 Use this connection only for resources on its network 复选框,以防止连接成为默认路由。
即使没有配置任何静态路由,也可以选择这个选项。这个路由只用来访问某些资源,比如需要本地或者 VPN 连接的内部网页。另一个(默认)路由用于公开的资源。与配置的附加路由不同,这个设置会被传送到安装的系统上。这个选项仅在配置多个接口时可用。
- 点击 保存您的设置并返回到特定于该接口的编辑路由对话框。
- 点击 以应用设置并返回到 Network and Host Name 窗口。
6.7. 可选:配置键盘布局 复制链接链接已复制到粘贴板!
您可以从 Installation Summary 屏幕配置键盘布局。
如果您使用无法接受拉丁字符的布局,如 Russian ,请添加 English (United States) 布局,并配置键盘组合来在两种布局之间进行切换。如果您选择了没有拉丁字符的布局,那么在后面的安装过程中可能无法输入有效的 root 密码和用户凭证。这可能会阻止您完成安装。
流程
- 在 安装概述 窗口中点击 键盘。
- 单击 以打开 Add a Keyboard Layout 窗口,来更改为不同的布局。
- 通过浏览列表或使用 Search 字段选择布局。
- 选择所需的布局并点击 。新布局出现在默认布局下。
- 点击 来选择性地配置用于在可用布局之间循环的键盘开关。Layout Switching Options 窗口将打开。
- 要配置用于切换的组合键,请选择一个或多个键组合,并单击 以确认您的选择。
- 可选:当您选择布局时,点 Keyboard 按钮来打开一个新的对话框,显示所选布局的可视化表示。
- 点击 来应用设置并返回到图形安装。
6.8. 可选:配置语言支持 复制链接链接已复制到粘贴板!
您可以从 Installation Summary 屏幕中更改语言设置。
流程
- 在 Installation Summary 窗口中点击 Language Support。Language Support 窗口将打开。左侧面板列出了可用语言组。如果至少配置了组中的一种语言,则会显示复选标记,并突出显示支持的语言。
- 从左侧窗格中,单击组以选择其他语言,然后从右侧窗格中选择区域选项。对您要配置的所有语言重复此过程。
- 可选:如果需要,在文本框中键入 来搜索语言组。
- 点击 来应用设置并返回到图形安装。
6.10. 可选:订阅系统并激活 Red Hat Insights 复制链接链接已复制到粘贴板!
Red Hat Insights 是一个软件即服务(SaaS)服务(SaaS),它提供对注册的红帽系统的持续分析,以主动识别跨物理、虚拟和云环境以及容器部署的安全性、性能和稳定性。通过在 Red Hat Insights 中 注册 RHEL 系统,您可以访问预测分析、安全警报和性能优化工具,使您能够维护一个安全的、高效的且稳定的 IT 环境。
您可以使用您的红帽帐户或激活码注册到红帽。您可以使用 Connect to Red Hat 选项将您的系统连接到 Red Hat Insights。
流程
- 从 Installation Summary 屏幕,在 Software 下,点击 Connect to Red Hat。
选择 Account 或 Activation Key。
- 如果您选择 Account,请输入您的红帽客户门户网站用户名和密码详情。
如果您选择 Activation Key,请输入您的机构 ID 和激活码。
当把您的激活码注册到订阅中时,就可以输入多个激活码(使用逗号分开)。
选择 Set System Purpose 复选框。
- 如果帐户启用了简单内容访问模式,设置系统目值对于在订阅服务中准确报告消耗仍然很重要。
- 如果您的帐户处于授权模式,则系统用途可让授权服务器决定并自动附加最合适的订阅,以满足 Red Hat Enterprise Linux 8 系统的预期用途。
- 从对应的下拉列表中选择所需的 Role、SLA 和 Usage。
- 默认情况下启用 连接到 Red Hat Insights 复选框。如果您不想连接到 Red Hat Insights,请清除复选框。
可选:展开 Options 。
- 如果您的网络环境只允许外部互联网访问,或通过 HTTP 代理服务器访问内容服务器,请选择 Use HTTP proxy 复选框。如果不使用 HTTP 代理,则取消选择 Use HTTP proxy 选项。
如果您正在运行 Satellite 服务器或执行内部测试,请选择 Custom Server URL 和 Custom Base URL 复选框,并输入所需详情。
重要-
Custom Server URL 字段不需要 HTTP 协议,如
nameofhost.com。但是,Custom base URL 字段需要 HTTP 协议。 - 要在注册后更改 Custom base URL,您必须取消注册,提供新详情,然后重新注册。
-
Custom Server URL 字段不需要 HTTP 协议,如
点 注册该系统。当系统成功注册并附加订阅后,Connect to Red Hat 窗口会显示附加的订阅详情。
根据订阅的数量,注册和附加过程可能需要一分钟时间完成。
点击 返回到 Installation Summary 窗口。
在 Connect to Red Hat 下会显示一个 Registered 信息。
6.11. 可选:使用基于网络的软件仓库进行安装 复制链接链接已复制到粘贴板!
您可以从自动检测的安装介质、红帽 CDN 或网络配置安装源。当 Installation Summary窗口第一次打开时,安装程序会尝试根据用来引导系统的介质类型配置安装源。完整的 Red Hat Enterprise Linux 服务器 DVD 将源配置为本地介质。
先决条件
- 您已从 Product Downloads 页面下载了完整的安装 DVD ISO 或最小安装 Boot ISO 镜像。
- 您已创建了可引导安装介质。
- 打开 Installation Summary 窗口。
流程
在 Installation Summary 窗口中点击 安装源。此时会打开 Installation Source 窗口。
- 请参阅 Auto-detected installation media 部分以验证详情。如果您从包含安装源(例如 DVD)的介质启动安装程,则默认选择这个选项。
- 点击 检查介质的完整性。
查看 Additional repositories 部分,并注意 AppStream 复选框是否默认被选中。
BaseOS 和 AppStream 存储库作为完整安装镜像的一部分被安装。如果您需要完整的 Red Hat Enterprise Linux 8 安装,请不要禁用 AppStream 软件仓库复选框。
- 可选:选择 Red Hat CDN 选项注册您的系统,附加 RHEL 订阅,并从 Red Hat Content Delivery Network(CDN)安装 RHEL。
可选:选择 On the network 选项,来从网络位置而不是本地介质下载和安装软件包。这个选项仅在网络连接活跃时可用。有关如何在 GUI 中配置网络连接的信息,请参阅 配置网络和主机名选项。
注意如果您不想从网络位置下载并安装其它软件仓库,请执行 配置软件选择。
- 选择 On the network 下拉菜单指定下载软件包的协议。这个设置取决于您要使用的服务器。
-
在地址字段输入服务器地址(不包括协议)。如果您选择 NFS,则会出现第二个输入字段,您可以在其中指定自定义 NFS 挂载选项。此字段接受您系统上
nfs (5)手册页中列出的选项。 在选择 NFS 安装源时,使用冒号(
:)字符指定地址,来将主机名与路径分开。例如,server.example.com:/path/to/directory。以下步骤是可选的,且只在您使用代理进行网络访问时才需要。
- 点 来为 HTTP 或 HTTPS 源配置代理。
- 选择启用 HTTP 代理服务器 复选框,然后在 Proxy Host 字段输入 URL。
- 如果代理服务器需要身份验证,选择 Use Authentication 选项。
- 输入您的用户名和密码。
点击 完成配置并退出 Proxy Setup… 对话框。
注意如果您的 HTTP 或 HTTPS URL 指向存储库镜像,请从 URL type 下拉列表中选择所需的选项。完成源配置后,所有环境和附加软件包都可以被选择。
- 点击 添加存储库。
- 点击 删除库。
- 在打开 Installation Source 窗口时,单击 图标将当前条目恢复回设置。
若要激活或停用存储库,请单击列表中每个条目的 Enabled 列中的复选框。
您可以使用与网络上的主存储库相同的方法命名和配置额外的存储库。
- 点击 按钮应用该设置并返回 安装概述 窗口。
6.12. 可选:配置 Kdump 内核崩溃转储机制 复制链接链接已复制到粘贴板!
Kdump 是内核崩溃转储机制。系统崩溃时,Kdump 会在故障时捕获系统内存内容。可以对捕获的内存进行分析,以找出造成崩溃的原因。如果启用了 Kdump,则需要为其自身保留一小部分系统内存(RAM)。主内核无法访问预留内存。
流程
- 在 安装概述 窗口中点击 Kdump。此时会打开 Kdump 窗口。
- 选择 启用 kdump 复选框。
- 选择 Automatic 或 Manual 设置内存保留。
- 如果选择 Manual,请使用 + 和 - 按钮在Memory to be reserved 字段中输入您要保留的内存量(以 MB 为单位)。保留输入字段下的 Usable System Memory 读数显示保留所选 RAM 量后有多少内存可供主系统访问。
- 点击 来应用设置并返回到图形安装。
您保留的内存量由您的系统架构(AMD64 和 Intel 64 与 IBM Power 有不同的要求)以及系统内存总量决定。在大多数情况下,可以使用自动保留。
其他设置,如保存内核崩溃转储的位置,只能在安装后使用 system-config-kdump 图形界面进行配置,或者在 /etc/kdump.conf 配置文件中手动配置。
6.13. 可选:选择安全配置集 复制链接链接已复制到粘贴板!
您可以在 Red Hat Enterprise Linux 8 安装过程中应用安全策略,并将其配置为在第一次引导前在系统上使用。
6.13.1. 关于安全策略 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 包括 OpenSCAP 套件,以便自动配置系统与特定安全策略保持一致。该策略使用安全内容自动化协议(SCAP)标准实施。这些软件包包括在 AppStream 存储库中。但是,默认情况下,安装和安装后进程不会强制任何策略,因此不会涉及任何检查,除非进行了特别配置。
应用安全策略不是安装程序的强制功能。如果您对系统应用了一个安全策略,则会使用您选择的配置文件中定义的限制来安装它。openscap-scanner 和 scap-security-guide 软件包会添加到您的软件包选择,为合规和漏洞扫描提供预安装工具。
当您选择安全策略时,Anaconda GUI 安装程序需要进行配置以符合该策略的要求。可能会有冲突的软件包选择,以及定义的独立分区。只有在满足所有要求后,就可以开始安装。
在安装过程结束时,所选的 OpenSCAP 安全策略会自动强化系统,并扫描系统以验证合规性,将扫描结果保存到已安装系统上的 /root/openscap_data 目录中。
默认情况下,安装程序使用安装镜像中捆绑的 scap-security-guide 软件包的内容。您还可以从 HTTP、HTTPS 或者 FTP 服务器载入外部内容。
6.13.2. 配置一个安全配置文件 复制链接链接已复制到粘贴板!
您可以从 Installation Summary 窗口配置安全策略。
先决条件
- 打开 Installation Summary 窗口。
流程
- 在 Installation Summary 窗口中点击 Security Profile。此时会打开 Security Profile 窗口。
- 要在系统中启用安全策略,将Apply security policy 切换为 ON。
- 从上面的方框中选择一个配置集。
点击 。
安装前必须应用的配置集的更改出现在底部方框中。
点击 使用自定义配置集。
此时会打开 一 个单独的窗口,允许您输入一个有效安全内容的 URL。
点击 以检索 URL。
您可以从 HTTP、HTTPS 或者 FTP 服务器载入自定义配置集。使用包括协议内容的完整地址,比如 http://。在载入自定义配置集前必须激活网络连接。安装程序自动检测内容类型。
- 点 返回到 Security Profile 窗口。
- 点击 按钮应用该设置并返回 安装概述 窗口。
6.13.3. 配置文件与 Server with GUI 不兼容 复制链接链接已复制到粘贴板!
作为 SCAP 安全指南 的一部分提供的某些安全配置文件与 Server with GUI 基本环境中包含的扩展软件包集合不兼容。因此,在安装与以下配置文件兼容的系统时,不要选择 Server with GUI :
| 配置文件名称 | 配置文件 ID | 原因 | 备注 |
|---|---|---|---|
| CIS Red Hat Enterprise Linux 8 基准第 2 级 - 服务器 |
|
软件包 | |
| CIS Red Hat Enterprise Linux 8 基准第 1 级 - 服务器 |
|
软件包 | |
| 非联邦信息系统和组织中的非保密信息(NIST 800-171) |
|
| |
| 常规目的操作系统的保护配置文件 |
|
| |
| Red Hat Enterprise Linux 8 的 DISA STIG |
|
软件包 | 要将 RHEL 系统安装为与 RHEL 8.4 及之后版本中的 DISA STIG 一致的 Server with GUI,您可以使用 DISA STIG with GUI 配置文件。 |
6.13.4. 使用 Kickstart 部署符合基准的 RHEL 系统 复制链接链接已复制到粘贴板!
您可以部署与特定基准一致的 RHEL 系统。这个示例为常规目的操作系统(OSPP)使用保护配置集。
先决条件
-
scap-security-guide软件包已安装在 RHEL 8 系统上。
流程
-
在您选择的编辑器中打开
/usr/share/scap-security-guide/kickstart/ssg-rhel8-ospp-ks.cfgKickstart 文件。 -
更新分区方案以符合您的配置要求。为了遵守 OSPP ,必须保留
/boot、/home、/var、/tmp、/var/log、/var/tmp和/var/log/audit的独立分区,您只能更改分区的大小。 - 按照 使用 Kickstart 执行自动安装 中所述来开始 Kickstart 安装。
对于 OSPP 的要求,无法检查 Kickstart 文件中的密码。
验证
要在安装完成后检查系统当前的状态,请重启系统并启动新的扫描:
oscap xccdf eval --profile ospp --report eval_postinstall_report.html /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml
# oscap xccdf eval --profile ospp --report eval_postinstall_report.html /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 7 章 更改订阅服务 复制链接链接已复制到粘贴板!
要管理订阅,您可以在 Red Hat Subscription Management Server 或者 Red Hat Satellite Server 中注册 RHEL 系统。如果需要,可以稍后更改订阅服务。要更改您注册的订阅服务,请从当前服务中取消注册该系统,然后使用新服务进行注册。
要接收系统更新,请使用任一管理服务器注册您的系统。
本节介绍了如何从 Red Hat Subscription Management Server 和 Red Hat Satellite Server 中取消注册 RHEL 系统。
先决条件
使用以下方法注册了您的系统:它包括以下之 一 :
- Red Hat Subscription Management Server
- Red Hat Satellite Server version 6.11
要接收系统更新,请使用任一管理服务器注册您的系统。
7.1. 从 Subscription Management Server 中取消注册。 复制链接链接已复制到粘贴板!
本节介绍如何使用命令行和 Subscription Manager 用户界面从 Red Hat Subscription Management Server 取消注册 RHEL 系统。
7.1.1. 使用命令行取消注册 复制链接链接已复制到粘贴板!
使用 unregister 命令从 Red Hat Subscription Management Server 取消注册 RHEL 系统。
流程
作为 root 用户运行 unregister 命令,无需任何附加参数。
subscription-manager unregister
# subscription-manager unregisterCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 提示时请提供 root 密码。
在 Subscription Management Server 中取消注册该系统,状态会显示"系统当前没有注册"信息,且 按钮可用。
要继续不间断的服务,请使用任一管理服务重新注册系统。如果您没有使用管理服务注册系统,您可能无法收到系统更新。有关注册系统的更多信息,请参阅 使用命令行注册您的系统。
7.1.2. 使用 Subscription Manager 用户界面取消注册 复制链接链接已复制到粘贴板!
您可以使用 Subscription Manager 用户界面从 Red Hat Subscription Management Server 中取消 RHEL 系统的注册。
流程
- 登录到您的系统。
- 从窗口的左上方点击 Activities。
- 在菜单选项中点显示应用程序图标。
- 点 Red Hat Subscription Manager 图标,或使用 Red Hat Subscription Manager 进行搜索。
在 Authentication Required 对话框中输入管理员密码。Subscriptions 窗口会出现并显示订阅、系统目的和已安装产品的当前状态。未注册的产品会显示红色 X。
需要进行身份验证才能在系统上执行特权任务。
- 点 按钮。
在 Subscription Management Server 中取消注册该系统,状态会显示"系统当前没有注册"信息,且 按钮可用。
要继续不间断的服务,请使用任一管理服务重新注册系统。如果您没有使用管理服务注册系统,您可能无法收到系统更新。有关注册系统的更多信息,请参阅 使用 Subscription Manager 用户界面注册您的系统。
7.2. 在 Satellite 服务器中取消注册 复制链接链接已复制到粘贴板!
要从 Satellite 服务器中取消 Red Hat Enterprise Linux 系统注册,从 Satellite 服务器中删除该系统。
如需更多信息,请参阅 从 Red Hat Satellite 中删除主机。
第 8 章 准备一个启用了 UEFI 安全引导的系统来安装和引导 RHEL Beta 版本 复制链接链接已复制到粘贴板!
要增强操作系统的安全性,在启用了 UEFI 安全引导的系统上引导 Red Hat Enterprise Linux Beta 版本时,对签名验证使用 UEFI 安全引导特性。
8.1. UEFI 安全引导和 RHEL Beta 版本 复制链接链接已复制到粘贴板!
UEFI 安全引导要求操作系统内核使用可识别的私钥进行签名。UEFI 安全引导然后使用对应的公钥验证签名。
对于 Red Hat Enterprise Linux Beta 版,内核使用特定于红帽 Beta 的私钥进行签名。UEFI 安全引导尝试使用对应的公钥验证签名,但由于硬件无法识别 Beta 私钥,因此 Red Hat Enterprise Linux Beta 版本系统无法引导。因此,要在 Beta 版本中使用 UEFI 安全引导,请使用 Machine Owner Key (MOK) 功能将红帽 Beta 公钥添加到您的系统中。
8.2. 为 UEFI 安全引导添加 Beta 公钥 复制链接链接已复制到粘贴板!
本节介绍如何为 UEFI 安全引导添加 Red Hat Enterprise Linux Beta 公钥。
先决条件
- UEFI 安全引导已在系统中禁用。
- 已安装 Red Hat Enterprise Linux Beta 版本,即使系统重启,安全引导也会被禁用。
- 您已登录到系统,Initial Setup 窗口中的任务已完成。
流程
开始将红帽 Beta 公钥注册到系统机器所有者密钥 (MOK) 列表中:
mokutil --import /usr/share/doc/kernel-keys/$(uname -r)/kernel-signing-ca.cer
# mokutil --import /usr/share/doc/kernel-keys/$(uname -r)/kernel-signing-ca.cerCopy to Clipboard Copied! Toggle word wrap Toggle overflow $(uname -r)替换为内核版本 - 例如: 4.18.0-80.el8.x86_64。- 出现提示时输入密码。
- 重新启动系统并按任意键继续启动。Shim UEFI 密钥管理实用程序在系统启动期间启动。
- 选择 Enroll MOK。
- 选择 Continue。
- 选 Yes 并输入密码。密钥导入到系统的固件中。
- 选择 Reboot。
- 在系统上启用安全引导。
8.3. 删除 Beta 公钥 复制链接链接已复制到粘贴板!
如果您计划删除 Red Hat Enterprise Linux Beta 版本,并安装 Red Hat Enterprise Linux 正式发行版本 (GA) 或一个不同的操作系统,请删除 Beta 公钥。
这个步骤描述了如何删除 Beta 公钥。
流程
开始从系统的 Machine Owner Key (MOK) 列表中删除 Red Hat Beta 公钥:
mokutil --reset
# mokutil --resetCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 出现提示时输入密码。
- 重新启动系统并按任意键继续启动。Shim UEFI 密钥管理实用程序在系统启动期间启动。
- 选择 Reset MOK。
- 选择 Continue。
- 选择 Yes,并输入在第 2 步中指定的密码。密钥已从系统的固件中删除。
- 选择 Reboot。
附录 A. 引导选项参考 复制链接链接已复制到粘贴板!
您可以使用引导选项修改安装程序的默认行为。
A.1. 安装源引导选项 复制链接链接已复制到粘贴板!
这部分论述了各种安装源引导选项。
- inst.repo=
inst.repo=引导选项用来指定安装源,即提供软件包存储库的位置以及描述它们的有效.treeinfo文件。例如:inst.repo=cdrom。inst.repo=选项的目标必须是以下安装介质之一 :-
一个可安装的树,它是一个目录结构,包含了安装程序镜像、软件包和存储库数据的目录结构,以及一个有效的
.treeinfo文件。 - 一个 DVD(系统 DVD 驱动器中有物理磁盘)
完整的 Red Hat Enterprise Linux 安装 DVD 的 ISO 镜像放在磁盘或者系统可访问的网络位置上。
使用
inst.repo=引导选项使用不同的格式配置不同的安装方法。下表包含inst.repo=引导选项语法的详情:Expand 表 A.1. inst.repo= 引导选项和安装源的类型和格式 源类型 引导选项格式 源格式 CD/DVD 驱动器
inst.repo=cdrom:<device>将 DVD 作为物理磁盘安装。 [a]
可挂载设备(HDD 和 USB 盘)
inst.repo=hd:<device>:/<path>安装 DVD 的镜像文件。
NFS 服务器
inst.repo=nfs:[options:]<server>:/<path>DVD 或安装树的镜像文件,这是安装 DVD 中的目录和文件的完整副本。 [b]
HTTP 服务器
inst.repo=http://<host>/<path>安装树是安装 DVD 上目录和文件的完整副本。
HTTPS 服务器
inst.repo=https://<host>/<path>FTP 服务器
inst.repo=ftp://<username>:<password>@<host>/<path>HMC
inst.repo=hmc[a] 如果禁用了设备,安装程序会自动搜索包含安装 DVD 的驱动器。
-
一个可安装的树,它是一个目录结构,包含了安装程序镜像、软件包和存储库数据的目录结构,以及一个有效的
使用以下格式设定磁盘设备名称:
-
内核设备名称,例如
/dev/sda1或者sdb2 -
文件系统标签,如
LABEL=Flash或LABEL=RHEL8 -
文件系统 UUID,如
UUID=8176c7bf-04ff-403a-a832-9557f94e61db
非字母数字字符必须使用 \xNN 表示,其中 NN 是字符对应的十六进制代码。例如: \x20 是一个空格 (" ")。
- inst.addrepo=
使用
inst.addrepo=引导选项添加一个额外的存储库,该存储库可用作另一个安装源和主存储库(inst.repo=)。您可以在一次引导过程中多次使用inst.addrepo=引导选项。下表包含inst.addrepo=引导选项语法的详情。注意REPO_NAME是该程序库的名称,它是安装过程中必需的。这些软件仓库仅在安装过程中使用,它们不会在安装的系统中安装。
有关统一的 ISO 的更多信息,请参阅 统一的 ISO。
| 安装源 | 引导选项格式 | 附加信息 |
|---|---|---|
| 在 URL 中可安装的树 |
| 在给定 URL 中查找可安装的树。 |
| NFS 路径中的可安装树 |
|
在给定的 NFS 路径中查找可安装的树。主机后需要一个冒号。安装程序将 |
| 安装环境中的可安装树 |
|
在安装环境中的给定位置查找可安装的树。要使用这个选项,必须在安装程序尝试载入可用软件组前挂载该程序库。这个选项的好处是,您可以在一个可引导 ISO 上有多个库,您还可以从 ISO 安装主存储库和其他软件仓库。到额外软件仓库的路径为 |
| 磁盘 |
| 挂载给定的 <device> 分区并从由 <path> 指定的 ISO 中安装。如果没有指定 <path>,安装程序会在 <device> 中查找有效安装 ISO。这个安装方法需要一个含有有效可安装树的 ISO。 |
- inst.stage2=
inst.stage2=引导选项指定安装程序运行时镜像的位置。这个选项需要包含有效的.treeinfo文件的目录的路径,并从.treeinfo文件中读取运行时镜像位置。如果.treeinfo文件不可用,安装程序会尝试从images/install.img中载入该镜像。当您没有指定
inst.stage2选项时,安装程序会尝试使用inst.repo选项指定的位置。当您稍后在安装程序中手动指定安装源时,请使用这个选项。例如,当您要选择 Content Delivery Network (CDN) 作为安装源时。安装 DVD 和引导 ISO 已经包含一个合适的
inst.stage2选项,来从相应的 ISO 引导安装程序。如果要指定安装源,请使用
inst.repo=选项。注意默认情况下,在安装介质中使用
inst.stage2=引导选项,并被设置特定的标签 ; 例如:inst.stage2=hd:LABEL=RHEL-x-0-0-BaseOS-x86_64。如果您修改了包含运行时镜像的文件系统的默认标签,或者使用自定义流程引导安装系统,请验证inst.stage2=引导选项是否已被设置为正确的值。- inst.noverifyssl
使用
inst.noverifyssl引导选项防止安装程序为所有 HTTPS 连接验证 SSL 证书,但附加 Kickstart 软件仓库除外,其中--noverifyssl可为每个存储库设置。例如:如果您的远程安装源使用自签名 SSL 证书,
inst.noverifyssl引导选项可让安装程序在不验证 SSL 证书的情况下完成安装。使用
inst.stage2=指定源时的示例inst.stage2=https://hostname/path_to_install_image/ inst.noverifyssl
inst.stage2=https://hostname/path_to_install_image/ inst.noverifysslCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
inst.repo=指定源时的示例inst.repo=https://hostname/path_to_install_repository/ inst.noverifyssl
inst.repo=https://hostname/path_to_install_repository/ inst.noverifysslCopy to Clipboard Copied! Toggle word wrap Toggle overflow - inst.stage2.all
使用
inst.stage2.all引导选项来指定几个 HTTP、HTTPS 或者 FTP 源。您可以多次使用inst.stage2=引导选项,同时使用inst.stage2.all选项按顺序从源获取镜像,直到成功为止。例如:inst.stage2.all inst.stage2=http://hostname1/path_to_install_tree/ inst.stage2=http://hostname2/path_to_install_tree/ inst.stage2=http://hostname3/path_to_install_tree/
inst.stage2.all inst.stage2=http://hostname1/path_to_install_tree/ inst.stage2=http://hostname2/path_to_install_tree/ inst.stage2=http://hostname3/path_to_install_tree/Copy to Clipboard Copied! Toggle word wrap Toggle overflow - inst.dd=
-
inst.dd=引导选项在安装过程中用来执行驱动程序更新。有关如何在安装过程中更新驱动程序的更多信息,请参阅 在安装过程中更新驱动程序。 - inst.repo=hmc
这个选项消除了外部网络设置的要求并扩展安装选项。当使用二进制 DVD 引导时,安装程序会提示您输入附加内核参数。要将 DVD 设置为安装源,请在内核参数中附加
inst.repo=hmc选项。然后安装程序启用支持元素(SE)和硬件管理控制台(HMC)文件访问,从 DVD 中获取 stage2 的镜像,并提供对 DVD 上软件包的访问以供软件选择。重要要使用
inst.repo引导选项,请确保用户配置了 最小 Privilege Class B。有关用户配置的更多信息,请参阅 IBM 文档。- proxy=
当从 HTTP、HTTPS 和 FTP 协议执行安装时使用这个引导选项。例如:
[PROTOCOL://][USERNAME[:PASSWORD]@]HOST[:PORT]
[PROTOCOL://][USERNAME[:PASSWORD]@]HOST[:PORT]Copy to Clipboard Copied! Toggle word wrap Toggle overflow - inst.nosave=
使用
inst.nosave=引导选项控制安装日志以及没有保存到安装的系统中的相关文件,如input_ks、output_ks、all_ks、logs和all。您可以以逗号分隔的方式组合多个值。例如,inst.nosave=Input_ks,logs
inst.nosave=Input_ks,logsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意inst.nosave引导选项用于排除安装系统中无法被 Kickstart %post 脚本删除的文件,如日志和输入/输出 Kickstart 结果。input_ks- 禁用保存输入 Kickstart 结果的功能。
output_ks- 禁用保存安装程序生成的 Kickstart 结果的功能。
all_ks- 禁用保存输入和输出 Kickstart 结果的功能。
日志- 禁用保存所有安装日志的功能。
all- 禁用保存所有 Kickstart 结果以及所有日志的功能。
- inst.multilib
-
使用
inst.multilib引导选项将 DNF 的multilib_policy设置为 all,而不是 best。 - inst.memcheck
-
inst.memcheck引导选项执行检查来验证系统是否有足够 RAM 来完成安装。如果没有足够的 RAM,安装过程将停止。系统检查不是完全准确的,在安装过程中的内存用量要根据软件包的选择、用户界面(如图形或文本)和其它参数而定。 - inst.nomemcheck
-
inst.nomemcheck引导选项不会执行检查来验证系统是否有足够 RAM 完成安装。任何小于最小内存量的安装都不支持,并可能导致安装过程失败。
A.2. 网络引导选项 复制链接链接已复制到粘贴板!
如果您的场景需要通过网络从镜像引导,而不是从本地镜像引导,您可以使用以下选项来自定义网络引导。
使用 dracut 工具初始化网络。有关 dracut 选项的完整列表,请查看您系统上的 dracut.cmdline (7) 手册页。
- ip=
使用
ip=引导选项配置一个或多个网络接口。要配置多个接口,请使用以下方法之一;-
多次使用
ip选项,每个接口一次; 为此,请使用rd.neednet=1选项,并使用bootdev选项指定一个主引导接口。 -
使用
ip选项一次,然后使用 Kickstart 设置其他接口。这个选项接受几种不同的格式。下表包含大多数常用选项的信息。
-
多次使用
在以下表格中:
-
ip参数指定客户端 IP 地址,IPv6需要方括号,如 192.0.2.1 或 [2001:db8::99]。 -
gateway参数是默认网关。IPv6需要方括号。 -
netmask参数是要使用的子网掩码。这可以是完整子网掩码(例如: 255.255.255.0),或是一个前缀(例如 64)。 hostname参数是客户端系统的主机名。这个参数是可选的。Expand 表 A.3. 配置网络接口的引导选项格式 引导选项格式 配置方法 ip=method自动配置任意接口
ip=interface:method自动配置特定的接口
ip=ip::gateway:netmask:hostname:interface:none静态配置,例如 IPv4:
ip=192.0.2.1::192.0.2.254:255.255.255.0:server.example.com:enp1s0:noneIPv6:
ip=[2001:db8::1]::[2001:db8::fffe]:64:server.example.com:enp1s0:noneip=ip::gateway:netmask:hostname:interface:method:mtu自动配置特定接口并进行覆盖
自动接口的配置方法
带有覆盖的特定接口的自动配置方法使用自动配置的指定方法(如dhcp)打开接口,但会覆盖自动获得的 IP 地址、网关、子网掩码、主机名或其他指定的参数。所有参数都是可选的,因此仅指定您要覆盖的参数。method参数可以是以下任意一个:- DHCP
-
dhcp - IPv6 DHCP
-
dhcp6 - IPv6 自动配置
-
auto6 - iSCSI Boot Firmware Table (iBFT)
-
ibft
注意-
如果您使用需要网络访问的引导选项,如
inst.ks=http://host/path,但没有指定ip选项,则ip选项的默认值是ip=dhcp。 -
要自动连接到 iSCSI 目标,请使用
ip=ibft引导选项激活访问目标的网络设备。
- nameserver=
nameserver=选项指定名称服务器的地址。您可以多次使用这个选项。注意ip=参数需要方括号。但是 IPv6 地址不能使用方括号。IPv6 地址使用的正确语法示例为nameserver= 2001:db8::1。- bootdev=
-
bootdev=选项指定引导接口。如果您使用多个ip选项,则这个选项是必须的。 - ifname=
ifname=选项为具有给定 MAC 地址的网络设备分配接口名称。您可以多次使用这个选项。语法是ifname=interface:MAC。例如:ifname=eth0:01:23:45:67:89:ab
ifname=eth0:01:23:45:67:89:abCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意ifname=选项是在安装过程中设置自定义网络接口的唯一方法。- inst.dhcpclass=
-
inst.dhcpclass=选项指定 DHCP 厂商级识别符。dhcpd服务将此值识别为vendor-class-identifier。默认值为anaconda-$(uname -srm)。要确保inst.dhcpclass=选项被正确应用,请在安装过程的早期阶段通过添加ip选项来请求网络激活。 - inst.waitfornet=
-
使用
inst.waitfornet=SECONDS引导选项可导致安装系统在安装前等待网络连接。SECONDS参数中给出的值指定在超时和继续安装过程(即使网络连接不存在)前等待网络连接的最长时间。 - vlan=
使用
vlan=选项来在具有给定名称的指定接口上配置虚拟 LAN(VLAN)设备。语法为vlan=name:interface。例如:vlan=vlan5:enp0s1
vlan=vlan5:enp0s1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会在
enp0s1接口上配置一个名为vlan5的 VLAN 设备。名称可采用以下格式:
-
VLAN_PLUS_VID:
vlan0005 -
VLAN_PLUS_VID_NO_PAD:
vlan5 -
DEV_PLUS_VID:
enp0s1.0005 DEV_PLUS_VID_NO_PAD:
enp0s1.5- bond=
使用
bond=选项来配置绑定设备,语法如下:bond=name[:interfaces][:options]。使用绑定设备名称替换 name,使用以逗号分隔的物理(以太网)接口列表替换 interfaces,并使用以逗号分隔的绑定选项列表替换 options。例如:bond=bond0:enp0s1,enp0s2:mode=active-backup,tx_queues=32,downdelay=5000
bond=bond0:enp0s1,enp0s2:mode=active-backup,tx_queues=32,downdelay=5000Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关可用选项的列表,请执行
modinfo绑定命令。- team=
使用
team=选项来配置团队设备,语法如下:team=name:interfaces。使用所需团队设备替换 name,使用要用作团队设备中底层接口的、以逗号分隔的物理(以太网)设备列表替换 interfaces。例如:team=team0:enp0s1,enp0s2
team=team0:enp0s1,enp0s2Copy to Clipboard Copied! Toggle word wrap Toggle overflow - bridge=
使用
bridge=选项来配置网桥设备,语法如下:bridge=name:interfaces。使用所需的网桥设备名称替换 name,使用要用作网桥设备中底层接口的、以逗号分隔的物理(以太网)设备列表替换 interfaces。例如:bridge=bridge0:enp0s1,enp0s2
bridge=bridge0:enp0s1,enp0s2Copy to Clipboard Copied! Toggle word wrap Toggle overflow
A.3. 控制台引导选项 复制链接链接已复制到粘贴板!
这部分论述了如何为控制台、显示器显示和键盘配置引导选项。
- console=
-
使用
console=选项指定您要用作主控制台的设备。例如,若要在第一个串行端口上使用控制台,可使用console=ttyS0。在使用console=参数时,安装以文本 UI 开始。如果必须多次使用console=选项,则引导信息会在所有指定的控制台上显示。但是,安装程序只使用最后指定的控制台。例如: 如果您指定了console=ttyS0 console=ttyS1,安装程序将使用ttyS1。 - inst.lang=
-
使用
inst.lang=选项设定要在安装中使用的语言。要查看区域设置的列表,请输入命令locale -a | grep _或localectl list-locales | grep _命令。 - inst.singlelang
-
使用
inst.singlelang选项以单一语言模式安装,这会导致安装语言和语言支持配置没有可用的互动选项。如果使用inst.lang引导选项或langKickstart 命令指定语言,则会使用它。如果没有指定语言,安装程序默认为en_US.UTF-8。 - inst.geoloc=
使用
inst.geoloc=选项在安装程序中配置地理位置的使用。地理位置用于预先设置语言和时区,并使用以下语法:inst.geoloc=value。值可以是以下参数:-
禁用地理位置:
inst.geoloc=0 -
使用 Fedora GeoIP API:
inst.geoloc=provider_fedora_geoip。 使用 Hostip.info GeoIP API:
inst.geoloc=provider_hostip。如果您没有指定
inst.geoloc=选项,则默认选项是provider_fedora_geoip。
-
禁用地理位置:
- inst.keymap=
-
使用
inst.keymap=选项指定用于安装的键盘布局。 - inst.cmdline
-
使用
inst.cmdline选项强制安装程序在命令行模式下运行。这个模式不允许任何互动,且您必须在 Kickstart 文件或者命令行中指定所有选项。 - inst.graphical
-
使用
inst.graphical选项强制安装程序在图形模式下运行。图形模式是默认设置。 - inst.text
-
使用
inst.text选项强制安装程序在文本模式而不是图形模式中运行。 - inst.noninteractive
-
使用
inst.noninteractive引导选项以非互动模式运行安装程序。在非互动模式下不允许用户互动inst.noninteractive,您可以在图形或文本安装中使用inst.nointeractive选项。当您在文本模式下使用inst.noninteractive选项时,它的行为与inst.cmdline选项一样。 - inst.resolution=
-
使用
inst.resolution=选项指定图形模式中的页面分辨率。格式为NxM,其中 N 是屏幕宽度,M 是屏幕高度(单位为像素)。推荐的分辨率为 1024x768。 - inst.vnc
-
使用
inst.vnc选项,使用虚拟网络计算(VNC)来运行图形安装。您必须使用 VNC 客户端应用程序与安装程序交互。启用 VNC 共享时,可以连接多个客户端。在文本模式中安装使用 VNC 启动的系统。 - inst.vncpassword=
-
使用
inst.vncpassword=选项在 VNC 服务器中设定安装程序使用的密码。 - inst.vncconnect=
-
使用
inst.vncconnect=选项连接到给定主机位置处的侦听 VNC 客户端,例如:inst.vncconnect=<host>[:<port>],默认端口为 5900。您可以通过输入vncviewer -listen命令来使用此选项。 - inst.xdriver=
-
使用
inst.xdriver=选项指定在安装过程中和在安装的系统上使用的 X 驱动程序名称。 - inst.usefbx
-
使用
inst.usefbx选项提示安装程序使用帧缓冲 X 驱动程序,而不是具体硬件驱动程序。这个选项等同于inst.xdriver=fbdev选项。 - modprobe.blacklist=
使用
modprobe.blacklist=选项阻止列表或完全禁用一个或多个驱动程序。安装启动时,使用这个选项禁用的驱动程序(模式)无法加载。安装完成后,安装的系统会保持这些设置。您可以在/etc/modprobe.d/目录中找到 blocklisted 驱动程序的列表。使用以逗号分隔的列表禁用多个驱动程序。例如:modprobe.blacklist=ahci,firewire_ohci
modprobe.blacklist=ahci,firewire_ohciCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您可以将
modprobe.blacklist与不同的命令行选项结合使用。例如,将其与inst.dd选项一起使用,以确保从驱动程序更新磁盘加载现有驱动程序的更新版本:modprobe.blacklist=virtio_blk
modprobe.blacklist=virtio_blkCopy to Clipboard Copied! Toggle word wrap Toggle overflow - inst.xtimeout=
-
使用
inst.xtimeout=选项指定启动 X 服务器的时间(以秒为单位)。 - inst.sshd
使用
inst.sshd选项在安装过程中启动sshd服务,以便您可以在安装过程中使用 SSH 连接到该系统,并监控安装进程。有关 SSH 的详情,请查看您系统上的ssh (1)手册页。默认情况下,sshd选项只在 64 位 IBM Z 构架上自动启动。在其它构架中,除非您使用inst.sshd选项,否则不会启动sshd。注意在安装过程中,root 帐户默认没有密码。您可在安装过程中使用
sshpwKickstart 命令设定根密码。- inst.kdump_addon=
-
使用
inst.kdump_addon=选项启用或者禁用安装程序中的 Kdump 配置页面(附加组件)。这个屏幕默认是启用的;使用inst.kdump_addon=off禁用它。禁用该附加组件可在图形和文本界面以及%addon com_redhat_kdumpKickstart 命令中禁用 Kdump 页面。
A.4. 调试引导选项 复制链接链接已复制到粘贴板!
本节论述了在调试问题时可以使用的选项。
- inst.rescue
-
使用
inst.rescue选项运行救援环境,以诊断和修复系统。如需更多信息,请参阅红帽知识库解决方案 在救援模式下修复文件系统。 - inst.updates=
使用
inst.updates=选项指定您要在安装过程中应用的updates.img文件的位置。updates.img文件可以从多个源中派生出来。Expand 表 A.4. updates.img 文件源 源 描述 示例 从网络更新
指定
updates.img的网络位置。这不需要对安装树进行任何修改。要使用这个方法,请编辑内核命令行使其包含inst.updates。inst.updates=http://website.com/path/to/updates.img.从磁盘镜像更新
在软盘或者 USB 密钥上保存
updates.img。这只适用于updates.img的ext2文件系统类型。要在软盘驱动器中保存镜像内容,请插入软盘并运行命令。dd if=updates.img of=/dev/fd0 bs=72k count=20。要使用 USB 密钥或闪存介质,请使用 USB 闪存驱动器的设备名称替换/dev/fd0。安装树中的更新
如果您使用 CD、磁盘、HTTP 或者 FTP 安装,请在安装树中保存
updates.img,以便所有安装都可以检测到.img文件。文件名必须是updates.img。对于 NFS 安装,将文件保存在
images/目录中,或保存在RHupdates/目录中。- inst.loglevel=
使用
inst.loglevel=选项指定终端日志信息的最低级别。这个选项只适用于终端日志记录 ; 日志文件总是包含所有级别的信息。这个选项的可能值从最低级到最高级为:-
debug -
info -
warning -
错误 -
critical
-
默认值为 info,就是说默认情况下,日志记录终端会显示从 info 级别到 critical 级别范围的信息。
- inst.syslog=
-
安装开始时,将日志消息发送给指定主机上的
syslog进程。只有在远程syslog进程配置为接受进入的连接时,才可以使用inst.syslog=。 - inst.virtiolog=
-
使用
inst.virtiolog=选项指定使用哪个 virtio 端口(一个位于/dev/virtio-ports/name的字符设备)来转发日志。默认值为org.fedoraproject.anaconda.log.0。 - inst.zram=
控制在安装过程中 zRAM swap 的使用。选项在系统 RAM 中创建一个压缩的块设备,并将其用于 swap 空间,而不是使用磁盘。这个设置可让安装程序使用较少的可用内存运行,并改进安装速度。您可以使用以下值配置
inst.zram=选项:- inst.zram=1 启用 zRAM swap,无论系统内存大小如何。默认情况下,在内存为 2 GiB 或更少的系统上启用 zRAM 上的 swap。
- inst.zram=0 禁用 zRAM swap,无论系统内存大小如何。默认情况下,在超过 2 GiB 内存的系统上禁用 zRAM 上的 swap。
- rd.live.ram
-
将
images/install.img中的stage 2镜像复制到 RAM 中。请注意,这会增加安装镜像所需的内存,镜像的大小通常介于 400 到 800MB 之间。 - inst.nokill
- 当发生致命错误或安装过程结束时,防止安装程序重新启动。使用它捕获重启后可能丢失的安装日志。
- inst.noshell
- 在安装过程中防止终端会话 2(tty2)上的 shell。
- inst.notmux
- 防止在安装过程中使用 tmux。输出在没有终端控制字符的情况下生成,用于非互动性。
- inst.remotelog=
-
使用 TCP 连接将所有日志发送到远程
host:port。如果没有监听程序而安装正常进行,则该连接将会停用。
A.5. 存储启动选项 复制链接链接已复制到粘贴板!
这部分论述了您可以指定用来定制从存储设备引导的选项。
- inst.nodmraid
-
禁用
dmraid支持。
请小心使用这个选项。如果您有一个被错误地识别为固件 RAID 阵列一部分的磁盘,则它上面可能有一些过时的 RAID 元数据,这些数据必须使用合适的工具删除,如 dmraid 或 wipefs。
- inst.nompath
- 禁用对多路径设备的支持。只有当您的系统出现误报,错误地将普通块设备识别为多路径设备时,才使用这个选项。
请小心使用这个选项。不要在多路径硬件中使用这个选项。不支持使用这个选项安装到多路径设备的一个路径。
- inst.gpt
-
强制安装程序将分区信息安装到 GUID 分区表(GPT),而不是主引导记录(MBR)。这个选项在基于 UEFI 的系统上无效,除非采用与 BIOS 兼容的模式。通常,基于 BIOS 的系统和基于 UEFI 的系统在兼容模式下尝试使用 MBR 模式来存储分区信息,除非磁盘大小为 2^32 个扇区或大于 2 个扇区。磁盘扇区大小通常是 512 字节,通常相当于 2 TiB。
inst.gpt引导选项允许将 GPT 写到较小的磁盘。 - inst.wait_for_disks=
-
使用
inst.wait_for_disks=选项指定安装程序在安装开始时等待磁盘设备出现的秒数。当您使用OEMDRV-labeled设备自动加载 Kickstart 文件或内核驱动程序时使用这个选项,但设备在引导过程中需要很长时间才出现。默认情况下,安装程序等待5秒。使用0秒来最小化延迟。
A.6. 弃用的引导选项 复制链接链接已复制到粘贴板!
本节包含已弃用的引导选项的信息。安装程序仍然可以接受这些选项,但它们已被弃用,并计划在以后的 Red Hat Enterprise Linux 版本中删除。
- method
-
method选项是inst.repo的别名。 - dns
-
使用
nameserver替代dns。请注意,名称服务器不接受用逗号分开的列表 ; 使用多个名称服务器选项。 - netmask, gateway, hostname
-
netmask、gateway和hostname选项作为ip选项的一部分提供。 - ip=bootif
-
自动使用 PXE 提供的
BOOTIF选项,因此无需使用ip=bootif。 - ksdevice
Expand 表 A.5. ksdevice 引导选项的值 Value 信息 不存在
N/A
ksdevice=link忽略,这个选项与默认行为相同
ksdevice=bootif如果存在
BOOTIF=,则忽略此选项。ksdevice=ibft替换为
ip=ibft。详情请查看ip。ksdevice=<MAC>使用
BOOTIF=${MAC/:/-}替代ksdevice=<DEV>用
bootdev替换
A.7. 删除引导选项 复制链接链接已复制到粘贴板!
这部分包含从 Red Hat Enterprise Linux 中删除的引导选项。
dracut 提供高级引导选项。有关 dracut 的更多信息,请参阅您系统上的 dracut.cmdline (7) 手册页。
- askmethod, asknetwork
-
initramfs是完全非互动的,因此删除了askmethod和asknetwork选项。使用inst.repo或者指定合适的网络选项。 - blacklist, nofirewire
-
modprobe选项现在可以处理阻止列表中的内核模块。使用modprobe.blacklist=<mod1>,<mod2>。您可以使用modprobe.blacklist=firewire_ohci阻止 firewire 模块列表。 - inst.headless=
-
headless=选项指定安装的系统没有任何显示硬件,且安装程序不需要查找任何显示硬件。 - inst.decorated
-
inst.decorated选项用于在解码窗口中指定图形安装。默认情况下,窗口未经过修饰,因此它没有标题栏,调整控制等。这个选项不再需要。 - repo=nfsiso
-
使用
inst.repo=nfs:选项。 - serial
-
使用
console=ttyS0选项。 - updates
-
使用
inst.updates选项。 - essid, wepkey, wpakey
- Dracut 不支持无线网络。
- ethtool
- 这个选项不再需要。
- gdb
-
这个选项已被删除,因为很多选项可用于调试基于 dracut 的
initramfs。 - inst.mediacheck
-
使用
dracut option rd.live.check选项。 - ks=floppy
-
使用
inst.ks=hd:<device>选项。 - 显示
-
对于 UI 的远程显示,使用
inst.vnc选项。 - utf8
- 因为默认 TERM 设置的行为与预期一致,所以不再需要这个选项。
- noipv6
-
IPv6 是内置在内核中,不能被安装程序删除。您可以使用
ipv6.disable=1禁用 ipv6。安装的系统将使用这个设置。 - upgradeany
- 因为安装程序不再处理升级,所以不再需要这个选项。
第 9 章 创建自定义 RHEL 系统镜像 复制链接链接已复制到粘贴板!
9.1. RHEL 镜像构建器描述 复制链接链接已复制到粘贴板!
要部署一个系统,请创建一个系统镜像。要创建 RHEL 系统镜像,请使用 RHEL 镜像构建器工具。您可以使用 RHEL 镜像构建器创建 RHEL 的自定义系统镜像,包括为在云平台上的部署准备的系统镜像。RHEL 镜像构建器自动为每种输出类型处理配置详情,因此比手动创建镜像方法更容易和更快地使用。您可以使用 composer-cli 工具中的命令行或 RHEL web 控制台中的图形用户界面来访问 RHEL 镜像构建器功能。
从 RHEL 8.3 开始,osbuild-composer 后端替换了 lorax-composer。新服务为镜像构建提供 REST API。
9.1.1. RHEL 镜像构建器术语 复制链接链接已复制到粘贴板!
RHEL 镜像构建器使用以下概念:
- 蓝图(Blueprint)
蓝图是自定义系统镜像的描述。它列出了将成为系统一部分的软件包和自定义。您可以使用自定义编辑蓝图,并将其保存为特定版本。当从蓝图创建系统镜像时,镜像与 RHEL 镜像构建器界面中的蓝图相关联。
以 TOML 格式创建蓝图。
- 组合(Compose)
- compose 是基于特定蓝图的特定版本的系统镜像构建。作为一个术语,Compose 代表系统镜像以及来自其创建、输入、元数据和进程本身的日志。
- 自定义(Customizations)
- 自定义是不是软件包的镜像的规格。这包括用户、组和 SSH 密钥。
9.1.2. RHEL 镜像构建器输出格式 复制链接链接已复制到粘贴板!
RHEL 镜像构建器可以以下表中显示的多种输出格式创建镜像。
| 描述 | CLI 名称 | 文件扩展名 |
|---|---|---|
| QEMU 镜像 |
|
|
| 磁盘归档 |
|
|
| Amazon Web Services |
|
|
| Microsoft Azure |
|
|
| Google Cloud Platform |
|
|
| VMware vSphere |
|
|
| VMware vSphere |
|
|
| Openstack |
|
|
| RHEL for Edge Commit |
|
|
| RHEL for Edge 容器 |
|
|
| RHEL for Edge 安装程序 |
|
|
| RHEL for Edge Raw 镜像 |
|
|
| 用于边缘简化安装程序的 RHEL |
|
|
| RHEL for Edge AMI |
|
|
| RHEL for Edge VMDK |
|
|
| RHEL 安装程序 |
|
|
| Oracle 云基础架构 |
|
|
要检查支持的类型,请运行以下命令:
composer-cli compose types
# composer-cli compose types
9.1.3. 镜像构建支持的构架 复制链接链接已复制到粘贴板!
RHEL 镜像构建器支持为以下架构构建镜像:
-
AMD 和 Intel 64 位(
x86_64) -
ARM64 (
aarch64) -
IBM Z (
s390x) - IBM POWER 系统
但是,RHEL 镜像构建器不支持多架构构建。它仅构建其上运行的相同系统架构的镜像。例如,如果 RHEL 镜像构建器在 x86_64 系统上运行,它只能为 x86_64 架构构建镜像。
9.2. 安装 RHEL 镜像构建器 复制链接链接已复制到粘贴板!
RHEL 镜像构建器是一个创建自定义系统镜像的工具。在使用 RHEL 镜像构建器前,您必须安装它。
9.2.1. RHEL 镜像构建器系统要求 复制链接链接已复制到粘贴板!
运行 RHEL 镜像构建器的主机必须满足以下要求:
| 参数 | 最低要求值 |
|---|---|
| 系统类型 | 一个专用的主机或虚拟机。请注意,RHEL 镜像构建器在容器中不支持,包括 Red Hat Universal Base Images (UBI)。 |
| 处理器 | 2 个内核 |
| 内存 | 4 GiB |
| 磁盘空间 | '/var/cache/' 文件系统中有 20 GiB 可用空间 |
| 访问权限 | root |
| 网络 | 到 Red Hat Content Delivery Network (CDN)的互联网连接。 |
如果您没有互联网连接,请在隔离网络中使用 RHEL 镜像构建器。为此,您必须覆盖默认存储库以指向本地存储库,来不连接到 Red Hat Content Delivery Network (CDN)。确保您有内部镜像的内容或使用 Red Hat Satellite。
9.2.2. 安装 RHEL 镜像构建器 复制链接链接已复制到粘贴板!
安装 RHEL 镜像构建器以访问所有 osbuild-composer 软件包功能。
先决条件
- 您已登陆到要在其上安装 RHEL 镜像构建器的 RHEL 主机。
- 主机已订阅到 Red Hat Subscription Manager (RHSM)或 Red Hat Satellite。
-
您已启用了
BaseOS和AppStream存储库,以便能安装 RHEL 镜像构建器软件包。
流程
安装 RHEL 镜像构建器和其他必要的软件包:
yum install osbuild-composer composer-cli cockpit-composer
# yum install osbuild-composer composer-cli cockpit-composerCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
osbuild-composer- 一个构建自定义 RHEL 操作系统镜像的服务。 -
composer-cli- 这个软件包提供对 CLI 界面的访问。 -
cockpit-composer- 这个软件包提供对 Web UI 界面的访问。Web 控制台作为cockpit-composer软件包的依赖项安装。
-
启用并启动 RHEL 镜像构建器套接字:
systemctl enable --now osbuild-composer.socket
# systemctl enable --now osbuild-composer.socketCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果要在 web 控制台中使用 RHEL 镜像构建器,请启用并启动它。
systemctl enable --now cockpit.socket
# systemctl enable --now cockpit.socketCopy to Clipboard Copied! Toggle word wrap Toggle overflow The
osbuild-composer和cockpit服务在第一次访问时自动启动。加载 shell 配置脚本,以便
composer-cli命令的自动完成功能立即开始工作,而无需退出,然后再次登录:source /etc/bash_completion.d/composer-cli
$ source /etc/bash_completion.d/composer-cliCopy to Clipboard Copied! Toggle word wrap Toggle overflow
The osbuild-composer 软件包是新的后端引擎,它将是 Red Hat Enterprise Linux 8.3 及更新的版本开始的所有新功能的首选引擎。之前的 backend lorax-composer 软件包被视为已弃用,将只接受 Red Hat Enterprise Linux 8 生命周期剩余部分的修复,并将在以后的主发行版本中被忽略。建议卸载 lorax-composer, 而是使用 osbuild-composer。
验证
通过运行
composer-cli来验证安装是否正常工作:composer-cli status show
# composer-cli status showCopy to Clipboard Copied! Toggle word wrap Toggle overflow
故障排除
您可以使用系统日志来跟踪 RHEL 镜像构建器活动。此外,您还可以在文件中找到日志消息。
要查找回溯的日志输出,请运行以下命令:
journalctl | grep osbuild
$ journalctl | grep osbuildCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要显示本地 worker,如
osbuild-worker@.service,它是一个可启动多个服务实例的模板服务:journalctl -u osbuild-worker*
$ journalctl -u osbuild-worker*Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示运行的服务:
journalctl -u osbuild-composer.service
$ journalctl -u osbuild-composer.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.2.3. 回到 lorax-composer RHEL 镜像构建器后端 复制链接链接已复制到粘贴板!
The osbuild-composer 后端虽然具有更大的可扩展性,但目前还无法实现与之前的 lorax-composer 后端的功能奇偶校验。
要恢复到以前的后端,请按照以下步骤执行:
先决条件
-
已安装了 the
osbuild-composer软件包
流程
删除 osbuild-composer 后端。
yum remove osbuild-composer yum remove weldr-client
# yum remove osbuild-composer # yum remove weldr-clientCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
/etc/yum.conf 文件中,添加排除条目 forosbuild-composer软件包。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 安装
lorax-composer软件包。yum install lorax-composer composer-cli
# yum install lorax-composer composer-cliCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启用并启动
lorax-composer服务,在每次重启后启动。systemctl enable --now lorax-composer.socket systemctl start lorax-composer
# systemctl enable --now lorax-composer.socket # systemctl start lorax-composerCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3. 使用 RHEL 镜像构建器 CLI 创建系统镜像 复制链接链接已复制到粘贴板!
RHEL 镜像构建器是一个创建自定义系统镜像的工具。要控制 RHEL 镜像构建器并创建自定义系统镜像,您可以使用命令行(CLI)或 Web 控制台界面。
9.3.1. RHEL 镜像构建器命令行界面简介 复制链接链接已复制到粘贴板!
您可以使用 RHEL 镜像构建器命令行界面(CLI)创建蓝图,方法是运行带有合适的选项和子命令的 composer-cli 命令。
命令行的工作流总结如下:
- 创建蓝图或将现有蓝图定义导出(保存)到纯文本文件中
- 在文本编辑器中编辑这个文件
- 将蓝图文本文件重新导回到镜像构建器中
- 运行 compose 从蓝图构建镜像
- 导出镜像文件以下载它
除了创建蓝图的基本子命令外,composer-cli 命令还提供了许多子命令来检查配置的蓝图和组成的状态。
9.3.2. 以非 root 用户身份使用 RHEL 镜像构建器 复制链接链接已复制到粘贴板!
要以非 root 身份运行 composer-cli 命令,该用户必须在 weldr 组中。
先决条件
- 您已创建了一个用户
流程
要在
weldr或root组中添加用户,请运行以下命令:sudo usermod -a -G weldr user newgrp weldr
$ sudo usermod -a -G weldr user $ newgrp weldrCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3.3. 使用命令行创建蓝图 复制链接链接已复制到粘贴板!
您可以使用 RHEL 镜像构建器命令行界面(CLI)创建新蓝图。蓝图描述了最终的镜像及其自定义,如软件包和内核自定义。
先决条件
-
您以 root 用户身份登录,或者作为
weldr组的成员的用户身份登录
流程
创建一个包含以下内容的纯文本文件:
name = "BLUEPRINT-NAME" description = "LONG FORM DESCRIPTION TEXT" version = "0.0.1" modules = [] groups = []
name = "BLUEPRINT-NAME" description = "LONG FORM DESCRIPTION TEXT" version = "0.0.1" modules = [] groups = []Copy to Clipboard Copied! Toggle word wrap Toggle overflow 用您的蓝图的名称和描述替换 BLUEPRINT-NAME 和 LONG FORM DESCRIPTION TEXT。
根据 Semantic Versioning 方案,将 0.0.1 替换为版本号。
对于您要包含在蓝图中的每个软件包,请在文件中添加以下行:
[[packages]] name = "package-name" version = "package-version"
[[packages]] name = "package-name" version = "package-version"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用软件包名称替换 package-name,如
httpd、gdb-doc或coreutils。可选,将 package-version 替换为要使用的版本。此字段支持
dnf版本规格:- 对于特定版本,请使用确切的版本号,如 8.7.0。
- 对于最新可用版本,请使用星号 *。
- 对于最新的次版本,请使用以下格式,如 8.*。
自定义蓝图以满足您的需要。例如,禁用 Simultaneous Multi Threading (SMT),在蓝图文件中添加以下行:
[customizations.kernel] append = "nosmt=force"
[customizations.kernel] append = "nosmt=force"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关其他可用的定制信息,请参阅 支持的镜像自定义。
请注意,
[]和[[]]是以 TOML 表达的不同数据结构。-
[customizations.kernel]标头代表由一组键及其对应值对定义的单个表,例如:append = "nosmt=force"。 -
[[packages]]标头代表表数组。第一个实例定义数组及其第一个表元素,例如name = "package-name"和version = "package-version",每个后续实例都会按照您定义它们的顺序创建并定义一个新的 table 元素。
-
- 将文件保存为 例如 BLUEPRINT-NAME.toml,并关闭文本编辑器。
可选:检查 Blueprint TOML 文件中的所有设置是否已正确解析。保存蓝图并将保存的输出与输入文件进行比较:
composer-cli blueprints save BLUEPRINT-NAME.toml
# composer-cli blueprints save BLUEPRINT-NAME.tomlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
BLUEPRINT-NAME.toml保存的文件与输入文件进行比较。
-
将
推送蓝图:
composer-cli blueprints push BLUEPRINT-NAME.toml
# composer-cli blueprints push BLUEPRINT-NAME.tomlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 BLUEPRINT-NAME 替换为您在前面步骤中使用的值。
注意以非 root 身份运行
composer-cli命令创建镜像,请将您的用户添加到weldr或root组中。usermod -a -G weldr user newgrp weldr
# usermod -a -G weldr user $ newgrp weldrCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
列出现有的蓝图以验证蓝图是否已推送并已存在:
composer-cli blueprints list
# composer-cli blueprints listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 显示您刚刚添加的蓝图配置:
composer-cli blueprints show BLUEPRINT-NAME
# composer-cli blueprints show BLUEPRINT-NAMECopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查蓝图中列出的组件和版本是否有效:
composer-cli blueprints depsolve BLUEPRINT-NAME
# composer-cli blueprints depsolve BLUEPRINT-NAMECopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 RHEL 镜像构建器无法解决自定义存储库中软件包的依赖项,请清除
osbuild-composer缓存:sudo rm -rf /var/cache/osbuild-composer/* sudo systemctl restart osbuild-composer
$ sudo rm -rf /var/cache/osbuild-composer/* $ sudo systemctl restart osbuild-composerCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3.4. 使用命令行编辑蓝图 复制链接链接已复制到粘贴板!
您可以在命令行中编辑现有蓝图,例如添加新软件包或定义新组,并创建自定义镜像。
先决条件
- 您已创建了一个蓝图
流程
列出现有的蓝图:
composer-cli blueprints list
# composer-cli blueprints listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将蓝图保存到一个本地文本文件中:
composer-cli blueprints save BLUEPRINT-NAME
# composer-cli blueprints save BLUEPRINT-NAMECopy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用文本编辑器编辑 BLUEPRINT-NAME.toml 文件并进行更改。
在完成编辑前,请验证该文件是否是一个有效的蓝图:
如果存在,从蓝图中删除以下行:
packages = []
packages = []Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 增加版本号,例如,从 0.0.1 增加到 0.1.0。请记住,RHEL 镜像构建器蓝图版本必须使用 Semantic Versioning 方案。请注意,如果您没有更改版本,补丁版本组件会自动增加。
- 保存文件并关闭文本编辑器。
将蓝图推送回 RHEL 镜像构建器:
composer-cli blueprints push BLUEPRINT-NAME.toml
# composer-cli blueprints push BLUEPRINT-NAME.tomlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意要将蓝图导回到 RHEL 镜像构建器,请提供包括
.toml扩展名的文件名,而在其他命令中则只使用蓝图名称。
验证
要验证上传到 RHEL 镜像构建器的内容是否与您编辑的内容匹配,请列出蓝图的内容:
composer-cli blueprints show BLUEPRINT-NAME
# composer-cli blueprints show BLUEPRINT-NAMECopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查蓝图中列出的组件和版本是否有效:
composer-cli blueprints depsolve BLUEPRINT-NAME
# composer-cli blueprints depsolve BLUEPRINT-NAMECopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3.5. 在命令行上使用 RHEL 镜像构建器创建系统镜像 复制链接链接已复制到粘贴板!
您可以使用 RHEL 镜像构建器命令行界面构建一个自定义 RHEL 镜像。为此,您必须指定蓝图和镜像类型。可选,您还可以指定一个发行版。如果没有指定发行版,它将使用与主机系统一样的发行版和版本。架构也与主机上的架构一样。
先决条件
- 您已为镜像准备了蓝图。请参阅 使用命令行创建 RHEL 镜像构建器蓝图。
流程
可选:列出您可以创建的镜像格式:
composer-cli compose types
# composer-cli compose typesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启动 compose:
composer-cli compose start BLUEPRINT-NAME IMAGE-TYPE
# composer-cli compose start BLUEPRINT-NAME IMAGE-TYPECopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 BLUEPRINT-NAME 替换为蓝图的名称,将 IMAGE-TYPE 替换为镜像的类型。有关可用值,请查看
composer-cli compose types命令的输出。compose 进程在后台启动,并显示 composer Universally Unique Identifier (UUID)。
镜像创建最多可能需要十分钟才能完成。
检查 Compose 的状态:
composer-cli compose status
# composer-cli compose statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 完成的 compose 显示 FINISHED 状态值。要识别列表中您的 compose,请使用其 UUID。
完成 compose 过程后,下载生成的镜像文件:
composer-cli compose image UUID
# composer-cli compose image UUIDCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用前面步骤中显示的 UUID 值替换 UUID。
验证
创建镜像后,您可以使用以下命令检查镜像创建进度:
下载镜像的元数据以获取 compose 的元数据的
.tar文件:sudo composer-cli compose metadata UUID
$ sudo composer-cli compose metadata UUIDCopy to Clipboard Copied! Toggle word wrap Toggle overflow 下载镜像的日志:
sudo composer-cli compose logs UUID
$ sudo composer-cli compose logs UUIDCopy to Clipboard Copied! Toggle word wrap Toggle overflow 该命令会创建一个
.tar文件,其中包含创建镜像的日志。如果日志为空,您可以检查日志。检查日志:
journalctl | grep osbuild
$ journalctl | grep osbuildCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查镜像的清单:
sudo cat /var/lib/osbuild-composer/jobs/job_UUID.json
$ sudo cat /var/lib/osbuild-composer/jobs/job_UUID.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以在日志中找到 job_UUID.json。
9.3.6. 基本 RHEL 镜像构建器命令行命令 复制链接链接已复制到粘贴板!
RHEL 镜像构建器命令行界面提供以下子命令。
蓝图操作
- 列出所有可用的蓝图
composer-cli blueprints list
# composer-cli blueprints listCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 显示 TOML 格式的蓝图内容
composer-cli blueprints show <BLUEPRINT-NAME>
# composer-cli blueprints show <BLUEPRINT-NAME>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 将 TOML 格式的蓝图内容保存(导出)到文件
BLUEPRINT-NAME.toml中 composer-cli blueprints save <BLUEPRINT-NAME>
# composer-cli blueprints save <BLUEPRINT-NAME>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 删除蓝图
composer-cli blueprints delete <BLUEPRINT-NAME>
# composer-cli blueprints delete <BLUEPRINT-NAME>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 将 TOML 格式的蓝图文件推送(导入)到 RHEL 镜像构建器
composer-cli blueprints push <BLUEPRINT-NAME>
# composer-cli blueprints push <BLUEPRINT-NAME>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
从蓝图制作镜像
- 列出可用的镜像类型
composer-cli compose types
# composer-cli compose typesCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 启动一个目录
composer-cli compose start <BLUEPRINT> <COMPOSE-TYPE>
# composer-cli compose start <BLUEPRINT> <COMPOSE-TYPE>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 列出所有 compose
composer-cli compose list
# composer-cli compose listCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 列出所有 compose 及其状态
composer-cli compose status
# composer-cli compose statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 取消正在运行的 compose
composer-cli compose cancel <COMPOSE-UUID>
# composer-cli compose cancel <COMPOSE-UUID>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 删除完成的 compose
composer-cli compose delete <COMPOSE-UUID>
# composer-cli compose delete <COMPOSE-UUID>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 显示有关 compose 的详细信息
composer-cli compose info <COMPOSE-UUID>
# composer-cli compose info <COMPOSE-UUID>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 下载 compose 的镜像文件
composer-cli compose image <COMPOSE-UUID>
# composer-cli compose image <COMPOSE-UUID>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 更多子命令和选项
composer-cli help
# composer-cli helpCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3.7. RHEL 镜像构建器蓝图格式 复制链接链接已复制到粘贴板!
RHEL 镜像构建器蓝图以 TOML 格式的纯文本向用户显示。
典型的蓝图文件元素包括:
- 蓝图元数据
name = "<BLUEPRINT-NAME>" description = "<LONG FORM DESCRIPTION TEXT>" version = "<VERSION>"
name = "<BLUEPRINT-NAME>" description = "<LONG FORM DESCRIPTION TEXT>" version = "<VERSION>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow BLUEPRINT-NAME 和 LONG FORM DESCRIPTION TEXT 字段是您的蓝图的名称和描述。
VERSION 是根据 Semantic Versioning 方案的版本号,只对整个蓝图文件显示一次。
- 镜像中包含的组
[[groups]] name = "group-name"
[[groups]] name = "group-name"Copy to Clipboard Copied! Toggle word wrap Toggle overflow group 条目描述要安装到镜像中的一组软件包。组使用以下软件包类别:
- Mandatory(必需)
- Default(默认)
Optional(可选)
group-name 是组的名称,例如 anaconda-tools, widget, wheel 或 users。蓝图安装必需的和默认的软件包。没有选择可选软件包的机制。
- 镜像中包含的软件包
[[packages]] name = "<package-name>" version = "<package-version>"
[[packages]] name = "<package-name>" version = "<package-version>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow package-name 是软件包的名称,如 httpd、gdb-doc 或 coreutils。
package-version 是要使用的版本。此字段支持
dnf版本规格:- 对于特定版本,请使用确切的版本号,如 8.7.0。
- 对于最新的可用版本,请使用 星号 *。
对于最新的次版本,请使用以下格式,如 8.*。
为每个要包括的软件包重复这个块。
RHEL 镜像构建器工具中的软件包和模块之间没有区别。两者都被视为 RPM 软件包依赖项。
9.3.8. 支持的镜像自定义 复制链接链接已复制到粘贴板!
您可以通过向蓝图中添加自定义来自定义镜像,例如:
- 添加一个额外的 RPM 软件包
- 启用一个服务
- 自定义一个内核命令行参数.
在其他参数之间。您可以在蓝图中使用多个镜像自定义。通过使用自定义,您可以将软件包和组添加到在默认软件包中不可用的镜像中。要使用这些选项,请在蓝图中配置自定义,并将其导入(推送)到 RHEL 镜像构建器。
9.3.8.1. 选择一个发行版 复制链接链接已复制到粘贴板!
您可以使用 distro 字段指定在制作镜像或在蓝图中解决依赖项时要使用的发行版。如果 distro 字段留空,蓝图会自动使用主机的操作系统分布。如果没有指定发行版,蓝图将使用主机分发。当您升级主机操作系统时,蓝图使用升级的操作系统版本,而无需指定发行版构建镜像。
您可以在较新的系统上为旧的主版本构建镜像。例如,您可以使用 RHEL 10 主机创建 RHEL 9 和 RHEL 8 镜像。但是,您无法在较旧的系统上为较新的主版本构建镜像。
您无法构建一个与 RHEL 镜像构建器主机不同的操作系统镜像。例如,您无法使用 RHEL 系统构建 Fedora 或 CentOS 镜像。
使用 RHEL 发行版自定义蓝图,以始终构建指定的 RHEL 镜像:
name = "blueprint_name" description = "blueprint_version" version = "0.1" distro = "different_minor_version"
name = "blueprint_name" description = "blueprint_version" version = "0.1" distro = "different_minor_version"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
name = "tmux" description = "tmux image with openssh" version = "1.2.16" distro = "rhel-9.5"
name = "tmux" description = "tmux image with openssh" version = "1.2.16" distro = "rhel-9.5"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
将 "different_minor_version" 替换为构建不同的次版本,例如,如果要构建 RHEL 8.10 镜像,请使用 distro = "rhel-810"。在 RHEL 8.10 镜像中,您可以构建次版本,如 RHEL 8.9 及更早的版本。
9.3.8.2. 选择一个软件包组 复制链接链接已复制到粘贴板!
使用软件包组自定义蓝图。groups 列表描述了您要安装到镜像中的软件包组。软件包组在存储库元数据中定义。每个组都有一个描述性名称,主要用于在用户界面中显示,以及一个 ID,通常在 Kickstart 文件中使用。在这种情况下,您必须使用 ID 来列出组。组有三种不同的方法来对软件包进行分类:mandatory、default 和 optional。蓝图中只安装了 mandatory 和 default 软件包。无法选择 optional 软件包。
name 属性是必需的字符串,必须与存储库中的软件包组 id 完全匹配。
目前,osbuild-composer 中的软件包和模块之间没有区别。两者都被视为 RPM 软件包依赖项。
自定义带有软件包的蓝图:
[[groups]] name = "group_name"
[[groups]] name = "group_name"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用组名称替换
group_name。例如:anaconda-tools:[[groups]] name = "anaconda-tools"
[[groups]] name = "anaconda-tools"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3.8.3. 嵌入容器中 复制链接链接已复制到粘贴板!
您可以自定义蓝图来嵌入最新的 RHEL 容器中。容器列表包含具有源的对象,以及可选的 tls-verify 属性。
容器列表条目描述了要嵌入到镜像中的容器镜像。
-
source- 必需的字段。它是对 registry 中的容器镜像的引用。这个示例使用registry.access.redhat.com注册中心。您可以指定标签版本。默认标签版本为 latest。 -
name- 本地注册中心中容器的名称。 -
tls-verify- 布尔值字段。tls-verify 布尔值字段控制传输层安全性。默认值为 true。
嵌入的容器不会自动启动。要启动它,请使用文件自定义创建 systemd 单元文件或 四元组 。
要从
registry.access.redhat.com/ubi9/ubi:latest和来自主机的容器嵌入容器,请在蓝图中添加以下自定义:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
您可以使用 containers-auth.json 文件访问受保护的容器资源。请参阅 容器注册中心凭证。
9.3.8.4. 设置镜像主机名 复制链接链接已复制到粘贴板!
customizations.hostname 是一个可选字符串,您可以用来配置最终镜像主机名。此自定义是可选的,如果您未设置它,则蓝图使用默认主机名。
自定义蓝图以配置主机名:
[customizations] hostname = "baseimage"
[customizations] hostname = "baseimage"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3.8.5. 指定其他用户 复制链接链接已复制到粘贴板!
将用户添加到镜像中,并可选择设置其 SSH 密钥。本节的所有字段都是可选的,但 name 除外。
流程
自定义蓝图来将用户添加到镜像中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow GID 是可选的,且必须在镜像中已存在。(可选)软件包会创建它,或者蓝图使用
[[customizations.group]条目创建 GID。将 PASSWORD-HASH 替换为实际的
密码哈希。要生成密码哈希,请使用如下命令:python3 -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'$ python3 -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用适当的值替换其他占位符。
输入
name值,并省略您不需要的任何行。为每个要包含的用户重复这个块。
9.3.8.6. 指定附加组 复制链接链接已复制到粘贴板!
为生成的系统镜像指定一个组。name 和 gid 属性都是必需的。
自定义带有组的蓝图:
[[customizations.group]] name = "GROUP-NAME" gid = NUMBER
[[customizations.group]] name = "GROUP-NAME" gid = NUMBERCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为每个组重复此块。例如:
[[customizations.group]] name = "widget" gid = 1130
[[customizations.group]] name = "widget" gid = 1130Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3.8.7. 为现有用户设置 SSH 密钥 复制链接链接已复制到粘贴板!
您可以使用 customizations.sshkey 为最终镜像中的现有用户设置 SSH 密钥。user 和 key 属性是必需的。
通过为现有用户设置 SSH 密钥来自定义蓝图:
[[customizations.sshkey]] user = "root" key = "PUBLIC-SSH-KEY"
[[customizations.sshkey]] user = "root" key = "PUBLIC-SSH-KEY"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
[[customizations.sshkey]] user = "root" key = "SSH key for root"
[[customizations.sshkey]] user = "root" key = "SSH key for root"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您只能为现有用户配置
customizations.sshkey自定义。要创建用户并设置 SSH 密钥,请参阅 指定其他用户 自定义。
9.3.8.8. 附加一个内核参数 复制链接链接已复制到粘贴板!
您可以向引导装载程序内核命令行中附加参数。默认情况下,RHEL 镜像构建器将默认内核构建到镜像中。但是,您可以通过在蓝图中配置它来自定义内核。
在默认值中附加内核引导选项:
[customizations.kernel] append = "KERNEL-OPTION"
[customizations.kernel] append = "KERNEL-OPTION"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
[customizations.kernel] name = "kernel-debug" append = "nosmt=force"
[customizations.kernel] name = "kernel-debug" append = "nosmt=force"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3.8.9. 使用实时内核构建 RHEL 镜像 复制链接链接已复制到粘贴板!
要使用实时内核(kernel-rt)构建 RHEL 镜像,您需要覆盖存储库,以便您可以构建镜像,其中 kernel-rt 被正确地选为默认内核。使用 /usr/share/osbuild-composer/repositories/ 目录中的 .json。然后,您可以部署您构建到系统的镜像,并使用实时内核功能。
实时内核在经过认证可运行 Red Hat Enterprise Linux 的 AMD64 和 Intel 64 服务器平台上运行。
先决条件
- 您的系统已注册,RHEL 已连接到 RHEL for Real Time 订阅。请参阅使用 dnf 安装 RHEL for Real Time。
流程
创建以下目录:
mkdir /etc/osbuild-composer/repositories/
# mkdir /etc/osbuild-composer/repositories/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
/usr/share/osbuild-composer/repositories/rhel-8.版本.json文件中的内容复制到新目录中:cp /usr/share/osbuild-composer/repositories/rhel-8.version.json /etc/osbuild-composer/repositories
# cp /usr/share/osbuild-composer/repositories/rhel-8.version.json /etc/osbuild-composer/repositoriesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑
/etc/osbuild-composer/repositories/rhel-8.版本.json文件,使其包含 RT 内核存储库:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启服务:
systemctl restart osbuild-composer
# systemctl restart osbuild-composerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 确认
kernel-rt已包含在.json文件中:composer-cli sources list composer-cli sources info kernel-rt
# composer-cli sources list # composer-cli sources info kernel-rtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您将看到之前配置的 URL。
创建一个蓝图。在蓝图中,添加 "[customizations.kernel]" 自定义。以下是在蓝图中包含 "[customizations.kernel]" 的示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将蓝图推送到服务器:
composer-cli blueprints push rt-kernel-image.toml
# composer-cli blueprints push rt-kernel-image.tomlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从您创建的蓝图构建镜像。以下示例构建一个(
.qcow2)镜像:composer-cli compose start rt-kernel-image qcow2
# composer-cli compose start rt-kernel-image qcow2Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 将您构建的镜像部署到您要使用实时内核功能的系统。
验证
从镜像引导虚拟机后,验证镜像是否是使用正确选择的
kernel-rt作为默认内核而构建的。cat /proc/cmdline BOOT_IMAGE=(hd0,got3)/vmlinuz-5.14.0-362.24.1..el8_version_.x86_64+rt...
$ cat /proc/cmdline BOOT_IMAGE=(hd0,got3)/vmlinuz-5.14.0-362.24.1..el8_version_.x86_64+rt...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3.8.10. 设置时区和 NTP 复制链接链接已复制到粘贴板!
您可以自定义蓝图来配置时区和 网络时间协议 (NTP)。timezone 和 ntpservers 属性是可选字符串。如果您没有自定义时区,系统将使用 Universal Time, Coordinated (UTC)。如果您没有设置 NTP 服务器,系统将使用默认发行版。
自定义带有您想要的
timezone和ntpservers的蓝图:[customizations.timezone] timezone = "TIMEZONE" ntpservers = "NTP_SERVER"
[customizations.timezone] timezone = "TIMEZONE" ntpservers = "NTP_SERVER"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
[customizations.timezone] timezone = "US/Eastern" ntpservers = ["0.north-america.pool.ntp.org", "1.north-america.pool.ntp.org"]
[customizations.timezone] timezone = "US/Eastern" ntpservers = ["0.north-america.pool.ntp.org", "1.north-america.pool.ntp.org"]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意有些镜像类型,如 Google Cloud,已经建立了 NTP 服务器。您无法覆盖它,因为镜像需要 NTP 服务器来在所选环境中引导。但是,您可以在蓝图中自定义时区。
9.3.8.11. 自定义区域设置 复制链接链接已复制到粘贴板!
您可以为生成的系统镜像自定义区域设置。language 和 keyboard 属性是必需的。您可以添加许多其他语言。您添加的第一个语言是主语言,其他语言是次要语言。
流程
设置区域设置:
[customizations.locale] languages = ["LANGUAGE"] keyboard = "KEYBOARD"
[customizations.locale] languages = ["LANGUAGE"] keyboard = "KEYBOARD"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
[customizations.locale] languages = ["en_US.UTF-8"] keyboard = "us"
[customizations.locale] languages = ["en_US.UTF-8"] keyboard = "us"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要列出语言支持的值,请运行以下命令:
localectl list-locales
$ localectl list-localesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要列出键盘支持的值,请运行以下命令:
localectl list-keymaps
$ localectl list-keymapsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3.8.12. 自定义防火墙 复制链接链接已复制到粘贴板!
为生成的系统镜像设置防火墙。默认情况下,防火墙阻止进入的连接,但明确启用其端口的服务除外,如 sshd。
如果您不想使用 [customizations.firewall] 或 [customizations.firewall.services],可以删除属性,或者将它们设置为空列表 []。如果您只想使用默认的防火墙设置,您可以从蓝图中省略自定义。
Google 和 OpenStack 模板为其环境明确禁用防火墙。您无法通过设置蓝图来覆盖此行为。
流程
使用以下设置自定义蓝图,以打开其他端口和服务:
[customizations.firewall] ports = ["PORTS"]
[customizations.firewall] ports = ["PORTS"]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
ports是包含要打开的端口或一系列端口和协议的可选字符串列表。您可以使用以下格式配置端口:port:protocol格式。您可以使用portA-portB:protocol格式配置端口范围。例如:[customizations.firewall] ports = ["22:tcp", "80:tcp", "imap:tcp", "53:tcp", "53:udp", "30000-32767:tcp", "30000-32767:udp"]
[customizations.firewall] ports = ["22:tcp", "80:tcp", "imap:tcp", "53:tcp", "53:udp", "30000-32767:tcp", "30000-32767:udp"]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以使用数字端口或
/etc/services中的名称来启用或禁用端口列表。在
customizations.firewall.service部分中指定要启用或禁用哪个防火墙服务:[customizations.firewall.services] enabled = ["SERVICES"] disabled = ["SERVICES"]
[customizations.firewall.services] enabled = ["SERVICES"] disabled = ["SERVICES"]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以检查可用的防火墙服务:
firewall-cmd --get-services
$ firewall-cmd --get-servicesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
[customizations.firewall.services] enabled = ["ftp", "ntp", "dhcp"] disabled = ["telnet"]
[customizations.firewall.services] enabled = ["ftp", "ntp", "dhcp"] disabled = ["telnet"]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意firewall.services中列出的服务与/etc/services文件中提供的service-names不同。
9.3.8.13. 启用或禁用服务 复制链接链接已复制到粘贴板!
您可以控制在引导期间要启用哪些服务。有些镜像类型已经启用或禁用了服务,以确保镜像正常工作,您无法覆盖此设置。蓝图中的 [customizations.services] 设置不会替代这些服务,但可以将服务添加到已在镜像模板中存在的服务列表中。
自定义在引导时要启用哪些服务:
[customizations.services] enabled = ["SERVICES"] disabled = ["SERVICES"]
[customizations.services] enabled = ["SERVICES"] disabled = ["SERVICES"]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
[customizations.services] enabled = ["sshd", "cockpit.socket", "httpd"] disabled = ["postfix", "telnetd"]
[customizations.services] enabled = ["sshd", "cockpit.socket", "httpd"] disabled = ["postfix", "telnetd"]Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3.8.14. 在 ISO 镜像中注入 Kickstart 文件 复制链接链接已复制到粘贴板!
您可以使用 [customization.installer] 蓝图自定义在构建中为 ISO 安装程序(如镜像安装程序或 边缘 安装程序)添加自己的 Kickstart 文件,并在为裸机部署构建 ISO 镜像时获得更大的灵活性。
在带有现有操作系统或数据的机器上引导 ISO 可能具有破坏性,因为 Kickstart 被配置为自动重新格式化系统上的第一个磁盘。
您可以选择以下选项来添加自己的 Kickstart 文件:
- 在安装过程中设置所有值。
-
在 Kickstart 中启用
unattended = true字段,并使用默认值获得完全无人值守的安装。 - 使用 Kickstart 字段注入您自己的 Kickstart。如果您指定了所有必填字段,或者安装程序询问一些可能缺少的字段,则可能会导致完全无人值守安装。
Anaconda 安装程序 ISO 镜像类型支持以下蓝图自定义:
[customizations.installer] unattended = true sudo-nopasswd = ["user", "%wheel"]
[customizations.installer]
unattended = true
sudo-nopasswd = ["user", "%wheel"]
无人值守 :创建可完全自动安装的 Kickstart 文件。这包括默认设置以下选项:
- 文本显示模式
- en_US.UTF-8 语言/locale
- us 键盘布局
- UTC 时区
- zerombr、clearpart 和 autopart 用于自动擦除和分区第一个磁盘
- 启用 dhcp 和自动激活的网络选项
以下是一个示例:
sudo-nopasswd:在安装后在 Kickstart 文件中添加代码片段,该文件会在 /etc/sudoers.d 中创建置入文件,以允许指定的用户和组在没有密码的情况下运行 sudo。组必须加上前缀 %。例如,将值设为 ["user", "%wheel"] 会创建以下 Kickstart %post 部分:
安装程序 Kickstart
另外,您可以使用以下自定义包括自定义 Kickstart:
osbuild-composer 会自动添加安装 system: liveimg 或 ostreesetup 的命令(如果与 image-installer,或 edge-installer 镜像类型相关)。您不能将 [customizations.installer.kickstart] 自定义与任何其他安装程序自定义结合使用。
9.3.8.15. 指定分区模式 复制链接链接已复制到粘贴板!
使用 partitioning_mode 变量选择如何对您要构建的磁盘镜像进行分区。您可以使用以下支持的模式自定义镜像:
-
auto-lvm:它使用原始分区模式,除非有一个或多个文件系统自定义。在这种情况下,它使用 LVM 分区模式。 -
LVM:它总是使用 LVM 分区模式,即使没有额外的挂载点。 -
raw:它使用原始分区,即使有一个或多个挂载点。 您可以使用以下自定义,使用
partitioning_mode变量自定义蓝图:[customizations] partitioning_mode = "lvm"
[customizations] partitioning_mode = "lvm"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3.8.16. 指定自定义文件系统配置 复制链接链接已复制到粘贴板!
您可以在蓝图中指定自定义文件系统配置,因此创建带有特定磁盘布局的镜像,而不是默认的布局配置。通过使用蓝图中的非默认布局配置,您可以:
- 安全基准合规性
- 防止磁盘不足错误
- 提高的性能
- 与现有设置的一致性
OSTree 系统不支持文件系统自定义,因为 OSTree 镜像有自己的挂载规则,如只读。不支持以下镜像类型:
-
image-installer -
edge-installer -
edge-simplified-installer
另外,以下镜像类型不支持文件系统自定义,因为这些镜像类型不会创建分区的操作系统镜像:
-
edge-commit -
edge-container -
tar -
container
但是,以下镜像类型支持文件系统自定义:
-
simplified-installer -
edge-raw-image -
edge-ami -
edge-vsphere
对于 OSTree 系统的一些额外的例外,您可以在文件系统的 /root 级别中选择任意目录名称,例如: ' /local',' /mypartition', /$PARTITION。在逻辑卷中,这些更改在 LVM 分区系统之上进行。支持以下目录: /var、' /var/log' 和 /var/lib/containers。以下是根级别的例外:
- "/home": {Deny: true},
- "/mnt": {Deny: true},
- "/opt": {Deny: true},
- "/ostree": {Deny: true},
- "/root": {Deny: true},
- "/SRV": {Deny: true},
- "/var/home": {Deny: true},
- "/var/mnt": {Deny: true},
- "/var/opt": {Deny: true},
- "/var/roothome": {Deny: true},
- "/var/srv": {Deny: true},
- "/var/usrlocal": {Deny: true},
对于 RHEL 8.10 和 9.5 的发行版本发行版本,蓝图支持以下 挂载点 及其子目录:
-
/- root 挂载点 -
/var -
/home -
/opt -
/srv -
/usr -
/app -
/data -
/tmp
在 RHEL 9.5 和 8.10 发行版本中,您可以指定任意自定义挂载点,除了为操作系统保留的特定路径。
您不能在以下挂载点及其子目录中指定任意自定义挂载点:
-
/bin -
/boot/efi -
/dev -
/etc -
/lib -
/lib64 -
/lost+found -
/proc -
/run -
/sbin -
/sys -
/sysroot -
/var/lock -
/var/run
您可以在蓝图中自定义 /usr 自定义挂载点的文件系统,但不允许其子目录。
从 RHEL 8.5 发行版开始,才支持使用 CLI 自定义挂载点。在之前的发行版本中,您只能将 root 分区指定为挂载点,并将 size 参数指定为镜像大小的别名。从 RHEL 8.6 开始,对于 osbuild-composer-46.1-1.el8 RPM 及更新的版本,物理分区不再可用,文件系统自定义会创建逻辑卷。
如果您在自定义镜像中有多个分区,您可以在 LVM 上创建带有自定义文件系统分区的镜像,并在运行时调整这些分区大小。要做到这一点,您可以在蓝图中指定自定义文件系统配置,因此请使用所需的磁盘布局创建镜像。默认文件系统布局保持不变 - 如果您使用没有文件系统自定义的普通镜像,cloud-init 会调整 root 分区的大小。
蓝图自动将文件系统自定义转换为 LVM 分区。
您可以使用自定义文件蓝图自定义来创建新文件或替换现有文件。您指定的文件的父目录必须存在,否则镜像构建会失败。通过在 [[customizations.directories]] 自定义中指定它来确保父目录存在。
如果您将文件自定义与其他蓝图自定义相结合,这可能会影响其他自定义的功能,或者可能会覆盖当前的文件自定义。
9.3.8.16.1. 在蓝图中指定自定义文件 复制链接链接已复制到粘贴板!
使用 [[customizations.files]] 蓝图自定义,您可以:
- 创建新文本文件。
- 修改现有文件。警告:这可能会覆盖现有内容。
- 为您要创建的文件设置用户和组所有权。
- 以八进制格式设置模式权限。
您无法创建或替换以下文件:
-
/etc/fstab -
/etc/shadow -
/etc/passwd -
/etc/group
您可以使用 [[customizations.files]] 和 [[customizations.directories]] 蓝图自定义在镜像中创建自定义文件和目录。您只能在 /etc 目录中使用这些自定义。
这些蓝图自定义被所有镜像类型支持,但部署 OSTree 提交的镜像类型除外,如 edge-raw-image、edge-installer、edge-simplified-installer。
如果您将 customizations.directories 与设置了 mode、user 或 group 的镜像中已存在的目录路径一起使用,则镜像构建无法防止更改现有目录的所有权或权限。
9.3.8.16.2. 在蓝图中指定自定义目录 复制链接链接已复制到粘贴板!
使用 [[customizations.directory]] 蓝图自定义,您可以:
- 创建新目录。
- 为您要创建的目录设置用户和组所有权。
- 以八进制格式设置目录模式权限。
- 确保根据需要创建父目录。
使用 [[customizations.files]] 蓝图自定义,您可以:
- 创建新文本文件。
- 修改现有文件。警告:这可能会覆盖现有内容。
- 为您要创建的文件设置用户和组所有权。
- 以八进制格式设置模式权限。
您无法创建或替换以下文件:
-
/etc/fstab -
/etc/shadow -
/etc/passwd -
/etc/group
以下自定义可用:
在蓝图中自定义文件系统配置:
[[customizations.filesystem]] mountpoint = "MOUNTPOINT" minsize = MINIMUM-PARTITION-SIZE
[[customizations.filesystem]] mountpoint = "MOUNTPOINT" minsize = MINIMUM-PARTITION-SIZECopy to Clipboard Copied! Toggle word wrap Toggle overflow MINIMUM-PARTITION-SIZE值没有默认大小格式。蓝图自定义支持以下值和单位:kB 到 TB 以及 KiB 到 TiB。例如,您可以以字节为单位定义挂载点大小:[[customizations.filesystem]] mountpoint = "/var" minsize = 1073741824
[[customizations.filesystem]] mountpoint = "/var" minsize = 1073741824Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用单位定义挂载点大小。例如:
[[customizations.filesystem]] mountpoint = "/opt" minsize = "20 GiB"
[[customizations.filesystem]] mountpoint = "/opt" minsize = "20 GiB"Copy to Clipboard Copied! Toggle word wrap Toggle overflow [[customizations.filesystem]] mountpoint = "/boot" minsize = "1 GiB"
[[customizations.filesystem]] mountpoint = "/boot" minsize = "1 GiB"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过设置
minsize来定义最小分区。例如:[[customizations.filesystem]] mountpoint = "/var" minsize = 2147483648
[[customizations.filesystem]] mountpoint = "/var" minsize = 2147483648Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
[[customizations.directories]],在/etc目录下为镜像创建自定义目录:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 蓝图条目如下所述:
-
path- 必需 - 输入您要创建的目录的路径。它必须是/etc目录下的绝对路径。 -
mode- 可选 - 以八进制格式设置目录的访问权限。如果没有指定权限,则默认为 0755。前面的零是可选的。 -
user- 可选 - 将用户设置为目录的所有者。如果没有指定用户,则默认为root。您可以将用户指定为字符串或整数。 -
group- 可选 - 将组设置为目录的所有者。如果没有指定组,则默认为root。您可以将组指定为字符串或整数。 -
ensure_parents- 可选 - 指定是否要根据需要创建父目录。如果没有指定值,则默认为false。
-
使用
[[customizations.directories]],在/etc目录下为镜像创建自定义文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 蓝图条目如下所述:
-
path- 必需 - 输入您要创建的文件的路径。它必须是/etc目录下的绝对路径。 -
mode可选 - 以八进制格式设置对文件的访问权限。如果没有指定权限,则默认为 0644。前面的零是可选的。 -
user- 可选 - 将用户设置为文件所有者。如果没有指定用户,则默认为root。您可以将用户指定为字符串或整数。 -
group- 可选 - 将组设置为文件所有者。如果没有指定组,则默认为root。您可以将组指定为字符串或整数。 -
data- 可选 - 指定纯文本文件的内容。如果没有指定内容,它会创建一个空文件。
-
9.3.8.17. 在蓝图中指定卷组和逻辑卷命名 复制链接链接已复制到粘贴板!
您可以将 RHEL 镜像构建器用于以下操作:
-
使用高级分区布局创建 RHEL 磁盘镜像。您可以使用自定义挂载点、基于 LVM 的分区和基于 LVM 的 SWAP 创建磁盘镜像。例如,使用
config.toml文件更改/和/boot目录的大小。 -
选择要使用的文件系统。您可以在
ext4和xfs之间进行选择。 - 添加交换分区和 LV。磁盘镜像可以包含基于 LV 的 SWAP。
- 更改 LVM 实体的名称。镜像中的逻辑卷(LV)和卷组(VG)可以具有自定义名称。
不支持以下选项:
- 一个镜像中的多个 PV 或 VG。
- SWAP 文件
-
非物理分区的挂载选项,如
/dev/shm和/tmp。
例如:添加文件系统所在的 VG 和 LG 自定义名称。
9.3.9. RHEL 镜像构建器安装的软件包 复制链接链接已复制到粘贴板!
当使用 RHEL 镜像构建器创建系统镜像时,系统会安装一组基本软件包组。
当您在蓝图中添加其他组件时,请确保添加的组件中的软件包不会与任何其他软件包组件冲突。否则,系统无法解决依赖项并创建自定义镜像失败。您可以通过运行以下命令检查软件包之间没有冲突:
composer-cli blueprints depsolve BLUEPRINT-NAME
# composer-cli blueprints depsolve BLUEPRINT-NAME
默认情况下,RHEL 镜像构建器使用 Core 组作为软件包的基本列表。
| 镜像类型 | 默认软件包 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9.3.10. 在自定义镜像中启用服务 复制链接链接已复制到粘贴板!
当使用镜像构建器配置自定义镜像时,镜像使用的默认服务由以下内容决定:
-
使用
osbuild-composer工具的 RHEL 发行版本 - 镜像类型
例如,ami 镜像类型默认启用 sshd、chronyd 和 cloud-init 服务。如果没有启用这些服务,则自定义镜像不会引导。
| 镜像类型 | 默认启用的服务 |
|---|---|
|
| sshd, cloud-init, cloud-init-local, cloud-config, cloud-final |
|
| sshd, cloud-init, cloud-init-local, cloud-config, cloud-final |
|
| cloud-init |
|
| 默认没有启用任何额外服务 |
|
| 默认没有启用任何额外服务 |
|
| sshd, chronyd, waagent, cloud-init, cloud-init-local, cloud-config, cloud-final |
|
| sshd、chronyd、vmtoolsd、cloud-init |
备注:您可以自定义在系统引导期间要启用的服务。但是,自定义不会覆盖上述镜像类型默认启用的服务。
9.4. 使用 RHEL 镜像构建器 web 控制台界面创建系统镜像 复制链接链接已复制到粘贴板!
RHEL 镜像构建器是一个创建自定义系统镜像的工具。要控制 RHEL 镜像构建器并创建自定义系统镜像,您可以使用 Web 控制台界面。
9.4.1. 在 RHEL web 控制台中访问 RHEL 镜像构建器仪表盘 复制链接链接已复制到粘贴板!
使用 RHEL web 控制台的 cockpit-composer 插件,您可以使用图形界面管理镜像构建器蓝图和 compose。
先决条件
- 您必须有对该系统的根权限。
- 您已安装了 RHEL 镜像构建器。
-
您已安装了
cockpit-composer软件包。
流程
-
在主机上,在网页浏览器中打开
https://<_localhost_>:9090/。 - 以 root 用户身份登录 Web 控制台。
要显示 RHEL 镜像构建器控制,请单击窗口左上角的 按钮。
RHEL 镜像构建器仪表盘打开,列出现有的蓝图(若有的话)。
9.4.2. 在 web 控制台界面中创建蓝图 复制链接链接已复制到粘贴板!
在构建自定义 RHEL 系统镜像前,创建蓝图是一个必要的步骤。可用的自定义都是可选的。您可以使用以下选项创建自定义蓝图:
- 使用 CLI.请参阅 支持的镜像自定义。
- 使用 Web 控制台。按照以下步骤操作:
Red Hat Enterprise Linux 9.2 或更高版本,以及 Red Hat Enterprise Linux 8.8 或更高版本提供这些蓝图自定义。
先决条件
- 您已在浏览器中从 web 控制台打开了 RHEL 镜像构建器应用程序。请参阅 在 RHEL web 控制台中访问 RHEL 镜像构建器 GUI。
流程
点右上角的 。
此时会打开一个对话框向导,其中包含蓝图名称和描述字段。
在
Details页面上:- 输入蓝图的名称,以及可选的描述。
- 点击 。
可选:在
Packages页面中:-
在
Available packages搜索中,输入软件包名称 - 点 按钮将其移到 Chosen packages 字段中。
- 重复前面的步骤,以搜索并包含尽可能多的软件包。
点击 。
注意除非另有指定,否则这些自定义都是可选的。
-
在
-
在
Kernel页面上,输入内核名称和命令行参数。 在
File system页面中,您可以对镜像文件系统分区选择Use automatic partitioning或Manually configure partitions。要手动配置分区,请完成以下步骤:点 按钮。
此时会打开
Configure partitions部分,显示基于红帽标准和安全指南的配置。在下拉菜单中,提供配置分区的详情:
对于
Mount point字段,选择以下挂载点类型选项之一:-
/- root 挂载点 -
/app -
/boot -
/data -
/home -
/opt -
/srv -
/usr -
/usr/local /var您还可以向
挂载点添加附加路径,如/tmp。例如:/var作为前缀,/tmp作为额外路径会产生/var/tmp。注意根据您选择的挂载点类型,文件系统类型变为
xfs。
-
对于文件系统的
Minimum size partition字段,请输入所需的最小分区大小。在最小大小下拉菜单中,您可以使用通用的大小单位,如GiB、MiB或KiB。默认单位为GiB。注意Minimum size意味着 RHEL 镜像构建器仍然可以增加分区大小,以防它们太小而不能创建可正常工作的镜像。
要添加更多分区,请点击 按钮。如果您看到以下出错信息:
重复分区:每个挂载点处只能创建一个分区。,您可以- 点 按钮删除重复的分区。
- 为您要创建的分区选择一个新的挂载点。
- 完成分区配置后,点 。
在
Services页面中,您可以启用或禁用服务:- 输入您要启用或禁用的服务名称,用逗号、空格或按 键分开。点 。
-
输入
Enabled 服务。 -
输入
Disabled 服务。
在
Firewall页面中,设置防火墙设置:-
输入
Ports,以及您要启用或禁用的防火墙服务。 - 点 按钮,为每个区域单独管理您的防火墙规则。点 。
-
输入
在
Users页面中,按照以下步骤添加用户:- 单击 。
-
、密码 和输入用户名SSH 密钥。您还可以单击Server administrator复选框,将用户标记为特权用户。点击 。
在
Groups页面中,完成以下步骤来添加组:点 按钮:
-
输入
组名称和组 ID。您可以添加更多的组。点击 。
-
输入
在
SSH keys页面中,添加一个密钥:点 按钮。
- 输入 SSH 密钥。
-
输入
用户。点 。
在
Timezone页面上,设置您的时区设置:在
Timezone字段中,输入您要添加到系统镜像的时区。例如,添加以下时区格式:"US/Eastern"。如果您没有设置时区,系统将使用 Universal Time, Coordinated (UTC)作为默认值。
-
输入
NTP 服务器。点 。
在
Locale页面中完成以下步骤:-
在
Keyboard搜索字段中,输入您要添加到系统镜像的软件包名称。例如:["en_US.UTF-8"]。 -
在
Languages搜索字段中,输入您要添加到系统镜像的软件包名称。例如:"us"。点 。
-
在
在
Others页面中,完成以下步骤:-
在
Hostname字段中输入您要添加到系统镜像的主机名。如果没有添加主机名,操作系统会决定主机名。 -
只对 Simplifier Installer 镜像强制:在
Installation Devices字段中输入您的系统镜像的有效节点。例如:dev/sda1。点击 。
-
在
仅在为 FDO 构建镜像时强制实现:在
FIDO device onboarding页面中完成以下步骤:在
Manufacturing server URL字段中输入以下信息:-
在
DIUN public key insecure字段中,输入不安全的公钥。 -
在
DIUN public key hash字段中,输入公钥哈希。 -
在
DIUN public key root certs字段中,输入公钥根证书。点 。
-
在
在
OpenSCAP页面中,完成以下步骤:-
在
Datastream字段中输入您要添加到系统镜像的datastream补救指令。 -
在
Profile ID字段中,输入您要添加到系统镜像的profile_id安全配置文件。点击 。
-
在
仅在构建使用 Ignition 的镜像时强制实现:在
Ignition页面中,完成以下步骤:-
在
Firstboot URL字段中输入您要添加到系统镜像的软件包名称。 -
在
Embedded Data字段中,拖动或上传您的文件。点 。
-
在
-
.在
Review页面中,查看蓝图的详情。点 。
RHEL 镜像构建器视图打开,列出现有的蓝图。
9.4.3. 在 RHEL 镜像构建器 web 控制台界面中导入蓝图 复制链接链接已复制到粘贴板!
您可以导入并使用已存在的蓝图。系统会自动解决所有依赖项。
先决条件
- 您已在浏览器中从 web 控制台打开了 RHEL 镜像构建器应用程序。
- 您有一个要导入到 RHEL 镜像构建器 web 控制台界面中使用的蓝图。
流程
-
在 RHEL 镜像构建器仪表盘上,点 。此时会打开
Import blueprint向导。 -
在
Upload字段中,拖放或上传现有的蓝图。此蓝图可以是TOML或JSON格式。 - 点 。仪表盘列出了您导入的蓝图。
验证
当您点您导入的蓝图时,您可以访问带有您导入蓝图的所有自定义的仪表盘。
要验证已为导入蓝图选择的软件包,请导航到
Packages选项卡。- 要列出所有软件包依赖项,请单击 。列表是可搜索的,并可排序。
后续步骤
可选:要修改任何自定义:
-
在
Customizations仪表盘中,点击您要更改的自定义。另外,您可以点击 来导航到所有可用的自定义选项。
-
在
9.4.4. 从 RHEL 镜像构建器 web 控制台界面导出蓝图 复制链接链接已复制到粘贴板!
您可以导出蓝图以便在另一个系统中使用自定义。您可以以 TOML 或 JSON 格式导出蓝图。这两个格式在 CLI 和 API 接口中都可以工作。
先决条件
- 您已在浏览器中从 web 控制台打开了 RHEL 镜像构建器应用程序。
- 您有一个要导出的蓝图。
流程
- 在镜像构建器仪表盘上,选择您要导出的蓝图。
-
点
Export blueprint。此时会打开Export blueprint向导。 点 按钮将蓝图下载为一个文件,或者点击 按钮将蓝图复制到剪贴板。
- 可选:点 按钮来复制蓝图。
验证
- 在文本编辑器中打开导出的蓝图,以检查并审核它。
9.4.5. 在 web 控制台界面中使用 RHEL 镜像构建器创建系统镜像 复制链接链接已复制到粘贴板!
您可以通过完成以下步骤,从蓝图创建一个自定义 RHEL 系统镜像。
先决条件
- 在浏览器中从 web 控制台打开 RHEL 镜像构建器应用程序。
- 您创建了蓝图。
流程
- 在 RHEL 镜像构建器仪表盘中,点 blueprint 标签页。
- 在蓝图表中,找到您要构建镜像的蓝图。
- 在所选蓝图的右侧,点 。Create image 对话框向导将打开。
在 Image 输出页面中完成以下步骤:
- 从 Select a blueprint 列表中,选择您想要的镜像类型。
从 Image output type 列表中,选择您想要的镜像输出类型。
根据您选择的镜像类型,您需要添加更多详细信息。
- 点击 。
在 Review 页面上,查看关于镜像创建的详情,并点 。
镜像构建启动,需要 20 分钟完成。
验证
镜像完成构建后,您可以:
下载镜像。
- 在 RHEL 镜像构建器仪表盘上,点 Node options(⫶) 菜单,然后选择 Download image。
下载镜像的日志以检查元素,并验证是否发现了任何问题。
- 在 RHEL 镜像构建器仪表盘上,点 Node options(⫶) 菜单,然后选择 Download logs。
9.5. 使用 RHEL 镜像构建器准备并上传云镜像 复制链接链接已复制到粘贴板!
RHEL 镜像构建器可以创建准备在各种云平台上使用的自定义系统镜像。要在云中使用自定义的 RHEL 系统镜像,请使用 RHEL 镜像构建器,使用所选的输出类型创建系统镜像,配置您的系统以上传镜像,并将镜像上传到您的云帐户中。您可以通过 RHEL web 控制台中的 Image Builder 应用程序将自定义镜像推送到云,其可用于我们支持的服务提供商的子集,如 AWS 和 Microsoft Azure 云。请参阅 创建镜像并直接将其自动上传到 AWS Cloud AMI 和 创建 VHD 镜像并直接将其自动上传到 Microsoft Azure 云。
9.5.1. 准备 AMI 镜像,并将其上传到 AWS 复制链接链接已复制到粘贴板!
您可以创建自定义镜像,并使用 RHEL 镜像构建器,手动或自动将其更新到 AWS 云。
9.5.1.1. 准备手动上传 AWS AMI 镜像 复制链接链接已复制到粘贴板!
在上传 AWS AMI 镜像前,您必须配置系统来上传镜像。
先决条件
- 您必须在 AWS IAM account manager 中配置了一个 Access Key ID。
- 您必须准备一个可写的 S3 存储桶。请参阅 创建 S3 存储桶。
流程
安装 Python 3 和
pip工具:yum install python3 python3-pip
# yum install python3 python3-pipCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
pip安装 AWS 命令行工具 :pip3 install awscli
# pip3 install awscliCopy to Clipboard Copied! Toggle word wrap Toggle overflow 设置您的配置文件。终端提示您提供凭证、地区和输出格式:
aws configure AWS Access Key ID [None]: AWS Secret Access Key [None]: Default region name [None]: Default output format [None]:
$ aws configure AWS Access Key ID [None]: AWS Secret Access Key [None]: Default region name [None]: Default output format [None]:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为存储桶定义名称,并创建存储桶:
BUCKET=bucketname aws s3 mb s3://$BUCKET
$ BUCKET=bucketname $ aws s3 mb s3://$BUCKETCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用实际的存储桶名称替换
bucketname。它必须是全局唯一的名称。因此,您的存储桶会被创建。要授予访问 S3 存储桶的权限,如果您还没有这样做,请在 AWS Identity and Access Management (IAM) 中创建一个
vmimportS3 角色:创建一个 JSON 格式的带有信任策略配置的
trust-policy.json文件。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个 JSON 格式的带有角色策略配置的
role-policy.json文件。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
trust-policy.json文件为您的 Amazon Web Services 帐户创建一个角色:aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.json
$ aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
role-policy.json文件嵌入一个内联策略文档:aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file://role-policy.json
$ aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file://role-policy.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.5.1.2. 使用 CLI 手动将 AMI 镜像上传到 AWS 复制链接链接已复制到粘贴板!
您可以使用 RHEL 镜像构建器构建 ami 镜像,并使用 CLI 手动将它们直接上传到 Amazon AWS Cloud 服务提供商。
流程
使用文本编辑器,使用以下内容创建配置文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将字段中的值替换为您的
accessKeyID、secretAccessKey、bucket和region的凭证。IMAGE_KEY值是要上传到 EC2 的虚拟机镜像的名称。- 将文件保存为 CONFIGURATION-FILE.toml,再关闭文本编辑器。
启动 compose 来将其上传到 AWS:
composer-cli compose start blueprint-name image-type image-key configuration-file.toml
# composer-cli compose start blueprint-name image-type image-key configuration-file.tomlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 替换:
- 使用您创建的蓝图名称替换 blueprint-name
-
使用
ami镜像类型替换 image-type。 - 使用要上传到 EC2 的虚拟机镜像的名称替换 image-key。
带有云提供商的配置文件名称的 configuration-file.toml。
注意您必须有要将自定义镜像发送到的存储桶的正确 AWS 身份和访问管理(IAM)设置。在将镜像上传到存储桶前,您必须先将策略设置为存储桶。
检查镜像构建的状态:
composer-cli compose status
# composer-cli compose statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在映像上传过程完成后,您可以看到"FINISHED"状态。
验证
确认镜像上传成功:
-
访问菜单中的 EC2,并在 AWS 控制台中选择正确的区域。镜像必须具有
available状态,以指示它已被成功上传。 - 在仪表盘上,选择您的镜像并点击 。
9.5.1.3. 创建镜像并自动将其上传到 AWS Cloud AMI 复制链接链接已复制到粘贴板!
您可以使用 RHEL 镜像构建器创建 (.raw) 镜像,并选择 Upload to AWS 复选框,自动将您创建的输出镜像直接推送到 Amazon AWS Cloud AMI 服务提供商。
先决条件
-
您必须有
root或wheel组用户对系统的访问权限。 - 您已在浏览器中打开了 RHEL web 控制台的 RHEL 镜像构建器界面。
- 您已创建了蓝图。请参阅 在 web 控制台界面中创建蓝图。
- 您必须在 AWS IAM account manager 中配置了一个 Access Key ID。
- 您必须具有一个可写的 S3 存储桶。
流程
- 在 RHEL 镜像构建器仪表盘中,点之前创建的 blueprint name。
- 选择 选项卡。
点 创建自定义镜像。
Create Image 窗口打开。
-
在 Type 下拉菜单中选择
Amazon Machine Image Disk (.raw)。 - 选中 Upload to AWS 复选框,来将您的镜像上传到 AWS 云,然后点 。
要验证您是否可以访问 AWS ,请在对应的字段中输入您的
"AWS access key ID"和"AWS secret access key"。点击 。注意您只能在创建新访问密钥 ID 时查看 AWS secret 访问密钥。如果您不知道您的 Secret 密钥,请生成一个新的 Access Key ID。
-
在
Image name字段中输入镜像名称,在Amazon S3 bucket name字段中输入 Amazon bucket 名称,并为您要添加自定义镜像的存储桶输入AWS region字段。点击 。 查看信息并点 。
可选,点 来修改任何不正确的详情。
注意您必须具有要发送自定义镜像的存储桶的正确 IAM 设置。此流程使用 IAM 导入和导出,因此您必须在将镜像上传到存储桶前为存储桶设置 策略。如需更多信息,请参阅 IAM 用户所需的权限。
-
在 Type 下拉菜单中选择
右上角的弹出窗口告诉您保存的进度。它还告知镜像创建过程、创建此镜像的过程以及后续的上传到 AWS Cloud。
完成这个过程后,您可以看到 镜像构建完成状态。
在浏览器中,访问 Service→EC2。
-
在 AWS 控制台仪表盘菜单中,选择 correct region。镜像必须具有
Available状态,以指示它已被上传。 - 在 AWS 仪表盘上,选择您的镜像并点 。
-
在 AWS 控制台仪表盘菜单中,选择 correct region。镜像必须具有
- 此时会打开一个新窗口。根据启动镜像所需的资源选择实例类型。点 。
- 查看您的实例启动详情。如果需要进行任何更改,您可以编辑任何部分。点
在启动实例之前,选择一个访问它的公钥。
您可以使用您已有的密钥对,也可以创建新的密钥对。
按照以下步骤在 EC2 中创建新密钥对,并将它连接到新实例。
- 在下拉菜单中选择 "Create a new key pair"。
- 输入新密钥对名称。它生成一个新的密钥对。
- 点 "下载密钥对" 在您的本地系统中保存新密钥对。
然后,您可以点 启动您的实例。
您可以检查实例的状态,它显示为 Initializing。
- 实例状态变为 running 后,按钮将变为可用。
点 。此时会出现一个窗口,其中包含有关如何使用 SSH 进行连接的说明。
- 选择 A standalone SSH client 作为首选连接方法并打开终端。
在您存储私钥的位置,确保您的密钥是公开可见的,以便 SSH 可以正常工作。要做到这一点,请运行以下命令:
chmod 400 <_your-instance-name.pem_>
$ chmod 400 <_your-instance-name.pem_>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用其公共 DNS 连接到您的实例:
ssh -i <_your-instance-name.pem_> ec2-user@<_your-instance-IP-address_>
$ ssh -i <_your-instance-name.pem_> ec2-user@<_your-instance-IP-address_>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 键入
yes以确认您要继续连接。因此,您通过 SSH 连接到您的实例。
验证
- 检查在使用 SSH 连接到您的实例的过程中是否能够执行任何操作。
9.5.2. 准备 VHD 镜像,并将其上传到 Microsoft Azure 复制链接链接已复制到粘贴板!
您可以创建自定义镜像,并使用 RHEL 镜像构建器,手动或自动将它们更新到 Microsoft Azure 云。
9.5.2.1. 准备手动上传 Microsoft Azure VHD 镜像 复制链接链接已复制到粘贴板!
要创建一个可手动上传到 Microsoft Azure 云的 VHD 镜像,您可以使用 RHEL 镜像构建器。
先决条件
- 您必须有 Microsoft Azure 资源组和存储帐户。
-
您已安装了 Python。
AZ CLI工具依赖 python。
流程
导入 Microsoft 存储库密钥:
rpm --import https://packages.microsoft.com/keys/microsoft.asc
# rpm --import https://packages.microsoft.com/keys/microsoft.ascCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下信息创建一个本地
azure-cli.repo存储库:将azure-cli.repo存储库保存在/etc/yum.repos.d/下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 安装 Microsoft Azure CLI:
yumdownloader azure-cli rpm -ivh --nodeps azure-cli-2.0.64-1.el7.x86_64.rpm
# yumdownloader azure-cli # rpm -ivh --nodeps azure-cli-2.0.64-1.el7.x86_64.rpmCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意下载的 Microsoft Azure CLI 软件包版本可能会因当前可用的版本而异。
运行 Microsoft Azure CLI:
az login
$ az loginCopy to Clipboard Copied! Toggle word wrap Toggle overflow 终端会显示以下信息
Note, we have launched a browser for you to login.For old experience with device code, use "az login --use-device-code.然后,终端会打开浏览器,其中包含可从其登录 https://microsoft.com/devicelogin 的链接。注意如果您正在运行一个远程(SSH)会话,则登录页面链接不会在浏览器中打开。在这种情况下,您可以将链接复制到浏览器,并登录以验证您的远程会话。要登录,使用网页浏览器打开页面 https://microsoft.com/devicelogin 并输入要进行身份验证的设备代码。
列出 Microsoft Azure 中存储帐户的密钥:
az storage account keys list --resource-group <resource_group_name> --account-name <storage_account_name>
$ az storage account keys list --resource-group <resource_group_name> --account-name <storage_account_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 resource-group-name 替换为 Microsoft Azure 资源组的名称,将 storage-account-name 替换为 Microsoft Azure 存储帐户的名称。
注意您可以使用以下命令列出可用资源:
az resource list
$ az resource listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 记录上一命令输出中
key1的值。创建存储容器:
az storage container create --account-name <storage_account_name>\ --account-key <key1_value> --name <storage_account_name>
$ az storage container create --account-name <storage_account_name>\ --account-key <key1_value> --name <storage_account_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 storage-account-name 替换为存储帐户的名称。
9.5.2.2. 手动将 VHD 镜像上传到 Microsoft Azure 云 复制链接链接已复制到粘贴板!
在创建了自定义 VHD 镜像后,您可以手动将其上传到 Microsoft Azure 云。
先决条件
- 必须设置您的系统以上传 Microsoft Azure VHD 镜像。请参阅 准备上传 Microsoft Azure VHD 镜像。
您必须有由 RHEL 镜像构建器创建的 Microsoft Azure VHD 镜像。
-
在 GUI 中,使用
Azure Disk Image (.vhd)镜像类型。 -
在 CLI 中,使用
vhd输出类型。
-
在 GUI 中,使用
流程
将镜像推送到 Microsoft Azure 并从中创建一个实例:
az storage blob upload --account-name <_account_name_> --container-name <_container_name_> --file <_image_-disk.vhd> --name <_image_-disk.vhd> --type page ...
$ az storage blob upload --account-name <_account_name_> --container-name <_container_name_> --file <_image_-disk.vhd> --name <_image_-disk.vhd> --type page ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上传到 Microsoft Azure Blob 存储后,从其创建一个 Microsoft Azure 镜像:
az image create --resource-group <_resource_group_name_> --name <_image_>-disk.vhd --os-type linux --location <_location_> --source https://$<_account_name_>.blob.core.windows.net/<_container_name_>/<_image_>-disk.vhd - Running ...
$ az image create --resource-group <_resource_group_name_> --name <_image_>-disk.vhd --os-type linux --location <_location_> --source https://$<_account_name_>.blob.core.windows.net/<_container_name_>/<_image_>-disk.vhd - Running ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意因为您使用 RHEL 镜像构建器生成混合镜像的镜像支持 V1 = BIOS 和 V2 = UEFI 实例类型,所以您可以指定
--hyper-v-generation参数。默认的实例类型是 V1。
验证
使用 Microsoft Azure 门户创建实例,或者使用以下命令:
az vm create --resource-group <_resource_group_name_> --location <_location_> --name <_vm_name_> --image <_image_>-disk.vhd --admin-username azure-user --generate-ssh-keys - Running ...
$ az vm create --resource-group <_resource_group_name_> --location <_location_> --name <_vm_name_> --image <_image_>-disk.vhd --admin-username azure-user --generate-ssh-keys - Running ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
通过 SSH 使用您的私钥访问生成的实例。以
azure-user用户身份登录。此用户名在上一步中设置了。
9.5.2.3. 创建 VHD 镜像,并自动将其上传到 Microsoft Azure 云 复制链接链接已复制到粘贴板!
您可以使用 RHEL 镜像构建器创建 .vhd 镜像,该镜像将被自动上传到 Microsoft Azure Cloud 服务提供商的 Blob 存储中。
先决条件
- 有对系统的 root 访问权限。
- 您有访问 RHEL web 控制台的 RHEL 镜像构建器界面的权限。
- 您创建了蓝图。请参阅在 web 控制台界面中创建 RHEL 镜像构建器蓝图。
- 您已创建了 Microsoft 存储帐户。
- 您有一个可写入 Blob Storage。
流程
- 在 RHEL 镜像构建器仪表盘中,选择要使用的蓝图。
- 点 选项卡。
点 创建自定义的
.vhd镜像。Create image 向导将打开。
-
从 Type 下拉菜单中选择
Microsoft Azure (.vhd)。 - 选中 Upload to Azure 复选框,来将镜像上传到 Microsoft Azure Cloud。
- 输入 Image Size ,并点 。
-
从 Type 下拉菜单中选择
在 Upload to Azure 页面行,输入以下信息:
在 Authentication 页面上,输入:
- 您的 存储帐户 名称。您可以在 Storage account 页面的 Microsoft Azure 门户 中找到它。
- 您的存储访问密钥 :您可以在 Access Key Storage 页面中找到它。
- 点击 。
在 Authentication 页面上,输入:
- 镜像名称。
- 存储容器.它是您将镜像上传到的 blob 容器。您可以在 Microsoft Azure 门户 的 Blob service 部分中找到它。
- 点击 。
在 Review 页面上,点 。RHEL 镜像构建器和上传进程启动。
访问推送到 Microsoft Azure Cloud 的镜像。
- 访问 Microsoft Azure 门户网站。
- 在搜索栏中,输入"storage account",然后从列表中单击 Storage accounts。
- 在搜索栏中输键入"Images",然后在 Services 下选择第一个条目。您将被重定向到 镜像仪表盘。
- 在导航面板上,单击 Containers。
-
查找您创建的容器。容器中是您使用 RHEL 镜像构建器创建并推送的
.vhd文件。
验证
验证您能否创建虚拟机镜像并启动它。
- 在搜索栏中,输入镜像帐户,并单击列表中的 Images。
- 单击 。
- 从下拉列表中,选择您之前使用的资源组。
- 输入镜像的名称。
- 对于 OS type,请选择 Linux。
- 对于 VM generation,请选择 Gen 2。
- 在 Storage Blob 下,点 ,并点存储账户和容器,直到您到达 VHD 文件。
- 点页面末尾的 Select。
- 选择一个帐户类型,例如 Standard SSD。
- 点 ,然后点 。等待几分钟,以便创建镜像。
要启动虚拟机,请按照以下步骤执行:
- 点 。
- 从标题的菜单栏中,单击 。
- 输入虚拟机的名称。
- 完成 Size 和 Administrator account 部分。
点 ,然后点 。您可以查看部署进度。
部署完成后,单击虚拟机名称,以检索使用 SSH 连接的实例的公用 IP 地址。
- 打开一个终端,创建一个 SSH 连接来连接到虚拟机。
9.5.2.4. 上传 VMDK 镜像并在 vSphere 中创建 RHEL 虚拟机 复制链接链接已复制到粘贴板!
使用 RHEL 镜像构建器,您可以创建自定义的 VMware vSphere 系统镜像,可以是 Open virtualization 格式(.ova),也可以是 Virtual disk (.vmdk)格式。您可以将这些镜像上传到 VMware vSphere 客户端。您可以使用 govc import.vmdk CLI 工具将 .vmdk 或 .ova 镜像上传到 VMware vSphere。您创建的 vmdk 包含安装的 cloud-init 软件包,您可以使用它,通过使用用户数据来提供给用户:
不支持使用 VMware vSphere GUI 上传 vmdk 镜像。
先决条件
- 您已使用用户名和密码自定义创建了一个蓝图。
-
您已使用 RHEL 镜像构建器创建了
.ova或.vmdk格式的 VMware vSphere 镜像,并将其下载到主机系统。 -
您安装并配置了
govcCLI 工具,以便能够使用import.vmdk命令。
流程
使用 GOVC 环境变量在用户环境中配置以下值:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 进入到您下载 VMware vSphere 镜像的目录。
按照以下步骤在 vSphere 上启动 VMware vSphere 镜像:
将 VMware vSphere 镜像导入到 vSphere:
govc import.vmdk ./composer-api.vmdk foldername
$ govc import.vmdk ./composer-api.vmdk foldernameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 对于
.ova格式:govc import.ova ./composer-api.ova foldername
$ govc import.ova ./composer-api.ova foldernameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 vSphere 中创建虚拟机而不开机:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于
.ova格式,将行-firmware=efi -disk=”foldername/composer-api.vmdk” \替换为 `-firmware=efi -disk=”foldername/composer-api.ova”\打开虚拟机:
govc vm.power -on vmname
govc vm.power -on vmnameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检索虚拟机 IP 地址:
govc vm.ip vmname
govc vm.ip vmnameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用您在蓝图中指定的用户名和密码,使用 SSH 登录到虚拟机:
ssh admin@<_ip_address_of_the_vm_>
$ ssh admin@<_ip_address_of_the_vm_>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您使用
govc datastore.upload命令将.vmdk镜像从本地主机复制到目的地,则不支持使用生成的镜像。在 vSphere GUI 中没有使用import.vmdk命令的选项,因此 vSphere GUI 不支持直接上传。因此,.vmdk镜像无法从 vSphere GUI 使用。
9.5.2.5. 使用镜像构建器 GUI 创建 VMDK 镜像,并自动将其上传到 vSphere 复制链接链接已复制到粘贴板!
您可以使用 RHEL 镜像构建器 GUI 工具构建 VMware 镜像,并自动将镜像直接推送到 vSphere 实例中。这可避免下载镜像文件并手动推送它。您创建的 vmdk 包含安装的 cloud-init 软件包,您可以使用它来使用用户数据提供给用户,例如:要使用 RHEL 镜像构建器构建 .vmdk 镜像,并将它们直接推送到 vSphere 实例服务提供商,请按照以下步骤执行:
先决条件
-
您是
root或weldr组的成员。 - 您已在浏览器中打开了 link:https://localhost:9090/RHEL 镜像构建器。
- 您已创建了蓝图。请参阅 在 web 控制台界面中创建一个 RHEL 镜像构建器蓝图。
- 您有一个 vSphere 帐户。
流程
- 对于您创建的蓝图,点 选项卡。
点 创建自定义镜像。
此时将打开 Image 类型窗口。
在 Image 类型 窗口中:
- 从下拉菜单中选择类型:VMware vSphere (.vmdk)。
- 选中 Upload to VMware 复选框,将镜像上传到 vSphere。
- 可选:设置您要实例化的镜像的大小。最小的默认大小为 2 GB。
- 点击 。
在 Upload to VMware 窗口中,在 Authentication 下输入以下详情:
- 用户名 :vSphere 帐户的用户名。
- Password :vSphere 帐户的密码。
在 Upload to VMware 窗口中,在 Destination 下输入有关镜像上传目的地的以下详情:
- Image name :镜像的名称。
- 主机 :VMware vSphere 的 URL。
- cluster:集群的名称。
- 数据中心 :数据中心的名称。
- Data store :数据存储的名称。
- 点 Next。
在 Review 窗口中,查看镜像创建的详情并点 。
您可以点 来修改任何不正确的详情。
RHEL 镜像构建器将 RHEL vSphere 镜像的组成添加到队列中,创建镜像并将其上传到您指定的 vSphere 实例的集群上。
注意完成镜像构建和上传过程需要几分钟时间。
完成这个过程后,您可以看到 镜像构建完成状态。
验证
成功完成镜像状态上传后,您可以从上传并登录的镜像创建一个虚拟机(VM)。要做到这一点:
- 访问 VMware vSphere 客户端。
- 在您指定的 vSphere 实例的 Cluster 中搜索镜像。
- 选择您上传的镜像。
- 右键点所选镜像。
点
New Virtual Machine。此时将打开 New Virtual Machine 窗口。
在 New Virtual Machine 窗口中提供以下详情:
-
选择
New Virtual Machine。 - 为您的虚拟机选择一个名称和文件夹。
- 选择计算机资源:为此操作选择一个目标计算机资源。
- 选择存储:例如,选择 NFS-Node1
- 选择兼容性:映像应仅为 BIOS。
- 选择客户端操作系统:例如,选择 Linux 和 Red Hat Fedora (64 位)。
- 自定义硬件 :创建虚拟机时,在右上角的 Device Configuration 按钮,删除默认的 New Hard Disk,并使用下拉菜单来选择 Existing Hard Disk 磁盘镜像:
- 准备完成:检查详情,再单击 Finish 以创建镜像。
-
选择
导航至 VM 选项卡。
- 从列表中选择您创建的虚拟机。
- 单击面板中的 Start 按钮。此时将显示一个新窗口,显示 VM 映像加载。
- 使用您为蓝图创建的凭证登录。
您可以验证添加到蓝图中的软件包是否已安装。例如:
rpm -qa | grep firefox
$ rpm -qa | grep firefoxCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.5.3. 准备自定义 GCE 镜像,并将其上传到 GCP 复制链接链接已复制到粘贴板!
您可以创建自定义镜像,然后使用 RHEL 镜像构建器将其自动更新到 Oracle Cloud Infrastructure (OCI)实例。
9.5.3.1. 使用 RHEL 镜像构建器将镜像上传到 GCP 复制链接链接已复制到粘贴板!
使用 RHEL 镜像构建器,您可以构建 gce 镜像,为用户或 GCP 服务帐户提供凭证,然后将 gce 镜像直接上传到 GCP 环境。
9.5.3.1.1. 使用 CLI 配置 gce 镜像,并将其上传到 GCP 复制链接链接已复制到粘贴板!
使用凭证建立一个配置文件,以使用 RHEL 镜像构建器 CLI 将 gce 镜像上传到 GCP。
您无法手动将 gce 镜像导入到 GCP,因为镜像不能引导。您必须使用 gcloud 或 RHEL 镜像构建器上传它。
先决条件
您有一个有效的 Google 帐户和凭证,以便将镜像上传到 GCP。凭据可以从用户帐户或服务帐户获取。与凭证关联的帐户必须至少分配以下 IAM 角色:
-
roles/storage.admin- 用于创建和删除存储对象 -
roles/compute.storageAdmin- 将虚拟机镜像导入到 Compute Engine。
-
- 您有一个现有的 GCP 存储桶。
流程
使用文本编辑器创建一个包含以下内容的
gcp-config.toml配置文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
GCP_BUCKET指向现有的存储桶。它用于存储正在上传的镜像的中间存储对象。 -
GCP_STORAGE_REGION既是一个常规的 Google 存储区域,又是一个双区域或多区域。 -
OBJECT_KEY是中间存储对象的名称。它在上传过程前不能存在,并在上传过程完成后被删除。如果对象名称不以.tar.gz结尾,则扩展会自动添加到对象名称中。 GCP_CREDENTIALS是从 GCP 下载的凭证 JSON 文件的Base64编码的方案。凭证决定了 GCP 将镜像上传到的项目。注意如果您使用不同的机制来使用 GCP 进行身份验证,在
gcp-config.toml文件中指定GCP_CREDENTIALS是可选的。有关其他验证方法,请参阅 使用 GCP 进行验证 。
-
从 GCP 下载的 JSON 文件中检索
GCP_CREDENTIALS。sudo base64 -w 0 cee-gcp-nasa-476a1fa485b7.json
$ sudo base64 -w 0 cee-gcp-nasa-476a1fa485b7.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用附加镜像名称和云供应商配置集创建 compose:
sudo composer-cli compose start BLUEPRINT-NAME gce IMAGE_KEY gcp-config.toml
$ sudo composer-cli compose start BLUEPRINT-NAME gce IMAGE_KEY gcp-config.tomlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 镜像构建、上传和云注册过程最多可能需要十分钟才能完成。
验证
验证镜像状态为 FINISHED:
sudo composer-cli compose status
$ sudo composer-cli compose statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.5.3.1.2. RHEL 镜像构建器如何对不同 GCP 凭证的身份验证顺序进行排序 复制链接链接已复制到粘贴板!
您可以在 RHEL 镜像构建器中使用几种不同类型的凭证来使用 GCP 进行身份验证。如果 RHEL 镜像构建器配置被设置为使用多组凭证使用 GCP 进行身份验证,它会按以下首选顺序使用凭证:
-
在配置文件中,使用
composer-cli命令指定的凭证。 -
凭证在
osbuild-composerworker 配置中被配置。 Google GCP SDK库中的应用程序默认凭证,它尝试使用以下选项自动找到一个身份验证的方法:- 如果设置了 GOOGLE_APPLICATION_CREDENTIALS 环境变量,应用程序默认凭据会尝试加载并从文件中使用由变量指向的凭证。
应用默认凭据尝试使用附加到运行代码的资源的服务帐户进行身份验证。例如,Google Compute Engine 虚拟机。
注意您必须使用 GCP 凭证来决定将镜像上传到的 GCP 项目。因此,除非要将所有镜像上传到同一 GCP 项目,您必须使用
composer-cli命令指定gcp-config.toml配置文件中的凭证。
9.5.3.1.2.1. 使用 composer-cli 命令指定 GCP 凭证 复制链接链接已复制到粘贴板!
您可以在上传目标配置 gcp-config.toml 文件中指定 GCP 验证凭证。使用 Google 帐户凭证 JSON 文件的 Base64 编码方案来节省时间。
流程
运行以下命令,使用存储在
GOOGLE_APPLICATION_CREDENTIALS环境变量中的路径获取 Google 帐户凭证文件的编码内容:base64 -w 0 "${GOOGLE_APPLICATION_CREDENTIALS}"$ base64 -w 0 "${GOOGLE_APPLICATION_CREDENTIALS}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在上传目标配置
gcp-config.toml文件中,设置凭证:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.5.3.1.2.2. 在 osbuild-composer worker 配置中指定凭证 复制链接链接已复制到粘贴板!
您可以将 GCP 身份验证凭据配置为全局用于 GCP 用于所有镜像构建。这样,如果您想要将镜像导入到同一 GCP 项目,则您可以对上传到 GCP 的所有镜像使用相同的凭据。
流程
在
/etc/osbuild-worker/osbuild-worker.tomlworker 配置中,设置以下凭证值:[gcp] credentials = "PATH_TO_GCP_ACCOUNT_CREDENTIALS"
[gcp] credentials = "PATH_TO_GCP_ACCOUNT_CREDENTIALS"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.5.4. 准备自定义镜像,并将其直接上传到 OCI 复制链接链接已复制到粘贴板!
您可以创建自定义镜像,然后使用 RHEL 镜像构建器将其自动更新到 Oracle Cloud Infrastructure (OCI)实例。
9.5.4.1. 创建自定义镜像,并自动将其上传到 OCI 复制链接链接已复制到粘贴板!
使用 RHEL 镜像构建器,构建自定义镜像,并自动直接将其推送到 Oracle Cloud Infrastructure (OCI)实例。然后,您可以从 OCI 仪表盘中启动镜像实例。
先决条件
-
您有访问系统的
root或weldr组用户权限。 - 您有一个 Oracle Cloud 帐户。
- 您必须为管理员授予 OCI 策略中的安全访问权限。
-
您已在您选择的
OCI_REGION中创建了 OCI Bucket。
流程
- 在浏览器中打开 web 控制台的 RHEL 镜像构建器界面。
- 点击 。Create blueprint 向导将打开。
- 在 Details 页面中,输入蓝图的名称,以及可选的描述。点 。
- 在 Packages 页面中,选择要在镜像中包含的组件和软件包。点 。
- 在 Customizations 页面中,配置您要用于蓝图的自定义。点 。
- 在 Review 页面上,点 。
- 要创建镜像,请单击 。Create image 向导将打开。
在 Image 输出页面中完成以下步骤:
- 在 "Select a blueprint" 下拉菜单中选择您想要的蓝图。
-
从 "Image output type" 下拉菜单中选择
Oracle Cloud Infrastructure (.qcow2)。 - 选中 "Upload OCI 复选框,来将您的镜像上传到 OCI。
- 输入 "镜像大小 "。点 。
在 Upload to OCI - Authentication 页面中,输入以下强制详情:
- 用户 OCID:您可以在显示用户详情的页面的控制台中找到它。
- 私钥
在 Upload to OCI - Destination 页面中,输入以下强制详情,并点 。
- 镜像名称:要上传的镜像的名称。
- OCI 存储桶
- bucket 命名空间
- bucket 区域
- bucket 划分
- bucket 租户
- 查看向导中的详情并点 。
RHEL 镜像构建器将 RHEL .qcow2 镜像的组成添加到队列中。
验证
- 访问 OCI 仪表板 → Custom Images。
- 选择您为镜像指定的 Compartment,并在 Import image 表中找到镜像。
- 点镜像名称并验证镜像信息。
9.5.5. 准备自定义 QCOW2 镜像,并将其上传到 OpenStack 复制链接链接已复制到粘贴板!
您可以使用 RHEL 镜像构建器创建自定义 .qcow2 镜像,并手动将它们上传到 OpenStack 云部署。
9.5.5.1. 将 QCOW2 镜像上传到 OpenStack 复制链接链接已复制到粘贴板!
使用 RHEL 镜像构建器工具,您可以创建适合上传到 OpenStack 云部署的自定义 .qcow2 镜像,并在那里启动实例。RHEL 镜像构建器以 QCOW2 格式创建镜像,但针对 OpenStack 有进一步的更改。
不要将使用 RHEL 镜像构建器创建的通用 QCOW2 镜像类型输出格式与 OpenStack 镜像类型混淆,后者也是 QCOW2 格式,但包含特定于 OpenStack 的进一步更改。
先决条件
- 您已创建了蓝图。
流程
启动
QCOW2镜像的 compose。composer-cli compose start blueprint_name openstack
# composer-cli compose start blueprint_name openstackCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查构建的状态。
composer-cli compose status
# composer-cli compose statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 镜像构建完成后,您可以下载镜像。
下载
QCOW2镜像:composer-cli compose image UUID
# composer-cli compose image UUIDCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 访问 OpenStack 仪表盘,并单击 。
-
在左侧菜单中,选择
Admin选项卡。 从
系统面板中,点镜像。Create An Image向导将打开。在
Create An Image向导中:- 输入镜像的名称
-
点
Browse,上传QCOW2镜像。 -
从
格式下拉列表中,选择QCOW2 - QEMU Emulator。 点 。
在左侧菜单中,选择
Project选项卡。-
从
Compute菜单中,选择Instances。 单击 按钮。
此时会打开
Launch Instance向导。-
在
Details页面中,输入实例的名称。点 。 -
在
Source页面中,选择您上传的镜像的名称。点 。 在
Flavor页面中,选择最适合您的需要的机器资源。点 。
-
从
-
您可以使用任何机制(CLI 或 OpenStack Web UI)来从镜像运行镜像实例。通过 SSH 使用您的私钥访问生成的实例。以
cloud-user用户身份登录。
9.5.6. 准备自定义 RHEL 镜像,并将其上传到 Alibaba Cloud 复制链接链接已复制到粘贴板!
您可以将使用 RHEL 镜像构建器创建的自定义 .ami 镜像上传到 Alibaba Cloud。
9.5.6.1. 准备将自定义 RHEL 镜像上传到 Alibaba Cloud 复制链接链接已复制到粘贴板!
要将自定义 RHEL 镜像部署到 Alibaba Cloud 中,您首先需要验证自定义镜像。镜像需要特定的配置才能成功引导,因为在使用镜像前,Alibaba Cloud 需要自定义镜像来满足某些要求。
RHEL 镜像构建器生成符合 Alibaba 要求的镜像。但是,红帽建议使用 Alibaba image_check 工具来验证镜像的格式合规性。
先决条件
- 您必须已使用 RHEL 镜像构建器创建了一个 Alibaba 镜像。
流程
- 使用 Alibaba image_check 工具连接到包含您要检查的镜像的系统。
下载 image_check 工具:
curl -O https://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/73848/cn_zh/1557459863884/image_check
$ curl -O https://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/73848/cn_zh/1557459863884/image_checkCopy to Clipboard Copied! Toggle word wrap Toggle overflow 更改镜像合规工具的文件权限:
chmod +x image_check
# chmod +x image_checkCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行命令启动镜像合规工具检查:
./image_check
# ./image_checkCopy to Clipboard Copied! Toggle word wrap Toggle overflow 该工具会验证系统配置并生成屏幕中显示的报告。image_check 工具将此报告保存在与运行镜像合规工具同样的文件夹中。
故障排除
如果任何检测项失败,请按照终端中的说明进行更正。
9.5.6.2. 将自定义 RHEL 镜像上传到 Alibaba 复制链接链接已复制到粘贴板!
您可以使用 RHEL 镜像构建器将您创建的自定义 AMI 镜像上传到对象存储服务(OSS)。
先决条件
- 设置您的系统以上传 Alibaba 镜像。请参阅准备将镜像上传到 Alibaba。
-
您已使用 RHEL 镜像构建器创建了一个
ami镜像。 - 您有一个存储桶。请参阅创建存储桶。
- 您有一个活跃的 Alibaba 帐户。
- 已激活了 OSS。
流程
- 登录到 OSS 控制台。
- 在左侧的 Bucket 菜单中,选择要将镜像上传到的存储桶。
- 在右菜单中点 Files 标签页。
点 。一个对话框窗口会在右侧打开。配置以下内容:
- 上传至 :选择将该文件上传到 Current 目录或一个 指定的目录。
- 文件 ACL :选择上传的文件的权限类型。
- 点 。
- 选择您要上传到 OSS 控制台的镜像。
- 点 。
9.5.6.3. 将镜像导入到 Alibaba Cloud 复制链接链接已复制到粘贴板!
要将使用 RHEL 镜像构建器创建的自定义 Alibaba RHEL 镜像导入到 Elastic Compute Service (ECS),请按照以下步骤操作:
先决条件
- 设置您的系统以上传 Alibaba 镜像。请参阅准备将镜像上传到 Alibaba。
-
您已使用 RHEL 镜像构建器创建了一个
ami镜像。 - 您有一个存储桶。请参阅创建存储桶。
- 您有一个活跃的 Alibaba 帐户。
- 已激活了 OSS。
- 您已将镜像上传到对象存储服务(OSS)。请参阅将镜像上传到 Alibaba。
流程
登录到 ECS 控制台。
- 在左侧菜单中,点 。
- 在右上角,点 。此时会打开一个对话框窗口。
确认您已设置了镜像所在的正确区域。输入以下信息:
-
OSS 对象地址:了解如何获取 OSS 对象地址. -
镜像名称 -
操作系统 -
系统磁盘大小 -
系统架构 -
平台:红帽
-
可选:提供以下详情:
-
镜像格式:qcow2或ami,具体取决于上传的镜像格式。 -
镜像描述 添加数据磁盘的镜像地址可以在 OSS 管理控制台中确定。在左侧菜单中选择所需的存储桶之后:
-
-
选择
Files部分。 点相应镜像右侧的 Details 链接。
窗口会出现在屏幕右侧,显示镜像详情。
OSS对象地址位于URL框中。点 。
注意导入过程的时间可能因镜像大小而异。
自定义镜像导入到 ECS 控制台。
9.5.6.4. 使用 Alibaba Cloud 创建自定义 RHEL 镜像的一个实例 复制链接链接已复制到粘贴板!
您可以使用 Alibaba ECS 控制台创建自定义 RHEL 镜像的实例。
先决条件
- 您已激活了 OSS 并上传您的自定义镜像。
- 您已成功将镜像导入到 ECS 控制台。请参阅 将镜像导入到 Alibaba。
流程
因此,您有一个活跃的实例准备好从 Alibaba ECS 控制台进行部署。
第 10 章 使用 Kickstart 执行自动安装 复制链接链接已复制到粘贴板!
10.1. 自动化安装工作流 复制链接链接已复制到粘贴板!
Kickstart 安装可以使用本地 DVD、本地磁盘或 NFS、FTP、HTTP 或者 HTTPS 服务器来执行。这部分提供了 Kickstart 使用的高级概述。
- 创建一个 Kickstart 文件。您可以手动写入该文件,复制手动安装后保存的 Kickstart 文件,或者使用在线生成器工具创建该文件,之后再编辑该文件。
- 使 Kickstart 文件对可移动介质、磁盘上的安装程序或者使用 HTTP (S)、FTP 或者 NFS 服务器的网络位置可用。
- 创建用来开始安装的引导介质。
- 使安装源可供安装程序使用。
- 使用引导介质和 Kickstart 文件开始安装。如果 Kickstart 文件包含所有强制命令和部分,则会自动完成安装。如果缺少一个或多个这些强制部分,或者出现错误,则安装需要手动干预才能完成。
10.2. 创建 Kickstart 文件 复制链接链接已复制到粘贴板!
您可以使用以下方法创建 Kickstart 文件:
- 使用在线 Kickstart 配置工具。
- 复制手动安装后创建的 Kickstart 文件。
- 手动编写整个 Kickstart 文件。
为 Red Hat Enterprise Linux 8 安装转换 Red Hat Enterprise Linux 7 Kickstart 文件。
有关转换工具的更多信息,请参阅 Kickstart 生成器实验室。
- 如果是虚拟和云环境,请使用 Image Builder 创建自定义系统镜像。
某些高度特定的安装选项只能通过手动编辑 Kickstart 文件来配置。
10.2.1. 使用 Kickstart 配置工具创建 Kickstart 文件 复制链接链接已复制到粘贴板!
有红帽客户门户网站帐户的用户可以使用客户门户网站 Labs 中的 Kickstart Generator 工具在线生成 Kickstart 文件。这个工具可帮助您完成基本配置,并下载得到的 Kickstart 文件。
先决条件
- 您有一个红帽客户门户网站帐户,以及一个有效的红帽订阅。
流程
- 在 https://access.redhat.com/labsinfo/kickstartconfig 打开 Kickstart 生成器实验室信息页面。
- 点击标题左侧的 Go to Application 按钮并等待下一个页面加载。
- 从下拉菜单中选择 Red Hat Enterprise Linux 8 ,并等待页面更新。
使用表单中的字段描述要安装的系统。
您可以使用表单左侧的链接来快速导航表表单的部分内容。
要下载生成的 Kickstart 文件,请点击本页顶部的红色 下载 按钮。
浏览器会保存该文件。
安装 pykickstart 软件包。
yum install pykickstart
# yum install pykickstartCopy to Clipboard Copied! Toggle word wrap Toggle overflow 对您的 Kickstart 文件运行
ksvalidator。ksvalidator -v RHEL8 /path/to/kickstart.ks
$ ksvalidator -v RHEL8 /path/to/kickstart.ksCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用要验证的 Kickstart 文件的路径替换 /path/to/kickstart.ks。
验证工具并不能保证安装过程可以成功。它只检查语法是否正确,且该文件不包含已弃用的选项。它不会验证 Kickstart 文件的
%pre、%post和%packages部分。
10.2.2. 执行手动安装来创建 Kickstart 文件 复制链接链接已复制到粘贴板!
创建 Kickstart 文件的建议方法是使用手动安装 Red Hat Enterprise Linux 创建的文件。安装完成后,安装过程中进行的所有选择都会保存到名为 anaconda-ks.cfg 的 Kickstart 文件中,该文件位于安装的系统上的 /root/ 目录中。您可以使用这个文件来重现安装。另外,复制此文件,根据需要进行修改,并使用得到的配置文件进行进一步安装。
流程
安装 RHEL。详情请参阅 从安装介质交互式安装 RHEL。
在安装过程中,创建一个具有管理员权限的用户。
- 完成安装并重启系统。
- 使用管理员帐户登录该系统。
将文件
/root/anaconda-ks.cfg复制到您选择的位置。该文件包含用户和密码的信息。在终端显示文件内容:
cat /root/anaconda-ks.cfg
# cat /root/anaconda-ks.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以复制输出并保存到您选择的其他文件中。
- 要将文件复制到另一个位置,请使用文件管理器。请记住需要修改副本的权限,以便非 root 用户可读取该文件。
安装 pykickstart 软件包。
yum install pykickstart
# yum install pykickstartCopy to Clipboard Copied! Toggle word wrap Toggle overflow 对您的 Kickstart 文件运行
ksvalidator。ksvalidator -v RHEL8 /path/to/kickstart.ks
$ ksvalidator -v RHEL8 /path/to/kickstart.ksCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用要验证的 Kickstart 文件的路径替换 /path/to/kickstart.ks。
验证工具并不能保证安装过程可以成功。它只检查语法是否正确,且该文件不包含已弃用的选项。它不会验证 Kickstart 文件的 %pre、%post 和 %packages 部分。
10.2.3. 从以前的 RHEL 安装转换为一个 Kickstart 文件 复制链接链接已复制到粘贴板!
您可以使用 Kickstart 转换器工具转换成一个 RHEL 7 Kickstart 文件,用于 RHEL 8 或 9 安装,或者转换成一个 RHEL 8 Kickstart 文件,用于 RHEL 9 。有关工具以及如何使用它来转换 RHEL Kickstart 文件的详情,请参考 https://access.redhat.com/labs/kickstartconvert/。
流程
准备 kickstart 文件后,安装 pykickstart 软件包。
yum install pykickstart
# yum install pykickstartCopy to Clipboard Copied! Toggle word wrap Toggle overflow 对您的 Kickstart 文件运行
ksvalidator。ksvalidator -v RHEL8 /path/to/kickstart.ks
$ ksvalidator -v RHEL8 /path/to/kickstart.ksCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用要验证的 Kickstart 文件的路径替换 /path/to/kickstart.ks。
验证工具并不能保证安装过程可以成功。它只检查语法是否正确,且该文件不包含已弃用的选项。它不会验证 Kickstart 文件的 %pre、%post 和 %packages 部分。
10.2.4. 使用 Image Builder 创建自定义镜像 复制链接链接已复制到粘贴板!
您可以使用 Red Hat Image Builder 为虚拟和云部署创建自定义系统镜像。
有关使用镜像构建器创建自定义镜像的更多信息,请参阅 制作自定义的 RHEL 系统镜像 文档。
10.3. 将 Kickstart 文件添加到 UEFI HTTP 或 PXE 安装源中 复制链接链接已复制到粘贴板!
在 Kickstart 文件就绪后,您可以使其用于目标系统上的安装。
10.3.1. 基于网络安装的端口 复制链接链接已复制到粘贴板!
下表列出了必须在服务器上打开的端口,以便为每种基于网络的安装提供文件。
| 使用的协议 | 打开端口 |
|---|---|
| HTTP | 80 |
| HTTPS | 443 |
| FTP | 21 |
| NFS | 2049, 111, 20048 |
| TFTP | 69 |
10.3.2. 在 NFS 服务器上共享安装文件 复制链接链接已复制到粘贴板!
您可以在 NFS 服务器上存储 Kickstart 脚本文件。将其存储在 NFS 服务器上使您能够从单个源安装多个系统,而无需对 Kickstart 文件使用物理介质。
先决条件
- 您对本地网络上的 Red Hat Enterprise Linux 8 服务器有管理员级别的访问权限。
- 要安装的系统可以连接到服务器。
- 服务器上的防火墙允许来自您要安装的系统的连接。
确保您在 inst.ks 和 inst.repo 中使用不同的路径。当使用 NFS 托管 Kickstart 时,您不能使用相同的 nfs 共享来托管安装源。
流程
作为 root 运行以下命令安装
nfs-utils软件包:yum install nfs-utils
# yum install nfs-utilsCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 将 Kickstart 文件复制到 NFS 服务器的目录中。
使用文本编辑器打开
/etc/exports文件,并使用以下语法添加一行:/exported_directory/ clients
/exported_directory/ clientsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用到包含 Kickstart 文件的目录的完整路径替换 /exported_directory/。要从这个 NFS 服务器安装计算机的主机名或 IP 地址替换 clients,如果您想允许任何可访问该 NFS 服务器的计算机都能使用该 ISO 镜像,则使用该系统所在的子网络访问该 ISO 镜像,或者使用星号(
*)。有关此格式的详细信息,请参见 exports(5) 手册页。以下是一个基本配置,它使/rhel8-install/目录以只读方式对所有客户端可用:/rhel8-install *
/rhel8-install *Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
保存
/etc/exports文件并退出文本编辑器。 启动 nfs 服务:
systemctl start nfs-server.service
# systemctl start nfs-server.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果在更改
/etc/exports文件前运行该服务,请输入以下命令以便运行的 NFS 服务器重新载入其配置:systemctl reload nfs-server.service
# systemctl reload nfs-server.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kickstart 文件现在可以通过 NFS 访问并准备用于安装。
在指定 Kickstart 源时,使用 nfs: 协议、服务器的主机名或 IP 地址、冒号 (:) 以及包含该文件的目录内的路径。例如:如果服务器的主机名为 myserver.example.com,且您已将文件保存在 /rhel8-install/my-ks.cfg 中,指定 inst.ks=nfs:myserver.example.com:/rhel8-install/my-ks.cfg 作为安装源引导选项。
10.3.3. 在 HTTP 或 HTTPS 服务器上共享安装文件 复制链接链接已复制到粘贴板!
您可以将 Kickstart 脚本文件存储在 HTTP 或 HTTPS 服务器上。在 HTTP 或 HTTPS 服务器中存储 Kickstart 文件可让您从一个源安装多个系统,而无需对 Kickstart 文件使用物理介质。
先决条件
- 您对本地网络上的 Red Hat Enterprise Linux 8 服务器有管理员级别的访问权限。
- 要安装的系统可以连接到服务器。
- 服务器上的防火墙允许来自您要安装的系统的连接。
流程
要在 HTTP 上存储 Kickstart 文件,请安装
httpd软件包:yum install httpd
# yum install httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要在 HTTPS 上存储 Kickstart 文件,请安装
httpd和mod_ssl软件包:yum install httpd mod_ssl
# yum install httpd mod_sslCopy to Clipboard Copied! Toggle word wrap Toggle overflow 警告如果您的 Apache 网页服务器配置启用了 SSL 安全性,请确定您只启用 TLSv1 协议,并禁用 SSLv2 和 SSLv3。这是因为 POODLE SSL 漏洞(CVE-2014-3566)。如需更多信息,请参阅红帽知识库解决方案 解决 POODLE SSLv3.0 漏洞。
重要如果您使用带有自签名证书的 HTTPS 服务器,则必须使用
inst.noverifyssl选项引导安装程序。-
将 Kickstart 文件复制到 HTTP(S) 服务器的
/var/www/html/目录的子目录中。 启动 httpd 服务:
systemctl start httpd.service
# systemctl start httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kickstart 文件现在可以访问并可用于安装。
当指定 Kickstart 文件的位置时,请使用
http://或https://作为协议、服务器的主机名或 IP 地址,以及 Kickstart 文件的路径(相对于 HTTP 服务器 root)。例如:如果您使用 HTTP,则服务器的主机名为myserver.example.com,并且您已将 Kickstart 文件复制为/var/www/html/rhel8-install/my-ks.cfg,将http://myserver.example.com/rhel8-install/my-ks.cfg指定为文件的位置。
10.3.4. 在 FTP 服务器上共享安装文件 复制链接链接已复制到粘贴板!
您可以将 Kickstart 脚本文件存储在 FTP 服务器上。将脚本存储在 FTP 服务器上使您能够从单个源安装多个系统,而无需将物理介质用于 Kickstart 文件。
先决条件
- 您对本地网络上的 Red Hat Enterprise Linux 8 服务器有管理员级别的访问权限。
- 要安装的系统可以连接到服务器。
- 服务器上的防火墙允许来自您要安装的系统的连接。
流程
安装
vsftpd软件包。请作为 root 运行以下命令完成此步骤:yum install vsftpd
# yum install vsftpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在文本编辑器中打开并编辑
/etc/vsftpd/vsftpd.conf配置文件。-
将
anonymous_enable=NO行改为anonymous_enable=YES -
将
write_enable=YES行改为write_enable=NO。 添加行
pasv_min_port=min_port和pasv_max_port=max_port。使用被动模式下 FTP 服务器使用的端口范围替换min_port和max_port,例如10021和10031。在带有各种防火墙/NAT 设置的网络环境中,这个步骤可能是必要的。
可选:在您的配置中添加自定义更改。可用选项请查看 vsftpd.conf(5) 手册页。这个步骤假设使用了默认选项。
警告如果在
vsftpd.conf文件中配置了 SSL/TLS 安全性,请确保只启用 TLSv1 协议,并禁用 SSLv2 和 SSLv3。这是因为 POODLE SSL 漏洞(CVE-2014-3566)。如需更多信息,请参阅红帽知识库解决方案 解决 POODLE SSLv3.0 漏洞。
-
将
配置服务器防火墙。
启用防火墙:
systemctl enable firewalld systemctl start firewalld
# systemctl enable firewalld # systemctl start firewalldCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在您的防火墙中启用前一步中的 FTP 端口和端口范围:
firewall-cmd --add-port min_port-max_port/tcp --permanent firewall-cmd --add-service ftp --permanent firewall-cmd --reload
# firewall-cmd --add-port min_port-max_port/tcp --permanent # firewall-cmd --add-service ftp --permanent # firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 min_port-max_port 替换为您输入到
/etc/vsftpd/vsftpd.conf配置文件的端口号。
-
将 Kickstart 文件复制到 FTP 服务器的
/var/ftp/目录或其子目录中。 请确定在文件中正确设置了正确的 SELinux 上下文和访问模式:
restorecon -r /var/ftp/your-kickstart-file.ks chmod 444 /var/ftp/your-kickstart-file.ks
# restorecon -r /var/ftp/your-kickstart-file.ks # chmod 444 /var/ftp/your-kickstart-file.ksCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启动
vsftpd服务:systemctl start vsftpd.service
# systemctl start vsftpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果在更改
/etc/vsftpd/vsftpd.conf文件前运行该服务,重启该服务以载入经过编辑的文件:systemctl restart vsftpd.service
# systemctl restart vsftpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在引导过程中启用
vsftpd服务:systemctl enable vsftpd
# systemctl enable vsftpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kickstart 文件现在可以访问,并可用于同一网络中的系统安装。
注意在配置安装源时,使用
ftp://作为协议、服务器的主机名或 IP 地址以及 Kickstart 文件的路径(相对于 FTP 服务器 root)。例如:如果服务器的主机名是myserver.example.com,且您已将文件复制到/var/ftp/my-ks.cfg中,请指定ftp://myserver.example.com/my-ks.cfg作为安装源。
10.4. 半自动化安装:为 RHEL 安装程序提供 Kickstart 文件 复制链接链接已复制到粘贴板!
Kickstart 文件就绪后,就可以将其用于目标系统上的安装。
10.4.1. 在本地卷上共享安装文件 复制链接链接已复制到粘贴板!
这个步骤描述了如何在要安装的系统中的卷中保存 Kickstart 脚本文件。这个方法可让您绕过其他系统的要求。
先决条件
- 您有一个可移动到要安装的机器上的驱动器,如 USB 盘。
-
驱动器包含可由安装程序读取的分区。支持的类型有
ext2、ext3、ext4、xfs和fat。 - 该驱动器连接到系统,其卷已挂载。
流程
列出卷信息并记录您想要复制 Kickstart 文件的卷 UUID。
lsblk -l -p -o name,rm,ro,hotplug,size,type,mountpoint,uuid
# lsblk -l -p -o name,rm,ro,hotplug,size,type,mountpoint,uuidCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 导航到卷中的文件系统。
- 将 Kickstart 文件复制到这个文件系统中。
-
记录以后要与
inst.ks=选项一起使用的字符串。这个字符串采用hd:UUID=volume-UUID: path/to/kickstart-file.cfg的形式。请注意,该路径相对于文件系统根目录,而不是文件系统层次结构的/root。使用之前记录的 UUID 替换 volume-UUID。 卸载所有驱动器卷:
umount /dev/xyz ...
# umount /dev/xyz ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在命令中添加所有卷,用空格分开。
10.4.2. 在本地卷上共享安装文件,以便自动载入 复制链接链接已复制到粘贴板!
在要安装的系统中特殊命名的卷的根目录中会出现一个名为 Kickstart 文件。这可让您避开另一个系统的需要,让安装程序自动载入该文件。
先决条件
- 您有一个可移动到要安装的机器上的驱动器,如 USB 盘。
-
驱动器包含可由安装程序读取的分区。支持的类型有
ext2、ext3、ext4、xfs和fat。 - 该驱动器连接到系统,其卷已挂载。
流程
列出您要将 Kickstart 文件复制到的卷信息。
lsblk -l -p
# lsblk -l -pCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 导航到卷中的文件系统。
- 将 Kickstart 文件复制到文件系统的根目录下。
-
将 Kickstart 文件重命名为
ks.cfg。 将卷重命名为
OEMDRV:对于
ext2、ext3和ext4文件系统:e2label /dev/xyz OEMDRV
# e2label /dev/xyz OEMDRVCopy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 XFS 文件系统:
xfs_admin -L OEMDRV /dev/xyz
# xfs_admin -L OEMDRV /dev/xyzCopy to Clipboard Copied! Toggle word wrap Toggle overflow
使用卷块设备的路径替换 /dev/xyz。
卸载所有驱动器卷:
umount /dev/xyz ...
# umount /dev/xyz ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在命令中添加所有卷,用空格分开。
10.5. 启动 Kickstart 安装 复制链接链接已复制到粘贴板!
您可以以多种方式启动 Kickstart 安装:
- 通过在 PXE 引导中自动编辑引导选项。
- 通过使用特定名称在卷中自动提供文件。
您可以使用 Red Hat Content Delivery Network (CDN)注册 RHEL。CDN 是地理上分散的一系列 Web 服务器。例如,这些服务器使用有效的订阅为 RHEL 主机提供软件包和更新。
在安装过程中,从 CDN 注册并安装 RHEL 有以下优点:
- 在安装后立即为最新的系统使用最新的软件包,并为
- 对连接到 Red Hat Insights 和启用系统目提供集成的支持。
10.5.1. 使用 PXE 自动启动 Kickstart 安装 复制链接链接已复制到粘贴板!
AMD64、Intel 64 和 64 位 ARM 系统以及 IBM Power Systems 服务器能够使用 PXE 服务器引导。当您配置 PXE 服务器时,可以在引导装载程序配置文件中添加引导选项,以便您可以自动启动安装。使用这个方法,可以完全自动化安装,包括引导过程。
这个过程旨在作为一般参考。具体步骤因您的系统架构有所不同,且不是所有架构上都提供所有的选项(例如,在 64 位 IBM Z 上无法使用 PXE 引导)。
先决条件
- 您有一个准备好的 Kickstart 文件,位于要安装的系统可访问的位置。
- 您有一个可用于引导系统并开始安装的 PXE 服务器。
流程
打开 PXE 服务器中的引导装载程序配置文件,并在适当的行中添加
inst.ks=引导选项。该文件的名称及其句法取决于您系统的架构和硬件:在使用 BIOS 的 AMD64 和 Intel 64 系统中,该文件名称可以是 default,或取决于您的系统 IP 地址。在这种情况下,在安装条目的附加行中添加
inst.ks=选项。在配置文件中添加的行示例类似如下:append initrd=initrd.img inst.ks=http://10.32.5.1/mnt/archive/RHEL-8/8.x/x86_64/kickstarts/ks.cfg
append initrd=initrd.img inst.ks=http://10.32.5.1/mnt/archive/RHEL-8/8.x/x86_64/kickstarts/ks.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在使用 GRUB 引导装载程序(带有 UEFI 固件的 AMD64、Intel 64 和 64 位 ARM 系统系统,以及 IBM Power Systems 服务器)上,文件名称为
grub.cfg。在这个文件中,在安装条目的 kernel 行中添加inst.ks=选项。该配置文件 kernel 行示例类似如下:kernel vmlinuz inst.ks=http://10.32.5.1/mnt/archive/RHEL-8/8.x/x86_64/kickstarts/ks.cfg
kernel vmlinuz inst.ks=http://10.32.5.1/mnt/archive/RHEL-8/8.x/x86_64/kickstarts/ks.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow
从网络服务器引导安装。
现在开始使用在 Kickstart 文件中指定的安装选项安装。如果 Kickstart 文件有效并包含全部所需命令,则安装将是全自动的。
如果您已在启用了 UEFI 安全引导的系统中安装了 Red Hat Enterprise Linux Beta 版本,然后将 Beta 公钥添加到系统的 Machine Owner Key (MOK) 列表中。
10.5.2. 使用本地卷自动启动 Kickstart 安装 复制链接链接已复制到粘贴板!
您可以通过在指定标记的存储卷上加上特定名称的 Kickstart 文件启动 Kickstart 安装。
先决条件
-
您有一个带有标签
OEMDRV的卷,以及 root 中以ks.cfg形式存在的一个 Kickstart 文件。 - 安装程序启动时,包含此卷的驱动器在系统上可用。
流程
- 使用本地介质(CD、DVD 或者 USB 闪存驱动器)引导系统。
在 boot 提示符后指定所需的引导选项。
-
如果所需的存储库位于网络位置,您可能需要使用
ip=选项配置网络。在没有这个选项时,安装程序会默认尝试使用 DHCP 协议配置所有网络设备。 要访问安装所需软件包的软件源,您可能需要添加
inst.repo=选项。如果您没有指定这个选项,则必须在 Kickstart 文件中指定安装源。有关安装源的更多信息,请参阅 用于安装程序配置和流控制的 Kickstart 命令。
-
如果所需的存储库位于网络位置,您可能需要使用
通过确认您添加的引导选项启动安装。
现在开始安装,Kickstart 文件会被自动探测,并用来自动启动 Kickstart 安装。
如果您已在启用了 UEFI 安全引导的系统中安装了 Red Hat Enterprise Linux Beta 版本,然后将 Beta 公钥添加到系统的 Machine Owner Key (MOK) 列表中。有关 UEFI 安全引导和 Red Hat Enterprise Linux Beta 版本的更多信息,请参阅 UEFI 安全引导和 Beta 版本要求。
10.5.3. 在 IBM Z 上引导安装,来在 LPAR 中安装 RHEL 复制链接链接已复制到粘贴板!
您可以使用 SFTP、FTPS 或 FTP 服务器将 RHEL 安装到 LPAR 。
流程
- 以具有足够特权的用户身份登录 IBM Z 硬件管理控制台(HMC)或Support Element(SE),来将新的操作系统安装到 LPAR。
- 在 Systems 选项卡中,选择您要使用的大型机,然后在 Partitions 选项卡中选择您要安装到的 LPAR。
- 在屏幕底部,在 Daily 下找到 Operating System Messages。双击 Operating System Messages 会显示将出现 Linux 引导信息的文本控制台。
- 双击 Load from Removable Media or Server。
在以下对话框中,选择 SFTP/FTPS/FTP Server,并输入以下信息:
- Host Computer - 要从其安装的 FTP 服务器的主机名或 IP 地址,例如 ftp.redhat.com
- User ID - FTP 服务器上的用户名。或者,指定 anonymous。
- Password - 您的密码。如果以匿名身份登录,使用您的电子邮件地址。
- File location (optional) - FTP 服务器上保存用于 IBM Z 的 Red Hat Enterprise Linux 的目录,如 /rhel/s390x/。
- 点 Continue。
- 在随后的对话框中,保留默认选择的 generic.ins,然后点 Continue。
10.5.3.2. 从准备好的 DASD 引导 RHEL 安装,来在 IBM Z LPAR 中安装 复制链接链接已复制到粘贴板!
当使用已准备好的 DASD 将 Red Hat Enterprise Linux 安装到 LPAR 时使用此流程。
流程
- 以具有足够特权的用户身份登录 IBM Z 硬件管理控制台(HMC)或Support Element(SE),来将新的操作系统安装到 LPAR。
- 在 Systems 选项卡中,选择您要使用的大型机,然后在 Partitions 选项卡中选择您要安装到的 LPAR。
- 在屏幕底部,在 Daily 下找到 Operating System Messages。双击 Operating System Messages 会显示将出现 Linux 引导信息的文本控制台。
- 双击 Load。
- 在随后的对话框中,选择 Normal 作为 Load type。
- 在 Load address,使用 DASD 的设备号。
- 点OK按钮。
10.5.3.3. 从连接了 FCP 的 SCSI 磁盘引导 RHEL 安装,来在 IBM Z LPAR 中安装 复制链接链接已复制到粘贴板!
当使用准备好的连接 FCP 的 SCSI 磁盘将 Red Hat Enterprise Linux 安装到 LPAR 时,使用此流程。
流程
- 以具有足够特权的用户身份登录 IBM Z 硬件管理控制台(HMC)或Support Element(SE),来将新的操作系统安装到 LPAR。
- 在 Systems 选项卡中,选择您要使用的大型机,然后在 Partitions 选项卡中选择您要安装到的 LPAR。
- 在屏幕底部,在 Daily 下找到 Operating System Messages。双击 Operating System Messages 会显示将出现 Linux 引导信息的文本控制台。
- 双击 Load。
- 在随后的对话框中,选择 SCSI 作为 Load type。
- 输入与 SCSI 磁盘连接的 FCP 通道的设备号来作为 Load address 。
- 以 16 位十六进制数填写包含磁盘的存储系统的 WWPN,来作为 World wide port name 。
- 在 Logical unit number 中输入 16 位十六进制数字到磁盘的 LUN。
- 将 Boot record logical block address 设置为 0,Operating system specific load parameters 为空。
- 点OK按钮。
这需要一个连接到 FCP-to-SCSI 网桥的 SCSI DVD 驱动器,该网接又连接到 IBM Z 机器中的 FCP 适配器。必须配置这个 FCP 适配器并使其可用。
流程
- 以具有足够特权的用户身份登录 IBM Z 硬件管理控制台(HMC)或Support Element(SE),来将新的操作系统安装到 LPAR。
- 在 Systems 选项卡中,选择您要使用的大型机,然后在 Partitions 选项卡中选择您要安装到的 LPAR。
- 在 Daily 屏幕底部,找到操作系统信息。双击 Operating System Messages 会显示将出现 Linux 引导信息的文本控制台。
- 将用于 64 位 IBM Z 的 Red Hat Enterprise Linux DVD 插入到 DVD 驱动器中。
- 双击 Load。
- 在随后的对话框中,选择 SCSI 作为 Load type。
- 在 Load address 中输入与 FCP-to-SCSI 网桥连接的 FCP 渠道的设备号。
- 在 World wide port name 中输入 16 位十六进制数字作为 FCP-to-SCSI 桥接的 WWPN。
- 在 Logical unit number 中输入 16 位十六进制数字作为 DVD 驱动器的 LUN。
- 在 Boot program selector 中输入 1 来选择 Red Hat Enterprise Linux for 64 位 IBM Z DVD 的引导条目。
- 将 Boot record logical block address 设置为 0,Operating system specific load parameters 为空。
- 点OK按钮。
10.5.4. 在 IBM Z 上引导安装,来在 z/VM 中安装 RHEL 复制链接链接已复制到粘贴板!
当在 z/VM 中安装时,您可以使用以下设备引导:
- z/VM 虚拟读取器
- 使用 zipl 引导装载程序准备的 DASD 或者连接了 FCP 的 SCSI 磁盘
- 附加 FCP 的 SCSI DVD 驱动器
10.5.4.1. 使用 z/VM 读卡器引导 RHEL 安装 复制链接链接已复制到粘贴板!
您可以从 z/VM 读卡器引导。
流程
如有必要,将包含 z/VM TCP/IP 工具的设备添加到 CMS 磁盘列表中。例如:
cp link tcpmaint 592 592 acc 592 fm
cp link tcpmaint 592 592 acc 592 fmCopy to Clipboard Copied! Toggle word wrap Toggle overflow 用任何 FILEMODE 字母替换
fm。对于到 FTPS 服务器的连接,请输入:
ftp <host> (secure
ftp <host> (secureCopy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
host是提供引导镜像(kernel.img和initrd.img)的 FTP 服务器的主机名或 IP 地址。登录并执行以下命令。如果要覆盖现有的
kernel.img、initrd.img、generic.prm或者redhat.exec文件,使用(repl选项:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:使用 CMS 命令
filelist显示收到的文件及其格式,以检查文件是否已正确传输。kernel.img和initrd.img有在 Format 列中用 F 表示,在 Lrecl 列中记录长度为 80 的固定记录长度格式很重要。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 按 PF3 键退出 filelist 并返回到 CMS 提示符。
根据需要自定义
generic.prm中的引导参数。详情请参阅 自定义引导参数。配置存储和网络设备的另外一种方法是使用 CMS 配置文件。在这种情况下,把
CMSDASD=和CMSCONFFILE=参数添加到generic.prm。最后,执行 REXX 脚本 redhat.exec 来引导安装程序:
redhat
redhatCopy to Clipboard Copied! Toggle word wrap Toggle overflow
10.5.4.2. 使用准备的 DASD 引导 RHEL 安装 复制链接链接已复制到粘贴板!
执行以下步骤使用准备的 DASD:
流程
从准备的 DASD 引导,并选择指向 Red Hat Enterprise Linux 安装程序的 zipl 引导菜单条目。使用以下命令格式:
cp ipl DASD_device_number loadparm boot_entry_number
cp ipl DASD_device_number loadparm boot_entry_numberCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用引导设备的设备号替换 DASD_device_number,使用这个设备的 zipl 配置菜单替换boot_entry_number。例如:
cp ipl eb1c loadparm 0
cp ipl eb1c loadparm 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.5.4.3. 使用准备好的连接了 FCP 的 SCSI 磁盘引导 RHEL 安装 复制链接链接已复制到粘贴板!
执行以下步骤来从准备好的连接 FCP 的 SCSI 磁盘引导:
流程
配置 z/VM 的 SCSI 引导加载程序,来访问 FCP 存储区域网络中准备好的 SCSI 磁盘。选择准备的 zipl 引导菜单中指向 Red Hat Enterprise Linux 安装程序的条目。使用以下命令格式:
cp set loaddev portname WWPN lun LUN bootprog boot_entry_number
cp set loaddev portname WWPN lun LUN bootprog boot_entry_numberCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用存储系统的全球端口名称和带有磁盘逻辑单元号的 LUN 来替换 WWPN。16 位十六进制数必须分成两对,每对八位数。例如:
cp set loaddev portname 50050763 050b073d lun 40204011 00000000 bootprog 0
cp set loaddev portname 50050763 050b073d lun 40204011 00000000 bootprog 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:使用以下命令确认您的设置:
query loaddev
query loaddevCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令引导与包含磁盘的存储系统连接的 FCP 设备:
cp ipl FCP_device
cp ipl FCP_deviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
cp ipl fc00
cp ipl fc00Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.5.4.4. 使用连接了 FCP 的 SCSI DVD 驱动器引导 RHEL 安装 复制链接链接已复制到粘贴板!
执行以下步骤使用附加的 SCSI DVD 驱动器:
先决条件
- 这需要一个附加到 FCP-to-SCSI 桥接的 SCSI DVD 驱动器,该桥接又连接到您 64 位 IBM Z 中的 FCP 适配器。FCP 适配器必须在 z/VM 下配置并可用。
流程
- 将用于 64 位 IBM Z 的 Red Hat Enterprise Linux DVD 插入到 DVD 驱动器中。
配置 z/VM 的 SCSI 引导装载程序以访问 FCP 存储区域网络中的 DVD 驱动器,并为用于 64 位 IBM Z 的 Red Hat Enterprise Linux DVD 上的引导条目指定
1。使用以下命令格式:cp set loaddev portname WWPN lun FCP_LUN bootprog 1
cp set loaddev portname WWPN lun FCP_LUN bootprog 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 FCP-to-SCSI 桥接的 WWPN 替换 WWPN,,使用 DVD 驱动器的 LUN 替换 FCP_LUN。16 位十六进制数必须分成两对,每对八个字符。例如:
cp set loaddev portname 20010060 eb1c0103 lun 00010000 00000000 bootprog 1
cp set loaddev portname 20010060 eb1c0103 lun 00010000 00000000 bootprog 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:使用以下命令确认您的设置:
cp query loaddev
cp query loaddevCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 FCP-to-SCSI 桥接连接的 FCP 设备中 IPL。
cp ipl FCP_device
cp ipl FCP_deviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
cp ipl fc00
cp ipl fc00Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.5.5. 安装过程中的控制台和日志记录 复制链接链接已复制到粘贴板!
在主界面外,Red Hat Enterprise Linux 安装程序使用 tmux 终端显示和控制几个窗口。每个窗口都有不同的目的,它们会显示几个不同的日志,可用于在安装过程中排除问题。其中一个窗口提供带有 root 权限的互动 shell 提示符,除非使用一个引导选项或一个 Kickstart 命令特别禁用了这个提示符。
终端多路器在虚拟控制台 1 中运行。要从实际安装环境切换到 tmux,按Ctrl+Alt+F1。要回到在虚拟控制台 6 中运行的主安装界面,按 Ctrl+Alt+F6。在文本模式安装过程中,在虚拟控制台 1 (tmux)中启动,切换到控制台 6 将打开 shell 提示符而不是图形界面。
运行 tmux 的控制台有五个可用的窗口; 下表中描述了它们的内容以及键盘快捷键。请注意,键盘快捷键有两个部分:首先按 Ctrl+b 键,然后释放这两个键,再按您想要使用的窗口的数字键。
您还可以使用 Ctrl+b n、Alt+ Tab 和 Ctrl+b p 切换到下一个或前一个 tmux 窗口。
| 快捷键 | 内容 |
|---|---|
| Ctrl+b 1 | 安装程序主窗口。包含基于文本的提示(在文本模式安装或者使用 VNC 直接模式时),以及一些调试信息。 |
| Ctrl+b 2 |
有 |
| Ctrl+b 3 |
安装日志; 显示信息保存在 |
| Ctrl+b 4 |
存储日志; 显示与存储设备和配置相关的消息,保存在 |
| Ctrl+b 5 |
程序日志; 显示安装过程中执行的实用程序的信息,保存在 |
第 11 章 高级配置选项 复制链接链接已复制到粘贴板!
11.1. 配置系统目的 复制链接链接已复制到粘贴板!
您可以使用系统目的记录 Red Hat Enterprise Linux 8 系统的预期使用。设置系统目的可让授权服务器自动附加最合适的订阅。这部分论述了如何使用 Kickstart 配置系统目的。
优点包括:
- 为系统管理员和商业操作提供深入系统级的信息。
- 降低管理成本以决定系统为什么及其预期目的。
- 改进了 Subscription Manager 自动附加的客户体验,并自动发现并协调系统使用。
11.1.1. 概述 复制链接链接已复制到粘贴板!
可以用以下方法之一输入系统目的:
- 创建镜像期间
- 在 GUI 安装过程中,使用 Connect to Red Hat 屏幕注册您的系统并附加您的红帽订阅
-
在 Kickstart 安装过程中,使用
syspurpose Kickstart命令 -
在安装后,使用
syspurpose 命令行 (CLI)工具进行
要记录系统的预期目的,您可以配置以下系统目的组件。注册时授权服务器会使用所选值为您的系统附加最合适的订阅。
- Role
- Red Hat Enterprise Linux Server
- Red Hat Enterprise Linux Workstation
- Red Hat Enterprise Linux Compute 节点
- 服务等级协议
- Premium(高级)
- Standard(标准)
- Self-Support(自助)
- 使用
- 生产环境
- 开发/测试
- 灾难恢复
11.1.2. 在 Kickstart 文件中配置系统目的 复制链接链接已复制到粘贴板!
按照以下步骤在安装过程中配置系统目的。为此,请在 Kickstart 配置文件中使用 syspurpose Kickstart 命令。
尽管系统目的是 Red Hat Enterprise Linux 安装程序的可选功能,但我们强烈建议您将系统目的配置为自动附加最合适的订阅。
您还可以在安装完成后启用系统目的。为此,请使用 syspurpose 命令行工具。syspurpose 工具命令与 syspurpose Kickstart 命令不同。
以下操作可用于 syspurpose Kickstart 命令:
- role
设置系统预期的角色。这个操作使用以下格式:
syspurpose --role=
syspurpose --role=Copy to Clipboard Copied! Toggle word wrap Toggle overflow 分配的角色可以是:
-
Red Hat Enterprise Linux Server -
Red Hat Enterprise Linux Workstation -
Red Hat Enterprise Linux Compute 节点
-
- SLA
设置系统的预期 SLA。这个操作使用以下格式:
syspurpose --sla=
syspurpose --sla=Copy to Clipboard Copied! Toggle word wrap Toggle overflow 分配的 sla 可以是:
-
Premium(高级) -
Standard(标准) -
Self-Support(自助)
-
- usage
设置系统的预期用法。这个操作使用以下格式:
syspurpose --usage=
syspurpose --usage=Copy to Clipboard Copied! Toggle word wrap Toggle overflow 分配的使用量可以是:
-
Production -
Development/Test -
Disaster Recovery
-
- addon
任何其他分层的产品或功能.要添加多个项目,请多次指定
--addon,每个分层产品/功能指定一次。这个操作使用以下格式:syspurpose --addon=
syspurpose --addon=Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.2. 准备一个 UEFI HTTP 安装源 复制链接链接已复制到粘贴板!
作为本地网络上服务器的管理员,您可以配置 HTTP 服务器,以便为网络中的其他系统启用 HTTP 引导和网络安装。
11.2.1. 网络安装概述 复制链接链接已复制到粘贴板!
网络安装允许您将 Red Hat Enterprise Linux 安装到可访问安装服务器的系统。网络安装至少需要两个系统:
- 服务器
- 运行 DHCP 服务器、HTTP、HTTPS、FTP 或 NFS 的服务器以及 PXE 引导情况下的TFTP 服务器。虽然每个服务器可以运行在不同的物理系统上,但本节中的流程假设单个系统正在运行所有服务器。
- 客户端
- 要安装 Red Hat Enterprise Linux 的系统。安装开始后,客户端会查询 DHCP 服务器,从 HTTP 或 TFTP 服务器接收引导文件,并从 HTTP、HTTPS、FTP 或者 NFS 服务器下载安装镜像。与其它安装方法不同,客户端不需要任何物理引导介质来启动安装。
要从网络引导客户端,请在固件中或客户端上的快速引导菜单中启用网络引导。在某些硬件上,从网络引导的选项可能被禁用了,或者不可用。
准备使用 HTTP 或 PXE 从网络安装 Red Hat Enterprise Linux 的工作流步骤如下:
流程
- 将安装 ISO 镜像或者安装树导出到 NFS、HTTPS、HTTP 或者 FTP 服务器中。
- 配置 HTTP 或 TFTP 服务器以及 DHCP 服务器,并在服务器上启动 HTTP 或 TFTP 服务。
- 引导客户端并开始安装。
您可以在以下网络引导协议之间进行选择:
- HTTP
- 如果您的客户端 UEFI 支持,红帽建议使用 HTTP 引导。HTTP 引导通常更加可靠。
- PXE (TFTP)
- 客户端系统更广泛地支持 PXE 引导,但通过此协议发送引导文件可能会很慢,并导致超时失败。
11.2.2. 为网络引导配置 DHCPv4 服务器 复制链接链接已复制到粘贴板!
在您的服务器上启用 DHCP 版本 4 (DHCPv4)服务,以便它可以提供网络引导功能。
先决条件
您通过 IPv4 协议准备网络安装。
对于 IPv6 ,请参阅 为网络引导配置 DHCPv6 服务器。
查找服务器的网络地址。
在以下示例中,服务器有一个具有此配置的网卡:
- IPv4 地址
- 192.168.124.2/24
- IPv4 网关
- 192.168.124.1
流程
安装 DHCP 服务器:
yum install dhcp-server
yum install dhcp-serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow 设置 DHCPv4 服务器。在
/etc/dhcp/dhcpd.conf文件中输入以下配置。替换地址以匹配您的网卡。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动 DHCPv4 服务:
systemctl enable --now dhcpd
# systemctl enable --now dhcpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
11.2.3. 为网络引导配置 DHCPv6 服务器 复制链接链接已复制到粘贴板!
在您的服务器上启用 DHCP 版本 6 (DHCPv4)服务,以便它可以提供网络引导功能。
先决条件
您通过 IPv6 协议准备网络安装。
对于 IPv4 ,请参阅 为网络引导配置 DHCPv4 服务器。
查找服务器的网络地址。
在以下示例中,服务器有一个具有此配置的网卡:
- IPv6 地址
- fd33:eb1b:9b36::2/64
- IPv6 网关
- fd33:eb1b:9b36::1
流程
安装 DHCP 服务器:
yum install dhcp-server
yum install dhcp-serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow 设置 DHCPv6 服务器。在
/etc/dhcp/dhcpd6.conf文件中输入以下配置。替换地址以匹配您的网卡。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动 DHCPv6 服务:
systemctl enable --now dhcpd6
# systemctl enable --now dhcpd6Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 DHCPv6 数据包被防火墙中的 RP 过滤器丢弃了,请检查其日志。如果日志包含
rpfilter_DROP条目,请使用/etc/firewalld/firewalld.conf文件中的以下配置禁用过滤器:IPv6_rpfilter=no
IPv6_rpfilter=noCopy to Clipboard Copied! Toggle word wrap Toggle overflow
11.2.4. 为 HTTP 引导配置 HTTP 服务器 复制链接链接已复制到粘贴板!
您必须在服务器上安装并启用 httpd 服务,以便服务器可以在网络上提供 HTTP 引导资源。
先决条件
查找服务器的网络地址。
在以下示例中,服务器有一个 IPv4 地址为
192.168.124.2的网卡。
流程
安装 HTTP 服务器:
yum install httpd
# yum install httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
/var/www/html/redhat/目录:mkdir -p /var/www/html/redhat/
# mkdir -p /var/www/html/redhat/Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 下载 RHEL DVD ISO 文件。请参阅 所有 Red Hat Enterprise Linux 下载。
为 ISO 文件创建一个挂载点:
mkdir -p /var/www/html/redhat/iso/
# mkdir -p /var/www/html/redhat/iso/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 挂载 ISO 文件:
mount -o loop,ro -t iso9660 path-to-RHEL-DVD.iso /var/www/html/redhat/iso
# mount -o loop,ro -t iso9660 path-to-RHEL-DVD.iso /var/www/html/redhat/isoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将引导装载程序、内核和
initramfs从挂载的 ISO 文件复制到 HTML 目录中:cp -r /var/www/html/redhat/iso/images /var/www/html/redhat/ cp -r /var/www/html/redhat/iso/EFI /var/www/html/redhat/
# cp -r /var/www/html/redhat/iso/images /var/www/html/redhat/ # cp -r /var/www/html/redhat/iso/EFI /var/www/html/redhat/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使引导装载程序配置可编辑:
chmod 644 /var/www/html/redhat/EFI/BOOT/grub.cfg
# chmod 644 /var/www/html/redhat/EFI/BOOT/grub.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑
/var/www/html/redhat/EFI/BOOT/grub.cfg文件,并将其内容替换为以下内容:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这个文件中,替换以下字符串:
- rhel-9-3-0-BaseOS-x86_64 和 Red Hat Enterprise Linux 9.3
- 编辑版本号,以使其与您下载的 RHEL 版本匹配。
- 192.168.124.2
- 使用服务器的 IP 地址替换。
使 EFI 引导文件可执行:
chmod 755 /var/www/html/redhat/EFI/BOOT/BOOTX64.EFI
# chmod 755 /var/www/html/redhat/EFI/BOOT/BOOTX64.EFICopy to Clipboard Copied! Toggle word wrap Toggle overflow 在防火墙中打开端口,以允许 HTTP (80)、DHCP (67, 68)和 DHCPv6 (546, 547)流量:
firewall-cmd --zone public \ --add-port={80/tcp,67/udp,68/udp,546/udp,547/udp}# firewall-cmd --zone public \ --add-port={80/tcp,67/udp,68/udp,546/udp,547/udp}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个命令启用了临时访问,直到下次服务器重启为止。
-
可选:若要启用永久访问权限,可在 命令中添加
--permanent选项。 重新载入防火墙规则:
firewall-cmd --reload
# firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启动 HTTP 服务器:
systemctl enable --now httpd
# systemctl enable --now httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
html目录,并使其内容可读和可执行:chmod -cR u=rwX,g=rX,o=rX /var/www/html
# chmod -cR u=rwX,g=rX,o=rX /var/www/htmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 恢复
html目录的 SELinux 上下文:restorecon -FvvR /var/www/html
# restorecon -FvvR /var/www/htmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 12 章 准备一个 PXE 安装源 复制链接链接已复制到粘贴板!
您必须在 PXE 服务器上配置 TFTP 和 DHCP ,以启用 PXE 引导和网络安装。
12.1. 网络安装概述 复制链接链接已复制到粘贴板!
网络安装允许您将 Red Hat Enterprise Linux 安装到可访问安装服务器的系统。网络安装至少需要两个系统:
- 服务器
- 运行 DHCP 服务器、HTTP、HTTPS、FTP 或 NFS 的服务器以及 PXE 引导情况下的TFTP 服务器。虽然每个服务器可以运行在不同的物理系统上,但本节中的流程假设单个系统正在运行所有服务器。
- 客户端
- 要安装 Red Hat Enterprise Linux 的系统。安装开始后,客户端会查询 DHCP 服务器,从 HTTP 或 TFTP 服务器接收引导文件,并从 HTTP、HTTPS、FTP 或者 NFS 服务器下载安装镜像。与其它安装方法不同,客户端不需要任何物理引导介质来启动安装。
要从网络引导客户端,请在固件中或客户端上的快速引导菜单中启用网络引导。在某些硬件上,从网络引导的选项可能被禁用了,或者不可用。
准备使用 HTTP 或 PXE 从网络安装 Red Hat Enterprise Linux 的工作流步骤如下:
流程
- 将安装 ISO 镜像或者安装树导出到 NFS、HTTPS、HTTP 或者 FTP 服务器中。
- 配置 HTTP 或 TFTP 服务器以及 DHCP 服务器,并在服务器上启动 HTTP 或 TFTP 服务。
- 引导客户端并开始安装。
您可以在以下网络引导协议之间进行选择:
- HTTP
- 如果您的客户端 UEFI 支持,红帽建议使用 HTTP 引导。HTTP 引导通常更加可靠。
- PXE (TFTP)
- 客户端系统更广泛地支持 PXE 引导,但通过此协议发送引导文件可能会很慢,并导致超时失败。
12.2. 为网络引导配置 DHCPv4 服务器 复制链接链接已复制到粘贴板!
在您的服务器上启用 DHCP 版本 4 (DHCPv4)服务,以便它可以提供网络引导功能。
先决条件
您通过 IPv4 协议准备网络安装。
对于 IPv6 ,请参阅 为网络引导配置 DHCPv6 服务器。
查找服务器的网络地址。
在以下示例中,服务器有一个具有此配置的网卡:
- IPv4 地址
- 192.168.124.2/24
- IPv4 网关
- 192.168.124.1
流程
安装 DHCP 服务器:
yum install dhcp-server
yum install dhcp-serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow 设置 DHCPv4 服务器。在
/etc/dhcp/dhcpd.conf文件中输入以下配置。替换地址以匹配您的网卡。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动 DHCPv4 服务:
systemctl enable --now dhcpd
# systemctl enable --now dhcpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
12.3. 为网络引导配置 DHCPv6 服务器 复制链接链接已复制到粘贴板!
在您的服务器上启用 DHCP 版本 6 (DHCPv4)服务,以便它可以提供网络引导功能。
先决条件
您通过 IPv6 协议准备网络安装。
对于 IPv4 ,请参阅 为网络引导配置 DHCPv4 服务器。
查找服务器的网络地址。
在以下示例中,服务器有一个具有此配置的网卡:
- IPv6 地址
- fd33:eb1b:9b36::2/64
- IPv6 网关
- fd33:eb1b:9b36::1
流程
安装 DHCP 服务器:
yum install dhcp-server
yum install dhcp-serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow 设置 DHCPv6 服务器。在
/etc/dhcp/dhcpd6.conf文件中输入以下配置。替换地址以匹配您的网卡。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动 DHCPv6 服务:
systemctl enable --now dhcpd6
# systemctl enable --now dhcpd6Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 DHCPv6 数据包被防火墙中的 RP 过滤器丢弃了,请检查其日志。如果日志包含
rpfilter_DROP条目,请使用/etc/firewalld/firewalld.conf文件中的以下配置禁用过滤器:IPv6_rpfilter=no
IPv6_rpfilter=noCopy to Clipboard Copied! Toggle word wrap Toggle overflow
12.4. 为基于 BIOS 的客户端配置 TFTP 服务器 复制链接链接已复制到粘贴板!
您必须配置一个 TFTP 服务器和 DHCP 服务器,并在 PXE 服务器上为基于 BIOS 的 AMD 和 Intel 64 位系统启动 TFTP 服务。
流程
以 root 用户身份,安装以下软件包:
yum install tftp-server
# yum install tftp-serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow 允许到防火墙中的
tftp 服务的传入连接:firewall-cmd --add-service=tftp
# firewall-cmd --add-service=tftpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这个命令启用了临时访问,直到下次服务器重启为止。
可选:若要启用永久访问权限,可在 命令中添加
--permanent选项。根据安装 ISO 文件的位置,您可能需要允许 HTTP 或者其他服务的进入连接。
从 DVD ISO 镜像文件中的
SYSLINUX软件包访问pxelinux.0文件,其中 my_local_directory 是您创建的目录的名称:mount -t iso9660 /path_to_image/name_of_image.iso /mount_point -o loop,ro
# mount -t iso9660 /path_to_image/name_of_image.iso /mount_point -o loop,roCopy to Clipboard Copied! Toggle word wrap Toggle overflow cp -pr /mount_point/BaseOS/Packages/syslinux-tftpboot-version-architecture.rpm /my_local_directory
# cp -pr /mount_point/BaseOS/Packages/syslinux-tftpboot-version-architecture.rpm /my_local_directoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow umount /mount_point
# umount /mount_pointCopy to Clipboard Copied! Toggle word wrap Toggle overflow 解压软件包:
rpm2cpio syslinux-tftpboot-version-architecture.rpm | cpio -dimv
# rpm2cpio syslinux-tftpboot-version-architecture.rpm | cpio -dimvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
tftpboot/中创建pxelinux/目录,并将该目录中的所有文件复制到pxelinux/目录中:mkdir /var/lib/tftpboot/pxelinux
# mkdir /var/lib/tftpboot/pxelinuxCopy to Clipboard Copied! Toggle word wrap Toggle overflow cp /my_local_directory/tftpboot/* /var/lib/tftpboot/pxelinux
# cp /my_local_directory/tftpboot/* /var/lib/tftpboot/pxelinuxCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
pxelinux/目录中创建pxelinux.cfg/目录:mkdir /var/lib/tftpboot/pxelinux/pxelinux.cfg
# mkdir /var/lib/tftpboot/pxelinux/pxelinux.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建名为
default的配置文件,并将其添加到pxelinux.cfg/目录中,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
安装程序在没有运行时镜像的情况下无法引导。使用
inst.stage2引导选项指定镜像的位置。另外,您可以使用inst.repo=选项指定镜像和安装源。 -
与
inst.repo一起使用的安装源位置必须包含有效的.treeinfo文件。 -
当您选择 RHEL8 安装 DVD 作为安装源时,
.treeinfo文件会指向 BaseOS 和 AppStream 软件仓库。您可以使用单个inst.repo选项来加载这两个软件仓库。
-
安装程序在没有运行时镜像的情况下无法引导。使用
创建一个子目录,以将引导镜像文件存储在
/var/lib/tftpboot/目录中,并将引导镜像文件复制到 目录。在本例中,目录为/var/lib/tftpboot/pxelinux/images/RHEL-8/:mkdir -p /var/lib/tftpboot/pxelinux/images/RHEL-8/ cp /path_to_x86_64_images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/pxelinux/images/RHEL-8/# mkdir -p /var/lib/tftpboot/pxelinux/images/RHEL-8/ # cp /path_to_x86_64_images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/pxelinux/images/RHEL-8/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动并启用
tftp.socket服务:systemctl enable --now tftp.socket
# systemctl enable --now tftp.socketCopy to Clipboard Copied! Toggle word wrap Toggle overflow PXE 引导服务器现在可以提供 PXE 客户端。您可以启动客户端,即您要安装 Red Hat Enterprise Linux 的系统,在提示指定引导源时选择 PXE 引导,并启动网络安装。
12.5. 为基于 UEFI 的客户端配置 TFTP 服务器 复制链接链接已复制到粘贴板!
您必须配置一个 TFTP 服务器和 DHCP 服务器,并为基于 UEFI 的 AMD64、Intel 64 和 64 位 ARM 系统的 PXE 服务器启动 TFTP 服务。
Red Hat Enterprise Linux 8 UEFI PXE 引导支持基于 MAC 的 GRUB 菜单文件的小写文件格式。例如,GRUB 的 MAC 地址文件格式为 grub.cfg-01-aa-bb-cc-dd-ee-ff
流程
以 root 用户身份,安装以下软件包:
yum install tftp-server
# yum install tftp-serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow 允许到防火墙中的
tftp 服务的传入连接:firewall-cmd --add-service=tftp
# firewall-cmd --add-service=tftpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这个命令启用了临时访问,直到下次服务器重启为止。
可选:若要启用永久访问权限,可在 命令中添加
--permanent选项。根据安装 ISO 文件的位置,您可能需要允许 HTTP 或者其他服务的进入连接。
访问 DVD ISO 镜像中的 EFI 引导镜像文件:
mount -t iso9660 /path_to_image/name_of_image.iso /mount_point -o loop,ro
# mount -t iso9660 /path_to_image/name_of_image.iso /mount_point -o loop,roCopy to Clipboard Copied! Toggle word wrap Toggle overflow 复制 DVD ISO 镜像中的 EFI 引导镜像:
mkdir /var/lib/tftpboot/redhat cp -r /mount_point/EFI /var/lib/tftpboot/redhat/ umount /mount_point
# mkdir /var/lib/tftpboot/redhat # cp -r /mount_point/EFI /var/lib/tftpboot/redhat/ # umount /mount_pointCopy to Clipboard Copied! Toggle word wrap Toggle overflow 修复复制的文件的权限:
chmod -R 755 /var/lib/tftpboot/redhat/
# chmod -R 755 /var/lib/tftpboot/redhat/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
/var/lib/tftpboot/redhat/efi/boot/grub.cfg的内容替换为以下示例:set timeout=60 menuentry 'RHEL 8' { linux images/RHEL-8/vmlinuz ip=dhcp inst.repo=http://192.168.124.2/RHEL-8/x86_64/iso-contents-root/ initrd images/RHEL-8/initrd.img }set timeout=60 menuentry 'RHEL 8' { linux images/RHEL-8/vmlinuz ip=dhcp inst.repo=http://192.168.124.2/RHEL-8/x86_64/iso-contents-root/ initrd images/RHEL-8/initrd.img }Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
安装程序在没有运行时镜像的情况下无法引导。使用
inst.stage2引导选项指定镜像的位置。另外,您可以使用inst.repo=选项指定镜像和安装源。 -
与
inst.repo一起使用的安装源位置必须包含有效的.treeinfo文件。 -
当您选择 RHEL8 安装 DVD 作为安装源时,
.treeinfo文件会指向 BaseOS 和 AppStream 软件仓库。您可以使用单个inst.repo选项来加载这两个软件仓库。
-
安装程序在没有运行时镜像的情况下无法引导。使用
创建一个子目录,以将引导镜像文件存储在
/var/lib/tftpboot/目录中,并将引导镜像文件复制到 目录。在这个示例中,目录为/var/lib/tftpboot/images/RHEL-8/:mkdir -p /var/lib/tftpboot/images/RHEL-8/ cp /mount_point/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/images/RHEL-8/# mkdir -p /var/lib/tftpboot/images/RHEL-8/ # cp /mount_point/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/images/RHEL-8/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动并启用
tftp.socket服务:systemctl enable --now tftp.socket
# systemctl enable --now tftp.socketCopy to Clipboard Copied! Toggle word wrap Toggle overflow PXE 引导服务器现在可以提供 PXE 客户端。您可以启动客户端,即您要安装 Red Hat Enterprise Linux 的系统,在提示指定引导源时选择 PXE 引导,并启动网络安装。
12.6. 为 IBM Power 系统配置网络服务器 复制链接链接已复制到粘贴板!
您可以使用 GRUB 为 IBM Power 系统配置网络引导服务器。
流程
以 root 用户身份,安装以下软件包:
yum install tftp-server dhcp-server
# yum install tftp-server dhcp-serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在防火墙中,允许到
tftp服务的进入连接:firewall-cmd --add-service=tftp
# firewall-cmd --add-service=tftpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这个命令启用了临时访问,直到下次服务器重启为止。
可选:若要启用永久访问权限,可在 命令中添加
--permanent选项。根据安装 ISO 文件的位置,您可能需要允许 HTTP 或者其他服务的进入连接。
在 TFTP root 中创建一个 GRUB 网络引导目录:
grub2-mknetdir --net-directory=/var/lib/tftpboot Netboot directory for powerpc-ieee1275 created. Configure your DHCP server to point to /boot/grub2/powerpc-ieee1275/core.elf
# grub2-mknetdir --net-directory=/var/lib/tftpboot Netboot directory for powerpc-ieee1275 created. Configure your DHCP server to point to /boot/grub2/powerpc-ieee1275/core.elfCopy to Clipboard Copied! Toggle word wrap Toggle overflow 命令输出会告诉您 DHCP 配置中需要配置的文件名,如下所述。
如果 PXE 服务器在 x86 机器上运行,则必须在 tftp root 中创建
GRUB2网络引导目录前安装grub2-ppc64le-modules:yum install grub2-ppc64le-modules
# yum install grub2-ppc64le-modulesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
创建一个 GRUB 配置文件:
/var/lib/tftpboot/boot/grub2/grub.cfg,如下例中所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
安装程序在没有运行时镜像的情况下无法引导。使用
inst.stage2引导选项指定镜像的位置。另外,您可以使用inst.repo=选项指定镜像和安装源。 -
与
inst.repo一起使用的安装源位置必须包含有效的.treeinfo文件。 -
当您选择 RHEL8 安装 DVD 作为安装源时,
.treeinfo文件会指向 BaseOS 和 AppStream 软件仓库。您可以使用单个inst.repo选项来加载这两个软件仓库。
-
安装程序在没有运行时镜像的情况下无法引导。使用
使用以下命令挂载 DVD ISO 镜像:
mount -t iso9660 /path_to_image/name_of_iso/ /mount_point -o loop,ro
# mount -t iso9660 /path_to_image/name_of_iso/ /mount_point -o loop,roCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个目录,并将
initrd.img和vmlinuz文件从 DVD ISO 镜像复制到其中,例如:cp /mount_point/ppc/ppc64/{initrd.img,vmlinuz} /var/lib/tftpboot/grub2-ppc64/# cp /mount_point/ppc/ppc64/{initrd.img,vmlinuz} /var/lib/tftpboot/grub2-ppc64/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将您的 DHCP 服务器配置为使用与
GRUB2打包的引导镜像,如下例所示。如果您已经配置了 DHCP 服务器,那么请在 DHCP 服务器上执行此步骤。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
调整示例参数
subnet、netmask、routers、fixed-address和hardware ethernet以适合您的网络配置。file name参数;这是此流程中前面的grub2-mknetdir命令输出的文件名。 在 DHCP 服务器上,启动并启用
dhcpd服务。如果您已在 localhost 上配置了 DHCP 服务器,请在 localhost 上启动并启用dhcpd服务。systemctl enable --now dhcpd
# systemctl enable --now dhcpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启动并启用
tftp.socket服务:systemctl enable --now tftp.socket
# systemctl enable --now tftp.socketCopy to Clipboard Copied! Toggle word wrap Toggle overflow PXE 引导服务器现在可以提供 PXE 客户端。您可以启动客户端,即您要安装 Red Hat Enterprise Linux 的系统,在提示指定引导源时选择 PXE 引导,并启动网络安装。
第 13 章 Kickstart 参考 复制链接链接已复制到粘贴板!
附录 B. kickstart 脚本文件格式参考 复制链接链接已复制到粘贴板!
这个参考详细描述了 kickstart 文件格式。
B.1. kickstart 文件格式 复制链接链接已复制到粘贴板!
Kickstart 脚本是包含安装程序识别的关键字的纯文本文件,它们是安装指令。任何可将文件保存为 ASCII 文本的文本编辑,,比如 Gedit 或 vim(Linux 系统),或 Notepad(Windows 系统),都可以用来创建和编辑 Kickstart 文件。Kickstart 配置的文件名无关紧要,但建议使用简单名称,因为您需要在其他配置文件或对话框中指定这个名称。
- 命令
- 命令是作为安装指令的关键字。每个命令都必须位于一行。命令可以选择。指定命令和选项和在 shell 中使用 Linux 命令类似。
- 部分
-
某些以
%字符开头的特殊命令可启动某个部分。部分中的命令解释与其它部分的命令不同。每个部分都必须使用%end命令结束。 - 部分类型
可用的部分有:
-
Add-on 部分。这些部分使用
%addon addon_name命令。 -
软件包选择部分。以
%packages开始。使用它列出安装的软件包,包括间接方法,比如软件包组或者模块。 -
Script 部分。它们以
%pre、%pre-install、%post和%onerror开头。这些部分不是必需的。
-
Add-on 部分。这些部分使用
- command 部分
-
command 部分是那些不属于任何 script 部分或
%packages部分的 Kickstart 文件中的命令的术语。 - 脚本部分计数和排序
-
除 command 部分外的所有部分都是可选的,并可以多次出现。当要评估特定类型的脚本部分时,Kickstart 中存在的所有部分都会按照外观顺序进行评估:两个
%post部分会按照出现的顺序进行评估。但是,您不必按任何顺序指定各种脚本部分类型:%pre部分前是否有%post部分无关紧要。
- 注释
-
Kickstart 注释是以 hash
#字符开头的行。安装程序会忽略这些行。
不必需的项目可以被省略。省略安装程序中所有需要的项目,这样用户就可以象常规互动安装一样,提供对相关项目的回答。也可以将 kickstart 脚本声明为非交互式,通过 cmdline 命令。在非互动模式中,任何缺少的回答都会中止安装过程。
如果在文本或图形模式下进行 kickstart 安装过程中需要用户交互,则仅进入要强制更新的窗口以完成安装。输入 spoke 可能会导致重置 kickstart 配置。在进入 Installation Destination 窗口后,重置配置专门应用于与存储相关的 kickstart 命令。
B.2. Kickstart 中的软件包选择 复制链接链接已复制到粘贴板!
Kickstart 使用 %packages 命令启动的部分来选择要安装的软件包。您可以以这种方式安装软件包、组、环境、模块流和模块配置集。
B.2.1. 软件包选择部分 复制链接链接已复制到粘贴板!
使用 %packages 命令启动一个 Kickstart 部分,该部分描述了要安装的软件包。%packages 部分必须以 %end 命令结尾。
您可以根据环境、组、模块流、模块配置集或者它们的软件包名称指定软件包。定义了包含相关软件包的几个环境和组。请参考有关环境和组列表的 Red Hat Enterprise Linux 8 安装 DVD 上的 repository/repodata/*-comps-repository.architecture.xml 文件。
*-comps-repository.architecture.xml 文件包含描述可用环境(使用 <environment> 标签标记)和组( <group> 标签)的结构。每个条目都有一个 ID、用户可见值、名称、描述和软件包列表。如果为安装选择了组,则在软件包列表中标记了 mandatory 的软件包总会被安装;如果其它位置没有特别排除,标记了 default 的软件包也会被安装,标记为 optional 的软件包需要在其他地方被指定包括时才会安装,即使已经选择该组也是如此。
您可以使用其 ID(标签)或名称( <id> 标签)指定软件包组或环境 <name>。
如果您不确定应该安装什么软件包,红帽建议您选择 Minimal Install 环境。Minimal Install 只提供运行 Red Hat Enterprise Linux 8 所必需的软件包。这将显著降低系统受某个漏洞影响的机会。如果需要,可以在安装后再添加附加软件包。有关 Minimal Install 的详情,请参阅 安全强化 文档中的安装最小软件包挂载部分。Initial Setup 无法在从 Kickstart 文件安装系统后运行,除非桌面环境和 X Window 系统包含在安装中,且启用了图形登录。
要在 64 位系统中安装 32 位软件包:
-
为
%packages部分指定--multilib选项 -
使用构建该软件包的 32 位架构附加软件包名称;例如:
glibc.i686
B.2.2. 软件包选择命令 复制链接链接已复制到粘贴板!
这些命令可以在 Kickstart 文件的 %packages 部分中使用。
- 指定一个环境
以
@^符号开头的行形式指定要安装的整个环境:%packages @^Infrastructure Server %end
%packages @^Infrastructure Server %endCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这将安装属于
Infrastructure Server环境一部分的所有软件包。所有可用环境都在 Red Hat Enterprise Linux 8 安装 DVD 上的repository/repodata/*-comps-repository.architecture.xml文件中进行了描述。在 Kickstart 文件中只能指定一个环境。如果指定了多个环境,则只使用最后指定的环境。
- 指定组
指定组,每个条目一行,以
@符号开头,然后是*-comps-repository.architecture.xml文件中给出的完整组群名称或者组群 ID。例如:%packages @X Window System @Desktop @Sound and Video %end
%packages @X Window System @Desktop @Sound and Video %endCopy to Clipboard Copied! Toggle word wrap Toggle overflow Core组总是被选择 - 不需要在%packages部分指定它。- 指定单独的软件包
根据名称指定单个软件包,每个条目对应一行。您可以在软件包名称中使用星号字符 (
*) 作为通配符。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow docbook*条目包含软件包docbook-dtds和docbook-style,它们与通配符表示的模式匹配。- 指定模块流的配置集
使用配置集语法为模块流指定配置集(一个条目为一行):
%packages @module:stream/profile %end
%packages @module:stream/profile %endCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这会安装模块流指定配置集中列出的所有软件包。
- 当模块指定了默认流时,您可以将其退出。如果没有指定默认流,您必须指定它。
- 当模块流指定默认配置集时,您可以将其退出。如果没有指定默认配置集,您必须指定它。
- 无法多次使用不同流安装模块。
- 有可能安装同一模块和流的多个配置集。
模块和组使用以
@符号开头的相同语法。当某个模块和软件包组具有相同名称时,该模块会优先使用。在 Red Hat Enterprise Linux 8 中,模块只存在于 AppStream 存储库中。要列出提供的模块,请在安装的 Red Hat Enterprise Linux 8 系统上使用
yum module list命令。也可以使用模块
Kickstart命令启用模块流,然后通过直接命名模块流中包含的软件包来安装它们。- 排除环境、组群或者软件包
使用前导短划线 (
-) 指定安装中排除的软件包或组。例如:%packages -@Graphical Administration Tools -autofs -ipa*compat %end
%packages -@Graphical Administration Tools -autofs -ipa*compat %endCopy to Clipboard Copied! Toggle word wrap Toggle overflow
不支持在 Kickstart 文件中只使用 * 安装所有可用软件包。
您可以使用多个选项更改 %packages 部分的默认行为。有些选项可以用于整个软件包选择,其它选项只与特定的组一起使用。
B.2.3. 通用软件包选择选项 复制链接链接已复制到粘贴板!
以下选项可用于 %packages 部分。要使用某个选项,请将其附加到软件包选择部分的开头。例如:
%packages --multilib --ignoremissing
%packages --multilib --ignoremissing
--default- 安装默认软件包组。这与在互动安装过程中的软件包选择页面中没有其他选择时要安装的软件包组对应。
--excludedocs-
不要安装软件包中的任何文档。在大多数情况下,这不包括通常安装在
/usr/share/doc目录中的任何文件,但要排除的特定文件取决于各个软件包。 --ignoremissing- 忽略安装源中缺少的软件包、组、模块流、模块配置集和环境,而不是停止安装来询问安装是中止还是继续。
--instLangs=- 指定要安装的语言列表。这与软件包组级别选择不同。这个选项没有描述应该安装哪些软件包组,而是设定 RPM 宏控制应该安装单个软件包的转换文件。
--multilib为多 lib 软件包配置安装的系统,允许在 64 位系统中安装 32 位软件包,并安装在这部分中指定的软件包。
通常在 AMD64 和 Intel 64 系统中,您只能安装 x86_64 和 noarch 软件包。但是,使用 --multilib 选项,您可以自动安装 32 位 AMD 和 i686 Intel 系统软件包(若有)可用。
这只适用于
%packages部分明确指定的软件包。那些只作为相依性安装而没有在 Kickstart 文件中指定的软件包只能安装到需要它们的架构版本中,即使它们可用于更多构架。用户可将 Anaconda 配置为在安装系统期间以
multilib模式安装软件包。使用以下选项之一启用multilib模式:使用以下行配置 Kickstart 文件:
%packages --multilib --default %end
%packages --multilib --default %endCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 在引导安装镜像时添加 inst.multilib 引导选项。
--nocore禁用
@Core软件包组的安装,否则该安装默认为始终安装。使用--nocore禁用@Core软件包组应当仅用于创建轻量级容器;使用--nocore安装桌面或服务器系统将导致系统不可用。备注--excludeWeakdeps- 禁用从弱依赖项安装软件包。这些软件包都链接到由 Recommends 和 supplements 标记组成的所选软件包。默认情况下会安装弱依赖项。
--retries=- 设置 YUM 试图下载软件包的次数(尝试)。默认值为 10。这个选项只适用于安装过程中,不会影响安装的系统上的 YUM 配置。
--timeout=- 以秒为单位设置 YUM 超时。默认值为 30。这个选项只适用于安装过程中,不会影响安装的系统上的 YUM 配置。
B.2.4. 特定软件包组的选项 复制链接链接已复制到粘贴板!
这个列表中的选项仅适用于单个软件包组。不要在 Kickstart 文件中的 %packages 命令中使用它们,而是将它们附加到组名称中。例如:
%packages @Graphical Administration Tools --optional %end
%packages
@Graphical Administration Tools --optional
%end
--nodefaults- 只安装组的强制软件包,而不是默认选择。
--optional除了安装默认选择外,还要安装在
*-comps-repository.architecture.xml文件中的组定义中标记为可选的软件包。有些软件包组(如
Scientific Support)没有指定任何强制或默认软件包 - 仅指定了可选软件包。在这种情况下,必须始终使用--optional选项,否则不会安装该组中的软件包。
--nodefaults 和 --optional 选项不能一起使用。在安装过程中,您可以使用 --nodefaults 只安装必需的软件包,并在安装后在安装的系统上安装可选软件包。
B.3. Kickstart 文件中的脚本 复制链接链接已复制到粘贴板!
kickstart 文件可以包括以下脚本:
-
%pre -
%pre-install -
%post
本节提供有关脚本的以下详情:
- 执行时间
- 可以包含在脚本中的命令类型
- 脚本的目的
- 脚本选项
B.3.1. %pre 脚本 复制链接链接已复制到粘贴板!
%pre 脚本在加载 Kickstart 文件后立即在系统中运行,但在完全解析并开始安装之前。每个部分必须以 %pre 开头并以 %end 结尾。
%pre 脚本可用于激活和配置联网和存储设备。还可以使用安装环境中可用的脚本来运行脚本。如果您在继续安装之前有需要特殊配置的联网和存储,或者具有设置其他日志参数或环境变量的脚本,则添加 %pre 脚本非常有用。
使用 %pre 脚本调试问题可能比较困难,因此建议仅在需要时使用 %pre 脚本。
Kickstart 的 %pre 部分会在安装阶段执行,该阶段发生在安装程序镜像(inst.stage2)被提取后:这意味着在 root 切换到安装程序环境(安装程序镜像)后,以及 Anaconda 安装程序本身启动 后。然后,应用 %pre 中的配置被应用,可用于从配置的安装存储库中获取软件包,例如,通过Kickstart 中的 URL。但是,它 不能 用于配置网络,以从网络获取镜像(inst.stage2)。
除了安装环境 /sbin 和 /bin 目录中的大多数实用程序外,还可在 %pre 脚本中使用与网络、存储和文件系统相关的命令。
您可以在 %pre 部分中访问网络。然而,命名服务还没有被配置,所以只能使用 IP 地址,而不能使用 URL。
pre 脚本不会在 chroot 环境中运行。
B.3.1.1. %pre 脚本部分选项 复制链接链接已复制到粘贴板!
以下选项可以用来改变预安装脚本的行为。要使用某个选项,请将其附加到脚本开头的 %pre 行中。例如:
%pre --interpreter=/usr/libexec/platform-python -- Python script omitted -- %end
%pre --interpreter=/usr/libexec/platform-python
-- Python script omitted --
%end
--interpreter=允许指定不同的脚本语言,如 Python。可以使用系统中可用的脚本语言;在大多数情况下,它们是
/usr/bin/sh、/usr/bin/bash和/usr/libexec/platform-python。请注意,
platform-python解释器使用 Python 版本 3.6。对于新路径和版本,您必须将您的针对以前的 RHEL 版本的 Python 脚本进行更改,以适用于新的路径和版本。另外,platform-python用于系统工具:使用安装环境之外的python36软件包。有关 Red Hat Enterprise Linux 中 Python 的详情,请参考 配置基本系统设置 中的 Python 简介。--erroronfail-
如果脚本失败,显示错误并停止安装。错误消息会指示您记录故障原因的位置。安装的系统可能会处于不稳定且无法引导的状态。您可以使用
inst.nokill选项调试脚本。 --log=将脚本的输出记录到指定的日志文件中。例如:
%pre --log=/tmp/ks-pre.log
%pre --log=/tmp/ks-pre.logCopy to Clipboard Copied! Toggle word wrap Toggle overflow
B.3.2. %pre-install 脚本 复制链接链接已复制到粘贴板!
pre-install 脚本中的命令会在以下任务完成后运行:
- 系统已被分区
- 文件系统创建并挂载在 /mnt/sysroot 下
- 网络已根据任何引导选项和 kickstart 命令进行配置
每个 %pre-install 部分必须以 %pre-install 开头并以 %end 结尾。
%pre-install 脚本可用于修改安装,并在软件包安装之前添加带有保证 ID 的用户和组。
建议您在安装所需的任何修改中使用 %post 脚本。只有在 %post 脚本对所需修改不够时才使用 %pre-install 脚本。
pre-install 脚本不在 chroot 环境中运行。
B.3.2.1. %pre-install script 部分选项 复制链接链接已复制到粘贴板!
以下选项可用于更改 pre-install 脚本的行为。要使用某个选项,请将其附加到脚本开头的 %pre-install 行中。例如:
%pre-install --interpreter=/usr/libexec/platform-python -- Python script omitted -- %end
%pre-install --interpreter=/usr/libexec/platform-python
-- Python script omitted --
%end
您可以有多个 %pre-install 部分,它们具有相同的或不同的解释器。它们按照它们在 Kickstart 文件中的顺序进行评估。
--interpreter=允许指定不同的脚本语言,如 Python。可以使用系统中可用的脚本语言;在大多数情况下,它们是
/usr/bin/sh、/usr/bin/bash和/usr/libexec/platform-python。platform-python解释器使用 Python 版本 3.6。对于新路径和版本,您必须将您的针对以前的 RHEL 版本的 Python 脚本进行更改,以适用于新的路径和版本。另外,platform-python用于系统工具:使用安装环境之外的python36软件包。有关 Red Hat Enterprise Linux 中 Python 的详情,请参考 配置基本系统设置 中的 Python 简介。--erroronfail-
如果脚本失败,显示错误并停止安装。错误消息会指示您记录故障原因的位置。安装的系统可能会处于不稳定且无法引导的状态。您可以使用
inst.nokill选项调试脚本。 --log=将脚本的输出记录到指定的日志文件中。例如:
%pre-install --log=/mnt/sysroot/root/ks-pre.log
%pre-install --log=/mnt/sysroot/root/ks-pre.logCopy to Clipboard Copied! Toggle word wrap Toggle overflow
B.3.3. %post 脚本 复制链接链接已复制到粘贴板!
%post 脚本是安装后脚本,可在安装完成后运行,但在第一次重启系统前运行。您可以使用这部分来运行任务,比如系统订阅。
您可以添加系统在安装结束后但在第一次重启该系统之前要运行的命令,。此部分必须以 %post 开头并以 %end 结尾。
%post 部分可用于安装其他软件或配置其他名称服务器等功能。post-install 脚本是一个 chroot 环境中运行的,因此,从安装介质中复制脚本或 RPM 软件包等任务在默认情况下不起作用。您可以使用 --nochroot 选项更改此行为,如下所述。然后 %post 脚本将在安装环境中运行,而不是在安装的目标系统中的 chroot 中运行。
由于安装后脚本在 chroot 环境中运行,因此大多数 systemctl 命令将拒绝执行任何操作。
在执行 %post 部分的过程中,必须仍然插入安装介质。
B.3.3.1. %post 脚本部分选项 复制链接链接已复制到粘贴板!
以下选项可以用来改变安装后脚本的行为。要使用某个选项,请将其附加到脚本开头的 %post 行中。例如:
%post --interpreter=/usr/libexec/platform-python -- Python script omitted -- %end
%post --interpreter=/usr/libexec/platform-python
-- Python script omitted --
%end
--interpreter=允许指定不同的脚本语言,如 Python。例如:
%post --interpreter=/usr/libexec/platform-python
%post --interpreter=/usr/libexec/platform-pythonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可以使用系统中可用的脚本语言;在大多数情况下,它们是
/usr/bin/sh、/usr/bin/bash和/usr/libexec/platform-python。platform-python解释器使用 Python 版本 3.6。对于新路径和版本,您必须将您的针对以前的 RHEL 版本的 Python 脚本进行更改,以适用于新的路径和版本。另外,platform-python用于系统工具:使用安装环境之外的python36软件包。有关 Red Hat Enterprise Linux 中 Python 的详情,请参考 配置基本系统设置 中的 Python 简介。--nochroot允许您指定在 chroot 环境之外运行的命令。
以下示例将 /etc/resolv.conf 文件复制到刚安装的文件系统中。
%post --nochroot cp /etc/resolv.conf /mnt/sysroot/etc/resolv.conf %end
%post --nochroot cp /etc/resolv.conf /mnt/sysroot/etc/resolv.conf %endCopy to Clipboard Copied! Toggle word wrap Toggle overflow --erroronfail-
如果脚本失败,显示错误并停止安装。错误消息会指示您记录故障原因的位置。安装的系统可能会处于不稳定且无法引导的状态。您可以使用
inst.nokill选项调试脚本。 --log=将脚本的输出记录到指定的日志文件中。无论是否使用
--nochroot选项,都必须考虑日志文件的路径。例如,没有--nochroot:%post --log=/root/ks-post.log
%post --log=/root/ks-post.logCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
--nochroot:%post --nochroot --log=/mnt/sysroot/root/ks-post.log
%post --nochroot --log=/mnt/sysroot/root/ks-post.logCopy to Clipboard Copied! Toggle word wrap Toggle overflow
B.3.3.2. 例如:在安装后脚本中挂载 NFS 复制链接链接已复制到粘贴板!
这个 %post 部分的示例挂载 NFS 共享并执行位于 /usr/new-machines/ 上的名为 runme 的脚本。在 Kickstart 模式下不支持 NFS 文件锁定,因此需要使用 -o nolock 选项。
B.3.3.3. 例如:将 subscription-manager 作为安装后脚本运行 复制链接链接已复制到粘贴板!
Kickstart 安装中最常用的安装脚本之一就是使用 Red Hat Subscription Manager 自动注册安装的系统。以下是 %post 脚本中的自动订阅示例:
%post --log=/root/ks-post.log subscription-manager register --username=admin@example.com --password=secret --auto-attach %end
%post --log=/root/ks-post.log
subscription-manager register --username=admin@example.com --password=secret --auto-attach
%end
subscription-manager 命令行脚本在红帽订阅管理服务器(客户门户网站订阅管理、Satellite 6 或者 CloudForms System Engine)中注册系统。这个脚本还可用来自动在该系统中分配或者附加与该系统最匹配的订阅。在客户门户网站中注册时,请使用红帽网络登录证书。当在 Satellite 6 或者 CloudForms System Engine 中注册时,您可能需要指定更多 subscription-manager 选项 --serverurl、--org、--environment 以及您的本地管理员提供的凭证。请注意,以 --org --activationkey 组合格式的凭证是避免在共享的 kickstart 文件中公开 --username --password 值的好方法。
注册命令中可以使用附加选项为系统设置首选服务等级,并为那些需要在旧流中继续修复的延长更新支持订阅客户限制对特定 RHEL 次要版本的更新和勘误。
有关使用 subscription-manager 命令的更多信息,请参阅红帽知识库解决方案 如何在 kickstart 文件中使用 subscription-manager?.
B.4. Anaconda 配置部分 复制链接链接已复制到粘贴板!
可以在 Kickstart 文件的 %anaconda 部分配置其他安装选项。这部分控制安装系统的用户界面行为。
这部分必须放在 Kickstart 文件的末尾(在 Kickstart 命令后面),且必须以 %anaconda 开头并以 %end 结尾。
目前,%anaconda 部分中唯一可以使用的命令是 pwpolicy。
例 B.1. %anaconda 脚本示例
以下是 %anaconda 部分示例:
%anaconda pwpolicy root --minlen=10 --strict %end
%anaconda
pwpolicy root --minlen=10 --strict
%end
这个示例 %anaconda 部分设置了一个密码策略,它要求 root 密码长度至少为 10 个字符,并严格禁止不满足此要求的密码。
B.5. Kickstart 错误处理部分 复制链接链接已复制到粘贴板!
从 Red Hat Enterprise Linux 7 开始,当安装程序中遇到严重错误时,Kickstart 安装会运行自定义脚本。示例场景在为安装请求的软件包中的一个错误,如果在配置中指定了,VNC 无法启动,或者在扫描存储设备时出现一个错误。如果是此类事件,安装将中止。要分析这些事件,安装程序会按照 Kickstart 文件中提供时间顺序运行所有 %onerror 脚本。如果出现回溯,您可以运行 %onerror 脚本。
每个 %onerror 脚本都需要以 %end 结尾。
您可以使用 inst.cmdline 对任何错误强制实施错误处理程序,以使每个错误都成为致命错误。
错误处理部分接受以下选项:
--erroronfail-
如果脚本失败,显示错误并停止安装。错误消息会指示您记录故障原因的位置。安装的系统可能会处于不稳定且无法引导的状态。您可以使用
inst.nokill选项调试脚本。 --interpreter=允许指定不同的脚本语言,如 Python。例如:
%onerror --interpreter=/usr/libexec/platform-python
%onerror --interpreter=/usr/libexec/platform-pythonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可以使用系统中可用的脚本语言;在大多数情况下,它们是
/usr/bin/sh、/usr/bin/bash和/usr/libexec/platform-python。platform-python解释器使用 Python 版本 3.6。对于新路径和版本,您必须将您的针对以前的 RHEL 版本的 Python 脚本进行更改,以适用于新的路径和版本。另外,platform-python用于系统工具:使用安装环境之外的python36软件包。有关 Red Hat Enterprise Linux 中 Python 的详情,请参考 配置基本系统设置 中的 Python 简介。--log=- 将脚本的输出记录到指定的日志文件中。
B.6. Kickstart 附加组件部分 复制链接链接已复制到粘贴板!
从 Red Hat Enterprise Linux 7 开始,Kickstart 安装支持附加组件。这些附加组件可以在很多方面扩展基本 Kickstart(Anaconda)功能。
要在 Kickstart 文件中使用附加组件,请使用 %addon addon_name options 命令,并使用 %end 语句结束命令,这和预安装和安装后脚本部分类似。例如:如果要使用默认由 Anaconda 分配的 Kdump 附加组件,请使用以下命令:
%addon com_redhat_kdump --enable --reserve-mb=auto %end
%addon com_redhat_kdump --enable --reserve-mb=auto
%end
%addon 命令不包含任何自己的选项 - 所有选项都依赖于实际附加组件。
附录 C. Kickstart 命令和选项参考 复制链接链接已复制到粘贴板!
这个参考是 Red Hat Enterprise Linux 安装程序支持的所有 Kickstart 命令的完整列表。这些命令按字母顺序排序为几个广泛类别。如果某个命令可位于多个类别下,它将列在所有这些类别中。
C.1. Kickstart 的修改 复制链接链接已复制到粘贴板!
以下章节描述了 Red Hat Enterprise Linux 8 中 Kickstart 命令和选项的更改。
在 RHEL 8 中弃用了 auth 或 authconfig
因为已经删除了 authconfig 工具和软件包,Red Hat Enterprise Linux 8 中弃用了 auth 或 authconfig Kickstart 命令。
与命令行中的 authconfig 命令类似,Kickstart 脚本中的 authconfig 命令现在使用 authselect-compat 工具运行新的 authselect 工具。有关此兼容性层及其已知问题的描述,请参阅 authselect-migration(7) 手册页。安装程序将自动检测弃用命令的使用并在系统上安装 authselect-compat 软件包来提供兼容性层。
Kickstart 不再支持 Btrfs
从 Red Hat Enterprise Linux 8 起不再支持 Btrfs 文件系统。因此,图形用户界面(GUI)和 Kickstart 命令不再支持 Btrfs。
使用之前 RHEL 发行本中的 Kickstart 文件
如果您正在使用之前的 RHEL 版本中的 Kickstart 文件,请参阅 RHEL 8 文档中 的 Repositories 部分,以了解有关 Red Hat Enterprise Linux 8 BaseOS 和 AppStream 软件仓库的详情。
C.1.1. 弃用的 Kickstart 命令和选项 复制链接链接已复制到粘贴板!
在Red Hat Enterprise Linux 8 中弃用了以下 Kickstart 命令和选项。
如果只列出具体选项,则基础命令及其它选项仍可用且没有弃用。
-
auth或authconfig- 使用authselect替代 -
device -
deviceprobe -
dmraid -
install- 使用子命令或者方法作为命令 -
multipath -
bootloader --upgrade -
ignoredisk --interactive -
partition --active -
reboot --kexec -
syspurpose- 使用subscription-manager syspurpose替代
除 auth 或 authconfig 命令外,使用 Kickstart 文件中的命令会在日志中打印警告信息。
您可以使用 inst.ksstrict 引导选项将已弃用的命令警告转换为错误,但 auth 或 authconfig 命令除外。
C.1.2. 删除的 Kickstart 命令和选项 复制链接链接已复制到粘贴板!
在 Red Hat Enterprise Linux 8 中完全删除了以下 Kickstart 命令和选项。在 Kickstart 文件中使用它们将导致错误。
-
device -
deviceprobe -
dmraid -
install- 使用子命令或者方法作为命令 -
multipath -
bootloader --upgrade -
ignoredisk --interactive -
partition --active -
harddrive --biospart -
upgrade(该命令之前已经弃用。) -
btrfs -
part/partition btrfs -
part --fstype btrfs或partition --fstype btrfs -
logvol --fstype btrfs -
raid --fstype btrfs -
unsupported_hardware
如果只列出具体选项和值,则基础命令及其它选项仍可用且没有被删除。
C.2. 用于安装程序配置和流量控制的 Kickstart 命令 复制链接链接已复制到粘贴板!
这个列表中的 Kickstart 命令可控制安装模式和安装过程,以及最后发生什么。
C.2.1. cdrom 复制链接链接已复制到粘贴板!
cdrom Kickstart 命令是可选的。它使用系统上的第一个光驱执行安装。仅使用此命令一次。
语法
cdrom
cdrom
备注
-
在以前的版本中,
cdrom命令必须与install命令一同使用。install命令已弃用,cdrom可以自行使用,因为它表示install。 - 这个命令没有选项。
-
要实际运行安装,您必须指定
cdrom,harddrive,hmc,nfs,liveimg,ostreesetup,rhsm, 或url其中之一,除非inst.repo选项在内核命令行上指定了。
C.2.2. cmdline 复制链接链接已复制到粘贴板!
cmdline Kickstart 命令是可选的。它以完全非互动的命令行模式执行安装。任何互动提示都会终止安装。仅使用此命令一次。
语法
cmdline
cmdline
备注
-
对于完全自动安装,您必须在 Kickstart 文件中指定可用模式之一(
图形、文本或命令行),或者必须使用console=引导选项。如果没有指定模式,系统会尽可能使用图形模式,或者提示您从 VNC 和文本模式中选择。 - 这个命令没有选项。
- 这个模式在带有 x3270 终端的 64 位 IBM Z 系统上很有用。
C.2.3. driverdisk 复制链接链接已复制到粘贴板!
driverdisk Kickstart 命令是可选的。使用它为安装程序提供额外的驱动程序。
可在 Kickstart 安装过程中使用驱动程序磁盘提供默认不包括的额外驱动程序。您必须将驱动程序磁盘内容复制到系统的磁盘上分区的根目录中。然后,您必须使用 driverdisk 命令指定安装程序是否应该查找驱动程序磁盘及其位置。仅使用此命令一次。
语法
driverdisk [partition|--source=url|--biospart=biospart]
driverdisk [partition|--source=url|--biospart=biospart]
选项
您必须以以下一种方式指定驱动程序磁盘的位置:
-
partition - 包含驱动程序磁盘的分区。分区必须被指定为完整路径(例如
/dev/sdb1),而不 仅仅是分区名称(例如sdb1)。 --source=- 驱动程序磁盘的 URL。示例包括:driverdisk --source=ftp://path/to/dd.img driverdisk --source=http://path/to/dd.img driverdisk --source=nfs:host:/path/to/dd.img
driverdisk --source=ftp://path/to/dd.img driverdisk --source=http://path/to/dd.img driverdisk --source=nfs:host:/path/to/dd.imgCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
--biospart=- 包含驱动程序磁盘(如82p2)的 BIOS 分区。
注
也可以从本地磁盘或类似的设备加载驱动程序磁盘,而不是通过网络或从 initrd 加载。按照以下步骤操作:
- 在磁盘驱动器、USB 或者任何类似的设备上载入驱动程序磁盘。
- 将标签(如 DD )设置为这个设备。
在您的 Kickstart 文件中添加以下行:
driverdisk LABEL=DD:/e1000.rpm
driverdisk LABEL=DD:/e1000.rpmCopy to Clipboard Copied! Toggle word wrap Toggle overflow
使用特定标签替换 DD,使用特定名称替换 e1000.rpm。使用 inst.repo 命令支持的任何内容,而不是 LABEL 来指定您的磁盘驱动器。
C.2.4. EULA 复制链接链接已复制到粘贴板!
eula Kickstart 命令是可选的。使用这个选项在没有用户互动的情况下接受最终用户许可证协议(End User License Agreement,EULA)。指定这个选项可防止 Initial Setup 在完成安装并第一次重启系统后提示您接受该许可证。仅使用此命令一次。
语法
eula [--agreed]
eula [--agreed]
选项
-
--agreed(必需)- 接受 EULA。必须始终使用这个选项,否则eula命令就无意义。
C.2.5. firstboot 复制链接链接已复制到粘贴板!
firstboot Kickstart 命令是可选的。它决定了系统首次启动时 Initial Setup 应用程序是否启动。如果启用,则必须安装 initial-setup 软件包。如果没有指定,这个选项默认是禁用的。仅使用此命令一次。
语法
firstboot OPTIONS
firstboot OPTIONS
选项
-
--enable或--enabled- 系统第一次启动时启动 Initial Setup。 -
--disable或--disabled- 系统第一次引导时不会启动 Initial Setup。 -
--reconfig- 以重新配置模式在引导时启用 Initial Setup。这个模式除了默认选项外,还启用了 root 密码、时间和日期以及网络和主机名配置选项。
C.2.6. 图形化 复制链接链接已复制到粘贴板!
graphical Kickstart 命令是可选的。它在图形模式下执行安装。这是默认值。仅使用此命令一次。
语法
graphical [--non-interactive]
graphical [--non-interactive]
选项
-
--non-interactive- 以完全非互动模式执行安装。这个模式将在用户交互需要时终止安装。
备注
-
对于完全自动安装,您必须在 Kickstart 文件中指定可用模式之一(
图形、文本或命令行),或者必须使用console=引导选项。如果没有指定模式,系统会尽可能使用图形模式,或者提示您从 VNC 和文本模式中选择。
C.2.7. halt 复制链接链接已复制到粘贴板!
halt Kickstart 命令是可选的。
在成功完成安装后停止系统。这和手动安装相似,Anaconda 会显示一条信息并等待用户按任意键来重启系统。在 Kickstart 安装过程中,如果没有指定完成方法,将使用这个选项作为默认选项。仅使用此命令一次。
语法
halt
halt
备注
-
halt命令等同于shutdown -H命令。详情请查看您系统上的 shutdown (8) 手册页。 -
有关其他完成方法,请查看
poweroff、reboot和shutdown命令。 - 这个命令没有选项。
C.2.8. harddrive 复制链接链接已复制到粘贴板!
harddrive Kickstart 命令是可选的。它使用红帽安装树或者本地驱动器中的完整安装 ISO 镜像执行安装。驱动器必须使用安装程序可挂载的文件系统格式化: ext2、ext3、 ext4、vfat 或 xfs。仅使用此命令一次。
语法
harddrive OPTIONS
harddrive OPTIONS
选项
-
--partition=- 要从中安装的分区(如sdb2)。 -
--dir=- 包含安装树variant目录或完整安装 DVD 的 ISO 镜像的目录。
示例
harddrive --partition=hdb2 --dir=/tmp/install-tree
harddrive --partition=hdb2 --dir=/tmp/install-tree
备注
-
在以前的版本中,
harddrive命令必须与install命令一同使用。install命令已弃用,并且可以自行使用harddrive,因为它表示安装。 -
要实际运行安装,您必须指定
cdrom,harddrive,hmc,nfs,liveimg,ostreesetup,rhsm, 或url其中之一,除非inst.repo选项在内核命令行上指定了。
C.2.9. install (已弃用) 复制链接链接已复制到粘贴板!
install Kickstart 命令在 Red Hat Enterprise Linux 8 中已弃用。使用它的方法作为单独的命令。
install Kickstart 命令是可选的。它指定了默认的安装模式。
语法
install installation_method
install
installation_method
备注
-
install命令后必须跟随安装方法命令。安装方法命令必须位于单独的行中。 方法包括:
-
cdrom -
harddrive -
hmc -
nfs -
liveimg -
url
有关方法的详情,请查看其独立参考页面。
-
C.2.10. liveimg 复制链接链接已复制到粘贴板!
liveimg Kickstart 命令是可选的。它从磁盘镜像而不是软件包执行安装。仅使用此命令一次。
语法
liveimg --url=SOURCE [OPTIONS]
liveimg --url=SOURCE [OPTIONS]
必填选项
-
--url=- 从其中安装的位置。支持的协议包括HTTP、HTTPS、FTP和file。
可选选项
-
--url=- 从其中安装的位置。支持的协议包括HTTP、HTTPS、FTP和file。 -
--proxy=- 指定在执行安装时要使用的HTTP、HTTPS或者FTP代理。 -
--checksum=- 包含镜像文件的SHA256校验和的可选参数,用于验证。 -
--noverifyssl- 连接到HTTPS服务器时禁用 SSL 验证。
示例
liveimg --url=file:///images/install/squashfs.img --checksum=03825f567f17705100de3308a20354b4d81ac9d8bed4bb4692b2381045e56197 --noverifyssl
liveimg --url=file:///images/install/squashfs.img --checksum=03825f567f17705100de3308a20354b4d81ac9d8bed4bb4692b2381045e56197 --noverifyssl
备注
-
镜像可以是来自实时 ISO 镜像的
squashfs.img文件、压缩的 tar 文件(.tar、.tbz、.tgz、.txz、.tar.bz2、.tar.gz或.tar.xz.),或者安装介质可以挂载的任何文件系统。支持的文件系统有ext2、ext3、ext4、vfat和xfs。 -
将
liveimg安装模式与驱动程序磁盘一起使用时,磁盘中的驱动程序不会自动包含在安装的系统中。如有必要,应手动安装这些驱动程序,或在 kickstart 脚本的%post部分中安装这些驱动程序。 -
要实际运行安装,您必须指定
cdrom,harddrive,hmc,nfs,liveimg,ostreesetup,rhsm, 或url其中之一,除非inst.repo选项在内核命令行上指定了。 -
在以前的版本中,
liveimg命令必须与install命令一同使用。install命令已弃用,liveimg可以自行使用,因为它代表install。
C.2.11. logging 复制链接链接已复制到粘贴板!
logging Kickstart 命令是可选的。它控制在安装过程中 Anaconda 的错误日志。它对安装的系统没有影响。仅使用此命令一次。
只支持使用 TCP 记录日志。对于远程日志记录,请确保在远程服务器上打开您在 --port= 选项中指定的端口号。默认端口为 514。
语法
logging OPTIONS
logging OPTIONS
可选选项
-
--host=- 向给定的远程主机发送日志信息,该主机必须配置有一个 syslogd 进程,以接受远程记录。 -
--port=- 如果远程 syslogd 进程使用默认端口以外的端口,请使用这个选项进行设置。 -
--level=- 指定 tty3 上出现的最小信息级别。无论这个级别是什么,仍会将所有的信息发送到日志文件。可能的值有debug、info、warning、error或critical。
C.2.12. mediacheck 复制链接链接已复制到粘贴板!
mediacheck Kickstart 命令是可选的。该命令强制安装程序在开始安装前执行介质检查。因为这个命令需要在执行安装时有人工参与,因此它默认被禁用。仅使用此命令一次。
语法
mediacheck
mediacheck
备注
-
这个 Kickstart 命令等同于
rd.live.check引导选项。 - 这个命令没有选项。
C.2.13. nfs 复制链接链接已复制到粘贴板!
nfs Kickstart 命令是可选的。它从指定的 NFS 服务器执行安装。仅使用此命令一次。
语法
nfs OPTIONS
nfs OPTIONS
选项
-
--server=- 要从中安装的服务器(主机名或 IP)。 -
--dir=- 包含安装树variant目录的目录。 -
--opts=- 用于挂载 NFS 导出的挂载选项(可选)。
示例
nfs --server=nfsserver.example.com --dir=/tmp/install-tree
nfs --server=nfsserver.example.com --dir=/tmp/install-tree
备注
-
在以前的版本中,
nfs命令必须与install命令一同使用。install命令已弃用,NFS可以自行使用,因为它代表install。 -
要实际运行安装,您必须指定
cdrom,harddrive,hmc,nfs,liveimg,ostreesetup,rhsm, 或url其中之一,除非inst.repo选项在内核命令行上指定了。
C.2.14. ostreesetup 复制链接链接已复制到粘贴板!
ostreesetup Kickstart 命令是可选的。它被用来设置基于 OStree 的安装。仅使用此命令一次。
语法
ostreesetup --osname=OSNAME [--remote=REMOTE] --url=URL --ref=REF [--nogpg]
ostreesetup --osname=OSNAME [--remote=REMOTE] --url=URL --ref=REF [--nogpg]
必须的选项
-
--osname=OSNAME- 用于操作系统安装的管理根. -
--url=URL- 要从中安装的存储库的 URL。 -
--ref=REF- 用于安装的软件仓库中的分支名称。
可选选项:
-
--remote=REMOTE- 远程存储库位置。 -
--nogpg- 禁用 GPG 密钥验证。
备注
- 有关 OStree 工具的更多信息,请参阅上游文档:https://ostreedev.github.io/ostree/
C.2.15. poweroff 复制链接链接已复制到粘贴板!
poweroff Kickstart 命令是可选的。它会在安装成功后关闭系统并关闭电源。通常,在手动安装过程中,Anaconda 会显示一条信息并等待用户按任意键来重新引导系统。仅使用此命令一次。
语法
poweroff
poweroff
备注
-
poweroff选项等同于shutdown -P命令。详情请查看您系统上的 shutdown (8) 手册页。 -
有关其他完成方法,请查看
halt、reboot和shutdownKickstart 命令。如果没有在 Kickstart 文件中明确指定其他方法,则halt选项是默认的完成方法。 -
poweroff命令高度依赖于所使用的系统硬件。特别是,某些硬件部件如 BIOS、APM(高级电源管理)和 ACPI(高级配置和电源接口)必须能和系统内核交互。有关系统 APM/ACPI 功能的更多信息,请参阅硬件文档。 - 这个命令没有选项。
C.2.16. reboot 复制链接链接已复制到粘贴板!
reboot Kickstart 命令是可选的。它指示安装程序在安装成功(没有参数)后重启。通常,Kickstart 会显示信息并等待用户按任意键来重新引导系统。仅使用此命令一次。
语法
reboot OPTIONS
reboot OPTIONS
选项
-
--eject- 在重新启动前尝试弹出可引导介质(DVD、USB 或其他介质)。 --kexec- 使用kexec系统调用而不是执行完全重启,这样可立即将安装的系统加载到内存中,绕过通常由 BIOS 或固件执行的硬件初始化。重要这个选项已弃用,仅作为技术预览使用。有关红帽对技术预览功能支持范围的详情,请查看 技术预览功能支持范围 文档。
使用
kexec时,设备寄存器(通常会在系统完全重启后清除)可能会继续填写数据,这可能会给某些设备驱动程序造成问题。
备注
-
使用
reboot选项可能会导致安装无限循环,具体取决于安装介质和方法。 -
reboot选项等同于shutdown -r命令。详情请查看您系统上的 shutdown (8) 手册页。 -
在 64 位 IBM Z 中使用命令行模式安装时,指定
reboot以完全自动安装。 -
有关其他完成方法,请查看
halt、poweroff和shutdownKickstart 选项。如果没有在 Kickstart 文件中明确指定其他方法,则halt选项是默认的完成方法。
C.2.17. rhsm 复制链接链接已复制到粘贴板!
rhsm Kickstart 命令是可选的。它指示安装程序从 CDN 注册并安装 RHEL。仅使用此命令一次。
在注册系统时,rhsm Kickstart 命令不需要使用自定义 %post 脚本。
选项
-
--orgrganization=- 使用组织 ID 从 CDN 注册和安装 RHEL。 -
--activation-key=- 使用激活码从 CDN 注册和安装 RHEL。选项可以多次使用,每个激活密钥使用一次,只要使用的激活密钥已注册到订阅中。 -
--connect-to-insights- 将目标系统连接到 Red Hat Insights。 -
--proxy=- 设置 HTTP 代理。
要使用
rhsmKickstart 命令将安装源存储库切换到 CDN,您必须满足以下条件:-
在内核命令行上,您已使用
inst.stage2=<URL>来获取安装镜像,但没有使用inst.repo=指定安装源。 -
在 Kickstart 文件中,您尚未使用
url、cdrom、harddrive、liveimg、nfs和ostree设置命令指定安装源。
-
在内核命令行上,您已使用
-
使用引导选项指定或者包含在 Kickstart 文件中的安装源 URL 优先于 CDN,即使 Kickstart 文件包含带有有效凭证的
rhsm命令。已注册该系统,但会通过 URL 安装源进行安装。这样可保证早期安装进程正常运行。
C.2.18. shutdown 复制链接链接已复制到粘贴板!
shutdown Kickstart 命令是可选的。它会在安装成功完成后关闭系统。仅使用此命令一次。
语法
shutdown
shutdown
备注
-
shutdownKickstart 选项等同于shutdown命令。详情请查看您系统上的 shutdown (8) 手册页。 -
有关其他完成方法,请查看
halt、poweroff和rebootKickstart 选项。如果没有在 Kickstart 文件中明确指定其他方法,则halt选项是默认的完成方法。 - 这个命令没有选项。
C.2.19. sshpw 复制链接链接已复制到粘贴板!
sshpw Kickstart 命令是可选的。
在安装过程中,您可以与安装程序交互并通过 SSH 连接监控其进度。使用 sshpw 命令创建登录的临时帐户。该命令的每个实例都会创建一个只存在于安装环境中的单独帐户。这些不会转移到系统里。
语法
sshpw --username=name [OPTIONS] password
sshpw --username=name [OPTIONS] password
必填选项
-
--username=name - 提供用户名称。这个选项是必需的。 - password - 用户要使用的密码。这个选项是必需的。
可选选项
--iscrypted- 如果给出这个选项,则假设 password 参数已被加密。这个选项与--plaintext相互排斥。要生成加密的密码,可以使用 Python:python3 -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'$ python3 -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会使用随机 salt 为密码生成 sha512 兼容哈希。
-
--plaintext- 如果给出这个选项,则假设 password 参数为纯文本。这个选项与--iscrypted相互排斥 -
--lock- 如果给出这个选项,则默认锁定这个帐户。这意味着用户无法从控制台登录。 -
--sshKey -如果给出这个选项,则 <password> 字符串被解释为 ssh 密钥值。
备注
-
默认情况下,
ssh服务器不会在安装过程中启动。要使ssh在安装过程中可用,使用内核引导选项inst.sshd引导系统。 如果要禁用 root
ssh访问,同时允许其他用户ssh访问,请使用:sshpw --username=example_username example_password --plaintext sshpw --username=root example_password --lock
sshpw --username=example_username example_password --plaintext sshpw --username=root example_password --lockCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要简单地禁用 root
ssh访问,请使用:sshpw --username=root example_password --lock
sshpw --username=root example_password --lockCopy to Clipboard Copied! Toggle word wrap Toggle overflow
C.2.20. text 复制链接链接已复制到粘贴板!
text Kickstart 命令是可选的。它在文本模式下执行 Kickstart 安装。Kickstart 安装默认是以图形模式执行的。仅使用此命令一次。
语法
text [--non-interactive]
text [--non-interactive]
选项
-
--non-interactive- 以完全非互动模式执行安装。这个模式将在用户交互需要时终止安装。
备注
-
对于完全自动安装,您必须在 Kickstart 文件中指定可用模式之一(
图形、文本或命令行),或者必须使用console=引导选项。如果没有指定模式,系统会尽可能使用图形模式,或者提示您从 VNC 和文本模式中选择。
C.2.21. url 复制链接链接已复制到粘贴板!
url Kickstart 命令是可选的。它用来使用 FTP、HTTP 或者 HTTPS 协议从远程服务器上的安装树镜像进行安装。您只能指定一个 URL。仅使用此命令一次。
您必须指定 --url、--metalink 或 --mirrorlist 选项之一。
语法
url --url=FROM [OPTIONS]
url --url=FROM [OPTIONS]
选项
-
--url=FROM- 指定要从中安装的HTTP、HTTPS、FTP或文件位置。 -
--mirrorlist=- 指定要从中安装的镜像 URL。 -
--proxy=- 指定在安装过程中要使用的HTTP、HTTPS或者FTP代理。 -
--noverifyssl- 连接到HTTPS服务器时禁用 SSL 验证。 -
--metalink=URL- 指定要从中安装的 metalink URL。变量替换用于 URL 中的$releasever和$basearch。
示例
从 HTTP 服务器安装:
url --url=http://server/path
url --url=http://server/pathCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从 FTP 服务器安装:
url --url=ftp://username:password@server/path
url --url=ftp://username:password@server/pathCopy to Clipboard Copied! Toggle word wrap Toggle overflow
注
-
在以前的版本中,
url命令必须与install命令一同使用。install命令已弃用,并且url可以自行使用,因为它代表install。 -
要实际运行安装,您必须指定
cdrom,harddrive,hmc,nfs,liveimg,ostreesetup,rhsm, 或url其中之一,除非inst.repo选项在内核命令行上指定了。
C.2.22. vnc 复制链接链接已复制到粘贴板!
vnc Kickstart 命令是可选的。它允许通过 VNC 远程查看图形安装。
与文本模式相比,这个模式通常是首选模式。因为在文本模式中有某些大小和语言的限制。如果没有附加选项,这个命令将在不需要密码的系统中启动 VNC 服务器,并显示连接它所需要的详情。仅使用此命令一次。
语法
vnc [--host=host_name] [--port=port] [--password=password]
vnc [--host=host_name] [--port=port] [--password=password]
选项
--host=- 连接在给定主机名中侦听的 VNC viewer 进程。
--port=- 提供远程 VNC viewer 进程侦听的端口。如果没有提供,Anaconda 将使用 VNC 默认端口 5900。
--password=- 设定必须提供用来连接到 VNC 会话的密码。这是可选的,但推荐使用。
C.2.23. hmc 复制链接链接已复制到粘贴板!
hmc kickstart 命令是可选的。通过在 IBM Z 上使用 SE/HMC ,使用它从安装介质进行安装。这个命令没有任何选项。
语法
hmc
hmc
C.2.24. %include 复制链接链接已复制到粘贴板!
%include Kickstart 命令是可选的。
使用 %include 命令,将另一文件的内容包含在 Kickstart 文件中,就好像其内容在 Kickstart 文件中的 %include 命令的位置一样。
它的内容只在 %pre 脚本部分之后评估,因此可用于将脚本生成的文件包含在 %pre 部分中。要在评估 %pre 部分之前包含文件,请使用 %ksappend 命令。
语法
%include path/to/file
%include path/to/file
C.2.25. %ksappend 复制链接链接已复制到粘贴板!
%ksappend Kickstart 命令是可选的。
使用 %ksappend 命令将另一个文件的内容包含在 Kickstart 文件中,就好像其内容在 Kickstart 文件中 %ksappend 命令的位置一样。
这个内容在 %pre 脚本部分之前评估,这与 %include 命令包括的内容不同。
语法
%ksappend path/to/file
%ksappend path/to/file
C.3. kickstart 命令进行系统配置 复制链接链接已复制到粘贴板!
这个列表中的 Kickstart 命令配置结果系统的更多详情,比如用户、库或服务。
C.3.1. auth 或 authconfig(已弃用) 复制链接链接已复制到粘贴板!
使用新的 authselect 命令而不是已弃用的 auth 或 authconfig Kickstart 命令。auth 和 authconfig 只用于有限的需要满足向后兼容性的情况。
auth 或 authconfig Kickstart 命令是可选的。它使用 authconfig 工具为系统设置身份验证选项,也可以在安装完成后在命令行中运行该工具。仅使用此命令一次。
语法
authconfig [OPTIONS]
authconfig [OPTIONS]
备注
-
在以前的版本中,
auth或authconfigKickstart 命令称为authconfig工具。在 Red Hat Enterprise Linux 8 中已弃用这个工具。这些 Kickstart 命令现在使用authselect-compat工具调用新的authselect工具。有关兼容性层及其已知问题的描述,请参阅 authselect-migration(7) 手册页。安装程序将自动检测弃用命令的使用并在系统上安装authselect-compat软件包以提供兼容性层。 - 默认使用影子密码。
-
当使用带有用于安全的
SSL协议的 OpenLDAP 时,请确保在服务器配置中禁用了SSLv2和SSLv3协议。这是因为 POODLE SSL 漏洞(CVE-2014-3566)。如需更多信息,请参阅红帽知识库解决方案 解决 POODLE SSLv3.0 漏洞。
C.3.2. authselect 复制链接链接已复制到粘贴板!
authselect Kickstart 命令是可选的。它使用 authselect 命令为系统设置身份验证选项,也可以在安装完成后在命令行中运行该命令。仅使用此命令一次。
语法
authselect [OPTIONS]
authselect [OPTIONS]
备注
-
这个命令会将所有选项传递给
authselect命令。详情请查看 authselect(8) 手册页和authselect --help命令。 -
这个命令替换了 Red Hat Enterprise Linux 8 中已弃用的
auth或authconfig命令以及authconfig工具。 - 默认使用影子密码。
-
当使用带有用于安全的
SSL协议的 OpenLDAP 时,请确保在服务器配置中禁用了SSLv2和SSLv3协议。这是因为 POODLE SSL 漏洞(CVE-2014-3566)。如需更多信息,请参阅红帽知识库解决方案 解决 POODLE SSLv3.0 漏洞。
C.3.3. firewall 复制链接链接已复制到粘贴板!
firewall Kickstart 命令是可选的。它为安装的系统指定防火墙配置。
语法
firewall --enabled|--disabled [incoming] [OPTIONS]
firewall --enabled|--disabled [incoming] [OPTIONS]
必填选项
-
--enabled或--enable- 拒绝那些不是响应出站请求(如 DNS 回复或 DHCP 请求)的传入连接。如果需要访问在这个机器中运行的服务,您可以选择允许指定的服务通过防火墙。 -
--disabled或--disable- 不配置任何 iptables 规则。
可选选项
-
--trust- 在此处列出设备,如em1,允许进出该设备的所有流量通过防火墙。要列出多个设备,请多次使用这个选项,如--trust em1 --trust em2。不要使用逗号分隔的格式,如--trust em1、em2。 -
--remove-service- 不允许服务穿过防火墙。 incoming - 使用以下服务中的一个或多个来替换,从而允许特定的服务穿过防火墙。
-
--ssh -
--smtp -
--http -
--ftp
-
-
--port=- 您可以使用 port:protocol 格式指定允许通过防火墙的端口。例如,要允许 IMAP 通过您的防火墙,可指定imap:tcp。数字端口也可以明确指定;例如,要允许 UDP 数据包在端口 1234 到,请指定1234:udp。要指定多个端口,用逗号将它们隔开。 --service=- 此选项提供允许服务穿过防火墙的更高级别方法。有些服务(如cups、vahi等)需要打开多个端口或其他特殊配置才能使服务正常工作。您可以使用--port选项指定各个端口,或者指定--service=并一次性全部打开它们。有效选项是 firewalld 软件包中
firewall-offline-cmd程序可识别的任何内容。如果firewalld服务正在运行,firewall-cmd --get-services会提供已知服务名称的列表。-
--use-system-defaults- 完全不配置防火墙。这个选项告诉 anaconda 不做任何工作,并允许系统依赖软件包或者 ostree 提供的默认值。如果将这个选项与其它选项一同使用,则将忽略所有其他选项。
C.3.4. group 复制链接链接已复制到粘贴板!
group Kickstart 命令是可选的。它在系统中创建新用户组。
group --name=name [--gid=gid]
group --name=name [--gid=gid]
必填选项
-
--name=- 提供组的名称。
可选选项
-
--gid=- 组的 GID。如果没有提供,则默认使用下一个可用的非系统 GID。
备注
- 如果具有指定名称或 GID 的组群已经存在,这个命令会失败。
-
user命令可用于为新创建的用户创建新组。
C.3.5. keyboard(必需) 复制链接链接已复制到粘贴板!
keyboard Kickstart 命令是必需的。它为系统设置一个或多个可用的键盘布局。仅使用此命令一次。
语法
keyboard --vckeymap|--xlayouts OPTIONS
keyboard --vckeymap|--xlayouts OPTIONS
选项
-
--vckeymap=- 指定应使用的VConsole键映射。有效名称与/usr/lib/kbd/keymaps/xkb/目录中的文件列表对应,没有.map.gz扩展名。 --xlayouts=- 指定 X 布局列表,该列表应当用作逗号分隔的列表,没有空格。接受与setxkbmap(1)相同格式的值,可以是布局格式(如 ascz),也可以是布局 (变体)格式(如cz (qwerty))。可以在下方的
xkeyboard-config(7)man page 中查看所有可用布局。--switch=- 指定布局切换选项列表(在多个键盘布局之间切换的快捷方式)。必须使用逗号分开多个选项,没有空格。接受与setxkbmap(1)相同格式的值。您可以在
xkeyboard-config(7)man page 上的Options下查看可用的切换选项。
备注
-
必须使用
--vckeymap=或--xlayouts=选项。
示例
以下示例使用 --xlayouts= 选项设置了两种键盘布局(English (US) 和 Czech (qwerty)),并允许使用 Alt+Shift 在它们之间进行切换:
keyboard --xlayouts=us,'cz (qwerty)' --switch=grp:alt_shift_toggle
keyboard --xlayouts=us,'cz (qwerty)' --switch=grp:alt_shift_toggle
C.3.6. lang(必需) 复制链接链接已复制到粘贴板!
lang Kickstart 命令是必需的。它设置了在安装过程中使用的语言以及系统的默认语言。仅使用此命令一次。
语法
lang language [--addsupport=language,...]
lang language [--addsupport=language,...]
必填选项
-
language- 安装对此语言的支持并将其设置为系统默认。
可选选项
--addsupport=- 添加对其他语言的支持。格式为使用逗号分开的列表,无空格。例如:lang en_US --addsupport=cs_CZ,de_DE,en_UK
lang en_US --addsupport=cs_CZ,de_DE,en_UKCopy to Clipboard Copied! Toggle word wrap Toggle overflow
备注
-
locale -a | grep _或localectl list-locales | grep _命令返回支持的区域列表。 -
文本模式安装中不支持某些语言(比如中文、日语、韩文和印度的语言)。如果您使用
lang命令指定这些语言中的一种,安装过程将继续使用英语,但安装的系统会使用您选择的语言作为其默认语言。
示例
要将语言设置为英语,Kickstart 文件应包含以下行:
lang en_US
lang en_US
C.3.7. module 复制链接链接已复制到粘贴板!
module Kickstart 命令是可选的。使用这个命令在 kickstart 脚本中启用软件包模块流。
语法
module --name=NAME [--stream=STREAM]
module --name=NAME [--stream=STREAM]
必填选项
--name=- 指定要启用的模块名称。使用实际名称替换 NAME。
可选选项
--stream=指定要启用的模块流的名称。将 STREAM 替换为实际名称。
您不需要为定义的默认流的模块指定此选项。对于没有默认流的模块,这个选项是强制的,省略它将导致错误。无法多次启用带有不同流的模块。
备注
-
通过这个命令和
%packages部分的组合,您可以安装由启用的模块和流组合提供的软件包,而无需明确指定模块和流。安装软件包前必须启用模块。使用module命令启用模块后,您可以通过在%packages部分列出此模块启用的软件包来安装它们。 -
单个
module命令只能启用单个模块和流组合。要启用多个模块,请使用多个module命令。无法多次启用带有不同流的模块。 -
在 Red Hat Enterprise Linux 8 中,模块只存在于 AppStream 存储库中。要列出提供的模块,请在安装了具有有效订阅的 Red Hat Enterprise Linux 8 系统上使用
yum module list命令。
C.3.8. repo 复制链接链接已复制到粘贴板!
repo Kickstart 命令是可选的。它配置了作为软件包安装来源的额外的 yum 仓库。您可以添加多个 repo 行。
语法
repo --name=repoid [--baseurl=url|--mirrorlist=url|--metalink=url] [OPTIONS]
repo --name=repoid [--baseurl=url|--mirrorlist=url|--metalink=url] [OPTIONS]
必填选项
-
--name=- 存储库 ID。这个选项是必需的。如果库的名称与另一个之前添加的库冲突,则会忽略它。因为安装程序使用预设置程序库列表,这意味着您无法添加名称与预先设置的库的名称相同的库。
URL options
这些选项是互斥的,也是可选的。这里不支持 yum 库配置文件中可以使用的变量。您可以使用字符串 $releasever 和 $basearch,它们由 URL 中的对应值替换。
-
--baseurl=- 存储库的 URL。 -
--mirrorlist=- 指向存储库镜像列表的 URL。 -
--metalink=- 存储库的 metalink 的 URL。
可选选项
-
--install- 将已安装系统上的仓库配置保存在/etc/yum.repos.d/目录中。如果不使用这个选项,在 Kickstart 文件中配置的程序库将只在安装过程中使用,而无法在安装的系统中使用。 -
--cost=- 为这个存储库分配成本的整数值。如果多个库提供同样的软件包,这个数字就会被用来决定优先使用哪个库。成本低的软件仓库优先于成本高的软件仓库。 -
--excludepkgs=- 不能从此存储库拉取的软件包名称,是一个以逗号分隔的列表。如果多个存储库提供同样的软件包,您希望这个软件包来自特定的仓库,可以使用它。可接受完整软件包名称(如publican)和 globs(如gnome-*)。 -
--includepkgs=- 允许从此存储库拉取的软件包名称和 glob 的逗号分隔列表。该程序仓库提供的其他软件包将被忽略。如果您只想从库中安装单个软件包或软件包组而不包括该程序库提供的所有其他软件包,这个选项就很有用了。 -
--proxy=[protocol://][username[:password]@]host[:port] - 指定仅用于此存储库的 HTTP/HTTPS/FTP 代理。此设置不会影响任何其他存储库,也不会影响在 HTTP 安装中如何获取install.img。 -
--noverifyssl- 连接到HTTPS服务器时禁用 SSL 验证。
备注
- 用于安装的软件仓库必须是稳定版本。如果在安装完成前修改库,则安装会失败。
C.3.9. rootpw(必需) 复制链接链接已复制到粘贴板!
需要 rootpw Kickstart 命令。它将系统的根密码设置为 password 参数的值。仅使用此命令一次。
语法
rootpw [--iscrypted|--plaintext] [--lock] password
rootpw [--iscrypted|--plaintext] [--lock] password
必填选项
-
password - 密码规格。纯文本或者加密字符串。请参阅以下
--iscrypted和--plaintext。
选项
--iscrypted- 如果给出这个选项,则假设 password 参数已被加密。这个选项与--plaintext相互排斥。要创建一个加密的密码,您可以使用 python:python -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'$ python -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会使用随机 salt 为密码生成 sha512 兼容哈希。
-
--plaintext- 如果给出这个选项,则假设 password 参数为纯文本。这个选项与--iscrypted相互排斥。 -
--lock- 如果给出这个选项,则默认锁定 root 帐户。这意味着 root 用户无法从控制台登录。这个选项还在图形和文本手动安装中禁用 Root 密码 页面。
C.3.10. selinux 复制链接链接已复制到粘贴板!
selinux Kickstart 命令是可选的。它在安装的系统中设定 SELinux 状态。默认 SELinux 策略为 enforcing。仅使用此命令一次。
语法
selinux [--disabled|--enforcing|--permissive]
selinux [--disabled|--enforcing|--permissive]
选项
--enforcing-
使用默认目标策略
enforcing启用 SELinux。 --permissive- 根据 SELinux 策略输出警告,但并不强制执行该策略。
--disabled- 在系统上完全禁用 SELinux。
C.3.11. services 复制链接链接已复制到粘贴板!
services Kickstart 命令是可选的。它修改在默认 systemd 目标下运行的默认服务集合。禁用的服务列表会在启用的服务列表前进行处理。因此,如果服务出现在这两个列表中,它将被启用。
语法
services [--disabled=list] [--enabled=list]
services [--disabled=list] [--enabled=list]
选项
-
--disabled=- 禁用在逗号分隔列表中给出的服务。 -
--enabled=- 启用逗号分隔列表中给出的服务。
注
-
当使用
services元素启用systemd服务时,请确保在%packages部分中包含指定服务文件的软件包。 使用逗号分开多个服务,没有空格。例如,要禁用四个服务,请输入:
services --disabled=auditd,cups,smartd,nfslock
services --disabled=auditd,cups,smartd,nfslockCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您包含任何空格,Kickstart 只启用或禁用第一个空格前的服务。例如:
services --disabled=auditd, cups, smartd, nfslock
services --disabled=auditd, cups, smartd, nfslockCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这仅禁用
auditd服务。要禁用所有四个服务,此条目不得包含空格。
C.3.12. skipx 复制链接链接已复制到粘贴板!
skipx Kickstart 命令是可选的。如果存在,安装的系统上就不会配置 X。
如果您在软件包选择选项中安装 display manager,这个软件包会创建一个 X 配置,安装的系统会默认使用 graphical.target。这会覆盖 skipx 选项的影响。仅使用此命令一次。
语法
skipx
skipx
备注
- 这个命令没有选项。
C.3.13. sshkey 复制链接链接已复制到粘贴板!
sshkey Kickstart 命令是可选的。它将 SSH 密钥添加到已安装系统上指定用户的 authorized_keys 文件中。
语法
sshkey --username=user "ssh_key"
sshkey --username=user "ssh_key"
必填选项
-
--username=- 要安装密钥的用户。 - ssh_key - 完整的 SSH 密钥指纹。它必须用引号括起。
C.3.14. syspurpose 复制链接链接已复制到粘贴板!
syspurpose Kickstart 命令是可选的。使用它来设置系统在安装后的系统目的。这些信息有助于在系统中应用正确的订阅授权。仅使用此命令一次。
Red Hat Enterprise Linux 8.6 及更新的版本使您能够通过使 角色、 和 service-level、useaddons 子命令在一个 subscription-manager syspurpose 模块下提供来管理和显示系统目的属性。在以前的版本中,系统管理员使用四个独立的 syspurpose 命令来管理每个属性。从 RHEL 8.6 开始,这个独立的 syspurpose 命令被弃用,并计划在 RHEL 9 中删除。红帽将在当前发行生命周期中提供对这个功能的 bug 修复和支持,但此功能将不再获得改进。从 RHEL 9 开始,单个 subscription-manager syspurpose 命令及其相关的子命令是使用系统用途的唯一方法。
语法
syspurpose [OPTIONS]
syspurpose [OPTIONS]
选项
--role=- 设置预期的系统角色。可用值有:- Red Hat Enterprise Linux Server
- Red Hat Enterprise Linux Workstation
- Red Hat Enterprise Linux Compute 节点
--SLA=- 设置服务级别协议。可用值有:- Premium(高级)
- Standard(标准)
- Self-Support(自助)
--usage=- 系统预定用途。可用值有:- Production
- Disaster Recovery
- Development/Test
-
--Addon=- 指定额外的层次产品或功能。您可以多次使用这个选项。
备注
输入有空格的值,并使用双引号包括它们:
syspurpose --role="Red Hat Enterprise Linux Server"
syspurpose --role="Red Hat Enterprise Linux Server"Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
虽然强烈建议您配置系统目的,但它是 Red Hat Enterprise Linux 安装程序的可选功能。如果要在安装完成后启用系统目的,您可以使用
syspurpose命令行工具完成此操作。
Red Hat Enterprise Linux 8.6 及更新的版本使您能够通过使 角色、 和 service-level、useaddons 子命令在一个 subscription-manager syspurpose 模块下提供来管理和显示系统目的属性。在以前的版本中,系统管理员使用四个独立的 syspurpose 命令来管理每个属性。从 RHEL 8.6 开始,这个独立的 syspurpose 命令被弃用,并计划在 RHEL 9 中删除。红帽将在当前发行生命周期中提供对这个功能的 bug 修复和支持,但此功能将不再获得改进。从 RHEL 9 开始,单个 subscription-manager syspurpose 命令及其相关的子命令是使用系统用途的唯一方法。
C.3.15. timezone(必需) 复制链接链接已复制到粘贴板!
timezone Kickstart 命令是必需的。它设置系统时区。仅使用此命令一次。
语法
timezone timezone [OPTIONS]
timezone timezone [OPTIONS]
必填选项
- timezone - 为系统设定的时区。
可选选项
-
--UTC -如果存在,系统假定硬件时钟被设置为 UTC(格林威治 Mean)时间。 -
--nontp- 禁用 NTP 服务自动启动。 -
--ntpservers=- 指定用作没有空格的逗号分隔列表的 NTP 服务器列表。
备注
在 Red Hat Enterprise Linux 8 中,时区名使用由 pytz 软件包提供的 pytz.all_timezones 列表进行验证。在以前的版本中,这些名称会根据 pytz.common_timezones 进行验证,它是当前使用列表的子集。请注意,图形和文本模式界面仍然使用更受限制的 pytz.common_timezones 列表;您必须使用 Kickstart 文件来使用额外的时区定义。
C.3.16. user 复制链接链接已复制到粘贴板!
user Kickstart 命令是可选的。它在系统上创建新用户。
语法
user --name=username [OPTIONS]
user --name=username [OPTIONS]
必填选项
-
--name=- 提供用户名称。这个选项是必需的。
可选选项
-
--GECOS=- 为用户提供 GECOS 信息。这个字符串包括使用逗号分开的各种具体系统字段。它通常用来指定用户全名、办公室号码等等。详情请查看passwd(5)手册页。 -
--groups=- 除默认组外,还有以逗号分隔的用户应属于的组名列表。组群必须在创建该用户帐户前就已经存在。请参阅group命令。 -
--homedir=- 用户的主目录。如果没有提供,则默认为/home/username。 -
--lock- 如果给出这个选项,则默认锁定这个帐户。这意味着用户无法从控制台登录。这个选项还在图形和文本手动安装中禁用创建用户 页面。 -
--password=- 新用户的密码。如果没有提供,则默认锁定该帐户。 --iscrypted- 如果给出这个选项,则假设 password 参数已被加密。这个选项与--plaintext相互排斥。要创建一个加密的密码,您可以使用 python:python -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'$ python -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会使用随机 salt 为密码生成 sha512 兼容哈希。
-
--plaintext- 如果给出这个选项,则假设 password 参数为纯文本。这个选项与--iscrypted相互排斥 -
--shell=- 用户的登录 shell.如果没有提供,则使用系统默认。 -
--uid=- 用户的 UID(用户 ID)。如果没有提供,则默认使用下一个可用的非系统 UID。 -
--gid=- 用于用户组的 GID(组 ID)。如果没有提供,则默认使用下一个可用的非系统组群 ID。
备注
请考虑使用
--uid和--gid选项设置常规用户及其默认组的 ID,范围从5000开始,而不是1000。这是因为为系统用户和组保留的范围(0到999)将来可能会增加,因此与常规用户的 ID 重叠。有关在安装后更改最小 UID 和 GID 限制,以确保您在创建用户时可以自动应用您选择的 UID 和 GID 范围,请参阅配置基本系统设置 文档中的使用 umask 为新文件设置默认权限部分。
使用不同权限创建的文件和目录,由用来创建文件或目录的应用程序指定。例如,
mkdir命令创建启用了所有权限的目录。但是,应用无法为新创建的文件授予某些权限,如user file-creation mask设置所指定。user file-creation mask可通过umask命令控制。新用户的user file-creation mask默认设置由安装系统上的/etc/login.defs配置文件中的UMASK变量定义。如果未设置,则默认为022。这意味着,默认情况下,当应用程序创建一个文件时,会防止为该文件所有者以外的用户授予写入权限。不过,这可以被其他设置或脚本覆盖。如需了解更多信息,请参阅配置基本系统设置文档中的 使用 umask 配置基本系统设置。
C.3.17. xconfig 复制链接链接已复制到粘贴板!
xconfig Kickstart 命令是可选的。它配置 X 窗口系统。仅使用此命令一次。
语法
xconfig [--startxonboot]
xconfig [--startxonboot]
选项
-
--startxonboot- 在安装的系统上使用图形登录。
备注
-
因为 Red Hat Enterprise Linux 8 没有包括 KDE 桌面环境,请不要使用上游中记录的
--defaultdesktop=。
C.4. kickstart 命令用于网络配置 复制链接链接已复制到粘贴板!
在这个列表中的 Kickstart 命令可让您在系统中配置联网。
C.4.1. network(可选) 复制链接链接已复制到粘贴板!
可选的 network Kickstart 命令配置目标系统的网络信息,并在安装环境中激活网络设备。第一个 network 命令中指定的设备会自动激活。您还可以使用 --activate 选项明确要求激活设备。
重新配置正在运行的安装程序所使用的活跃状态的网络设备可能导致安装失败或冻结。在这种情况下,请避免重新配置用来通过 NFS 访问安装程序运行时镜像(stage2)的网络设备。
语法
network OPTIONS
network OPTIONS
选项
--activate- 在安装环境中激活这个设备。如果您在已经激活的设备中使用
--activate选项(例如,使用引导选项配置的界面以便系统可以检索 Kickstart 文件),则会重新激活该设备以使用 Kickstart 文件中指定的详情。使用
--nodefroute选项可防止设备使用默认路由。--no-activate- 不要在安装环境中激活这个设备。默认情况下,无论
--activate选项是什么,Anaconda 都会激活 Kickstart 文件中的第一个网络设备。您可以使用--no-activate选项禁用默认设置。--bootproto=-dhcp、bootp、ibft或static之一。默认选项为dhcp;dhcp和bootp选项的处理方式相同。要禁用设备的ipv4配置,可使用--noipv4选项。注意这个选项配置设备的 ipv4 配置。对于 ipv6 配置,请使用
--ipv6和--ipv6gateway选项。DHCP 方法使用 DHCP 服务器系统来获得它的网络配置。BOOTP 方法类似,需要 BOOTP 服务器来提供网络配置。要指示系统使用 DHCP:
network --bootproto=dhcp
network --bootproto=dhcpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要指示机器使用 BOOTP 获取其网络配置,在 Kickstart 文件中使用以下行:
network --bootproto=bootp
network --bootproto=bootpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要指示机器使用 iBFT 中指定的配置,使用:
network --bootproto=ibft
network --bootproto=ibftCopy to Clipboard Copied! Toggle word wrap Toggle overflow static方法要求您在 Kickstart 文件中至少指定 IP 地址和子网掩码。这个信息是静态的,并在安装过程中和安装后使用。所有静态网络配置信息必须在一行中指定 ; 您不能象在命令行中换行一样使用反斜杠(
\)来换行。network --bootproto=static --ip=10.0.2.15 --netmask=255.255.255.0 --gateway=10.0.2.254 --nameserver=10.0.2.1
network --bootproto=static --ip=10.0.2.15 --netmask=255.255.255.0 --gateway=10.0.2.254 --nameserver=10.0.2.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您还可以同时配置多个名称服务器。要做到这一点,使用
--nameserver=选项一次,并指定每个 IP 地址,用逗号分开:network --bootproto=static --ip=10.0.2.15 --netmask=255.255.255.0 --gateway=10.0.2.254 --nameserver=192.168.2.1,192.168.3.1
network --bootproto=static --ip=10.0.2.15 --netmask=255.255.255.0 --gateway=10.0.2.254 --nameserver=192.168.2.1,192.168.3.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow --device=- 使用network命令指定要配置的设备(最终在 Anaconda 中激活)。如果 在第一次 使用
network命令时缺少--device=选项,则使用inst.ks.device=Anaconda 引导选项的值(如果提供的话)。这被视为已弃用的行为;在大多数情况下,您应该始终为每个network命令指定--device=。如果缺少其
--device=选项,则同一 Kickstart 文件中后续network命令的行为都会被取消指定。验证您是否为第一个以外的任何一个network命令指定这个选项。您可以使用以下任一方法指定要激活的设备:
-
接口的设备名称,如
em1 -
接口的 MAC 地址,例如
01:23:45:67:89:ab -
关键字
link,它指定链接为up状态的第一个接口 -
关键字
bootif,它使用 pxelinux 在BOOTIF变量中设置的 MAC 地址。在pxelinux.cfg文件中设置IPAPPEND 2,使 pxelinux 设置BOOTIF变量。
例如:
network --bootproto=dhcp --device=em1
network --bootproto=dhcp --device=em1Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
接口的设备名称,如
--ipv4-dns-search/--ipv6-dns-search- 手动设置 DNS 搜索域。您必须将这些选项与--device选项一起使用,并镜像其相应的 NetworkManager 属性,例如:network --device ens3 --ipv4-dns-search domain1.example.com,domain2.example.com
network --device ens3 --ipv4-dns-search domain1.example.com,domain2.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
--ipv4-ignore-auto-dns/--ipv6-ignore-auto-dns- 设置其来忽略 DHCP 中的 DNS 设置。您必须将这些选项与--device选项一起使用,这些选项不需要任何参数。 -
--ip=- 设备的 IP 地址。 -
--ipv6=- 设备的 IPv6 地址,格式为 address[/prefix length] - 例如,3ffe:ffff:0:1::1/128。如果省略了 prefix,则使用64。您还可以使用auto进行自动配置,或使用dhcp仅进行 DHCPv6 配置(无路由器广告)。 -
--gateway=- 作为单一 IPv4 地址的默认网关。 -
--ipv6gateway=- 作为单一 IPv6 地址的默认网关。 -
--nodefroute- 防止被设置为默认路由的接口。当您激活使用--activate=选项的其他设备时,请使用这个选项,例如:iSCSI 目标的单独子网中的 NIC。 -
--nameserver=- DNS 名称服务器作为 IP 地址。要指定一个以上名称服务器,使用这个选项,并使用逗号分隔每个 IP 地址。 -
--netmask=- 安装系统的网络掩码。 --hostname=- 用于配置目标系统的主机名。主机名可以是完全限定域名 (FQDN),格式为hostname.domainname,也可以是不包括域的短主机名。许多网络具有动态主机配置协议(DHCP)服务,该服务自动为连接的系统提供域名。要允许 DHCP 服务为这台机器分配域名,请只指定简短主机名。使用静态 IP 和主机名配置时,它取决于计划的系统用例是否使用短名称或 FQDN。红帽身份管理在置备过程中配置 FQDN,但有些第三方软件产品可能需要短名称。在任何一种情况下,要确保在所有情况下两种形式都可用,请在
/etc/hosts中为主机添加一个条目,格式为IP FQDN 短别名。localhost值意味着没有为目标系统配置特定的静态主机名,安装的系统的实际主机名在处理网络配置的过程中配置,例如,通过使用 DHCP 或 DNS 的 NetworkManager。主机名只能包含字母数字字符和
-或.。主机名应等于或小于 64 个字符。主机名不能以-和.开头或结尾要与 DNS 兼容,FQDN 的每个部分都应等于或小于 63 个字符,并且 FQDN 总长度(包括点)不应超过 255 个字符。如果您只想配置目标系统的主机名,请在
network命令中使用--hostname选项,且不包含任何其他选项。如果您在配置主机名时提供附加选项,
network命令将使用指定的选项来配置设备。如果您没有使用--device选项指定要配置的设备,则使用默认的--device link值。另外,如果您不使用--bootproto选项指定协议,则该设备会被配置为默认使用 DHCP。-
--ethtool=- 指定将传递给 ethtool 程序的网络设备的其他低级别设置。 -
--onboot=- 是否在引导时启用该设备。 -
--dhcpclass=- DHCP 类。 -
--mtu=- 设备的 MTU。 -
--noipv4- 在这个设备上禁用 IPv4。 -
--noipv6- 在这个设备上禁用 IPv6。 --bondslaves=- 使用这个选项时,由--device=选项指定的绑定设备会使用--bondslaves=选项中定义的辅助设备创建。例如:network --device=bond0 --bondslaves=em1,em2
network --device=bond0 --bondslaves=em1,em2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以上命令创建了一个名为
bond0的绑定设备,将em1和em2接口用作其辅助设备。--bondopts=- 绑定接口的可选参数列表,使用--bondslaves=和--device=选项指定。这个列表中的选项必须以逗号(",")或分号(";")分开。如果某个选项本身包含一个逗号,请使用分号来分隔选项。例如:network --bondopts=mode=active-backup,balance-rr;primary=eth1
network --bondopts=mode=active-backup,balance-rr;primary=eth1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要--bondopts=mode=参数只支持完整的模式名称,如balance-rr或broadcast,而不是其数字表示,如0或3。有关可用和支持的模式的列表,请参阅 配置和管理网络指南。-
--vlanid=- 指定使用--device=中指定的设备作为父级创建的设备的虚拟 LAN (VLAN) ID 号(802.1q 标签)。例如,network --device=em1 --vlanid=171创建虚拟 LAN 设备em1.171。 --interfaceName=- 为虚拟 LAN 设备指定自定义接口名称。当--vlanid=选项所生成的默认名称并不是您所需要的名称时,应使用此选项。此选项必须与--vlanid=一起使用。例如:network --device=em1 --vlanid=171 --interfacename=vlan171
network --device=em1 --vlanid=171 --interfacename=vlan171Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以上命令在
em1设备上创建一个名为vlan171的虚拟 LAN 接口,其 ID 为171。接口名称可以是任意名称(如
my-vlan),但在某些情况下,必须遵循以下约定:-
如果名称包含句点(
.),则必须采用NAME.ID的形式。NAME 是任意的,但 ID 必须是 VLAN ID。例如:em1.171或my-vlan.171。 -
以
vlan开头的名称必须使用vlanID的形式,如vlan171。
-
如果名称包含句点(
--teamslaves=- 由--device=选项指定的团队设备将使用这个选项中指定的辅助设备创建。辅助设备用逗号分开。辅助设备可以跟随其配置,这是单引号括起的 JSON 字符串,其中双引号用\字符转义。例如:network --teamslaves="p3p1'{\"prio\": -10, \"sticky\": true}',p3p2'{\"prio\": 100}'"network --teamslaves="p3p1'{\"prio\": -10, \"sticky\": true}',p3p2'{\"prio\": 100}'"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 另请参阅
--teamconfig=选项。--teamconfig=- 由双引号括起的组设备配置,这是一个 JSON 字符串,其中双引号由\字符转义。设备名称由--device=选项指定,其辅助设备及其配置由--teamslaves=选项指定。例如:network --device team0 --activate --bootproto static --ip=10.34.102.222 --netmask=255.255.255.0 --gateway=10.34.102.254 --nameserver=10.34.39.2 --teamslaves="p3p1'{\"prio\": -10, \"sticky\": true}',p3p2'{\"prio\": 100}'" --teamconfig="{\"runner\": {\"name\": \"activebackup\"}}"network --device team0 --activate --bootproto static --ip=10.34.102.222 --netmask=255.255.255.0 --gateway=10.34.102.254 --nameserver=10.34.39.2 --teamslaves="p3p1'{\"prio\": -10, \"sticky\": true}',p3p2'{\"prio\": 100}'" --teamconfig="{\"runner\": {\"name\": \"activebackup\"}}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow --bridgeslaves=- 使用此选项时,将创建--device=选项指定的设备网桥,并将--bridgeslaves=选项中定义的设备添加到网桥中。例如:network --device=bridge0 --bridgeslaves=em1
network --device=bridge0 --bridgeslaves=em1Copy to Clipboard Copied! Toggle word wrap Toggle overflow --bridgeopts=- 一个可选的、由逗号分隔的 桥接接口参数列表。可用值包括stp、priority、forward-delay、hello-time、max-age和RunAsAny-time。有关这些参数的详情,请查看nm-settings(5)手册页中的 bridge setting 表,或者查看 网络配置设置规范。有关网络桥接的常规信息,请参阅配置和管理网络文档。
-
--bindto=mac- 在安装的系统上将设备配置文件绑定到设备 MAC 地址(HWADDR),而不是默认绑定到接口名称(DEVICE)。这个选项独立于--device=选项 - 将应用--bindto=mac,即使同一network命令也指定了设备名称、link或bootif。
注
-
由于命名方案的变化,
ethN设备名称(如eth0)在 Red Hat Enterprise Linux 中不再可用。有关设备命名方案的更多信息,请参阅上游文档可扩展网络接口名称。 - 如果您使用 Kickstart 选项或者引导选项指定网络中的安装程序库,但安装过程开始时无法使用网络,安装程序会在显示 安装概述窗口前,显示网络配置窗口以用于设置网络连接。如需了解更多详细信息,请参阅 配置网络和主机名选项。
C.4.2. realm 复制链接链接已复制到粘贴板!
realm Kickstart 命令是可选的。使用它加入 Active Directory 或 IPA 域。有关这个命令的更多信息,请参阅您系统上 realm (8) 手册页的 join 部分。
语法
realm join [OPTIONS] domain
realm join [OPTIONS] domain
必填选项
-
domain- 要加入的域。
选项
-
--computer-ou=OU=- 提供可分辨的机构单元名称以便创建计算机帐户。可识别名称的具体格式取决于客户端软件和成员软件。可省略可识别名称的根 DSE 部分。 -
--no-password- 无需密码自动加入. -
--one-time-password=- 使用一次性密码加入。不是所有域都支持它。 -
--client-software=- 仅加入能够运行此客户端软件的域。有效值包括sssd和winbind。不是所有域都支持所有值。默认情况下自动选择客户端软件。 -
--server-software=- 仅加入能够运行此服务器软件的域。可能的值包括active-directory或freeipa。 -
--membership-software=- 加入域时使用此软件。有效值包括samba和adcli。不是所有域都支持所有值。默认情况下自动选择成员软件。
C.5. 用于处理存储的 Kickstart 命令 复制链接链接已复制到粘贴板!
这部分中的 Kickstart 命令配置存储的各个方面,比如设备、磁盘、分区、LVM 和文件系统。
sdX(或 /dev/sdX)格式不能保证重启后一致的设备名称,这可能会使某些 Kickstart 命令的使用变得复杂。当命令需要设备节点名称时,您可以使用 /dev/disk 中的任何项目作为替代。例如,改为使用以下设备名称:
part / --fstype=xfs --onpart=sda1
您可以使用类似以下条目之一:
part / --fstype=xfs --onpart=/dev/disk/by-path/pci-0000:00:05.0-scsi-0:0:0:0-part1
part / --fstype=xfs --onpart=/dev/disk/by-id/ata-ST3160815AS_6RA0C882-part1
通过使用这种方法,命令总是以相同的存储设备为目标。这在大型存储环境中特别有用。要利用系统上的可用设备名称,您可以在交互式安装过程中使用 ls -lR /dev/disk 命令。有关统一引用存储设备的不同方法的更多信息,请参阅 持久性命名属性的概述。
C.5.1. device(已弃用) 复制链接链接已复制到粘贴板!
device Kickstart 命令是可选的。使用它载入其他内核模块。
在大多数 PCI 系统中,安装程序会自动探测以太网卡和 SCSI 卡。然而,在老的系统和某些 PCI 系统中,Kickstart 需要提示才能找到正确的设备。device 命令告知安装程序安装额外模块,使用以下格式:
语法
device moduleName --opts=options
device moduleName --opts=options
选项
- moduleName - 使用应该安装的内核模块的名称替换。
--opts=- 传递给内核模块的选项。例如:device --opts="aic152x=0x340 io=11"
device --opts="aic152x=0x340 io=11"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
C.5.2. ignoredisk 复制链接链接已复制到粘贴板!
ignoredisk Kickstart 命令是可选的。这会导致安装程序忽略指定的磁盘。
如果您使用自动分区并希望忽略某些磁盘,这就很有用。例如,如果没有 ignoredisk,尝试在 SAN-cluster 中部署,Kickstart 将失败,因为安装程序检测到到 SAN 的被动路径没有分区表。仅使用此命令一次。
语法
ignoredisk --drives=drive1,drive2,... | --only-use=drive
ignoredisk --drives=drive1,drive2,... | --only-use=drive
选项
-
--drives=driveN,…- 使用sda,sdb之一替换 driveN。,hda,… 以此类推。 --only-use=driveN,…- 指定安装程序要使用的磁盘列表。其它磁盘将被忽略。例如:要在安装过程中使用磁盘da并忽略所有其他磁盘:ignoredisk --only-use=sda
ignoredisk --only-use=sdaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要包括不使用 LVM 的多路径设备:
ignoredisk --only-use=disk/by-id/dm-uuid-mpath-2416CD96995134CA5D787F00A5AA11017
ignoredisk --only-use=disk/by-id/dm-uuid-mpath-2416CD96995134CA5D787F00A5AA11017Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要包括使用 LVM 的多路径设备:
ignoredisk --only-use==/dev/disk/by-id/dm-uuid-mpath-
ignoredisk --only-use==/dev/disk/by-id/dm-uuid-mpath-Copy to Clipboard Copied! Toggle word wrap Toggle overflow bootloader --location=mbr
bootloader --location=mbrCopy to Clipboard Copied! Toggle word wrap Toggle overflow
您必须仅指定 --drives 或 --only-use 中的一个。
备注
-
在 Red Hat Enterprise Linux 8 中已弃用
--interactive选项。这个选项允许用户手动在高级存储界面中进行操作。 要忽略不使用逻辑卷管理器(LVM)的多路径设备,请使用格式
disk/by-id/dm-uuid-mpath-WWID,其中 WWID 是设备的通用识别符。例如,要忽略 WWID 为2416CD96995134CA5D787F00A5AA11017的磁盘,请使用:ignoredisk --drives=disk/by-id/dm-uuid-mpath-2416CD96995134CA5D787F00A5AA11017
ignoredisk --drives=disk/by-id/dm-uuid-mpath-2416CD96995134CA5D787F00A5AA11017Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
切勿按设备名称(如
mpatha)指定多路径设备。这样的设备名称并不是特定磁盘特有的。在安装过程中名为/dev/mpatha的磁盘可能不是您期望的磁盘。因此,clearpart命令可能会以错误的磁盘为目标。 sdX(或/dev/sdX)格式不能保证重启后一致的设备名称,这可能会使某些 Kickstart 命令的使用变得复杂。当命令需要设备节点名称时,您可以使用/dev/disk中的任何项目作为替代。例如,改为使用以下设备名称:part / --fstype=xfs --onpart=sda1
part / --fstype=xfs --onpart=sda1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以使用类似以下条目之一:
part / --fstype=xfs --onpart=/dev/disk/by-path/pci-0000:00:05.0-scsi-0:0:0:0-part1 part / --fstype=xfs --onpart=/dev/disk/by-id/ata-ST3160815AS_6RA0C882-part1
part / --fstype=xfs --onpart=/dev/disk/by-path/pci-0000:00:05.0-scsi-0:0:0:0-part1 part / --fstype=xfs --onpart=/dev/disk/by-id/ata-ST3160815AS_6RA0C882-part1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过使用这种方法,命令总是以相同的存储设备为目标。这在大型存储环境中特别有用。要利用系统上的可用设备名称,您可以在交互式安装过程中使用
ls -lR /dev/disk命令。有关统一引用存储设备的不同方法的更多信息,请参阅 持久性命名属性的概述。
C.5.3. clearpart 复制链接链接已复制到粘贴板!
clearpart Kickstart 命令是可选的。在创建新分区之前,它会从系统中删除分区。默认情况下不会删除任何分区。仅使用此命令一次。
语法
clearpart OPTIONS
clearpart OPTIONS
选项
--all- 断掉系统中的所有分区。这个选项将擦除安装程序可以访问的所有磁盘,包括任何附加的网络存储。请小心使用这个选项。
为了防止您需要保留的存储会被
clearpart清除,您可以使用--drives=选项指定需要删除的存储,或在以后附加网络存储(例如:在 Kickstart 文件的%post部分),或将用来访问网络存储的内核模块列入阻塞名单。--drives=- 指定从中清除分区的驱动器。例如,下面的命令清除了主 IDE 控制器上前两个驱动器上所有分区:clearpart --drives=hda,hdb --all
clearpart --drives=hda,hdb --allCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要清除多路径设备,请使用格式
disk/by-id/scsi-WWID,其中 WWID 是该设备的通用识别符。例如:要清除 WWID58095BEC5510947BE8C0360F604351918的磁盘,请使用:clearpart --drives=disk/by-id/scsi-58095BEC5510947BE8C0360F604351918
clearpart --drives=disk/by-id/scsi-58095BEC5510947BE8C0360F604351918Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个格式适用于所有多路径设备,但如果出现错误,也可以使用
disk/by-id/dm-uuid-mpath-WWID格式清除不使用逻辑卷管理器(LVM)的多路径设备,其中 WWID 是设备的通用识别符。例如,若要清除 WWID 为2416CD96995134CA5D787F00A5AA11017的磁盘,请使用:clearpart --drives=disk/by-id/dm-uuid-mpath-2416CD96995134CA5D787F00A5AA11017
clearpart --drives=disk/by-id/dm-uuid-mpath-2416CD96995134CA5D787F00A5AA11017Copy to Clipboard Copied! Toggle word wrap Toggle overflow 切勿按设备名称(如
mpatha)指定多路径设备。这样的设备名称并不是特定磁盘特有的。在安装过程中名为/dev/mpatha的磁盘可能不是您期望的磁盘。因此,clearpart命令可能会以错误的磁盘为目标。--initlabel- 通过为所有磁盘在其对于的架构中创建一个默认的磁盘标签来格式化磁盘(例如: 对于 x86,使用 msdos)。因为--initlabel可以查看所有磁盘,因此请确保只连接要格式化的驱动器。clearpart清理的磁盘将创建标签,即使--initlabel没有使用。clearpart --initlabel --drives=names_of_disks
clearpart --initlabel --drives=names_of_disksCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
clearpart --initlabel --drives=dasda,dasdb,dasdc
clearpart --initlabel --drives=dasda,dasdb,dasdcCopy to Clipboard Copied! Toggle word wrap Toggle overflow --list=- 指定要清除哪些分区。如果使用此选项,这个选项将覆盖--all和--linux选项。可在不同的驱动器间使用。例如:clearpart --list=sda2,sda3,sdb1
clearpart --list=sda2,sda3,sdb1Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
--disklabel=LABEL- 设置要使用的默认 disklabel。只有支持该平台的磁盘标签才会被接受。例如,在 64 位 Intel 和 AMD 构架中,接受msdos和gptdisklabels,但不接受dasd。 -
--linux- 删除所有 Linux 分区. -
--none(默认)- 不删除任何分区。 -
--cdl- 将所有 LDL DASD 重新格式化为 CDL 格式。
注
sdX(或/dev/sdX)格式不能保证重启后一致的设备名称,这可能会使某些 Kickstart 命令的使用变得复杂。当命令需要设备节点名称时,您可以使用/dev/disk中的任何项目作为替代。例如,改为使用以下设备名称:part / --fstype=xfs --onpart=sda1
part / --fstype=xfs --onpart=sda1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以使用类似以下条目之一:
part / --fstype=xfs --onpart=/dev/disk/by-path/pci-0000:00:05.0-scsi-0:0:0:0-part1 part / --fstype=xfs --onpart=/dev/disk/by-id/ata-ST3160815AS_6RA0C882-part1
part / --fstype=xfs --onpart=/dev/disk/by-path/pci-0000:00:05.0-scsi-0:0:0:0-part1 part / --fstype=xfs --onpart=/dev/disk/by-id/ata-ST3160815AS_6RA0C882-part1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过使用这种方法,命令总是以相同的存储设备为目标。这在大型存储环境中特别有用。要利用系统上的可用设备名称,您可以在交互式安装过程中使用
ls -lR /dev/disk命令。有关统一引用存储设备的不同方法的更多信息,请参阅 持久性命名属性的概述。-
如果使用
clearpart命令,则无法在逻辑分区中使用part --onpart命令。
C.5.4. zerombr 复制链接链接已复制到粘贴板!
zerombr Kickstart 命令是可选的。zerombr 会初始化磁盘上找到的所有无效分区表,并销毁具有无效分区表的磁盘的所有内容。当在带有未格式化的 Direct Access Storage Device(DASD)磁盘的 64 位 IBM Z 系统中执行安装时,需要这个命令,否则未格式化的磁盘不会被格式化并在安装过程中使用。仅使用此命令一次。
语法
zerombr
zerombr
备注
-
在 64 位 IBM Z 上,如果指定了
zerombr,安装程序可以看到的直接访问存储设备 (DASD) 都会使用 dasdfmt 自动低级格式化。这个命令还可防止用户在互动安装过程中进行选择。 -
如果没有指定
zerombr,且安装程序至少可以看到一个未格式化的 DASD,非互动的 Kickstart 安装将无法成功退出。 -
如果没有指定
zerombr,且安装程序至少可以看到一个未格式化的 DASD,如果用户同意格式化所有可见和未格式化的 DASD,则会退出交互式安装。要绕过这个过程,请只激活那些您要在安装过程中使用的 DASD。您总是可在安装完成后添加更多的 DASD。 - 这个命令没有选项。
C.5.5. bootloader 复制链接链接已复制到粘贴板!
bootloader Kickstart 命令是必需的。它指定引导装载程序的安装方式。仅使用此命令一次。
语法
bootloader [OPTIONS]
bootloader [OPTIONS]
选项
--append=- 指定附加内核参数。要指定多个参数,使用空格分隔它们。例如:bootloader --location=mbr --append="hdd=ide-scsi ide=nodma"
bootloader --location=mbr --append="hdd=ide-scsi ide=nodma"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 安装
plymouth软件包时会自动添加rhgb和quiet参数,即使您在此未指定参数或根本不使用--append=命令。要禁用此行为,请明确禁止安装plymouth:%packages -plymouth %end
%packages -plymouth %endCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这个选项可用于禁用在大多数现代处理器中存在的 Meltdown 和 Spectre speculative 安全漏洞(CVE-2017-5754、CVE-2017-5753 和 CVE-2017-5715)。在某些情况下,这些机制可能并不是必需的,启用它们可能会导致性能降低而不会提高安全性。要禁用这些系统,请在您的 Kickstart 文件中添加相关选项,例如:
bootloader --append="nopti noibrs noibpb"(在 AMD64/Intel 64 系统中)。警告在禁用任何漏洞缓解机制前,请确定您的系统不会受到安全攻击。有关 Meltdown 和 Spectre 漏洞的详情,请查看红帽漏洞响应文章。
--boot-drive=- 指定引导装载程序应写入的驱动器,因此要从哪个驱动器引导计算机。如果您使用多路径设备作为引导驱动器,使用它的 disk/by-id/dm-uuid-mpath-WWID 名称指定该设备。重要目前,在使用
zipl引导装载程序的 64 位 IBM Z 系统上的 Red Hat Enterprise Linux 安装中会忽略-boot-drive=选项。安装zipl后,它会自行确定引导驱动器。-
--leavebootorder- 安装程序会将 Red Hat Enterprise Linux 8 添加到引导装载程序中安装的系统列表的顶部,并保留所有现有的条目及其顺序。
这个选项只适用于 Power 系统,UEFI 系统不应该使用这个选项。
--driveorder=- 指定哪个驱动器最先在 BIOS 引导顺序中。例如:bootloader --driveorder=sda,hda
bootloader --driveorder=sda,hdaCopy to Clipboard Copied! Toggle word wrap Toggle overflow --location=- 指定引导记录的写入位置。有效值如下:mbr- 默认选项.具体要看驱动器是使用主引导记录(MBR)还是 GUID 分区表(GPT)方案:在 GPT 格式的磁盘中,这个选项会在 BIOS 引导分区中安装 stage 1.5 引导装载程序。
在使用 MBR 格式化的磁盘中,会在 MBR 和第一个分区之间的空白空间中安装 stage 1.5。
-
partition- 在包含内核的分区的第一个扇区安装引导装载程序。 -
none- 不安装引导装载程序。
在大多数情况下,不需要指定这个选项。
-
--nombr- 不向 MBR 中安装引导装载程序。 --password=- 如果使用 GRUB,请将引导装载程序密码设置为使用这个选项指定的密码。这应该被用来限制对 GRUB shell 的访问,在 GRUB shell 中可以传递任意内核选项。如果指定了密码,GRUB 也会要求输入用户名。用户名始终为
root。--iscrypted- 通常当您使用--password=选项指定引导装载程序密码时,会以明文形式将其保存在 Kickstart 文件中。如果要加密密码,使用这个选项和一个加密的密码。要生成加密的密码,请使用
grub2-mkpasswd-pbkdf2命令,输入要使用的密码,并将命令的输出(以grub.pbkdf2开头的哈希值)复制到 Kickstart 文件中。带有加密密码的bootloaderKickstart 条目示例类似如下:bootloader --iscrypted --password=grub.pbkdf2.sha512.10000.5520C6C9832F3AC3D149AC0B24BE69E2D4FB0DBEEDBD29CA1D30A044DE2645C4C7A291E585D4DC43F8A4D82479F8B95CA4BA4381F8550510B75E8E0BB2938990.C688B6F0EF935701FF9BD1A8EC7FE5BD2333799C98F28420C5CC8F1A2A233DE22C83705BB614EA17F3FDFDF4AC2161CEA3384E56EB38A2E39102F5334C47405E
bootloader --iscrypted --password=grub.pbkdf2.sha512.10000.5520C6C9832F3AC3D149AC0B24BE69E2D4FB0DBEEDBD29CA1D30A044DE2645C4C7A291E585D4DC43F8A4D82479F8B95CA4BA4381F8550510B75E8E0BB2938990.C688B6F0EF935701FF9BD1A8EC7FE5BD2333799C98F28420C5CC8F1A2A233DE22C83705BB614EA17F3FDFDF4AC2161CEA3384E56EB38A2E39102F5334C47405ECopy to Clipboard Copied! Toggle word wrap Toggle overflow -
--timeout=- 指定引导装载程序在引导默认选项前等待的时间(以秒为单位)。 -
--default=- 在引导装载程序配置中设置默认引导镜像。 -
--extlinux- 使用 extlinux 引导装载程序而不是 GRUB。这个选项只适用于支持 extlinux 的系统。 -
--disabled- 这个选项是更强大的--location=none版本。虽然--location=none只是禁用引导装载程序安装,但--disabled禁用引导装载程序安装,同时禁用包含引导装载程序的软件包安装,从而节省了空间。
备注
- 红帽建议在每个系统中设置引导装载程序密码。一个没有保护的引导装载程序可以让潜在的攻击者修改系统的引导选项,并获得对系统的未授权访问。
- 在某些情况下,需要一个特殊的分区来在 AMD64、Intel 64 和 64 位 ARM 系统上安装引导装载程序。这个分区的类型和大小取决于您要安装引导装载程序的磁盘是否使用主引导记录(MBR)还是 GUID 分区表(GPT)模式。如需更多信息,请参阅 配置引导装载程序 部分。
sdX(或/dev/sdX)格式不能保证重启后一致的设备名称,这可能会使某些 Kickstart 命令的使用变得复杂。当命令需要设备节点名称时,您可以使用/dev/disk中的任何项目作为替代。例如,改为使用以下设备名称:part / --fstype=xfs --onpart=sda1
part / --fstype=xfs --onpart=sda1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以使用类似以下条目之一:
part / --fstype=xfs --onpart=/dev/disk/by-path/pci-0000:00:05.0-scsi-0:0:0:0-part1 part / --fstype=xfs --onpart=/dev/disk/by-id/ata-ST3160815AS_6RA0C882-part1
part / --fstype=xfs --onpart=/dev/disk/by-path/pci-0000:00:05.0-scsi-0:0:0:0-part1 part / --fstype=xfs --onpart=/dev/disk/by-id/ata-ST3160815AS_6RA0C882-part1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过使用这种方法,命令总是以相同的存储设备为目标。这在大型存储环境中特别有用。要利用系统上的可用设备名称,您可以在交互式安装过程中使用
ls -lR /dev/disk命令。有关统一引用存储设备的不同方法的更多信息,请参阅 持久性命名属性的概述。-
在 Red Hat Enterprise Linux 8 中已弃用
--upgrade选项。
C.5.6. autopart 复制链接链接已复制到粘贴板!
autopart Kickstart 命令是可选的。它自动创建分区。
自动创建的分区是:根(/)分区(1 GiB 或更大)、swap 分区,以及适合架构的 /boot 分区。在足够大的驱动器(50 GiB 及更高版本)上,这还会创建一个 /home 分区。仅使用此命令一次。
语法
autopart OPTIONS
autopart OPTIONS
选项
--type=- 选择您要使用的预定义自动分区方案之一。可接受以下值:-
lvm:LVM 分区方案。 -
plain:无 LVM 的常规分区。 -
thinp:LVM Thin Provisioning 分区方案。
-
-
--fstype=- 选择其中一个可用文件系统类型。可用值包括ext2、ext3、ext4、xfs和vfat。默认的文件系统是xfs。 -
--nohome- 禁用自动创建/home分区。 -
--nolvm- 不使用 LVM 进行自动分区。这个选项等同于--type=plain。 -
--noboot- 不创建/boot分区。 -
--noswap- 不创建交换分区。 --encrypted- 使用 Linux 统一密钥设置 (LUKS) 加密所有分区。这等同于在手动图形安装的初始分区界面中选择加密分区选项。注意在加密一个或多个分区时, Anaconda 会尝试收集 256 字节熵,以保证安全加密分区。收集熵可能需要一些时间 - 无论是否有收集到足够的熵,该过程将在最多 10 分钟后停止。
与安装系统互动(通过键盘输入或移动鼠标)可加速此进程。如果要在虚拟机中安装,您还可以将
virtio-rng设备(虚拟随机数生成器)附加到客户机。-
--LUKS-version=LUKS_VERSION- 指定应该使用哪个版本的 LUKS 格式来加密文件系统。只有在指定了--encrypted时这个选项才有意义。 -
--passphrase=- 为所有加密设备提供默认的系统范围密码短语。 -
--escrowcert=URL_of_X.509_certificate- 将所有加密卷的数据加密密钥保存在/root的文件中,使用来自 URL_of_X.509_certificate 指定的 URL 的 X.509 证书进行加密。每个加密卷的密钥都作为单独的文件保存。只有在指定了--encrypted时这个选项才有意义。 -
--backuppassphrase- 为每个加密卷添加随机生成的密码短语。将这些密码短语存储在/root中的单独文件中,使用通过--escrowcert指定的 X.509 证书进行加密。只有在指定了--escrowcert时这个选项才有意义。 -
--cipher=- 指定在 Anaconda 默认aes-xts-plain64时要使用的加密类型。这个选项必须与--encrypted选项一同使用;其本身无效。安全强化 文档中列出了可用的加密类型,但红帽强烈建议您使用aes-xts-plain64或aes-cbc-essiv:sha256。 -
--pbkdf=PBKDF- 为 LUKS keylot 设置 PBKDF(Password-Based Key Derivation Function)算法。另请参阅 man page cryptsetup(8)。只有在指定了--encrypted时这个选项才有意义。 -
--PBKDF-memory=PBKDF_MEMORY- 设置 PBKDF 的内存成本。另请参阅 man page cryptsetup(8)。只有在指定了--encrypted时这个选项才有意义。 -
--PBKDF-time=PBKDF_TIME- 设置 PBKDF 密码处理所花费的毫秒数。另请参阅 man page cryptsetup(8) 中的--iter-time。只有在指定了--encrypted时这个选项才有意义,并且与--pbkdf-iterations相互排斥。 -
--PBKDF-iterations=PBKDF_ITERATIONS- 设定直接迭代数量并避免 PBKDF 基准测试。另请参阅 man page cryptsetup(8) 中的--pbkdf-force-iterations。只有在指定了--encrypted时这个选项才有意义,并且与--pbkdf-time相互排斥。
备注
-
autopart选项不能与同一 Kickstart 文件中的part/partition、raid、logvol或volgroup选项一同使用。 -
autopart命令不是强制的,但如果 Kickstart 脚本中没有part或mount命令,则必须包含该命令。 -
在 CMS 类型的单个 FBA DASD 中安装时,建议使用
autopart --nohomeKickstart 选项。这样可保证安装程序不会创建单独的/home分区。安装过程可以成功进行。 -
如果您丢失了 LUKS 密码短语,那么就完全无法访问所有加密的分区及其数据。丢失的密码短语是无法找回的。但是,您可以使用
--escrowcert保存加密密码短语,并使用--backuppassphrase选项创建加密密码短语备份。 -
在使用
autopart、autopart --type=lvm或autopart=thinp时,确保磁盘扇区大小一致。
C.5.7. reqpart 复制链接链接已复制到粘贴板!
reqpart Kickstart 命令是可选的。它自动创建您的硬件平台所需的分区。这为带有 UEFI 固件的系统包括一个 /boot/efi 分区,带有 BIOS 固件和 GPT 的系统包括 biosboot 分区,为 IBM Power 系统包括 PRePBoot 分区。仅使用此命令一次。
语法
reqpart [--add-boot]
reqpart [--add-boot]
选项
-
--add-boot- 除基础命令创建的特定于平台的分区之外,还创建一个单独的/boot分区。
备注
-
这个命令不能与
autopart一起使用,因为autopart会做reqpart命令所做的任何事情,另外还创建其他分区或逻辑卷,如/和swap。与autopart不同,这个命令只创建特定于平台的分区,并将驱动器的其余部分留空,允许您创建自定义布局。
C.5.8. part 或 partition 复制链接链接已复制到粘贴板!
需要 part 或 partition Kickstart 命令。它在系统上创建一个分区。
语法
part|partition mntpoint [OPTIONS]
part|partition mntpoint [OPTIONS]
选项
mntpoint - 挂载分区的位置。该值必须是以下格式之一:
/path例如:
/、/usr、/homeswap该分区被用作交换空间。
要自动决定 swap 分区的大小,请使用
--recommended选项:swap --recommended
swap --recommendedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 分配的大小将生效,但不会根据您的系统进行精确校准。
要自动确定 swap 分区的大小,同时允许系统的额外空间可以休眠,请使用
--hibernation选项:swap --hibernation
swap --hibernationCopy to Clipboard Copied! Toggle word wrap Toggle overflow 分配的大小将相当于由
--recommended分配的交换空间加上您系统上的 RAM 量。有关这些命令所分配的 swap 大小,请参阅为 AMD64、Intel 64 和 64 位 ARM 系统 推荐的分区方案。raid.id该分区用于软件 RAID(请参阅
raid)。pv.id该分区用于 LVM(请参阅
logvol)。biosboot该分区将用在 BIOS 引导分区中。在使用 BIOS 的 AMD64 和 Intel 64 系统中使用 GUID 分区表(GPT)中需要 1 MiB BIOS 引导分区 ; 引导装载程序将被安装到其中。UEFI 系统中不需要此功能。另请参阅
bootloader命令。/boot/efi一个 EFI 系统分区。基于 UEFI 的 AMD64、Intel 64 和 64 位 ARM 上需要 50 MiB EFI 分区。推荐的大小为 200 MiB。它在 BIOS 系统上并不需要。另请参阅
bootloader命令。
-
--size=- 最小分区大小,以 MiB 为单位。在这里指定一个整数值,如500(不要包含单位)。如果指定的大小太小,安装将失败。将--size值设置为您需要的最小空间量。有关大小的建议,请参阅 推荐的分区方案。 -
--grow- 指定要填满所有可用空间(若有的话)的分区增长,或最大为最大大小设置(如果指定了)。如果您在交换分区上使用--grow=但没有设置--maxsize=,Anaconda 会限制 swap 分区的最大大小。对于物理内存小于 2 GiB 的系统,强制的限制为物理内存的两倍。对于拥有超过 2 GiB 的系统,强制限制为物理内存大小加上 2GiB。 -
--maxsize=- 分区设置为增长时的最大分区大小(以 MiB 为单位)。在这里指定一个整数值,如500(不要包含单位)。 -
--noformat- 指定不要被格式化的分区,以便与--onpart命令一起使用。 --onpart=或--usepart=- 指定要放置分区的设备。使用现有的空白设备并将其格式化到新指定类型。例如:partition /home --onpart=hda1
partition /home --onpart=hda1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
/home放置到/dev/hda1。这些选项还可以在逻辑卷中添加分区。例如:
partition pv.1 --onpart=hda2
partition pv.1 --onpart=hda2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 设备必须已在系统上存在;
--onpart选项不会创建它。在这种情况下, Anaconda 会在不创建分区表的情况下格式化并使用驱动器。但是,在以这种方式格式化的设备上不支持 GRUB 安装,且必须放在具有分区表的驱动器上。
partition pv.1 --onpart=hdb
partition pv.1 --onpart=hdbCopy to Clipboard Copied! Toggle word wrap Toggle overflow --ondisk=或--ondrive=- 在现有磁盘中创建分区(由part命令指定)。这个命令总是创建一个分区。强制在特定磁盘中创建分区。例如:--ondisk=sdb将分区放在系统的第二个 SCSI 磁盘中。要指定不使用逻辑卷管理器(LVM)的多路径设备,请使用格式
disk/by-id/dm-uuid-mpath-WWID,其中 WWID 是设备的通用识别符。例如,要指定 WWID 为2416CD96995134CA5D787F00A5AA11017的磁盘,请使用:part / --fstype=xfs --grow --asprimary --size=8192 --ondisk=disk/by-id/dm-uuid-mpath-2416CD96995134CA5D787F00A5AA11017
part / --fstype=xfs --grow --asprimary --size=8192 --ondisk=disk/by-id/dm-uuid-mpath-2416CD96995134CA5D787F00A5AA11017Copy to Clipboard Copied! Toggle word wrap Toggle overflow 警告切勿按设备名称(如
mpatha)指定多路径设备。这样的设备名称并不是特定磁盘特有的。在安装过程中名为/dev/mpatha的磁盘可能不是您期望的磁盘。因此,part命令可能会以错误的磁盘为目标。-
--asprimary- 强制将该分区分配为 primary 分区。如果无法将该分区作为主分区分配(通常是因为已经分配了太多的主分区),则该分区进程会失败。只有使用主引导记录(MBR)时这个选项才有意义。 -
--fsprofile=- 指定要传递给在这个分区上创建文件系统的程序的使用类型。使用类型定义了创建文件系统时使用的各种微调参数。要使用这个选项,文件系统必须支持使用类型,且必须有一个配置文件来列出有效类型。对于ext2、ext3、ext4,此配置文件为/etc/mke2fs.conf。 --mkfsoptions=- 指定要传递给在此分区上创建文件系统的程序的其他参数。这与--fsprofile类似,但适用于所有文件系统,而不仅仅是支持配置集概念的文件系统。没有对参数列表进行任何操作,因此必须以可直接传递给 mkfs 程序的格式提供。这意味着,根据具体文件系统,多个选项应该用逗号分开,或使用双引号分开。例如,part /opt/foo1 --size=512 --fstype=ext4 --mkfsoptions="-O ^has_journal,^flex_bg,^metadata_csum" part /opt/foo2 --size=512 --fstype=xfs --mkfsoptions="-m bigtime=0,finobt=0"
part /opt/foo1 --size=512 --fstype=ext4 --mkfsoptions="-O ^has_journal,^flex_bg,^metadata_csum" part /opt/foo2 --size=512 --fstype=xfs --mkfsoptions="-m bigtime=0,finobt=0"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
详情请查看您要创建的文件系统的手册页。例如:mkfs.ext4 或 mkfs.xfs。
-
--fstype=- 为分区设置文件系统类型。有效值为xfs、ext2、ext3、ext4、swap、vfat、efi和biosboot。 --fsoptions- 指定在挂载文件系统时要使用的自由格式选项字符串。该字符串将复制到安装的系统的/etc/fstab文件中,并且应用引号括起来。注意在 EFI 系统分区(
/boot/efi)中,anaconda 硬编码了值,并忽略了用户指定的--fsoptions值。-
--label=- 为单个分区分配标签。 -
--recommended- 自动确定分区的大小。有关推荐的方案的详情,请参考为 AMD64、Intel 64 和 64 位 ARM 推荐的分区方案。这个选项只能用于生成文件系统(如/boot分区和交换空间)的分区。它不能被用来创建 LVM 物理卷或 RAID 成员。 -
--onbiosdisk- 强制 BIOS 发现的特定磁盘上创建的分区。 --encrypted- 指定该分区应该用 LUKS 加密,使用--passphrase=选项中提供的密码短语。如果您没有指定密码短语,Anaconda 将使用autopart --passphrase命令设定的默认系统级密码,或者停止安装并在未设定默认密码短语时提示您输入密码短语。注意在加密一个或多个分区时, Anaconda 会尝试收集 256 字节熵,以保证安全加密分区。收集熵可能需要一些时间 - 无论是否有收集到足够的熵,该过程将在最多 10 分钟后停止。
与安装系统互动(通过键盘输入或移动鼠标)可加速此进程。如果要在虚拟机中安装,您还可以将
virtio-rng设备(虚拟随机数生成器)附加到客户机。-
--LUKS-version=LUKS_VERSION- 指定应该使用哪个版本的 LUKS 格式来加密文件系统。只有在指定了--encrypted时这个选项才有意义。 -
--passphrase=- 指定在加密此分区时要使用的密码短语。这个选项必须与--encrypted选项一同使用;其本身无效。 -
--cipher=- 指定在 Anaconda 默认aes-xts-plain64时要使用的加密类型。这个选项必须与--encrypted选项一同使用;其本身无效。安全强化 文档中列出了可用的加密类型,但红帽强烈建议您使用aes-xts-plain64或aes-cbc-essiv:sha256。 -
--escrowcert=URL_of_X.509_certificate- 将所有加密分区的数据加密密钥保存在/root的文件中,使用来自 URL_of_X.509_certificate 指定的 URL 的 X.509 证书进行加密。每个加密分区的密钥都作为单独的文件保存。只有在指定了--encrypted时这个选项才有意义。 -
--backuppassphrase- 为每个加密分区添加随机生成的密码短语。将这些密码短语存储在/root中的单独文件中,使用通过--escrowcert指定的 X.509 证书进行加密。只有在指定了--escrowcert时这个选项才有意义。 -
--pbkdf=PBKDF- 为 LUKS keylot 设置 PBKDF(Password-Based Key Derivation Function)算法。另请参阅 man page cryptsetup(8)。只有在指定了--encrypted时这个选项才有意义。 -
--PBKDF-memory=PBKDF_MEMORY- 设置 PBKDF 的内存成本。另请参阅 man page cryptsetup(8)。只有在指定了--encrypted时这个选项才有意义。 -
--PBKDF-time=PBKDF_TIME- 设置 PBKDF 密码处理所花费的毫秒数。另请参阅 man page cryptsetup(8) 中的--iter-time。只有在指定了--encrypted时这个选项才有意义,并且与--pbkdf-iterations相互排斥。 -
--PBKDF-iterations=PBKDF_ITERATIONS- 设定直接迭代数量并避免 PBKDF 基准测试。另请参阅 man page cryptsetup(8) 中的--pbkdf-force-iterations。只有在指定了--encrypted时这个选项才有意义,并且与--pbkdf-time相互排斥。 -
--resize=- 调整现有分区的大小。使用这个选项时,使用--size=选项指定目标的大小(单位 MiB),使用--onpart=指定目标分区。
备注
-
part命令不是强制的,但您必须在 Kickstart 脚本中包含part、autopart或mount。 -
在 Red Hat Enterprise Linux 8 中已弃用
--active选项。 - 如果因为某种原因分区失败,虚拟控制台 3 中会显示诊断信息。
-
除非使用
--noformat和--onpart,否则所有创建的分区都会格式化为安装过程的一部分。 sdX(或/dev/sdX)格式不能保证重启后一致的设备名称,这可能会使某些 Kickstart 命令的使用变得复杂。当命令需要设备节点名称时,您可以使用/dev/disk中的任何项目作为替代。例如,改为使用以下设备名称:part / --fstype=xfs --onpart=sda1
part / --fstype=xfs --onpart=sda1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以使用类似以下条目之一:
part / --fstype=xfs --onpart=/dev/disk/by-path/pci-0000:00:05.0-scsi-0:0:0:0-part1 part / --fstype=xfs --onpart=/dev/disk/by-id/ata-ST3160815AS_6RA0C882-part1
part / --fstype=xfs --onpart=/dev/disk/by-path/pci-0000:00:05.0-scsi-0:0:0:0-part1 part / --fstype=xfs --onpart=/dev/disk/by-id/ata-ST3160815AS_6RA0C882-part1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过使用这种方法,命令总是以相同的存储设备为目标。这在大型存储环境中特别有用。要利用系统上的可用设备名称,您可以在交互式安装过程中使用
ls -lR /dev/disk命令。有关统一引用存储设备的不同方法的更多信息,请参阅 持久性命名属性的概述。-
如果您丢失了 LUKS 密码短语,那么就完全无法访问所有加密的分区及其数据。丢失的密码短语是无法找回的。但是,您可以使用
--escrowcert保存加密密码短语,并使用--backuppassphrase选项创建加密密码短语备份。
C.5.9. raid 复制链接链接已复制到粘贴板!
raid Kickstart 命令是可选的。它组成一个软件 RAID 设备。
语法
raid mntpoint --level=level --device=device-name partitions*
raid mntpoint --level=level --device=device-name partitions*
选项
mntpoint - 挂载 RAID 文件系统的位置。如果是
/,RAID 级别必须是 1,除非引导分区 (/boot) 存在。如果引导分区存在,/boot分区必须是级别 1,root (/) 分区可以是任意可用的类型。partitions* (代表多个分区可以被列举)列出了要添加到 RAID 阵列的 RAID 标记。重要-
在 IBM Power 系统上,如果 RAID 设备已经准备好,且在安装过程中没有重新格式化,如果您打算将
/boot和 PReP 分区放在 RAID 设备上,请确保 RAID 元数据版本为0.90或1.0。对于/boot和 PReP 分区mdadm元数据版本1.1和1.2不支持。 -
PowerNV 系统上不需要
PReP引导分区。
-
在 IBM Power 系统上,如果 RAID 设备已经准备好,且在安装过程中没有重新格式化,如果您打算将
-
--level=- 使用的 RAID 级别(0、1、4、5、6 或 10)。 --device=- 要使用的 RAID 设备的名称 - 例如--device=root。重要不要使用
md0格式的mdraid名称 - 无法保证这些名称具有持久性。相反,应使用有意义的名称,如root或swap。使用有含义的名称可生成一个从/dev/md/name到/dev/mdX节点分配到的阵列的符号链接。如果您有一个无法为其分配名称的旧阵列(v0.90 元数据),您可以使用文件系统标签或 UUID 指定该阵列。例如,
--device=LABEL=root或--device=UUID=93348e56-4631-d0f0-6f5b-45c47f570b88。您可以使用 RAID 设备上文件系统的 UUID 或者 RAID 设备本身的 UUID。RAID 设备的 UUID 应为
8-4-4-4-12格式。mdadm 报告的 UUID 为8:8:8:8格式,需要更改。例如93348e56:4631d0f0:6f5b45c4:7f570b88应改为93348e56-4631-d0f0-6f5b-45c47f570b88。-
--CHUNKSIZE=- 以 KiB 为单位设置 RAID 存储的块大小。在某些情况下,使用与默认块不同的块大小 (512 Kib) 可以提高 RAID 的性能。 -
--spares=- 指定分配给 RAID 阵列的备用驱动器数量。可使用备用驱动器在驱动器失败时重建阵列。 -
--fsprofile=- 指定要传递给在这个分区上创建文件系统的程序的使用类型。使用类型定义了创建文件系统时使用的各种微调参数。要使用这个选项,文件系统必须支持使用类型,且必须有一个配置文件来列出有效类型。对于 ext2、ext3 和 ext4,此配置文件为/etc/mke2fs.conf。 -
--fstype=- 为 RAID 阵列设置文件系统类型。有效值为xfs、ext2、ext3、ext4、swap和vfat。 -
--fsoptions=- 指定在挂载文件系统时要使用的自由格式选项字符串。该字符串将复制到安装的系统的/etc/fstab文件中,并且应用引号括起来。在 EFI 系统分区(/boot/efi)中,anaconda 硬编码了值,并忽略了用户指定的--fsoptions值。 --mkfsoptions=- 指定要传递给在此分区上创建文件系统的程序的其他参数。没有对参数列表进行任何操作,因此必须以可直接传递给 mkfs 程序的格式提供。这意味着,根据具体文件系统,多个选项应该用逗号分开,或使用双引号分开。例如,part /opt/foo1 --size=512 --fstype=ext4 --mkfsoptions="-O ^has_journal,^flex_bg,^metadata_csum" part /opt/foo2 --size=512 --fstype=xfs --mkfsoptions="-m bigtime=0,finobt=0"
part /opt/foo1 --size=512 --fstype=ext4 --mkfsoptions="-O ^has_journal,^flex_bg,^metadata_csum" part /opt/foo2 --size=512 --fstype=xfs --mkfsoptions="-m bigtime=0,finobt=0"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
详情请查看您要创建的文件系统的手册页。例如:mkfs.ext4 或 mkfs.xfs。
-
--label=- 指定要生成的文件系统的标签。如果给定标签已被另一个文件系统使用,则会创建一个新标签。 -
--noformat- 使用现有的 RAID 设备,且不要格式化 RAID 阵列。 -
--use existing- 使用现有的 RAID 设备并重新格式化它。 --encrypted- 指定该 RAID 设备应该用 LUKS 加密,使用--passphrase=选项中提供的密码短语。如果您没有指定密码短语,Anaconda 将使用autopart --passphrase命令设定的默认系统级密码,或者停止安装并在未设定默认密码短语时提示您输入密码短语。注意在加密一个或多个分区时, Anaconda 会尝试收集 256 字节熵,以保证安全加密分区。收集熵可能需要一些时间 - 无论是否有收集到足够的熵,该过程将在最多 10 分钟后停止。
与安装系统互动(通过键盘输入或移动鼠标)可加速此进程。如果要在虚拟机中安装,您还可以将
virtio-rng设备(虚拟随机数生成器)附加到客户机。-
--LUKS-version=LUKS_VERSION- 指定应该使用哪个版本的 LUKS 格式来加密文件系统。只有在指定了--encrypted时这个选项才有意义。 -
--cipher=- 指定在 Anaconda 默认aes-xts-plain64时要使用的加密类型。这个选项必须与--encrypted选项一同使用;其本身无效。安全强化 文档中列出了可用的加密类型,但红帽强烈建议您使用aes-xts-plain64或aes-cbc-essiv:sha256。 -
--passphrase=- 指定加密此 RAID 设备时使用的密码短语。这个选项必须与--encrypted选项一同使用;其本身无效。 -
--escrowcert=URL_of_X.509_certificate- 将这个设备的数据加密密钥保存在/root中的一个文件中,使用来自 URL_of_X.509_certificate 指定的 URL 的 X.509 证书加密。只有在指定了--encrypted时这个选项才有意义。 -
--backuppassphrase- 向这个设备添加随机生成的密码短语。将该密语存储在/root中的文件中,使用通过--escrowcert指定的 X.509 证书进行加密。只有在指定了--escrowcert时这个选项才有意义。 -
--pbkdf=PBKDF- 为 LUKS keylot 设置 PBKDF(Password-Based Key Derivation Function)算法。另请参阅 man page cryptsetup(8)。只有在指定了--encrypted时这个选项才有意义。 -
--PBKDF-memory=PBKDF_MEMORY- 设置 PBKDF 的内存成本。另请参阅 man page cryptsetup(8)。只有在指定了--encrypted时这个选项才有意义。 -
--PBKDF-time=PBKDF_TIME- 设置 PBKDF 密码处理所花费的毫秒数。另请参阅 man page cryptsetup(8) 中的--iter-time。只有在指定了--encrypted时这个选项才有意义,并且与--pbkdf-iterations相互排斥。 -
--PBKDF-iterations=PBKDF_ITERATIONS- 设定直接迭代数量并避免 PBKDF 基准测试。另请参阅 man page cryptsetup(8) 中的--pbkdf-force-iterations。只有在指定了--encrypted时这个选项才有意义,并且与--pbkdf-time相互排斥。
示例
下面的例子展示,假定系统里有三个 SCSI 磁,如何为 / 创建 RAID 1 分区,为 /home 创建 RAID 5。它还创建三个交换分区,每个驱动器都有一个。
备注
-
如果您丢失了 LUKS 密码短语,那么就完全无法访问所有加密的分区及其数据。丢失的密码短语是无法找回的。但是,您可以使用
--escrowcert保存加密密码短语,并使用--backuppassphrase选项创建加密密码短语备份。
C.5.10. volgroup 复制链接链接已复制到粘贴板!
volgroup Kickstart 命令是可选的。它创建一个逻辑卷管理器(LVM)组。
语法
volgroup name [OPTIONS] [partition*]
volgroup name [OPTIONS] [partition*]
必填选项
- name - 新卷组的名称。
选项
- partition - 用作卷组存储支持的物理卷分区。
-
--noformat- 使用现有卷组而不对其进行格式化。 --useexisting- 使用现有卷组并重新格式化它。如果使用这个选项,不要指定分区。例如:volgroup rhel00 --useexisting --noformat
volgroup rhel00 --useexisting --noformatCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
--pesize=- 以 KiB 为单位设置卷组物理扩展的大小。默认值为 4096(4 MiB),最小值为 1024(1 MiB)。 -
--reserved-space=- 指定在 MiB 的卷组中保留未使用的空间量。只适用于新创建的卷组。 -
--reserved-percent=- 指定卷组空间占未使用空间的百分比。只适用于新创建的卷组。
备注
首先创建分区,然后创建逻辑卷组,然后创建逻辑卷。例如:
part pv.01 --size 10000 volgroup my_volgrp pv.01 logvol / --vgname=my_volgrp --size=2000 --name=root
part pv.01 --size 10000 volgroup my_volgrp pv.01 logvol / --vgname=my_volgrp --size=2000 --name=rootCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在使用 Kickstart 安装 Red Hat Enterprise Linux 时,不要在逻辑卷和卷组名称中使用短划线(
-)字符。如果使用这个字符,安装会完成,但/dev/mapper/目录会列出这些卷和卷组的每个横线都会加倍。例如,名为volgrp-01的卷组,其包含名为logvol-01的逻辑卷将被列为/dev/mapper/volgrp--01-logvol--01。这个限制只适用于新创建的逻辑卷和卷组名称。如果您使用
--noformat选项重复使用现有的名称,则不会更改它们的名称。
C.5.11. logvol 复制链接链接已复制到粘贴板!
logvol Kickstart 命令是可选的。它为逻辑卷管理器(LVM)创建一个逻辑卷。
语法
logvol mntpoint --vgname=name --name=name [OPTIONS]
logvol mntpoint --vgname=name --name=name [OPTIONS]
必填选项
mntpoint挂载分区的挂载点。必须是以下格式之一:
/path例如:
/或/homeswap该分区被用作交换空间。
要自动决定 swap 分区的大小,请使用
--recommended选项:swap --recommended
swap --recommendedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要自动决定 swap 分区的大小,并允许系统的额外空间可以休眠,请使用
--hibernation选项:swap --hibernation
swap --hibernationCopy to Clipboard Copied! Toggle word wrap Toggle overflow 分配的大小将相当于由
--recommended分配的交换空间加上您系统上的 RAM 量。有关这些命令所分配的 swap 大小,请参阅为 AMD64、Intel 64 和 64 位 ARM 系统 推荐的分区方案。
--vgname=name- 卷组名称。
--name=name- 逻辑卷名称。
可选选项
--noformat- 使用现有逻辑卷且不要对其进行格式化。
--useexisting- 使用现有逻辑卷并重新格式化它。
--fstype=-
为逻辑卷设置文件系统类型。有效值为
xfs、ext2、ext3、ext4、swap和vfat。 --fsoptions=指定挂载文件系统时要使用的选项的自由格式字符串。该字符串将复制到安装的系统的
/etc/fstab文件中,并且应用引号括起来。注意在 EFI 系统分区(
/boot/efi)中,anaconda 硬编码了值,并忽略了用户指定的--fsoptions值。--mkfsoptions=指定要传递给在这个分区上创建文件系统的程序的其他参数。没有对参数列表进行任何操作,因此必须以可直接传递给 mkfs 程序的格式提供。这意味着,根据具体文件系统,多个选项应该用逗号分开,或使用双引号分开。例如,
part /opt/foo1 --size=512 --fstype=ext4 --mkfsoptions="-O ^has_journal,^flex_bg,^metadata_csum" part /opt/foo2 --size=512 --fstype=xfs --mkfsoptions="-m bigtime=0,finobt=0"
part /opt/foo1 --size=512 --fstype=ext4 --mkfsoptions="-O ^has_journal,^flex_bg,^metadata_csum" part /opt/foo2 --size=512 --fstype=xfs --mkfsoptions="-m bigtime=0,finobt=0"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
详情请查看您要创建的文件系统的手册页。例如:mkfs.ext4 或 mkfs.xfs。
--fsprofile=-
指定传递给在这个分区上创建文件系统的程序的使用类型。使用类型定义了创建文件系统时使用的各种微调参数。要使用这个选项,文件系统必须支持使用类型,且必须有一个配置文件来列出有效类型。对于
ext2、ext3和ext4,此配置文件为/etc/mke2fs.conf。 --label=- 为逻辑卷设置标签。
--grow- 扩展逻辑卷以占据可用空间(若有),或使用指定的最大值(若有)。只有在磁盘镜像中预分配了最小存储空间时,必须使用该选项,并希望该卷扩展并占据所有可用空间。在物理环境中,这是一次性的操作。但是在虚拟环境中,当虚拟机将任何数据写入虚拟磁盘时,卷大小会增加。
--size=-
MiB 中的逻辑卷的大小。此选项不能与
--percent=选项一同使用。 --percent=考虑任何静态大小逻辑卷时的逻辑卷大小,作为卷组中剩余空间的百分比。这个选项不能与
--size=选项一同使用。重要在创建新逻辑卷时,您必须使用
--size=选项静态指定其大小,或使用--percent=选项指定剩余空间的百分比。您不能在同一逻辑卷中同时使用这些选项。--maxsize=-
当将逻辑卷设置为可扩充时 MiB 的最大值。在这里指定一个整数值,如
500(不要包含单位)。 --recommended- 创建逻辑卷时使用这个选项,根据您的系统硬件自动决定这个卷的大小。有关推荐的方案的详情,请参考为 AMD64、Intel 64 和 64 位 ARM 系统 推荐的分区方案。
--resize-
重新调整逻辑卷大小。如果使用这个选项,还必须指定
--useexisting和--size。 --encrypted指定该逻辑卷应该使用 Linux Unified Key Setup(LUKS)进行加密,使用
--passphrase=选项中提供的密码短语。如果您没有指定密码短语,安装程序将使用autopart --passphrase命令设定的默认系统级密码,或者在未设定默认密码时暂停安装并提示您输入密码短语。注意在加密一个或多个分区时, Anaconda 会尝试收集 256 字节熵,以保证安全加密分区。收集熵可能需要一些时间 - 无论是否有收集到足够的熵,该过程将在最多 10 分钟后停止。
与安装系统互动(通过键盘输入或移动鼠标)可加速此进程。如果要在虚拟机中安装,您还可以将
virtio-rng设备(虚拟随机数生成器)附加到客户机。--passphrase=-
指定在加密这个逻辑卷时要使用的密码短语。这个选项必须与
--encrypted选项一同使用,单独使用无效。 --cipher=-
如果 Anaconda 默认的
aes-xts-plain64不符合要求,则指定要使用的加密类型。这个选项必须与--encrypted选项一同使用;其本身无效。安全强化 文档中列出了可用的加密类型,但红帽强烈建议您使用aes-xts-plain64或aes-cbc-essiv:sha256。 --escrowcert=URL_of_X.509_certificate-
将所有加密卷的数据加密密钥保存为
/root中的文件,使用来自 URL_of_X.509_certificate 指定的 URL 的 X.509 证书进行加密。每个加密卷的密钥都作为单独的文件保存。只有在指定了--encrypted时这个选项才有意义。 --luks-version=LUKS_VERSION-
指定应用来加密文件系统的 LUKS 格式版本。只有在指定了
--encrypted时这个选项才有意义。 --backuppassphrase-
为每个加密卷添加随机生成的密码短语。将这些密码短语存储在
/root中的单独文件中,使用通过--escrowcert指定的 X.509 证书进行加密。只有在指定了--escrowcert时这个选项才有意义。 --pbkdf=PBKDF-
为 LUKS keylot 设置基于密码的身份验证(PBKDF)算法。另请参阅 man page cryptsetup(8)。只有在指定了
--encrypted时这个选项才有意义。 --pbkdf-memory=PBKDF_MEMORY-
为 PBKDF 设置内存成本。另请参阅 man page cryptsetup(8)。只有在指定了
--encrypted时这个选项才有意义。 --pbkdf-time=PBKDF_TIME-
设置 PBKDF 密码处理所消耗的毫秒数。另请参阅 man page cryptsetup(8) 中的
--iter-time。只有在指定了--encrypted时这个选项才有意义,并且与--pbkdf-iterations相互排斥。 --pbkdf-iterations=PBKDF_ITERATIONS-
设定直接迭代的次数,并避免 PBKDF 基准出现。另请参阅 man page cryptsetup(8) 中的
--pbkdf-force-iterations。只有在指定了--encrypted时这个选项才有意义,并且与--pbkdf-time相互排斥。 --thinpool-
创建精简池逻辑卷。(使用
none挂载点) --metadatasize=size- 指定新精简池设备的元数据大小(单位 MiB)。
--chunksize=size- 为新的精简池设备指定块大小(单位 KiB)。
--thin-
创建精简逻辑卷。(需要使用
--poolname) --poolname=name-
指定要在其中创建精简逻辑卷的精简池名称。需要
--thin选项。 --profile=name-
指定与精简逻辑卷搭配使用的配置配置集的名称。如果使用,该名称也会包含在给定逻辑卷的元数据中。默认情况下,可用的配置集为
default和thin-performance,在/etc/lvm/profile/目录中定义。有关其他信息,请参见lvm(8)手册页。 --cachepvs=- 用逗号分开的物理卷列表,它应用作这个卷的缓存。
--cachemode=指定应该使用哪种模式缓存这个逻辑卷 -
writeback或writethrough。注意有关缓存的逻辑卷及其模式的详情,请参考您系统上的
lvmcache (7)手册页。--cachesize=-
附加到逻辑卷的缓存大小,以 MiB 为单位。此选项需要
--cachepvs=选项。
备注
在使用 Kickstart 安装 Red Hat Enterprise Linux 时,不要在逻辑卷和卷组名称中使用短划线(
-)字符。如果使用这个字符,安装会完成,但/dev/mapper/目录会列出这些卷和卷组的每个横线都会加倍。例如,名为volgrp-01的卷组包含一个逻辑卷logvol-01,它将被列为/dev/mapper/volgrp-01-logvol—01.这个限制只适用于新创建的逻辑卷和卷组名称。如果您使用
--noformat选项重复使用现有的名称,则不会更改它们的名称。-
如果您丢失了 LUKS 密码短语,那么就完全无法访问所有加密的分区及其数据。丢失的密码短语是无法找回的。但是,您可以使用
--escrowcert保存加密密码短语,并使用--backuppassphrase选项创建加密密码短语备份。
示例
首先创建分区,然后创建逻辑卷组,然后创建逻辑卷:
part pv.01 --size 3000 volgroup myvg pv.01 logvol / --vgname=myvg --size=2000 --name=rootvol
part pv.01 --size 3000 volgroup myvg pv.01 logvol / --vgname=myvg --size=2000 --name=rootvolCopy to Clipboard Copied! Toggle word wrap Toggle overflow 首先创建分区,然后创建逻辑卷组,再创建逻辑卷以占据卷组中剩余的 90% 空间:
part pv.01 --size 1 --grow volgroup myvg pv.01 logvol / --vgname=myvg --name=rootvol --percent=90
part pv.01 --size 1 --grow volgroup myvg pv.01 logvol / --vgname=myvg --name=rootvol --percent=90Copy to Clipboard Copied! Toggle word wrap Toggle overflow
C.5.12. snapshot 复制链接链接已复制到粘贴板!
snapshot Kickstart 命令是可选的。在安装过程中使用 LVM 精简卷快照来创建 LVM 精简卷快照。这可让您在安装前或安装后备份逻辑卷。
要创建多个快照,请多次添加 snaphost Kickstart 命令。
语法
snapshot vg_name/lv_name --name=snapshot_name --when=pre-install|post-install
snapshot vg_name/lv_name --name=snapshot_name --when=pre-install|post-install
选项
-
vg_name/lv_name- 设置卷组和逻辑卷的名称,以便从中创建快照。 -
--name=snapshot_name- 设置快照的名称。这个名称在卷组中必须是唯一的。 -
--when=pre-install|post-install- 如果在安装开始前或安装完成后创建快照,则设置。
C.5.13. mount 复制链接链接已复制到粘贴板!
mount Kickstart 命令是可选的。它为现有块设备分配挂载点,并选择性地将其重新格式化为给定格式。
语法
mount [OPTIONS] device mountpoint
mount [OPTIONS] device mountpoint
必须的选项
-
device- 要挂载的块设备。 -
mountpoint- 挂载device的位置。它必须是有效的挂载点,如/或/usr,如果设备不可卸载,则为none(如swap)。
可选选项:
-
--reformat=- 指定应重新格式化该设备的新格式(如ext4)。 -
--mkfsoptions=- 指定要传递给 命令的附加选项,该命令将创建--reformat=中指定的新文件系统。这里提供的选项列表没有被处理,因此必须使用可直接传递给mkfs程序的格式指定。根据具体文件系统,选项列表应该用逗号分开,或使用双引号分开。有关具体详情,请参阅mkfsman page(例如mkfs.ext4(8)或mkfs.xfs(8))。 -
--mountoptions=- 指定自由格式字符串,其中包含挂载文件系统时要使用的选项。字符串将复制到安装的系统上的/etc/fstab文件,并使用双引号括起来。有关挂载选项的完整列表,请参见mount(8)手册页,有关基础知识,请参见fstab(5)。
备注
-
与 Kickstart 中的大多数其他存储配置命令不同,
mount不需要您在 Kickstart 文件中描述整个存储配置。您只需要确定系统中存在描述的块设备。但是,如果要使用挂载的所有设备创建存储堆栈,则必须使用其他命令,比如part要这样做。 -
在同一个 Kickstart 文件中,您不能将
mount与其他存储相关的命令,如part、logvol或autopart一起使用。
C.5.14. zipl 复制链接链接已复制到粘贴板!
zipl Kickstart 命令是可选的。它为 64 位 IBM Z 指定 ZIPL 配置。只使用此命令一次。
选项
-
--secure-boot- 如果安装系统支持,则启用安全引导。
当在 IBM z14 之后的系统中安装时,无法从 IBM z14 或更早的型号引导安装的系统。
-
--force-secure-boot- 无条件启用安全引导。
IBM z14 及更早的型号不支持安装。
-
--no-secure-boot- 禁用安全引导.
IBM z14 及更早的型号不支持安全引导。如果要在 IBM z14 及更早的型号中引导安装的系统,请使用 --no-secure-boot。
C.5.15. fcoe 复制链接链接已复制到粘贴板!
fcoe Kickstart 命令是可选的。它指定除了由 EDD (Enhanced Disk Drive Services)发现的设备外,还要自动激活哪些 FCoE 设备。
语法
fcoe --nic=name [OPTIONS]
fcoe --nic=name [OPTIONS]
选项
-
--nic=(必需)- 要激活的设备的名称。 -
--dcb=- 建立数据中心桥接 (DCB) 设置。 -
--autovlan- 自动发现 VLAN。默认启用这个选项。
C.5.16. iscsi 复制链接链接已复制到粘贴板!
iscsi Kickstart 命令是可选的。它指定了在安装过程中要添加的附加 iSCSI 存储。
语法
iscsi --ipaddr=address [OPTIONS]
iscsi --ipaddr=address [OPTIONS]
必填选项
-
--ipaddr=(必需)- 要连接的目标的 IP 地址。
可选选项
-
--port=(必需)- 端口号。如果没有,则默认自动使用--port=3260。 -
--target=- 目标 IQN(iSCSI 限定名称)。 -
--iface=- 将连接绑定到特定网络接口,而不使用由网络层决定的默认接口。一旦使用,必须在整个 Kickstart 文件的iscsi命令的所有实例中指定它。 -
--user=- 与目标进行身份验证所需的用户名 -
--password=- 与为目标指定的用户名对应的密码 -
--reverse-user=- 从使用反向 CHAP 身份验证的目标向启动器进行身份验证所需的用户名 -
--reverse-password=- 与为启动器指定的用户名对应的密码
备注
-
如果使用
iscsi命令,还必须使用iscsiname命令为 iSCSI 节点分配名称。在 Kickstart 文件中,iscsiname命令需要在iscsi命令的前面。 -
尽可能在系统 BIOS 或固件(Intel 系统的iBFT)中配置 iSCSI 存储,而不是使用
iscsi命令。Anaconda 自动检测并使用在 BIOS 或固件中配置的磁盘,且在 Kickstart 文件中不需要特殊配置。 -
如果您必须使用
iscsi命令,请确保在安装开始时激活联网,并且在使用clearpart或ignoredisk等命令引用 iSCSI 磁盘前,iscsi命令会出现在 Kickstart 文件中。
C.5.17. iscsiname 复制链接链接已复制到粘贴板!
iscsiname Kickstart 命令是可选的。它为 iscsi 命令指定的 iSCSI 节点分配名称。仅使用此命令一次。
语法
iscsiname iqname
iscsiname iqname
选项
-
iqname- 分配给 iSCSI 节点的名称。
备注
-
如果在 Kickstart 文件中使用
iscsi命令,则必须在 Kickstart 文件 前面 指定iscsiname。
C.5.18. nvdimm 复制链接链接已复制到粘贴板!
nvdimm Kickstart 命令是可选的。它对非线性内存模块(NVDIMM)设备执行操作。默认情况下,NVDIMM 设备会被安装程序忽略。您必须使用 nvdimm 命令在这些设备中启用安装。
语法
nvdimm action [OPTIONS]
nvdimm action [OPTIONS]
操作
reconfigure- 将特定 NVDIMM 设备重新配置为给定模式。另外,指定的设备被隐式标记为要使用的,因此后续的同一设备nvdimm use命令就冗余了。这个操作使用以下格式:nvdimm reconfigure [--namespace=NAMESPACE] [--mode=MODE] [--sectorsize=SECTORSIZE]
nvdimm reconfigure [--namespace=NAMESPACE] [--mode=MODE] [--sectorsize=SECTORSIZE]Copy to Clipboard Copied! Toggle word wrap Toggle overflow --namespace=- 按命名空间的设备规格。例如:nvdimm reconfigure --namespace=namespace0.0 --mode=sector --sectorsize=512
nvdimm reconfigure --namespace=namespace0.0 --mode=sector --sectorsize=512Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
--mode=- 模式规格。目前,只有值sector可用。 --sectorsize=- 扇区模式的扇区大小。例如:nvdimm reconfigure --namespace=namespace0.0 --mode=sector --sectorsize=512
nvdimm reconfigure --namespace=namespace0.0 --mode=sector --sectorsize=512Copy to Clipboard Copied! Toggle word wrap Toggle overflow 支持的扇区大小为 512 和 4096 字节。
use- 将 NVDIMM 设备指定为安装目标。该设备必须已通过nvdimm reconfigure命令配置为扇区模式。这个操作使用以下格式:nvdimm use [--namespace=NAMESPACE|--blockdevs=DEVICES]
nvdimm use [--namespace=NAMESPACE|--blockdevs=DEVICES]Copy to Clipboard Copied! Toggle word wrap Toggle overflow --namespace=- 按命名空间指定设备。例如:nvdimm use --namespace=namespace0.0
nvdimm use --namespace=namespace0.0Copy to Clipboard Copied! Toggle word wrap Toggle overflow --blockdevs=- 指定与要使用的 NVDIMM 设备对应的块设备列表。支持星号*通配符。例如:nvdimm use --blockdevs=pmem0s,pmem1s nvdimm use --blockdevs=pmem*
nvdimm use --blockdevs=pmem0s,pmem1s nvdimm use --blockdevs=pmem*Copy to Clipboard Copied! Toggle word wrap Toggle overflow
C.5.19. zfcp 复制链接链接已复制到粘贴板!
zfcp Kickstart 命令是可选的。它定义了光纤通道设备。
这个选项只适用于 64 位 IBM Z。必须指定以下所有选项。
语法
zfcp --devnum=devnum [--wwpn=wwpn --fcplun=lun]
zfcp --devnum=devnum [--wwpn=wwpn --fcplun=lun]
选项
-
--devnum=- 设备号(zFCP 适配器设备总线 ID)。 -
--WWPN=- 设备的全球端口名称 (WWPN)。形式为 16 位数字,前面带有0x。 -
--fcplun=- 该设备的逻辑单元号 (LUN)。形式为 16 位数字,前面带有0x。
如果提供了自动 LUN 扫描且安装了 8 或更高版本,则可以指定 FCP 设备总线 ID。否则,所有这三个参数都是必需的。如果没有通过 zfcp.allow_lun_scan 模块参数禁用,自动 LUN 扫描可用于在 NPIV 模式下对 FCP 设备的操作。(默认启用)它对使用指定的总线 ID 附加到 FCP 设备上的存储区域网络中发现的所有 SCSI 设备提供访问权限。
示例
zfcp --devnum=0.0.4000 --wwpn=0x5005076300C213e9 --fcplun=0x5022000000000000 zfcp --devnum=0.0.4000
zfcp --devnum=0.0.4000 --wwpn=0x5005076300C213e9 --fcplun=0x5022000000000000
zfcp --devnum=0.0.4000
C.6. RHEL 安装程序提供的附加组件的 Kickstart 命令 复制链接链接已复制到粘贴板!
这部分中的 Kickstart 命令与 Red Hat Enterprise Linux 安装程序默认提供的附加组件相关:Kdump 和 OpenSCAP。
C.6.1. %addon com_redhat_kdump 复制链接链接已复制到粘贴板!
%addon com_redhat_kdump Kickstart 命令是可选的。这个命令配置 kdump 内核崩溃转储机制。
语法
%addon com_redhat_kdump [OPTIONS] %end
%addon com_redhat_kdump [OPTIONS]
%end
这个命令的语法比较特殊,因为它是一个附加组件,不是内置的 Kickstart 命令。
备注
Kdump 是内核崩溃转储机制,可让您保存系统内存内容,以便稍后进行分析。它依赖于 kexec,可用于在不重新启动系统的情况下从另一个内核上下文引导 Linux 内核,并保留第一个内核内存的内容,否则会丢失第一个内核的内存。
如果系统崩溃,kexec 引导进入第二个内核(捕获内核)。这个捕获内核位于系统内存的保留部分。然后 Kdump 会捕获崩溃内核的内存(崩溃转储)并将其保存到指定位置。无法使用这个 Kickstart 命令配置该位置 ; 必须在安装后通过编辑 /etc/kdump.conf 配置文件来配置该位置。
有关 Kdump 的详情,请参考 安装 kdump。
选项
-
--enable- 在安装的系统中启用 kdump。 -
--disable- 在安装的系统中禁用 kdump。 --reserve-mb=- 要为 kdump 保留的内存量,单位为 MiB。例如:%addon com_redhat_kdump --enable --reserve-mb=128 %end
%addon com_redhat_kdump --enable --reserve-mb=128 %endCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您还可以指定
auto而不是数字值。在这种情况下,安装程序将根据 管理、监控和更新内核 文档中的 kdump 内存要求部分中描述的标准自动决定内存量。如果启用 kdump 且没有指定
--reserve-mb=选项,则会使用auto值。-
--enablefadump- 在允许它的系统中(特别是 IBM Power Systems 服务器)启用固件辅助转储。
C.6.2. %addon org_fedora_oscap 复制链接链接已复制到粘贴板!
%addon org_fedora_oscap Kickstart 命令是可选的。
OpenSCAP 安装程序附加组件是用来在安装的系统中应用 SCAP(安全内容自动化协议)内容 - 安全策略。从 Red Hat Enterprise Linux 7.2 开始默认启用此附加组件。启用后,会自动安装提供这个功能的软件包。但默认情况下不会强制任何策略。这代表,除非特别指定,在安装过程中或安装后不会执行任何检查。
不需要在所有系统中应用安全策略。只有在您的机构规则或政府法规强制某种策略时,才使用这个命令。
与大多数命令不同,此附加组件不接受常规选项,而是使用 %addon 定义正文中的键值对。这些键值对无法验证空白。值可以选择使用单引号 (') 或者双引号(")括起来。
语法
%addon org_fedora_oscap key = value %end
%addon org_fedora_oscap
key = value
%end
Keys
以下键可以被附加组件识别:
content-type安全内容的类型。可能的值有
datastream、archive、rpm和scap-security-guide。如果
content-type是scap-security-guide,则附加组件将使用 scap-security-guide 软件包提供的内容,该内容存在于引导介质中。这意味着,除了profile外所有其他键都无效。content-url- 安全内容的位置。必须通过 HTTP、HTTPS 或者 FTP 访问该内容。必须有可用的网络连接方可访问远程位置中的内容定义。
datastream-id-
content-url值中引用的数据流的 ID。仅在content-type是datastream时使用。 xccdf-id- 要使用的基准 ID。
content-path- 应使用到 datastream 或 XCCDF 文件的路径,在归档中使用相对路径。
配置集-
要应用的配置集 ID。使用
default应用 default 配置文件。 fingerprint-
由
content-url引用的内容的 MD5、SHA1 或 SHA2 的校验和。 tailoring-path- 应使用的定制文件的路径,在归档中作为相对路径指定。
示例
以下是一个
%addon org_fedora_oscap部分的示例,它使用安装介质中的 scap-security-guide 中的内容:例 C.1. 使用 SCAP 安全指南的 OpenSCAP 附加组件定义示例
%addon org_fedora_oscap content-type = scap-security-guide profile = xccdf_org.ssgproject.content_profile_pci-dss %end
%addon org_fedora_oscap content-type = scap-security-guide profile = xccdf_org.ssgproject.content_profile_pci-dss %endCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下是从 web 服务器加载自定义配置集的复杂示例:
例 C.2. 使用 Datastream 的 OpenSCAP 附加组件定义示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
C.7. Anaconda 中使用的命令 复制链接链接已复制到粘贴板!
pwpolicy 命令是 Anaconda UI 特定的命令,只能在 kickstart 文件的 %anaconda 部分中使用。
C.7.1. pwpolicy 复制链接链接已复制到粘贴板!
pwpolicy Kickstart 命令是可选的。在安装过程中使用这个命令强制使用自定义密码策略。策略要求您为 root、用户或 luks 用户帐户创建密码。密码长度和强度等因素决定了密码的有效性。
语法
pwpolicy name [--minlen=length] [--minquality=quality] [--strict|--notstrict] [--emptyok|--notempty] [--changesok|--nochanges]
pwpolicy name [--minlen=length] [--minquality=quality] [--strict|--notstrict] [--emptyok|--notempty] [--changesok|--nochanges]
必填选项
-
name - 使用
root、user或luks替换,以分别强制执行与root密码、用户密码或 LUKS 密码短语相关的策略。
可选选项
-
--minlen=- 以字符为单位设置允许密码长度的最小值。默认值为6。 -
--minquality=- 设置libpwquality库定义的最小允许密码质量。默认值为1。 -
--strict- 启用严格的密码强制.不接受没有满足--minquality=和--minlen=中指定的要求的密码。默认禁用这个选项。 -
--notstrict- 在 GUI 中点 Done 两次后,可以接受不符合--minquality=和-minlen=选项中指定的最低质量要求的密码。文本模式界面使用类似的机制。 -
--emptyok- 允许使用空密码。对于用户密码,默认启用。 -
--notempty- 不允许使用空密码。对于 root 密码和 LUKS 密码,默认启用。 -
--changesok- 允许在用户界面中更改密码,即使 Kickstart 文件已指定了密码。默认禁用此选项。 -
--nochanges- 不允许更改在 Kickstart 文件中已设置的密码。默认启用此选项。
备注
-
pwpolicy命令是 Anaconda UI 特定的命令,只能在 kickstart 文件的%anaconda部分中使用。 -
libpwquality程序库用于检查最低密码要求(长度和服务)。您可以使用 libpwquality 软件包提供的pwscore和pwmake命令检查密码质量得分,或使用给定分数创建随机密码。有关这些命令的详情,请查看pwscore(1)和pwmake(1)man page。
C.8. kickstart 命令进行系统恢复 复制链接链接已复制到粘贴板!
这部分中的 Kickstart 命令修复安装了的系统。
C.8.1. rescue 复制链接链接已复制到粘贴板!
rescue Kickstart 命令是可选的。它提供有 root 特权的 shell 环境,以及一组系统管理工具修复安装以及排除问题,例如:
- 以只读方式挂载文件系统
- 阻塞列表或添加驱动程序磁盘中提供的驱动程序
- 安装或升级系统软件包
- 管理分区
Kickstart 的救援模式与系统的救援模式和紧急模式不同,后者是 systemd 和服务管理器的一部分。
rescue 命令不自行修改系统。它只能通过在 /mnt/sysimage 下挂载系统的读写模式来设置救援环境。您可以选择不挂载系统,或者将其挂载为只读模式。仅使用此命令一次。
语法
rescue [--nomount|--romount]
rescue [--nomount|--romount]
选项
-
--nomount或--romount- 控制如何在救援环境中挂载安装的系统。默认情况下,安装程序会找到您的系统并以读写模式挂载它,同时告知它在什么位置进行挂载。您可以选择不挂载任何内容(--nomount选项)或以只读模式挂载(--romount选项)。只能使用这两个选项中的一个。
备注
要运行救援模式,请制作 Kickstart 文件的副本,并在该文件中包含 rescue 命令。
使用 rescue 命令可使安装程序执行以下步骤:
-
运行
%pre脚本。 为救援模式设置环境。
下面的 kickstart 命令生效:
- updates
- sshpw
- logging
- lang
- network
设置高级存储环境。
下面的 kickstart 命令生效:
- fcoe
- iscsi
- iscsiname
- nvdimm
- zfcp
挂载系统
rescue [--nomount|--romount]
rescue [--nomount|--romount]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 %post 脚本
只有在安装的系统被挂载为读写模式时才运行这一步。
- 启动 shell
- 重启系统
部分 II. 安全设计 复制链接链接已复制到粘贴板!
第 14 章 在安装过程中和安装后保护 RHEL 复制链接链接已复制到粘贴板!
安全性甚至始于您开始安装红帽企业 Linux 之前。从一开始就安全地配置系统可以使以后更容易实施其他安全设置。
14.1. 磁盘分区 复制链接链接已复制到粘贴板!
对于裸机上安装以及支持调整虚拟磁盘硬件和包含已安装了操作系统的文件系统的虚拟化或云环境,推荐的磁盘分区实践有所不同。
为了确保在 裸机安装 上隔离和保护数据,请为 /boot、/、/home、/tmp 和 /var/tmp/ 目录创建单独的分区:
/boot-
这个分区是系统在启动过程中读取的第一个分区。引导装载程序和用于将系统引导到 RHEL 8 的内核镜像保存在这个分区中。此分区不应加密。如果此分区包含在
/中,并且该分区已加密或者不可用,那么您的系统将无法引导。 /home-
当用户数据(
/home)存储在/而不是独立分区中时,分区可能会填满,从而导致操作系统不稳定。另外,在将您的系统升级到下一个 RHEL 8 版本时,在将数据保存在/home分区中时会更容易,因为它不会在安装过程中被覆盖。如果 root 分区(/)损坏,则您的数据将永久丢失。通过使用单独的分区,对数据丢失有稍微多一点的保护。您还可以将此分区作为频繁备份的目标。 /tmp和/var/tmp/。-
/tmp和/var/tmp/目录都是用来存储不需要长期存储的数据。但是,如果大量数据填充了其中一个目录,则它可能会消耗掉您的所有存储空间。如果发生这种情况,且这些目录存储在/中,则您的系统可能会变得不稳定并崩溃。因此,将这些目录移到它们自己的分区中是一个不错的想法。
对于 虚拟机或云实例,单独的 /boot、/home、/tmp 和 /var/tmp 分区是可选的,因为如果开始填满了,您可以增加虚拟磁盘大小和 / 分区。设置监控,以定期检查 / 分区使用情况,以便在相应增加虚拟磁盘大小之前,其不会填满。
在安装过程中,您可以选择加密分区。您必须提供密码短语。此密语充当解锁批量加密密钥的密钥,该密钥用于保护分区的数据。
14.2. 在安装过程中限制网络连接 复制链接链接已复制到粘贴板!
安装 RHEL 8 时,安装介质代表系统在特定时间的快照。因此,它可能没有最新的安全修复程序,并且可能容易受到某些问题的攻击,这些问题是在安装介质提供的系统发布后才修复的。
安装有潜在漏洞的操作系统时,始终将暴露限制在最近的必要网络区内。最安全的选择是"无网络"区,这意味着在安装过程中使计算机断开连接。在某些情况下,LAN 或内部网连接就足够了,而互联网连接的风险最大。要遵循最佳安全实践,请在从网络安装 RHEL 8 时选择与您的存储库最近的区域。
14.3. 安装所需的最少软件包 复制链接链接已复制到粘贴板!
最好只安装您要使用的软件包,因为计算机上的每一款软件都可能包含漏洞。如果您要从 DVD 介质安装,请仔细选择要在安装过程中安装的软件包。如果您发现需要其他软件包,您可在以后将其添加到系统中。
14.4. 安装后流程 复制链接链接已复制到粘贴板!
以下步骤是安全相关的流程,在安装 RHEL 8 后应该立即执行。
更新您的系统。以 root 用户身份输入以下命令:
yum update
# yum updateCopy to Clipboard Copied! Toggle word wrap Toggle overflow 虽然在安装 Red Hat Enterprise Linux 时会自动启用防火墙服务
firewalld,但可以在 Kickstart 配置中明确禁用它。在这种情况下,请重新启用防火墙。要启动
firewalld,请以 root 用户身份输入以下命令:systemctl start firewalld systemctl enable firewalld
# systemctl start firewalld # systemctl enable firewalldCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要提高安全性,请禁用您不需要的服务。例如,如果您的计算机上没有安装打印机,请使用以下命令禁用
cups服务:systemctl disable cups
# systemctl disable cupsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要查看活动状态的服务,请输入以下命令:
systemctl list-units | grep service
$ systemctl list-units | grep serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
14.5. 使用 Web 控制台禁用 SMT 以防止 CPU 安全问题 复制链接链接已复制到粘贴板!
在出现滥用 CPU SMT 的攻击时禁用 Simultaneous Multi Threading(SMT)。禁用 SMT 可缓解安全漏洞(如 L1TF 或 MDS)对系统的影响。
禁用 SMT 可能会降低系统性能。
先决条件
- 已安装 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 登录到 web 控制台。
- 在 Overview 选项卡中,找到 系统信息 字段并点查看硬件详细信息。
在 CPU Security 行上,点 Mitigations。
如果这个链接不存在,这意味着您的系统不支持 SMT,因此不会受到这个安全漏洞的影响。
- 在 CPU Security Toggles 表中,打开 Disable simultaneous multithreading (nosmt) 选项。
- 点按钮。
系统重启后,CPU 不再使用 SMT。
第 15 章 使用系统范围的加密策略 复制链接链接已复制到粘贴板!
系统范围的加密策略是一个系统组件,它配置核心加密子系统,包括 TLS、IPsec、SSH、DNSSec 和 Kerberos 协议。它提供了一小组策略,管理员可以选择这些策略。
15.1. 系统范围的加密策略 复制链接链接已复制到粘贴板!
设置系统范围的策略时,RHEL 中的应用程序会紧随其后,并拒绝使用不符合该策略的算法和协议,除非您明确请求该应用程序这样做。也就是说,该策略适用于应用使用系统提供的配置运行时的默认行为,但在需要时您可以覆盖它。
RHEL 8 包含以下预定义的策略:
DEFAULT- 默认的系统范围加密策略级别为当前威胁模型提供了安全设置。它允许 TLS 1.2 和 1.3 协议,以及 IKEv2 和 SSH2 协议。如果 RSA 密钥和 Diffie-Hellman 参数至少是 2048 位,则可以接受它们。
LEGACY-
确保与 Red Hat Enterprise Linux 5 及更早版本的最大兼容性;由于攻击面增加而不太安全。除了
DEFAULT级别算法和协议外,它还包括对 TLS 1.0 和 1.1 协议的支持。允许算法 DSA、3DES 和 RC4,如果 RSA 密钥和 Diffie-Hellman 参数至少是 1023 位,则可以接受它们。 FUTURE更严格的前瞻性安全级别,旨在测试未来可能的策略。此策略不允许在签名算法中使用 SHA-1。它允许 TLS 1.2 和 1.3 协议,以及 IKEv2 和 SSH2 协议。如果 RSA 密钥和 Diffie-Hellman 参数至少是 3072 位,则可以接受它们。如果您的系统在公共互联网上进行通信,您可能会遇到互操作性问题。
重要因为客户门户网站 API 中的证书使用的加密密钥不满足
FUTURE系统范围的加密策略的要求,所以redhat-support-tool程序目前无法使用这个策略级别。要临时解决这个问题,在连接到客户门户网站 API 时使用
DEFAULT加密策略。FIPS符合 FIPS 140 要求。将 RHEL 系统切换到 FIPS 模式的
fips-mode-setup工具在内部使用此策略。切换到FIPS策略不能保证符合 FIPS 140 标准。在将系统设置为 FIPS 模式后,还必须重新生成所有加密密钥。这在很多情况下都不可能。RHEL 还提供
FIPS:OSPP系统范围的子策略,其中包含对通用标准(CC)认证所需的加密算法的进一步限制。设置了此子策略后,系统的互操作性会降低。例如,您无法使用比 3072 位少的 RSA 和 DH 密钥、其它的 SSH 算法和几个 TLS 组。设置FIPS:OSPP也会阻止连接到 Red Hat Content Delivery Network (CDN)结构。另外,您无法将活动目录(AD)集成到使用FIPS:OSPP的 IdM 部署中 ,使用FIPS:OSPP的 RHEL 主机和 AD 域之间的通信可能无法工作,或者某些 AD 帐户可能无法进行身份验证。注意设置了
FIPS:OSPP加密子策略后,您的系统不符合 CC 。使您的 RHEL 系统符合 CC 标准的唯一正确方法是遵循cc-config软件包中提供的指导。有关已认证的 RHEL 版本的列表、验证报告以及 CC 指南的链接,请参阅 Product compliance 红帽客户门户网站页面上的 Common Criteria 部分。
红帽不断调整所有策略级别,以便所有库都提供安全默认值,但使用 LEGACY 策略时除外。虽然 LEGACY 配置文件不提供安全默认值,但它不包括任何易被利用的算法。因此,在 Red Hat Enterprise Linux 生命周期内,任何所提供的策略中已启用的算法或可接受的密钥大小可能会发生变化。
此变更反映了新的安全标准和新的安全研究。如果您必须确保在 Red Hat Enterprise Linux 的整个生命周期内与特定系统的互操作性,对于与该系统交互的组件,您应该选择不使用系统范围的加密策略,或使用自定义加密策略重新启用特定的算法。
只有在应用程序支持它们时,策略级别中才允许所描述的具体算法和密码:
LEGACY | DEFAULT | FIPS | FUTURE | |
|---|---|---|---|---|
| IKEv1 | 否 | 否 | 否 | 否 |
| 3DES | 是 | 否 | 否 | 否 |
| RC4 | 是 | 否 | 否 | 否 |
| DH | 最少 1024 位 | 最少 2048 位 | 最少 2048 位[a] | 最少 3072 位 |
| RSA | 最少 1024 位 | 最少 2048 位 | 最少 2048 位 | 最少 3072 位 |
| DSA | 是 | 否 | 否 | 否 |
| TLS v1.0 | 是 | 否 | 否 | 否 |
| TLS v1.1 | 是 | 否 | 否 | 否 |
| 数字签名中的 SHA-1 | 是 | 是 | 否 | 否 |
| CBC 模式密码 | 是 | 是 | 是 | 否[b] |
| 密钥小于 256 位的对称密码 | 是 | 是 | 是 | 否 |
| 证书中的 SHA-1 和 SHA-224 签名 | 是 | 是 | 是 | 否 |
[a]
您只能使用 RFC 7919 和 RFC 3526 中定义的 Diffie-Hellman 组。
| ||||
15.2. 更改系统范围的加密策略 复制链接链接已复制到粘贴板!
您可以使用 update-crypto-policies 工具更改系统上的系统范围加密策略,并重启系统。
先决条件
- 您在系统上具有 root 权限。
流程
可选:显示当前加密策略:
update-crypto-policies --show DEFAULT
$ update-crypto-policies --show DEFAULTCopy to Clipboard Copied! Toggle word wrap Toggle overflow 设置新的加密策略:
update-crypto-policies --set <POLICY> <POLICY>
# update-crypto-policies --set <POLICY> <POLICY>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<POLICY>替换为您要设置的策略或子策略,如FUTURE、LEGACY或FIPS:OSPP。重启系统:
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示当前加密策略:
update-crypto-policies --show <POLICY>
$ update-crypto-policies --show <POLICY>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
15.3. 将系统范围的加密策略切换到与早期版本兼容的模式 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 8 中的默认系统范围加密策略不允许使用较旧的不安全协议进行通信。对于需要与 Red Hat Enterprise Linux 6 兼容,以及需要与更早的版本兼容的情况,可以使用不太安全的 LEGACY 策略级别。
切换到 LEGACY 策略级别会导致系统和应用程序的安全性较低。
流程
要将系统范围的加密策略切换到
LEGACY级别,请以root用户身份输入以下命令:update-crypto-policies --set LEGACY Setting system policy to LEGACY
# update-crypto-policies --set LEGACY Setting system policy to LEGACYCopy to Clipboard Copied! Toggle word wrap Toggle overflow
15.4. 在 web 控制台中设置系统范围的加密策略 复制链接链接已复制到粘贴板!
您可以在 RHEL web 控制台界面中直接设置系统范围的加密策略和子策略。除了四个预定义的系统范围的加密策略外,您现在还可以通过图形界面应用以下策略和子策略的组合:
DEFAULT:SHA1-
启用了
SHA-1算法的DEFAULT策略。 LEGACY:AD-SUPPORT-
具有不太安全设置的
LEGACY策略提高了活动目录服务的互操作性。 FIPS:OSPP-
信息安全评估标准的通用标准所需的具有进一步限制的
FIPS策略。
因为 FIPS:OSPP 系统范围的子策略包含对通用标准(CC)认证所需的加密算法的进一步限制,因此设置后系统的互操作性较差。例如,您无法使用少于 3072 位的 RSA 和 DH 密钥、其它 SSH 算法和几个 TLS 组。设置 FIPS:OSPP 也会阻止连接到 Red Hat Content Delivery Network (CDN)结构。另外,您无法将活动目录(AD)集成到使用 FIPS:OSPP 的 IdM 部署中 ,使用 FIPS:OSPP 的 RHEL 主机和 AD 域之间的通信可能无法工作,或者某些 AD 帐户可能无法进行身份验证。
请注意,在设置了 FIPS:OSPP 加密子策略后,您的 系统不符合 CC。使您的 RHEL 系统符合 CC 标准的唯一正确方法是遵循 cc-config 软件包中提供的指导。有关认证的 RHEL 版本的列表、验证报告以及到 国家信息保障合作伙伴(NIAP) 网站上托管的 CC 的链接,请参阅 产品合规 红帽客户门户网页上的 通用标准 部分。
先决条件
- 已安装 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
-
您有
root权限或使用sudo输入管理命令的权限。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 登录到 web 控制台。
在 Overview 页面的 Configuration 卡中,点 Crypto 策略旁的当前策略值。
在 Change crypto policy 对话框窗口中,点您要在系统上开始使用的策略。
- 点按钮。
验证
重启后,重新登录到 web 控制台,并检查 Crypto policy 值是否与您选择的策略值对应。
或者,您可以输入
update-crypto-policies --show命令来在终端中显示当前系统范围的加密策略。
15.5. 将应用程序从以下系统范围的加密策略中排除 复制链接链接已复制到粘贴板!
您可以通过在应用程序中直接配置受支持的密码套件和协议来自定义应用程序所使用的加密设置。
您还可以从 /etc/crypto-policies/back-ends 目录中删除与应用程序相关的符号链接,并使用您自定义的加密设置来替换它。此配置可防止对使用排除后端的应用程序使用系统范围的加密策略。此外,红帽不支持此修改。
15.5.1. 选择退出系统范围加密策略的示例 复制链接链接已复制到粘贴板!
wget
要自定义 wget 网络下载器所使用的加密设置,请使用 --secure-protocol 和 --ciphers 选项。例如:
wget --secure-protocol=TLSv1_1 --ciphers="SECURE128" https://example.com
$ wget --secure-protocol=TLSv1_1 --ciphers="SECURE128" https://example.com
如需更多信息,请参阅 wget(1) 手册页中的 HTTPS(SSL/TLS)选项部分。
curl
要指定 curl 工具使用的密码,请使用 --ciphers 选项,并提供以冒号分隔的密码列表作为值。例如:
curl https://example.com --ciphers '@SECLEVEL=0:DES-CBC3-SHA:RSA-DES-CBC3-SHA'
$ curl https://example.com --ciphers '@SECLEVEL=0:DES-CBC3-SHA:RSA-DES-CBC3-SHA'
如需更多信息,请参阅 curl(1) 手册页。
Firefox
尽管您无法在 Firefox Web 浏览器中选择不使用系统范围的加密策略,但您可以在 Firefox 的配置编辑器中进一步限制受支持的密码和 TLS 版本。在地址栏中输入 about:config ,并根据需要修改 security.tls.version.min 选项的值。将 security.tls.version.min 设置为 1,允许将 TLS 1.0 作为最低要求,security.tls.version.min 2 启用 TLS 1.1,如此等等。
OpenSSH
要为您的 OpenSSH 服务器选择不使用系统范围的加密策略,请在 /etc/sysconfig/sshd 文件中取消具有 CRYPTO_POLICY= 变量的行的注释。更改后,您在 /etc/ssh/sshd_config 文件中的 Ciphers 、MAC 、KexAlgoritms 和 GSSAPIKexAlgorithms 部分指定的值不会被覆盖。
详情请查看 sshd_config(5) 手册页。
要为您的 OpenSSH 客户端选择不使用系统范围的加密策略,请执行以下任务之一:
-
对于给定的用户,使用
~/.ssh/config文件中特定于用户的配置覆盖全局ssh_config。 -
对于整个系统,在
/etc/ssh/ssh_config.d/目录中的置入配置文件中指定加密策略,使用小于 5 的两位数字前缀,以便其在字典顺序上位于05-redhat.conf文件之前,并带有.conf后缀,例如04-crypto-policy-override.conf。
详情请查看 ssh_config(5) 手册页。
Libreswan
有关详细信息,请参阅 安全网络 文档中的 配置不使用系统范围加密策略的 IPsec 连接 。
15.6. 使用子属性自定义系统范围的加密策略 复制链接链接已复制到粘贴板!
使用这个步骤调整启用的加密算法或协议集合。
您可以在现有系统范围的加密策略之上应用自定义子policies,或者从头开始定义此类策略。
范围的策略概念允许为不同的后端启用不同的算法集合。您可以将每个配置指令限制为特定的协议、库或服务。
另外,指令可以使用星号来指定使用通配符的多个值。
/etc/crypto-policies/state/CURRENT.pol 文件列出了通配符扩展后当前应用了系统范围加密策略中的所有设置。要使您的加密策略更严格,请考虑使用 /usr/share/crypto-policies/policies/FUTURE.pol 文件中列出的值。
您可以在 /usr/share/crypto-policies/policies/modules/ 目录中找到示例子策略。这个目录中的子策略文件还包含注释掉的行中的描述。
RHEL 8.2 提供了对系统范围加密策略的自定义。您可以使用特定策略的概念,以及使用 RHEL 8.5 及更新版本中的通配符选项。
流程
签出到
/etc/crypto-policies/policies/modules/目录:cd /etc/crypto-policies/policies/modules/
# cd /etc/crypto-policies/policies/modules/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为您的调整创建子政策,例如:
touch MYCRYPTO-1.pmod touch SCOPES-AND-WILDCARDS.pmod
# touch MYCRYPTO-1.pmod # touch SCOPES-AND-WILDCARDS.pmodCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要在策略模块的文件名中使用大写字母。
在您选择的文本编辑器中打开策略模块并插入修改系统范围加密策略的选项,例如:
vi MYCRYPTO-1.pmod
# vi MYCRYPTO-1.pmodCopy to Clipboard Copied! Toggle word wrap Toggle overflow min_rsa_size = 3072 hash = SHA2-384 SHA2-512 SHA3-384 SHA3-512
min_rsa_size = 3072 hash = SHA2-384 SHA2-512 SHA3-384 SHA3-512Copy to Clipboard Copied! Toggle word wrap Toggle overflow vi SCOPES-AND-WILDCARDS.pmod
# vi SCOPES-AND-WILDCARDS.pmodCopy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 将更改保存到模块文件中。
将您的策略调整应用到
DEFAULT系统范围加密策略级别:update-crypto-policies --set DEFAULT:MYCRYPTO-1:SCOPES-AND-WILDCARDS
# update-crypto-policies --set DEFAULT:MYCRYPTO-1:SCOPES-AND-WILDCARDSCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要使您的加密设置对已经运行的服务和应用程序有效,请重启系统:
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查
/etc/crypto-policies/state/CURRENT.pol文件是否包含您的更改,例如:cat /etc/crypto-policies/state/CURRENT.pol | grep rsa_size min_rsa_size = 3072
$ cat /etc/crypto-policies/state/CURRENT.pol | grep rsa_size min_rsa_size = 3072Copy to Clipboard Copied! Toggle word wrap Toggle overflow
15.7. 通过自定义系统范围的加密策略来禁用 SHA-1 复制链接链接已复制到粘贴板!
因为 SHA-1 哈希函数本身存在弱设计,并且升级加密分析使其容易受到攻击,所以 RHEL 8 默认不使用 SHA-1。然而,一些第三方应用程序(如公共签名)仍然使用 SHA-1。要在您系统的在签名算法中禁用 SHA-1,您可以使用 NO-SHA1 策略模块。
NO-SHA1 策略模块只在签名中禁用 SHA-1 哈希函数,而在其它地方不禁用。特别是,NO-SHA1 模块仍然允许使用带有基于哈希消息验证代码(HMAC)的 SHA-1 。这是因为 HMAC 安全属性不依赖于相应哈希功能的冲突性,因此最近对 SHA-1 的攻击会对 HMAC 使用 SHA-1 的影响显著降低。
如果您的场景需要禁用特定的密钥交换(KEX)算法组合,例如 diffie-hellman-group-exchange-sha1,但您仍然想在其他组合中使用相关的 KEX 和 算法,请参阅红帽知识库解决方案步骤来禁用 SSH 中的 diffie-hellman-group1-sha1 算法。
RHEL 8.3 提供了禁用 SHA-1 的模块。RHEL 8.2 提供了对系统范围加密策略的自定义。
流程
将您的策略调整应用到
DEFAULT系统范围加密策略级别:update-crypto-policies --set DEFAULT:NO-SHA1
# update-crypto-policies --set DEFAULT:NO-SHA1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要使您的加密设置对已经运行的服务和应用程序有效,请重启系统:
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
15.8. 创建并设置自定义系统范围的加密策略 复制链接链接已复制到粘贴板!
对于特定场景,您可以通过创建和使用完整的策略文件来自定义系统范围的加密策略。
RHEL 8.2 提供了对系统范围加密策略的自定义。
流程
为自定义创建一个策略文件:
cd /etc/crypto-policies/policies/ touch MYPOLICY.pol
# cd /etc/crypto-policies/policies/ # touch MYPOLICY.polCopy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,从复制四个预定义策略级别中的一个开始:
cp /usr/share/crypto-policies/policies/DEFAULT.pol /etc/crypto-policies/policies/MYPOLICY.pol
# cp /usr/share/crypto-policies/policies/DEFAULT.pol /etc/crypto-policies/policies/MYPOLICY.polCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在您选择的文本编辑器中编辑带有自定义加密策略的文件以满足您的要求,例如:
vi /etc/crypto-policies/policies/MYPOLICY.pol
# vi /etc/crypto-policies/policies/MYPOLICY.polCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将系统范围的加密策略切换到自定义级别:
update-crypto-policies --set MYPOLICY
# update-crypto-policies --set MYPOLICYCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要使您的加密设置对已经运行的服务和应用程序有效,请重启系统:
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
15.9. 使用 crypto_policies RHEL 系统角色增强带有 FUTURE 加密策略的安全性 复制链接链接已复制到粘贴板!
您可以使用 crypto_policies RHEL 系统角色在受管节点上配置 FUTURE 策略。例如,此策略有助于实现:
- 未来应对新兴威胁:预见计算能力的前进.
- 增强安全性:更强大的加密标准需要更长的密钥长度和更安全的算法。
- 遵守高安全性标准:例如在医疗保健、电信和财务方面,数据敏感度很高,并且强大的加密可用性至关重要。
通常,FUTURE 适合处理高度敏感数据的环境,准备将来的法规,或采用长期安全策略。
传统系统或软件不必支持更现代化且更严格的算法和协议,由 FUTURE 策略实施。例如,旧的系统可能不支持 TLS 1.3 或更大的密钥大小。这可能导致兼容性问题。
另外,使用强大的算法通常会增加计算工作负载,这可能会对您的系统性能造成负面影响。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括以下内容:
crypto_policies_policy:未来-
在受管节点上配置所需的加密策略(
FUTURE)。它可以是基本策略,也可以是带有一些子策略的基本策略。必须在受管节点上提供指定的基本策略和子策略。默认值为null。这意味着配置没有被更改,crypto_policiesRHEL 系统角色只会收集 Ansible 事实。 crypto_policies_reboot_ok: true-
会导致系统在加密策略更改后重新启动,以确保所有服务和应用程序都将读取新的配置文件。默认值为
false。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.crypto_policies/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
因为 FIPS:OSPP 系统范围的子策略包含对通用标准(CC)认证所需的加密算法的进一步限制,所以在设置它后系统的互操作性较差。例如,您无法使用少于 3072 位的 RSA 和 DH 密钥、其它 SSH 算法和几个 TLS 组。设置 FIPS:OSPP 也会阻止连接到 Red Hat Content Delivery Network (CDN)结构。另外,您无法将活动目录(AD)集成到使用 FIPS:OSPP 的 IdM 部署中 ,使用 FIPS:OSPP 的 RHEL 主机和 AD 域之间的通信可能无法工作,或者某些 AD 帐户可能无法进行身份验证。
请注意,在设置了 FIPS:OSPP 加密子策略后,您的 系统不符合 CC。使您的 RHEL 系统符合 CC 标准的唯一正确方法是遵循 cc-config 软件包中提供的指导。有关认证的 RHEL 版本的列表、验证报告以及到 国家信息保障合作伙伴(NIAP) 网站上托管的 CC 的链接,请参阅 产品合规 红帽客户门户网页上的 通用标准 部分。
验证
在控制节点上,创建另一个 playbook,例如
verify_playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括以下内容:
crypto_policies_active-
导出的 Ansible 事实,其中含有当前活动的策略名称,格式为
crypto_policies_policy变量接受的格式。
验证 playbook 语法:
ansible-playbook --syntax-check ~/verify_playbook.yml
$ ansible-playbook --syntax-check ~/verify_playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 playbook:
ansible-playbook ~/verify_playbook.yml TASK [debug] ************************** ok: [host] => { "crypto_policies_active": "FUTURE" }$ ansible-playbook ~/verify_playbook.yml TASK [debug] ************************** ok: [host] => { "crypto_policies_active": "FUTURE" }Copy to Clipboard Copied! Toggle word wrap Toggle overflow crypto_policies_active变量显示受管节点上的活动策略。
第 16 章 通过 PKCS#11 将应用程序配置为使用加密硬件 复制链接链接已复制到粘贴板!
分离有关专用加密设备的 secret 信息部分,如用于最终用户身份验证的智能卡和加密令牌,以及用于服务器应用程序的硬件安全模块(HSM),提供了额外的安全层。在 RHEL 中,通过 PKCS #11 API 对加密硬件的支持在不同的应用程序之间是一致的,加密硬件上的 secret 并不是一个复杂的任务。
16.1. 通过 PKCS #11 的加密硬件支持 复制链接链接已复制到粘贴板!
公钥加密标准(PKCS)#11为保存加密信息并执行加密功能的加密设备定义一个应用程序编程接口(API)。
PKCS #11 引入了 加密令牌,它是一个以统一的方式向应用程序呈现每个硬件或软件设备的对象。因此,应用程序会查看智能卡等设备,这些设备通常由个人使用,硬件安全模块通常被计算机使用,作为 PKCS #11 加密令牌。
PKCS #11 令牌可以存储各种对象类型,包括证书、数据对象以及公有、私有或机密密钥。这些对象可通过 PKCS #11 统一资源标识符(URI)方案来唯一识别。
PKCS #11 URI 是一种标准方法,其根据对象属性来识别 PKCS #11 模块中的特定对象。这可让您以 URI 格式,使用同样的配置字符串来配置所有的库和应用程序。
RHEL 默认为智能卡提供 OpenSC PKCS #11 驱动程序。但是,硬件令牌和 HSM 可以有自己的 PKCS #11 模块,这些模块在系统中没有对应项。您可以使用 p11-kit 工具注册这样的 PKCS #11 模块,它作为系统中注册的智能卡驱动程序的包装器。
要使您自己的 PKCS #11 模块在系统上正常工作,请在 /etc/pkcs11/modules/ 目录中添加一个新的文本文件
您可以通过在 /etc/pkcs11/modules/ 目录中创建一个新的文本文件,来将自己的 PKCS #11 模块添加到系统。例如,p11-kit 中的 OpenSC 配置文件如下所示:
cat /usr/share/p11-kit/modules/opensc.module module: opensc-pkcs11.so
$ cat /usr/share/p11-kit/modules/opensc.module
module: opensc-pkcs11.so
16.2. 通过保存在智能卡中的 SSH 密钥进行身份验证 复制链接链接已复制到粘贴板!
您可以在智能卡中创建和存储 ECDSA 和 RSA 密钥,并由 OpenSSH 客户端中的智能卡进行身份验证。智能卡验证替换了默认密码验证。
先决条件
-
在客户端中安装了
opensc软件包,pcscd服务正在运行。
流程
列出所有由 OpenSC PKCS #11 模块提供的密钥,包括其 PKCS #11 URIs,并将输出保存到
key.pub文件:ssh-keygen -D pkcs11: > keys.pub
$ ssh-keygen -D pkcs11: > keys.pubCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将公钥传送到远程服务器。使用带有上一步中创建的 key
.pub文件的ssh-copy-id命令:ssh-copy-id -f -i keys.pub <username@ssh-server-example.com>
$ ssh-copy-id -f -i keys.pub <username@ssh-server-example.com>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 ECDSA 密钥连接到 < ssh-server-example.com >。您只能使用 URI 的子集,它唯一引用您的密钥,例如:
ssh -i "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $
$ ssh -i "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $Copy to Clipboard Copied! Toggle word wrap Toggle overflow 因为 OpenSSH 使用
p11-kit-proxy打包程序和 OpenSC PKCS modprobe 模块注册到p11-kit工具,所以您可以简化上一个命令:ssh -i "pkcs11:id=%01" <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $
$ ssh -i "pkcs11:id=%01" <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您跳过 PKCS #11 URI 的
id=部分,则 OpenSSH 会加载代理模块中可用的所有密钥。这可减少输入所需的数量:ssh -i pkcs11: <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $
$ ssh -i pkcs11: <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:您可以使用
~/.ssh/config文件中的同一 URI 字符串使配置持久:cat ~/.ssh/config IdentityFile "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" $ ssh <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $
$ cat ~/.ssh/config IdentityFile "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" $ ssh <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $Copy to Clipboard Copied! Toggle word wrap Toggle overflow ssh客户端工具现在自动使用来自智能卡中的这个 URI 和密钥。
16.3. 配置应用程序以使用智能卡上的证书进行身份验证 复制链接链接已复制到粘贴板!
在应用程序中使用智能卡进行身份验证可能会提高安全性,并简化自动化。您可以使用以下方法将公钥加密标准(PKCS) #11 URIs 集成到应用程序中:
-
Firefoxweb 浏览器会自动加载p11-kit-proxyPKCS #11 模块。这意味着系统中的每个支持的智能卡都会被自动检测到。对于使用 TLS 客户端身份验证,不需要额外的设置,在服务器请求它们时会自动使用智能卡中的密钥和证书。 -
如果您的应用程序使用
GnuTLS或NSS库,则它已经支持 PKCS #11 URI。另外,依赖OpenSSL库的应用程序可以通过openssl-pkcs11软件包提供的pkcs11引擎访问加密硬件模块,包括智能卡。 -
需要使用智能卡上的私钥且不使用
NSS、GnuTLS或OpenSSL的应用程序可以直接使用p11-kitAPI 来使用加密硬件模块,包括智能卡,而不是使用特定 PKCS #11 模块的 PKCS #11 API。 使用
wget网络下载程序,您可以指定 PKCS #11 URI ,而不是本地存储的私钥和证书的路径。这可能会简化为需要安全存储私钥和证书的任务创建脚本。例如:wget --private-key 'pkcs11:token=softhsm;id=%01;type=private?pin-value=111111' --certificate 'pkcs11:token=softhsm;id=%01;type=cert' https://example.com/
$ wget --private-key 'pkcs11:token=softhsm;id=%01;type=private?pin-value=111111' --certificate 'pkcs11:token=softhsm;id=%01;type=cert' https://example.com/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您还可以在使用
curl工具时指定 PKCS #11 URI :curl --key 'pkcs11:token=softhsm;id=%01;type=private?pin-value=111111' --cert 'pkcs11:token=softhsm;id=%01;type=cert' https://example.com/
$ curl --key 'pkcs11:token=softhsm;id=%01;type=private?pin-value=111111' --cert 'pkcs11:token=softhsm;id=%01;type=cert' https://example.com/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
16.4. 在 Apache 中使用 HSM 保护私钥 复制链接链接已复制到粘贴板!
Apache HTTP 服务器可以使用存储在硬件安全模块(HSM)上的私钥,这有助于防止密钥泄漏和中间人攻击。请注意,对于繁忙的服务器,这通常需要高性能的 HSM 。
对于 HTTPS 协议形式的安全通信,Apache HTTP 服务器(httpd)使用 OpenSSL 库。OpenSSL 本身不支持 PKCS #11 。要使用 HSMs,您必须安装 openssl-pkcs11 软件包,该软件包通过引擎界面提供对 PKCS #11 模块的访问。您可以使用 PKCS #11 URI 而不是常规文件名在 /etc/httpd/conf.d/ssl.conf 配置文件中指定服务器密钥和证书,例如:
SSLCertificateFile "pkcs11:id=%01;token=softhsm;type=cert" SSLCertificateKeyFile "pkcs11:id=%01;token=softhsm;type=private?pin-value=111111"
SSLCertificateFile "pkcs11:id=%01;token=softhsm;type=cert"
SSLCertificateKeyFile "pkcs11:id=%01;token=softhsm;type=private?pin-value=111111"
安装 httpd-manual 软件包以获取 Apache HTTP 服务器的完整文档,包括 TLS 配置。/etc/httpd/conf.d/ssl.conf 配置文件中的指令在 /usr/share/httpd/manual/mod_ssl.html 文件中进行了详细的描述。
16.5. 使用 HSM 保护 Nginx 中的私钥 复制链接链接已复制到粘贴板!
Nginx HTTP 服务器可以使用存储在硬件安全模块(HSM)上的私钥,这有助于防止密钥泄漏和中间人攻击。请注意,对于繁忙的服务器,这通常需要高性能的 HSM 。
因为 Nginx 也使用 OpenSSL 进行加密操作,所以对 PKCS #11 的支持必须通过 openssl-pkcs11 引擎。nginx 目前只支持从 HSM 加载私钥,证书必须作为常规文件单独提供。修改 /etc/nginx/nginx.conf 配置文件 server 部分的 ssl_certificate 选项:
和 ssl_certificate_key
ssl_certificate /path/to/cert.pem ssl_certificate_key "engine:pkcs11:pkcs11:token=softhsm;id=%01;type=private?pin-value=111111";
ssl_certificate /path/to/cert.pem
ssl_certificate_key "engine:pkcs11:pkcs11:token=softhsm;id=%01;type=private?pin-value=111111";
请注意,在 Nginx 配置文件中,PKCS #11 URI 需要 engine:pkcs 11: 前缀。这是因为其它 pkcs11 前缀引用引擎名称。
第 18 章 扫描系统以了解安全合规和漏洞 复制链接链接已复制到粘贴板!
18.1. RHEL 中的配置合规工具 复制链接链接已复制到粘贴板!
您可以使用以下配置合规工具在 Red Hat Enterprise Linux 中执行完全自动化的合规审计。这些工具基于安全内容自动化协议(SCAP)标准,专为自动定制合规策略而设计。
- SCAP 工作台
-
scap-workbench图形工具旨在对单个本地或远程系统执行配置和漏洞扫描。您还可以根据这些扫描和评估,使用它来生成安全报告。 - OpenSCAP
带有
oscap命令行工具的OpenSCAP库旨在对本地系统执行配置和漏洞扫描,以验证配置合规内容,并根据这些扫描和评估生成报告和指南。重要在使用 OpenSCAP 时可能会遇到内存消耗问题,这可能会导致程序过早停止,并阻止生成任何结果文件。详情请查看 OpenSCAP 内存消耗问题 知识库文章。
- SCAP 安全指南(SSG)
-
scap-security-guide软件包为 Linux 系统提供安全策略的集合。该指南包括一个实用强化建议目录,在适用的情况下与政府的要求相关联。该项目弥补了一般性政策要求和具体实施指南间的差距。 - 脚本检查引擎(SCE)
-
通过 SCE(即 SCAP 协议的扩展),管理员可以使用脚本语言(如 Bash、Python 和 Ruby)编写其安全内容。SCE 扩展在
openscap-engine-sce软件包中提供。SCE 本身不是 SCAP 标准的一部分。
要在多个系统上远程执行自动合规审计,您可以使用 Red Hat Satellite 的 OpenSCAP 解决方案。
18.2. 红帽安全咨询 OVAL 源 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 安全审计功能是基于安全内容自动化协议(SCAP)标准的。SCAP 是一种多用途规格框架,支持自动化配置、漏洞和补丁检查、技术控制合规性活动和安全衡量。
SCAP 规范创建一个生态系统,其中安全内容的格式是众所周知的且标准化的,尽管扫描程序或策略编辑器的实现并不是强制性的。这使得组织能够一次性构建它们的安全策略(SCAP 内容),无论他们使用了多少家安全供应商。
开放式漏洞评估语言(OVAL)是 SCAP 最基本、最古老的组件。与其他工具和自定义脚本不同,OVAL 以声明式方法描述资源的必需状态。OVAL 代码从不直接执行,而是使用称为扫描器的 OVAL 解释器工具。OVAL 的声明性质可确保评估的系统状态不会被意外修改。
与所有其他 SCAP 组件一样,OVAL 也是基于 XML。SCAP 标准定义了多个文档格式。每一个都包括一种不同的信息,用于不同的目的。
红帽产品安全团队 通过跟踪和调查影响红帽客户的所有安全问题,来帮助客户评估和管理风险。它在红帽客户门户网站上提供及时、简洁的补丁和安全公告。红帽创建和支持 OVAL 补丁定义,提供机器可读的安全公告版本。
由于平台、版本及其他因素之间存在差异,红帽产品安全严重性等级评级无法直接与第三方提供的通用漏洞评分系统(CVSS)基准评级一致。因此,我们建议您使用 RHSA OVAL 定义,而不是第三方提供的定义。
RHSA OVAL 定义 可以单独提供,也可以作为一个完整的软件包提供,并在红帽客户门户网站上提供新安全公告的一小时内进行更新。
每个 OVAL 补丁定义将一对一地映射到红帽安全公告(RHSA)。由于 RHSA 可以包含对多个漏洞的修复,因此每个漏洞都通过其通用漏洞和风险(CVE)名称单独列出,并在我们的公共 bug 数据库中有一个指向其条目的链接。
RHSA OVAL 定义旨在检查系统上安装的 RPM 软件包是否存易受攻击的版本。可以扩展这些定义以包括进一步的检查,例如,查找软件包是否在易受攻击的配置中被使用。这些定义旨在涵盖红帽所提供的软件和更新。需要其他定义来检测第三方软件的补丁状态。
Red Hat Enterprise Linux 合规服务的 Red Hat Insights 可帮助 IT 安全和合规性管理员评估、监控和报告 Red Hat Enterprise Linux 系统安全策略合规性。您还可以完全在合规服务 UI 中创建和管理 SCAP 安全策略。
18.3. 漏洞扫描 复制链接链接已复制到粘贴板!
18.3.1. 红帽安全咨询 OVAL 源 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 安全审计功能是基于安全内容自动化协议(SCAP)标准的。SCAP 是一种多用途规格框架,支持自动化配置、漏洞和补丁检查、技术控制合规性活动和安全衡量。
SCAP 规范创建一个生态系统,其中安全内容的格式是众所周知的且标准化的,尽管扫描程序或策略编辑器的实现并不是强制性的。这使得组织能够一次性构建它们的安全策略(SCAP 内容),无论他们使用了多少家安全供应商。
开放式漏洞评估语言(OVAL)是 SCAP 最基本、最古老的组件。与其他工具和自定义脚本不同,OVAL 以声明式方法描述资源的必需状态。OVAL 代码从不直接执行,而是使用称为扫描器的 OVAL 解释器工具。OVAL 的声明性质可确保评估的系统状态不会被意外修改。
与所有其他 SCAP 组件一样,OVAL 也是基于 XML。SCAP 标准定义了多个文档格式。每一个都包括一种不同的信息,用于不同的目的。
红帽产品安全团队 通过跟踪和调查影响红帽客户的所有安全问题,来帮助客户评估和管理风险。它在红帽客户门户网站上提供及时、简洁的补丁和安全公告。红帽创建和支持 OVAL 补丁定义,提供机器可读的安全公告版本。
由于平台、版本及其他因素之间存在差异,红帽产品安全严重性等级评级无法直接与第三方提供的通用漏洞评分系统(CVSS)基准评级一致。因此,我们建议您使用 RHSA OVAL 定义,而不是第三方提供的定义。
RHSA OVAL 定义 可以单独提供,也可以作为一个完整的软件包提供,并在红帽客户门户网站上提供新安全公告的一小时内进行更新。
每个 OVAL 补丁定义将一对一地映射到红帽安全公告(RHSA)。由于 RHSA 可以包含对多个漏洞的修复,因此每个漏洞都通过其通用漏洞和风险(CVE)名称单独列出,并在我们的公共 bug 数据库中有一个指向其条目的链接。
RHSA OVAL 定义旨在检查系统上安装的 RPM 软件包是否存易受攻击的版本。可以扩展这些定义以包括进一步的检查,例如,查找软件包是否在易受攻击的配置中被使用。这些定义旨在涵盖红帽所提供的软件和更新。需要其他定义来检测第三方软件的补丁状态。
Red Hat Enterprise Linux 合规服务的 Red Hat Insights 可帮助 IT 安全和合规性管理员评估、监控和报告 Red Hat Enterprise Linux 系统安全策略合规性。您还可以完全在合规服务 UI 中创建和管理 SCAP 安全策略。
18.3.2. 扫描系统漏洞 复制链接链接已复制到粘贴板!
oscap命令行实用程序使您能够扫描本地系统,验证配置合规性内容,并根据这些扫描和评估生成报告和指南。此工具充当 OpenSCAP 库的前端,并根据它所处理的 SCAP 内容类型将其功能分组到模块(子命令)。
先决条件
-
openscap-scanner和bzip2软件包已安装。
流程
下载系统的最新 RHSA OVAL 定义:
wget -O - https://www.redhat.com/security/data/oval/v2/RHEL8/rhel-8.oval.xml.bz2 | bzip2 --decompress > rhel-8.oval.xml
# wget -O - https://www.redhat.com/security/data/oval/v2/RHEL8/rhel-8.oval.xml.bz2 | bzip2 --decompress > rhel-8.oval.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 扫描系统漏洞并将结果保存到 vulnerability.html 文件中:
oscap oval eval --report vulnerability.html rhel-8.oval.xml
# oscap oval eval --report vulnerability.html rhel-8.oval.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在您选择的浏览器中检查结果,例如:
firefox vulnerability.html &
$ firefox vulnerability.html &Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.3.3. 扫描远程系统的漏洞 复制链接链接已复制到粘贴板!
您可以通过 SSH 协议使用 oscap-ssh 工具,通过 OpenSCAP 扫描程序检查远程系统上的漏洞。
先决条件
-
openscap-utils和bzip2软件包已安装在您用于扫描的系统中。 -
openscap-scanner软件包已安装在远程系统上。 - SSH 服务器在远程系统上运行。
流程
下载系统的最新 RHSA OVAL 定义:
wget -O - https://www.redhat.com/security/data/oval/v2/RHEL8/rhel-8.oval.xml.bz2 | bzip2 --decompress > rhel-8.oval.xml
# wget -O - https://www.redhat.com/security/data/oval/v2/RHEL8/rhel-8.oval.xml.bz2 | bzip2 --decompress > rhel-8.oval.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 扫描远程系统上的漏洞,并将结果保存到文件中:
oscap-ssh <username>@<hostname> <port> oval eval --report <scan-report.html> rhel-8.oval.xml
# oscap-ssh <username>@<hostname> <port> oval eval --report <scan-report.html> rhel-8.oval.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 替换:
-
带有用户名和远程系统主机名的
<username>@<hostname>。 -
您可以通过端口号
<port>访问远程系统,例如22。 -
使用
oscap保存扫描结果的文件名<scan-report.html>。
-
带有用户名和远程系统主机名的
18.4. 配置合规性扫描 复制链接链接已复制到粘贴板!
18.4.1. RHEL 中的配置合规性 复制链接链接已复制到粘贴板!
您可以使用配置合规性扫描来遵循特定组织定义的基准。例如,如果您与美国政府合作,您可能需要使您的系统与操作系统保护配置文件(OSPP)保持一致,如果您是一个支付处理器,您可能需要使您的系统与支付卡行业数据安全标准(PCI-DSS)保持一致。您还可以执行配置合规性扫描来强化您的系统安全。
红帽建议您遵循 SCAP 安全指南软件包中提供的安全内容自动化协议(SCAP)的内容,因为它符合红帽针对受影响组件的最佳实践。
SCAP 安全指南软件包提供了符合 SCAP 1.2 和 SCAP 1.3 标准的内容。openscap 扫描器实用程序与SCAP安全指南包中提供的SCAP 1.2和SCAP 1.3内容兼容。
执行配置合规性扫描不能保证系统是合规的。
SCAP 安全指南套件以数据流文档的形式为多个平台提供配置文件。数据流是包含定义、基准、配置文件和单个规则的文件。每条规则都规定了合规的适用性和要求。RHEL 提供多个配置文件来遵守安全策略。除了行业标准之外,红帽数据流还包含用于修复失败规则的信息。
合规性扫描资源的结构
配置文件是基于安全策略的一组规则,如 OSPP、PCI-DSS 和健康保险可移植性和责任法案(HIPAA)。这可让您以自动化的方式审核系统,以符合安全标准。
您可以修改(定制)配置文件来自定义某些规则,例如密码长度。有关配置文件定制的更多信息,请参阅 使用 SCAP Workbench 自定义安全配置文件。
18.4.2. OpenSCAP 扫描的可能结果 复制链接链接已复制到粘贴板!
根据应用到 OpenSCAP 扫描的数据流和配置文件,以及系统的各种属性,每个规则可能会产生一个特定的结果。以下是可能的结果,并有其含义的简要解释:
- Pass
- 扫描没有发现与此规则有任何冲突。
- Fail
- 扫描发现与此规则有冲突。
- Not checked
- OpenSCAP 对此规则不执行自动评估。手动检查您的系统是否符合此规则。
- Not applicable
- 此规则不适用于当前配置。
- Not selected
- 此规则不是配置文件的一部分。OpenSCAP 不评估此规则,也不会在结果中显示这些规则。
- Error
-
扫描遇到了错误。要获得更多信息,您可以输入带有
--verbose DEVEL选项的oscap命令。在红帽客户门户上提交支持问题单,或在 Red Hat Jira 的 RHEL 项目中 创建一个问题单。 - Unknown
-
扫描遇到了意外情况。要获得更多信息,您可以输入带有
'--verbose DEVEL选项的oscap命令。在红帽客户门户上提交支持问题单,或在 Red Hat Jira 的 RHEL 项目中 创建一个问题单。
18.4.3. 查看配置文件是否符合配置合规 复制链接链接已复制到粘贴板!
在决定使用配置文件进行扫描或补救前,您可以使用 oscap info 子命令列出它们并检查其详细描述。
先决条件
-
openscap-scanner和scap-security-guide软件包已安装。
流程
列出 SCAP 安全指南项目所提供的带有安全合规配置文件的所有可用文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
oscap info子命令显示有关所选数据流的详细信息。包含数据流的 XML 文件由其名称中的-ds字符串表示。在Profiles部分,您可以找到可用的配置文件及其 ID 列表:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从数据流文件中选择一个配置文件,并显示所选配置文件的更多详情。为此,可使用带有
--profile选项的oscap info,后跟上一命令输出中显示的 ID 的最后一部分。例如,HIPPA 配置文件的 ID 是xccdf_org.ssgproject.content_profile_hipaa,--profile选项的值为hipaa:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.4.4. 评估配置是否符合特定基准 复制链接链接已复制到粘贴板!
您可以确定您的系统或远程系统是否符合特定基准,并使用 oscap 命令行工具将结果保存在报告中。
先决条件
-
openscap-scanner和scap-security-guide软件包已安装。 - 您知道系统应遵守的基准中的配置文件的 ID。要查找 ID,请参阅 查看配置合规性的配置文件 部分。
流程
扫描本地系统以确定是否符合所选的配置文件,并将扫描结果保存到文件中:
oscap xccdf eval --report <scan-report.html> --profile <profileID> /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml
$ oscap xccdf eval --report <scan-report.html> --profile <profileID> /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 替换:
-
使用
oscap保存扫描结果的文件名<scan-report.html>。 -
系统应该遵守的配置文件 ID
<profileID>,例如hipaa。
-
使用
可选:扫描远程系统以确定是否符合所选的配置文件,并将扫描结果保存到文件中:
oscap-ssh <username>@<hostname> <port> xccdf eval --report <scan-report.html> --profile <profileID> /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml
$ oscap-ssh <username>@<hostname> <port> xccdf eval --report <scan-report.html> --profile <profileID> /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 替换:
-
带有用户名和远程系统主机名的
<username>@<hostname>。 -
您可以访问远程系统的
<port>端口号。 -
使用
oscap保存扫描结果的文件名<scan-report.html>。 -
系统应该遵守的配置文件 ID
<profileID>,例如hipaa。
-
带有用户名和远程系统主机名的
18.5. 修复系统,使其与特定基准一致 复制链接链接已复制到粘贴板!
您可以修正 RHEL 系统,使其与特定基准一致。您可以修复系统,使其与 SCAP 安全指南提供的任何配置文件保持一致。有关列出可用配置文件的详情,请查看 查看配置合规的配置文件 部分。
如果不小心使用,在启用了 Remediate 选项的情况下运行系统评估可能会导致系统无法正常工作。红帽不提供任何自动的方法来恢复由安全补救机制所做的更改。默认配置的 RHEL 系统支持自动安全补救功能。如果在安装后更改了您的系统,运行补救可能无法使其与所需安全配置兼容。
先决条件
-
scap-security-guide软件包已安装。
流程
使用带有
--remediate选项的oscap命令修复系统:oscap xccdf eval --profile <profileID> --remediate /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml
# oscap xccdf eval --profile <profileID> --remediate /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<profileID>替换为系统应该遵守的配置文件的 ID,例如hipaa。- 重启您的系统。
验证
使用配置文件评估系统的合规性,并将扫描结果保存到文件中:
oscap xccdf eval --report <scan-report.html> --profile <profileID> /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml
$ oscap xccdf eval --report <scan-report.html> --profile <profileID> /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 替换:
-
使用
oscap保存扫描结果的文件名<scan-report.html>。 -
系统应该遵守的配置文件 ID
<profileID>,例如hipaa。
-
使用
18.6. 使用 SSG Ansible Playbook 修复系统,使其与特定基准一致 复制链接链接已复制到粘贴板!
您可以使用 SCAP 安全指南项目中的 Ansible Playbook 文件修复您的系统,使其与特定基准一致。您可以修复,使其与 SCAP 安全指南提供的任何配置集保持一致。
如果不小心使用,在启用了 Remediate 选项的情况下运行系统评估可能会导致系统无法正常工作。红帽不提供任何自动的方法来恢复由安全补救机制所做的更改。默认配置的 RHEL 系统支持自动安全补救功能。如果在安装后更改了您的系统,运行补救可能无法使其与所需安全配置兼容。
先决条件
-
scap-security-guide软件包已安装。 -
ansible-core软件包已安装。如需更多信息,请参阅 Ansible 安装指南。 -
rhc-worker-playbook软件包已安装。 - 您知道要修复系统的配置文件的 ID。详情请参阅 查看配置文件以了解配置合规性。
RHEL 8.6 或更高版本已安装。有关安装 RHEL 的更多信息,请参阅主动 从安装介质安装 RHEL。
注意在 RHEL 8.5 及更早版本中,Ansible 软件包通过 Ansible Engine 提供,而不是通过 Ansible Core ,并具有不同的支持级别。不要使用 Ansible Engine,因为软件包可能与 RHEL 8.6 及之后版本中的 Ansible 自动化内容不兼容。如需更多信息,请参阅 RHEL 9 和 RHEL 8.6 以及后期的 AppStream 存储库中包含的 Ansible Core 软件包的支持范围。
流程
使用 Ansible 修复您的系统,使其与所选配置文件一致:
ANSIBLE_COLLECTIONS_PATH=/usr/share/rhc-worker-playbook/ansible/collections/ansible_collections/ ansible-playbook -i "localhost," -c local /usr/share/scap-security-guide/ansible/rhel8-playbook-<profileID>.yml
# ANSIBLE_COLLECTIONS_PATH=/usr/share/rhc-worker-playbook/ansible/collections/ansible_collections/ ansible-playbook -i "localhost," -c local /usr/share/scap-security-guide/ansible/rhel8-playbook-<profileID>.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow ANSIBLE_COLLECTIONS_PATH环境变量是运行命令才能运行 playbook 所必需的。将
<profileID> 替换为所选配置集的配置集 ID。- 重新启动系统。
验证
使用所选配置集评估系统的合规性,并将扫描结果保存到文件中:
oscap xccdf eval --profile <profileID> --report <scan-report.html> /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml
# oscap xccdf eval --profile <profileID> --report <scan-report.html> /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<scan-report.html>替换为oscap保存扫描结果的文件名。
18.7. 创建修复 Ansible Playbook,使系统与特定基准保持一致 复制链接链接已复制到粘贴板!
您可以创建一个 Ansible Playbook,它只包含使您的系统与特定基准保持一致所需的补救。此 playbook 更小,因为它没有涵盖已满足要求。创建 playbook 不会以任何方式修改您的系统,您只需为后续应用程序准备一个文件。
在 RHEL 8.6 中,Ansible Engine 被 ansible-core 软件包替代,该软件包只包含内置模块。请注意,很多 Ansible 补救使用社区和可端口操作系统接口(POSIX)集合中的模块,它们没有包含在内置模块中。在这种情况下,您可以使用 Bash 补救来替代 Ansible 补救。RHEL 8.6 中的 Red Hat Connector 包括修复 playbook 与 Ansible Core 正常工作所需的 Ansible 模块。
先决条件
-
scap-security-guide软件包已安装。 -
ansible-core软件包已安装。如需更多信息,请参阅 Ansible 安装指南。 -
rhc-worker-playbook软件包已安装。 - 您知道要修复系统的配置文件的 ID。详情请参阅 查看配置文件以了解配置合规性。
流程
扫描系统并保存结果:
oscap xccdf eval --profile <profileID> --results <profile-results.xml> /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml
# oscap xccdf eval --profile <profileID> --results <profile-results.xml> /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在带有结果的文件中找到结果 ID 的值:
oscap info <profile-results.xml>
# oscap info <profile-results.xml>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 根据第 1 步中生成的文件生成 Ansible Playbook:
oscap xccdf generate fix --fix-type ansible --result-id xccdf_org.open-scap_testresult_xccdf_org.ssgproject.content_profile_<profileID> --output <profile-remediations.yml> <profile-results.xml>
# oscap xccdf generate fix --fix-type ansible --result-id xccdf_org.open-scap_testresult_xccdf_org.ssgproject.content_profile_<profileID> --output <profile-remediations.yml> <profile-results.xml>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
检查生成的 <
;profile-remediations.yml> 文件是否包含在第 1 步中执行的扫描中失败的规则的 Ansible 修复。 使用 Ansible 修复您的系统,使其与所选配置文件一致:
ANSIBLE_COLLECTIONS_PATH=/usr/share/rhc-worker-playbook/ansible/collections/ansible_collections/ ansible-playbook -i "localhost," -c local <profile-remediations.yml>`
# ANSIBLE_COLLECTIONS_PATH=/usr/share/rhc-worker-playbook/ansible/collections/ansible_collections/ ansible-playbook -i "localhost," -c local <profile-remediations.yml>`Copy to Clipboard Copied! Toggle word wrap Toggle overflow ANSIBLE_COLLECTIONS_PATH环境变量是运行命令才能运行 playbook 所必需的。警告如果不小心使用,在启用了
Remediate选项的情况下运行系统评估可能会导致系统无法正常工作。红帽不提供任何自动的方法来恢复由安全补救补救所做的更改。默认配置的 RHEL 系统支持自动安全补救功能。如果在安装后更改了您的系统,运行修复可能无法使其遵守所需的安全配置文件。
验证
使用所选配置集评估系统的合规性,并将扫描结果保存到文件中:
oscap xccdf eval --profile <profileID> --report <scan-report.html> /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml
# oscap xccdf eval --profile <profileID> --report <scan-report.html> /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<scan-report.html>替换为oscap保存扫描结果的文件名。
18.8. 为后续应用程序创建补救 Bash 脚本 复制链接链接已复制到粘贴板!
使用此流程创建一个 Bash 脚本,其中包含使您的系统与 HIPAA 等安全配置文件一致的补救。通过以下步骤,您不需要对系统进行任何修改,您只需为后续应用准备一个文件。
先决条件
-
scap-security-guide软件包已安装在您的 RHEL 系统上。
流程
使用
oscap命令扫描系统,并将结果保存到 XML 文件中。在以下示例中,oscap会根据hipaa配置文件评估系统:oscap xccdf eval --profile hipaa --results <hipaa-results.xml> /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml
# oscap xccdf eval --profile hipaa --results <hipaa-results.xml> /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在带有结果的文件中找到结果 ID 的值:
oscap info <hipaa-results.xml>
# oscap info <hipaa-results.xml>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 根据在第 1 步中生成的结果文件生成一个 Bash 脚本:
oscap xccdf generate fix --fix-type bash --result-id <xccdf_org.open-scap_testresult_xccdf_org.ssgproject.content_profile_hipaa> --output <hipaa-remediations.sh> <hipaa-results.xml>
# oscap xccdf generate fix --fix-type bash --result-id <xccdf_org.open-scap_testresult_xccdf_org.ssgproject.content_profile_hipaa> --output <hipaa-remediations.sh> <hipaa-results.xml>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
<hipaa-remediations.sh>文件包含在第 1 步中执行扫描的过程中失败的规则的补救。查看生成的文件后,当您位于与此文件相同的目录中时,您可以使用./<hipaa-remediations.sh>命令应用该文件。
验证
-
在您选择的文本编辑器中,检查
<hipaa-remediations.sh>文件包含在第 1 步中执行的扫描中失败的规则。
18.9. 使用 SCAP Workbench 用自定义配置文件扫描系统 复制链接链接已复制到粘贴板!
scap-workbench软件包中包含的SCAP Workbench是一个图形化的实用程序,用户可以在单个本地或远程系统上进行配置和漏洞扫描,对系统进行修复,并根据扫描评估结果生成报告。请注意,与 oscap 命令行工具相比,SCAP Workbench 的功能有限。SCAP Workbench 处理数据流文件形式的安全内容。
18.9.1. 使用 SCAP Workbench 来扫描和修复系统 复制链接链接已复制到粘贴板!
要根据所选的安全策略来评估您的系统,请使用以下流程。
先决条件
-
scap-workbench软件包已经安装在您的系统中。
流程
要从
GNOME Classic桌面环境运行SCAP Workbench,请按 Super 键进入Activities Overview,输入scap-workbench,然后按 Enter。或者,使用:scap-workbench &
$ scap-workbench &Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下其中一个选项来选择安全策略:
-
开始窗口中的
Load Content按钮 -
打开 SCAP 安全指南中的内容 在
File中打开Other Content,搜索相关的 XCCDF、SCAP RPM 或数据流文件。
-
开始窗口中的
您可以选择 复选框来允许自动修正系统配置。启用此选项后,
SCAP Workbench会尝试根据策略所应用的安全规则来修改系统配置。这个过程应该修复系统扫描过程中失败的相关检查。警告如果不小心使用,在启用了
Remediate选项的情况下运行系统评估可能会导致系统无法正常工作。红帽不提供任何自动的方法来恢复由安全补救机制所做的更改。默认配置的 RHEL 系统支持自动安全补救功能。如果在安装后更改了您的系统,运行补救可能无法使其与所需安全配置兼容。单击按钮,使用所选配置文件扫描您的系统。
-
要以 XCCDF、ARF 或 HTML 文件的形式保存扫描结果,请点击 组合框。选择
HTML Report选项,以人类可读的格式生成扫描报告。XCCDF 和 ARF(数据流)格式适合进一步自动处理。您可以重复选择所有三个选项。 - 要将基于结果的补救导出到文件,请使用 弹出菜单。
18.9.2. 使用 SCAP Workbench 自定义安全配置文件 复制链接链接已复制到粘贴板!
您可以通过更改某些规则中的参数(如最小密码长度)、删除以不同方式涵盖的规则,并选择额外的规则来自定义安全配置文件,以实现内部策略。您不能通过自定义配置文件来定义新规则。
以下流程演示了如何使用 SCAP Workbench 来自定义(定制)配置文件。您还可以保存定制的配置文件,以便在 oscap 命令行工具中使用。。
先决条件
-
scap-workbench软件包已经安装在您的系统中。
流程
-
运行
SCAP Workbench,选择要自定义的配置文件,方法是使用打开 SCAP 安全指南中的内容或者在File菜单中打开其他内容。 要根据您的需要调整所选的安全配置文件,请点击 按钮。
这会打开新的 Customization 窗口,允许您在不修改原始数据流文件的情况下修改当前选择的配置文件。选择新的配置文件 ID。
- 使用将规则组织成逻辑组的树结构或 字段查找要修改的规则。
使用树结构中的复选框来包含或排除规则,或者在适用情况下修改规则中的值。
- 点击 按钮以确认修改。
要永久存储您的修改,请使用以下选项之一:
-
使用
File菜单中的Save Customization Only分别保存自定义文件。 通过在
File菜单中的Save All来一次保存所有安全内容。如果您选择了
Into a directory选项,SCAP Workbench将数据流文件和自定义文件保存到指定的位置。您可以使用它作为备份解决方案。通过选择
As RPM选项,您可以指示SCAP Workbench创建包含数据流文件和自定义文件的 RPM 软件包。这对于将安全内容分发到无法远程扫描的系统以及交付内容以供进一步处理非常有用。
-
使用
因为 SCAP Workbench 不支持对定制配置文件的基于结果的补救,所以请使用 oscap 命令行工具导出的补救。
18.10. 扫描容器和容器镜像以查找漏洞 复制链接链接已复制到粘贴板!
使用这个流程查找容器或容器镜像中的安全漏洞。
oscap-podman 命令从 RHEL 8.2 开始提供。对于RHEL 8.1和8.0,请参阅 Using OpenSCAP for scanning containers in RHEL 8。
先决条件
-
openscap-utils和bzip2软件包已安装。
流程
下载系统的最新 RHSA OVAL 定义:
wget -O - https://www.redhat.com/security/data/oval/v2/RHEL8/rhel-8.oval.xml.bz2 | bzip2 --decompress > rhel-8.oval.xml
# wget -O - https://www.redhat.com/security/data/oval/v2/RHEL8/rhel-8.oval.xml.bz2 | bzip2 --decompress > rhel-8.oval.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 获取容器或容器镜像的 ID,例如:
podman images REPOSITORY TAG IMAGE ID CREATED SIZE registry.access.redhat.com/ubi8/ubi latest 096cae65a207 7 weeks ago 239 MB
# podman images REPOSITORY TAG IMAGE ID CREATED SIZE registry.access.redhat.com/ubi8/ubi latest 096cae65a207 7 weeks ago 239 MBCopy to Clipboard Copied! Toggle word wrap Toggle overflow 扫描容器或容器镜像的漏洞,并将结果保存到 vulnerability.html 文件中:
oscap-podman 096cae65a207 oval eval --report vulnerability.html rhel-8.oval.xml
# oscap-podman 096cae65a207 oval eval --report vulnerability.html rhel-8.oval.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,
oscap-podman命令需要 root 特权,容器的 ID 是第一个参数。
验证
在您选择的浏览器中检查结果,例如:
firefox vulnerability.html &
$ firefox vulnerability.html &Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.11. 使用特定基准评估容器或容器镜像的安全性合规 复制链接链接已复制到粘贴板!
您可以评估您的容器或容器镜像是否符合特定的安全基线,如操作系统保护配置文件(OSPP)、支付卡行业数据安全标准(PCI-DSS)以及健康保险流通与责任法案(HIPAA)。
oscap-podman 命令从 RHEL 8.2 开始提供。对于RHEL 8.1和8.0,请参阅 Using OpenSCAP for scanning containers in RHEL 8。
先决条件
-
openscap-utils和scap-security-guide软件包已安装。 - 有对系统的 root 访问权限。
流程
查找容器或容器镜像的 ID:
-
要查找容器的 ID,请输入
podman ps -a命令。 -
要查找容器镜像的 ID,请输入
podman images命令。
-
要查找容器的 ID,请输入
评估容器或容器镜像是否符合配置文件,并将扫描结果保存到一个文件中:
oscap-podman <ID> xccdf eval --report <scan-report.html> --profile <profileID> /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml
# oscap-podman <ID> xccdf eval --report <scan-report.html> --profile <profileID> /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 替换:
-
使用容器或容器镜像的 ID 替换
<ID> -
使用
oscap保存扫描结果的文件名替换<scan-report.html> -
使用系统应该遵循的配置文件 ID 替换
<profileID>,例如hipaa、ospp或pci-dss
-
使用容器或容器镜像的 ID 替换
验证
在您选择的浏览器中检查结果,例如:
firefox <scan-report.html> &
$ firefox <scan-report.html> &Copy to Clipboard Copied! Toggle word wrap Toggle overflow
标记为 notapplicable 的规则仅适用于裸机和虚拟化系统,不适用于容器或容器镜像。
18.12. 使用 AIDE 检查完整性 复制链接链接已复制到粘贴板!
高级入侵检测环境(AIDE)是一个在系统上创建文件数据库的工具,然后使用该数据库确保文件的完整性,并检测系统入侵。
18.12.1. 安装 AIDE 复制链接链接已复制到粘贴板!
要使用 AIDE 启动文件完整性检查,您必须安装相应的软件包并启动 AIDE 数据库。
先决条件
-
AppStream存储库已启用。
流程
安装
aide软件包:yum install aide
# yum install aideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 生成一个初始数据库:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
可选:在默认配置中,
aide --init命令只检查/etc/aide.conf文件中定义的一组目录和文件。要在 AIDE 数据库中包含其他目录或文件,并更改其监视的参数,请相应地编辑/etc/aide.conf。 要开始使用数据库,请从初始数据库文件名中删除
.new子字符串:mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
# mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gzCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
可选:要更改 AIDE 数据库的位置,请编辑
/etc/aide.conf文件,并修改DBDIR值。要获得额外的安全性,请将数据库、配置和/usr/sbin/aide二进制文件存储在安全的位置,如只读介质。
18.12.2. 使用 AIDE 执行完整性检查 复制链接链接已复制到粘贴板!
您可以使用 crond 服务来调度使用 AIDE 的常规文件完整性检查。
先决条件
- AIDE 已正确安装,其数据库已初始化。请参阅 安装 AIDE
流程
启动手动检查:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 至少,将系统配置为每周运行 AIDE。最好每天运行 AIDE。例如,要使用
cron命令计划在每日 04:05 a.m. 执行 AIDE,请在/etc/crontab文件中添加以下行:05 4 * * * root /usr/sbin/aide --check
05 4 * * * root /usr/sbin/aide --checkCopy to Clipboard Copied! Toggle word wrap Toggle overflow
18.12.3. 更新 AIDE 数据库 复制链接链接已复制到粘贴板!
验证系统的更改后,如软件包更新或配置文件调整,也会更新您的基准 AIDE 数据库。
先决条件
- AIDE 已正确安装,其数据库已初始化。请参阅 安装 AIDE
流程
更新您的基准 AIDE 数据库:
aide --update
# aide --updateCopy to Clipboard Copied! Toggle word wrap Toggle overflow aide --update命令创建/var/lib/aide/aide.db.new.gz数据库文件。-
若要开始使用更新的数据库进行完整性检查,请从文件名中删除
.new子字符串。
18.12.4. 文件完整性工具:AIDE 和 IMA 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 提供多个用于检查和维护系统上文件和目录完整性的工具。下表可帮助您决定哪个工具更适合您的场景。
| 问题 | 高级入侵检测环境(AIDE) | 完整性测量架构 (IMA) |
|---|---|---|
| 什么 | AIDE 是一个在系统上创建文件和目录数据库的工具。此数据库用于检查文件完整性及检测入侵检测。 | IMA 通过检查与之前存储的扩展属性相比的文件度量(哈希值)来检查文件是否被修改了。 |
| 如何 | AIDE 使用规则来比较文件和目录的完整性状态。 | IMA 使用文件哈希值来检测入侵。 |
| 为什么 | 检测 - AIDE 通过验证规则来检测文件是否被修改。 | 检测和防止 - IMA 通过替换文件的扩展属性来检测和防止攻击。 |
| 使用 | 当文件或目录被修改了,AIDE 会检测到威胁。 | 当有人试图更改整个文件时,IMA 会检测到威胁。 |
| 扩展 | AIDE 检查本地系统上文件和目录的完整性。 | IMA 确保本地和远程系统的安全性。 |
18.13. 使用 LUKS 加密块设备 复制链接链接已复制到粘贴板!
通过使用磁盘加密,您可以通过对其进行加密来保护块设备上的数据。要访问设备的解密内容,请输入密码短语或密钥作为身份验证。这对移动计算机和可移动介质非常重要,因为它有助于保护设备的内容,即使它已从系统上物理移除。LUKS 格式是 Red Hat Enterprise Linux 中块设备加密的默认实现。
18.13.1. LUKS 磁盘加密 复制链接链接已复制到粘贴板!
Linux Unified Key Setup-on-disk-format (LUKS)提供了一组简化管理加密设备的工具。使用 LUKS,您可以加密块设备,并使多个用户密钥解密主密钥。要批量加密分区,请使用这个主密钥。
Red Hat Enterprise Linux 使用 LUKS 执行块设备加密。默认情况下,在安装过程中不选中加密块设备的选项。如果您选择加密磁盘的选项,则系统会在每次引导计算机时提示您输入密码短语。这个密码短语解锁了解密分区的批量加密密钥。如果要修改默认分区表,您可以选择要加密的分区。这是在分区表设置中设定的。
Ciphers
LUKS 使用的默认密码是 aes-xts-plain64。LUKS 的默认密钥大小为 512 字节。Anaconda XTS 模式的 LUKS 的默认密钥大小为 512 位。以下是可用的密码:
- 高级加密标准(AES)
- Twofish
- Serpent
LUKS 执行的操作
- LUKS 对整个块设备进行加密,因此非常适合保护移动设备的内容,如可移动存储介质或笔记本电脑磁盘驱动器。
- 加密块设备的底层内容是任意的,这有助于加密交换设备。对于将特殊格式化块设备用于数据存储的某些数据库,这也很有用。
- LUKS 使用现有的设备映射器内核子系统。
- LUKS 增强了密码短语,防止字典攻击。
- LUKS 设备包含多个密钥插槽,这意味着您可以添加备份密钥或密码短语。
在以下情况下不建议使用 LUKS:
- 磁盘加密解决方案,如 LUKS,仅在您的系统关闭时保护数据。在系统启动并且 LUKS 解密磁盘后,该磁盘上的文件可供有权访问它们的用户使用。
- 需要多个用户对同一设备具有不同的访问密钥的情况。LUKS1 格式提供八个密钥插槽,LUKS2 提供最多 32 个密钥插槽。
- 需要文件级加密的应用程序。
18.13.2. RHEL 中的 LUKS 版本 复制链接链接已复制到粘贴板!
在 Red Hat Enterprise Linux 中,LUKS 加密的默认格式为 LUKS2。旧的 LUKS1 格式仍被完全支持,它作为与早期 Red Hat Enterprise Linux 版本兼容的格式提供。与 LUKS1 重新加密相比,LUKS2 重新加密被视为更强大且更安全。
LUKS2 格式允许各种部分的未来更新,而无需修改二进制结构。它在内部对元数据使用 JSON 文本格式,提供元数据冗余,检测元数据损坏,并从元数据副本自动修复。
不要在只支持 LUKS1 的系统中使用 LUKS2,因为 LUKS2 和 LUKS1 使用不同的命令来加密磁盘。对 LUKS 版本使用错误的命令可能会导致数据丢失。
| LUKS 版本 | 加密命令 |
|---|---|
| LUKS2 |
|
| LUKS1 |
|
在线重新加密
LUKS2 格式支持在设备正在使用时重新加密加密设备。例如:您不必卸载该设备中的文件系统来执行以下任务:
- 更改卷密钥
更改加密算法
加密未加密的设备时,您仍然必须卸载文件系统。您可以在简短初始化加密后重新挂载文件系统。
LUKS1 格式不支持在线重新加密。
转换
在某些情况下,您可以将 LUKS1 转换为 LUKS2。在以下情况下无法进行转换:
-
LUKS1 设备被标记为被基于策略的解密(PBD) Clevis 解决方案使用。当检测到某些
luksmeta元数据时,cryptsetup工具不会转换设备。 - 设备正在活跃。在任何转换前,设备必须处于不活跃状态。
18.13.3. LUKS2 重新加密过程中数据保护选项 复制链接链接已复制到粘贴板!
LUKS2 提供了几个选项,在重新加密过程中优先选择性能或数据保护。它为 resilience 选项提供以下模式,您可以使用 cryptsetup reencrypt --resilience resilience-mode /dev/sdx 命令选择这些模式之一:
checksum默认模式。它在数据保护和性能之间保持平衡。
这个模式将扇区的校验和存储在重新加密的区域,恢复过程可以检测 LUKS2 重新加密的扇区。模式要求块设备扇区写入具有“原子”性。
journal- 最安全的模式,但也是最慢的模式。由于此模式在二进制区域中记录重新加密区域,因此 LUKS2 将数据写入两次。
none-
none模式优先选择性能,不提供数据保护。它只保护数据免受安全进程终止的影响,如SIGTERM信号或用户按了 Ctrl+C 键。任何意外的系统故障或应用程序失败都可能会导致数据损坏。
如果 LUKS2 重新加密进程意外被强行终止,LUKU2 可通过以下方法执行恢复:
- 自动
在下一个 LUKS2 设备打开操作过程中,执行以下操作之一会触发自动恢复操作:
-
执行
cryptsetup open命令。 -
使用
systemd-cryptsetup命令附加设备。
-
执行
- 手动
-
通过在 LUKS2 设备上使用
cryptsetup repair /dev/sdx命令。
18.13.4. 使用 LUKS2 加密块设备上的现有数据 复制链接链接已复制到粘贴板!
您可以使用 LUKS2 格式在尚未加密的设备上加密现有数据。新的 LUKS 标头保存在设备的标头中。
先决条件
- 块设备有一个文件系统。
已备份了数据。
警告由于硬件、内核或人为故障,您可能会在加密过程中丢失数据。在开始加密数据之前,请确保您有可靠的备份。
流程
卸载您要加密的设备上的所有文件系统,例如:
umount /dev/mapper/vg00-lv00
# umount /dev/mapper/vg00-lv00Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为存储 LUKS 标头腾出空间。使用以下适合您场景的选项之一:
如果是加密逻辑卷,您可以扩展逻辑卷而无需调整文件系统的大小。例如:
lvextend -L+32M /dev/mapper/vg00-lv00
# lvextend -L+32M /dev/mapper/vg00-lv00Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
使用分区管理工具(如
parted)扩展分区。 -
缩小该设备的文件系统。您可以对 ext2、ext3 或 ext4 文件系统使用
resize2fs工具。请注意,您无法缩小 XFS 文件系统。
初始化加密:
cryptsetup reencrypt --encrypt --init-only --reduce-device-size 32M /dev/mapper/vg00-lv00 lv00_encrypted /dev/mapper/lv00_encrypted is now active and ready for online encryption.
# cryptsetup reencrypt --encrypt --init-only --reduce-device-size 32M /dev/mapper/vg00-lv00 lv00_encrypted /dev/mapper/lv00_encrypted is now active and ready for online encryption.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 挂载该设备:
mount /dev/mapper/lv00_encrypted /mnt/lv00_encrypted
# mount /dev/mapper/lv00_encrypted /mnt/lv00_encryptedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 向
/etc/crypttab文件添加持久映射的一个条目:查找
luksUUID:cryptsetup luksUUID /dev/mapper/vg00-lv00 a52e2cc9-a5be-47b8-a95d-6bdf4f2d9325
# cryptsetup luksUUID /dev/mapper/vg00-lv00 a52e2cc9-a5be-47b8-a95d-6bdf4f2d9325Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在您选择的文本编辑器中打开
/etc/crypttab,并在此文件中添加设备:vi /etc/crypttab lv00_encrypted UUID=a52e2cc9-a5be-47b8-a95d-6bdf4f2d9325 none
$ vi /etc/crypttab lv00_encrypted UUID=a52e2cc9-a5be-47b8-a95d-6bdf4f2d9325 noneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 a52e2cc9-a5be-47b8-a95d-6bdf4f2d9325 替换为您设备的
luksUUID。使用
dracut刷新 initramfs:dracut -f --regenerate-all
$ dracut -f --regenerate-allCopy to Clipboard Copied! Toggle word wrap Toggle overflow
向
/etc/fstab文件中添加一个永久挂载条目:查找活跃 LUKS 块设备的文件系统 UUID:
blkid -p /dev/mapper/lv00_encrypted /dev/mapper/lv00-encrypted: UUID="37bc2492-d8fa-4969-9d9b-bb64d3685aa9" BLOCK_SIZE="4096" TYPE="xfs" USAGE="filesystem"
$ blkid -p /dev/mapper/lv00_encrypted /dev/mapper/lv00-encrypted: UUID="37bc2492-d8fa-4969-9d9b-bb64d3685aa9" BLOCK_SIZE="4096" TYPE="xfs" USAGE="filesystem"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在您选择的文本编辑器中打开
/etc/fstab,并在此文件中添加设备,例如:vi /etc/fstab UUID=37bc2492-d8fa-4969-9d9b-bb64d3685aa9 /home auto rw,user,auto 0
$ vi /etc/fstab UUID=37bc2492-d8fa-4969-9d9b-bb64d3685aa9 /home auto rw,user,auto 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 37bc2492-d8fa-4969-9d9b-bb64d3685aa9 替换为您文件系统的 UUID。
恢复在线加密:
cryptsetup reencrypt --resume-only /dev/mapper/vg00-lv00 Enter passphrase for /dev/mapper/vg00-lv00: Auto-detected active dm device 'lv00_encrypted' for data device /dev/mapper/vg00-lv00. Finished, time 00:31.130, 10272 MiB written, speed 330.0 MiB/s
# cryptsetup reencrypt --resume-only /dev/mapper/vg00-lv00 Enter passphrase for /dev/mapper/vg00-lv00: Auto-detected active dm device 'lv00_encrypted' for data device /dev/mapper/vg00-lv00. Finished, time 00:31.130, 10272 MiB written, speed 330.0 MiB/sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证现有数据是否已加密:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查看加密的空白块设备的状态:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.13.5. 使用带有分离标头的 LUKS2 在块设备上加密现有数据 复制链接链接已复制到粘贴板!
您可以加密块设备上的现有数据,而无需为存储 LUKS 标头创建可用空间。标头存储在分离的位置,它也充当额外的安全层。该流程使用 LUKS2 加密格式。
先决条件
- 块设备有一个文件系统。
已备份了数据。
警告由于硬件、内核或人为故障,您可能会在加密过程中丢失数据。在开始加密数据之前,请确保您有可靠的备份。
流程
卸载设备上的所有文件系统,例如:
umount /dev/nvme0n1p1
# umount /dev/nvme0n1p1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 初始化加密:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 /home/header 替换为带有分离的 LUKS 标头的文件的路径。分离的 LUKS 标头必须可以访问,以便稍后解锁加密设备。
挂载该设备:
mount /dev/mapper/nvme_encrypted /mnt/nvme_encrypted
# mount /dev/mapper/nvme_encrypted /mnt/nvme_encryptedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 恢复在线加密:
cryptsetup reencrypt --resume-only --header /home/header /dev/nvme0n1p1 Enter passphrase for /dev/nvme0n1p1: Auto-detected active dm device 'nvme_encrypted' for data device /dev/nvme0n1p1. Finished, time 00m51s, 10 GiB written, speed 198.2 MiB/s
# cryptsetup reencrypt --resume-only --header /home/header /dev/nvme0n1p1 Enter passphrase for /dev/nvme0n1p1: Auto-detected active dm device 'nvme_encrypted' for data device /dev/nvme0n1p1. Finished, time 00m51s, 10 GiB written, speed 198.2 MiB/sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证使用带有分离标头的 LUKS2 块设备上的现有数据是否已加密:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查看加密的空白块设备的状态:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.13.6. 使用 LUKS2 加密空白块设备 复制链接链接已复制到粘贴板!
您可以加密空白块设备,您可以使用 LUKS2 格式将其用于加密存储。
先决条件
-
空白块设备。您可以使用
lsblk等命令来查找该设备上是否没有实际的数据,例如,文件系统。
流程
将分区设置为加密的 LUKS 分区:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 打开加密的 LUKS 分区:
cryptsetup open /dev/nvme0n1p1 nvme0n1p1_encrypted Enter passphrase for /dev/nvme0n1p1:
# cryptsetup open /dev/nvme0n1p1 nvme0n1p1_encrypted Enter passphrase for /dev/nvme0n1p1:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会解锁分区,并使用设备映射器将其映射到新设备。要不覆盖加密的数据,这个命令会警告内核,该设备是一个加密设备,并使用
/dev/mapper/device_mapped_name路径通过 LUKS 解决了。创建一个文件系统来将加密的数据写入分区,该分区必须可通过设备映射名称访问:
mkfs -t ext4 /dev/mapper/nvme0n1p1_encrypted
# mkfs -t ext4 /dev/mapper/nvme0n1p1_encryptedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 挂载该设备:
mount /dev/mapper/nvme0n1p1_encrypted mount-point
# mount /dev/mapper/nvme0n1p1_encrypted mount-pointCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证空白块设备是否已加密:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查看加密的空白块设备的状态:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.13.7. 在 web 控制台中配置 LUKS 密码短语 复制链接链接已复制到粘贴板!
如果要在系统中的现有逻辑卷中添加加密,则只能通过格式化卷进行。
先决条件
- 已安装 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
-
cockpit-storaged软件包已安装在您的系统上。 - 在没有加密的情况下可用的现有逻辑卷.
流程
登录到 RHEL 8 web 控制台。
详情请参阅 Web 控制台的日志记录。
- 在面板中,单击 Storage。
- 在 Storage 表中,点您要加密的存储设备的菜单按钮,然后单击 。
- 在 Encryption field 中,选择加密规格 LUKS1 或 LUKS2。
- 设置并确认您的新密码短语。
- 可选:修改其他加密选项。
- 完成格式化设置。
- 点 Format。
18.13.8. 在 web 控制台中更改 LUKS 密码短语 复制链接链接已复制到粘贴板!
在 web 控制台中的加密磁盘或分区上更改 LUKS 密码短语。
先决条件
- 已安装 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
-
cockpit-storaged软件包已安装在您的系统上。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 登录到 web 控制台。
- 在面板中,单击 Storage。
- 在 Storage 表中,选择带有加密数据的磁盘。
- 在磁盘页面中,滚动到 Keys 部分,然后点 edit 按钮。
在更改密码短语对话框中:
- 输入您当前的密码短语。
- 输入您的新密码短语。
- 确认您的新密码短语。
- 点击 Save。
18.13.9. 使用 storage RHEL 系统角色创建 LUKS2 加密的卷 复制链接链接已复制到粘贴板!
您可以通过运行 Ansible playbook,使用 storage 角色来创建和配置使用 LUKS 加密的卷。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo权限。
流程
将您的敏感变量存储在一个加密文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:luks_password: <password>
luks_password: <password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。验证 playbook 语法:
ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
查找 LUKS 加密卷的
luksUUID值:ansible managed-node-01.example.com -m command -a 'cryptsetup luksUUID /dev/sdb' 4e4e7970-1822-470e-b55a-e91efe5d0f5c
# ansible managed-node-01.example.com -m command -a 'cryptsetup luksUUID /dev/sdb' 4e4e7970-1822-470e-b55a-e91efe5d0f5cCopy to Clipboard Copied! Toggle word wrap Toggle overflow 查看卷的加密状态:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证创建的 LUKS 加密的卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.14. 使用基于策略的解密配置加密卷的自动解锁 复制链接链接已复制到粘贴板!
基于策略的解密(PBD)是技术的一种集合,可在物理和虚拟上解锁加密的根和硬盘的辅助卷。PBD 使用各种解锁方法,如用户密码、受信任的平台模块(TPM)设备、连接到系统的 PKCS #11 设备,如智能卡或特殊的网络服务器。
PBD 允许将不同的解锁方法合并成一个策略,从而可以以不同的方式解锁同一个卷。RHEL 中 PBD 的当前实现由 Clevis 框架和称为 pins 的插件组成。每个 pin 都提供单独的解锁功能。目前,可提供以下 pins :
tang- 允许使用网络服务器解锁卷。
tpm2- 允许使用 TPM2 策略解锁卷。
sss- 允许使用 Shamir 的 Secret 共享(SSS)加密方案部署高可用性系统。
18.14.1. 网络绑定磁盘加密 复制链接链接已复制到粘贴板!
网络绑定加密 (NBDE) 是基于策略的解密 (PBD) 的子类别,允许将加密的卷绑定到特殊的网络服务器。NBDE 的当前实现包括 Tang 服务器的 Clevis pin 和 Tang 服务器本身。
在 RHEL 中,NBDE 通过以下组件和技术实现:
图 18.1. 使用 LUKS1 加密的卷时的 NBDE 方案。luksmeta 软件包不用于 LUKS2 卷。
Tang 是一个将数据绑定到网络状态的服务器。当系统绑定到某个安全网络时,它会使包含数据的系统变得可用。Tang 是无状态的,不需要 TLS 或身份验证。与基于 escrow 的解决方案不同,服务器存储所有加密密钥并了解以前使用的每个密钥,Tang 从不与任何客户端密钥进行交互,因此不会从客户端获得任何识别信息。
Clevis 是一个自动化解密的可插拔框架。在 NBDE 中,Clevis 提供 LUKS 卷的自动解锁。clevis 软件包提供了该功能的客户端。
Clevis pin 是 Clevis 框架的一个插件。其中一个 pins 是实现与 NBDE 服务器交互的插件 - Tang。
Clevis 和 Tang 是通用的客户端和服务器组件,提供网络绑定加密。在 RHEL 中,它们与 LUKS 一起使用,以加密和解密 root 和非 root 存储卷,以完成网络绑定磁盘加密。
客户端和服务器端组件都使用 José 库来执行加密和解密操作。
当您开始调配 NBDE 时,Tang 服务器的 Clevis pin 将获得 Tang 服务器发布的非对称密钥的列表。或者,由于密钥是非对称的,因此 Tang 的公钥列表可以分发到带外,以便客户端能够在不访问 Tang 服务器的情况下进行操作。此模式称为 脱机调配。
Tang 的 Clevis pin 使用其中一个公钥来生成唯一的强加密的加密密钥。使用此密钥加密数据后,密钥将被丢弃。Clevis 客户端应将此调配操作生成的状态存储在方便的位置。这种加密数据的过程就是 调配步骤。
LUKS 版本 2(LUKS2)是 RHEL 中的默认磁盘加密格式,因此 NBDE 的调配状态作为令牌存储在 LUKS2 标头中。luksmeta 软件包对 NBDE 的调配状态的利用仅用于使用 LUKS1 加密的卷。
Tang 的 Clevis pin 支持 LUKS1 和 LUKS2,不需要规范。Clevis 可以加密纯文本文件,但您必须使用 cryptsetup 工具加密块设备。如需更多信息,请参阅使用 LUKS 加密块设备。
当客户端准备好访问其数据时,它会加载再调配步骤中生成的元数据,并响应恢复加密密钥。此过程是 恢复步骤。
在 NBDE 中,Clevis 使用 pin 绑定 LUKS 卷,以便能自动解锁它。成功完成绑定流程后,可以使用提供的 Dracut 解锁程序解锁磁盘。
如果将 kdump 内核崩溃转储机制设置为将系统内存的内容保存到 LUKS 加密的设备中,则会在第二次内核引导时提示您输入密码。
18.14.2. 部署 SELinux 处于 enforcing 模式的 Tang 服务器 复制链接链接已复制到粘贴板!
您可以使用 Tang 服务器在启用了 Clevis 的客户端上自动解锁 LUKS 加密的卷。在最简单的场景中,您可以通过安装 tang 软件包,并输入 systemctl enable tangd.socket --now 命令将 Tang 服务器部署在端口 80 上。以下示例流程演示了将运行在自定义端口上的 Tang 服务器部署为 SELinux enforcing 模式下受限制的服务。
先决条件
-
policycoreutils-python-utils包及其依赖项已经安装。 -
firewalld服务在运行。
流程
要安装
tang软件包及其依赖项,请以root用户身份输入以下命令:yum install tang
# yum install tangCopy to Clipboard Copied! Toggle word wrap Toggle overflow 选择一个未被占用的端口,例如 7500/tcp,并允许
tangd服务绑定到该端口:semanage port -a -t tangd_port_t -p tcp 7500
# semanage port -a -t tangd_port_t -p tcp 7500Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,一个端口一次只能被一个服务使用,因此试图使用已占用的端口意味着
ValueError:端口已定义错误消息。在防火墙中打开端口:
firewall-cmd --add-port=7500/tcp firewall-cmd --runtime-to-permanent
# firewall-cmd --add-port=7500/tcp # firewall-cmd --runtime-to-permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启用
tangd服务:systemctl enable tangd.socket
# systemctl enable tangd.socketCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建覆盖文件:
systemctl edit tangd.socket
# systemctl edit tangd.socketCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在以下编辑器屏幕中,其打开了位于
/etc/systemd/system/tangd.socket.d/目录中的一个空override.conf文件,通过添加以下行将 Tang 服务器的默认端口从 80 改为之前选择的端口号:[Socket] ListenStream= ListenStream=7500
[Socket] ListenStream= ListenStream=7500Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要在以
# Anything between here和# Lines below this开头的行之间插入之前的代码片段,否则系统会丢弃您的更改。-
保存更改并退出编辑器。在默认
vi编辑器中,您可以通过按 Esc 切换到命令模式,输入:wq并按 Enter 来实现。 重新载入更改的配置:
systemctl daemon-reload
# systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查您的配置是否正常工作:
systemctl show tangd.socket -p Listen Listen=[::]:7500 (Stream)
# systemctl show tangd.socket -p Listen Listen=[::]:7500 (Stream)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动
tangd服务:systemctl restart tangd.socket
# systemctl restart tangd.socketCopy to Clipboard Copied! Toggle word wrap Toggle overflow 由于
tangd使用了systemd套接字激活机制,因此服务器会在第一次连接进来时就立即启动。在第一次启动时会自动生成一组新的加密密钥。要执行手动生成密钥等加密操作,请使用jose工具。
验证
在您的 NBDE 客户端上,使用以下命令验证您的 Tang 服务器是否正常工作。该命令必须返回您传递的与加密和解密相同的消息:
echo test | clevis encrypt tang '{"url":"<tang.server.example.com:7500>"}' -y | clevis decrypt test# echo test | clevis encrypt tang '{"url":"<tang.server.example.com:7500>"}' -y | clevis decrypt testCopy to Clipboard Copied! Toggle word wrap Toggle overflow
18.14.3. 轮转 Tang 服务器密钥并更新客户端上的绑定 复制链接链接已复制到粘贴板!
为安全起见,轮转 Tang 服务器密钥,并定期更新客户端上的现有绑定。轮转它们的确切间隔取决于您的应用程序、密钥大小以及机构策略。
或者,您可以使用 nbde_server RHEL 系统角色来轮转 Tang 密钥。如需更多信息,请参阅 使用 nbde_server 系统角色来设置多个 Tang 服务器。
先决条件
- Tang 服务器在运行。
-
clevis和clevis-luks软件包已安装在您的客户端上。 -
请注意,RHEL 8.2 中已引入了
clevis luks list、clevis luks report和clevis luks regen。
流程
重命名
/var/db/tang密钥数据库目录中的所有密钥,使其前面有一个.,将它们隐藏起来,以防被看到。请注意,以下示例中的文件名与 Tang 服务器的密钥数据库目录中的独特文件名不同:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查是否重命名了,是否隐藏了 Tang 服务器中的所有密钥:
ls -l total 0
# ls -l total 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
/usr/libexec/tangd-keygen命令,在Tang 服务器上的/var/db/tang中生成新的密钥:/usr/libexec/tangd-keygen /var/db/tang ls /var/db/tang 3ZWS6-cDrCG61UPJS2BMmPU4I54.jwk zyLuX6hijUy_PSeUEFDi7hi38.jwk
# /usr/libexec/tangd-keygen /var/db/tang # ls /var/db/tang 3ZWS6-cDrCG61UPJS2BMmPU4I54.jwk zyLuX6hijUy_PSeUEFDi7hi38.jwkCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查您的 Tang 服务器是否可以显示新密钥对的签名密钥,例如:
tang-show-keys 7500 3ZWS6-cDrCG61UPJS2BMmPU4I54
# tang-show-keys 7500 3ZWS6-cDrCG61UPJS2BMmPU4I54Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 NBDE 客户端上,使用
clevis luks report命令检查 Tang 服务器显示的密钥是否保持不变。您可以使用clevis luks list命令识别带有相关绑定的插槽,例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要为新密钥重新生成 LUKS 元数据,在上一个命令提示时按
y,或使用clevis luks regen命令:clevis luks regen -d /dev/sda2 -s 1
# clevis luks regen -d /dev/sda2 -s 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当您确定所有旧客户端都使用新密钥时,您可以从 Tang 服务器中删除旧密钥,例如:
cd /var/db/tang rm .*.jwk
# cd /var/db/tang # rm .*.jwkCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在客户端仍在使用旧密钥时删除旧密钥可能会导致数据丢失。如果您意外删除了这些密钥,请在客户端上使用 clevis luks regen 命令,并手动提供您的 LUKS 密码。
18.14.4. 在 web 控制台中使用 Tang 密钥配置自动解锁 复制链接链接已复制到粘贴板!
您可以使用 Tang 服务器提供的密钥配置 LUKS 加密存储设备的自动解锁。
先决条件
- 已安装 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
-
cockpit-storaged和clevis-luks软件包已安装在您的系统上。 -
cockpit.socket服务运行在9090端口。 - Tang 服务器可用。详情请参阅 部署 SELinux 处于 enforcing 模式的 Tang 服务器。
-
您有
root权限或使用sudo输入管理命令的权限。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 登录到 web 控制台。
- 切换到管理访问权限,提供您的凭据,然后单击 。在 Storage 表中,点包含您计划添加的加密卷的磁盘,来自动解锁。
在以下带有所选磁盘详情的页面中,点 Keys 部分中的 来添加 Tang 密钥:
选择
Tang keyserver作为Key source,提供 Tang 服务器的地址,以及解锁 LUKS 加密设备的密码。点击 确认:
以下对话框窗口提供了一个命令来验证密钥哈希是否匹配。
在 Tang 服务器上的终端中,使用
tang-show-keys命令来显示密钥哈希以进行比较。在本例中,Tang 服务器运行在端口 7500 上:tang-show-keys 7500 x100_1k6GPiDOaMlL3WbpCjHOy9ul1bSfdhI3M08wO0
# tang-show-keys 7500 x100_1k6GPiDOaMlL3WbpCjHOy9ul1bSfdhI3M08wO0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当 web 控制台中的密钥哈希与之前列出的命令的输出中的密钥哈希相同时,请点击 :
-
在 RHEL 8.8 及更高版本中,选择加密的根文件系统和 Tang 服务器后,您可以跳过在内核命令行中添加
rd.neednet=1参数,安装clevis-dracut软件包,以及重新生成一个初始 RAM 磁盘(initrd)。对于非 root 文件系统,web 控制台现在启用remote-cryptsetup.target和clevis-luks-akspass.pathsystemd单元,安装clevis-systemd软件包,并将_netdev参数添加到fstab和crypttab配置文件中。
验证
检查新添加的 Tang 密钥现在是否在 Keys 部分中列出,且类型为
Keyserver:
验证绑定是否在早期引导时可用,例如:
lsinitrd | grep clevis-luks lrwxrwxrwx 1 root root 48 Jan 4 02:56 etc/systemd/system/cryptsetup.target.wants/clevis-luks-askpass.path -> /usr/lib/systemd/system/clevis-luks-askpass.path …
# lsinitrd | grep clevis-luks lrwxrwxrwx 1 root root 48 Jan 4 02:56 etc/systemd/system/cryptsetup.target.wants/clevis-luks-askpass.path -> /usr/lib/systemd/system/clevis-luks-askpass.path …Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.14.5. 基本 NBDE 和 TPM2 加密客户端操作 复制链接链接已复制到粘贴板!
Clevis 框架可以加密纯文本文件,并使用 JSON Web 加密(JWE)格式和 LUKS 加密块设备解密这两个密码文本。Clevis 客户端可以使用 Tang 网络服务器或受信任的平台模块 2.0(TPM 2.0)芯片进行加密操作。
以下命令在包含纯文本文件的示例上演示 Clevis 提供的基本功能。您还可以使用它们来对 NBDE 或 Clevis+TPM 部署进行故障排除。
绑定到 Tang 服务器的加密客户端
要检查 Clevis 加密客户端是否绑定到 Tang 服务器,请使用
clevis encrypt tang子命令:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更改上例中的
http://tang.srv:portURL,使其与安装了tang的服务器的 URL 匹配。secret.jwe输出文件包含您的加密密码文本,格式为 JWE。这个密码文本是从input-plain.txt输入文件中读取的。另外,如果您的配置需要与 Tang 服务器进行非互动通信而无需 SSH 访问,您可以下载公告并将其保存到文件中:
curl -sfg http://tang.srv:port/adv -o adv.jws
$ curl -sfg http://tang.srv:port/adv -o adv.jwsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
adv.jws文件中的公告用于任何以下任务,如文件或消息的加密:echo 'hello' | clevis encrypt tang '{"url":"http://tang.srv:port","adv":"adv.jws"}'$ echo 'hello' | clevis encrypt tang '{"url":"http://tang.srv:port","adv":"adv.jws"}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要解密数据,请使用
clevis decrypt命令,并提供密码文本(JWE):clevis decrypt < secret.jwe > output-plain.txt
$ clevis decrypt < secret.jwe > output-plain.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow
使用 TPM 2.0 加密客户端
要使用 TPM 2.0 芯片加密,请使用
clevis encrypt tpm2子命令以及 JSON 配置对象的唯一参数:clevis encrypt tpm2 '{}' < input-plain.txt > secret.jwe$ clevis encrypt tpm2 '{}' < input-plain.txt > secret.jweCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要选择不同的层次结构、哈希和密钥算法,请指定配置属性,例如:
clevis encrypt tpm2 '{"hash":"sha256","key":"rsa"}' < input-plain.txt > secret.jwe$ clevis encrypt tpm2 '{"hash":"sha256","key":"rsa"}' < input-plain.txt > secret.jweCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要解密数据,请提供 JSON Web 加密(JWE)格式的密码文本:
clevis decrypt < secret.jwe > output-plain.txt
$ clevis decrypt < secret.jwe > output-plain.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow
pin 还支持将数据封装到平台配置寄存器(PCR)状态。这样,只有 PCR 哈希值与密封时使用的策略匹配,数据才能被取消密封。
例如,对于 SHA-256 块要将数据密封到索引为 0 和 7 的 PCR:
clevis encrypt tpm2 '{"pcr_bank":"sha256","pcr_ids":"0,7"}' < input-plain.txt > secret.jwe
$ clevis encrypt tpm2 '{"pcr_bank":"sha256","pcr_ids":"0,7"}' < input-plain.txt > secret.jwe
可以重写 PCR 中的哈希值,您无法再解锁加密的卷。因此,添加了一个强大的密码短语,以便您手动解锁加密的卷,即使 PCR 中的值有变化也是如此。
如果在升级 shim-x64 软件包后系统无法自动解锁加密的卷,请参阅红帽知识库解决方案 Clevis TPM2 不再重启后解密 LUKS 设备。
18.14.6. 配置 NBDE 客户端以自动解锁 LUKS 加密卷 复制链接链接已复制到粘贴板!
使用 Clevis 框架,您可以在所选的 Tang 服务器可用时配置客户端来自动解锁 LUKS 加密卷。这创建一个 NBDE (网络绑定磁盘加密)部署。
先决条件
- Tang 服务器正在运行且可用。
流程
要自动解锁现有的 LUKS 加密卷,请安装
clevis-luks子软件包:yum install clevis-luks
# yum install clevis-luksCopy to Clipboard Copied! Toggle word wrap Toggle overflow 识别 PBD 的 LUKS 加密卷。在以下示例中,块设备是指 /dev/sda2 :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
clevis luks bind命令将卷绑定到 Tang 服务器:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令执行四个步骤:
- 使用与 LUKS 主密钥相同的无序状态测量法创建新的密钥。
- 使用 Clevis 加密新密钥.
- 将 Clevis JWE 对象存储在 LUKS2 标头令牌中,或者使用 LUKSMeta(如果使用非默认的 LUKS1 标头)。
- 启用与 LUKS 一起使用的新密钥。
注意绑定过程假定至少有一个可用的 LUKS 密码插槽。
clevis luks bind命令占用了其中一个插槽。现在可以使用您的现有密码和 Clevis 策略来解锁卷。
要使早期的引导系统处理磁盘绑定,请在已安装的系统上使用
dracut工具。在 RHEL 中,Clevis 生成一个没有特定于主机配置选项的通用initrd(初始 RAM 磁盘),没有向内核命令行自动添加rd.neednet=1等参数。如果您的配置依赖于在早期引导期间需要网络的 Tang pin ,请在检测到 Tang 绑定时使用--hostonly-cmdline参数和dracutaddrd.neednet=1:安装
clevis-dracut软件包:yum install clevis-dracut
# yum install clevis-dracutCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重新生成初始 RAM 磁盘:
dracut -fv --regenerate-all --hostonly-cmdline
# dracut -fv --regenerate-all --hostonly-cmdlineCopy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,在
/etc/dracut.conf.d/目录中创建一个 .conf 文件,并将hostonly_cmdline=yes选项添加到该文件中。然后,您可以使用没有-hostonly-cmdline的dracut,例如:echo "hostonly_cmdline=yes" > /etc/dracut.conf.d/clevis.conf dracut -fv --regenerate-all
# echo "hostonly_cmdline=yes" > /etc/dracut.conf.d/clevis.conf # dracut -fv --regenerate-allCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您还可以通过使用安装了 Clevis 的系统上的
grubby工具,确保在早期引导时 Tang pin 的网络可用:grubby --update-kernel=ALL --args="rd.neednet=1"
# grubby --update-kernel=ALL --args="rd.neednet=1"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证 Clevis JWE 对象是否已成功放在 LUKS 标头中,使用
clevis luks list命令:clevis luks list -d /dev/sda2 1: tang '{"url":"http://tang.srv:port"}'# clevis luks list -d /dev/sda2 1: tang '{"url":"http://tang.srv:port"}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查绑定是否对早期引导可用,例如:
lsinitrd | grep clevis-luks lrwxrwxrwx 1 root root 48 Jan 4 02:56 etc/systemd/system/cryptsetup.target.wants/clevis-luks-askpass.path -> /usr/lib/systemd/system/clevis-luks-askpass.path …
# lsinitrd | grep clevis-luks lrwxrwxrwx 1 root root 48 Jan 4 02:56 etc/systemd/system/cryptsetup.target.wants/clevis-luks-askpass.path -> /usr/lib/systemd/system/clevis-luks-askpass.path …Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.14.7. 配置具有静态 IP 配置的 NBDE 客户端 复制链接链接已复制到粘贴板!
要将 NBDE 用于具有静态 IP 配置(没有 DHCP)的客户端,您必须手动将网络配置传递给 dracut 工具。
先决条件
- Tang 服务器正在运行且可用。
NBDE 客户端被配置为自动解锁 Tang 服务器加密的卷。
详情请参阅 为自动解锁 LUKS 加密的卷配置 NBDE 客户端。
步骤
您可以将静态网络配置提供为
dracut命令中kernel-cmdline选项的值,例如:dracut -fv --regenerate-all --kernel-cmdline "ip=192.0.2.10::192.0.2.1:255.255.255.0::ens3:none nameserver=192.0.2.100"
# dracut -fv --regenerate-all --kernel-cmdline "ip=192.0.2.10::192.0.2.1:255.255.255.0::ens3:none nameserver=192.0.2.100"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,在
/etc/dracut.conf.d/目录中创建一个带有静态网络信息的 .conf 文件,然后重新生成初始 RAM 磁盘镜像:cat /etc/dracut.conf.d/static_ip.conf kernel_cmdline="ip=192.0.2.10::192.0.2.1:255.255.255.0::ens3:none nameserver=192.0.2.100" dracut -fv --regenerate-all
# cat /etc/dracut.conf.d/static_ip.conf kernel_cmdline="ip=192.0.2.10::192.0.2.1:255.255.255.0::ens3:none nameserver=192.0.2.100" # dracut -fv --regenerate-allCopy to Clipboard Copied! Toggle word wrap Toggle overflow
18.14.8. 使用 TPM 2.0 策略配置 LUKS 加密的卷的手动注册 复制链接链接已复制到粘贴板!
您可以使用受信任的平台模块 2.0 (TPM 2.0)策略配置 LUKS 加密卷的解锁。
先决条件
- 一个可访问的 TPM 2.0 兼容设备。
- 具有 64 位 Intel 或 64 位 AMD 架构的系统。
步骤
要自动解锁现有的 LUKS 加密卷,请安装
clevis-luks子软件包:yum install clevis-luks
# yum install clevis-luksCopy to Clipboard Copied! Toggle word wrap Toggle overflow 识别 PBD 的 LUKS 加密卷。在以下示例中,块设备是指 /dev/sda2 :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
clevis luks bind命令将卷绑定到 TPM 2.0 设备,例如:clevis luks bind -d /dev/sda2 tpm2 '{"hash":"sha256","key":"rsa"}' ... Do you wish to initialize /dev/sda2? [yn] y Enter existing LUKS password:# clevis luks bind -d /dev/sda2 tpm2 '{"hash":"sha256","key":"rsa"}' ... Do you wish to initialize /dev/sda2? [yn] y Enter existing LUKS password:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令执行四个步骤:
- 使用与 LUKS 主密钥相同的无序状态测量法创建新的密钥。
- 使用 Clevis 加密新密钥.
- 将 Clevis JWE 对象存储在 LUKS2 标头令牌中,或者使用 LUKSMeta(如果使用非默认的 LUKS1 标头)。
启用与 LUKS 一起使用的新密钥。
注意绑定过程假定至少有一个可用的 LUKS 密码插槽。
clevis luks bind命令占用了其中一个插槽。或者,如果您要将数据封装为特定的平台配置寄存器(PCR)状态,请在
clevis luks bind命令中添加pcr_bank和pcr_ids值,例如:clevis luks bind -d /dev/sda2 tpm2 '{"hash":"sha256","key":"rsa","pcr_bank":"sha256","pcr_ids":"0,1"}'# clevis luks bind -d /dev/sda2 tpm2 '{"hash":"sha256","key":"rsa","pcr_bank":"sha256","pcr_ids":"0,1"}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要由于只有 PCR 哈希值与密封时使用的策略匹配,并且可以重写哈希时,数据才会被解封,因此添加一个强大的密码短语,以便您可以在 PCR 中的值变化时手动解锁加密的卷。
如果在升级
shim-x64软件包后系统无法自动解锁加密的卷,请参阅红帽知识库解决方案 Clevis TPM2 不再在重启后解密 LUKS 设备。
- 现在可以使用您的现有密码和 Clevis 策略来解锁卷。
要启用早期引导系统来处理磁盘绑定,请在已安装的系统上使用
dracut工具:yum install clevis-dracut dracut -fv --regenerate-all
# yum install clevis-dracut # dracut -fv --regenerate-allCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要验证 Clevis JWE 对象是否已成功放入 LUKS 标头中,请使用
clevis luks list命令:clevis luks list -d /dev/sda2 1: tpm2 '{"hash":"sha256","key":"rsa"}'# clevis luks list -d /dev/sda2 1: tpm2 '{"hash":"sha256","key":"rsa"}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.14.9. 手动从 LUKS 加密卷中删除 Clevis pin 复制链接链接已复制到粘贴板!
使用以下步骤手动删除 clevis luks bind 命令创建的元数据,以及擦除包含 Clevis 添加的密码短语的密钥插槽。
从 LUKS 加密卷中删除 Clevis pin 的建议方法是通过 clevis luks unbind 命令。使用 clevis luks unbind 的删除过程只包含一个步骤,适用于 LUKS1 和 LUKS2 卷。以下示例命令删除绑定步骤创建的元数据,并擦除了 /dev/sda2 设备上的密钥插槽 1 :
clevis luks unbind -d /dev/sda2 -s 1
# clevis luks unbind -d /dev/sda2 -s 1
先决条件
- 具有 Clevis 绑定的 LUKS 加密卷。
步骤
检查卷(如
/dev/sda2)是使用哪个 LUKS 版本加密的,并标识绑定到 Clevis 的插槽和令牌:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在上例中,Clevis 令牌标识为
0,关联的密钥插槽是1。如果是 LUKS2 加密,请删除令牌:
cryptsetup token remove --token-id 0 /dev/sda2
# cryptsetup token remove --token-id 0 /dev/sda2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您的设备由 LUKS1 加密,由
Version 表示:1string 在cryptsetup luksDump命令的输出中,使用luksmetaflush 命令执行这个额外步骤:luksmeta wipe -d /dev/sda2 -s 1
# luksmeta wipe -d /dev/sda2 -s 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 擦除包含 Clevis 密码短语的密钥插槽:
cryptsetup luksKillSlot /dev/sda2 1
# cryptsetup luksKillSlot /dev/sda2 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.14.10. 使用 Kickstart 配置 LUKS 加密的卷的自动注册 复制链接链接已复制到粘贴板!
按照此流程中的步骤配置使用 Clevis 注册 LUKS 加密卷的自动安装过程。
步骤
指示 Kickstart 对磁盘进行分区,以便使用临时密码为所有挂载点(除
/boot)启用了 LUKS 加密。注册过程的这一步中的密码是临时密码。part /boot --fstype="xfs" --ondisk=vda --size=256 part / --fstype="xfs" --ondisk=vda --grow --encrypted --passphrase=temppass
part /boot --fstype="xfs" --ondisk=vda --size=256 part / --fstype="xfs" --ondisk=vda --grow --encrypted --passphrase=temppassCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,兼容 OSPP 的系统需要更复杂的配置,例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过在
%packages部分中列出它们来安装相关的 Clevis 软件包:%packages clevis-dracut clevis-luks clevis-systemd %end
%packages clevis-dracut clevis-luks clevis-systemd %endCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 可选:为确保您可以在需要时手动解锁加密的卷,请在删除临时密码短语前添加强大的密码短语。如需更多信息,请参阅红帽知识库解决方案 如何将密码短语、密钥或密钥文件添加到现有 LUKS 设备。
在
%post部分中调用clevis luks bind来执行绑定。之后,删除临时密码:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您的配置依赖于在早期引导过程中需要网络的 Tang pin,或者使用带有静态 IP 配置的 NBDE 客户端,那么您必须修改
dracut命令,如 配置 LUKS 加密卷的手动注册 中所述。请注意,RHEL 8.3 提供了
clevis luks bind命令的-y选项。在 RHEL 8.2 及更旧版本中,在clevis luks bind命令中将-y替换为-f,并从 Tang 服务器下载公告:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 警告cryptsetup luksRemoveKey命令可以防止对应用该命令的 LUKS2 设备进行任何进一步的管理。您只能对 LUKS1 设备使用dmsetup命令恢复删除的主密钥。
在使用 TPM 2.0 策略而不是 Tang 服务器时,您可以使用类似的流程。
18.14.11. 配置 LUKS 加密的可移动存储设备的自动解锁 复制链接链接已复制到粘贴板!
您可以设置 LUKS 加密的 USB 存储设备的自动解锁过程。
步骤
要自动解锁 LUKS 加密的可移动存储设备,如 USB 驱动器,请安装
clevis-udisks2软件包:yum install clevis-udisks2
# yum install clevis-udisks2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启系统,然后使用
clevis luks bind命令执行绑定步骤,如 配置 LUKS 加密卷的手动注册 中所述,例如:clevis luks bind -d /dev/sdb1 tang '{"url":"http://tang.srv"}'# clevis luks bind -d /dev/sdb1 tang '{"url":"http://tang.srv"}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 现在,可以在 GNOME 桌面会话中自动解锁 LUKS 加密的可移动设备。绑定到 Clevis 策略的设备也可以通过
clevis luks unlock命令解锁:clevis luks unlock -d /dev/sdb1
# clevis luks unlock -d /dev/sdb1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在使用 TPM 2.0 策略而不是 Tang 服务器时,您可以使用类似的流程。
18.14.12. 部署高可用性 NBDE 系统 复制链接链接已复制到粘贴板!
Tang 提供两种构建高可用性部署的方法:
- 客户端冗余(推荐)
-
客户端应配置成能够绑定到多个 Tang 服务器。在此设置中,每个 Tang 服务器都有自己的密钥,客户端可以通过联系这些服务器的子集来进行解密。Clevis 已通过其
sss插件支持此工作流。红帽建议对高可用性部署使用这个方法。 - 密钥共享
-
出于冗余的目的,可以部署多个 Tang 实例。要设置第二个或后续的实例,请安装
tang软件包,并使用rsync,通过SSH将密钥目录复制到新主机上。请注意,红帽不推荐此方法,因为共享密钥会增加密钥的风险,需要额外的自动化基础设施。
使用 Shamir 的 Secret 共享的高可用性 NBDE
Shamir 的 Secret 共享(SSS)是一种加密方案,可将Secret 分成多个独特的部分。要重建 secret,需要几个部分。数字称为阈值,SSS 也被称为阈值方案。
Clevis 提供 SSS 的实施。它创建一个密钥,并将其分为若干个片。每片都使用另一个 pin 进行加密,甚至包括递归 SSS。另外,您可以定义阈值 t。如果 NBDE 部署至少解密了 t 片,那么它将恢复加密密钥,并且解密过程会成功。当 Clevis 检测到比阈值中指定的部分少时,它会打印错误消息。
示例 1:带有两个 Tang 服务器的冗余
当两个 Tang 服务器中至少有一个可用时,以下命令会解密 LUKS 加密设备:
clevis luks bind -d /dev/sda1 sss '{"t":1,"pins":{"tang":[{"url":"http://tang1.srv"},{"url":"http://tang2.srv"}]}}'
# clevis luks bind -d /dev/sda1 sss '{"t":1,"pins":{"tang":[{"url":"http://tang1.srv"},{"url":"http://tang2.srv"}]}}'
上一命令使用以下配置方案:
在此配置中,SSS 阈值 t 设置为 1,如果列出的两个 tang 服务器中至少有一台可用,则 clevis luks bind 命令可以成功重建 secret。
示例 2:Tang 服务器和 TPM 设备中的共享 secret
当 tang 服务器和 tpm2 设备都可用时,以下命令可成功解密 LUKS 加密设备:
clevis luks bind -d /dev/sda1 sss '{"t":2,"pins":{"tang":[{"url":"http://tang1.srv"}], "tpm2": {"pcr_ids":"0,7"}}}'
# clevis luks bind -d /dev/sda1 sss '{"t":2,"pins":{"tang":[{"url":"http://tang1.srv"}], "tpm2": {"pcr_ids":"0,7"}}}'
现在 SSS 阀值 't' 设置为 '2' 的配置方案是:
18.14.13. NBDE 网络中虚拟机的部署 复制链接链接已复制到粘贴板!
clevis luks bind 命令不会改变 LUKS 主密钥。这意味着,如果您创建了一个在虚拟机或云环境中使用的 LUKS 加密镜像,则所有运行此镜像的实例都会共享一个主密钥。这极其不安全,应始终避免。
这不是 Clevis 的一个限制,而是 LUKS 的设计原则。如果您的场景需要在云中有加密的根卷,请对云中的每个 Red Hat Enterprise Linux 实例执行安装过程(通常使用 Kickstart)。如果没有共享 LUKS 主密钥,就无法共享镜像。
要在虚拟环境中部署自动解锁,请将诸如 lorax 或 virt-install 的系统与 Kickstart 文件一起使用(请参阅 使用 Kickstart 配置 LUKS 加密卷的自动注册)或其它自动配置工具来确保每个加密的虚拟机都有一个唯一的主密钥。
18.14.14. 使用 NBDE 为云环境构建可自动注册的虚拟机镜像 复制链接链接已复制到粘贴板!
在云环境中部署可自动注册的加密镜像会带来一系列独特的挑战。与其他虚拟化环境一样,建议减少从一个镜像启动的实例数量,以避免共享 LUKS 主密钥。
因此,最佳实践是创建自定义映像,这些映像不在任何公共存储库中共享,为部署有限数量的实例提供了基础。要创建的实例的确切数量应当由部署的安全策略定义,并且基于与 LUKS 主密钥攻击向量相关联的风险容忍度。
要构建启用 LUKS 的自动化部署,应当使用 Lorax 或 virt-install 等系统以及一个 Kickstart 文件,来确保镜像构建过程中主密钥的唯一性。
云环境支持我们在这里考虑的两种 Tang 服务器部署选项。首先,Tang 服务器可以在云环境本身中部署。其次,Tang 服务器可以部署在云外的独立的基础架构上,并且这两个基础架构之间有 VPN 连接。
在云中原生部署 Tang 可以轻松部署。但是,考虑到它与其他系统的密文数据持久性层共享基础设施,因此 Tang 服务器的私钥和 Clevis 元数据可以存储在同一个物理磁盘上。对这个物理磁盘的访问允许密文数据的完全泄露。
始终在存储数据的地方和运行 Tang 的系统之间保持物理隔离。在云和 Tang 服务器之间的这种隔离可确保 Tang 服务器的私钥不会被意外与 Clevis 元数据组合。如果云基础设施面临风险,它还提供了对 Tang 服务器的本地控制。
18.14.15. 将 Tang 部署为容器 复制链接链接已复制到粘贴板!
tang 容器镜像为在 OpenShift Container Platform(OCP)集群中或独立虚拟机运行的 Clevis 客户端提供 Tang-server 解密功能。
先决条件
-
podman软件包及其依赖项已安装在系统上。 -
你可以使用
podman login registry.redhat.io命令登录到registry.redhat.io容器目录。如需更多信息,请参阅 红帽容器注册表身份验证。 - Clevis 客户端安装在包含 LUKS 加密卷的系统上,您希望使用 Tang 服务器自动解锁这些卷。
流程
从
registry.redhat.ioregistry 中拉取tang容器镜像:podman pull registry.redhat.io/rhel8/tang
# podman pull registry.redhat.io/rhel8/tangCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行容器,指定其端口,并指定到 Tang 密钥的路径。前面的示例运行
tang容器,指定端口 7500,并指示到/var/db/tang目录的 Tang 密钥的路径:podman run -d -p 7500:7500 -v tang-keys:/var/db/tang --name tang registry.redhat.io/rhel8/tang
# podman run -d -p 7500:7500 -v tang-keys:/var/db/tang --name tang registry.redhat.io/rhel8/tangCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,Tang 默认使用端口 80,但这可能与其他服务冲突,如 Apache HTTP 服务器。
可选:为提高安全性,请定期轮转 Tang 密钥。您可以使用
tangd-rotate-keys脚本,例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在包含 LUKS 加密卷的系统上,通过 Tang 服务器自动解锁,检查 Clevis 客户端是否可以使用 Tang 加密和解密纯文本消息:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 localhost URL 上的 Tang 服务器可用并通过端口 7500 进行通信时,上一示例命令在其输出的末尾显示
test字符串。
18.14.16. 使用 RHEL 系统角色配置 NBDE 复制链接链接已复制到粘贴板!
您可以使用 nbde_client 和 nbde_server RHEL 系统角色使用 Clevis 和 Tang 自动部署基于策略的解密(PBD)解决方案。rhel-system-roles 包中包含了这些系统角色、相关的例子以及参考文档。
18.14.16.1. 使用 nbde_server RHEL 系统角色设置多个 Tang 服务器 复制链接链接已复制到粘贴板!
通过使用 nbde_server 系统角色,您可以部署和管理 Tang 服务器作为自动磁盘加密解决方案的一部分。此角色支持以下功能:
- 轮转 Tang 密钥
- 部署和备份 Tang 密钥
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此示例 playbook 确保部署 Tang 服务器和密钥轮转。
示例 playbook 中指定的设置包括以下内容:
nbde_server_manage_firewall: true-
使用
firewall系统角色管理nbde_server角色使用的端口。 nbde_server_manage_selinux: true使用
selinux系统角色管理nbde_server角色使用的端口。有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.nbde_server/README.md文件。
验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在您的 NBDE 客户端上,使用以下命令验证您的 Tang 服务器是否正常工作。该命令必须返回您传递的与加密和解密相同的消息:
ansible managed-node-01.example.com -m command -a 'echo test | clevis encrypt tang '{"url":"<tang.server.example.com>"}' -y | clevis decrypt' test# ansible managed-node-01.example.com -m command -a 'echo test | clevis encrypt tang '{"url":"<tang.server.example.com>"}' -y | clevis decrypt' testCopy to Clipboard Copied! Toggle word wrap Toggle overflow
nbde_client 系统角色使您能够以自动化的方式部署多个Clevis客户端。
此角色支持将 LUKS 加密卷绑定到一个或多个网络绑定(NBDE)服务器 - Tang 服务器。您可以使用密码短语保留现有的卷加密,或者将其删除。删除密码短语后,您只能使用 NBDE 解锁卷。当卷最初是使用在置备系统后会删除的临时密钥或密码进行加密时,这非常有用,
如果您同时提供密语和密钥文件,角色将使用您首先提供的那一个。如果找不到任何有效密语或密码,它将尝试从现有的绑定中检索密码短语。
基于策略的解密(PBD)将绑定定义为设备到插槽的映射。这意味着对同一个设备你可以有多个绑定。默认插槽是插槽 1。
nbde_client 系统角色只支持 Tang 绑定。因此,您无法将其用于 TPM2 绑定。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo权限。 - 已使用 LUKS 加密的卷。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个示例 playbook 配置 Clevis 客户端,以便在两个 Tang 服务器中至少有一个可用时自动解锁两个 LUKS 加密卷。
示例 playbook 中指定的设置包括以下内容:
state: present-
state的值表示运行 playbook 后的配置。使用present值来创建新绑定或更新现有绑定。与clevis luks bind命令不同,您可以使用state: present来覆盖其设备插槽中的现有绑定。absent的值会删除指定的绑定。 nbde_client_early_boot: truenbde_client角色可确保 Tang pin 的网络默认在早期引导时可用。如果您需要禁用此功能,请在 playbook 中添加nbde_client_early_boot: false变量。有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.nbde_client/README.md文件。
验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在 NBDE 客户端中,检查您的 Tang 服务器是否应自动解锁的加密卷,其中包含其 LUKS pin 中对应的信息:
ansible managed-node-01.example.com -m command -a 'clevis luks list -d /dev/rhel/root' 1: tang '{"url":"<http://server1.example.com/>"}' 2: tang '{"url":"<http://server2.example.com/>"}'# ansible managed-node-01.example.com -m command -a 'clevis luks list -d /dev/rhel/root' 1: tang '{"url":"<http://server1.example.com/>"}' 2: tang '{"url":"<http://server2.example.com/>"}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果不使用
nbde_client_early_boot: false变量,请验证绑定可用于早期引导,例如:ansible managed-node-01.example.com -m command -a 'lsinitrd | grep clevis-luks' lrwxrwxrwx 1 root root 48 Jan 4 02:56 etc/systemd/system/cryptsetup.target.wants/clevis-luks-askpass.path -> /usr/lib/systemd/system/clevis-luks-askpass.path …
# ansible managed-node-01.example.com -m command -a 'lsinitrd | grep clevis-luks' lrwxrwxrwx 1 root root 48 Jan 4 02:56 etc/systemd/system/cryptsetup.target.wants/clevis-luks-askpass.path -> /usr/lib/systemd/system/clevis-luks-askpass.path …Copy to Clipboard Copied! Toggle word wrap Toggle overflow
nbde_client RHEL 系统角色只支持使用动态主机配置协议(DHCP)的情况。在带有静态 IP 配置的 NBDE 客户端中,您必须将网络配置作为内核引导参数传递。
通常,管理员希望重复使用 playbook,且不会为 Ansible 在早期引导过程中为其分配静态 IP 地址的每个主机维护单独的 playbook。在这种情况下,您可以在 playbook 中使用变量并在外部文件中提供设置。因此,您只需要一个 playbook 和一个带有设置的文件。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo权限。 - 已使用 LUKS 加密的卷。
流程
使用主机的网络设置创建文件,如
static-ip-settings-clients.yml,并添加您要动态分配给主机的值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此 playbook 为
~/static-ip-settings-clients.yml文件中列出的每个主机动态读取某些值。有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.network/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 19 章 使用 SELinux 复制链接链接已复制到粘贴板!
19.1. SELinux 入门 复制链接链接已复制到粘贴板!
SELinux(Security Enhanced Linux)提供了一个额外的系统安全层。SELinux 从根本上回答问题:<subject> do <action> to <object>?,例如:Web 服务器是否可以访问用户主目录中的文件?
19.1.1. SELinux 简介 复制链接链接已复制到粘贴板!
系统管理员一般无法通过基于用户、组群和其它权限(称为 Discretionary Access Control,DAC)的标准访问策略生成全面、精细的安全策略。例如,限制特定应用程序只能查看日志文件,而同时允许其他应用程序在日志文件中添加新数据。
Security Enhanced Linux(SELinux)实施强制访问控制(MAC)。每个进程和系统资源都有一个特殊的安全性标签,称为 SELinux 上下文(context)。SELinux 上下文有时被称为 SELinux 标签,它是一个提取系统级别细节并专注于实体的安全属性的标识符。这不仅提供了在 SELinux 策略中引用对象的一个一致方法,而且消除了在其他身份识别系统中可能存在的模糊性。例如,某个文件可以在使用绑定挂载的系统中有多个有效的路径名称。
SELinux 策略在一系列规则中使用这些上下文,它们定义进程如何相互交互以及与各种系统资源进行交互。默认情况下,策略不允许任何交互,除非规则明确授予了相应的权限。
请记住,对 SELinux 策略规则的检查是在 DAC 规则后进行的。如果 DAC 规则已拒绝了访问,则不会使用 SELinux 策略规则。这意味着,如果传统的 DAC 规则已阻止了访问,则不会在 SELinux 中记录拒绝信息。
SELinux 上下文包括以下字段: user(用户)、role(角色)、type(类型)和 security level(安全级别)。在 SELinux 策略中,SELinux 类型信息可能是最重要的。这是因为,最常用的、用于定义允许在进程和系统资源间进行的交互的策略规则会使用 SELinux 类型而不是 SELinux 的完整上下文。SELinux 类型以 _t 结尾.例如,Web 服务器的类型名称是 httpd_t。通常位于 /var/www/html/ 中的文件和目录的类型上下文是 httpd_sys_content_t。通常位于 /tmp 和 /var/tmp/ 中的文件和目录的类型上下文是tmp_t。Web 服务器端口的类型上下文是 http_port_t。
有一个策略规则允许 Apache(作为 httpd_t运行的 Web 服务器进程)访问 /var/www/html/ 和其他 Web 服务器目录(httpd_sys_content_t)中通常找到的文件和目录。策略中没有针对通常位于 /tmp 和 中的文件的允许规则,因此不允许访问。有了 SELinux,即使 Apache 被破坏并且恶意的脚本可以访问,它仍然无法访问 /var/tmp //tmp 目录。
图 19.1. 通过 SELinux 以安全的方式运行 Apache 和 MariaDB 的示例。
如上例所示,SELinux 允许以 httpd_t 身份运行的 Apache 进程访问 /var/www/html/ 目录,并且拒绝同一进程访问 /data/mysql/ 目录,因为 httpd_t 和 类型上下文没有允许规则。另一方面,作为 mysqld_db_t mysqld_t 运行的 MariaDB 进程能够访问 /data/mysql/ 目录,SELinux 也正确拒绝类型为 mysqld_t 的进程,以访问标记为 的 httpd_ sys_content_t/var/www/html/ 目录。
19.1.2. 运行 SELinux 的好处 复制链接链接已复制到粘贴板!
SELinux 提供以下优点:
- 所有进程和文件都被标记。SELinux 策略规则定义了进程如何与文件交互,以及进程如何相互交互。只有存在明确允许的 SELinux 策略规则时,才能允许访问。
- SELinux 提供精细的访问控制。传统的 UNIX 通过用户的授权、基于 Linux 的用户和组进行控制。而 SELinux 的访问控制基于所有可用信息,如 SELinux 用户、角色、类型以及可选的安全级别。
- SELinux 策略由系统管理员进行定义,并在系统范围内强制执行。
- SELinux 可以缓解权限升级攻击。进程在域中运行,因此是相互分离的。SELinux 策略规则定义了如何处理访问文件和其它进程。如果某个进程被破坏,攻击者只能访问该进程的正常功能,而且只能访问已被配置为可以被该进程访问的文件。例如:如果 Apache HTTP 服务器被破坏,攻击者无法使用该进程读取用户主目录中的文件,除非添加或者配置了特定的 SELinux 策略规则允许这类访问。
- SELinux 可以强制实施数据保密性和完整性,并可以防止进程不受不受信任的输入的影响。
SELinux 旨在增强现有的安全解决方案,而不是替换 antivirus 软件、安全密码、防火墙或其他安全系统。即使运行 SELinux,仍需要遵循好的安全实践,如保持软件更新、使用安全的密码、使用防火墙。
19.1.3. SELinux 示例 复制链接链接已复制到粘贴板!
以下示例演示了 SELinux 如何提高安全性:
- 默认操作为 deny(拒绝)。如果 SELinux 策略规则不存在允许访问(如允许进程打开一个文件),则拒绝访问。
-
SELinux 可以限制 Linux 用户。SELinux 策略中包括很多受限制的 SELinux 用户。可将 Linux 用户映射到受限制的 SELinux 用户,以便利用其使用的安全规则和机制。例如,将 Linux 用户映射到 SELinux
user_u用户,使得 Linux 用户将无法运行,除非有其他配置的用户 ID(setuid)应用程序,如sudo和su。 - 增加进程和数据的分离。SELinux 域(domain)的概念允许定义哪些进程可以访问某些文件和目录。例如:在运行 SELinux 时,除非有其他配置,攻击者将无法侵入 Samba 服务器,然后使用 Samba 服务器作为攻击向量读取和写入其它进程使用的文件(如 MariaDB 数据库)。
-
SELinux 可帮助缓解配置错误带来的破坏。在区传输(zone transfer)过程中,不同的 DNS 服务器通常会在彼此间复制信息。攻击者可以利用区传输来更新 DNS 服务器使其包括错误的信息。当在 Red Hat Enterprise Linux 中使用 BIND(Berkeley Internet Name Domain)作为 DNS 服务器运行时,即使管理员没有限制哪些服务器可执行区传输,默认的 SELinux 策略也会阻止区文件 [1] 通过 BIND
named守护进程本身或其它进程,使用区传输。 -
如果没有 SELinux,攻击者可以利用漏洞在 Apache Web 服务器上路径遍历,并使用特殊元素(如
../)访问存储在文件系统中的文件和目录。如果攻击者尝试对使用了强制模式运行 SELinux 的服务器进行攻击,SELinux 会拒绝对httpd进程不能访问的文件的访问。虽然 SELinux 无法完全阻止这型的攻击,但它可以有效地缓解它。 -
使用强制(enforcing)模式的 SELinux 可以成功防止利用 kernel NULL pointer dereference operators on non-SMAP platforms (CVE-2019-9213) 安全漏洞进行攻击。攻击者可以利用
mmap功能中的一个漏洞(不检查 null 页面的映射)将任意代码放在本页中。 -
deny_ptraceSELinux boolean 和使用 enforcing 模式的 SELinux 的系统可以防止利用 PTRACE_TRACEME 安全漏洞 (CVE-2019-13272) 进行的攻击。这种配置可以防止攻击者获得root特权。 -
nfs_export_all_rw和nfs_export_all_roSELinux 布尔值提供了一个易于使用的工具,以防止错误配置网络文件系统 (NFS),如意外地共享了/home目录。
19.1.4. SELinux 构架和软件包 复制链接链接已复制到粘贴板!
SELinux 是一个内置在 Linux 内核中的 Linux 安全模块(LSM)。内核中的 SELinux 子系统由安全策略驱动,该策略由管理员控制并在引导时载入。系统中所有与安全性相关的、内核级别的访问操作都会被 SELinux 截取,并在加载的安全策略上下文中检查。如果载入的策略允许操作,它将继续进行。否则,操作会被阻断,进程会收到一个错误。
SELinux 决策(如允许或禁止访问)会被缓存。这个缓存被称为 Access Vector Cache(AVC)。通过使用这些缓存的决定,可以较少对 SELinux 策略规则的检查,这会提高性能。请记住,如果 DAC 规则已首先拒绝了访问,则 SELinux 策略规则无效。原始审计消息记录到 /var/log/audit/audit.log 中,它们以 type=AVC 字符串开头。
在 RHEL 8 中,系统服务由 systemd 守护进程控制;systemd 启动 和停止所有服务,用户和进程使用 systemctl 实用程序与 systemd 通信。systemd 守护进程可以参考 SELinux 策略,检查调用进程的标签以及调用者尝试管理的单元文件标签,然后询问 SELinux 是否允许调用者访问。这个方法可控制对关键系统功能的访问控制,其中包括启动和停止系统服务。
systemd 守护进程也充当 SELinux 访问管理器。它检索运行 systemctl 的进程的标签,或向 systemd 发送 D-Bus 消息的进程标签。然后守护进程会查找进程要配置的单元文件标签。最后,如果 SELinux 策略允许进程标签和单元文件标签之间的特定访问,systemd 可以从内核检索信息。这意味着,SELinux 现在可以限制需要与 systemd 交互特定服务的被破坏的应用。策略作者也可以使用这些精细的控制来限制管理员。
如果进程正在向另一个进程发送 D-Bus 消息,如果 SELinux 策略不允许这两个进程 的 D-Bus 通信,则系统将打印 USER_AVC 拒绝消息,并且 D-Bus 通信超时。请注意,两个进程之间的 D-Bus 通信可以双向运行。
为了避免不正确的 SELinux 标记和后续问题,请确保使用 systemctl start 命令启动 服务。
RHEL 8 提供以下用于 SELinux 的软件包:
-
策略:
selinux-policy-targeted、selinux-policy-mls -
工具:policy
coreutils、policycoreutils-gui、libselinux-utils、policycoreutils-python-utils、setools-console、checkpolicy
19.1.5. SELinux 状态和模式 复制链接链接已复制到粘贴板!
SELinux 可使用三种模式之一运行: enforcing(强制)、permissive(宽容)或 disabled(禁用)。
- Enforcing 模式是默认操作模式,在 enforcing 模式下 SELinux 可正常运行,并在整个系统中强制实施载入的安全策略。
- 在 permissive 模式中,系统会象 enforcing 模式一样加载安全策略,包括标记对象并在日志中记录访问拒绝条目,但它并不会拒绝任何操作。不建议在生产环境系统中使用 permissive 模式,但 permissive 模式对 SELinux 策略开发和调试很有帮助。
- 强烈建议不要使用禁用(disabled)模式。它不仅会使系统避免强制使用 SELinux 策略,还会避免为任何持久对象(如文件)添加标签,这使得在以后启用 SELinux 非常困难。
使用 setenforce 实用程序在 enforcing 模式和 permissive 模式之间变化。使用 setenforce 进行的更改在重启后不会保留。要更改为强制模式,请以 Linux root 用户身份输入 setenforce 1 命令。要更改为 permissive 模式,请输入 setenforce 0 命令。使用 getenforce 工具来查看当前的 SELinux 模式:
getenforce Enforcing
# getenforce
Enforcing
setenforce 0 getenforce Permissive
# setenforce 0
# getenforce
Permissive
setenforce 1 getenforce Enforcing
# setenforce 1
# getenforce
Enforcing
在 Red Hat Enterprise Linux 中,您可以在系统处于 enforcing 模式时,将独立的域设置为 permissive 模式。例如,使 httpd_t 域为 permissive 模式:
semanage permissive -a httpd_t
# semanage permissive -a httpd_t
请注意,permissive 域是一个强大的工具,它可能会破坏您系统的安全性。红帽建议谨慎使用 permissive 域,如仅在调试特定情境时使用。
19.2. 更改 SELinux 状态和模式 复制链接链接已复制到粘贴板!
启用后,SELinux 可使用两种模式之一运行: enforcing 或 permissive。以下小节介绍了如何永久更改这些模式。
19.2.1. SELinux 状态和模式的更改 复制链接链接已复制到粘贴板!
如 SELinux 状态和模式 中所述,SELinux 可以被启用或禁用。启用后,SELinux 有两个模式: enforcing 和 permissive。
使用 getenforce 或 sestatus 命令检查 SELinux 在哪个模式下运行。getenforce 命令返回 Enforcing、Pmissive 或 Disabled。
sestatus 命令返回 SELinux 状态以及正在使用的 SELinux 策略:
当系统以 permissive 模式运行 SELinux 时,用户和进程可能会错误地标记各种文件系统对象。当禁用 SELinux 时创建的文件系统对象不会被标记。这会在将 SELinux 改为 enforcing 模式时导致问题,因为 SELinux 依赖于正确的文件系统对象标签。
为防止错误标记和未标记的文件造成问题,SELinux 在从 disabled 状态更改为 permissive 或 enforcing 模式时自动重新标记文件系统。以 root 用户身份使用 fixfiles -F onboot 命令创建包含 -F 选项的 /.autorelabel 文件,以确保在下次重启时重新标记文件。
在重新引导系统以进行重新标记之前,请确保系统将以 permissive 模式引导,例如使用 enforcing=0 内核选项。这可防止系统在启动 selinux-autorelabel 服务前需要未标记的文件时,系统无法引导。如需更多信息,请参阅 RHBZ#2021835。
19.2.2. 将 SELinux 更改为 permissive 模式 复制链接链接已复制到粘贴板!
当 SELinux 是以 permissive 模式运行时,不会强制 SELinux 策略。系统可保持正常操作,SELinux 不会拒绝任何操作,而只是记录 AVC 信息,它们可用于故障排除、调试和 SELinux 策略改进。每个 AVC 在这个示例中仅记录一次。
先决条件
-
selinux-policy-targeted、libselinux-utils和policycoreutils软件包已安装在您的系统中。 -
未使用
selinux=0或enforcing=0内核参数。
流程
在您选择的文本编辑器中打开
/etc/selinux/config文件,例如:vi /etc/selinux/config
# vi /etc/selinux/configCopy to Clipboard Copied! Toggle word wrap Toggle overflow 配置
SELINUX=permissive选项:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启系统:
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
系统重启后,确认
getenforce命令返回许可:getenforce Permissive
$ getenforce PermissiveCopy to Clipboard Copied! Toggle word wrap Toggle overflow
19.2.3. 将 SELinux 更改为 enforcing 模式 复制链接链接已复制到粘贴板!
当 SELinux 处于 enforcing 模式时,它会强制 SELinux 策略并根据 SELinux 策略规则拒绝访问。在 RHEL 中,当系统最初使用 SELinux 安装时,默认启用 enforcing 模式。
先决条件
-
selinux-policy-targeted、libselinux-utils和policycoreutils软件包已安装在您的系统中。 -
未使用
selinux=0或enforcing=0内核参数。
流程
在您选择的文本编辑器中打开
/etc/selinux/config文件,例如:vi /etc/selinux/config
# vi /etc/selinux/configCopy to Clipboard Copied! Toggle word wrap Toggle overflow 配置
SELINUX=enforcing选项:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 保存更改,重启系统:
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在下一次引导中,SELinux 会重新标记系统中的所有文件和目录,并为禁用 SELinux 时创建的文件和目录添加 SELinux 上下文。
验证
系统重启后,确认
getenforce命令返回Enforcing:getenforce Enforcing
$ getenforce EnforcingCopy to Clipboard Copied! Toggle word wrap Toggle overflow
故障排除
切换到 enforcing 模式后,SELinux 可能会因为不正确或缺少 SELinux 策略规则而拒绝某些操作。
要查看 SELinux 拒绝的操作,以 root 用户身份输入以下命令:
ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts today
# ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts todayCopy to Clipboard Copied! Toggle word wrap Toggle overflow 另外,如果安装了
setroubleshoot-server软件包,请输入:grep "SELinux is preventing" /var/log/messages
# grep "SELinux is preventing" /var/log/messagesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 SELinux 活跃且 Audit 守护进程(
auditd)没有在您的系统中运行,则在dmesg命令输出中搜索某些 SELinux 信息:dmesg | grep -i -e type=1300 -e type=1400
# dmesg | grep -i -e type=1300 -e type=1400Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如需更多信息,请参阅 SELinux 故障排除。
19.2.4. 在之前禁用的系统中启用 SELinux 复制链接链接已复制到粘贴板!
为了避免问题(如系统无法引导或进程失败),当在之前禁用的系统中启用 SELinux 时,首先在 permissive 模式中解析 Access Vector Cache (AVC)信息。
当系统以 permissive 模式运行 SELinux 时,用户和进程可能会错误地标记各种文件系统对象。当禁用 SELinux 时创建的文件系统对象不会被标记。这会在将 SELinux 改为 enforcing 模式时导致问题,因为 SELinux 依赖于正确的文件系统对象标签。
为防止错误标记和未标记的文件造成问题,SELinux 在从 disabled 状态更改为 permissive 或 enforcing 模式时自动重新标记文件系统。
在重新引导系统以进行重新标记之前,请确保系统将以 permissive 模式引导,例如使用 enforcing=0 内核选项。这可防止系统在启动 selinux-autorelabel 服务前需要未标记的文件时,系统无法引导。如需更多信息,请参阅 RHBZ#2021835。
流程
- 以 permissive 模式启用 SELinux。如需更多信息,请参阅切换到 permissive 模式。
重启您的系统:
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 检查 SELinux 拒绝信息。如需更多信息,请参阅 识别 SELinux 拒绝。
确保在下次重启时重新标记文件:
fixfiles -F onboot
# fixfiles -F onbootCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这会创建包含
-F选项的/.autorelabel文件。警告进入
fixfiles -F onboot命令前,始终切换到 permissive 模式。默认情况下,
autorelabel使用并行数量的线程,因为系统有可用的 CPU 内核。要在自动重新标记过程中只使用单个线程,请使用fixfiles -T 1 onboot命令。- 如果没有拒绝的操作,切换到 enforcing 模式。如需更多信息,请参阅在引导时进入 SELinux 模式。
验证
系统重启后,确认
getenforce命令返回Enforcing:getenforce Enforcing
$ getenforce EnforcingCopy to Clipboard Copied! Toggle word wrap Toggle overflow
后续步骤
要在 enforcing 模式下使用 SELinux 运行自定义应用程序,请选择以下之一:
-
在
unconfined_service_t域中运行您的应用程序。 - 为应用程序编写新策略。如需更多信息,请参阅 编写自定义 SELinux 策略 部分。
19.2.5. 禁用 SELinux 复制链接链接已复制到粘贴板!
当您禁用 SELinux 时,您的系统不会载入 SELinux 策略。因此,系统不会强制执行 SELinux 策略,且不会记录 Access Vector Cache (AVC)信息。因此,运行 SELinux 的好处中介绍的好处都将没有。
除非在特定情况下,否则不要禁用 SELinux,如对性能敏感的系统,当弱安全性不会带来重大风险时。
如果您的场景需要在生产环境中执行调试,请临时使用 permissive 模式,而不是永久禁用 SELinux。如需有关 permissive 模式的更多信息,请参阅切换为 permissive 模式。
先决条件
已安装
grubby软件包:rpm -q grubby grubby-<version>
$ rpm -q grubby grubby-<version>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
流程
将您的引导装载程序配置为在内核命令行中添加
selinux=0:sudo grubby --update-kernel ALL --args selinux=0
$ sudo grubby --update-kernel ALL --args selinux=0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启您的系统:
reboot
$ rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
重新引导后,确认
getenforce命令返回Disabled:getenforce Disabled
$ getenforce DisabledCopy to Clipboard Copied! Toggle word wrap Toggle overflow
其它方法
在 RHEL 8 中,您仍然可以使用 已弃用 的方法,通过使用 /etc/selinux/config 文件中的 SELINUX=disabled 选项来禁用 SELinux。这会导致内核启用 SELinux,并在稍后的引导过程中切换到禁用模式。因此,可能会出现内存泄漏和竞争条件,从而导致内核 panic。使用此方法:
在您选择的文本编辑器中打开
/etc/selinux/config文件,例如:vi /etc/selinux/config
# vi /etc/selinux/configCopy to Clipboard Copied! Toggle word wrap Toggle overflow 配置
SELINUX=disabled选项:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 保存更改并重启您的系统:
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
19.2.6. 在引导时更改 SELinux 模式 复制链接链接已复制到粘贴板!
在引导时,您可以设置以下内核参数来更改 SELinux 的运行方式:
enforcing=0设置此参数可让系统以 permissive 模式启动,这在进行故障排除时非常有用。如果您的文件系统被破坏,使用 permissive 模式可能是唯一的选择。在 permissive 模式中,系统将继续正确创建标签。在这个模式中产生的 AVC 信息可能与 enforcing 模式不同。
在 permissive 模式中,只报告来自于同一拒绝的一系列操作的第一个拒绝信息。然而,在 enforcing 模式中,您可能会得到一个与读取目录相关的拒绝信息,应用程序将停止。在 permissive 模式中,您会得到相同的 AVC 信息,但应用程序将继续读取目录中的文件,并为因为每个拒绝额外获得一个 AVC。
selinux=0这个参数会导致内核不载入 SELinux 构架的任意部分。初始化脚本会注意到系统使用
selinux=0参数引导,并涉及/.autorelabel文件。这会导致系统在下次使用 SELinux enabled 模式引导时自动重新标记。重要不要在生产环境中使用
selinux=0参数。要调试您的系统,请临时使用 permissive 模式而不是禁用 SELinux。autorelabel=1这个参数强制系统使用类似以下命令的重新标记:
touch /.autorelabel reboot
# touch /.autorelabel # rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果文件系统中包含大量错误标记的对象,以 permissive 模式启动系统,使 autorelabel 进程成功。
部分 III. 网络设计 复制链接链接已复制到粘贴板!
第 20 章 使用 ifcfg 文件配置 ip 网络 复制链接链接已复制到粘贴板!
接口配置(ifcfg)文件控制各个网络设备的软件接口。当系统引导时,它使用这些文件来决定启动哪些界面以及如何进行配置。这些文件被命名为 ifcfg-name_pass,其中后缀 name 指的是配置文件控制的设备的名称。按照惯例,ifcfg 文件的后缀与配置文件中 DEVICE 指令给出的字符串相同。
NetworkManager 支持以密钥文件格式存储的配置文件。但是,当使用 NetworkManager API 创建或更新配置文件时,NetworkManager 默认使用 ifcfg 格式。
在未来的主 RHEL 版本中,密钥文件格式将会成为默认格式。如果要手动创建和管理配置文件,请考虑使用密钥文件格式。详情请查看 keyfile 格式的NetworkManager 连接配置文件。
20.1. 使用 ifcfg 文件配置带有静态网络设置的接口 复制链接链接已复制到粘贴板!
如果不使用 NetworkManager 工具和应用程序,您可以通过创建 ifcfg 文件来手动配置网络接口。
流程
要使用
ifcfg文件,为名为enp1s0的接口配置具有静态网络设置的接口,请在/etc/sysconfig/network-scripts/目录中创建一个名为ifcfg-enp1s0的文件,其包含以下内容:对于
IPv4配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于
IPv6配置:DEVICE=enp1s0 BOOTPROTO=none ONBOOT=yes IPV6INIT=yes IPV6ADDR=2001:db8:1::2/64
DEVICE=enp1s0 BOOTPROTO=none ONBOOT=yes IPV6INIT=yes IPV6ADDR=2001:db8:1::2/64Copy to Clipboard Copied! Toggle word wrap Toggle overflow
20.2. 使用 ifcfg 文件配置带有动态网络设置的接口 复制链接链接已复制到粘贴板!
如果不使用 NetworkManager 工具和应用程序,您可以通过创建 ifcfg 文件来手动配置网络接口。
流程
要使用
ifcfg文件配置具有动态网络配置、名为 em1 的接口,请在/etc/sysconfig/network-scripts/目录中创建一个名为ifcfg-em1的文件,其包含以下内容:DEVICE=em1 BOOTPROTO=dhcp ONBOOT=yes
DEVICE=em1 BOOTPROTO=dhcp ONBOOT=yesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要配置发送的接口:
DHCP服务器使用不同的主机名,请在ifcfg文件中添加以下行:DHCP_HOSTNAME=hostname
DHCP_HOSTNAME=hostnameCopy to Clipboard Copied! Toggle word wrap Toggle overflow DHCP服务器使用不同的完全限定域名(FQDN),请在ifcfg文件中添加以下行:DHCP_FQDN=fully.qualified.domain.name
DHCP_FQDN=fully.qualified.domain.nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow
注意您只能使用这些设置中的一个。如果您同时指定了
DHCP_HOSTNAME和DHCP_FQDN,则只使用DHCP_FQDN。要将接口配置为使用特定的
DNS服务器,请在ifcfg文件中添加以下行:PEERDNS=no DNS1=ip-address DNS2=ip-address
PEERDNS=no DNS1=ip-address DNS2=ip-addressCopy to Clipboard Copied! Toggle word wrap Toggle overflow 其中 ip-address 是
DNS服务器的地址。这会导致网络服务使用指定的DNS服务器更新/etc/resolv.conf。只需要一个DNS服务器地址,另一个是可选的。
20.3. 使用 ifcfg 文件管理系统范围以及专用连接配置集 复制链接链接已复制到粘贴板!
默认情况下,主机上的所有用户都可以使用 ifcfg 文件中定义的连接。您可以通过在 ifcfg 文件中添加 USERS 参数,来将此行为限制为特定用户。
前提条件
-
ifcfg文件已存在。
流程
编辑
/etc/sysconfig/network-scripts/目录中您要限制为某些用户的ifcfg文件,并添加:USERS="username1 username2 ..."
USERS="username1 username2 ..."Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新激活连接:
nmcli connection up connection_name
# nmcli connection up connection_nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 21 章 开始使用 IPVLAN 复制链接链接已复制到粘贴板!
IPVLAN 是虚拟网络设备的驱动程序,可在容器环境中用于访问主机网络。IPVLAN 会将一个 MAC 地址公开给外部网络,而不管主机网络中所创建的 IPVLAN 设备的数量。这意味着,用户可以在多个容器中有多个 IPVLAN 设备,相应的交换机会读取单个 MAC 地址。当本地交换机对它可管理的 MAC 地址的总数施加约束时,IPVLAN 驱动程序很有用。
21.1. IPVLAN 模式 复制链接链接已复制到粘贴板!
IPVLAN 有以下模式可用:
L2 模式
在 IPVLAN L2 模式 中,虚拟设备接收并响应地址解析协议(ARP)请求。
netfilter框架仅在拥有虚拟设备的容器中运行。容器化流量的默认命名空间中不会执行netfilter链。使用L2 模式会提供良好的性能,但对网络流量的控制要小。L3 模式
在 L3 模式 中,虚拟设备只处理 L3 以上的流量。虚拟设备不响应 ARP 请求,用户必须手动为相关点上的 IPVLAN IP 地址配置邻居条目。相关容器的出口流量位于默认命名空间中的
netfilterPOSTROUTING 和 OUTPUT 链上,而入口流量以与 L2 模式 相同的方式被线程化。使用L3 模式会提供很好的控制,但可能会降低网络流量性能。L3S 模式
在 L3S 模式 中,虚拟设备处理方式与 L3 模式 中的处理方式相同,但相关容器的出口和入口流量都位于默认命名空间中的
netfilter链上。L3S 模式 的行为方式和 L3 模式 相似,但提供了对网络的更大控制。
对于 L3 和 L3S 模式,IPVLAN 虚拟设备不接收广播和多播流量。
21.2. IPVLAN 和 MACVLAN 的比较 复制链接链接已复制到粘贴板!
下表显示了 MACVLAN 和 IPVLAN 之间的主要区别:
| MACVLAN | IPVLAN |
|---|---|
| 为每个 MACVLAN 设备使用 MAC 地址。 请注意,如果交换机达到了其 MAC 表中可以存储的最大 MAC 地址数,则连接可能会丢失。 | 使用不限制 IPVLAN 设备数的单个 MAC 地址。 |
| 全局命名空间的 Netfilter 规则不会影响子命名空间中到 MACVLAN 设备或来自 MACVLAN 设备的流量。 | 可以在 L3 mode L3S mode 下控制到 IPVLAN 设备或来自 IPVLAN 设备的流量。 |
IPVLAN 和 MACVLAN 不需要任何级别的封装。
21.3. 使用 iproute2 创建和配置 IPVLAN 设备 复制链接链接已复制到粘贴板!
此流程演示了如何使用 iproute2 设置 IPVLAN 设备。
流程
要创建 IPVLAN 设备,请输入以下命令:
ip link add link real_NIC_device name IPVLAN_device type ipvlan mode l2
# ip link add link real_NIC_device name IPVLAN_device type ipvlan mode l2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意:网络接口控制器(NIC)是将计算机连接到网络的一个硬件组件。
例 21.1. 创建 IPVLAN 设备
ip link add link enp0s31f6 name my_ipvlan type ipvlan mode l2 ip link 47: my_ipvlan@enp0s31f6: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether e8:6a:6e:8a:a2:44 brd ff:ff:ff:ff:ff:ff
# ip link add link enp0s31f6 name my_ipvlan type ipvlan mode l2 # ip link 47: my_ipvlan@enp0s31f6: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether e8:6a:6e:8a:a2:44 brd ff:ff:ff:ff:ff:ffCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要给接口分配
IPv4或IPv6地址,请输入以下命令:ip addr add dev IPVLAN_device IP_address/subnet_mask_prefix
# ip addr add dev IPVLAN_device IP_address/subnet_mask_prefixCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果在 L3 模式或 L3S 模式中配置 IPVLAN 设备,请进行以下设置:
在远程主机上为远程 peer 配置邻居设置:
ip neigh add dev peer_device IPVLAN_device_IP_address lladdr MAC_address
# ip neigh add dev peer_device IPVLAN_device_IP_address lladdr MAC_addressCopy to Clipboard Copied! Toggle word wrap Toggle overflow 其中 MAC_address 是 IPVLAN 设备所基于的实际网卡的 MAC 地址。
使用以下命令为 L3 模式 配置 IPVLAN 设备:
ip route add dev <real_NIC_device> <peer_IP_address/32>
# ip route add dev <real_NIC_device> <peer_IP_address/32>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 L3S 模式:
ip route add dev real_NIC_device peer_IP_address/32
# ip route add dev real_NIC_device peer_IP_address/32Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中 IP-address 代表远程 peer 的地址。
要设置活跃的 IPVLAN 设备,请输入以下命令:
ip link set dev IPVLAN_device up
# ip link set dev IPVLAN_device upCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要检查 IPVLAN 设备是否活跃,请在远程主机中执行以下命令:
ping IP_address
# ping IP_addressCopy to Clipboard Copied! Toggle word wrap Toggle overflow 其中 IP_address 使用 IPVLAN 设备的 IP 地址。
第 22 章 在不同的接口上重复使用相同的 IP 地址 复制链接链接已复制到粘贴板!
使用虚拟路由和转发(VRF),管理员可以在同一主机上同时使用多个路由表。为此,VRF 将网络在第 3 层进行分区。这可让管理员使用每个 VRF 域的独立路由表隔离流量。这个技术与虚拟 LAN(虚拟 LAN)类似,后者在第二层为网络分区,其中操作系统使用不同的 VLAN 标签来隔离共享相同物理介质的流量。
VRF 优于在第二层上分区的好处是,路由会根据涉及的对等者数量进行更好地考虑。
Red Hat Enterprise Linux 为每个 VRF 域使用虚拟 vrt 设备,并通过向 VRF 设备添加现有网络设备来向 VRF 域添加路由。之前附加到原始设备的地址和路由将在 VRF 域中移动。
请注意,每个 VRF 域间都是相互隔离的。
22.1. 在不同接口上永久重复使用相同的 IP 地址 复制链接链接已复制到粘贴板!
您可以使用虚拟路由和转发(VRF)功能来对一个服务器的不同接口永久使用同样的 IP 地址。
要在重新使用相同的 IP 地址时让远程对等两个 VRF 接口都联系,网络接口必须属于不同的广播域。网络中的广播域是一组节点,它们接收其中任何一个节点发送的广播流量。在大多数配置中,所有连接到同一交换机的节点都属于相同的域。
先决条件
-
以
root用户身份登录。 - 没有配置网络接口。
流程
创建并配置第一个 VRF 设备:
为 VRF 设备创建连接并将其分配到路由表中。例如,要创建一个分配给
1001路由表、名为vrf0的 VRF 设备:nmcli connection add type vrf ifname vrf0 con-name vrf0 table 1001 ipv4.method disabled ipv6.method disabled
# nmcli connection add type vrf ifname vrf0 con-name vrf0 table 1001 ipv4.method disabled ipv6.method disabledCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启用
vrf0设备:nmcli connection up vrf0
# nmcli connection up vrf0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为刚刚创建的 VRF 分配网络设备。例如,要向
vrf0VRF 设备添加enp1s0以太网设备,并向enp1s0分配 IP 地址和子网掩码,请输入:nmcli connection add type ethernet con-name vrf.enp1s0 ifname enp1s0 master vrf0 ipv4.method manual ipv4.address 192.0.2.1/24
# nmcli connection add type ethernet con-name vrf.enp1s0 ifname enp1s0 master vrf0 ipv4.method manual ipv4.address 192.0.2.1/24Copy to Clipboard Copied! Toggle word wrap Toggle overflow 激活
vrf.enp1s0连接:nmcli connection up vrf.enp1s0
# nmcli connection up vrf.enp1s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建并配置下一个 VRF 设备:
创建 VRF 设备并将其分配到路由表中。例如,要创建一个分配给
1002路由表、名为vrf1的 VRF 设备,请输入:nmcli connection add type vrf ifname vrf1 con-name vrf1 table 1002 ipv4.method disabled ipv6.method disabled
# nmcli connection add type vrf ifname vrf1 con-name vrf1 table 1002 ipv4.method disabled ipv6.method disabledCopy to Clipboard Copied! Toggle word wrap Toggle overflow 激活
vrf1设备:nmcli connection up vrf1
# nmcli connection up vrf1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为刚刚创建的 VRF 分配网络设备。例如,要向
vrf1VRF 设备添加enp7s0以太网设备,并给enp7s0分配 IP 地址和子网掩码,请输入:nmcli connection add type ethernet con-name vrf.enp7s0 ifname enp7s0 master vrf1 ipv4.method manual ipv4.address 192.0.2.1/24
# nmcli connection add type ethernet con-name vrf.enp7s0 ifname enp7s0 master vrf1 ipv4.method manual ipv4.address 192.0.2.1/24Copy to Clipboard Copied! Toggle word wrap Toggle overflow 激活
vrf.enp7s0设备:nmcli connection up vrf.enp7s0
# nmcli connection up vrf.enp7s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
22.2. 在不同接口中临时重复使用相同的 IP 地址 复制链接链接已复制到粘贴板!
您可以使用虚拟路由和转发(VRF)功能来对一个服务器的不同接口临时使用同样的 IP 地址。这个过程仅用于测试目的,因为配置是临时的并在重启系统后会丢失。
要在重新使用相同的 IP 地址时让远程对等两个 VRF 接口都联系,网络接口必须属于不同的广播域。广播域是一组节点,它们接收被其中任何一个发送的广播流量。在大多数配置中,所有连接到同一交换机的节点都属于相同的域。
先决条件
-
以
root用户身份登录。 - 没有配置网络接口。
流程
创建并配置第一个 VRF 设备:
创建 VRF 设备并将其分配到路由表中。例如,要创建一个分配给
1001路由表、名为blue的 VRF 设备:ip link add dev blue type vrf table 1001
# ip link add dev blue type vrf table 1001Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启用
blue设备:ip link set dev blue up
# ip link set dev blue upCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为 VRF 设备分配网络设备。例如,要向
blueVRF 设备添加enp1s0以太网设备:ip link set dev enp1s0 master blue
# ip link set dev enp1s0 master blueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启用
enp1s0设备:ip link set dev enp1s0 up
# ip link set dev enp1s0 upCopy to Clipboard Copied! Toggle word wrap Toggle overflow 向
enp1s0设备分配 IP 地址和子网掩码。例如,将其设为192.0.2.1/24:ip addr add dev enp1s0 192.0.2.1/24
# ip addr add dev enp1s0 192.0.2.1/24Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建并配置下一个 VRF 设备:
创建 VRF 设备并将其分配到路由表中。例如,要创建一个分配给
1002路由表、名为red的 VRF 设备:ip link add dev red type vrf table 1002
# ip link add dev red type vrf table 1002Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启用
red设备:ip link set dev red up
# ip link set dev red upCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为 VRF 设备分配网络设备。例如,要向
redVRF 设备添加enp7s0以太网设备:ip link set dev enp7s0 master red
# ip link set dev enp7s0 master redCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启用
enp7s0设备:ip link set dev enp7s0 up
# ip link set dev enp7s0 upCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为
enp7s0设备分配与blueVRF 域中enp1s0设备所使用的相同的 IP 地址和子网掩码:ip addr add dev enp7s0 192.0.2.1/24
# ip addr add dev enp7s0 192.0.2.1/24Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 可选:如上所述,创建更多 VRF 设备。
第 23 章 安全网络 复制链接链接已复制到粘贴板!
23.1. 使用 OpenSSH 的两个系统间使用安全通讯 复制链接链接已复制到粘贴板!
SSH(Secure Shell)是一种协议,它使用客户端-服务器架构在两个系统之间提供安全通信,并允许用户远程登录到服务器主机系统。与其他远程通信协议(如 FTP 或 Telnet )不同,SSH 会加密登录会话,这可防止入侵者从连接中收集未加密的密码。
23.1.1. 生成 SSH 密钥对 复制链接链接已复制到粘贴板!
您可以使用在本地系统上生成的 SSH 密钥对,并将生成的公钥复制到 OpenSSH 服务器来在不输入密码的情况下登录到 OpenSSH 服务器。每个要创建密钥的用户都必须运行此流程。
要在重新安装系统后保留之前生成的密钥对,请在创建新密钥前备份 ~/.ssh/ 目录。重新安装后,将其复制到主目录中。您可以为系统中的所有用户(包括 root 用户)进行此操作。
先决条件
- 您已经以希望使用密钥连接到 OpenSSH 服务器的用户的身份登录了。
- OpenSSH 服务器被配置为允许基于密钥的身份验证。
流程
生成一个 ECDSA 密钥对:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您还可以使用没有任何参数的
ssh-keygen命令生成一个 RSA 密钥对,或通过输入ssh-keygen -t ed25519命令生成一个 Ed25519 密钥对。请注意,Ed25519 算法不符合 FIPS-140,OpenSSH 在 FIPS 模式下无法使用 Ed25519 密钥。将公钥复制到远程机器上:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<username>@<ssh-server-example.com>替换为您的凭证。如果您没有在会话中使用
ssh-agent程序,上一个命令会复制最新修改的~/.ssh/id*.pub公钥。要指定另一个公钥文件,或在ssh-agent内存中缓存的密钥优先选择文件中的密钥,使用带有-i选项的ssh-copy-id命令。
验证
使用密钥文件登录到 OpenSSH 服务器:
ssh -o PreferredAuthentications=publickey <username>@<ssh-server-example.com>
$ ssh -o PreferredAuthentications=publickey <username>@<ssh-server-example.com>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.1.2. 将基于密钥的身份验证设置为 OpenSSH 服务器的唯一方法 复制链接链接已复制到粘贴板!
要提高系统安全性,通过在 OpenSSH 服务器上禁用密码身份验证来强制进行基于密钥的身份验证。
先决条件
-
已安装
openssh-server软件包。 -
sshd守护进程正在服务器中运行。 您已使用密钥连接到 OpenSSH 服务器。
详情请参阅 生成 SSH 密钥对 部分。
流程
在文本编辑器中打开
/etc/ssh/sshd_config配置,例如:vi /etc/ssh/sshd_config
# vi /etc/ssh/sshd_configCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
PasswordAuthentication选项改为no:PasswordAuthentication no
PasswordAuthentication noCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
在不是新默认安装的系统上,检查是否设置了
PubkeyAuthentication参数,或是否设置为yes。 将
ChallengeResponseAuthentication指令设置为no。请注意,相应的条目在配置文件中已被注释掉,默认值为
yes。要在 NFS 挂载的主目录中使用基于密钥的验证,启用
use_nfs_home_dirsSELinux 布尔值:setsebool -P use_nfs_home_dirs 1
# setsebool -P use_nfs_home_dirs 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 如果您要进行远程连接,而不使用控制台或带外访问,在禁用密码验证前测试基于密钥的登录过程。
重新载入
sshd守护进程以应用更改:systemctl reload sshd
# systemctl reload sshdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
23.1.3. 使用 ssh-agent 缓存 SSH 凭证 复制链接链接已复制到粘贴板!
为了避免在每次发起 SSH 连接时输入密码短语,您可以使用 ssh-agent 工具为登录会话缓存 SSH 私钥。如果代理正在运行,并且您的密钥已解锁,您可以使用这些密钥登录到 SSH 服务器,但不必再次输入密钥的密码。确保私钥和密语安全。
先决条件
- 您有一个运行了 SSH 守护进程的远程主机,并可通过网络访问。
- 您知道登录到远程主机的 IP 地址或者主机名以及凭证。
您已用密码生成了 SSH 密钥对,并将公钥传送到远程机器。
详情请参阅 生成 SSH 密钥对 部分。
流程
将在您的会话中自动启动
ssh-agent的命令添加到~/.bashrc文件中:在您选择的文本编辑器中打开
~/.bashrc,例如:vi ~/.bashrc
$ vi ~/.bashrcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在文件中添加以下行:
eval $(ssh-agent)
eval $(ssh-agent)Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,退出编辑器。
在
~/.ssh/config文件中添加以下行:AddKeysToAgent yes
AddKeysToAgent yesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用此选项并在会话中启动了
ssh-agent,代理仅在您第一次连接到主机时提示输入密码。
验证
登录到使用代理中缓存的私钥的对应的公钥的主机,例如:
ssh <example.user>@<ssh-server@example.com>
$ ssh <example.user>@<ssh-server@example.com>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意您不必输入密码短语。
23.1.4. 通过保存在智能卡上的 SSH 密钥进行身份验证 复制链接链接已复制到粘贴板!
您可以在智能卡上创建并存储 ECDSA 和 RSA 密钥,并通过 OpenSSH 客户端上的智能卡进行身份验证。智能卡验证替换了默认密码验证。
先决条件
-
在客户端中安装了
opensc软件包,pcscd服务正在运行。
流程
列出所有由 OpenSC PKCS #11 模块提供的密钥,包括其 PKCS #11 URIs,并将输出保存到
key.pub文件:ssh-keygen -D pkcs11: > keys.pub
$ ssh-keygen -D pkcs11: > keys.pubCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将公钥传送到远程服务器。使用
ssh-copy-id命令和上一步中创建的keys.pub文件:ssh-copy-id -f -i keys.pub <username@ssh-server-example.com>
$ ssh-copy-id -f -i keys.pub <username@ssh-server-example.com>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 ECDSA 密钥连接到 <ssh-server-example.com>。您可以只使用 URI 的子集,它唯一引用您的密钥,例如:
ssh -i "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $
$ ssh -i "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $Copy to Clipboard Copied! Toggle word wrap Toggle overflow 因为 OpenSSH 使用
p11-kit-proxy包装器,且 OpenSC PKCS #11 模块已注册到p11-kit工具,因此您可以简化上一个命令:ssh -i "pkcs11:id=%01" <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $
$ ssh -i "pkcs11:id=%01" <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您跳过 PKCS #11 URI 的
id=部分,则 OpenSSH 会加载代理模块中可用的所有密钥。这可减少输入所需的数量:ssh -i pkcs11: <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $
$ ssh -i pkcs11: <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:您可以使用
~/.ssh/config文件中的同一 URI 字符串使配置持久:cat ~/.ssh/config IdentityFile "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" $ ssh <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $
$ cat ~/.ssh/config IdentityFile "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" $ ssh <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $Copy to Clipboard Copied! Toggle word wrap Toggle overflow ssh客户端工具现在自动使用此 URI 和智能卡中的密钥。
23.2. 计划并使用 TLS 复制链接链接已复制到粘贴板!
TLS(传输层安全)是用来保护网络通信的加密协议。在通过配置首选密钥交换协议、身份验证方法和加密算法来强化系统安全设置时,需要记住支持的客户端的范围越广,产生的安全性就越低。相反,严格的安全设置会导致与客户端的兼容性受限,这可能导致某些用户被锁定在系统之外。请确保以最严格的可用配置为目标,并且仅在出于兼容性原因需要时才放宽配置。
23.2.1. SSL 和 TLS 协议 复制链接链接已复制到粘贴板!
安全套接字层(SSL)协议最初使由 Netscape 公司开发的,以提供一种在互联网上进行安全通信的机制。因此,该协议被互联网工程任务组(IETF)采纳,并重命名为传输层安全(TLS)。
TLS 协议位于应用协议层和可靠的传输层之间,例如 TCP/IP。它独立于应用程序协议,因此可在很多不同的协议下分层,例如:HTTP、FTP、SMTP 等。
| 协议版本 | 用法建议 |
|---|---|
| SSL v2 | 不要使用。具有严重的安全漏洞。从 RHEL 7 开始从核心加密库中删除了。 |
| SSL v3 | 不要使用。具有严重的安全漏洞。从 RHEL 8 开始从核心加密库中删除了。 |
| TLS 1.0 |
不建议使用。已知的无法以保证互操作性方式缓解的问题,且不支持现代密码套件。在 RHEL 8 中,只在 |
| TLS 1.1 |
在需要时用于互操作性.不支持现代加密套件。在 RHEL 8 中,只在 |
| TLS 1.2 | 支持现代 AEAD 密码组合。此版本在所有系统范围的加密策略中启用,但此协议的可选部分包含漏洞,TLS 1.2 也允许过时的算法。 |
| TLS 1.3 | 推荐的版本。TLS 1.3 删除了已知有问题的选项,通过加密更多协商握手来提供额外的隐私,由于使用了更有效的现代加密算法,所以可以更快。TLS 1.3 也在所有系统范围的加密策略中启用了。 |
23.2.2. RHEL 8 中 TLS 的安全注意事项 复制链接链接已复制到粘贴板!
在 RHEL 8 中,由于系统范围的加密策略,与加密相关的注意事项大大简化了。DEFAULT 加密策略只允许 TLS 1.2 和 1.3。要允许您的系统使用早期版本的 TLS 来协商连接,您需要选择不使用应用程序中的以下加密策略,或使用 update-crypto-policies 命令切换到 LEGACY 策略。如需更多信息,请参阅使用系统范围的加密策略。
RHEL 8 中包含的库提供的默认设置足以满足大多数部署的需要。TLS 实现尽可能使用安全算法,而不阻止来自或到旧客户端或服务器的连接。在具有严格安全要求的环境中应用强化设置,在这些环境中,不支持安全算法或协议的旧客户端或服务器不应连接或不允许连接。
强化 TLS 配置的最简单方法是使用 update-crypto-policies --set FUTURE 命令将系统范围的加密策略级别切换到 FUTURE 。
为 LEGACY 加密策略禁用的算法不符合红帽的 RHEL 8 安全愿景,其安全属性不可靠。考虑放弃使用这些算法,而不是重新启用它们。如果您确实决定重新启用它们(例如,为了与旧硬件的互操作性),请将它们视为不安全的,并应用额外的保护措施,例如将其网络交互隔离到单独的网络段。不要在公共网络中使用它们。
如果您决定不遵循 RHEL 系统范围的加密策略,或根据您的设置创建自定义的加密策略,请在自定义配置中对首选协议、密码套件和密钥长度使用以下建议:
23.2.2.1. 协议 复制链接链接已复制到粘贴板!
TLS 的最新版本提供了最佳安全机制。除非有充分的理由包含对旧版本的 TLS 的支持,否则请允许您的系统使用至少 TLS 版本 1.2 来协商连接。
请注意,尽管 RHEL 8 支持 TLS 版本 1.3,但 RHEL 8 组件并不完全支持这个协议的所有功能。例如,Apache Web 服务器尚不完全支持可降低连接延迟的 0-RTT(Zero R Trip Time)功能。
23.2.2.2. 密码套件 复制链接链接已复制到粘贴板!
现代、更安全的密码套件应该优先于旧的不安全密码套件。一直禁止 eNULL 和 aNULL 密码套件的使用,它们根本不提供任何加密或身份验证。如果有可能,基于 RC4 或 HMAC-MD5 的密码套件也必须被禁用。这同样适用于所谓的出口密码套件,它们被有意地弱化了,因此很容易被破解。
虽然不会立即变得不安全,但提供安全性少于 128 位的密码套件在它们的短使用期中不应该被考虑。使用 128 位或者更高安全性的算法可以预期在至少数年内不会被破坏,因此我们强烈推荐您使用此算法。请注意,虽然 3DES 密码公告使用 168 位但它们实际只提供了 112 位的安全性。
始终优先使用支持(完美)转发保密(PFS)的密码套件,这样可确保加密数据的机密性,以防服务器密钥被泄露。此规则排除了快速 RSA 密钥交换,但允许使用 ECDHE 和 DHE。在两者中,ECDHE 更快,因此是首选。
您还应该优先选择 AEAD 密码,如 AES-GCM,使用 CBC 模式密码,因为它们不容易受到 padding oracle 攻击的影响。此外,在很多情况下,在 CBC 模式下,AES-GCM 比 AES 快,特别是当硬件具有 AES 加密加速器时。
另请注意,在使用带有 ECDSA 证书的 ECDHE 密钥交换时,事务的速度甚至比纯 RSA 密钥交换要快。为了给旧客户端提供支持,您可以在服务器上安装两对证书和密钥:一对带有 ECDSA 密钥(用于新客户端),另一对带有 RSA 密钥(用于旧密钥)。
23.2.2.3. 公钥长度 复制链接链接已复制到粘贴板!
在使用 RSA 密钥时,总是首选使用至少由 SHA-256 签名的 3072 位的密钥长度,对于真实的 128 位安全性来说,这个值已经足够大。
您的系统安全性仅与链中最弱的连接相同。例如,只是一个强大的密码不能保证良好安全性。密钥和证书以及认证机构(CA)用来签署您的密钥的哈希功能和密钥同样重要。
23.2.3. 在应用程序中强化 TLS 配置 复制链接链接已复制到粘贴板!
在 RHEL 中,系统范围的加密策略 提供了一种便捷的方法,来确保您的使用加密库的应用程序不允许已知的不安全协议、密码或算法。
如果要使用自定义加密设置来强化与 TLS 相关的配置,您可以使用本节中描述的加密配置选项,并以最少的需求量覆盖系统范围的加密策略。
无论您选择使用什么配置,请始终确保您的服务器应用程序强制实施 服务器端密码顺序,以便使用的密码套件由您配置的顺序来决定。
23.2.3.1. 将 Apache HTTP 服务器配置为使用 TLS 复制链接链接已复制到粘贴板!
Apache HTTP 服务器 可以使用 OpenSSL 和 NSS 库来满足其 TLS 的需求。RHEL 8 通过 eponymous 软件包提供 mod_ssl 功能:
yum install mod_ssl
# yum install mod_ssl
mod_ssl 软件包将安装 /etc/httpd/conf.d/ssl.conf 配置文件,该文件可用来修改 Apache HTTP 服务器 与 TLS 相关的设置。
安装 httpd-manual 软件包以获取 Apache HTTP 服务器 的完整文档,包括 TLS 配置。/etc/httpd/conf.d/ssl.conf 配置文件中的指令在 /usr/share/httpd/manual/mod_ssl.html 文件中详细介绍。/usr/share/httpd/manual/ssl/ssl/ssl_howto.html 文件中描述了各种设置的示例。
修改 /etc/httpd/conf.d/ssl.conf 配置文件中的设置时,请确保至少考虑以下三个指令:
SSLProtocol- 使用这个指令指定您要允许的 TLS 或者 SSL 版本。
SSLCipherSuite- 使用这个指令来指定您首选的密码套件或禁用您要禁止的密码套件。
SSLHonorCipherOrder-
取消注释并将此指令设置为
on,以确保连接的客户端遵循您指定的密码顺序。
例如,只使用 TLS 1.2 和 1.3 协议:
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
如需更多信息,请参阅 部署不同类型的服务器 文档中的 在 Apache HTTP 服务器上配置 TLS 加密 一章。
23.2.3.2. 将 Nginx HTTP 和代理服务器配置为使用 TLS 复制链接链接已复制到粘贴板!
要在 Nginx 中启用 TLS 1.3 支持,请将 TLSv1.3 值添加到 /etc/nginx/nginx.conf 配置文件的 server 部分的 ssl_protocols 选项:
如需更多信息,请参阅 部署不同类型的服务器 文档中的 向 Nginx web 服务器添加 TLS 加密 一章。
23.2.3.3. 将 Dovecot 邮件服务器配置为使用 TLS 复制链接链接已复制到粘贴板!
要将 Dovecot 邮件服务器的安装配置为使用 TLS,请修改 /etc/dovecot/conf.d/10-ssl.conf 配置文件。您可以在 /usr/share/doc/dovecot/wiki/SSL.DovecotConfiguration.txt 文件中找到一些基本配置指令的说明,该文件与 Dovecot 的标准安装一起安装。
修改 /etc/dovecot/conf.d/10-ssl.conf 配置文件中的设置时,请确保至少考虑以下三个指令:
ssl_protocols- 使用这个指令指定您要允许或者禁用的 TLS 或者 SSL 版本。
ssl_cipher_list- 使用这个指令指定您首选的密码套件或禁用您要禁止的密码套件。
ssl_prefer_server_ciphers-
取消注释并将此指令设置为
yes,以确保连接的客户端遵循您指定的密码顺序。
例如,/etc/dovecot/conf.d/10-ssl.conf 中的以下行只允许 TLS 1.1 及之后的版本:
ssl_protocols = !SSLv2 !SSLv3 !TLSv1
ssl_protocols = !SSLv2 !SSLv3 !TLSv1
23.3. 设置 IPsec VPN 复制链接链接已复制到粘贴板!
虚拟专用网络(VPN)是一种通过互联网连接到本地网络的方法。Libreswan 提供的 IPsec 是创建 VPN 的首选方法。libreswan 是 VPN 的用户空间 IPsec 实现。VPN 通过在中间网络(如互联网)设置隧道来启用 LAN 和另一个远程 LAN 之间的通信。为了安全起见,VPN 隧道总是使用认证和加密。对于加密操作,Libreswan 使用 NSS 库。
23.3.1. libreswan 作为 IPsec VPN 的实现 复制链接链接已复制到粘贴板!
在 RHEL 中,您可以使用 Libreswan 应用程序支持的 IPsec 协议配置虚拟专用网络(VPN)。Libreswan 是 Openswan 应用程序的延续,Openswan 文档中的许多示例可以通过 Libreswan 交换。
VPN 的 IPsec 协议使用互联网密钥交换(IKE)协议进行配置。术语 IPsec 和 IKE 可互换使用。IPsec VPN 也称为 IKE VPN、IKEv2 VPN、XAUTH VPN、Cisco VPN 或 IKE/IPsec VPN。IPsec VPN 变体,它使用 Level 2 Tunneling Protocol(L2TP),被称为 L2TP/IPsec VPN,它需要 optional 软件仓库提供的 xl2tpd 软件包。
libreswan 是一个开源用户空间 IKE 实现。IKE v1 和 v2 作为用户级别的守护进程实现。IKE 协议也加密。IPsec 协议由 Linux 内核实现,Libreswan 配置内核以添加和删除 VPN 隧道配置。
IKE 协议使用 UDP 端口 500 和 4500。IPsec 协议由两个协议组成:
- 封装安全性 Payload(ESP),其协议号为 50。
- 经过身份验证的标头(AH),其协议号为 51。
不建议使用 AH 协议。建议将 AH 用户迁移到使用 null 加密的 ESP。
IPsec 协议提供两种操作模式:
- 隧道模式(默认)
- 传输模式
您可以用没有 IKE 的 IPsec 来配置内核。这称为 手动键控。您还可以使用 ip xfrm 命令来配置手动密钥,但为了安全起见,强烈建议您不要这样做。Libreswan 使用 Netlink 接口与 Linux 内核进行通信。内核执行数据包加密和解密。
Libreswan 使用网络安全服务 (NSS) 加密库。NSS 认证用于 联邦信息处理标准( FIPS)出版物 140-2。
IKE/IPsec VPN(由 Libreswan 和 Linux 内核实现)是 RHEL 中推荐的唯一 VPN 技术。在不了解这样做风险的情况下不要使用任何其他 VPN 技术。
在 RHEL 中,Libreswan 默认遵循系统范围的加密策略。这样可确保 Libreswan 将当前威胁模型包括(IKEv2)的安全设置用作默认协议。如需更多信息,请参阅 使用系统范围的加密策略。
Libreswan 没有使用术语"源(source)"和"目的地(destination)"或"服务器(server)"和"客户端(client)",因为 IKE/IPsec 使用对等(peer to peer)协议。相反,它使用术语"左"和"右"来指端点(主机)。这也允许您在大多数情况下在两个端点使用相同的配置。但是,管理员通常选择始终对本地主机使用"左",对远程主机使用"右"。
leftid 和 rightid 选项充当身份验证过程中相应主机的标识。详情请查看 ipsec.conf(5) 手册页。
23.3.2. Libreswan 中的身份验证方法 复制链接链接已复制到粘贴板!
Libreswan 支持多种身份验证方法,每种方法适合不同的场景。
预共享密钥(PSK)
预共享密钥 (PSK)是最简单的身份验证方法。出于安全考虑,请勿使用小于 64 个随机字符的 PSK。在 FIPS 模式中,PSK 必须符合最低强度要求,具体取决于所使用的完整性算法。您可以使用 authby=secret 连接来设置 PSK。
原始 RSA 密钥
原始 RSA 密钥 通常用于静态主机到主机或子网到子网 IPsec 配置。每个主机都使用所有其他主机的公共 RSA 密钥手动配置,Libreswan 在每对主机之间建立 IPsec 隧道。对于大量主机,这个方法不能很好地扩展。
您可以使用 ipsec newhostkey 命令在主机上生成原始 RSA 密钥。您可以使用 ipsec showhostkey 命令列出生成的密钥。使用 CKA ID 密钥的连接配置需要 leftrsasigkey= 行。原始 RSA 密钥使用 authby=rsasig 连接选项。
X.509 证书
X.509 证书 通常用于大规模部署连接到通用 IPsec 网关的主机。中心 证书颁发机构 (CA)为主机或用户签署 RSA 证书。此中央 CA 负责中继信任,包括单个主机或用户的撤销。
例如,您可以使用 openssl 命令和 NSS certutil 命令来生成 X.509 证书。因为 Libreswan 使用 leftcert= 配置选项中证书的昵称从 NSS 数据库读取用户证书,所以在创建证书时请提供昵称。
如果使用自定义 CA 证书,则必须将其导入到网络安全服务(NSS)数据库中。您可以使用 ipsec import 命令将 PKCS #12 格式的任何证书导入到 Libreswan NSS 数据库。
Libreswan 需要互联网密钥交换(IKE)对等 ID 作为每个对等证书的主题替代名称(SAN),如 RFC 4945 的 3.1 章节 所述。通过设置 require-id-on-certificate=no connection 选项禁用此检查,可能会导致系统容易受到中间人攻击。
使用 authby=rsasig 连接选项,根据使用带 SHA-1 和 SHA-2 的 RSA 的 X.509 证书进行身份验证。您可以通过将 authby= 设为 ecdsa ,使用 SHA-2 ,以及使用通过 authby=rsa-sha2 的基于 SHA-2 的身份验证的 RSA 概率签名方案(RSASSA-PSS)数字签名来进一步限制 ECDSA 数字签名。默认值为 authby=rsasig,ecdsa。
证书和 authby= 签名方法应匹配。这提高了互操作性,并在一个数字签名系统中保留身份验证。
NULL 身份验证
NULL 身份验证 用来在没有身份验证的情况下获得网状加密。它可防止被动攻击,但不能防止主动攻击。但是,因为 IKEv2 允许非对称身份验证方法,因此 NULL 身份验证也可用于互联网规模的机会主义 IPsec。在此模型中,客户端对服务器进行身份验证,但服务器不对客户端进行身份验证。此模型类似于使用 TLS 的安全网站。使用 authby=null 进行 NULL 身份验证。
保护量子计算机
除了上述身份验证方法外,您还可以使用 Post-quantum Pre-shared Key (PPK)方法来防止量子计算机可能的攻击。单个客户端或客户端组可以通过指定与带外配置的预共享密钥对应的 PPK ID 来使用它们自己的 PPK。
使用带有预共享密钥的 IKEv1 防止量子攻击者。重新设计 IKEv2 不会原生提供这种保护。Libreswan 提供使用 Post-quantum Pre-shared Key (PPK)来保护 IKEv2 连接免受量子攻击。
要启用可选的 PPK 支持,请在连接定义中添加 ppk=yes。如需要 PPK,请添加 ppk=insist。然后,可以给每个客户端一个带有 secret 值的 PPK ID ,该 secret 值在带外进行通信(最好是量子安全的)。PPK 应该具有很强的随机性,而不是基于字典中的单词。PPK ID 和 PPK 数据保存在 ipsec.secrets 文件中,例如:
@west @east : PPKS "user1" "thestringismeanttobearandomstr"
@west @east : PPKS "user1" "thestringismeanttobearandomstr"
PPKS 选项指的是静态 PPK。这个实验性功能使用基于一次性平板的动态 PPK。在每个连接中,一次性平板的一个新部件用作 PPK。当使用时,文件中动态 PPK 的那部分被零覆盖,以防止重复使用。如果没有剩下一次性资源,连接会失败。详情请查看 ipsec.secrets(5) 手册页。
动态 PPK 的实现是作为不受支持的技术预览提供的。请谨慎使用。
23.3.3. 安装 Libreswan 复制链接链接已复制到粘贴板!
在通过 Libreswan IPsec/IKE 实现设置 VPN 之前,您必须安装相应的软件包,启动 ipsec 服务,并在防火墙中允许服务。
先决条件
-
AppStream存储库已启用。
流程
安装
libreswan软件包:yum install libreswan
# yum install libreswanCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果要重新安装 Libreswan,请删除其旧的数据库文件,并创建一个新的数据库:
systemctl stop ipsec rm /etc/ipsec.d/*db ipsec initnss
# systemctl stop ipsec # rm /etc/ipsec.d/*db # ipsec initnssCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启动
ipsec服务,并启用该服务,以便其在引导时自动启动:systemctl enable ipsec --now
# systemctl enable ipsec --nowCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过添加
ipsec服务,将防火墙配置为允许 IKE、ESP 和 AH 协议的 500 和 4500/UDP 端口:firewall-cmd --add-service="ipsec" firewall-cmd --runtime-to-permanent
# firewall-cmd --add-service="ipsec" # firewall-cmd --runtime-to-permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow
23.3.4. 创建主机到主机的 VPN 复制链接链接已复制到粘贴板!
您可以使用原始 RSA 密钥身份验证将 Libreswan 配置为在两个称为 left 和 right 的主机之间创建主机到主机的 IPsec VPN。
先决条件
-
Libreswan 已安装 ,并在每个节点上启动了
ipsec服务。
流程
在每台主机上生成原始 RSA 密钥对:
ipsec newhostkey
# ipsec newhostkeyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 上一步返回生成的密钥的
ckaid。在 左 主机上使用ckaid和以下命令,例如:ipsec showhostkey --left --ckaid 2d3ea57b61c9419dfd6cf43a1eb6cb306c0e857d
# ipsec showhostkey --left --ckaid 2d3ea57b61c9419dfd6cf43a1eb6cb306c0e857dCopy to Clipboard Copied! Toggle word wrap Toggle overflow 上一命令的输出生成了配置所需的
leftrsasigkey=行。在第二台主机(右)上执行相同的操作:ipsec showhostkey --right --ckaid a9e1f6ce9ecd3608c24e8f701318383f41798f03
# ipsec showhostkey --right --ckaid a9e1f6ce9ecd3608c24e8f701318383f41798f03Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
/etc/ipsec.d/目录中,创建一个新的my_host-to-host.conf文件。将上一步中ipsec showhostkey命令的输出中的 RSA 主机密钥写入新文件。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 导入密钥后,重启
ipsec服务:systemctl restart ipsec
# systemctl restart ipsecCopy to Clipboard Copied! Toggle word wrap Toggle overflow 加载连接:
ipsec auto --add mytunnel
# ipsec auto --add mytunnelCopy to Clipboard Copied! Toggle word wrap Toggle overflow 建立隧道:
ipsec auto --up mytunnel
# ipsec auto --up mytunnelCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要在
ipsec服务启动时自动启动隧道,请在连接定义中添加以下行:auto=start
auto=startCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 如果您在带有 DHCP 或无状态地址自动配置(SLAAC)的网络中使用此主机,则连接可能会受到重定向的影响。有关详情和缓解步骤,请参阅将 VPN 连接分配给专用路由表,以防止连接绕过隧道。
23.3.5. 配置站点到站点的 VPN 复制链接链接已复制到粘贴板!
要创建站点到站点的 IPsec VPN,通过加入两个网络,在两个主机之间创建一个 IPsec 隧道。主机因此充当端点,它们配置为允许来自一个或多个子网的流量通过。因此您可以将主机视为到网络远程部分的网关。
站点到站点 VPN 的配置只能与主机到主机 VPN 不同,同时必须在配置文件中指定一个或多个网络或子网。
先决条件
- 已配置了主机到主机的 VPN。
流程
将带有主机到主机 VPN 配置的文件复制到新文件中,例如:
cp /etc/ipsec.d/my_host-to-host.conf /etc/ipsec.d/my_site-to-site.conf
# cp /etc/ipsec.d/my_host-to-host.conf /etc/ipsec.d/my_site-to-site.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在上一步创建的文件中添加子网配置,例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 如果您在带有 DHCP 或无状态地址自动配置(SLAAC)的网络中使用此主机,则连接可能会受到重定向的影响。有关详情和缓解步骤,请参阅将 VPN 连接分配给专用路由表,以防止连接绕过隧道。
23.3.6. 配置远程访问 VPN 复制链接链接已复制到粘贴板!
公路勇士是指拥有移动客户端和动态分配的 IP 地址的旅行用户。移动客户端使用 X.509 证书进行身份验证。
以下示例显示了 IKEv2 的配置,并且避免使用 IKEv1 XAUTH 协议。
在服务器中:
在移动客户端(即 road warrior 的设备)上,使用与之前配置稍有不同的配置:
如果您在带有 DHCP 或无状态地址自动配置(SLAAC)的网络中使用此主机,则连接可能会受到重定向的影响。有关详情和缓解步骤,请参阅将 VPN 连接分配给专用路由表,以防止连接绕过隧道。
23.3.7. 配置网格 VPN 复制链接链接已复制到粘贴板!
网格 VPN 网络(也称为 any-to-any VPN ) 是一个所有节点都使用 IPsec 进行通信的网络。该配置可以对于无法使用 IPsec 的节点进行例外处理。可使用两种方式配置网格 VPN 网络:
- 需要 IPsec。
- 首选 IPsec,但允许回退到使用明文通信。
节点之间的身份验证可以基于 X.509 证书或 DNS 安全扩展(DNSSEC)。
您对 opportunistic IPsec 使用任何常规的 IKEv2 验证方法,因为这些连接是常规的 Libreswan 配置,除了由 right=%opportunisticgroup 条目定义的 opportunistic IPsec 之外。常见的身份验证方法是主机使用常用共享认证机构(CA)根据 X.509 证书进行互相验证。作为标准流程的一部分,云部署通常为云中的每个节点发布证书。
不要使用 PreSharedKey (PSK)身份验证,因为一个有危险的主机会导致组 PSK secret 也有危险。
您可以使用 NULL 身份验证在节点间部署加密,而无需认证,这只防止被动攻击者。
以下流程使用 X.509 证书。您可以使用任何类型的 CA 管理系统(如 Dogtag 证书系统)生成这些证书。Dogtag 假设每个节点的证书都以 PKCS #12 格式(.p12 文件)提供,其包含私钥、节点证书和用于验证其他节点的 X.509 证书的根 CA 证书。
每个节点的配置与其 X.509 证书不同。这允许在不重新配置网络中的任何现有节点的情况下添加新节点。PKCS #12 文件需要一个"友好名称",为此,我们使用名称"节点",这样引用友好名称的配置文件对所有节点都是相同的。
先决条件
-
Libreswan 已安装 ,并在每个节点上启动了
ipsec服务。 一个新的 NSS 数据库已初始化。
如果您已经有一个旧的 NSS 数据库,请删除旧的数据库文件:
systemctl stop ipsec rm /etc/ipsec.d/*db
# systemctl stop ipsec # rm /etc/ipsec.d/*dbCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以使用以下命令初始化新数据库:
ipsec initnss
# ipsec initnssCopy to Clipboard Copied! Toggle word wrap Toggle overflow
流程
在每个节点中导入 PKCS #12 文件。此步骤需要用于生成 PKCS #12 文件的密码:
ipsec import nodeXXX.p12
# ipsec import nodeXXX.p12Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为
IPsec 需要的(专用)、IPsec 可选的(private-or-clear)和No IPsec(clear)配置文件创建以下三个连接定义:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
auto变量有几个选项:您可以使用带有 opportunistic IPsec 的
ondemand连接选项来启动 IPsec 连接,或者用于显式配置不需要一直激活的连接。这个选项在内核中建立一个陷阱 XFRM 策略,使 IPsec 连接在收到与该策略匹配的第一个数据包时开始。您可以使用以下选项有效地配置和管理 IPsec 连接,无论是使用 Opportunistic IPsec 还是明确配置的连接:
add选项-
加载连接配置,并为响应远程启动做好准备。但是,连接不会自动从本地端启动。您可以使用
ipsec auto --up命令手动启动 IPsec 连接。 start选项- 加载连接配置,并为响应远程启动做好准备。此外,它会立即启动到远程对等点的连接。您可以将这个选项用于永久的和一直活跃的连接。
- 2
leftid和rightid变量标识 IPsec 隧道连接的右和左通道。如果您配置了证书,您可以使用这些变量来获取本地 IP 地址或本地证书的主题 DN 的值。- 3
leftcert变量定义您要使用的 NSS 数据库的昵称。
将网络的 IP 地址添加到对应的类中。例如,如果所有节点都位于
10.15.0.0/16网络中,则所有节点都必须使用 IPsec 加密:echo "10.15.0.0/16" >> /etc/ipsec.d/policies/private
# echo "10.15.0.0/16" >> /etc/ipsec.d/policies/privateCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要允许某些节点(如
10.15.34.0/24)使用或不使用 IPsec,请将这些节点添加到 private-or-clear 组中:echo "10.15.34.0/24" >> /etc/ipsec.d/policies/private-or-clear
# echo "10.15.34.0/24" >> /etc/ipsec.d/policies/private-or-clearCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要定义一个主机(如
10.15.1.2),其不能将 IPsec 添加到 clear 组中,请使用:echo "10.15.1.2/32" >> /etc/ipsec.d/policies/clear
# echo "10.15.1.2/32" >> /etc/ipsec.d/policies/clearCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以在
/etc/ipsec.d/policies目录中从每个新节点的模板创建文件,也可以使用 Puppet 或 Ansible 来置备它们。请注意,每个节点都有相同的异常列表或不同的流量预期。因此,两个节点可能无法通信,因为一个节点需要 IPsec,而另一个节点无法使用 IPsec。
重启节点将其添加到配置的网格中:
systemctl restart ipsec
# systemctl restart ipsecCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 如果您在带有 DHCP 或无状态地址自动配置(SLAAC)的网络中使用此主机,则连接可能会受到重定向的影响。有关详情和缓解步骤,请参阅将 VPN 连接分配给专用路由表,以防止连接绕过隧道。
验证
使用
ping命令打开 IPsec 隧道:ping <nodeYYY>
# ping <nodeYYY>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示带有导入认证的 NSS 数据库:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查看节点上哪个隧道打开了:
ipsec trafficstatus 006 #2: "private#10.15.0.0/16"[1] ...<nodeYYY>, type=ESP, add_time=1691399301, inBytes=512, outBytes=512, maxBytes=2^63B, id='C=US, ST=NC, O=Example Organization, CN=east'
# ipsec trafficstatus 006 #2: "private#10.15.0.0/16"[1] ...<nodeYYY>, type=ESP, add_time=1691399301, inBytes=512, outBytes=512, maxBytes=2^63B, id='C=US, ST=NC, O=Example Organization, CN=east'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.3.8. 部署符合 FIPS 的 IPsec VPN 复制链接链接已复制到粘贴板!
您可以使用 Libreswan 部署一个符合 FIPS 的 IPsec VPN 解决方案。为此,您可以识别哪些加密算法可用,且哪些在 FIPS 模式下对 Libreswan 禁用了。
先决条件
-
AppStream存储库已启用。
流程
安装
libreswan软件包:yum install libreswan
# yum install libreswanCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您要重新安装 Libreswan,请删除其旧的 NSS 数据库:
systemctl stop ipsec rm /etc/ipsec.d/*db
# systemctl stop ipsec # rm /etc/ipsec.d/*dbCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启动
ipsec服务,并启用该服务,以便其在引导时自动启动:systemctl enable ipsec --now
# systemctl enable ipsec --nowCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过添加
ipsec服务,将防火墙配置为允许 IKE、ESP 和 AH 协议的500和4500UDP 端口:firewall-cmd --add-service="ipsec" firewall-cmd --runtime-to-permanent
# firewall-cmd --add-service="ipsec" # firewall-cmd --runtime-to-permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将系统切换到 FIPS 模式:
fips-mode-setup --enable
# fips-mode-setup --enableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启您的系统以允许内核切换到 FIPS 模式:
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
确认 Libreswan 是否在 FIPS 模式下运行:
ipsec whack --fipsstatus 000 FIPS mode enabled
# ipsec whack --fipsstatus 000 FIPS mode enabledCopy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,检查
systemd日志中的ipsec单元条目:journalctl -u ipsec ... Jan 22 11:26:50 localhost.localdomain pluto[3076]: FIPS Product: YES Jan 22 11:26:50 localhost.localdomain pluto[3076]: FIPS Kernel: YES Jan 22 11:26:50 localhost.localdomain pluto[3076]: FIPS Mode: YES
$ journalctl -u ipsec ... Jan 22 11:26:50 localhost.localdomain pluto[3076]: FIPS Product: YES Jan 22 11:26:50 localhost.localdomain pluto[3076]: FIPS Kernel: YES Jan 22 11:26:50 localhost.localdomain pluto[3076]: FIPS Mode: YESCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以 FIPS 模式查看可用算法:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 FIPS 模式查询禁用的算法:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 FIPS 模式中列出所有允许的算法和密码:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.3.9. 使用密码保护 IPsec NSS 数据库 复制链接链接已复制到粘贴板!
默认情况下,IPsec 服务在第一次启动时使用空密码创建其网络安全服务(NSS)数据库。要提高安全性,您可以添加密码保护。
在 RHEL 6.6 和之前的版本中,您必须使用一个密码来保护 IPsec NSS 数据库,以满足 FIPS 140-2 标准的要求,因为 NSS 加密库是针对 FIPS 140-2 Level 2 标准认证的。在 RHEL 8 中,NIS 将 NSS 认证为该标准级别 1,并且该状态不需要对数据库进行密码保护。
先决条件
-
/etc/ipsec.d/目录包含 NSS 数据库文件。
流程
为 Libreswan 的
NSS数据库启用密码保护:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建包含您在上一步中设置的密码的
/etc/ipsec.d/nsspassword文件,例如:cat /etc/ipsec.d/nsspassword NSS Certificate DB:_<password>_
# cat /etc/ipsec.d/nsspassword NSS Certificate DB:_<password>_Copy to Clipboard Copied! Toggle word wrap Toggle overflow nsspassword文件使用以下语法:<token_1>:<password1> <token_2>:<password2>
<token_1>:<password1> <token_2>:<password2>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 默认的 NSS 软件令牌是
NSS 证书 数据库。如果您的系统以 FIPS 模式运行,则令牌的名称为NSS FIPS 140-2 证书数据库。根据您的场景,在完成了
nsspassword文件后,启动或重启ipsec服务:systemctl restart ipsec
# systemctl restart ipsecCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在其 NSS 数据库中添加非空密码后,检查
ipsec服务是否运行:systemctl status ipsec ● ipsec.service - Internet Key Exchange (IKE) Protocol Daemon for IPsec Loaded: loaded (/usr/lib/systemd/system/ipsec.service; enabled; vendor preset: disable> Active: active (running)...
# systemctl status ipsec ● ipsec.service - Internet Key Exchange (IKE) Protocol Daemon for IPsec Loaded: loaded (/usr/lib/systemd/system/ipsec.service; enabled; vendor preset: disable> Active: active (running)...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查
Journal日志是否包含确认成功初始化的条目:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.3.10. 配置 IPsec VPN 以使用 TCP 复制链接链接已复制到粘贴板!
Libreswan 支持 IKE 和 IPsec 数据包的 TCP 封装,如 RFC 8229 所述。有了这个功能,您可以在网络上建立 IPsec VPN,以防止通过 UDP 和封装安全负载(ESP)传输的流量。您可以将 VPN 服务器和客户端配置为使用 TCP 作为回退,或者作为主 VPN 传输协议。由于 TCP 封装的性能成本较高,因此只有在您的场景中需要永久阻止 UDP 时,才使用 TCP 作为主 VPN 协议。
先决条件
- 已配置了 远程访问 VPN。
流程
在
/etc/ipsec.conf文件的config setup部分中添加以下选项:listen-tcp=yes
listen-tcp=yesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要在第一次尝试 UDP 失败时使用 TCP 封装作为回退选项,请在客户端的连接定义中添加以下两个选项:
enable-tcp=fallback tcp-remoteport=4500
enable-tcp=fallback tcp-remoteport=4500Copy to Clipboard Copied! Toggle word wrap Toggle overflow 另外,如果您知道 UDP 会被永久阻止,请在客户端的连接配置中使用以下选项:
enable-tcp=yes tcp-remoteport=4500
enable-tcp=yes tcp-remoteport=4500Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.3.11. 配置自动检测和使用 ESP 硬件卸载来加速 IPsec 连接 复制链接链接已复制到粘贴板!
卸载硬件的封装安全负载(ESP)来加速以太网上的 IPsec 连接。默认情况下,Libreswan 会检测硬件是否支持这个功能,并因此启用 ESP 硬件卸载。如果这个功能被禁用或被明确启用,您可以切回到自动检测。
先决条件
- 网卡支持 ESP 硬件卸载。
- 网络驱动程序支持 ESP 硬件卸载。
- IPsec 连接已配置且可以正常工作。
流程
-
编辑连接的
/etc/ipsec.d/目录中的 Libreswan 配置文件,该文件应使用 ESP 硬件卸载支持的自动检测。 -
确保连接的设置中没有设置
nic-offload参数。 如果您删除了
nic-offload,请重启ipsec服务:systemctl restart ipsec
# systemctl restart ipsecCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示 IPsec 连接使用的以太网设备的
tx_ipsec和rx_ipsec计数器:ethtool -S enp1s0 | grep -E "_ipsec" tx_ipsec: 10 rx_ipsec: 10# ethtool -S enp1s0 | grep -E "_ipsec" tx_ipsec: 10 rx_ipsec: 10Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过 IPsec 隧道发送流量。例如,ping 远程 IP 地址:
ping -c 5 remote_ip_address
# ping -c 5 remote_ip_addressCopy to Clipboard Copied! Toggle word wrap Toggle overflow 再次显示以太网设备的
tx_ipsec和rx_ipsec计数器:ethtool -S enp1s0 | grep -E "_ipsec" tx_ipsec: 15 rx_ipsec: 15# ethtool -S enp1s0 | grep -E "_ipsec" tx_ipsec: 15 rx_ipsec: 15Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果计数器值增加了,ESP 硬件卸载正常工作。
23.3.12. 在绑定中配置 ESP 硬件卸载以加快 IPsec 连接 复制链接链接已复制到粘贴板!
将封装安全负载(ESP)卸载到硬件可加速 IPsec 连接。如果出于故障转移原因而使用网络绑定,配置 ESP 硬件卸载的要求和流程与使用常规以太网设备的要求和流程不同。例如,在这种情况下,您可以对绑定启用卸载支持,内核会将设置应用到绑定的端口。
先决条件
-
绑定中的所有网卡都支持 ESP 硬件卸载。使用
ethtool -k <interface_name> | grep "esp-hw-offload"命令验证每个绑定端口是否都支持此功能。 - 绑定已配置且可以正常工作。
-
该绑定使用
active-backup模式。绑定驱动程序不支持此功能的任何其他模式。 - IPsec 连接已配置且可以正常工作。
流程
对网络绑定启用 ESP 硬件卸载支持:
nmcli connection modify bond0 ethtool.feature-esp-hw-offload on
# nmcli connection modify bond0 ethtool.feature-esp-hw-offload onCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这个命令在对
bond0连接启用 ESP 硬件卸载支持。重新激活
bond0连接:nmcli connection up bond0
# nmcli connection up bond0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑应使用 ESP 硬件卸载的连接的
/etc/ipsec.d/目录中的 Libreswan 配置文件,并将nic-offload=yes语句附加到连接条目:conn example ... nic-offload=yesconn example ... nic-offload=yesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
ipsec服务:systemctl restart ipsec
# systemctl restart ipsecCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证方法取决于各种方面,如内核版本和驱动程序。例如,某些驱动程序提供计数器,但它们的名称可能会有所不同。详情请查看您的网络驱动程序的文档。
以下验证步骤适用于 Red Hat Enterprise Linux 8 上的 ixgbe 驱动程序:
显示绑定的活动端口:
grep "Currently Active Slave" /proc/net/bonding/bond0 Currently Active Slave: enp1s0
# grep "Currently Active Slave" /proc/net/bonding/bond0 Currently Active Slave: enp1s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示活动端口的
tx_ipsec和rx_ipsec计数器:ethtool -S enp1s0 | grep -E "_ipsec" tx_ipsec: 10 rx_ipsec: 10# ethtool -S enp1s0 | grep -E "_ipsec" tx_ipsec: 10 rx_ipsec: 10Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过 IPsec 隧道发送流量。例如,ping 远程 IP 地址:
ping -c 5 remote_ip_address
# ping -c 5 remote_ip_addressCopy to Clipboard Copied! Toggle word wrap Toggle overflow 再次显示活动端口的
tx_ipsec和rx_ipsec计数器:ethtool -S enp1s0 | grep -E "_ipsec" tx_ipsec: 15 rx_ipsec: 15# ethtool -S enp1s0 | grep -E "_ipsec" tx_ipsec: 15 rx_ipsec: 15Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果计数器值增加了,ESP 硬件卸载正常工作。
23.3.13. 使用 RHEL 系统角色配置 VPN 连接 复制链接链接已复制到粘贴板!
VPN 是一个加密连接,用于通过不受信任的网络安全地传输流量。通过使用 vpn RHEL 系统角色,您可以自动化创建 VPN 配置的过程。
vpn RHEL 系统角色只支持 Libreswan (它是一个 IPsec 实现,作为 VPN 提供商)。
您可以使用 IPsec ,通过 VPN 直接将主机互联。主机可以使用预共享密钥(PSK)进行相互验证。通过使用 vpn RHEL 系统角色,您可以自动化创建带有 PSK 身份验证的 IPsec 主机到主机连接的过程。
默认情况下,角色创建一个基于隧道的 VPN。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
hosts: <list>定义一个 YAML 字典,其中包含您想要在它们之间配置 VPN 的主机。如果条目不是一个 Ansible 管理的节点,则您必须在
hostname参数中指定其完全限定域名(FQDN)或 IP 地址,例如:... - hosts: ... external-host.example.com: hostname: 192.0.2.1... - hosts: ... external-host.example.com: hostname: 192.0.2.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 角色在每个受管节点上配置 VPN 连接。连接被命名为
<host_A>-to-<host_B>,例如managed-node-01.example.com-to-managed-node-02.example.com。请注意,角色不能在外部(未管理的)节点上配置 Libreswan。您必须在这些主机上手动创建配置。auth_method: psk-
在主机之间启用 PSK 身份验证。角色在控制节点上使用
openssl来创建 PSK。 auto: <start-up_method>-
指定连接的启动方法。有效值是
add、ondemand、start和ignore。详情请查看安装了 Libreswan 的系统上的ipsec.conf (5)手册页。此变量的默认值为 null,这意味着没有自动启动操作。 vpn_manage_firewall: true-
定义角色在受管节点上的
firewalld服务中打开所需的端口。 vpn_manage_selinux: true- 定义角色在 IPsec 端口上设置所需的 SELinux 端口类型。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.vpn/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
确认连接已成功启动,例如:
ansible managed-node-01.example.com -m shell -a 'ipsec trafficstatus | grep "managed-node-01.example.com-to-managed-node-02.example.com"' ... 006 #3: "managed-node-01.example.com-to-managed-node-02.example.com", type=ESP, add_time=1741857153, inBytes=38622, outBytes=324626, maxBytes=2^63B, id='@managed-node-02.example.com'
# ansible managed-node-01.example.com -m shell -a 'ipsec trafficstatus | grep "managed-node-01.example.com-to-managed-node-02.example.com"' ... 006 #3: "managed-node-01.example.com-to-managed-node-02.example.com", type=ESP, add_time=1741857153, inBytes=38622, outBytes=324626, maxBytes=2^63B, id='@managed-node-02.example.com'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,只有在 VPN 连接活跃时,这个命令才会成功。如果将 playbook 中的
auto变量设置为start以外的值,您可能需要首先手动激活受管节点上的连接。
您可以使用 IPsec ,通过 VPN 直接将主机互联。例如,要通过最大程度减少被截获或破坏的控制消息的风险来增强安全性,您可以为数据流量和控制流量配置单独的连接。通过使用 vpn RHEL 系统角色,您可以自动化创建带有单独的数据和控制平面及 PSK 身份验证的 IPsec 主机到主机连接的过程。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
hosts: <list>定义一个 YAML 字典,其中包含您想要在它们之间配置 VPN 的主机。连接被命名为
<name>-<IP_address_A>-to-<IP_address_B>,例如control_plane_vpn-203.0.113.1-to-198.51.100.2。角色在每个受管节点上配置 VPN 连接。请注意,角色不能在外部(未管理的)节点上配置 Libreswan。您必须在这些主机上手动创建配置。
auth_method: psk-
在主机之间启用 PSK 身份验证。角色在控制节点上使用
openssl来创建预共享密钥。 auto: <start-up_method>-
指定连接的启动方法。有效值是
add、ondemand、start和ignore。详情请查看安装了 Libreswan 的系统上的ipsec.conf (5)手册页。此变量的默认值为 null,这意味着没有自动启动操作。 vpn_manage_firewall: true-
定义角色在受管节点上的
firewalld服务中打开所需的端口。 vpn_manage_selinux: true- 定义角色在 IPsec 端口上设置所需的 SELinux 端口类型。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.vpn/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
确认连接已成功启动,例如:
ansible managed-node-01.example.com -m shell -a 'ipsec trafficstatus | grep "control_plane_vpn-203.0.113.1-to-198.51.100.2"' ... 006 #3: "control_plane_vpn-203.0.113.1-to-198.51.100.2", type=ESP, add_time=1741860073, inBytes=0, outBytes=0, maxBytes=2^63B, id='198.51.100.2'
# ansible managed-node-01.example.com -m shell -a 'ipsec trafficstatus | grep "control_plane_vpn-203.0.113.1-to-198.51.100.2"' ... 006 #3: "control_plane_vpn-203.0.113.1-to-198.51.100.2", type=ESP, add_time=1741860073, inBytes=0, outBytes=0, maxBytes=2^63B, id='198.51.100.2'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,只有在 VPN 连接活跃时,这个命令才会成功。如果将 playbook 中的
auto变量设置为start以外的值,您可能需要首先手动激活受管节点上的连接。
Libreswan 支持创建一个机会网格,以便在每个主机上带有单个配置的大量主机之间建立 IPsec 连接。将主机添加到网格中不需要更新现有主机上的配置。为提高安全性,请在 Libreswan 中使用基于证书的身份验证。
通过使用 vpn RHEL 系统角色,您可以在受管节点之间自动化配置带有基于证书的身份验证的 VPN 网格。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 您可以为每个受管节点准备一个 PKCS #12 文件:
每个文件包含:
- 证书颁发机构(CA)证书
- 节点的私钥
- 节点的客户端证书
-
文件被命名为
<managed_node_name_as_in_the_inventory>.p12。 - 文件存储在与 playbook 相同的目录中。
流程
编辑
~/inventory文件,并附加cert_name变量:managed-node-01.example.com cert_name=managed-node-01.example.com managed-node-02.example.com cert_name=managed-node-02.example.com managed-node-03.example.com cert_name=managed-node-03.example.com
managed-node-01.example.com cert_name=managed-node-01.example.com managed-node-02.example.com cert_name=managed-node-02.example.com managed-node-03.example.com cert_name=managed-node-03.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
cert_name变量设置为每个主机的证书中使用的通用名称(CN)字段的值。通常,CN 字段被设置为完全限定域名(FQDN)。将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:pkcs12_pwd: <password>
pkcs12_pwd: <password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
opportunistic: true-
在多个主机之间启用机会网格。
policies变量定义哪些子网和主机流量必须或可以加密,它们中哪些应该继续使用明文连接。 auth_method: cert- 启用基于证书的身份验证。这要求您在清单中指定每个受管节点的证书的昵称。
policies: <list_of_policies>以 YAML 列表格式定义 Libreswan 策略。
默认策略是
private-or-clear。要将它改为private,上面的 playbook 包含默认cidr条目的一个相应策略。如果 Ansible 控制节点与受管节点在同一个 IP 子网中,要防止执行 playbook 期间丢失 SSH 连接,请为控制节点的 IP 地址添加一个
clear策略。例如,如果应该为192.0.2.0/24子网配置网格,并且控制节点使用 IP 地址192.0.2.1,则您需要一个用于192.0.2.1/32的clear策略,如 playbook 中所示。有关策略的详情,请查看安装了 Libreswan 的系统上的
ipsec.conf (5)手册页。vpn_manage_firewall: true-
定义角色在受管节点上的
firewalld服务中打开所需的端口。 vpn_manage_selinux: true- 定义角色在 IPsec 端口上设置所需的 SELinux 端口类型。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.vpn/README.md文件。验证 playbook 语法:
ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在网格的一个节点上,ping 另一个节点来激活连接:
ping managed-node-02.example.com
[root@managed-node-01]# ping managed-node-02.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 确认连接是否处于活跃状态:
ipsec trafficstatus 006 #2: "private#192.0.2.0/24"[1] ...192.0.2.2, type=ESP, add_time=1741938929, inBytes=372408, outBytes=545728, maxBytes=2^63B, id='CN=managed-node-02.example.com'
[root@managed-node-01]# ipsec trafficstatus 006 #2: "private#192.0.2.0/24"[1] ...192.0.2.2, type=ESP, add_time=1741938929, inBytes=372408, outBytes=545728, maxBytes=2^63B, id='CN=managed-node-02.example.com'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.3.14. 配置选择不使用系统范围的加密策略的 IPsec 连接 复制链接链接已复制到粘贴板!
为连接覆盖系统范围的加密策略
RHEL 系统范围的加密策略会创建一个名为 %default 的特殊连接。此连接包含 ikev2、esp 和 ike 选项的默认值。但是,您可以通过在连接配置文件中指定上述选项来覆盖默认值。
例如,以下配置允许使用带有 AES 和 SHA-1 或 SHA-2的 IKEv1 连接,以及带有 AES-GCM 或 AES-CBC 的 IPsec(ESP) 连接:
请注意,AES-GCM 可用于 IPsec(ESP)和 IKEv2,但不适用于 IKEv1。
为所有连接禁用系统范围的加密策略
要禁用所有 IPsec 连接的系统范围的加密策略,请在 /etc/ipsec.conf 文件中注释掉以下行:
include /etc/crypto-policies/back-ends/libreswan.config
include /etc/crypto-policies/back-ends/libreswan.config
然后将 ikev2=never 选项添加到连接配置文件。
23.3.15. IPsec VPN 配置故障排除 复制链接链接已复制到粘贴板!
与 IPsec VPN 配置相关的问题通常是由于几个主要原因造成的。如果您遇到此类问题,您可以检查问题的原因是否符合一下任何一种情况,并应用相应的解决方案。
基本连接故障排除
VPN 连接的大多数问题都发生在新部署中,管理员使用不匹配的配置选项配置了端点。此外,正常工作的配置可能会突然停止工作,通常是由于新引入的不兼容的值。这可能是管理员更改配置的结果。或者,管理员可能已安装了固件更新,或者使用某些选项的不同默认值(如加密算法)安装了软件包更新。
要确认已建立 IPsec VPN 连接:
ipsec trafficstatus 006 #8: "vpn.example.com"[1] 192.0.2.1, type=ESP, add_time=1595296930, inBytes=5999, outBytes=3231, id='@vpn.example.com', lease=100.64.13.5/32
# ipsec trafficstatus
006 #8: "vpn.example.com"[1] 192.0.2.1, type=ESP, add_time=1595296930, inBytes=5999, outBytes=3231, id='@vpn.example.com', lease=100.64.13.5/32
如果输出为空或者没有显示具有连接名称的条目,则隧道将断开。
检查连接中的问题:
重新载入 vpn.example.com 连接:
ipsec auto --add vpn.example.com 002 added connection description "vpn.example.com"
# ipsec auto --add vpn.example.com 002 added connection description "vpn.example.com"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 下一步,启动 VPN 连接:
ipsec auto --up vpn.example.com
# ipsec auto --up vpn.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow
与防火墙相关的问题
最常见的问题是,其中一个 IPsec 端点或端点之间路由器上的防火墙将所有互联网密钥交换(IKE)数据包丢弃。
对于 IKEv2,类似以下示例的输出说明防火墙出现问题:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 IKEv1,启动命令的输出如下:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
由于用于设置 IPsec 的 IKE 协议已经加密,因此您只能使用 tcpdump 工具排除一小部分问题。如果防火墙丢弃了 IKE 或 IPsec 数据包,您可以尝试使用 tcpdump 工具来查找原因。但是,tcpdump 无法诊断 IPsec VPN 连接的其他问题。
捕获
eth0接口上的 VPN 协商以及所有加密数据:tcpdump -i eth0 -n -n esp or udp port 500 or udp port 4500 or tcp port 4500
# tcpdump -i eth0 -n -n esp or udp port 500 or udp port 4500 or tcp port 4500Copy to Clipboard Copied! Toggle word wrap Toggle overflow
不匹配的算法、协议和策略
VPN 连接要求端点具有匹配的 IKE 算法、IPsec 算法和 IP 地址范围。如果发生不匹配,连接会失败。如果您使用以下方法之一发现不匹配,请通过匹配算法、协议或策略来修复它。
如果远程端点没有运行 IKE/IPsec,您可以看到一个 ICMP 数据包来指示它。例如:
ipsec auto --up vpn.example.com ... 000 "vpn.example.com"[1] 192.0.2.2 #16: ERROR: asynchronous network error report on wlp2s0 (192.0.2.2:500), complainant 198.51.100.1: Connection refused [errno 111, origin ICMP type 3 code 3 (not authenticated)] ...
# ipsec auto --up vpn.example.com ... 000 "vpn.example.com"[1] 192.0.2.2 #16: ERROR: asynchronous network error report on wlp2s0 (192.0.2.2:500), complainant 198.51.100.1: Connection refused [errno 111, origin ICMP type 3 code 3 (not authenticated)] ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 不匹配 IKE 算法示例:
ipsec auto --up vpn.example.com ... 003 "vpn.example.com"[1] 193.110.157.148 #3: dropping unexpected IKE_SA_INIT message containing NO_PROPOSAL_CHOSEN notification; message payloads: N; missing payloads: SA,KE,Ni
# ipsec auto --up vpn.example.com ... 003 "vpn.example.com"[1] 193.110.157.148 #3: dropping unexpected IKE_SA_INIT message containing NO_PROPOSAL_CHOSEN notification; message payloads: N; missing payloads: SA,KE,NiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 不匹配 IPsec 算法示例:
ipsec auto --up vpn.example.com ... 182 "vpn.example.com"[1] 193.110.157.148 #5: STATE_PARENT_I2: sent v2I2, expected v2R2 {auth=IKEv2 cipher=AES_GCM_16_256 integ=n/a prf=HMAC_SHA2_256 group=MODP2048} 002 "vpn.example.com"[1] 193.110.157.148 #6: IKE_AUTH response contained the error notification NO_PROPOSAL_CHOSEN# ipsec auto --up vpn.example.com ... 182 "vpn.example.com"[1] 193.110.157.148 #5: STATE_PARENT_I2: sent v2I2, expected v2R2 {auth=IKEv2 cipher=AES_GCM_16_256 integ=n/a prf=HMAC_SHA2_256 group=MODP2048} 002 "vpn.example.com"[1] 193.110.157.148 #6: IKE_AUTH response contained the error notification NO_PROPOSAL_CHOSENCopy to Clipboard Copied! Toggle word wrap Toggle overflow 不匹配的 IKE 版本还可导致远程端点在没有响应的情况下丢弃请求。这与丢弃所有 IKE 数据包的防火墙相同。
IKEv2 不匹配的 IP 地址范围示例(称为流量选择器 - TS):
ipsec auto --up vpn.example.com ... 1v2 "vpn.example.com" #1: STATE_PARENT_I2: sent v2I2, expected v2R2 {auth=IKEv2 cipher=AES_GCM_16_256 integ=n/a prf=HMAC_SHA2_512 group=MODP2048} 002 "vpn.example.com" #2: IKE_AUTH response contained the error notification TS_UNACCEPTABLE# ipsec auto --up vpn.example.com ... 1v2 "vpn.example.com" #1: STATE_PARENT_I2: sent v2I2, expected v2R2 {auth=IKEv2 cipher=AES_GCM_16_256 integ=n/a prf=HMAC_SHA2_512 group=MODP2048} 002 "vpn.example.com" #2: IKE_AUTH response contained the error notification TS_UNACCEPTABLECopy to Clipboard Copied! Toggle word wrap Toggle overflow IKEv1 的不匹配 IP 地址范围示例:
ipsec auto --up vpn.example.com ... 031 "vpn.example.com" #2: STATE_QUICK_I1: 60 second timeout exceeded after 0 retransmits. No acceptable response to our first Quick Mode message: perhaps peer likes no proposal
# ipsec auto --up vpn.example.com ... 031 "vpn.example.com" #2: STATE_QUICK_I1: 60 second timeout exceeded after 0 retransmits. No acceptable response to our first Quick Mode message: perhaps peer likes no proposalCopy to Clipboard Copied! Toggle word wrap Toggle overflow 当在 IKEv1 中使用预共享密钥(PSK)时,如果双方没有放入相同的 PSK ,则整个 IKE 信息将无法读取:
ipsec auto --up vpn.example.com ... 003 "vpn.example.com" #1: received Hash Payload does not match computed value 223 "vpn.example.com" #1: sending notification INVALID_HASH_INFORMATION to 192.0.2.23:500
# ipsec auto --up vpn.example.com ... 003 "vpn.example.com" #1: received Hash Payload does not match computed value 223 "vpn.example.com" #1: sending notification INVALID_HASH_INFORMATION to 192.0.2.23:500Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 IKEv2 中,不匹配-PSK 错误会导致 AUTHENTICATION_FAILED 信息:
ipsec auto --up vpn.example.com ... 002 "vpn.example.com" #1: IKE SA authentication request rejected by peer: AUTHENTICATION_FAILED
# ipsec auto --up vpn.example.com ... 002 "vpn.example.com" #1: IKE SA authentication request rejected by peer: AUTHENTICATION_FAILEDCopy to Clipboard Copied! Toggle word wrap Toggle overflow
最大传输单元
除防火墙阻止 IKE 或 IPsec 数据包外,网络问题的最常见原因与加密数据包的数据包大小增加有关。网络硬件对于大于最大传输单元(MTU)的数据包进行分片处理,例如 1500 字节。通常,片会丢失,数据包无法重新组装。当使用小数据包的 ping 测试可以正常工作,但其他流量失败时,这会导致间歇性故障。在这种情况下,您可以建立一个 SSH 会话,但是一使用它,终端就会冻结,例如,在远程主机上输入 'ls -al /usr' 命令。
要临时解决这个问题,请通过将 mtu=1400 选项添加到隧道配置文件中来减小 MTU 大小。
另外,对于 TCP 连接,启用更改 MSS 值的 iptables 规则:
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
# iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
如果上一命令没有解决您场景中的问题,请在 set-mss 参数中直接指定较小的数值:
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1380
# iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1380
网络地址转换(NAT)
当 IPsec 主机也充当 NAT 路由器时,可能会意外地重新映射数据包。以下示例配置演示了这个问题:
地址为 172.16.0.1 的系统有一个 NAT 规则:
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
如果地址为 10.0.2.33 的系统将数据包发送到 192.168.0.1,那么路由器会在应用 IPsec 加密前将源 10.0.2.33 转换为 172.16.0.1。
然后,源地址为 10.0.2.33 的数据包不再与 conn myvpn 配置匹配, IPsec 不会加密此数据包。
要解决这个问题,请在路由器上插入目标 IPsec 子网范围不包含 NAT 的规则,例如:
iptables -t nat -I POSTROUTING -s 10.0.2.0/24 -d 192.168.0.0/16 -j RETURN
iptables -t nat -I POSTROUTING -s 10.0.2.0/24 -d 192.168.0.0/16 -j RETURN
内核 IPsec 子系统错误
例如,当 bug 导致 IKE 用户空间和 IPsec 内核不同步时,内核 IPsec 子系统可能会失败。检查此问题:
cat /proc/net/xfrm_stat XfrmInError 0 XfrmInBufferError 0 ...
$ cat /proc/net/xfrm_stat
XfrmInError 0
XfrmInBufferError 0
...
上一命令输出中的任何非零值都表示有问题。如果您遇到这个问题,请开一个新的 支持问题单,并附上上一命令的输出与对应的 IKE 日志。
libreswan 日志
默认情况下,Libreswan 使用 syslog 协议的日志。您可以使用 journalctl 命令来查找与 IPsec 有关的日志条目。因为日志中相应的条目是由 pluto IKE 守护进程发送的,因此请搜索 "pluto" 关键字,例如:
journalctl -b | grep pluto
$ journalctl -b | grep pluto
显示 ipsec 服务的实时日志:
journalctl -f -u ipsec
$ journalctl -f -u ipsec
如果默认日志记录级别没有显示您的配置问题,请将 plutodebug=all 选项添加到 /etc/ipsec.conf 文件的 config setup 部分来启用调试日志。
请注意,调试日志记录会生成大量的条目,journald 或 syslogd 服务的速率可能会抑制 syslog 消息。要确保您有完整的日志,请将日志记录重定向到文件中。编辑 /etc/ipsec.conf,并在 config setup 部分中添加 logfile=/var/log/pluto.log。
23.3.16. 使用 control-center 配置 VPN 连接 复制链接链接已复制到粘贴板!
如果您使用带有图形界面的 Red Hat Enterprise Linux,您可以在 GNOME control-center 中配置 VPN 连接。
先决条件
-
已安装
NetworkManager-libreswan-gnome软件包。
流程
-
按 Super 键,输入
Settings,然后按 Enter 键打开control-center应用程序。 -
选择左侧的
Network条目。 - 点 + 图标。
-
选择
VPN。 选择
Identity菜单项来查看基本配置选项:General
Gateway- 远程 VPN 网关的名称或IP地址。认证
Type-
IKEv2(Certificate)- 客户端通过证书进行身份验证。它更安全(默认)。 IKEv1(XAUTH)- 客户端通过用户名和密码或预共享密钥(PSK)进行身份验证。以下配置设置在
高级部分中提供:图 23.1. VPN 连接的高级选项
警告当使用
gnome-control-center应用程序配置基于 IPsec 的 VPN 连接时,高级对话框会显示配置,但它不允许任何更改。因此,用户无法更改任何高级 IPsec 选项。使用nm-connection-editor或nmcli工具来配置高级属性。身份识别
域- 如果需要,输入域名。安全性
-
Phase1 Algorithms- 对应于ikeLibreswan 参数 - 输入用来验证和设置加密频道的算法。 Phase2 Algorithms- 对应于espLibreswan 参数 - 输入用于IPsec协商的算法。选择
Disable PFS字段来关闭 Perfect Forward Secrecy(PFS),以确保与不支持 PFS 的旧服务器兼容。-
Phase1 Lifetime- 对应于ikelifetimeLibreswan 参数 - 用于加密流量的密钥的有效期。 Phase2 Lifetime- 对应于salifetimeLibreswan 参数 - 在过期前连接的特定实例应多久。注意:为了安全起见,加密密钥应该不时地更改。
Remote network- 对应于rightsubnetLibreswan 参数 - 应该通过 VPN 访问的目标专用远程网络。检查
缩减字段以启用缩小字段。请注意,它只在 IKEv2 协商中有效。-
Enable fragmentation- 对应于fragmentationLibreswan 参数 - 是否允许 IKE 分段。有效值为yes(默认)或no。 -
Enable Mobike- 与mobikeLibreswan 参数对应 - 是否允许移动和多形协议(MOBIKE、RFC 455)启用连接来迁移其端点,而无需从头开始重启连接。这可用于在有线、无线或者移动数据连接之间进行切换的移动设备。值为no(默认)或yes。
-
选择 菜单条目:
IPv4 方法
-
Automatic (DHCP)- 如果您要连接的网络使用DHCP服务器来分配动态IP地址,请选择此选项。 -
Link-Local Only- 如果您要连接的网络没有DHCP服务器且您不想手动分配IP地址,请选择这个选项。随机地址将根据 RFC 3927 分配,带有前缀169.254/16。 -
手动- 如果您要手动分配IP地址,请选择这个选项。 Disable- 在这个连接中禁用IPv4。DNS
在
DNS部分,当Automatic为ON时,将其切换到OFF以输入您要用逗号分开的 DNS 服务器的 IP 地址。Routes
请注意,在
Routes部分,当Automatic为ON时,会使用 DHCP 的路由,但您也可以添加额外的静态路由。当OFF时,只使用静态路由。-
Address- 输入远程网络或主机的IP地址。 -
Netmask- 以上输入的IP地址的子网掩码或前缀长度。 -
Gateway- 上面输入的远程网络或主机的网关的IP地址。 Metric- 网络成本,赋予此路由的首选值。数值越低,优先级越高。仅将此连接用于其网络上的资源
选择这个复选框以防止连接成为默认路由。选择这个选项意味着只有特别用于路由的流量才会通过连接自动获得,或者手动输入到连接上。
-
要在
VPN连接中配置IPv6设置,请选择 菜单条目:IPv6 Method
-
Automatic- 选择这个选项使用IPv6Stateless Address AutoConfiguration(SLAAC)根据硬件地址和路由器公告(RA)创建自动的、无状态的配置。 -
Automatic, DHCP only- 选择这个选项以不使用 RA,但从DHCPv6请求信息以创建有状态的配置。 -
Link-Local Only- 如果您要连接的网络没有DHCP服务器且您不想手动分配IP地址,请选择这个选项。随机地址将根据 RFC 4862 分配,前缀为FE80::0。 -
手动- 如果您要手动分配IP地址,请选择这个选项。 Disable- 在这个连接中禁用IPv6。请注意,
DNS,Routes,Use this connection only for resources on its network项是IPv4的常规设置。
-
-
编辑完
VPN连接后,点按钮自定义配置或按钮为现有配置保存它。 -
将配置集切换到
ON以激活VPN连接。 - 如果您在带有 DHCP 或无状态地址自动配置(SLAAC)的网络中使用此主机,则连接可能会受到重定向的影响。有关详情和缓解步骤,请参阅将 VPN 连接分配给专用路由表,以防止连接绕过隧道。
23.3.17. 使用 nm-connection-editor 配置 VPN 连接 复制链接链接已复制到粘贴板!
如果使用带有图形界面的 Red Hat Enterprise Linux,您可以在 nm-connection-editor 应用程序中配置 VPN 连接。
先决条件
-
已安装
NetworkManager-libreswan-gnome软件包。 如果您配置了互联网密钥交换版本 2(IKEv2)连接:
- 证书导入到 IPsec 网络安全服务(NSS)数据库中。
- NSS 数据库中的证书 nickname 是已知的。
流程
打开终端窗口,输入:
nm-connection-editor
$ nm-connection-editorCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 点击 按钮来添加一个新的连接。
-
选择
IPsec based VPN连接类型,然后点击 。 在
VPN选项卡中:在
Gateway字段中输入 VPN 网关的主机名或 IP 地址,然后选择验证类型。根据验证类型,您必须输入不同的额外信息:-
IKEv2(认证)使用证书验证客户端,这会更安全。这个设置需要在 IPsec NSS 数据库中指定证书的 nickname IKEv1(XAUTH)使用用户名和密码(预共享密钥)验证用户身份。此设置要求您输入以下值:- 用户名
- 密码
- 组名称
- Secret
-
如果远程服务器为 IKE 交换指定了本地标识符,在
Remote ID字段中输入准确的字符串。在运行 Libreswan 的远程服务器中,这个值是在服务器的leftid参数中设置的。
可选:点 按钮配置附加设置。您可以配置以下设置:
身份识别
-
域- 如果需要,请输入域名。
-
安全性
-
Phase1 Algorithms对应于 ikeLibreswan参数。输入用来验证和设置加密频道的算法。 Phase2 Algorithms对应于espLibreswan 参数。输入用于IPsec协商的算法。选择
Disable PFS字段来关闭 Perfect Forward Secrecy(PFS),以确保与不支持 PFS 的旧服务器兼容。-
Phase1 Lifetime与ikelifetimeLibreswan 参数对应。此参数定义用于加密流量的密钥的有效期。 -
Phase2 Lifetime与salifetimeLibreswan 参数对应。这个参数定义安全关联有效期。
-
连接性
远程网络与rightsubnetLibreswan 参数对应,并定义应通过 VPN 访问的目标专用远程网络。检查
缩减字段以启用缩小字段。请注意,它只在 IKEv2 协商中有效。-
Enable fragmentation与segmentationLibreswan 参数对应,并定义是否允许 IKE 分段。有效值为yes(默认)或no。 -
Enable Mobike与mobike参数对应。参数定义是否允许 Mobility 和 Multihoming 协议(MOBIKE) (RFC 4555)来启用连接来迁移其端点,而无需从头开始重启连接。这可用于在有线、无线或者移动数据连接之间进行切换的移动设备。值为no(默认)或yes。
在
IPv4 Settings选项卡中,选择 IP 分配方法,并可选择设置额外的静态地址、DNS 服务器、搜索域和路由。
- 保存连接。
-
关闭
nm-connection-editor。 - 如果您在带有 DHCP 或无状态地址自动配置(SLAAC)的网络中使用此主机,则连接可能会受到重定向的影响。有关详情和缓解步骤,请参阅将 VPN 连接分配给专用路由表,以防止连接绕过隧道。
当您点 按钮添加新连接时, NetworkManager 会为那个连接创建新配置文件,然后打开同一个对话框来编辑现有连接。这两个对话框之间的区别在于现有连接配置集有详情菜单条目。
23.3.18. 将 VPN 连接分配给专用路由表,以防止连接绕过隧道 复制链接链接已复制到粘贴板!
DHCP 服务器和无状态地址自动配置(SLAAC)都可以将路由添加到客户端的路由表中。例如,恶意的 DHCP 服务器可以使用此功能强制带有 VPN 连接的主机通过物理接口而不是 VPN 隧道重定向流量。此漏洞也称为 TunnelVision,并参见 CVE-2024-3661 漏洞文章中所述。
要缓解此漏洞,您可以将 VPN 连接分配给专用路由表。这可防止 DHCP 配置或 SLAAC 来处理用于 VPN 隧道的网络数据包的路由决策。
如果至少有一个条件应用到您的环境,请按照以下步骤操作:
- 至少一个网络接口使用 DHCP 或 SLAAC。
- 您的网络不使用阻止恶意 DHCP 服务器的机制,如 DHCP 侦听。
通过 VPN 路由整个流量可防止主机访问本地网络资源。
先决条件
- 您可以使用 NetworkManager 1.40.16-18 或更高版本。
流程
- 决定您要使用的路由表。以下步骤使用表 75。默认情况下,RHEL 不使用表 1-254,您可以使用其中任何一个。
配置 VPN 连接配置文件,将 VPN 路由放在专用路由表中:
nmcli connection modify <vpn_connection_profile> ipv4.route-table 75 ipv6.route-table 75
# nmcli connection modify <vpn_connection_profile> ipv4.route-table 75 ipv6.route-table 75Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为您在上一命令中使用的表设置低优先级值:
nmcli connection modify <vpn_connection_profile> ipv4.routing-rules "priority 32345 from all table 75" ipv6.routing-rules "priority 32345 from all table 75"
# nmcli connection modify <vpn_connection_profile> ipv4.routing-rules "priority 32345 from all table 75" ipv6.routing-rules "priority 32345 from all table 75"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 优先级值可以是 1 到 32766 之间的任何值。值越低,优先级越高。
重新连接 VPN 连接:
nmcli connection down <vpn_connection_profile> nmcli connection up <vpn_connection_profile>
# nmcli connection down <vpn_connection_profile> # nmcli connection up <vpn_connection_profile>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在表 75 中显示 IPv4 路由:
ip route show table 75 ... 192.0.2.0/24 via 192.0.2.254 dev vpn_device proto static metric 50 default dev vpn_device proto static scope link metric 50
# ip route show table 75 ... 192.0.2.0/24 via 192.0.2.254 dev vpn_device proto static metric 50 default dev vpn_device proto static scope link metric 50Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出确认到远程网络和默认网关路由到路由表 75,因此所有流量都通过隧道路由。如果您在 VPN 连接配置集中设置
ipv4.never-default true,则不会创建默认路由,因此无法在此输出中可见。在表 75 中显示 IPv6 路由:
ip -6 route show table 75 ... 2001:db8:1::/64 dev vpn_device proto kernel metric 50 pref medium default dev vpn_device proto static metric 50 pref medium
# ip -6 route show table 75 ... 2001:db8:1::/64 dev vpn_device proto kernel metric 50 pref medium default dev vpn_device proto static metric 50 pref mediumCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出确认到远程网络和默认网关路由到路由表 75,因此所有流量都通过隧道路由。如果您在 VPN 连接配置集中设置
ipv4.never-default true,则不会创建默认路由,因此无法在此输出中可见。
23.4. 使用 MACsec 加密同一物理网络中的第 2 层流量 复制链接链接已复制到粘贴板!
您可以使用 MACsec 来保护两个设备(点到点)之间的通信。例如,您的分支办公室通过城际以太网与中心办公室连接,您可以在连接办公室的两个主机上配置 MACsec,以提高安全性。
23.4.1. MACsec 如何提高安全性 复制链接链接已复制到粘贴板!
介质访问控制安全(MACsec)是一种第 2 层协议,它保护以太网链路上的不同流量类型,包括:
- 动态主机配置协议(DHCP)
- 地址解析协议(ARP)
- IPv4 和 IPv6 流量
- 任何通过 IP 的流量,如 TCP 或 UDP
MACsec 默认使用 GCM-AES-128 算法加密并验证 LAN 中的所有流量,并使用预共享密钥在参与的主机之间建立连接。要更改预共享密钥,您必须更新所有使用 MACsec 的网络主机上的 NM 配置。
MACsec 连接使用以太网设备,如以太网网卡、VLAN 或隧道设备作为父设备。您只能在 MACsec 设备上设置 IP 配置,以便只使用加密连接与其他主机进行通信,或者在父设备上设置 IP 配置。在后者的情况下,您可以使用父设备使用未加密连接和 MACsec 设备加密连接与其他主机通信。
macsec 不需要任何特殊硬件。例如,您可以使用任何交换机,除非您只想在主机和交换机之间加密流量。在这种情况下,交换机还必须支持 MACsec。
换句话说,您可以为两种常见情况配置 MACsec:
- host-to-host
- host-to-switch 和 switch-to-other-hosts
您只能在位于同一物理或虚拟 LAN 的主机间使用 MACsec。
使用 MACsec 安全标准保护链路层的通信,也称为 Open Systems Interconnection (OSI)模型的第 2 层,提供以下显著优点:
- 第 2 层的加密消除了在第 7 层加密单个服务的需要。这减少了管理与每个主机上每个端点的大量证书关联的开销。
- 直接连接的网络设备(如路由器和交换机)之间的点对点安全性。
- 不需要对应用程序和高层协议进行更改。
23.4.2. 使用 nmcli 配置 MACsec 连接 复制链接链接已复制到粘贴板!
您可以使用 nmcli 工具将以太网接口配置为使用 MACsec。例如,您可以在通过以太网连接的两个主机之间创建一个 MACsec 连接。
流程
在配置 MACsec 的第一个主机上:
为预共享密钥创建连接关联密钥(CAK)和连接关联密钥名称(CKN):
创建一个 16 字节的十六进制 CAK:
dd if=/dev/urandom count=16 bs=1 2> /dev/null | hexdump -e '1/2 "%04x"' 50b71a8ef0bd5751ea76de6d6c98c03a
# dd if=/dev/urandom count=16 bs=1 2> /dev/null | hexdump -e '1/2 "%04x"' 50b71a8ef0bd5751ea76de6d6c98c03aCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个 32 字节的十六进制 CKN:
dd if=/dev/urandom count=32 bs=1 2> /dev/null | hexdump -e '1/2 "%04x"' f2b4297d39da7330910a74abc0449feb45b5c0b9fc23df1430e1898fcf1c4550
# dd if=/dev/urandom count=32 bs=1 2> /dev/null | hexdump -e '1/2 "%04x"' f2b4297d39da7330910a74abc0449feb45b5c0b9fc23df1430e1898fcf1c4550Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 在您要通过 MACsec 连接连接的两个主机上:
创建 MACsec 连接:
nmcli connection add type macsec con-name macsec0 ifname macsec0 connection.autoconnect yes macsec.parent enp1s0 macsec.mode psk macsec.mka-cak 50b71a8ef0bd5751ea76de6d6c98c03a macsec.mka-ckn f2b4297d39da7330910a74abc0449feb45b5c0b9fc23df1430e1898fcf1c4550
# nmcli connection add type macsec con-name macsec0 ifname macsec0 connection.autoconnect yes macsec.parent enp1s0 macsec.mode psk macsec.mka-cak 50b71a8ef0bd5751ea76de6d6c98c03a macsec.mka-ckn f2b4297d39da7330910a74abc0449feb45b5c0b9fc23df1430e1898fcf1c4550Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
macsec.mka-cak和macsec.mka-ckn参数中使用上一步生成的 CAK 和 CKN。在 MACsec-protected 网络的每个主机上,这些值必须相同。配置 MACsec 连接中的 IP 设置。
配置
IPv4设置。例如,要为macsec0连接设置静态IPv4地址、网络掩码、默认网关和 DNS 服务器,请输入:nmcli connection modify macsec0 ipv4.method manual ipv4.addresses '192.0.2.1/24' ipv4.gateway '192.0.2.254' ipv4.dns '192.0.2.253'
# nmcli connection modify macsec0 ipv4.method manual ipv4.addresses '192.0.2.1/24' ipv4.gateway '192.0.2.254' ipv4.dns '192.0.2.253'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置
IPv6设置。例如,要为macsec0连接设置静态IPv6地址、网络掩码、默认网关和 DNS 服务器,请输入:nmcli connection modify macsec0 ipv6.method manual ipv6.addresses '2001:db8:1::1/32' ipv6.gateway '2001:db8:1::fffe' ipv6.dns '2001:db8:1::fffd'
# nmcli connection modify macsec0 ipv6.method manual ipv6.addresses '2001:db8:1::1/32' ipv6.gateway '2001:db8:1::fffe' ipv6.dns '2001:db8:1::fffd'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
激活连接:
nmcli connection up macsec0
# nmcli connection up macsec0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证流量是否加密:
tcpdump -nn -i enp1s0
# tcpdump -nn -i enp1s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:显示未加密的流量:
tcpdump -nn -i macsec0
# tcpdump -nn -i macsec0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示 MACsec 统计信息:
ip macsec show
# ip macsec showCopy to Clipboard Copied! Toggle word wrap Toggle overflow 显示每种保护类型的单独的计数器:仅完整性(关闭加密)和加密(打开加密)
ip -s macsec show
# ip -s macsec showCopy to Clipboard Copied! Toggle word wrap Toggle overflow
23.5. 使用和配置 firewalld 复制链接链接已复制到粘贴板!
防火墙是保护机器不受来自外部的、不需要的网络数据的一种方式。它允许用户通过定义一组防火墙规则 来控制主机上的入站网络流量。这些规则用于对进入的流量进行排序,并可以阻断或允许流量。
firewalld 是一个防火墙服务守护进程,其提供一个带有 D-Bus 接口的、动态可定制的、基于主机的防火墙。如果是动态的,它可在每次修改规则时启用、修改和删除规则,而不需要在每次修改规则时重启防火墙守护进程。
firewalld 使用区和服务的概念来简化流量管理。zones 是预定义的规则集。网络接口和源可以分配给区。允许的流量取决于您计算机连接到的网络,并分配了这个网络的安全级别。防火墙服务是预定义的规则,覆盖了允许特定服务进入流量的所有必要设置,并在区中应用。
服务使用一个或多个端口或地址进行网络通信。防火墙会根据端口过滤通讯。要允许服务的网络流量,必须打开其端口。firewall d 阻止未明确设置为打开的端口上的所有流量。一些区(如可信区)默认允许所有流量。
请注意,带有 nftables 后端的 firewalld 不支持使用 --direct 选项将自定义的 nftables 规则传递到 firewalld。
23.5.1. 使用 firewalld、nftables 或者 iptables 时 复制链接链接已复制到粘贴板!
以下是您应该使用以下工具之一的概述:
-
firewalld:使用firewalld实用程序进行简单防火墙用例。此工具易于使用,并涵盖了这些场景的典型用例。 -
nftables:使用nftables实用程序设置复杂和高性能的防火墙,如为整个网络设置。 -
iptables:Red Hat Enterprise Linux 上的iptables工具使用nf_tables内核 API 而不是传统的后端。Thenf_tablesAPI 提供向后兼容性,因此使用iptables命令的脚本仍可在 Red Hat Enterprise Linux 上工作。对于新的防火墙脚本,红帽建议使用nftables。
要防止不同的与防火墙相关的服务(firewalld、nftables 或 iptables)相互影响,请在 RHEL 主机上仅运行其中一个服务,并禁用其他服务。
23.5.2. 防火墙区域 复制链接链接已复制到粘贴板!
您可以使用 firewalld 工具,根据您与网络中接口和流量的信任级别,将网络划分为不同的区域。连接只能是一个区域的一部分,但您可以对许多网络连接使用这个区域。
firewalld 遵循严格的与区域相关的原则:
- 流量只进入一个区域。
- 流量只流出一个区域。
- 一个区域定义了一个信任级别。
- 默认情况下,允许区域内流量(在同一区域中)。
- 默认情况下,拒绝区域间流量(从区域到区域)。
原则 4 和 5 是原则 3 的结果。
原则 4 可以通过区选项 --remove-forward 进行配置。原则 5 可以通过添加新策略来进行配置。
NetworkManager 通知接口区的 firewalld。您可以使用以下工具将区域分配给接口:
-
NetworkManager -
firewall-config工具 -
firewall-cmd工具 - RHEL web 控制台
RHEL web 控制台、firewall-config 和 firewall-cmd 只能编辑合适的 NetworkManager 配置文件。如果您使用 web 控制台、firewall-cmd 或 firewall-config 更改接口的区域,请求被转发到 NetworkManager,且不会被 firewalld 处理。
/usr/lib/firewalld/zones/ 目录存储预定义的区域,您可以立即将它们应用到任何可用的网络接口。只有在修改后,这些文件才会被拷贝到 /etc/firewalld/zones/ 目录中。预定义区的默认设置如下:
block-
适用于:任何传入的网络连接都会被拒绝,并报
IPv4的 icmp-host-prohibited 消息和IPv6的 icmp6-adm-prohibited 消息 。 - 接受:只从系统内启动的网络连接。
-
适用于:任何传入的网络连接都会被拒绝,并报
dmz- 适用于:DMZ 中的计算机可以公开访问,但对您的内部网络有有限的访问权限。
- 接受:仅所选的传入连接。
drop适用于:所有传入的网络数据包都会丢失,没有任何通知。
- 接受:仅传出的网络连接。
external- 适用于:启用了伪装的外部网络,特别是路由器。不信任网络上其他计算机的情况。
- 接受:仅所选的传入连接。
home- 适用于:您主要信任网络上其他计算机的家庭环境。
- 接受:仅所选的传入连接。
internal- 适用于:您主要信任网络上其他计算机的内部网络。
- 接受:仅所选的传入连接。
public- 适用于:您不信任网络上其他计算机的公共区域。
- 接受:仅所选的传入连接。
trusted- 接受:所有网络连接。
work适用于:您主要信任网络上其他计算机的工作环境。
- 接受:仅所选的传入连接。
这些区中的一个被设置为 default 区。当接口连接被添加到 NetworkManager 中时,它们会被分配到默认区。安装时,firewalld 中的默认区域是 public 区域。您可以更改默认区域。
使网络区域名称自我解释,以帮助用户快速理解它们。
要避免安全问题,请查看默认区配置并根据您的需要和风险禁用任何不必要的服务。
23.5.3. 防火墙策略 复制链接链接已复制到粘贴板!
防火墙策略指定网络所需的安全状态。它们概述了对不同类型的流量所采取的规则和操作。通常,策略包含用于以下类型流量的规则:
- 传入流量
- 传出流量
- 转发流量
- 特定服务和应用程序
- 网络地址转换(NAT)
防火墙策略使用防火墙区域的概念。每个区域都与一组决定允许的流量的特定的防火墙规则关联。策略以有状态、单向的方式应用防火墙规则。这意味着您只考虑流量的一个方向。由于 firewalld 的有状态过滤,流量返回路径被隐式允许。
策略与一个入口区域和一个出口区域关联。入口区域是流量起源的地方(接收)。出口区域是流量离开的地方(发送)。
策略中定义的防火墙规则可以引用防火墙区,以便在多个网络接口之间应用一致的配置。
23.5.4. 防火墙规则 复制链接链接已复制到粘贴板!
您可以使用防火墙规则实现特定的配置,以允许或阻止网络流量。因此,您可以控制网络流量的流,以防止系统受到安全威胁。
防火墙规则通常根据各种属性定义某些条件。属性可以是如下:
- 源 IP 地址
- 目标 IP 地址
- 传输协议(TCP、UDP、…)
- 端口
- 网络接口
firewalld 工具将防火墙规则组织到区域(如public、internal 等)和策略中。每个区域都有自己的一组规则,其决定与特定区域关联的网络接口的流量自由度的级别。
23.5.5. 防火墙直接规则 复制链接链接已复制到粘贴板!
firewalld 服务提供多种配置规则的方法,包括:
- 常规规则
- 直接规则
这两者的一个区别在于,每个方法与底层后端(iptables 或 nftables)交互的方式。
直接规则是高级低级别规则,允许直接与 iptables 交互。它们绕过 firewalld 的结构化管理,为您提供更多控制。您可以使用原始 iptables 语法使用 firewall-cmd 命令手动定义直接规则。例如,firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -s 198.51.100.1 -j DROP。此命令添加了一个 iptables 规则来丢弃来自 198.51.100.1 源 IP 地址的流量。
但是,使用直接规则也具有其缺点。特别是当 nftables 是您的主要防火墙后端时。例如:
-
直接规则很难维护,并可能会与基于
nftables的firewalld配置冲突。 -
直接规则不支持您可以在
nftables中找到的高级功能,如原始表达式和有状态对象。 -
直接规则不永不。
iptables组件已弃用,最终将从 RHEL 中删除。
因此,您可以考虑使用 nftables 替换 firewalld 直接规则。查看知识库解决方案 如何将 firewalld 直接规则替换为 nftables? 以查看更多详情。
23.5.6. 预定义的 firewalld 服务 复制链接链接已复制到粘贴板!
预定义的 firewalld 服务在低级防火墙规则中提供内置抽象层。它通过将常用的网络服务(如 SSH 或 HTTP)映射到其相应的端口和协议来实现。您可以引用指定预定义服务,而不是每次手动指定它们。这使得防火墙管理变得更加简单、更易出错且更直观。
查看可用的预定义服务:
firewall-cmd --get-services RH-Satellite-6 RH-Satellite-6-capsule afp amanda-client amanda-k5-client amqp amqps apcupsd audit ausweisapp2 bacula bacula-client bareos-director bareos-filedaemon bareos-storage bb bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc bittorrent-lsd ceph ceph-exporter ceph-mon cfengine checkmk-agent cockpit collectd condor-collector cratedb ctdb dds...
# firewall-cmd --get-services RH-Satellite-6 RH-Satellite-6-capsule afp amanda-client amanda-k5-client amqp amqps apcupsd audit ausweisapp2 bacula bacula-client bareos-director bareos-filedaemon bareos-storage bb bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc bittorrent-lsd ceph ceph-exporter ceph-mon cfengine checkmk-agent cockpit collectd condor-collector cratedb ctdb dds...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要进一步检查特定的预定义服务:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例输出显示
RH-Satellite-6预定义服务侦听端口 5000/tcp 5646-5647/tcp 5671/tcp 8000/tcp 8080/tcp 9090/tcp 9090/tcp 9090。另外,RH-Satellite-6继承了其他预定义服务中的规则。本例中为foreman。
每个预定义的服务都作为 XML 文件存储在 /usr/lib/firewalld/services/ 目录中。
23.5.7. 使用 firewalld 区 复制链接链接已复制到粘贴板!
zones 代表一种更透明管理传入流量的概念。这些区域连接到联网接口或者分配一系列源地址。您可以独立为每个区管理防火墙规则,这样就可以定义复杂的防火墙设置并将其应用到流量。
23.5.7.1. 自定义特定区域的防火墙设置,以增强安全性 复制链接链接已复制到粘贴板!
您可以通过修改防火墙设置并将特定的网络接口或连接与特定的防火墙区域关联,来增强网络安全性。通过为区域定义细粒度规则和限制,您可以根据想要的安全级别控制入站和出站流量。
例如,您可以获得以下好处:
- 保护敏感数据
- 防止未授权访问
- 缓解潜在的网络威胁
先决条件
-
firewalld服务在运行。
流程
列出可用的防火墙区域:
firewall-cmd --get-zones
# firewall-cmd --get-zonesCopy to Clipboard Copied! Toggle word wrap Toggle overflow firewall-cmd --get-zones命令显示系统上所有可用的区,但不显示特定区的详情。要查看所有区域的详情,请使用firewall-cmd --list-all-zones命令。- 选择您要用于此配置的区域。
修改所选区域的防火墙设置。例如,要允许
SSH服务,并删除ftp服务:firewall-cmd --add-service=ssh --zone=<your_chosen_zone> firewall-cmd --remove-service=ftp --zone=<same_chosen_zone>
# firewall-cmd --add-service=ssh --zone=<your_chosen_zone> # firewall-cmd --remove-service=ftp --zone=<same_chosen_zone>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将一个网络接口分配给防火墙区域:
列出可用的网络接口:
firewall-cmd --get-active-zones
# firewall-cmd --get-active-zonesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 区域的活动是由存在的网络接口或与其配置匹配的源地址范围确定的。默认区域对于未分类的流量处于活跃状态,但如果没有流量匹配其规则,则始终处于活跃状态。
将一个网络接口分配给所选区域:
firewall-cmd --zone=<your_chosen_zone> --change-interface=<interface_name> --permanent
# firewall-cmd --zone=<your_chosen_zone> --change-interface=<interface_name> --permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将一个网络接口分配给一个区域更适合将一致的防火墙设置应用到特定接口(物理或虚拟)上的所有流量。
当
firewall-cmd命令与--permanent选项一起使用时,通常涉及更新 NetworkManager 连接配置文件,以永久更改防火墙配置。firewalld和 NetworkManager 之间的这种集成确保一致的网络和防火墙设置。
验证
显示选择区域的更新设置:
firewall-cmd --zone=<your_chosen_zone> --list-all
# firewall-cmd --zone=<your_chosen_zone> --list-allCopy to Clipboard Copied! Toggle word wrap Toggle overflow 命令输出显示所有区域设置,包括分配的服务、网络接口和网络连接(源)。
23.5.7.2. 更改默认区 复制链接链接已复制到粘贴板!
系统管理员在其配置文件中为网络接口分配区域。如果接口没有被分配给指定区,它将被分配给默认区。每次重启 firewalld 服务后,firewalld 会加载默认区的设置,并使其处于活动状态。请注意,所有其他区域的设置都被保留,并随时可以使用。
通常,NetworkManager 根据 NetworkManager 连接配置文件中的 connection.zone 设置将区域分配给接口。另外,重启后, NetworkManager 管理“激活”这些区域的分配。
先决条件
-
firewalld服务在运行。
流程
设置默认区:
显示当前的默认区:
firewall-cmd --get-default-zone
# firewall-cmd --get-default-zoneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 设置新的默认区:
firewall-cmd --set-default-zone <zone_name>
# firewall-cmd --set-default-zone <zone_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意按照此流程,设置是一个永久设置,即使没有
--permanent选项。
23.5.7.3. 将网络接口分配给区 复制链接链接已复制到粘贴板!
可以为不同区定义不同的规则集,然后通过更改所使用的接口的区来快速改变设置。使用多个接口,可以为每个具体区设置一个区来区分通过它们的网络流量。
流程
要将区分配给特定的接口:
列出活跃区以及分配给它们的接口:
firewall-cmd --get-active-zones
# firewall-cmd --get-active-zonesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为不同的区分配接口:
firewall-cmd --zone=zone_name --change-interface=interface_name --permanent
# firewall-cmd --zone=zone_name --change-interface=interface_name --permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow
23.5.7.4. 添加源 复制链接链接已复制到粘贴板!
要将传入的流量路由到特定区,请将源添加到那个区。源可以是一个使用 CIDR 格式的 IP 地址或 IP 掩码。
如果您添加多个带有重叠网络范围的区域,则根据区名称排序,且只考虑第一个区。
在当前区中设置源:
firewall-cmd --add-source=<source>
# firewall-cmd --add-source=<source>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要为特定区设置源 IP 地址:
firewall-cmd --zone=zone-name --add-source=<source>
# firewall-cmd --zone=zone-name --add-source=<source>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
以下流程允许来自 受信任 区中 192.168.2.15 的所有传入的流量:
流程
列出所有可用区:
firewall-cmd --get-zones
# firewall-cmd --get-zonesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将源 IP 添加到持久性模式的信任区中:
firewall-cmd --zone=trusted --add-source=192.168.2.15
# firewall-cmd --zone=trusted --add-source=192.168.2.15Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使新设置具有持久性:
firewall-cmd --runtime-to-permanent
# firewall-cmd --runtime-to-permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow
23.5.7.5. 删除源 复制链接链接已复制到粘贴板!
当您从区域删除源时,源自源的流量不再被通过该源指定的规则定向。相反,流量会返回到与它源自的接口关联的区域的规则和设置,或进到默认区域。
流程
列出所需区的允许源:
firewall-cmd --zone=zone-name --list-sources
# firewall-cmd --zone=zone-name --list-sourcesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从区永久删除源:
firewall-cmd --zone=zone-name --remove-source=<source>
# firewall-cmd --zone=zone-name --remove-source=<source>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使新设置具有持久性:
firewall-cmd --runtime-to-permanent
# firewall-cmd --runtime-to-permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow
23.5.7.6. 使用 nmcli 为连接分配区域 复制链接链接已复制到粘贴板!
您可以使用 nmcli 工具将 firewalld 区域添加到 NetworkManager 连接。
流程
将区分配给
NetworkManager连接配置文件:nmcli connection modify profile connection.zone zone_name
# nmcli connection modify profile connection.zone zone_nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 激活连接:
nmcli connection up profile
# nmcli connection up profileCopy to Clipboard Copied! Toggle word wrap Toggle overflow
23.5.7.7. 在 ifcfg 文件中手动将区分配给网络连接 复制链接链接已复制到粘贴板!
当连接由 NetworkManager 管理时,必须了解它使用的区。对于每个网络连接配置文件,可以指定一个区域,其根据带有可移植设备的计算机的位置提供各种防火墙设置的灵活性。因此,可以为不同的位置(如公司或家)指定区域和设置。
流程
要为连接设置一个区,请编辑
/etc/sysconfig/network-scripts/ifcfg-connection_name文件,并添加将区分配给这个连接的行:ZONE=zone_name
ZONE=zone_nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow
23.5.7.8. 创建一个新区 复制链接链接已复制到粘贴板!
要使用自定义区,创建一个新的区并使用它像预定义区一样。新区需要 --permanent 选项,否则命令无法工作。
先决条件
-
firewalld服务在运行。
流程
创建一个新区:
firewall-cmd --permanent --new-zone=zone-name
# firewall-cmd --permanent --new-zone=zone-nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使新区域可用:
firewall-cmd --reload
# firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 命令将最新的更改应用到防火墙配置,而不中断已在运行的网络服务。
验证
检查是否在您的永久设置中添加了新的区:
firewall-cmd --get-zones --permanent
# firewall-cmd --get-zones --permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow
23.5.7.9. 使用 Web 控制台启用区域 复制链接链接已复制到粘贴板!
您可以通过 RHEL web 控制台对特定接口或 IP 地址范围应用预定义和现有的防火墙区域。
先决条件
- 已安装 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 登录到 web 控制台。
- 点 Networking。
点按钮。
如果没有看到 按钮,使用管理员权限登录到 web 控制台。
- 在 Firewall 部分,点 Add new zone。
在 Add zone 对话框中,从信任级别选项选择一个区。
Web 控制台显示
firewalld服务中预定义的所有区域。- 在接口部分,选择一个应用所选区的接口或接口。
在 Allowed Addresses 部分中,您可以选择是否应用该区:
- 整个子网
或者以以下格式表示的 IP 地址范围:
- 192.168.1.0
- 192.168.1.0/24
- 192.168.1.0/24, 192.168.1.0
点 按钮。
验证
检查 Firewall 部分中的配置:
23.5.7.10. 使用 Web 控制台禁用区域 复制链接链接已复制到粘贴板!
您可以使用 Web 控制台在防火墙配置中禁用防火墙区域。
先决条件
- 已安装 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 登录到 web 控制台。
- 点 Networking。
点按钮。
如果没有看到 按钮,使用管理员权限登录到 web 控制台。
点您要删除的区的 Options 图标。
- 单击 Delete。
区域现在被禁用,接口不包括在区域中配置的打开的服务和端口。
23.5.7.11. 使用区目标设定传入流量的默认行为 复制链接链接已复制到粘贴板!
对于每个区,您可以设置一种处理尚未进一步指定的传入流量的默认行为。此行为是通过设置区的目标来定义的。有四个选项:
-
ACCEPT:接受除特定规则不允许的所有传入的数据包。 -
REJECT:拒绝所有传入的数据包,但特定规则允许的数据包除外。当firewalld拒绝数据包时,源机器会发出有关拒绝的信息。 -
DROP:除非由特定规则允许,丢弃所有传入数据包。当firewalld丢弃数据包时,源机器不知道数据包丢弃的信息。 -
default:与REJECT的行为类似,但在某些情况下有特殊含义。
先决条件
-
firewalld服务在运行。
流程
为区设置目标:
列出特定区的信息以查看默认目标:
firewall-cmd --zone=zone-name --list-all
# firewall-cmd --zone=zone-name --list-allCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在区中设置一个新目标:
firewall-cmd --permanent --zone=zone-name --set-target=<default|ACCEPT|REJECT|DROP>
# firewall-cmd --permanent --zone=zone-name --set-target=<default|ACCEPT|REJECT|DROP>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.5.7.12. 使用 IP 集为允许列表配置动态更新 复制链接链接已复制到粘贴板!
您可以进行接近实时的更新,来灵活地允许 IP 集中特定的 IP 地址或范围,即使在无法预计的情况下也是如此。这些更新可以被各种事件触发,如检测安全威胁或更改网络行为。通常,此类解决方案利用自动化来减少手工工作,并通过快速响应情况来提高安全性。
先决条件
-
firewalld服务在运行。
流程
创建一个有有意义名称的 IP 集:
firewall-cmd --permanent --new-ipset=allowlist --type=hash:ip
# firewall-cmd --permanent --new-ipset=allowlist --type=hash:ipCopy to Clipboard Copied! Toggle word wrap Toggle overflow 名为
allowlist的新 IP 集包含您希望防火墙允许的 IP 地址。向 IP 集添加动态更新:
firewall-cmd --permanent --ipset=allowlist --add-entry=198.51.100.10
# firewall-cmd --permanent --ipset=allowlist --add-entry=198.51.100.10Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此配置使用新添加的 IP 地址更新防火墙允许传输网络流量的
allowlistIP 集。创建一个引用之前创建的 IP 集的防火墙规则:
firewall-cmd --permanent --zone=public --add-source=ipset:allowlist
# firewall-cmd --permanent --zone=public --add-source=ipset:allowlistCopy to Clipboard Copied! Toggle word wrap Toggle overflow 没有此规则,IP 集不会对网络流量有任何影响。默认防火墙策略将占先。
重新载入防火墙配置以应用更改:
firewall-cmd --reload
# firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
列出所有 IP 集:
firewall-cmd --get-ipsets allowlist
# firewall-cmd --get-ipsets allowlistCopy to Clipboard Copied! Toggle word wrap Toggle overflow 列出活跃的规则:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 命令行输出的
sources部分提供了对哪些流量源(主机名、接口、IP 集、子网等)被允许或拒绝访问特定防火墙区域的见解。在这种情况下,包含在allowlistIP 集中的 IP 地址被允许通过防火墙,为public区域传输流量。探索 IP 集的内容:
cat /etc/firewalld/ipsets/allowlist.xml <?xml version="1.0" encoding="utf-8"?> <ipset type="hash:ip"> <entry>198.51.100.10</entry> </ipset>
# cat /etc/firewalld/ipsets/allowlist.xml <?xml version="1.0" encoding="utf-8"?> <ipset type="hash:ip"> <entry>198.51.100.10</entry> </ipset>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
后续步骤
-
使用脚本或安全工具获取您的威胁情报源,并以一种自动化的方式更新
allowlist。
23.5.8. 使用 firewalld 控制网络流量 复制链接链接已复制到粘贴板!
firewalld 软件包安装了大量预定义的服务文件,您可以添加更多或自定义它们。然后,您可以使用这些服务定义为服务打开或关闭端口,而无需了解协议及它们使用的端口号。
23.5.8.1. 使用 CLI 控制预定义服务的流量 复制链接链接已复制到粘贴板!
控制流量的最简单的方法是在 firewalld 中添加预定义的服务。这会打开所有必需的端口并根据 服务定义文件 修改其他设置。
先决条件
-
firewalld服务在运行。
流程
检查
firewalld中的服务是否没有被允许:firewall-cmd --list-services ssh dhcpv6-client
# firewall-cmd --list-services ssh dhcpv6-clientCopy to Clipboard Copied! Toggle word wrap Toggle overflow 命令列出默认区域中启用的服务。
列出
firewalld中所有预定义的服务:firewall-cmd --get-services RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry ...
# firewall-cmd --get-services RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 命令显示默认区域的可用服务的列表。
将服务添加到
firewalld允许的服务的列表中:firewall-cmd --add-service=<service_name>
# firewall-cmd --add-service=<service_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 命令将指定的服务添加到默认区域中。
使新设置具有持久性:
firewall-cmd --runtime-to-permanent
# firewall-cmd --runtime-to-permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow 命令将这些运行时更改应用到防火墙的永久配置中。默认情况下,它将这些更改应用到默认区域的配置中。
验证
列出所有永久防火墙规则:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 命令显示带有默认防火墙区域(
public)的永久防火墙规则的完整配置。检查
firewalld服务的永久配置的有效性。firewall-cmd --check-config success
# firewall-cmd --check-config successCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果永久配置无效,命令返回一个带有更多详情的错误:
firewall-cmd --check-config Error: INVALID_PROTOCOL: 'public.xml': 'tcpx' not from {'tcp'|'udp'|'sctp'|'dccp'}# firewall-cmd --check-config Error: INVALID_PROTOCOL: 'public.xml': 'tcpx' not from {'tcp'|'udp'|'sctp'|'dccp'}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您还可以手动检查永久配置文件,以验证设置。主配置文件为
/etc/firewalld/firewalld.conf。特定于区域的配置文件位于/etc/firewalld/zones/目录中,策略位于/etc/firewalld/policies/目录中。
23.5.8.2. 使用 Web 控制台在防火墙上启用服务 复制链接链接已复制到粘贴板!
默认情况下,服务添加到默认防火墙区。如果在更多网络接口中使用更多防火墙区,您必须首先选择一个区域,然后添加带有端口的服务。
RHEL 8 web 控制台显示预定义的 firewalld 服务,您可以将其添加到活跃的防火墙区。
RHEL 8 web 控制台配置 firewalld 服务。
Web 控制台不允许没有在 web 控制台中列出的通用 firewalld 规则。
先决条件
- 已安装 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 登录到 web 控制台。
- 点 Networking。
点按钮。
如果没有看到 按钮,使用管理员权限登录到 web 控制台。
在 Firewall 部分,选择要添加该服务的区,然后点击 Add Services。
- 在 Add Services 对话框中,找到您要在防火墙中启用的服务。
根据您的场景启用服务:
- 点 Add Services。
此时,RHEL 8 web 控制台在区域的服务列表中显示该服务。
23.5.8.3. 使用 Web 控制台配置自定义端口 复制链接链接已复制到粘贴板!
您可以通过 RHEL web 控制台为服务配置自定义端口。
先决条件
- 您已安装了 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
-
firewalld服务在运行。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 登录到 web 控制台。
- 点 Networking。
点按钮。
如果没有看到 按钮,使用管理员权限登录到 web 控制台。
在 Firewall 部分,选择要配置自定义端口的区域,并点 Add Services。
- 在 Add services 对话框中,点 单选按钮。
在 TCP 和 UDP 字段中,根据示例添加端口。您可以使用以下格式添加端口:
- 端口号,如 22
- 端口号范围,如 5900-5910
- 别名,比如 nfs, rsync
注意您可以在每个字段中添加多个值。值必须用逗号分开,且没有空格,例如:8080,8081,http
在 TCP 文件、UDP 文件或两者中添加端口号后,在 Name 字段中验证服务名称。
Name 字段显示保留此端口的服务名称。如果您确定这个端口可用,且不需要在该端口上通信,则可以重写名称。
- 在 Name 字段中,为服务添加一个名称,包括定义的端口。
点 按钮。
要验证设置,请进入防火墙页面,并在区域的服务列表中找到该服务。
23.5.9. 在区域间过滤转发的流量 复制链接链接已复制到粘贴板!
firewalld 可让您控制不同 firewalld 区域之间的网络数据流。通过定义规则和策略,您可以管理流量在这些区域之间移动时是如何被允许或被拒绝的。
策略对象功能在 firewalld 中提供转发和输出过滤。您可以使用 firewalld 过滤不同区域之间的流量,以允许访问本地托管的虚拟机来连接主机。
23.5.9.1. 策略对象和区域之间的关系 复制链接链接已复制到粘贴板!
策略对象允许用户将 firewalld 的原语(如服务、端口和富规则)附加到策略。您可以将策略对象应用到以有状态和单向的方式在区域间传输的流量上。
firewall-cmd --permanent --new-policy myOutputPolicy firewall-cmd --permanent --policy myOutputPolicy --add-ingress-zone HOST firewall-cmd --permanent --policy myOutputPolicy --add-egress-zone ANY
# firewall-cmd --permanent --new-policy myOutputPolicy
# firewall-cmd --permanent --policy myOutputPolicy --add-ingress-zone HOST
# firewall-cmd --permanent --policy myOutputPolicy --add-egress-zone ANY
HOST 和 ANY 是 ingress 和 egress 区域列表中使用的符号区域。
-
HOST符号区域对于来自运行 firewalld 的主机的流量,或具有到运行 firewalld 的主机的流量允许策略。 -
ANY符号区对所有当前和将来的区域应用策略。ANY符号区域充当所有区域的通配符。
23.5.9.2. 使用优先级对策略进行排序 复制链接链接已复制到粘贴板!
多个策略可以应用到同一组流量,因此应使用优先级为可能应用的策略创建优先级顺序。
要设置优先级来对策略进行排序:
firewall-cmd --permanent --policy mypolicy --set-priority -500
# firewall-cmd --permanent --policy mypolicy --set-priority -500
在上例中,-500 是较低的优先级值,但具有较高的优先级。因此,-500 将在 -100 之前执行。
较低数字的优先级值具有较高的优先级,被首先应用。
23.5.9.3. 使用策略对象过滤本地托管的容器和物理连接到主机的网络之间的流量 复制链接链接已复制到粘贴板!
策略对象功能允许用户过滤 Podman 和 firewalld 区域之间的流量。
红帽建议默认阻止所有流量,并打开 Podman 工具所需的可选择的服务。
流程
创建一个新的防火墙策略:
firewall-cmd --permanent --new-policy podmanToAny
# firewall-cmd --permanent --new-policy podmanToAnyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 阻止从 Podman 到其它区域的所有流量,并只允许 Podman 上必要的服务:
firewall-cmd --permanent --policy podmanToAny --set-target REJECT firewall-cmd --permanent --policy podmanToAny --add-service dhcp firewall-cmd --permanent --policy podmanToAny --add-service dns firewall-cmd --permanent --policy podmanToAny --add-service https
# firewall-cmd --permanent --policy podmanToAny --set-target REJECT # firewall-cmd --permanent --policy podmanToAny --add-service dhcp # firewall-cmd --permanent --policy podmanToAny --add-service dns # firewall-cmd --permanent --policy podmanToAny --add-service httpsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个新的 Podman 区域:
firewall-cmd --permanent --new-zone=podman
# firewall-cmd --permanent --new-zone=podmanCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为策略定义 ingress 区域:
firewall-cmd --permanent --policy podmanToHost --add-ingress-zone podman
# firewall-cmd --permanent --policy podmanToHost --add-ingress-zone podmanCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为所有其他区域定义 egress 区域:
firewall-cmd --permanent --policy podmanToHost --add-egress-zone ANY
# firewall-cmd --permanent --policy podmanToHost --add-egress-zone ANYCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 egress 区域设置为 ANY 意味着您可以从 Podman 过滤到其他区域。如果要过滤到主机,请将 egress 区域设置为 HOST。
重启 firewalld 服务:
systemctl restart firewalld
# systemctl restart firewalldCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证到其他区域的 Podman 防火墙策略:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.5.9.4. 设置策略对象的默认目标 复制链接链接已复制到粘贴板!
您可以为策略指定 --set-target 选项。可用的目标如下:
-
ACCEPT- 接受数据包 -
DROP- 丢弃不需要的数据包 -
REJECT- 拒绝不需要的数据包,并带有 ICMP 回复 CONTINUE(默认)- 数据包将遵循以下策略和区域中的规则。firewall-cmd --permanent --policy mypolicy --set-target CONTINUE
# firewall-cmd --permanent --policy mypolicy --set-target CONTINUECopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证有关策略的信息
firewall-cmd --info-policy mypolicy
# firewall-cmd --info-policy mypolicyCopy to Clipboard Copied! Toggle word wrap Toggle overflow
23.5.10. 使用 firewalld 配置 NAT 复制链接链接已复制到粘贴板!
使用 firewalld,您可以配置以下网络地址转换(NAT)类型:
- 伪装
- 目标 NAT(DNAT)
- 重定向
23.5.10.1. 网络地址转换类型 复制链接链接已复制到粘贴板!
这些是不同的网络地址转换(NAT)类型:
- 伪装
使用以上 NAT 类型之一更改数据包的源 IP 地址。例如,互联网服务提供商(ISP)不会路由私有 IP 范围,如
10.0.0.0/8。如果您在网络中使用私有 IP 范围,用户应该能够访问互联网上的服务器,请将来自这些范围的数据包的源 IP 地址映射为公共 IP 地址。伪装自动使用传出接口的 IP 地址。因此,如果传出接口使用了动态 IP 地址,则使用伪装。
- 目标 NAT(DNAT)
- 使用此 NAT 类型重写传入数据包的目标地址和端口。例如,如果您的 Web 服务器使用来自私有 IP 范围的 IP 地址,因此无法直接从互联网访问,您可以在路由器上设置 DNAT 规则,来将传入的流量重定向到此服务器。
- 重定向
- 这个类型是 DNAT 的一种特殊情况,其将数据包重定向到本地计算机上的不同端口。例如,如果服务运行在与其标准端口不同的端口上,您可以将传入的流量从标准端口重定向到此特定端口。
23.5.10.2. 配置 IP 地址伪装 复制链接链接已复制到粘贴板!
您可以在系统上启用 IP 伪装。在访问互联网时,IP 伪装会隐藏网关后面的单个机器。
流程
要检查是否启用了 IP 伪装(例如,对于
external区),以root用户身份输入以下命令:firewall-cmd --zone=external --query-masquerade
# firewall-cmd --zone=external --query-masqueradeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果已启用,命令将会打印
yes,且退出状态为0。否则,将打印no,且退出状态为1。如果省略了zone,则将使用默认区。要启用 IP 伪装,请以
root用户身份输入以下命令:firewall-cmd --zone=external --add-masquerade
# firewall-cmd --zone=external --add-masqueradeCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
要使此设置持久,请将
--permanent选项传给命令。 要禁用 IP 伪装,请以
root身份输入以下命令:firewall-cmd --zone=external --remove-masquerade
# firewall-cmd --zone=external --remove-masqueradeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要使此设置永久生效,请将
--permanent选项传给命令。
23.5.10.3. 使用 DNAT 转发传入的 HTTP 流量 复制链接链接已复制到粘贴板!
您可以使用目标网络地址转换(DNAT)将传入的流量从一个目标地址和端口定向到另一个目标地址和端口。通常,这对于将来自外部网络接口的传入请求重定向到特定的内部服务器或服务非常有用。
先决条件
-
firewalld服务在运行。
流程
转发传入的 HTTP 流量:
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toaddr=198.51.100.10:toport=8080 --permanent
# firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toaddr=198.51.100.10:toport=8080 --permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow 之前的命令使用以下设置定义 DNAT 规则:
-
--zone=public- 您为其配置 DNAT 规则的防火墙区域。您可以将其调整到您需要的任何区域。 -
--add-forward-port- 指示您正在添加端口转发规则的选项。 -
port=80- 外部目标端口。 -
proto=tcp- 表示您转发 TCP 流量的协议。 -
toaddr=198.51.100.10- 目标 IP 地址。 -
toport=8080- 内部服务器的目标端口。 -
--permanent- 使 DNAT 规则在重启后保持不变的选项。
-
重新载入防火墙配置以应用更改:
firewall-cmd --reload
# firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证您使用的用于防火墙区域的 DNAT 规则:
firewall-cmd --list-forward-ports --zone=public port=80:proto=tcp:toport=8080:toaddr=198.51.100.10
# firewall-cmd --list-forward-ports --zone=public port=80:proto=tcp:toport=8080:toaddr=198.51.100.10Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,查看相应的 XML 配置文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.5.10.4. 将来自非标准端口的流量重定向,以使 Web 服务在标准端口上可访问 复制链接链接已复制到粘贴板!
您可以使用重定向机制使在非标准端口上内部运行的 Web 服务可访问,而无需用户在 URL 中指定端口。因此,URL 更简单,并提供更好的浏览体验,而非标准端口仍在内部或用于特定的要求。
先决条件
-
firewalld服务在运行。
流程
创建 NAT 重定向规则:
firewall-cmd --zone=public --add-forward-port=port=<standard_port>:proto=tcp:toport=<non_standard_port> --permanent
# firewall-cmd --zone=public --add-forward-port=port=<standard_port>:proto=tcp:toport=<non_standard_port> --permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow 之前的命令使用以下设置定义 NAT 重定向规则:
-
--zone=public- 您为其配置规则的防火墙区域。您可以将其调整到您需要的任何区域。 -
--add-forward-port=port=<non_standard_port>- 指示您正在使用最初接收传入流量的源端口添加端口转发(重定向)规则。 -
proto=tcp- 表示您重定向 TCP 流量的协议。 -
toport=<standard_port>- 目标端口,在源端口上收到传入流量后,应将其重定向到的端口。 -
--permanent- 使规则在重启后保持不变的选项。
-
重新载入防火墙配置以应用更改:
firewall-cmd --reload
# firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证您使用的防火墙区域的重定向规则:
firewall-cmd --list-forward-ports port=8080:proto=tcp:toport=80:toaddr=
# firewall-cmd --list-forward-ports port=8080:proto=tcp:toport=80:toaddr=Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,查看相应的 XML 配置文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.5.11. 丰富规则的优先级 复制链接链接已复制到粘贴板!
富规则提供了一种更高级且更灵活的方法来定义防火墙规则。富规则特别有用,其中服务、端口等服务不足以表达复杂的防火墙规则。
富规则背后的概念:
- 粒度和灵活性
- 您可以根据更为具体的标准为网络流量定义详细条件。
- 规则结构
富规则由家族(IPv4 或 IPv6)组成,后跟条件和操作。
rule family="ipv4|ipv6" [conditions] [actions]
rule family="ipv4|ipv6" [conditions] [actions]Copy to Clipboard Copied! Toggle word wrap Toggle overflow - conditions
- 它们允许富规则仅在符合特定条件时才适用。
- 操作
- 您可以定义与条件匹配的网络流量发生的情况。
- 组合多个条件
- 您可以创建更为具体的和复杂的过滤。
- 分层控制和可重复利用
- 您可以将丰富的规则与其他防火墙机制(如区域或服务)相结合。
默认情况下,富规则是根据其规则操作进行组织的。例如,deny 规则优先于 allow 规则。富规则中的 priority 参数可让管理员对富规则及其执行顺序进行精细的控制。在使用 priority 参数时,规则首先按其优先级值以升序排序。当更多的规则有同样的 优先级 时,其顺序是由规则行动决定的,如果行动也相同,则顺序可以是未定义。
23.5.11.1. priority 参数如何将规则组织到不同的链 复制链接链接已复制到粘贴板!
您可以在富规则中将 priority 参数设置为 -32768 和 32767 之间的任意数,较低的数值具有较高的优先级。
firewalld 服务根据优先级值将规则组织到不同的链中:
-
优先级低于 0:规则被重定向到带有
_pre后缀的链中。 -
优先级高于 0:规则被重定向到带有
_post后缀的链中。 -
优先级等于 0:根据操作,规则会被重定向到带有
_log、_deny或_allow操作的链中。
在这些子链中,firewalld 根据其优先级值对规则进行排序。
23.5.11.2. 设置丰富的规则的优先级 复制链接链接已复制到粘贴板!
以下是如何创建一条富规则的示例,该规则使用 priority 参数来记录其他规则不允许或拒绝的所有流量。您可以使用此规则标记意非预期的流量。
流程
添加一个带有非常低优先级的丰富规则来记录未由其他规则匹配的所有流量:
firewall-cmd --add-rich-rule='rule priority=32767 log prefix="UNEXPECTED: " limit value="5/m"'
# firewall-cmd --add-rich-rule='rule priority=32767 log prefix="UNEXPECTED: " limit value="5/m"'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个命令还将日志条目数量限制为每分钟
5条。
验证
显示命令在上一步中创建的
nftables规则:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.5.12. 启用 firewalld 区域中不同接口或源之间的流量转发 复制链接链接已复制到粘贴板!
区内转发是 firewalld 的一种功能,它允许 firewalld 区域内接口或源之间的流量转发。
23.5.12.1. 区内转发与默认目标设置为 ACCEPT 的区域之间的区别 复制链接链接已复制到粘贴板!
启用区域内转发后,单个 firewalld 区域中的流量可以从一个接口或源流到另一个接口或源。区指定接口和源的信任级别。如果信任级别相同,流量会保持在同一区域内。
在 firewalld 的默认区域中启用区域内转发仅适用于添加到当前默认区域的接口和源。
firewalld 使用不同的区域管理传入和传出流量。每个区域都有自己的一组规则和行为。例如,trusted 区域默认允许所有转发的流量。
其他区域可以有不同的默认行为。在标准区域中,当区域的目标被设置为 default 时,转发的流量通常默认被丢弃。
要控制流量如何在区域内的不同接口或源之间转发,请确保您理解并相应地配置了区域的目标。
23.5.12.2. 使用区内转发来在以太网和 Wi-Fi 网络间转发流量 复制链接链接已复制到粘贴板!
您可以使用区内转发来在同一 firewalld 区内的接口和源之间转发流量。此功能带来以下好处:
-
有线设备和无线设备间的无缝连接(您可以在连接到
enp1s0的以太网网络和连接到wlp0s20的 Wi-Fi 网络之间转发流量) - 支持灵活的工作环境
- 可被网络中的多个设备或用户访问和使用的共享资源(如打印机、数据库、网络连接的存储等)
- 高效的内部网络(如顺畅通信、减少的延迟、资源可访问性等)
您可以为单个 firewalld 区域启用此功能。
流程
在内核中启用数据包转发:
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 确保您要在其间启用区域内转发的接口只分配到
internal区域:firewall-cmd --get-active-zones
# firewall-cmd --get-active-zonesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果接口当前被分配给了不是
internal的区,请重新分配它:firewall-cmd --zone=internal --change-interface=interface_name --permanent
# firewall-cmd --zone=internal --change-interface=interface_name --permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
enp1s0和wlp0s20接口添加到internal区:firewall-cmd --zone=internal --add-interface=enp1s0 --add-interface=wlp0s20
# firewall-cmd --zone=internal --add-interface=enp1s0 --add-interface=wlp0s20Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启用区域内部转发:
firewall-cmd --zone=internal --add-forward
# firewall-cmd --zone=internal --add-forwardCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
以下验证要求 nmap-ncat 软件包已安装在两个主机上。
-
登录到与您启用了区域转发的主机的
enp1s0接口位于同一网络的主机。 使用
ncat启动 echo 服务来测试连接:ncat -e /usr/bin/cat -l 12345
# ncat -e /usr/bin/cat -l 12345Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
登录到与
wlp0s20接口在同一网络的主机。 连接到在与
enp1s0在同一网络的主机上运行的 echo 服务器:ncat <other_host> 12345
# ncat <other_host> 12345Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 输入一些内容并按 。验证文本是否被发送回来。
23.5.13. 使用 RHEL 系统角色配置 firewalld 复制链接链接已复制到粘贴板!
RHEL 系统角色是 Ansible 自动化工具的一组内容。此内容与 Ansible 自动化工具一起提供一个一致的配置接口,来一次远程管理多个系统。
rhel-system-roles 软件包包含 rhel-system-roles.firewall RHEL 系统角色。此角色是为了自动配置 firewalld 服务而引入的。
使用 firewall RHEL 系统角色,您可以配置许多不同的 firewalld 参数,例如:
- 区域
- 应允许数据包的服务
- 授予、拒绝或丢弃访问端口的流量
- 区域的端口或端口范围的转发
23.5.13.1. 使用 firewall RHEL 系统角色重置 firewalld 设置 复制链接链接已复制到粘贴板!
随着时间的推移,对防火墙配置的更新可能会积累到一定程度,从而导致意外的安全风险。使用 firewall RHEL 系统角色,您可以以一种自动的方式将 firewalld 设置重置为其默认状态。这样,您可以有效地删除任何无意的或不安全的防火墙规则,并简化其管理。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo权限。
步骤
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括以下内容:
previous: replaced删除所有现有的用户定义的设置,并将
firewalld设置重置为默认值。如果将previous:replaced参数与其他设置相结合,则firewall角色会在应用新设置前删除所有现有设置。有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.firewall/README.md文件。
验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在控制节点上运行这个命令,来远程检查受管节点上的所有防火墙配置是否已被重置为其默认值:
ansible managed-node-01.example.com -m ansible.builtin.command -a 'firewall-cmd --list-all-zones'
# ansible managed-node-01.example.com -m ansible.builtin.command -a 'firewall-cmd --list-all-zones'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
您可以使用 firewall RHEL 系统角色进行远程配置,将传入流量从一个本地端口转发到不同的本地端口。
例如,如果您有一个环境,其中同一机器上有多个服务共存且需要同样的默认端口,则可能会出现端口冲突。这些冲突可能会破坏服务并导致停机。使用 firewall RHEL 系统角色,您可以有效地将流量转发到替代端口,以确保您的服务可以同时运行,而无需修改其配置。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo权限。
步骤
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括以下内容:
forward_port :8080/tcp;443- 使用 TCP 协议到达本地端口 8080 的流量被转发到端口 443。
runtime: true启用运行时配置中的更改。默认值被设置为
true。有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.firewall/README.md文件。
验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在控制节点上,运行以下命令远程检查受管节点上的转发端口:
ansible managed-node-01.example.com -m ansible.builtin.command -a 'firewall-cmd --list-forward-ports' managed-node-01.example.com | CHANGED | rc=0 >> port=8080:proto=tcp:toport=443:toaddr=
# ansible managed-node-01.example.com -m ansible.builtin.command -a 'firewall-cmd --list-forward-ports' managed-node-01.example.com | CHANGED | rc=0 >> port=8080:proto=tcp:toport=443:toaddr=Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.5.13.3. 使用 firewall RHEL 系统角色配置 firewalld DMZ 区域 复制链接链接已复制到粘贴板!
作为系统管理员,您可以使用 firewall RHEL 系统角色在 enp1s0 接口上配置 dmz 区域,以允许到区域的 HTTPS 流量。这样,您可以让外部用户访问您的 web 服务器。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo权限。
步骤
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.firewall/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在控制节点上,运行以下命令远程检查受管节点上
dmz区域的信息:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6. nftables 入门 复制链接链接已复制到粘贴板!
nftables 框架对数据包进行分类,它是 iptables、ip6tables、arptables、ebtables 和 ipset 实用程序的后续者。与之前的数据包过滤工具相比,它在方便、特性和性能方面提供了大量改进,最重要的是:
- 内置查找表而不是线性处理
-
IPv4和IPv6协议的单一框架 - 规则会以一个整体被应用,而不是分为抓取、更新和存储完整的规则集的步骤
-
支持在规则集(
nftrace)和监控追踪事件(nft)中调试和追踪 - 更加一致和压缩的语法,没有特定协议的扩展
- 用于第三方应用程序的 Netlink API
nftables 框架使用表来存储链。链包含执行动作的独立规则。nft 工具替换了之前数据包过滤框架中的所有工具。您可以使用 libnftnl 库通过 libmnl 库来处理 nftables Netlink API 的低级别交互。
要显示规则集变化的影响,请使用 nft list ruleset 命令。由于这些工具向 nftables 规则集添加表、链、规则、集合和其他对象,请注意 nftables 规则集的操作(如 nft flush ruleset 命令)可能会影响使用 iptables 命令安装的规则集。
23.6.1. 创建和管理 nftables 表、链和规则 复制链接链接已复制到粘贴板!
您可以显示 nftables 规则集并管理它们。
23.6.1.1. nftables 表的基础知识 复制链接链接已复制到粘贴板!
nftables 中的表是一个包含链、规则、集合和其他对象集合的名字空间。
每个表都必须分配一个地址系列。地址系列定义此表处理的数据包类型。在创建表时,您可以设置以下地址系列之一:
-
ip:仅匹配 IPv4 数据包。如果没有指定地址系列,这是默认设置。 -
ip6:仅匹配 IPv6 数据包. -
inet:匹配 IPv4 和 IPv6 数据包。 -
arp:匹配 IPv4 地址解析协议(ARP)数据包。 -
bridge:匹配通过网桥设备的数据包。 -
netdev:匹配来自 ingress 的数据包。
如果要添加表,所使用的格式取决于您的防火墙脚本:
在原生语法的脚本中,使用:
table <table_address_family> <table_name> { }table <table_address_family> <table_name> { }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 shell 脚本中,使用:
nft add table <table_address_family> <table_name>
nft add table <table_address_family> <table_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.1.2. nftables 链的基础知识 复制链接链接已复制到粘贴板!
表由链组成,链又是规则的容器。存在以下两种规则类型:
- 基本链 :您可以使用基本链作为来自网络堆栈的数据包的入口点。
-
常规链 :您可以将常规链用作
jump目标来更好地组织规则。
如果要向表中添加基本链,所使用的格式取决于您的防火墙脚本:
在原生语法的脚本中,使用:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 shell 脚本中,使用:
nft add chain <table_address_family> <table_name> <chain_name> { type <type> hook <hook> priority <priority> \; policy <policy> \; }nft add chain <table_address_family> <table_name> <chain_name> { type <type> hook <hook> priority <priority> \; policy <policy> \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为了避免 shell 将分号解释为命令的结尾,请将
\转义字符放在分号前面。
这两个示例都创建 基本链。要创建 常规链,请不要在大括号中设置任何参数。
链类型
以下是链类型以及您可以使用的地址系列和钩子的概述:
| 类型 | 地址系列 | 钩子 | 描述 |
|---|---|---|---|
|
| all | all | 标准链类型 |
|
|
|
| 这个类型的链根据连接跟踪条目执行原生地址转换。只有第一个数据包会遍历此链类型。 |
|
|
|
| 如果 IP 头的相关部分已更改,则接受的遍历此链类型的数据包会导致新的路由查找。 |
链优先级
priority 参数指定数据包遍历具有相同 hook 值的链的顺序。您可以将此参数设为整数值,或使用标准优先级名称。
以下列表是标准优先级名称及其数字值的一个概述,以及您可以使用它们的哪个地址系列和钩子:
| 文本值 | 数字值 | 地址系列 | 钩子 |
|---|---|---|---|
|
|
|
| all |
|
|
|
| all |
|
|
|
|
|
|
|
|
| |
|
|
|
| all |
|
|
| all | |
|
|
|
| all |
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
链策略
链策略定义 nftables 是否应该接受或丢弃数据包(如果此链中的规则没有指定任何操作)。您可以在链中设置以下策略之一:
-
accept(默认) -
drop
23.6.1.3. nftables 规则的基础知识 复制链接链接已复制到粘贴板!
规则定义要在传递包含此规则的链的数据包上执行操作。如果规则还包含匹配的表达式,nftables 仅在所有之前的表达式都应用时才执行操作。
如果要在链中添加规则,要使用的格式取决于您的防火墙脚本:
在原生语法的脚本中,使用:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 shell 脚本中,使用:
nft add rule <table_address_family> <table_name> <chain_name> <rule>
nft add rule <table_address_family> <table_name> <chain_name> <rule>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此 shell 命令在链末尾附加新规则。如果要在链开始时添加规则,请使用
nft insert命令而不是nft add。
23.6.1.4. 使用 nft 命令管理表、链和规则 复制链接链接已复制到粘贴板!
要在命令行或 shell 脚本中管理 nftables 防火墙,请使用 nft 工具。
此流程中的命令不代表典型的工作流,且不会被优化。此流程演示了如何使用 nft 命令管理表、链和规则。
流程
使用
inet地址系列创建一个名为nftables_svc的表,以便表可以处理 IPv4 和 IPv6 数据包:nft add table inet nftables_svc
# nft add table inet nftables_svcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将名为
INPUT的基本链(用于处理传入的网络流量)添加到inet nftables_svc表中:nft add chain inet nftables_svc INPUT { type filter hook input priority filter \; policy accept \; }# nft add chain inet nftables_svc INPUT { type filter hook input priority filter \; policy accept \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为了避免 shell 将分号解释为命令的结尾,请使用
\字符转义分号。向
INPUT链中添加规则。例如,允许端口 22 和 443 上的传入 TCP 流量,以及作为INPUT链的最后一个规则,拒绝其他带有互联网控制消息协议(ICMP)端口无法访问的消息的流量:nft add rule inet nftables_svc INPUT tcp dport 22 accept nft add rule inet nftables_svc INPUT tcp dport 443 accept nft add rule inet nftables_svc INPUT reject with icmpx type port-unreachable
# nft add rule inet nftables_svc INPUT tcp dport 22 accept # nft add rule inet nftables_svc INPUT tcp dport 443 accept # nft add rule inet nftables_svc INPUT reject with icmpx type port-unreachableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您输入
nft add rule命令,nft会将规则按与运行命令相同的顺序添加规则。显示包括句柄的当前规则集:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在带有句柄 3 的现有规则前面插入规则。例如,要插入一个允许端口 636 上 TCP 流量的规则,请输入:
nft insert rule inet nftables_svc INPUT position 3 tcp dport 636 accept
# nft insert rule inet nftables_svc INPUT position 3 tcp dport 636 acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用句柄 3 在现有规则后面附加规则。例如,要插入一个允许端口 80 上 TCP 流量的规则,请输入:
nft add rule inet nftables_svc INPUT position 3 tcp dport 80 accept
# nft add rule inet nftables_svc INPUT position 3 tcp dport 80 acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow 再次使用 handle 显示规则集。验证后续添加的规则是否已添加到指定位置:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除带有句柄 6 的规则:
nft delete rule inet nftables_svc INPUT handle 6
# nft delete rule inet nftables_svc INPUT handle 6Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要删除规则,您必须指定句柄。
显示规则集,并验证删除的规则不再存在:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从
INPUT链中删除所有剩余的规则:nft flush chain inet nftables_svc INPUT
# nft flush chain inet nftables_svc INPUTCopy to Clipboard Copied! Toggle word wrap Toggle overflow 显示规则集,并验证
INPUT链是否为空:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除
INPUT链:nft delete chain inet nftables_svc INPUT
# nft delete chain inet nftables_svc INPUTCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您还可以使用此命令删除仍然包含规则的链。
显示规则集,并验证
INPUT链已被删除:nft list table inet nftables_svc table inet nftables_svc { }# nft list table inet nftables_svc table inet nftables_svc { }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除
nftables_svc表:nft delete table inet nftables_svc
# nft delete table inet nftables_svcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您还可以使用此命令删除仍然包含链的表。
注意要删除整个规则集,请使用
nft flush ruleset命令,而不是手动删除独立命令中的所有规则、链和表。
23.6.2. 从 iptables 迁移到 nftables 复制链接链接已复制到粘贴板!
如果您的防火墙配置仍然使用 iptables 规则,则您可以将 iptables 规则迁移到 nftables。
23.6.2.1. 使用 firewalld、nftables 或者 iptables 时 复制链接链接已复制到粘贴板!
以下是您应该使用以下工具之一的概述:
-
firewalld:使用firewalld实用程序进行简单防火墙用例。此工具易于使用,并涵盖了这些场景的典型用例。 -
nftables:使用nftables实用程序设置复杂和高性能的防火墙,如为整个网络设置。 -
iptables:Red Hat Enterprise Linux 上的iptables工具使用nf_tables内核 API 而不是传统的后端。Thenf_tablesAPI 提供向后兼容性,因此使用iptables命令的脚本仍可在 Red Hat Enterprise Linux 上工作。对于新的防火墙脚本,红帽建议使用nftables。
要防止不同的与防火墙相关的服务(firewalld、nftables 或 iptables)相互影响,请在 RHEL 主机上仅运行其中一个服务,并禁用其他服务。
23.6.2.2. nftables 框架中的概念 复制链接链接已复制到粘贴板!
与 iptables 框架相比,nftables 提供了更加现代化、高效且更灵活的替代选择。与 iptables 相比,有几个提供高级功能和改进的概念和功能。这些增强功能简化了规则管理,并改进性能,使 nftables 成为复杂和高性能网络环境的现代替代方案。
nftables 框架包含以下组件:
- 表和命名空间
-
在
nftables中,表代表组织单元或命名空间,它们将相关的防火墙链、集合、流tables 和其他对象分组在一起。在nftables中,表提供了一种更灵活的方法来结构防火墙规则和相关组件。在iptables中,表更严格地定义在特定目的。 - 表系列
-
nftables中的每个表都与特定系列关联(ip、ip6、inet、arp、bridge或netdev)。此关联决定了表可以处理哪些数据包。例如,ip系列中的一个表只处理 IPv4 数据包。另一方面,inet是表系列的特殊案例。它提供了跨协议的统一方法,因为它可以处理 IPv4 和 IPv6 数据包。特殊表系列的另一个情况是netdev,因为它用于直接应用到网络设备的规则,从而在设备级别上启用过滤。 - 基本链
nftables中的基本链是数据包处理管道中高度可配置的入口点,允许用户指定以下内容:- 链的类型,如 "filter"
- 数据包处理路径中的 hook 点,如 "input", "output", "forward"
- 链的优先级
通过这种灵活性,可以精确控制规则在通过网络堆栈时应用到数据包的时间和方式。链的一种特殊情况是
路由链,用于根据数据包标头影响内核提出的路由决策。- 用于规则处理的虚拟机
-
nftables框架使用内部虚拟机来处理规则。此虚拟机执行与装配语言操作类似的指令(将数据加载到寄存器中,执行比较等)。这种机制可以实现高度灵活、高效的规则处理。
nftables 中的增强功能可以作为该虚拟机的新指令引入。这通常需要一个新的内核模块,并对 libnftnl 库和 nft 命令行工具进行更新。
或者,您可以通过将现有指令以创新方式结合来引进新功能,而无需进行内核修改。nftables 规则的语法反映了底层虚拟机的灵活性。例如:规则 meta mark set tcp dport map { 22:1, 80:2 } 将数据包的防火墙标记设置为 1 (如果 TCP 目的地端口为 22),如果端口为 80,则设置为 2。这展示了如何简洁地表达复杂逻辑。
- 实践课程学习和增强
-
nftables框架集成并扩展ipset工具的功能,用于iptables在 IP 地址、端口、其他数据类型上批量匹配,最重要的是,其中的组合。此集成可让您在nftables中直接管理大量和动态数据集。接下来,nftables原生支持基于任何数据类型的多个值或范围匹配的数据包,这增强了其处理复杂过滤要求的能力。使用nftables,您可以操作数据包中的任何字段。
在 nftables 中,集合可以命名为 或 anonymous。命名的集合可由多个规则引用并动态修改。匿名集合在规则内内联定义,并且是不可变的。集合可以包含组合不同类型的元素,如 IP 地址和端口号对。此功能在匹配复杂标准方面提供了更大的灵活性。要管理集合,内核可以根据特定要求(性能、内存效率等)选择最合适的后端。设置也可以使用键值对作为映射。value 部分可用作数据点(写入数据包标头的值),或者作为要跳到的链的值。这可启用复杂和动态规则行为,称为"verdict 映射"。
- 灵活的规则格式
-
nftables规则的结构非常简单。条件和操作从左到右应用。这种直观的格式简化了创建和故障排除的规则。
规则中的条件在逻辑上连接(与 AND 运算符)一起,这意味着所有条件都必须评估为 "true" 才能匹配的规则。如果有任何条件失败,评估将移到下一个规则。
nftables 中的操作可以是最终的操作,如 drop 或 accept,这样可停止对数据包进行进一步处理。非终端操作,如 计数器日志元标记设置 0x3,执行特定的任务(计算数据包、日志记录、设置标记等),但允许评估后续规则。
23.6.2.3. 弃用的 iptables 框架中的概念 复制链接链接已复制到粘贴板!
与主动维护的 nftables 框架类似,弃用的 iptables 框架允许您执行各种数据包过滤任务、日志记录和审计、与 NAT 相关的配置任务等。
iptables 框架由多个表组成,每个表都为特定目的设计:
filter- 默认表确保常规数据包过滤
nat- 对于网络地址转换(NAT),包括更改数据包的源和目标地址
mangle- 对于特定的数据包更改,您可以针对高级路由决策对数据包标头进行修改
raw- 对于在连接跟踪前需要发生的配置
这些表作为单独的内核模块实施,其中每个表都提供一组固定的内置链,如 INPUT、OUTPUT 和 FORWARD。链是指对数据包进行评估的规则序列。这些将 hook 链在内核中数据包处理流中的特定点。链在不同的表中具有相同的名称,但它们的执行顺序由相应的 hook 优先级决定。优先级由内核在内部管理,以确保规则以正确的序列应用。
最初,iptables 旨在处理 IPv4 流量。但是,由于 IPv6 协议的出现,需要引入 ip6tables 工具来提供可比较功能(作为 iptables),并允许用户创建和管理 IPv6 数据包的防火墙规则。使用相同的逻辑,创建了 arptables 工具来处理地址解析协议(ARP),并且为处理以太网桥接帧而开发了 ebtables 工具。这些工具可确保您可以在各种网络协议中应用 iptables 的数据包过滤功能,并提供全面的网络覆盖。
为增强 iptables 的功能,可以开始开发的扩展。功能扩展通常作为与用户空间动态共享对象(DSO)配对的内核模块实现。扩展引入了"匹配"和"目标",您可以在防火墙规则中使用它们来执行更复杂的操作。扩展可以启用复杂的匹配和目标。例如,您可以匹配或操作特定的第 4 层协议标头值,执行速率限制、强制实施配额等。某些扩展旨在解决默认的 iptables 语法中的限制,如"多端口"匹配扩展。此扩展允许单个规则与多个非安全端口匹配,以简化规则定义,从而减少所需的单个规则数量。
ipset 是 iptables 的特殊功能扩展。这是一个内核级别的数据结构,它与 iptables 一起使用来创建与数据包匹配的 IP 地址、端口号和其他与网络相关的元素集合。这些设置可显著简化、优化并加快编写和管理防火墙规则的过程。
23.6.2.4. 将 iptables 和 ip6tables 规则集转换为 nftables 复制链接链接已复制到粘贴板!
使用 iptables-restore-translate 和 ip6tables-restore-translate 实用程序将 iptables 和 ip6tables 规则集转换为 nftables。
先决条件
-
已安装
nftables和iptables软件包。 -
系统配置了
iptables和ip6tables规则。
流程
将
iptables和ip6tables规则写入一个文件:iptables-save >/root/iptables.dump ip6tables-save >/root/ip6tables.dump
# iptables-save >/root/iptables.dump # ip6tables-save >/root/ip6tables.dumpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将转储文件转换为
nftables指令:iptables-restore-translate -f /root/iptables.dump > /etc/nftables/ruleset-migrated-from-iptables.nft ip6tables-restore-translate -f /root/ip6tables.dump > /etc/nftables/ruleset-migrated-from-ip6tables.nft
# iptables-restore-translate -f /root/iptables.dump > /etc/nftables/ruleset-migrated-from-iptables.nft # ip6tables-restore-translate -f /root/ip6tables.dump > /etc/nftables/ruleset-migrated-from-ip6tables.nftCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
检查,如果需要,手动更新生成的
nftables规则。 要启用
nftables服务来加载生成的文件,请在/etc/sysconfig/nftables.conf文件中添加以下内容:include "/etc/nftables/ruleset-migrated-from-iptables.nft" include "/etc/nftables/ruleset-migrated-from-ip6tables.nft"
include "/etc/nftables/ruleset-migrated-from-iptables.nft" include "/etc/nftables/ruleset-migrated-from-ip6tables.nft"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 停止并禁用
iptables服务:systemctl disable --now iptables
# systemctl disable --now iptablesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您使用自定义脚本加载
iptables规则,请确保脚本不再自动启动并重新引导以刷新所有表。启用并启动
nftables服务:systemctl enable --now nftables
# systemctl enable --now nftablesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示
nftables规则集:nft list ruleset
# nft list rulesetCopy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.2.5. 将单个 iptables 和 ip6tables 规则转换为 nftables 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 提供了 iptables-translate 和 ip6tables-translate 工具来将 iptables 或 ip6tables 规则转换为与 nftables 相同的规则。
先决条件
-
已安装
nftables软件包。
流程
使用
iptables-translate或ip6tables-translate程序而不是iptables或ip6tables显示对应的nftables规则,例如:iptables-translate -A INPUT -s 192.0.2.0/24 -j ACCEPT nft add rule ip filter INPUT ip saddr 192.0.2.0/24 counter accept
# iptables-translate -A INPUT -s 192.0.2.0/24 -j ACCEPT nft add rule ip filter INPUT ip saddr 192.0.2.0/24 counter acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,一些扩展可能缺少响应的转换支持。在这些情况下,实用程序会输出以
#符号为前缀的未转换规则,例如:iptables-translate -A INPUT -j CHECKSUM --checksum-fill nft # -A INPUT -j CHECKSUM --checksum-fill
# iptables-translate -A INPUT -j CHECKSUM --checksum-fill nft # -A INPUT -j CHECKSUM --checksum-fillCopy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.2.6. 常见的 iptables 和 nftables 命令的比较 复制链接链接已复制到粘贴板!
以下是常见 iptables 和 nftables 命令的比较:
列出所有规则:
Expand iptables nftables iptables-savenft list ruleset列出某个表和链:
Expand iptables nftables iptables -Lnft list table ip filteriptables -L INPUTnft list chain ip filter INPUTiptables -t nat -L PREROUTINGnft list chain ip nat PREROUTINGnft命令不会预先创建表和链。只有当用户手动创建它们时它们才会存在。列出 firewalld 生成的规则:
nft list table inet firewalld nft list table ip firewalld nft list table ip6 firewalld
# nft list table inet firewalld # nft list table ip firewalld # nft list table ip6 firewalldCopy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.3. 使用 nftables 配置 NAT 复制链接链接已复制到粘贴板!
有了 nftables ,您就可以配置以下网络地址转换(NAT)类型:
- 伪装
- 源 NAT(SNAT)
- 目标 NAT(DNAT)
- 重定向
不支持在 iifname 和 oifname 参数中使用实际接口名称,以及备用名称(altname)。
23.6.3.1. NAT 类型 复制链接链接已复制到粘贴板!
这些是不同的网络地址转换(NAT)类型:
- 伪装和源 NAT(SNAT)
使用以上 NAT 类型之一更改数据包的源 IP 地址。例如,互联网服务提供商(ISP)不会路由私有 IP 范围,如
10.0.0.0/8。如果您在网络中使用私有 IP 范围,用户应该能够访问互联网上的服务器,请将来自这些范围的数据包的源 IP 地址映射为公共 IP 地址。伪装和 SNAT 相互类似。不同之处是:
- 伪装自动使用传出接口的 IP 地址。因此,如果传出接口使用了动态 IP 地址,则使用伪装。
- SNAT 将数据包的源 IP 地址设置为指定的 IP 地址,且不会动态查找传出接口的 IP 地址。因此,SNAT 要比伪装更快。如果传出接口使用了固定 IP 地址,则使用 SNAT。
- 目标 NAT(DNAT)
- 使用此 NAT 类型重写传入数据包的目标地址和端口。例如,如果您的 Web 服务器使用来自私有 IP 范围的 IP 地址,因此无法直接从互联网访问,您可以在路由器上设置 DNAT 规则,来将传入的流量重定向到此服务器。
- 重定向
- 这个类型是 IDT 的特殊示例,它根据链 hook 将数据包重定向到本地机器。例如,如果服务运行在与其标准端口不同的端口上,您可以将传入的流量从标准端口重定向到此特定端口。
23.6.3.2. 使用 nftables 配置伪装 复制链接链接已复制到粘贴板!
伪装使路由器动态地更改通过接口到接口 IP 地址发送的数据包的源 IP。这意味着,如果接口被分配了一个新 IP,nftables 会在替换源 IP 时自动使用新的 IP。
将通过 ens3 接口离开主机的数据包源 IP 替换为 ens3 上设置的 IP。
流程
创建一个表:
nft add table nat
# nft add table natCopy to Clipboard Copied! Toggle word wrap Toggle overflow 向表中添加
prerouting和postrouting链:nft add chain nat postrouting { type nat hook postrouting priority 100 \; }# nft add chain nat postrouting { type nat hook postrouting priority 100 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要即使您没有向
prerouting链中添加规则,nftables框架也会要求此链与传入的数据包回复匹配。请注意,您必须将
--选项传递给nft命令,以防止 shell 将负优先级值解释为nft命令的选项。向
postrouting链中添加一条规则,来匹配ens3接口上传出的数据包:nft add rule nat postrouting oifname "ens3" masquerade
# nft add rule nat postrouting oifname "ens3" masqueradeCopy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.3.3. 使用 nftables 配置源 NAT 复制链接链接已复制到粘贴板!
在路由器中,源 NAT(SNAT)可让您将通过接口发送的数据包 IP 改为专门的 IP 地址。然后,路由器会替换传出数据包的源 IP。
流程
创建一个表:
nft add table nat
# nft add table natCopy to Clipboard Copied! Toggle word wrap Toggle overflow 向表中添加
prerouting和postrouting链:nft add chain nat postrouting { type nat hook postrouting priority 100 \; }# nft add chain nat postrouting { type nat hook postrouting priority 100 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要即使您没有向
postrouting链添加规则,nftables框架也会要求此链与传出数据包回复相匹配。请注意,您必须将
--选项传递给nft命令,以防止 shell 将负优先级值解释为nft命令的选项。向
postrouting链中添加一条规则,该规则将使用192.0.2.1替换通过ens3的传出数据包的源 IP :nft add rule nat postrouting oifname "ens3" snat to 192.0.2.1
# nft add rule nat postrouting oifname "ens3" snat to 192.0.2.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.3.4. 使用 nftables 配置目标 NAT 复制链接链接已复制到粘贴板!
目标 NAT (DNAT)可让您将路由器上的流量重定向到无法直接从互联网访问的主机。
例如,有了 DNAT,路由器将发送给端口 80 和 443 的传入流量重定向到 IP 地址为 192.0.2.1 的 Web 服务器。
流程
创建一个表:
nft add table nat
# nft add table natCopy to Clipboard Copied! Toggle word wrap Toggle overflow 向表中添加
prerouting和postrouting链:nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; } nft add chain nat postrouting { type nat hook postrouting priority 100 \; }# nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; } # nft add chain nat postrouting { type nat hook postrouting priority 100 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要即使您没有向
postrouting链添加规则,nftables框架也会要求此链与传出数据包回复相匹配。请注意,您必须将
--选项传递给nft命令,以防止 shell 将负优先级值解释为nft命令的选项。向
prerouting链中添加一条规则,该规则将路由器的ens3接口上端口80和443的传入流量重定向到 IP 地址为192.0.2.1的 web 服务器:nft add rule nat prerouting iifname ens3 tcp dport { 80, 443 } dnat to 192.0.2.1# nft add rule nat prerouting iifname ens3 tcp dport { 80, 443 } dnat to 192.0.2.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 根据您的环境,添加 SNAT 或伪装规则,将从 Web 服务器返回的数据包的源地址改为发送者:
如果
ens3接口使用动态 IP 地址,请添加一条伪装规则:nft add rule nat postrouting oifname "ens3" masquerade
# nft add rule nat postrouting oifname "ens3" masqueradeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果
ens3接口使用静态 IP 地址,请添加一条 SNAT 规则。例如,如果ens3使用198.51.100.1IP 地址:nft add rule nat postrouting oifname "ens3" snat to 198.51.100.1
# nft add rule nat postrouting oifname "ens3" snat to 198.51.100.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
启用数据包转发:
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.3.5. 使用 nftables 配置重定向 复制链接链接已复制到粘贴板!
重定向 功能是目标网络地址转换(DNAT)的一种特殊情况,它根据链 hook 将数据包重定向到本地计算机。
例如,您可以将发送到本地主机端口 22 的流量重定向到端口 2222。
流程
创建一个表:
nft add table nat
# nft add table natCopy to Clipboard Copied! Toggle word wrap Toggle overflow 向表中添加
prerouting链:nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; }# nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,您必须将
--选项传递给nft命令,以防止 shell 将负优先级值解释为nft命令的选项。向
prerouting链中添加一条规则,其将端口22上的传入流量重定向到端口2222:nft add rule nat prerouting tcp dport 22 redirect to 2222
# nft add rule nat prerouting tcp dport 22 redirect to 2222Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.4. 编写和执行 nftables 脚本 复制链接链接已复制到粘贴板!
使用 nftables 框架的主要优点是脚本的执行是原子的。这意味着,系统会应用整个脚本,或者在出现错误时防止执行。这样可保证防火墙始终处于一致状态。
另外,使用 nftables 脚本环境时,您可以:
- 添加评论
- 定义变量
- 包括其他规则集文件
安装 nftables 软件包时,Red Hat Enterprise Linux 会在 /etc/nftables/ 目录中自动创建 *.nft 脚本。这些脚本包含为不同目的创建表和空链的命令。
23.6.4.1. 支持的 nftables 脚本格式 复制链接链接已复制到粘贴板!
您可以使用以下格式在 nftables 脚本环境中编写脚本:
与
nft list ruleset命令相同的格式显示规则集:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 与
nft命令的语法相同:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.4.2. 运行 nftables 脚本 复制链接链接已复制到粘贴板!
您可以通过将脚本传递给 nft 实用程序或直接执行脚本来运行 nftables 脚本。
流程
要通过将其传给
nft工具来运行nftables脚本,请输入:nft -f /etc/nftables/<example_firewall_script>.nft
# nft -f /etc/nftables/<example_firewall_script>.nftCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要直接运行
nftables脚本:在进行这个时间时:
确保脚本以以下 shebang 序列开头:
#!/usr/sbin/nft -f
#!/usr/sbin/nft -fCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要如果省略
-f参数,nft实用程序不会读取脚本并显示:Error: syntax error, unexpected newline, expecting string。可选:将脚本的所有者设置为
root:chown root /etc/nftables/<example_firewall_script>.nft
# chown root /etc/nftables/<example_firewall_script>.nftCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使脚本可以被其所有者执行:
chmod u+x /etc/nftables/<example_firewall_script>.nft
# chmod u+x /etc/nftables/<example_firewall_script>.nftCopy to Clipboard Copied! Toggle word wrap Toggle overflow
运行脚本:
/etc/nftables/<example_firewall_script>.nft
# /etc/nftables/<example_firewall_script>.nftCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果没有输出结果,系统将成功执行该脚本。
即使 nft 成功地执行了脚本,在脚本中错误放置的规则、缺失的参数或其他问题都可能会导致防火墙的行为不符合预期。
23.6.4.3. 使用 nftables 脚本中的注释 复制链接链接已复制到粘贴板!
nftables 脚本环境将 # 字符右侧的所有内容解释为行尾。
注释可在行首或命令旁边开始:
23.6.4.4. 使用 nftables 脚本中的变量 复制链接链接已复制到粘贴板!
要在 nftables 脚本中定义一个变量,请使用 define 关键字。您可以在变量中存储单个值和匿名集合。对于更复杂的场景,请使用 set 或 verdict 映射。
- 只有一个值的变量
以下示例定义了一个名为
INET_DEV的变量,其值为enp1s0:define INET_DEV = enp1s0
define INET_DEV = enp1s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以通过输入
$符号后再输入变量名称来使用脚本中的变量:... add rule inet example_table example_chain iifname $INET_DEV tcp dport ssh accept ...
... add rule inet example_table example_chain iifname $INET_DEV tcp dport ssh accept ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 包含匿名集合的变量
以下示例定义了一个包含匿名集合的变量:
define DNS_SERVERS = { 192.0.2.1, 192.0.2.2 }define DNS_SERVERS = { 192.0.2.1, 192.0.2.2 }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以通过在
$符号后跟变量名称来在脚本中使用变量:add rule inet example_table example_chain ip daddr $DNS_SERVERS accept
add rule inet example_table example_chain ip daddr $DNS_SERVERS acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意当您在规则中使用大括号时具有特殊的语义,因为它们表示变量代表一个集合。
23.6.4.5. 在 nftables 脚本中包含文件 复制链接链接已复制到粘贴板!
在 nftables 脚本环境中,您可以使用 include 语句包含其他脚本。
如果您只指定了文件名,而没有绝对路径或相对路径,那么 nftables 将包含默认搜索路径中的文件,在 Red Hat Enterprise Linux 上,该路径设为 /etc。
例 23.1. 包含默认搜索目录中的文件
从默认搜索目录中包含一个文件:
include "example.nft"
include "example.nft"
例 23.2. 包含目录中的所有 *.nft 文件
要包括所有存储在 /etc/nftables/rulesets/ 目录中、以 *.nft 结尾的文件:
include "/etc/nftables/rulesets/*.nft"
include "/etc/nftables/rulesets/*.nft"
请注意,include 语句不匹配以点开头的文件。
23.6.4.6. 系统引导时自动载入 nftables 规则 复制链接链接已复制到粘贴板!
nftables systemd 服务加载包含在 /etc/sysconfig/nftables.conf 文件中的防火墙脚本。
先决条件
-
nftables脚本存储在/etc/nftables/目录中。
流程
编辑
/etc/sysconfig/nftables.conf文件。-
如果您使用
nftables软件包的安装修改了在/etc/nftables/中创建的*.nft脚本,请取消对这些脚本的include语句的注释。 如果您编写了新脚本,请添加
include语句以包含这些脚本。例如,要在nftables服务启动时加载/etc/nftables/example.nft脚本,请添加:include "/etc/nftables/_example_.nft"
include "/etc/nftables/_example_.nft"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
如果您使用
可选:启动
nftables服务以在不重启系统的情况下加载防火墙规则:systemctl start nftables
# systemctl start nftablesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启用
nftables服务。systemctl enable nftables
# systemctl enable nftablesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.5. 使用 nftables 命令中的设置 复制链接链接已复制到粘贴板!
nftables 框架原生支持集合。您可以使用一个集合,例如,规则匹配多个 IP 地址、端口号、接口或其他匹配标准。
23.6.5.1. 在 nftables 中使用匿名集合 复制链接链接已复制到粘贴板!
匿名集合包含用逗号分开的值,如 { 22、80、443 },它们直接在规则中使用。您还可以将匿名集合用于 IP 地址以及任何其他匹配标准。
匿名集合的缺陷是,如果要更改集合,则需要替换规则。对于动态解决方案,使用命名集合,如 在 nftables 中使用命名集合 中所述。
先决条件
-
inet系列中的example_chain链和example_table表存在。
流程
例如,要向
example_table中的example_chain添加一条规则,其允许传入流量到端口22、80和443:nft add rule inet example_table example_chain tcp dport { 22, 80, 443 } accept# nft add rule inet example_table example_chain tcp dport { 22, 80, 443 } acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:在
example_table中显示所有链及其规则:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.5.2. 在 nftables 中使用命名集 复制链接链接已复制到粘贴板!
nftables 框架支持可变命名集合。命名集是一个列表或一组元素,您可以在表中的多个规则中使用。匿名集合的另外一个好处在于,您可以更新命名的集合而不必替换使用集合的规则。
当您创建一个命名集时,必须指定集合包含的元素类型。您可以设置以下类型:
-
包含 IPv4 地址或范围的集合的
ipv4_addr,如192.0.2.1或192.0.2.0/24。 -
包含 IPv6 地址或范围的集合的
ipv6_addr,如2001:db8:1::1或2001:db8:1::1/64。 -
包含介质访问控制(MAC)地址列表的集合的
ether_addr,如52:54:00:6b:66:42。 -
包含互联网协议类型列表的集合的
inet_proto,如tcp。 -
包含互联网服务列表的集合的
inet_service,如ssh。 -
包含数据包标记列表的集合的
mark。数据包标记可以是任意正 32 位整数值(0到2147483647)。
先决条件
-
example_chain链和example_table表存在。
流程
创建一个空集。以下示例为 IPv4 地址创建了一个集合:
要创建可存储多个独立 IPv4 地址的集合:
nft add set inet example_table example_set { type ipv4_addr \; }# nft add set inet example_table example_set { type ipv4_addr \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要创建可存储 IPv4 地址范围的集合:
nft add set inet example_table example_set { type ipv4_addr \; flags interval \; }# nft add set inet example_table example_set { type ipv4_addr \; flags interval \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow
重要要防止 shell 将分号解释为命令结尾,您必须使用反斜杠转义分号。
可选:创建使用集合的规则。例如,以下命令向
example_table中的example_chain中添加一条规则,该规则将丢弃example_set中来自 IPv4 地址的所有数据包。nft add rule inet example_table example_chain ip saddr @example_set drop
# nft add rule inet example_table example_chain ip saddr @example_set dropCopy to Clipboard Copied! Toggle word wrap Toggle overflow 由于
example_set仍为空,所以该规则目前不起作用。向
example_set中添加 IPv4 地址:如果您创建存储单个 IPv4 地址的集合,请输入:
nft add element inet example_table example_set { 192.0.2.1, 192.0.2.2 }# nft add element inet example_table example_set { 192.0.2.1, 192.0.2.2 }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您创建存储 IPv4 范围的集合,请输入:
nft add element inet example_table example_set { 192.0.2.0-192.0.2.255 }# nft add element inet example_table example_set { 192.0.2.0-192.0.2.255 }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当您指定 IP 地址范围时,您可以使用无类别域间路由(CIDR)表示法,如上例中的
192.0.2.0/24。
23.6.5.3. 使用动态集添加来自数据包路径的条目 复制链接链接已复制到粘贴板!
nftables 框架中的动态设置允许自动添加来自数据包数据的元素。例如,IP 地址、目标端口、MAC 地址等。通过此功能,您可以实时收集这些元素,并使用它们创建拒绝列表、禁止列表等,以便您能够立即响应安全威胁。
先决条件
-
inet系列中的example_chain链和example_table表存在。
流程
创建一个空集。以下示例为 IPv4 地址创建了一个集合:
要创建可存储多个独立 IPv4 地址的集合:
nft add set inet example_table example_set { type ipv4_addr \; }# nft add set inet example_table example_set { type ipv4_addr \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要创建可存储 IPv4 地址范围的集合:
nft add set inet example_table example_set { type ipv4_addr \; flags interval \; }# nft add set inet example_table example_set { type ipv4_addr \; flags interval \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要要防止 shell 将分号解释为命令结尾,您必须使用反斜杠转义分号。
创建一条规则,将传入数据包的源 IPv4 地址添加到
example_set组中:nft add rule inet example_table example_chain set add ip saddr @example_set
# nft add rule inet example_table example_chain set add ip saddr @example_setCopy to Clipboard Copied! Toggle word wrap Toggle overflow 命令在
example_chain规则链中创建了一个新规则,并使用example_table将数据包的源 IPv4 地址动态添加到example_set中。
验证
确保添加了规则:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 命令显示
nftables中当前载入的整个规则集。它显示 IP 正在主动触发规则,并且使用相关地址更新example_set。
后续步骤
有动态 IP 集后,您可以将它用于各种安全性、过滤和流量控制目的。例如:
- 块、限制或记录网络流量
- 与允许列表结合使用,以避免禁止可信用户
- 使用自动超时来防止过度阻塞
23.6.6. 在 nftables 命令中使用 verdict 映射 复制链接链接已复制到粘贴板!
判决映射(也称为字典),使 nft 能够通过将匹配条件映射到某个操作来根据数据包信息执行操作。
23.6.6.1. 在 nftables 中使用匿名映射 复制链接链接已复制到粘贴板!
匿名映射是直接在规则中使用的 { match_criteria : action } 语句。这个语句可以包含多个用逗号分开的映射。
匿名映射的缺点是,如果要修改映射,则必须替换规则。对于动态解决方案,请使用命名映射,如 在 nftables 中使用命名映射 中所述。
例如,您可以使用匿名映射将 IPv4 和 IPv6 协议的 TCP 和 UDP 数据包路由到不同的链,以分别计算传入的 TCP 和 UDP 数据包。
流程
创建新表:
nft add table inet example_table
# nft add table inet example_tableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
example_table中创建tcp_packets链:nft add chain inet example_table tcp_packets
# nft add chain inet example_table tcp_packetsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 向统计此链中流量的
tcp_packets中添加一条规则:nft add rule inet example_table tcp_packets counter
# nft add rule inet example_table tcp_packets counterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
example_table中创建udp_packets链nft add chain inet example_table udp_packets
# nft add chain inet example_table udp_packetsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 向统计此链中流量的
udp_packets中添加一条规则:nft add rule inet example_table udp_packets counter
# nft add rule inet example_table udp_packets counterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为传入的流量创建一个链。例如,要在过滤传入的流量的
example_table中创建一个名为incoming_traffic的链:nft add chain inet example_table incoming_traffic { type filter hook input priority 0 \; }# nft add chain inet example_table incoming_traffic { type filter hook input priority 0 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加一条带有到
incoming_traffic匿名映射的规则 :nft add rule inet example_table incoming_traffic ip protocol vmap { tcp : jump tcp_packets, udp : jump udp_packets }# nft add rule inet example_table incoming_traffic ip protocol vmap { tcp : jump tcp_packets, udp : jump udp_packets }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 匿名映射区分数据包,并根据它们的协议将它们发送到不同的计数链。
要列出流量计数器,请显示
example_table:Copy to Clipboard Copied! Toggle word wrap Toggle overflow tcp_packets和udp_packets链中的计数器显示两者接收的数据包和字节数。
23.6.6.2. 在 nftables 中使用命名映射 复制链接链接已复制到粘贴板!
nftables 框架支持命名映射。您可以在表中的多个规则中使用这些映射。匿名映射的另一个好处在于,您可以更新命名映射而不比替换使用它的规则。
在创建命名映射时,您必须指定元素的类型:
-
匹配部分包含 IPv4 地址的映射的
ipv4_addr,如192.0.2.1。 -
匹配部分包含 IPv6 地址的映射的
ipv6_addr,如2001:db8:1::1。 -
匹配部分包含介质访问控制(MAC)地址的映射的
ether_addr,如52:54:00:6b:66:42。 -
匹配部分包含互联网协议类型的映射的
inet_proto,如tcp。 -
匹配部分包含互联网服务名称端口号的映射的
inet_service,如ssh或22。 -
匹配部分包含数据包的映射的
mark。数据包标记可以是任意正 32 位整数值(0到2147483647)。 -
匹配部分包含计数器值的映射的
counter。计数器值可以是任意正 64 位整数值。 -
匹配部分包含配额值的映射的
quota。配额值可以是任意正 64 位整数值。
例如,您可以根据其源 IP 地址允许或丢弃传入的数据包。使用命名映射时,您只需要一条规则来配置这种场景,而 IP 地址和操作被动态存储在映射中。
流程
创建表。例如,要创建一个处理 IPv4 数据包的、名为
example_table的表:nft add table ip example_table
# nft add table ip example_tableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建链。例如,要在
example_table中创建一个名为example_chain的链:nft add chain ip example_table example_chain { type filter hook input priority 0 \; }# nft add chain ip example_table example_chain { type filter hook input priority 0 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要要防止 shell 将分号解释为命令结尾,您必须使用反斜杠转义分号。
创建一个空的映射。例如,要为 IPv4 地址创建映射:
nft add map ip example_table example_map { type ipv4_addr : verdict \; }# nft add map ip example_table example_map { type ipv4_addr : verdict \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建使用该映射的规则。例如,以下命令向
example_table中的example_chain添加了一条规则,该规则将操作应用到在example_map中定义的 IPv4 地址:nft add rule example_table example_chain ip saddr vmap @example_map
# nft add rule example_table example_chain ip saddr vmap @example_mapCopy to Clipboard Copied! Toggle word wrap Toggle overflow 向
example_map添加 IPv4 地址和相应的操作:nft add element ip example_table example_map { 192.0.2.1 : accept, 192.0.2.2 : drop }# nft add element ip example_table example_map { 192.0.2.1 : accept, 192.0.2.2 : drop }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个示例定义了 IPv4 地址到操作的映射。与以上创建的规则相结合,防火墙接受来自
192.0.2.1的数据包,丢弃来自192.0.2.2的数据包。可选:通过添加另一个 IP 地址和 action 语句来增强映射:
nft add element ip example_table example_map { 192.0.2.3 : accept }# nft add element ip example_table example_map { 192.0.2.3 : accept }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:从映射中删除条目:
nft delete element ip example_table example_map { 192.0.2.1 }# nft delete element ip example_table example_map { 192.0.2.1 }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:显示规则集:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.7. 例如:使用 nftables 脚本保护 LAN 和 DMZ 复制链接链接已复制到粘贴板!
使用 RHEL 路由器上的 nftables 框架来编写和安装防火墙脚本,该脚本可保护内部 LAN 中的网络客户端,以及 DMZ 中的 Web 服务器,不受互联网和其他网络的未授权访问。
这个示例仅用于演示目的,并描述了具有特定要求的场景。
防火墙脚本高度依赖于网络基础架构和安全要求。当您为自己的环境编写脚本时,请使用此示例了解 nftables 防火墙的概念。
23.6.7.1. 网络状况 复制链接链接已复制到粘贴板!
本例中的网络具有以下条件:
路由器连接到以下网络:
-
互联网通过接口
enp1s0 -
内部 LAN 通过接口
enp7s0 -
DMZ through
enp8s0
-
互联网通过接口
-
路由器的互联网接口分配了静态 IPv4 地址(
203.0.113.1)和 IPv6 地址(2001:db8:a::1)。 -
内部 LAN 中的客户端仅使用范围
10.0.0.0/24中的专用 IPv4 地址。因此,从 LAN 到互联网的流量需要源网络地址转换(SNAT)。 -
内部 LAN 中的管理员 PC 使用 IP 地址
10.0.0.100和10.0.0.200。 -
DMZ 使用范围
198.51.100.0/24和2001:db8:b::/56的公共 IP 地址。 -
DMZ 中的 Web 服务器使用 IP 地址
198.51.100.5和2001:db8:b::5。 - 路由器充当 LAN 和 DMZ 中的主机的缓存 DNS 服务器。
23.6.7.2. 防火墙脚本的安全要求 复制链接链接已复制到粘贴板!
以下是示例网络中 nftables 防火墙的要求:
路由器必须能够:
- 递归解析 DNS 查询。
- 在回环接口上执行所有连接。
内部 LAN 中的客户端必须能够:
- 查询运行在路由器上的缓存 DNS 服务器。
- 访问 DMZ 中的 HTTPS 服务器。
- 访问互联网上的任何 HTTPS 服务器。
- 管理员的 PC 必须能够使用 SSH 访问 DMZ 中的路由器以及每个服务器。
DMZ 中的 Web 服务器必须能够:
- 查询运行在路由器上的缓存 DNS 服务器。
- 访问互联网上的 HTTPS 服务器以下载更新。
互联网上的主机必须能够:
- 访问 DMZ 中的 HTTPS 服务器。
另外,存在以下安全要求:
- 应丢弃未明确允许的连接尝试。
- 应记录丢弃的数据包。
23.6.7.3. 配置将丢弃的数据包记录到文件 复制链接链接已复制到粘贴板!
默认情况下,systemd 会将内核消息如,丢弃的数据包,记录到日志中。另外,您可以配置 rsyslog 服务,来将此类条目记录到单独的文件中。为确保日志文件不会无限增长,请配置轮转策略。
先决条件
-
rsyslog软件包已安装。 -
rsyslog服务正在运行。
流程
使用以下内容创建
/etc/rsyslog.d/nftables.conf文件::msg, startswith, "nft drop" -/var/log/nftables.log & stop
:msg, startswith, "nft drop" -/var/log/nftables.log & stopCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用这个配置,
rsyslog服务会将丢弃的数据包记录到/var/log/nftables.log文件,而不是/var/log/messages。重启
rsyslog服务:systemctl restart rsyslog
# systemctl restart rsyslogCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下内容创建
/etc/logrotate.d/nftables文件,以便在大小超过 10 MB 时轮转/var/log/nftables.log:Copy to Clipboard Copied! Toggle word wrap Toggle overflow maxage 30设置定义了logrotate在下一次轮转操作过程中删除超过 30 天的轮转日志。
23.6.7.4. 编写并激活 nftables 脚本 复制链接链接已复制到粘贴板!
本例是运行在 RHEL 路由器上的一个 nftables 防火墙脚本,其保护内部 LAN 中的客户端以及 DMZ 中的 Web 服务器。有关示例中使用的防火墙的网络和要求的详情,请参阅 网络条件 和 对防火墙脚本的安全要求 。
此 nftables 防火墙脚本仅用于演示目的。不要在未经调整为适合您环境和安全要求的情况下使用它。
前提条件
- 网络已配置,如 网络状况 中所述。
流程
使用以下内容创建
/etc/nftables/firewall.nft脚本:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
/etc/sysconfig/nftables.conf文件中包括/etc/nftables/firewall.nft脚本:include "/etc/nftables/firewall.nft"
include "/etc/nftables/firewall.nft"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启用 IPv4 转发:
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启用并启动
nftables服务:systemctl enable --now nftables
# systemctl enable --now nftablesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
可选:验证
nftables规则集:nft list ruleset ...
# nft list ruleset ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 尝试执行防火墙阻止的访问。例如,尝试使用 SSH 从 DMZ 访问路由器:
ssh router.example.com ssh: connect to host router.example.com port 22: Network is unreachable
# ssh router.example.com ssh: connect to host router.example.com port 22: Network is unreachableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 根据您的日志记录设置,搜索:
阻塞的数据包的
systemd日志:journalctl -k -g "nft drop" Oct 14 17:27:18 router kernel: nft drop IN : IN=enp8s0 OUT= MAC=... SRC=198.51.100.5 DST=198.51.100.1 ... PROTO=TCP SPT=40464 DPT=22 ... SYN ...
# journalctl -k -g "nft drop" Oct 14 17:27:18 router kernel: nft drop IN : IN=enp8s0 OUT= MAC=... SRC=198.51.100.5 DST=198.51.100.1 ... PROTO=TCP SPT=40464 DPT=22 ... SYN ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 阻塞的数据包的
/var/log/nftables.log文件:Oct 14 17:27:18 router kernel: nft drop IN : IN=enp8s0 OUT= MAC=... SRC=198.51.100.5 DST=198.51.100.1 ... PROTO=TCP SPT=40464 DPT=22 ... SYN ...
Oct 14 17:27:18 router kernel: nft drop IN : IN=enp8s0 OUT= MAC=... SRC=198.51.100.5 DST=198.51.100.1 ... PROTO=TCP SPT=40464 DPT=22 ... SYN ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.8. 使用 nftables 限制连接的数量 复制链接链接已复制到粘贴板!
您可以使用 nftables 来限制连接数或限制到建立给定数量连接的块 IP 地址,以防止它们使用太多的系统资源。
23.6.8.1. 使用 nftables 限制连接的数量 复制链接链接已复制到粘贴板!
通过使用 nft 工具的 ct count 参数,您可以限制每个 IP 地址的同时连接的数量。例如,您可以使用此功能配置每个源 IP 地址只能建立两个到主机的并行 SSH 连接。
流程
创建带有
inet地址系列的filter表:nft add table inet filter
# nft add table inet filterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
input链添加到inet filter表中:nft add chain inet filter input { type filter hook input priority 0 \; }# nft add chain inet filter input { type filter hook input priority 0 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 IPv4 地址创建动态集合:
nft add set inet filter limit-ssh { type ipv4_addr\; flags dynamic \;}# nft add set inet filter limit-ssh { type ipv4_addr\; flags dynamic \;}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
input链中添加一条规则,该规则只允许从 IPv4 地址到 SSH 端口(22)的两个同时的传入连接,并拒绝来自同一 IP 的所有进一步的连接:nft add rule inet filter input tcp dport ssh ct state new add @limit-ssh { ip saddr ct count over 2 } counter reject# nft add rule inet filter input tcp dport ssh ct state new add @limit-ssh { ip saddr ct count over 2 } counter rejectCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
- 建立从同一 IP 地址到主机的两个以上的同时的 SSH 连接。如果已经建立了两个连接,则 nftables 会拒绝到 SSH 端口的连接。
显示
limit-ssh动态集:Copy to Clipboard Copied! Toggle word wrap Toggle overflow elements条目显示当前与该规则匹配的地址。在本例中,elements列出了与 SSH 端口有活动连接的 IP 地址。请注意,输出不会显示活跃连接的数量,或者连接是否被拒绝。
23.6.8.2. 在一分钟内尝试超过十个进入的 TCP 连接的 IP 地址 复制链接链接已复制到粘贴板!
您可以临时阻止在一分钟内建立十个 IPv4 TCP 连接的主机。
流程
创建具有
ip地址系列的filter表:nft add table ip filter
# nft add table ip filterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 向
filter表中添加input链:nft add chain ip filter input { type filter hook input priority 0 \; }# nft add chain ip filter input { type filter hook input priority 0 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加一条规则,其丢弃来自源地址的所有数据包,并尝试在一分钟内建立十个 TCP 连接:
nft add rule ip filter input ip protocol tcp ct state new, untracked meter ratemeter { ip saddr timeout 5m limit rate over 10/minute } drop# nft add rule ip filter input ip protocol tcp ct state new, untracked meter ratemeter { ip saddr timeout 5m limit rate over 10/minute } dropCopy to Clipboard Copied! Toggle word wrap Toggle overflow timeout 5m参数定义nftables在五分钟后自动删除条目,以防止计量被过时的条目填满。
验证
要显示 meter 的内容,请输入:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.9. 调试 nftables 规则 复制链接链接已复制到粘贴板!
nftables 框架为管理员提供了不同的选项来调试规则,以及数据包是否匹配。
23.6.9.1. 创建带有计数器的规则 复制链接链接已复制到粘贴板!
在识别规则是否匹配时,可以使用计数器。
-
有关在现有规则中添加计数器的流程的更多信息,请参阅
配置和管理网络中的 向现有规则中添加计数器
先决条件
- 您要添加该规则的链已存在。
流程
向链中添加一条带有
counter参数的新规则。以下示例添加一个带有计数器的规则,它允许端口 22 上的 TCP 流量,并计算与这个规则匹配的数据包和网络数据的数量:nft add rule inet example_table example_chain tcp dport 22 counter accept
# nft add rule inet example_table example_chain tcp dport 22 counter acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow 显示计数器值:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.9.2. 在现有规则中添加计数器 复制链接链接已复制到粘贴板!
在识别规则是否匹配时,可以使用计数器。
-
有关添加带有计数器的新规则的流程的更多信息,请参阅
配置和管理网络中的 创建带有计数器的规则
先决条件
- 您要添加计数器的规则已存在。
流程
在链中显示规则及其句柄:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过使用
counter参数替换规则来添加计数器。以下示例替换了上一步中显示的规则并添加计数器:nft replace rule inet example_table example_chain handle 4 tcp dport 22 counter accept
# nft replace rule inet example_table example_chain handle 4 tcp dport 22 counter acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow 显示计数器值:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.9.3. 监控与现有规则匹配的数据包 复制链接链接已复制到粘贴板!
nftables 中的追踪功能与 nft monitor 命令相结合,使管理员能够显示与某一规则匹配的数据包。您可以为规则启用追踪,用它来监控匹配此规则的数据包。
先决条件
- 您要添加计数器的规则已存在。
流程
在链中显示规则及其句柄:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过使用
meta nftrace set 1参数替换规则来添加追踪功能。以下示例替换了上一步中显示的规则并启用追踪:nft replace rule inet example_table example_chain handle 4 tcp dport 22 meta nftrace set 1 accept
# nft replace rule inet example_table example_chain handle 4 tcp dport 22 meta nftrace set 1 acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
nft monitor命令来显示追踪。以下示例过滤了命令的输出,来只显示包含inet example_table example_chain的条目:nft monitor | grep "inet example_table example_chain" trace id 3c5eb15e inet example_table example_chain packet: iif "enp1s0" ether saddr 52:54:00:17:ff:e4 ether daddr 52:54:00:72:2f:6e ip saddr 192.0.2.1 ip daddr 192.0.2.2 ip dscp cs0 ip ecn not-ect ip ttl 64 ip id 49710 ip protocol tcp ip length 60 tcp sport 56728 tcp dport ssh tcp flags == syn tcp window 64240 trace id 3c5eb15e inet example_table example_chain rule tcp dport ssh nftrace set 1 accept (verdict accept) ...
# nft monitor | grep "inet example_table example_chain" trace id 3c5eb15e inet example_table example_chain packet: iif "enp1s0" ether saddr 52:54:00:17:ff:e4 ether daddr 52:54:00:72:2f:6e ip saddr 192.0.2.1 ip daddr 192.0.2.2 ip dscp cs0 ip ecn not-ect ip ttl 64 ip id 49710 ip protocol tcp ip length 60 tcp sport 56728 tcp dport ssh tcp flags == syn tcp window 64240 trace id 3c5eb15e inet example_table example_chain rule tcp dport ssh nftrace set 1 accept (verdict accept) ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 警告根据启用了追踪的规则数量以及匹配流量的数量,
nft monitor命令可以显示很多输出。使用grep或其他工具来过滤输出。
23.6.10. 备份和恢复 nftables 规则集 复制链接链接已复制到粘贴板!
您可以将 nftables 规则备份到文件,并稍后恢复它们。此外,管理员可以使用带有规则的文件,来将规则传给其他服务器。
23.6.10.1. 将 nftables 规则集备份到文件 复制链接链接已复制到粘贴板!
您可以使用 nft 工具将 nftables 规则集备份到文件。
流程
要备份
nftables规则:以
nft list ruleset格式生成的格式:nft list ruleset > file.nft
# nft list ruleset > file.nftCopy to Clipboard Copied! Toggle word wrap Toggle overflow JSON 格式:
nft -j list ruleset > file.json
# nft -j list ruleset > file.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.10.2. 从文件中恢复 nftables 规则集 复制链接链接已复制到粘贴板!
您可以从文件恢复 nftables 规则集。
流程
要恢复
nftables规则:如果要恢复的文件是
nft list ruleset生成的格式,或直接包含nft命令:nft -f file.nft
# nft -f file.nftCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果要恢复的文件采用 JSON 格式:
nft -j -f file.json
# nft -j -f file.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow
部分 IV. 硬盘的设计 复制链接链接已复制到粘贴板!
第 24 章 可用文件系统概述 复制链接链接已复制到粘贴板!
由于大量的可用选项以及所涉及的权衡,因此选择适合您应用程序的文件系统是一个重要的决定。
以下小节描述了 Red Hat Enterprise Linux 8 默认包括的文件系统,以及最适合应用程序的建议。
24.1. 文件系统类型 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 8 支持各种文件系统(FS)。不同类型的文件系统可以解决不同类型的问题,它们的使用会根据特定应用程序而有所不同。在最一般的级别上,可用的文件系统可以分为以下主要类型:
| 类型 | 文件系统 | 属性和使用案例 |
|---|---|---|
| 磁盘或本地 FS | XFS | XFS 是 RHEL 中的默认文件系统。红帽建议将 XFS 部署为本地文件系统,除非有特定原因部署为其它:例如,兼容性或涉及性能方面的情况。 |
| ext4 | ext4 在 Linux 中有相似性的好处,其从较旧的 ext2 和 ext3 文件系统演变而来。在很多情况下,它在性能上可以与 XFS 相媲美。对 ext4 文件系统和文件大小的支持限制比 XFS 上的要低。 | |
| 网络或客户端-和-服务器 FS | NFS | 使用 NFS 在同一个网络中的多个系统间共享文件。 |
| SMB | 使用 SMB 进行与微软 Windows 系统的文件共享。 | |
| 共享存储或共享磁盘 FS | GFS2 | GFS2 为计算集群成员提供共享写入访问。其重点在于稳定性和可靠性,获得与本地文件系统类似的体验。SAS Grid、Tibco MQ、IBM Websphere MQ 和 Red Hat Active MQ 已被成功部署在 GFS2 上。 |
| 卷管理 FS | Stratis(技术预览) | Stratis 是基于 XFS 和 LVM 的组合构建的卷管理器。Stratis 的目的是模拟卷管理文件系统(如 Btrfs 和 ZFS)所提供的功能。可以手动构建此堆栈,但 Stratis 可减少配置的复杂度、实施最佳实践并整合错误信息。 |
24.2. 本地文件系统 复制链接链接已复制到粘贴板!
本地文件系统是在单一本地服务器中运行并直接附加到存储中的文件系统。
例如,本地文件系统是内部 SATA 或 SAS 磁盘的唯一选择,可在当您的服务器具有带有本地驱动器的内部硬件 RAID 控制器时使用。当 SAN 上导出的设备未共享时,本地文件系统也是 SAN 连接的存储上最常用的文件系统。
所有本地文件系统都符合 POSIX,且与所有支持的 Red Hat Enterprise Linux 版本完全兼容。与 POSIX 兼容的文件系统为一组定义良好的系统调用提供支持,如 read()、write() 和 seek()。
在考虑文件系统选择时,根据文件系统需要多大、它必须具有哪些唯一功能,以及如何在工作负载下执行文件系统。
- 可用的本地文件系统
- XFS
- ext4
24.3. XFS 文件系统 复制链接链接已复制到粘贴板!
XFS 是一个高度可扩展、高性能、健壮且成熟的 64 位日志文件系统,其支持单个主机上非常大的文件和文件系统。它是 Red Hat Enterprise Linux 8 中的默认文件系统。XFS 最初于 1990 年代由 SGI 早期开发,并在非常大型的服务器和存储阵列中运行有很长的历史记录。
XFS 的功能包括:
- 可靠性
- 元数据日志,其确保系统崩溃后文件系统的完整性,方法是保留系统重启和重新挂载文件系统时可以重新执行的文件系统操作的记录,
- 广泛的运行时元数据一致性检查
- 可扩展且快速修复工具
- 配额日志。这可避免在崩溃后进行冗长的配额一致性检查。
- 可伸缩性和性能
- 支持最多 1024 TiB 的文件系统大小
- 支持大量并发操作的能力
- B-tree 索引,用于空闲空间的可扩展性管理
- 复杂的元数据读头算法
- 优化流视频工作负载
- 分配方案
- 基于扩展数据块的分配
- 条带化分配策略
- 延迟分配
- 空间预分配
- 动态分配的 inode
- 其他功能
- 基于 Reflink 的文件副本
- 严格集成备份和恢复工具
- 在线清理
- 在线文件系统增大
- 全面的诊断功能
-
扩展属性(
xattr)。这允许系统能够按文件关联多个额外的名称/值对。 - 项目或目录配额。这允许对目录树的配额限制。
- 小于秒的时间戳
性能特性
XFS 在具有企业工作负载的大型系统上具有高性能。大型系统是一个有相对较多的 CPU 、多个 HBA 和连接外部磁盘阵列的系统。XFS 在具有多线程、并行 I/O 工作负载的较小系统上也表现良好。
对于单线程、元数据密集型工作负载,XFS 的性能相对较低:例如,在单个线程中创建或删除大量小文件的工作负载。
24.4. ext4 文件系统 复制链接链接已复制到粘贴板!
ext4 文件系统是 ext 文件系统系列的第四代。它是 Red Hat Enterprise Linux 6 中的默认文件系统。
ext4 驱动程序可以对 ext2 和 ext3 文件系统进行读写,但 ext4 文件系统格式与 ext2 和 ext3 驱动程序不兼容。
ext4 添加了几个新的改进的功能,例如:
- 支持的文件系统大小高达 50 TiB
- 基于扩展的元数据
- 延迟分配
- 日志的 checksum
- 大型存储支持
基于扩展数据块的元数据和延迟分配功能提供了一种更加紧凑和高效的方法来跟踪文件系统中的已用空间。这些功能提高了文件系统性能,并减少了元数据所占用的空间。延迟分配允许文件系统延迟选择新写入用户数据的永久位置,直到数据刷新到磁盘。这可实现更高的性能,因为它允许更大的、连续的分配,允许文件系统根据更佳的信息做出决策。
ext4 中使用 fsck 工具的文件系统修复时间比 在 ext2 和 ext3 中要快得多。一些文件系统修复的性能会增加最多 6 倍。
24.5. XFS 和 ext4 的比较 复制链接链接已复制到粘贴板!
XFS 是 RHEL 中的默认文件系统。本节比较 XFS 和 ext4 的用法和功能。
- 元数据错误行为
-
在 ext4 中,当文件系统遇到元数据错误时您可以配置行为。默认的行为是继续操作。当 XFS 遇到不可恢复的元数据错误时,它会关闭文件系统,并返回
EFSCORRUPTED错误。 - 配额
在 ext4 中,您可以在创建文件系统时启用配额,或稍后在现有文件系统上启用配额。然后您可以使用挂载选项配置配额强制执行。
XFS 配额不是一个可重新挂载的选项。您必须在初始挂载中激活配额。
在 XFS 文件系统上运行
quotacheck命令没有效果。当您第一次打开配额记帐时,XFS 会自动检查配额。- 文件系统重新定义大小
- XFS 没有工具来缩小文件系统的大小。您只能增大 XFS 文件系统的大小。而 ext4 支持扩展和缩小文件系统大小。
- 内节点(inode)号
ext4 文件系统不支持超过 232 内节点。
XFS 支持动态内节点分配。XFS 文件系统上空间索引节点的大小计算为总文件系统空间的百分比。要防止系统耗尽 inode,管理员可以在文件系统创建后调整这个百分比,假设文件系统上剩余的可用空间。
某些应用程序无法正确处理 XFS 文件系统上大于232 的 inode 数。这些应用程序可能会导致 32 位 stat 调用失败,返回值为
EOVERFLOW。在以下情况下,inode 数超过 232:- 文件系统大于 1 TiB,其 inode 为 256 字节。
- 文件系统大于 2 TiB,其 inode 为 512 字节。
如果您的应用程序由于 inode 数太大而失败,请使用
-o inode32选项挂载 XFS 文件系统,来强制inode 数低于 232。请注意,使用inode32不会影响已分配了 64 位数的 inode。重要除非特定环境需要,否则 请勿 使用
inode32选项。inode32选项可改变分配行为。因此,如果没有可用空间在较低磁盘块中分配 inode ,则可能会出现ENOSPC错误。
24.6. 选择本地文件系统 复制链接链接已复制到粘贴板!
要选择一个满足应用程序要求的文件系统,您必须了解要在其上部署文件系统的目标系统。一般情况下,请使用 XFS,除非您有 ext4 的特定用例。
- XFS
- 对于大规模部署,请使用 XFS,特别是在处理大型文件(几百兆字节)和高 I/O 并发时。XFS 在具有高带宽(超过 200MB/s)和 1000 IOPS 的环境中执行最佳执行。但是,与 ext4 相比,它会消耗更多 CPU 资源用于元数据操作,且不支持文件系统缩小。
- ext4
- 对于 I/O 带宽有限的较小的系统或环境,ext4 可能更加适合。它在单线程、较低 I/O 工作负载和具有较低吞吐量要求的环境中表现更好。ext4 也支持离线缩减,这在调整文件系统大小时需要时很有用。
在目标服务器和存储系统上基准测试您的应用程序的性能,以确保所选的文件系统满足您的性能和可扩展性要求。
| 场景 | 推荐的文件系统 |
|---|---|
| 没有特殊用例 | XFS |
| 大服务器 | XFS |
| 大存储设备 | XFS |
| 大文件 | XFS |
| 多线程 I/O | XFS |
| 单线程 I/O | ext4 |
| 有限 I/O 功能(在 1000 IOPS 下) | ext4 |
| 有限带宽(在 200MB/s 下) | ext4 |
| CPU 绑定工作负载 | ext4 |
| 支持离线缩小 | ext4 |
24.7. 网络文件系统 复制链接链接已复制到粘贴板!
网络文件系统也称为客户端/服务器文件系统,使客户端系统能够访问存储在共享服务器上的文件。这使得多个系统上的多个用户可以共享文件和存储资源。
此类文件系统构建自一个或多个服务器,它们将一组文件系统导出到一个或多个客户端。客户端节点无法访问底层的块存储,而是使用允许更好的访问控制的协议来与存储进行交互。
- 可用网络文件系统
- RHEL 客户最常用的客户端/服务器文件系统是 NFS 文件系统。RHEL 提供了一个 NFS 服务器组件,来通过网络导出本地文件系统,并提供 NFS 客户端来导入这些文件系统。
- RHEL 还包括 CIFS 客户端,其支持流行的 Microsoft SMB 文件服务器来实现 Windows 互操作性。用户空间 Samba 服务器为 Windows 客户端提供 RHEL 服务器的 Microsoft SMB 服务。
24.10. 卷管理文件系统 复制链接链接已复制到粘贴板!
卷管理文件系统集成整个存储堆栈,以实现简洁和堆栈内优化。
- 可用卷管理文件系统
- Red Hat Enterprise Linux 8 作为技术预览提供 Stratis 卷管理器。Stratis 对文件系统层使用 XFS,并将其与 LVM、设备映射器和其他组件集成。
Stratis 最初在 Red Hat Enterprise Linux 8.0 中发布。它被设计为填补红帽弃用 Btrfs 时出现的空白。Stratis 1.0 是一个直观的、基于命令行的卷管理器,可以在隐藏用户复杂性的同时执行重要的存储管理操作:
- 卷管理
- 创建池
- 精简存储池
- 快照
- 自动读取缓存
Stratis 提供强大的功能,但目前缺乏其他产品(如 Btrfs 或 ZFS)的某些功能。最值得注意的是,它不支持带自我修复的 CRC。
第 26 章 持久性命名属性概述 复制链接链接已复制到粘贴板!
作为系统管理员,您需要引用使用持久性命名属性的存储卷来构建比多个系统引导更可靠存储设置。
26.1. 非持久性命名属性的缺陷 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 提供识别存储设备的多种方法。在使用时,务必要使用正确的选项来识别每个设备,以避免意外访问错误的设备,特别是在安装到或重新格式化驱动器时。
通常,Linux 中使用非持久性名称来表示存储设备,格式为 /dev/sd(主号)(次号)。当检测到设备时,会为每个设备分配主号和次号范围,以及相关的 sd 名称。这意味着,如果设备检测顺序发生了变化,主号和次号范围之间的关联以及相关的 sd 名称可能会发生变化。
在以下情况下可能会在以下情况下更改排序:
- 系统引导过程的并行化会根据每个系统引导的顺序检测到存储设备。
-
磁盘无法启动或响应 SCSI 控制器。这会导致通常的设备探测不会检测到它。磁盘不能被系统访问,后续的设备将有其主号和次号范围,包括相关的
sd名称会下移。例如,如果没有检测到通常称为sdb的磁盘,则通常称为sdc的磁盘将显示为sdb。 -
SCSI 控制器(主机总线适配器或 HBA)无法初始化,从而导致不能检测到与该 HBA 连接的所有磁盘。任何连接到随后探测到的 HBA 的磁盘都会被分配不同的主号和次号范围,以及不同的相关
sd名称。 - 如果系统中存在不同类型的 HBA,则驱动初始化顺序会改变。这会导致连接到那些 HBA 的磁盘以不同顺序被检测到。当将 HBA 移动到系统的不同 PCI 插槽时也会出现这种情况。
-
连接到带有光纤通道、iSCSI 或 FCoE 适配器的系统的磁盘可能在检测存储设备时无法访问,例如,由于存储阵列或中间交换机断电。如果存储阵列的在线需要比系统启动的时间更长,则系统在电源失败后重启时会出现这种情况。虽然某些光纤通道驱动程序支持一种机制来将持久性 SCSI 目标 ID 指定到 WWPN 映射,但这不会保留主号和次号范围,以及相关的
sd名称,它只提供一致的 SCSI 目标 ID 号。
这些原因使得在引用设备(例如在 /etc/fstab文件中的)时不希望使用主号和次号范围或相关的 sd 名称。可能挂载了错误的设备,并可能导致数据崩溃。
然而,仍然有必要引用 sd 名称,即使使用了其它机制,比如当设备报告错误时。这是因为 Linux 内核在有关设备的内核消息中使用 sd 名称(以及 SCSI 主机/通道/目标/LUN 元组)。
26.2. 文件系统和设备识别符 复制链接链接已复制到粘贴板!
文件系统标识符与文件系统本身绑定,设备标识符则链接到物理块设备。了解正确的存储管理非常重要。
文件系统识别符
文件系统标识符与在块设备中创建的特定文件系统绑定。标识符也作为文件系统的一部分保存。如果您将文件系统复制到不同的设备中,它仍采用相同的文件系统识别符。但是,如果您重写设备,比如使用 mkfs 工具进行格式化,则设备会丢失属性。
文件系统识别符包括:
- 唯一标识符(UUID)
- 标签
设备识别符
设备标识符与块设备绑定:例如磁盘或者分区。如果您重写设备,比如使用 mkfs 工具进行格式化,设备会保留属性,因为它没有存储在文件系统中。
设备识别符包括:
- World Wide Identifier (WWID)
- 分区 UUID
- 序列号
建议
- 有些文件系统(比如逻辑卷)会跨越多个设备。红帽建议您使用文件系统识别符而不是设备标识符访问这些文件系统。
26.3. 使用 /dev/disk/ 中的 udev 机制管理的设备名称 复制链接链接已复制到粘贴板!
udev 机制用于 Linux 中的所有设备,不仅限于存储设备。它在 /dev/disk/ 目录中提供不同类型的持久命名属性。对于存储设备,Red Hat Enterprise Linux 包含 udev 规则,该规则在 /dev/disk/ 目录中创建符号链接。这可让您使用以下方法指向存储设备:
- 其内容
- 唯一标识符
- 它们的序列号。
虽然 udev 命名属性是持久的,但它们在系统重启后不会自行更改,但有一部分也是可以配置的。
26.3.1. 文件系统识别符 复制链接链接已复制到粘贴板!
/dev/disk/by-uuid/ 中的 UUID 属性
此目录中的条目提供一个符号链接名称,通过存储在设备上的内容(即数据)中的 唯一标识符 (UUID) 来指向存储设备。例如:
/dev/disk/by-uuid/3e6be9de-8139-11d1-9106-a43f08d823a6
/dev/disk/by-uuid/3e6be9de-8139-11d1-9106-a43f08d823a6
您可以使用以下语法,使用 UUID 指向 /etc/fstab 文件中的设备:
UUID=3e6be9de-8139-11d1-9106-a43f08d823a6
UUID=3e6be9de-8139-11d1-9106-a43f08d823a6
您可以在创建文件系统时配置 UUID 属性,您也可以稍后修改它。
/dev/disk/by-label/ 中的 Label 属性
这个目录中的条目提供了一个符号链接名称,它们使用保存在该设备中的内容(即数据)的一个 label 指向存储设备。
例如:
/dev/disk/by-label/Boot
/dev/disk/by-label/Boot
您可以使用以下语法,使用标签来指向 /etc/fstab 文件中的设备:
LABEL=Boot
LABEL=Boot
您可以在创建文件系统时配置 Label 属性,您也可以稍后修改它。
26.3.2. 设备识别符 复制链接链接已复制到粘贴板!
/dev/disk/by-id/ 中的 WWID 属性
全球识别符(WWID)是一个持久的、系统独立的标识符,SCSI 标准要求所有 SCSI 设备都使用它。保证 WWID 标识符对于每个存储设备都是唯一的,并且独立于用于访问该设备的路径。标识符是设备的属性,但不存储在设备上的内容(也就是数据)中。
可通过发出 SCSI 询问来检索设备识别重要产品数据(第 0x83 页)或单元序列号(第 0x80 页)来获取此标识符。
Red Hat Enterprise Linux 自动维护系统上从基于 WWID 的设备名称到当前 /dev/sd 名称的正确映射。应用程序可以使用 /dev/disk/by-id/ 名称来引用磁盘上的数据,即使设备的路径有变化,即使从不同的系统访问该设备也一样。
例 26.1. WWID 映射
| WWID 符号链接 | 非持久性设备 | 备注 |
|---|---|---|
|
|
|
具有页面 |
|
|
|
具有页面 |
|
|
| 磁盘分区 |
除了系统提供的这些持久名称外,您还可以使用 udev 规则来实现映射到存储的 WWID 的持久名称。
/dev/disk/by-partuuid 中的分区 UUID 属性
分区 UUID(PARTUUID)属性标识 GPT 分区表定义的分区。
例 26.2. 分区 UUID 映射
| PARTUUID 符号链接 | 非持久性设备 |
|---|---|
|
|
|
|
|
|
|
|
|
/dev/disk/by-path/ 中的 Path 属性
此属性通过用于访问该设备的 硬件路径 来提供一个指向存储设备的符号链接。
如果硬件路径的任何部分(如 PCI ID、目标端口或 LUN 号)发生变化,Path 属性会失败。因此 Path 属性是不可靠的。但是 Path 属性在以下情况下可能有用:
- 您需要识别您要替换的磁盘。
- 您计划在特定位置的磁盘中安装存储服务。
26.4. 使用 DM 多路径的通用识别符 复制链接链接已复制到粘贴板!
您可以配置设备映射器(DM)多路径,来映射全球识别符(WWID)和非持久性设备名称。
如果系统中有多路径到某个设备,DM 多路径会使用 WWID 探测到这个设备。然后,DM 多路径会在 /dev/mapper/wwid 目录中显示一个"pseudo-device",如 /dev/mapper/3600508b400105df70000e00000ac0000。
multipath -l 命令显示到非持久性标识符的映射:
-
Host:Channel:Target:LUN -
/dev/sd名称 -
major:minor号
例 26.3. 多路径配置中的 WWID 映射
multipath -l 命令的一个输出示例:
DM 多路径自动维护每个基于 WWID 的设备名称到系统上相应的 /dev/sd 名称的正确映射。这些名称可在路径更改之间保留,在从不同系统访问该设备时会保持一致。
当使用 DM 多路径的 user_friendly_names 功能时,WWID 被映射成 /dev/mapper/mpathN 形式的名称。默认情况下,此映射在 /etc/multipath/bindings 文件中维护。只要该文件被维护,这些 mpathN 名称就会持久存在。
如果使用 user_friendly_names,则需要额外的步骤来获得集群中的一致名称。
26.5. udev 设备命名规则的限制 复制链接链接已复制到粘贴板!
以下是 udev 命名规则的一些限制:
-
执行查询时可能无法访问设备,因为当为
udev事件处理udev规则时,udev机制可能依赖于查询存储设备的能力。当设备不在服务器机箱中时,这更可能会在光纤频道、iSCSI 或者 FCoE 存储设备中发生。 -
内核可能会随时发送
udev事件,从而导致规则被处理,并可能导致设备无法访问时,/dev/disk/by-*/链接被删除。 -
在
udev事件产生和处理时,如检测到大量设备,用户空间udevd服务花费一些时间来处理每个事件的规则时,可能会有延迟。这可能会在内核检测到该设备和在/dev/disk/by-*/名称可用之间出现延迟。 -
规则调用的
blkid等外部程序可能会打开设备一小段时间,从而使设备无法被其他用途访问。 -
/dev/disk/ 中由
udev机制管理的设备名称可能会在主版本之间有所变化,需要您更新链接。
26.6. 列出持久性命名属性 复制链接链接已复制到粘贴板!
您可以找到非持久性存储设备的持久性命名属性。
流程
要列出 UUID 和 Label 属性,请使用
lsblk工具:lsblk --fs storage-device
$ lsblk --fs storage-deviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
例 26.4. 查看文件系统的 UUID 和标签
lsblk --fs /dev/sda1 NAME FSTYPE LABEL UUID MOUNTPOINT sda1 xfs Boot afa5d5e3-9050-48c3-acc1-bb30095f3dc4 /boot
$ lsblk --fs /dev/sda1 NAME FSTYPE LABEL UUID MOUNTPOINT sda1 xfs Boot afa5d5e3-9050-48c3-acc1-bb30095f3dc4 /bootCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要列出 PARTUUID 属性,请使用
lsblk工具以及--output +PARTUUID选项:lsblk --output +PARTUUID
$ lsblk --output +PARTUUIDCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
例 26.5. 查看分区的 PARTUUID 属性
lsblk --output +PARTUUID /dev/sda1 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT PARTUUID sda1 8:1 0 512M 0 part /boot 4cd1448a-01
$ lsblk --output +PARTUUID /dev/sda1 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT PARTUUID sda1 8:1 0 512M 0 part /boot 4cd1448a-01Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要列出 WWID 属性,请检查
/dev/disk/by-id/目录中符号链接的目标。例如:例 26.6. 查看系统中所有存储设备的 WWID
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
26.7. 修改持久性命名属性 复制链接链接已复制到粘贴板!
您可以更改文件系统的 UUID 或 Label persistent naming 属性。
更改 udev 属性在后台进行,可能需要很长时间。udevadm settle 命令会等待直到更改被完全注册,这样可确保您的下一个命令能够正确使用新属性。
在以下命令中:
-
将 new-uuid 替换为您要设置的 UUID;例如,
1cdfbc07-1c90-4984-b5ec-f61943f5ea50。您可以使用uuidgen命令生成一个 UUID。 -
使用标签替换 new-label,如
backup_data。
先决条件
- 如果您要修改 XFS 文件系统的属性,首先卸载它。
流程
要更改 XFS 文件系统的 UUID 或 Label 属性,请使用
xfs_admin工具:xfs_admin -U new-uuid -L new-label storage-device udevadm settle
# xfs_admin -U new-uuid -L new-label storage-device # udevadm settleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要更改 ext4、ext3 或 ext2 文件系统的 UUID 或 Label 属性,请使用
tune2fs工具:tune2fs -U new-uuid -L new-label storage-device udevadm settle
# tune2fs -U new-uuid -L new-label storage-device # udevadm settleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要更改 swap 卷的 UUID 或 Label 属性,请使用
swaplabel工具:swaplabel --uuid new-uuid --label new-label swap-device udevadm settle
# swaplabel --uuid new-uuid --label new-label swap-device # udevadm settleCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 27 章 分区入门 复制链接链接已复制到粘贴板!
使用磁盘分区将磁盘分成一个或多个逻辑区域,这些区域可以单独在每个分区上工作。硬盘在分区表中保存每个磁盘分区的位置和大小信息。使用表,每个分区然后显示为操作系统的逻辑磁盘。然后您可以在这些独立磁盘中进行读取和写入。
有关在块设备上使用分区的优点和缺点的概述,请查看红帽知识库解决方案在 LUN 上使用分区(可以在两者间直接或通过 LVM)有哪些优点和缺点?
27.1. 使用 parted 在磁盘中创建分区表 复制链接链接已复制到粘贴板!
使用 parted 实用程序更轻松地使用分区表格式化块设备。
使用分区表格式化块设备会删除该设备中所有存储的数据。
流程
启动交互式
partedshell:parted block-device
# parted block-deviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 确定该设备中是否已有一个分区表:
(parted) print
(parted) printCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果设备已经包含分区,则后续步骤中将删除它们。
创建新分区表:
(parted) mklabel table-type
(parted) mklabel table-typeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用预期的分区表类型替换 table-type :
-
用于的 MBR 的
msdos -
用于 GPT 的
gpt
-
用于的 MBR 的
例 27.1. 创建 GUID 分区表(GPT)表
要在磁盘上创建 GPT 表,请使用:
(parted) mklabel gpt
(parted) mklabel gptCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在输入以下命令后,这些更改将开始应用。
查看分区表以确认其已创建:
(parted) print
(parted) printCopy to Clipboard Copied! Toggle word wrap Toggle overflow 退出
partedshell:(parted) quit
(parted) quitCopy to Clipboard Copied! Toggle word wrap Toggle overflow
27.2. 查看使用 parted 的分区表 复制链接链接已复制到粘贴板!
显示块设备的分区表,以查看分区布局和单个分区的详情。您可以使用 parted 工具查看块设备上的分区表。
流程
启动
parted工具。例如:以下输出列出了设备/dev/sda:parted /dev/sda
# parted /dev/sdaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 查看分区表:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:切换到您要检查的下一个设备:
(parted) select block-device
(parted) select block-deviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
有关打印命令输出的详细描述,请查看以下信息:
Model:ATA SAMSUNG MZNLN256(scsi)- 磁盘类型、制造商、型号号和接口。
磁盘 /dev/sda:256GB- 块设备的文件路径和存储容量。
分区表:msdos- 磁盘标签类型。
Number-
分区号。例如,次号 1 的分区对应于
/dev/sda1。 Start和End- 在分区启动和结束的设备中的位置。
Type- 有效类型为 metadata、free、primary、extended 或 logical。
File system-
文件系统类型。如果设备的
File system字段未显示值,这意味着其文件系统类型为未知。parted工具无法识别加密设备上的文件系统。 标记-
列出为分区设置的标记。可用的标志有
boot、root、swap、hidden、raid、lvm或lba。
27.3. 使用 parted 创建分区 复制链接链接已复制到粘贴板!
作为系统管理员,您可以使用 parted 实用程序在磁盘上创建新分区。
所需分区是 swap、/boot/ 和 /(root)。
先决条件
- 磁盘上的分区表。
- 如果要创建的分区大于 2TiB,使用 GUID 分区表(GPT) 格式化磁盘。
流程
启动
parted工具:parted block-device
# parted block-deviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 查看当前的分区表来确定是否有足够空闲空间:
(parted) print
(parted) printCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 如果分区没有足够的可用空间,则调整分区大小。
从分区表中决定:
- 新分区的开始和结束点。
- 在 MBR 上,应该是什么分区类型。
创建新分区:
(parted) mkpart part-type name fs-type start end
(parted) mkpart part-type name fs-type start endCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
将 part-type 替换为
primary,logical, 或extended。这只适用于 MBR 分区表。 - 使用任意分区名称替换 name。对于 GPT 分区表,这是必需的。
-
将 fs-type 替换为
xfs、ext2、ext3、ext4、fat16、fat32、hfs、hfs+、linux-swap、ntfs或reiserfs。fs-type 参数是可选的。请注意,parted实用程序不会在分区中创建文件系统。 -
使用从磁盘开头计算分区开始和结束点的大小替换 start 和 end。您可以使用大小后缀,如
512MiB、20GiB或1.5TiB。默认的大小是 MB。
例 27.2. 创建小的主分区
要从 1024MiB 创建主分区,直到 MBR 表中的 2048MiB,请使用:
(parted) mkpart primary 1024MiB 2048MiB
(parted) mkpart primary 1024MiB 2048MiBCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在输入以下命令后,这些更改开始应用。
-
将 part-type 替换为
查看分区表以确认创建的分区位于分区表中,并具有正确的分区类型、文件系统类型和大小:
(parted) print
(parted) printCopy to Clipboard Copied! Toggle word wrap Toggle overflow 退出
partedshell:(parted) quit
(parted) quitCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注册新设备节点:
udevadm settle
# udevadm settleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证内核是否识别了新的分区:
cat /proc/partitions
# cat /proc/partitionsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
27.4. 使用 fdisk 设置分区类型 复制链接链接已复制到粘贴板!
您可以使用 fdisk 实用程序设置分区类型或标志。
先决条件
- 磁盘上的一个分区。
流程
启动交互式
fdiskshell:fdisk block-device
# fdisk block-deviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 查看当前的分区表以确定副分区号码:
Command (m for help): print
Command (m for help): printCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以在
Type列中看到当前的分区类型,在Id列中看到相应的类型 ID 。输入分区类型命令并使用它的副号码选择分区:
Command (m for help): type Partition number (1,2,3 default 3): 2
Command (m for help): type Partition number (1,2,3 default 3): 2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:查看十六进制代码列表:
Hex code (type L to list all codes): L
Hex code (type L to list all codes): LCopy to Clipboard Copied! Toggle word wrap Toggle overflow 设置分区类型:
Hex code (type L to list all codes): 8e
Hex code (type L to list all codes): 8eCopy to Clipboard Copied! Toggle word wrap Toggle overflow 写入更改并退出
fdiskshell:Command (m for help): write The partition table has been altered. Syncing disks.
Command (m for help): write The partition table has been altered. Syncing disks.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证您的更改:
fdisk --list block-device
# fdisk --list block-deviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
27.5. 使用 parted 重新定义分区大小 复制链接链接已复制到粘贴板!
使用 parted 工具扩展分区以使用未使用的磁盘空间,或者缩小分区以将其容量用于不同的目的。
先决条件
- 在缩小分区前备份数据。
- 如果要创建的分区大于 2TiB,使用 GUID 分区表(GPT) 格式化磁盘。
- 如果您想缩小分区,首先缩小文件系统,使其不大于重新定义大小的分区。
XFS 不支持缩小。
流程
启动
parted工具:parted block-device
# parted block-deviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 查看当前的分区表:
(parted) print
(parted) printCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从分区表中决定:
- 分区的副号码。
- 调整大小后现有分区的位置和新结束点。
重新定义分区大小:
(parted) resizepart 1 2GiB
(parted) resizepart 1 2GiBCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用您要重新定义分区的副号码替换 1。
-
将 2 替换为确定重新定义重新定义分区大小的新结束点的大小,从磁盘开始计算。您可以使用大小后缀,如
512MiB、20GiB或1.5TiB。默认的大小是 MB。
查看分区表以确认调整了大小的分区位于分区表中,且大小正确:
(parted) print
(parted) printCopy to Clipboard Copied! Toggle word wrap Toggle overflow 退出
partedshell:(parted) quit
(parted) quitCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证内核是否注册了新分区:
cat /proc/partitions
# cat /proc/partitionsCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 可选:如果您扩展了分区,也扩展了它上面的文件系统。
27.6. 使用 parted 删除分区 复制链接链接已复制到粘贴板!
使用 parted 工具,您可以删除磁盘分区以释放磁盘空间。
删除分区将删除保存在分区中的所有数据。
流程
启动交互式
partedshell:parted block-device
# parted block-deviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
使用您要删除分区的设备的路径替换 block-device :例如
/dev/sda。
-
使用您要删除分区的设备的路径替换 block-device :例如
查看当前的分区表以确定要删除的分区的次号:
(parted) print
(parted) printCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除分区:
(parted) rm minor-number
(parted) rm minor-numberCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用您要删除的分区的副号码替换 minor-number。
输入此命令后,这些更改会立即应用。
验证您是否已从分区表中删除了分区:
(parted) print
(parted) printCopy to Clipboard Copied! Toggle word wrap Toggle overflow 退出
partedshell:(parted) quit
(parted) quitCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证内核是否注册分区是否已删除:
cat /proc/partitions
# cat /proc/partitionsCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
如果分区存在,从
/etc/fstab文件中删除分区。找到声明删除的分区的行,并将其从文件中删除。 重新生成挂载单元,以便您的系统注册新的
/etc/fstab配置:systemctl daemon-reload
# systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您删除了交换分区或删除 LVM 部分,请从内核命令行中删除对分区的所有引用:
列出活跃内核选项并查看是否有选项引用删除的分区:
grubby --info=ALL
# grubby --info=ALLCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除引用已删除分区的内核选项:
grubby --update-kernel=ALL --remove-args="option"
# grubby --update-kernel=ALL --remove-args="option"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
要在早期引导系统中注册更改,请重建
initramfs文件系统:dracut --force --verbose
# dracut --force --verboseCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 28 章 XFS 入门 复制链接链接已复制到粘贴板!
这是如何创建和维护 XFS 文件系统的概述。
28.1. XFS 文件系统 复制链接链接已复制到粘贴板!
XFS 是一个高度可扩展、高性能、健壮且成熟的 64 位日志文件系统,其支持单个主机上非常大的文件和文件系统。它是 Red Hat Enterprise Linux 8 中的默认文件系统。XFS 最初于 1990 年代由 SGI 早期开发,并在非常大型的服务器和存储阵列中运行有很长的历史记录。
XFS 的功能包括:
- 可靠性
- 元数据日志,其确保系统崩溃后文件系统的完整性,方法是保留系统重启和重新挂载文件系统时可以重新执行的文件系统操作的记录,
- 广泛的运行时元数据一致性检查
- 可扩展且快速修复工具
- 配额日志。这可避免在崩溃后进行冗长的配额一致性检查。
- 可伸缩性和性能
- 支持最多 1024 TiB 的文件系统大小
- 支持大量并发操作的能力
- B-tree 索引,用于空闲空间的可扩展性管理
- 复杂的元数据读头算法
- 优化流视频工作负载
- 分配方案
- 基于扩展数据块的分配
- 条带化分配策略
- 延迟分配
- 空间预分配
- 动态分配的 inode
- 其他功能
- 基于 Reflink 的文件副本
- 严格集成备份和恢复工具
- 在线清理
- 在线文件系统增大
- 全面的诊断功能
-
扩展属性(
xattr)。这允许系统能够按文件关联多个额外的名称/值对。 - 项目或目录配额。这允许对目录树的配额限制。
- 小于秒的时间戳
性能特性
XFS 在具有企业工作负载的大型系统上具有高性能。大型系统是一个有相对较多的 CPU 、多个 HBA 和连接外部磁盘阵列的系统。XFS 在具有多线程、并行 I/O 工作负载的较小系统上也表现良好。
对于单线程、元数据密集型工作负载,XFS 的性能相对较低:例如,在单个线程中创建或删除大量小文件的工作负载。
28.2. 和 ext4 和 XFS 一起使用的工具比较 复制链接链接已复制到粘贴板!
这部分比较用于完成 ext4 和 XFS 文件系统中常用任务的工具。
| 任务 | ext4 | XFS |
|---|---|---|
| 创建文件系统 |
|
|
| 文件系统检查 |
|
|
| 重新定义文件系统大小 |
|
|
| 保存文件系统的镜像 |
|
|
| 标签或者调整文件系统 |
|
|
| 备份文件系统 |
|
|
| 配额管理 |
|
|
| 文件映射 |
|
|
第 29 章 挂载文件系统 复制链接链接已复制到粘贴板!
作为系统管理员,您可以在系统上挂载文件系统以访问其上的数据。
29.1. Linux 挂载机制 复制链接链接已复制到粘贴板!
以下是在 Linux 中挂载文件系统的基本概念。
在 Linux、UNIX 和类似的操作系统中,不同分区和可移动设备(例如,CD、DVD 或者 USB 闪存)上的文件系统可以附加到目录树中的某个点(挂载点),然后再次分离。虽然文件系统挂载在目录上,但无法访问该目录的原始内容。
请注意,Linux 不会阻止您将文件系统挂载到已附加了文件系统的目录。
挂载时,您可以通过以下方法识别设备:
-
通用唯一标识符(UUID):例如,
UUID=34795a28-ca6d-4fd8-a347-73671d0c19cb -
卷标签:例如,
LABEL=home -
到非持久性块设备的完整路径:例如,
/dev/sda3
当您使用 mount 命令挂载文件系统时,如果没有提供所有必需的信息,即设备名称、目标目录或文件系统类型,mount 工具会读取 /etc/fstab 文件的内容,以检查其中是否列出了给定的文件系统。/etc/fstab 文件包含设备名称列表、所选文件系统要挂载的目录,以及文件系统类型和挂载选项。因此,当挂载在 /etc/fstab 中指定的文件系统时,以下命令语法就足够了:
使用挂载点挂载:
mount directory
# mount directoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用块设备挂载:
mount device
# mount deviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
29.2. 列出当前挂载的文件系统 复制链接链接已复制到粘贴板!
使用 findmnt 工具列出命令行中的所有当前挂载的文件系统。
流程
要列出所有挂载的文件系统,请使用
findmnt工具:findmnt
$ findmntCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要将列出的文件系统限制为特定的文件系统类型,请添加
--types选项:findmnt --types fs-type
$ findmnt --types fs-typeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
例 29.1. 只列出 XFS 文件系统
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
29.3. 使用 mount 挂载文件系统 复制链接链接已复制到粘贴板!
使用 mount 工具挂载文件系统。
先决条件
验证您选择的挂载点上没有挂载文件系统:
findmnt mount-point
$ findmnt mount-pointCopy to Clipboard Copied! Toggle word wrap Toggle overflow
流程
要附加某个文件系统,请使用
mount工具:mount device mount-point
# mount device mount-pointCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例 29.2. 挂载 XFS 文件系统
例如:要挂载由 UUID 识别的本地 XFS 文件系统:
mount UUID=ea74bbec-536d-490c-b8d9-5b40bbd7545b /mnt/data
# mount UUID=ea74bbec-536d-490c-b8d9-5b40bbd7545b /mnt/dataCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果
mount无法自动识别文件系统类型,请使用--types选项来指定:mount --types type device mount-point
# mount --types type device mount-pointCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例 29.3. 挂载 NFS 文件系统
例如:要挂载远程 NFS 文件系统:
mount --types nfs4 host:/remote-export /mnt/nfs
# mount --types nfs4 host:/remote-export /mnt/nfsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
29.4. 移动挂载点 复制链接链接已复制到粘贴板!
使用 mount 实用程序将挂载的文件系统的挂载点更改为不同的目录。
流程
要更改挂载文件系统的目录:
mount --move old-directory new-directory
# mount --move old-directory new-directoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例 29.4. 移动本地文件系统
例如,将挂载在
/mnt/userdirs/目录的文件系统移动到/home/挂载点:mount --move /mnt/userdirs /home
# mount --move /mnt/userdirs /homeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证文件系统是否已如预期移动:
findmnt ls old-directory ls new-directory
$ findmnt $ ls old-directory $ ls new-directoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow
29.5. 使用 umount 卸载文件系统 复制链接链接已复制到粘贴板!
使用 umount 实用程序卸载文件系统。
流程
使用以下命令之一卸载文件系统:
通过挂载点:
umount mount-point
# umount mount-pointCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过设备:
umount device
# umount deviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
如果命令失败并显示类似如下的错误,这意味着文件系统正在使用,因为进程正在使用其上的资源:
umount: /run/media/user/FlashDrive: target is busy.
umount: /run/media/user/FlashDrive: target is busy.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果文件系统正在使用,请使用
fuser工具来确定哪个进程正在访问它。例如:fuser --mount /run/media/user/FlashDrive /run/media/user/FlashDrive: 18351
$ fuser --mount /run/media/user/FlashDrive /run/media/user/FlashDrive: 18351Copy to Clipboard Copied! Toggle word wrap Toggle overflow 之后,停止使用文件系统的进程,并尝试再次卸载它。
29.6. 在 web 控制台中挂载和卸载文件系统 复制链接链接已复制到粘贴板!
为了能够在 RHEL 系统中使用分区,您需要在分区中作为一个设备挂载文件系统。
您还可以卸载文件系统,RHEL 系统将会停止使用它。卸载文件系统可让您删除、删除或重新格式化设备。
先决条件
-
cockpit-storaged软件包已安装在您的系统上。
- 已安装 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
- 如果要卸载文件系统,请确保系统没有使用存储在分区中的任何文件、服务或应用程序。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 登录到 web 控制台。
- 点 Storage 选项卡。
- 在 Storage 表中,选择您要从中删除分区的卷。
- 在 GPT partitions 部分中,点击您要挂载或卸载其文件系统的分区旁边的菜单按钮 。
- 点 或 。
29.7. 常用挂载选项 复制链接链接已复制到粘贴板!
下表列出了 mount 工具的最常见选项。您可以使用以下语法应用这些挂载选项:
mount --options option1,option2,option3 device mount-point
# mount --options option1,option2,option3 device mount-point
| 选项 | 描述 |
|---|---|
|
| 对文件系统启用异步输入和输出操作。 |
|
|
使用 |
|
|
为 |
|
| 允许在特定文件系统中执行二进制文件。 |
|
| 将镜像挂载为 loop 设备。 |
|
|
默认行为禁用使用 |
|
| 不允许在特定文件系统中执行二进制文件。 |
|
| 不允许普通用户(即 root 用户)挂载和卸载文件系统。 |
|
| 如果已经挂载文件系统,则会重新挂载文件系统。 |
|
| 仅挂载文件系统以读取。 |
|
| 挂载文件系统以进行读和写操作。 |
|
| 允许普通用户(即 root 用户)挂载和卸载该文件系统。 |
第 30 章 在多个挂载点共享挂载 复制链接链接已复制到粘贴板!
作为系统管理员,您可以重复挂载点以便从多个目录中访问文件系统。
30.2. 创建私有挂载点副本 复制链接链接已复制到粘贴板!
将挂载点复制为专用挂载。您稍后挂载到复制或原始挂载点下的文件系统不会反映在另一个文件系统中。
流程
从原始挂载点创建虚拟文件系统(VFS)节点:
mount --bind original-dir original-dir
# mount --bind original-dir original-dirCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将原始挂载点标记为私有:
mount --make-private original-dir
# mount --make-private original-dirCopy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,要更改所选挂载点以及其下的所有挂载点的挂载类型,请使用
--make-rprivate选项,而不是--make-private选项。创建副本:
mount --bind original-dir duplicate-dir
# mount --bind original-dir duplicate-dirCopy to Clipboard Copied! Toggle word wrap Toggle overflow
例 30.1. 将 /media 复制到 /mnt 作为专用挂载点
从
/media目录创建 VFS 节点:mount --bind /media /media
# mount --bind /media /mediaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
/media目录标记为私有:mount --make-private /media
# mount --make-private /mediaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
/mnt中创建副本:mount --bind /media /mnt
# mount --bind /media /mntCopy to Clipboard Copied! Toggle word wrap Toggle overflow 现在可以验证
/media和/mnt共享内容,但/media中的挂载内容没有出现在/mnt中。例如,如果 CD-ROM 驱动器包含非空介质,并且/media/cdrom/目录存在,请使用:mount /dev/cdrom /media/cdrom ls /media/cdrom EFI GPL isolinux LiveOS ls /mnt/cdrom #
# mount /dev/cdrom /media/cdrom # ls /media/cdrom EFI GPL isolinux LiveOS # ls /mnt/cdrom #Copy to Clipboard Copied! Toggle word wrap Toggle overflow 还可以验证
/mnt目录中挂载的文件系统没有反映在/media中。例如,如果插入了使用/dev/sdc1设备的非空 USB 闪存驱动器,并且/mnt/flashdisk/目录存在,请使用:mount /dev/sdc1 /mnt/flashdisk ls /media/flashdisk ls /mnt/flashdisk en-US publican.cfg
# mount /dev/sdc1 /mnt/flashdisk # ls /media/flashdisk # ls /mnt/flashdisk en-US publican.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow
30.4. 创建从挂载点副本 复制链接链接已复制到粘贴板!
将挂载点复制为 slave 挂载类型。您稍后挂载在原始挂载点下的文件系统将反映在副本中,而不是反过来。
流程
从原始挂载点创建虚拟文件系统(VFS)节点:
mount --bind original-dir original-dir
# mount --bind original-dir original-dirCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将原始挂载点标记为共享:
mount --make-shared original-dir
# mount --make-shared original-dirCopy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,要更改所选挂载点和其下的所有挂载点的挂载类型,请使用
--make-rshared选项,而不是--make-shared。创建副本,并将其标记为
slave类型:mount --bind original-dir duplicate-dir mount --make-slave duplicate-dir
# mount --bind original-dir duplicate-dir # mount --make-slave duplicate-dirCopy to Clipboard Copied! Toggle word wrap Toggle overflow
例 30.3. 将 /media 复制到 /mnt 作为从挂载点
这个示例演示了如何使 /media 目录的内容也出现在 /mnt 中,但 /mnt 目录中的任何挂载都不会反映在 /media 中。
从
/media目录创建 VFS 节点:mount --bind /media /media
# mount --bind /media /mediaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
/media目录标记为共享:mount --make-shared /media
# mount --make-shared /mediaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
/mnt中创建副本,并将其标记为slave:mount --bind /media /mnt mount --make-slave /mnt
# mount --bind /media /mnt # mount --make-slave /mntCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证
/media中的挂载是否也出现在/mnt中。例如,如果 CD-ROM 驱动器包含非空介质,并且/media/cdrom/目录存在,请使用:mount /dev/cdrom /media/cdrom ls /media/cdrom EFI GPL isolinux LiveOS ls /mnt/cdrom EFI GPL isolinux LiveOS
# mount /dev/cdrom /media/cdrom # ls /media/cdrom EFI GPL isolinux LiveOS # ls /mnt/cdrom EFI GPL isolinux LiveOSCopy to Clipboard Copied! Toggle word wrap Toggle overflow 还要验证
/mnt目录中挂载的文件系统是否没有反映在/media中。例如,如果插入了使用/dev/sdc1设备的非空 USB 闪存驱动器,并且/mnt/flashdisk/目录存在,请使用:mount /dev/sdc1 /mnt/flashdisk ls /media/flashdisk ls /mnt/flashdisk en-US publican.cfg
# mount /dev/sdc1 /mnt/flashdisk # ls /media/flashdisk # ls /mnt/flashdisk en-US publican.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow
30.5. 防止挂载点重复 复制链接链接已复制到粘贴板!
将挂载点标记为 unbindable,以便无法在另一个挂载点中复制挂载点。
流程
要将挂载点的类型改为 unbindable 挂载,请使用:
mount --bind mount-point mount-point mount --make-unbindable mount-point
# mount --bind mount-point mount-point # mount --make-unbindable mount-pointCopy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,要更改所选挂载点和其下的所有挂载点的挂载类型,请使用
--make-runbindable选项,而不是--make-unbindable选项。重复此挂载的任何后续尝试都会失败,并显示以下错误:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
例 30.4. 防止 /media 被复制
要防止
/media目录被共享,请使用:mount --bind /media /media mount --make-unbindable /media
# mount --bind /media /media # mount --make-unbindable /mediaCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 31 章 永久挂载文件系统 复制链接链接已复制到粘贴板!
作为系统管理员,您可以永久地挂载文件系统以配置不可移动的存储。
31.1. /etc/fstab 文件 复制链接链接已复制到粘贴板!
使用 /etc/fstab 配置文件控制文件系统永久挂载点。/etc/fstab 文件中的每一行定义了文件系统的挂载点。
它包括六个字段,用空格分开:
-
由持久属性标识的块设备或
/dev目录中的路径。 - 挂载该设备的目录。
- 该设备的文件系统。
-
文件系统的挂载选项,其中包括在引导时使用默认选项挂载文件系统的默认选项。
mount option 字段还识别x-。systemd. 选项格式的 systemd 挂载单元选项 -
dump工具的备份选项。 -
fsck工具的检查顺序。
systemd-fstab-generator 将 /etc/fstab 文件中的条目动态转换为 systemd-mount 单元。systemd 在手动激活过程中从 /etc/fstab 自动挂载 LVM 卷,除非 systemd-mount 单元已被屏蔽。
例 31.1. /etc/fstab 中的 /boot 文件系统
| 块设备 | 挂载点 | File system | 选项 | Backup | 检查 |
|---|---|---|---|---|---|
|
|
|
|
|
|
|
systemd 服务从 /etc/fstab 中的条目自动生成挂载单元。
31.2. 在 /etc/fstab 中添加文件系统 复制链接链接已复制到粘贴板!
在 /etc/fstab 配置文件中为文件系统配置持久挂载点。
流程
找到文件系统的 UUID 属性:
lsblk --fs storage-device
$ lsblk --fs storage-deviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
例 31.2. 查看分区的 UUID
lsblk --fs /dev/sda1 NAME FSTYPE LABEL UUID MOUNTPOINT sda1 xfs Boot ea74bbec-536d-490c-b8d9-5b40bbd7545b /boot
$ lsblk --fs /dev/sda1 NAME FSTYPE LABEL UUID MOUNTPOINT sda1 xfs Boot ea74bbec-536d-490c-b8d9-5b40bbd7545b /bootCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果挂载点目录不存在,请创建它:
mkdir --parents mount-point
# mkdir --parents mount-pointCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以 root 用户身份,编辑
/etc/fstab文件,并为文件系统添加一行,由 UUID 标识。例如:
例 31.3. /etc/fstab 中的 /boot 挂载点
UUID=ea74bbec-536d-490c-b8d9-5b40bbd7545b /boot xfs defaults 0 0
UUID=ea74bbec-536d-490c-b8d9-5b40bbd7545b /boot xfs defaults 0 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新生成挂载单元以便您的系统注册新配置:
systemctl daemon-reload
# systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 尝试挂载文件系统来验证配置是否正常工作:
mount mount-point
# mount mount-pointCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 32 章 根据需要挂载文件系统 复制链接链接已复制到粘贴板!
作为系统管理员,您可以将 NFS 等文件系统配置为按需自动挂载。
32.1. autofs 服务 复制链接链接已复制到粘贴板!
autofs 服务可以自动挂载和卸载文件系统(按需),从而节省了系统资源。它可用于挂载文件系统,如 NFS、AFS、SMBFS、CIFS、CIFS 和本地文件系统。
使用 /etc/fstab 配置进行永久挂载的一个缺点是,无论用户访问挂载的文件系统的频率有多低,系统都必须投入资源来保持装载的文件系统。例如,当系统同时维护多个系统的 NFS 挂载时,这可能会影响系统性能。
/etc/fstab 的替代方法是使用基于内核的 autofs 服务。它由以下组件组成:
- 实施文件系统的内核模块,以及
- 执行所有其他功能的用户空间服务。
32.2. autofs 配置文件 复制链接链接已复制到粘贴板!
本节描述了 autofs 服务所使用的配置文件的用法和语法。
主映射文件
autofs 服务使用 /etc/auto.master (主映射)作为其默认的主配置文件。这可以通过使用 /etc/autofs.conf 配置文件中的 autofs 配置以及名称服务开关(NSS)机制来将其更改为使用其他受支持的网络源和名称。
所有 on-demand 挂载点都必须在主映射中配置。挂载点、主机名、导出的目录和选项都可以在一组文件(或其他支持的网络源)中指定,而不必为每个主机手动配置它们。
主映射文件列出了 autofs 控制的挂载点,以及它们相应的配置文件或网络来源(称为自动挂载映射)。master 映射的格式如下:
mount-point map-name options
mount-point map-name options
使用这种格式的变量有:
- mount-point
-
autofs挂载点;例如,/mnt/data。 - map-file
- 映射源文件,其中包含挂载点列表以及应该挂载这些挂载点的文件系统的位置。
- options
- 如果提供了这个选项,则它们适用于给定映射中的所有条目(如果它们本身没有指定选项的话)。
例 32.1. /etc/auto.master 文件
以下是 /etc/auto.master 文件中的一个示例行:
/mnt/data /etc/auto.data
/mnt/data /etc/auto.data
映射文件
映射文件配置单个 on-demand 挂载点的属性。
如果目录不存在,自动挂载程序会创建它们。如果在自动挂载程序启动之前目录已存在,则自动挂载程序在退出时不会删除它们。如果指定了超时,则如果在超时时间内没有访问该目录,则目录会被自动卸载。
映射的一般格式与主映射类似。但是,options 字段会出现在挂载点和位置之间,而不是像 master 映射那样在条目的末尾:
mount-point options location
mount-point options location
使用这种格式的变量有:
- mount-point
-
这指的是
autofs挂载点。这可以是间接挂载的单个目录名称,也可以是直接挂载的挂载点的完整路径。每个直接和间接映射条目键(挂载点)后面都跟着一个以空格分隔的偏移目录列表(每个子目录名称都以/开头),这就是所谓的多挂载条目。 - options
-
在提供这个选项时,这些选项将附加到主映射条目选项(如果有的话),或者如果配置条目
append_options设为no,则使用这些选项代替主映射选项。 - location
-
这指的是文件系统的位置,如本地文件系统路径(对于以
/开头的映射名称,前面带有 Sun 映射格式转义字符:)、NFS 文件系统或其他有效的文件系统位置。
例 32.2. 映射文件
以下是映射文件(例如 /etc/auto.misc )中的一个示例:
payroll -fstype=nfs4 personnel:/exports/payroll sales -fstype=xfs :/dev/hda4
payroll -fstype=nfs4 personnel:/exports/payroll
sales -fstype=xfs :/dev/hda4
映射文件中的第一列指示 autofs 挂载点:来自名为 personnel 的服务器的 sales 和 payroll。第二列指示 autofs 挂载的选项。第三列显示挂载源。
根据给定的配置,autofs 挂载点将是 /home/payroll 和 /home/sales。通常省略 -fstype= 选项,如果文件系统是 NFS,则不需要该选项,如果系统默认是 NFS 挂载的 NFSv4,则包括 NFSv4 的挂载。
使用给定配置时,如果进程需要访问 autofs 卸载的目录,如 /home/payroll/2006/July.sxc,则 autofs 服务会自动挂载该目录。
amd 映射格式
autofs 服务也识别 amd 格式的映射配置。如果要重复使用为 am-utils 服务编写的现有自动挂载程序配置,这将非常有用,该服务已从 Red Hat Enterprise Linux 中删除。
但是,红帽建议使用前面章节中描述的更简单的 autofs 格式。
32.3. 配置 autofs 挂载点 复制链接链接已复制到粘贴板!
使用 autofs 服务配置按需挂载点。
先决条件
安装
autofs软件包:yum install autofs
# yum install autofsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启动并启用
autofs服务:systemctl enable --now autofs
# systemctl enable --now autofsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
流程
-
为位于
/etc/auto.identifier的按需挂载点创建一个映射文件。使用标识挂载点的名称替换 identifier。 - 在映射文件中,输入挂载点、选项和位置字段,如 autofs 配置文件部分中所述。
- 在主映射文件中注册映射文件,如 autofs 配置文件 部分中所述。
允许服务重新读取配置,以便它可以管理新配置的
autofs挂载:systemctl reload autofs.service
# systemctl reload autofs.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 尝试访问 on-demand 目录中的内容:
ls automounted-directory
# ls automounted-directoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow
32.4. 使用 autofs 服务自动挂载 NFS 服务器用户主目录 复制链接链接已复制到粘贴板!
配置 autofs 服务,以自动挂载用户主目录。
先决条件
- 已安装 autofs 软件包。
- autofs 服务已启用并正在运行。
流程
通过在需要挂载用户主目录的服务器上编辑
/etc/auto.master文件,指定映射文件的挂载点和位置。要做到这一点,请在/etc/auto.master文件中添加以下行:/home /etc/auto.home
/home /etc/auto.homeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在需要挂载用户主目录的服务器中创建名为
/etc/auto.home的映射文件,并使用以下参数编辑该文件:* -fstype=nfs,rw,sync host.example.com:/home/&
* -fstype=nfs,rw,sync host.example.com:/home/&Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以跳过
fstype参数,因为它默认为nfs。如需更多信息,请参阅您系统中的autofs (5)手册页。重新载入
autofs服务:systemctl reload autofs
# systemctl reload autofsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
32.5. 覆盖或添加 autofs 站点配置文件 复制链接链接已复制到粘贴板!
有时覆盖客户端系统上特定挂载点的站点默认值会很有用。
例 32.3. 初始条件
例如,请考虑以下情况:
自动挂载程序映射存储在 NIS 中,
/etc/nsswitch.conf文件具有以下指令:automount: files nis
automount: files nisCopy to Clipboard Copied! Toggle word wrap Toggle overflow auto.master文件包含:+auto.master
+auto.masterCopy to Clipboard Copied! Toggle word wrap Toggle overflow NIS
auto.master映射文件包含:/home auto.home
/home auto.homeCopy to Clipboard Copied! Toggle word wrap Toggle overflow NIS
auto.home映射包含:beth fileserver.example.com:/export/home/beth joe fileserver.example.com:/export/home/joe * fileserver.example.com:/export/home/&
beth fileserver.example.com:/export/home/beth joe fileserver.example.com:/export/home/joe * fileserver.example.com:/export/home/&Copy to Clipboard Copied! Toggle word wrap Toggle overflow autofs配置选项BROWSE_MODE设为yes:BROWSE_MODE="yes"
BROWSE_MODE="yes"Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
文件映射
/etc/auto.home不存在。
流程
这部分描述了从不同服务器挂载主目录的示例,并使用所选条目增强 auto.home。
例 32.4. 从不同服务器挂载主目录
根据上述条件,假设客户端系统需要覆盖 NIS 映射 auto.home ,并从其他服务器挂载主目录。
在这种情况下,客户端需要使用以下
/etc/auto.master映射:/home /etc/auto.home +auto.master
/home /etc/auto.home +auto.masterCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/auto.home映射包含条目:* host.example.com:/export/home/&
* host.example.com:/export/home/&Copy to Clipboard Copied! Toggle word wrap Toggle overflow
由于自动挂载程序仅处理第一次出现的挂载点,即包含 /etc/auto.home 内容的 /home 目录,而不是 NIS auto.home 映射。
例 32.5. 仅使用所选条目增强 auto.home
或者,使用几个条目来增加站点范围的 auto.home 映射:
创建一个
/etc/auto.home文件映射,并在其中放置新条目。在结尾处,包含 NISauto.home映射。然后/etc/auto.home文件映射类似:mydir someserver:/export/mydir +auto.home
mydir someserver:/export/mydir +auto.homeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 有了这些 NIS
auto.home映射条件,列出/home目录输出的内容:ls /home beth joe mydir
$ ls /home beth joe mydirCopy to Clipboard Copied! Toggle word wrap Toggle overflow
最后一个示例按预期工作,因为 autofs 不包含与正在读取的文件映射同名的文件映射的内容。因此,autofs 转到 nsswitch 配置中的下一个映射源。
32.6. 使用 LDAP 存储自动挂载器映射 复制链接链接已复制到粘贴板!
配置 autofs 以将自动挂载程序映射存储在 LDAP 配置中,而不是存储在 autofs 映射文件中。
先决条件
-
必须在所有配置的系统中安装 LDAP 客户端程序库,以便从 LDAP 检索自动挂载程序映射。在 Red Hat Enterprise Linux 上,
openldap软件包应作为autofs软件包的依赖项自动安装。
流程
-
要配置 LDAP 访问,请修改
/etc/openldap/ldap.conf文件。确保为您的站点正确设置了BASE、URI和schema选项。 rfc2307bis草案中描述了最近建立的用于在 LDAP 中存储自动映射的模式。要使用此模式,请在/etc/autofs.conf配置文件中通过删除模式定义中的注释字符来设置它。例如:例 32.6. 设置 autofs 配置
DEFAULT_MAP_OBJECT_CLASS="automountMap" DEFAULT_ENTRY_OBJECT_CLASS="automount" DEFAULT_MAP_ATTRIBUTE="automountMapName" DEFAULT_ENTRY_ATTRIBUTE="automountKey" DEFAULT_VALUE_ATTRIBUTE="automountInformation"
DEFAULT_MAP_OBJECT_CLASS="automountMap" DEFAULT_ENTRY_OBJECT_CLASS="automount" DEFAULT_MAP_ATTRIBUTE="automountMapName" DEFAULT_ENTRY_ATTRIBUTE="automountKey" DEFAULT_VALUE_ATTRIBUTE="automountInformation"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确保配置中所有其他模式条目都被注释了。
rfc2307bis模式的automountKey属性替换rfc2307模式的cn属性。以下是 LDAP 数据交换格式(LDIF)配置的一个示例:例 32.7. LDIF 配置
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
32.7. 使用 systemd.automount 在 /etc/fstab 按需挂载文件系统 复制链接链接已复制到粘贴板!
当在 /etc/fstab 中定义挂载点时,请使用自动挂载 systemd 单元根据需要挂载文件系统。您必须为每个挂载添加自动挂载单元并启用它。
流程
添加所需的 fstab 条目,如 永久挂载文件系统 中所述。例如:
/dev/disk/by-id/da875760-edb9-4b82-99dc-5f4b1ff2e5f4 /mount/point xfs defaults 0 0
/dev/disk/by-id/da875760-edb9-4b82-99dc-5f4b1ff2e5f4 /mount/point xfs defaults 0 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
x-systemd.automount添加到上一步中创建的条目的 options 字段中。 加载新创建的单元,以便您的系统注册新配置:
systemctl daemon-reload
# systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启动自动挂载单元:
systemctl start mount-point.automount
# systemctl start mount-point.automountCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查
mount-point.automount是否正在运行:systemctl status mount-point.automount
# systemctl status mount-point.automountCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查自动挂载的目录是否有所需的内容:
ls /mount/point
# ls /mount/pointCopy to Clipboard Copied! Toggle word wrap Toggle overflow
32.8. 使用 systemd.automount 通过挂载单元根据需要挂载文件系统 复制链接链接已复制到粘贴板!
当挂载点由挂载单元定义时,请使用自动挂载 systemd 单元来按需挂载文件系统。您必须为每个挂载添加自动挂载单元并启用它。
流程
创建挂载单元。例如:
mount-point.mount [Mount] What=/dev/disk/by-uuid/f5755511-a714-44c1-a123-cfde0e4ac688 Where=/mount/point Type=xfs
mount-point.mount [Mount] What=/dev/disk/by-uuid/f5755511-a714-44c1-a123-cfde0e4ac688 Where=/mount/point Type=xfsCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
创建一个名称与挂载单元相同的单元文件,但带有
.automount扩展。 打开文件并创建
[Automount]部分。将Where=选项设置为挂载路径:[Automount] Where=/mount/point [Install] WantedBy=multi-user.target
[Automount] Where=/mount/point [Install] WantedBy=multi-user.targetCopy to Clipboard Copied! Toggle word wrap Toggle overflow 加载新创建的单元,以便您的系统注册新配置:
systemctl daemon-reload
# systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启用并启动自动挂载单元:
systemctl enable --now mount-point.automount
# systemctl enable --now mount-point.automountCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查
mount-point.automount是否正在运行:systemctl status mount-point.automount
# systemctl status mount-point.automountCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查自动挂载的目录是否有所需的内容:
ls /mount/point
# ls /mount/pointCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 33 章 使用 IdM 中的 SSSD 组件来缓存 autofs 映射 复制链接链接已复制到粘贴板!
系统安全服务守护进程(SSSD)是一种系统服务,来访问远程服务目录和身份验证机制。当网络连接较慢时,数据缓存非常有用。要将 SSSD 服务配置为缓存 autofs 映射,请按照本节中的以下步骤操作。
33.1. 手动配置 autofs ,来将 IdM 服务器用作 LDAP 服务器 复制链接链接已复制到粘贴板!
配置 autofs,以将 IdM 服务器用作 LDAP 服务器。
流程
编辑
/etc/autofs.conf文件,来指定autofs搜索的模式属性:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意用户可以在
/etc/autofs.conf文件中以小写和大写形式写入属性。可选:指定 LDAP 配置。有两种方法可以做到这一点:最简单的方法是让自动挂载服务自行发现 LDAP 服务器和位置:
ldap_uri = "ldap:///dc=example,dc=com"
ldap_uri = "ldap:///dc=example,dc=com"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个选项要求 DNS 包含可发现服务器的 SRV 记录。
或者,明确设置要使用的 LDAP 服务器,以及用于 LDAP 搜索的基本 DN:
ldap_uri = "ldap://ipa.example.com" search_base = "cn=location,cn=automount,dc=example,dc=com"
ldap_uri = "ldap://ipa.example.com" search_base = "cn=location,cn=automount,dc=example,dc=com"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑
/etc/autofs_ldap_auth.conf文件,以便 autofs 允许客户端通过 IdM LDAP 服务器进行身份验证。-
将
authrequired更改为 yes。 将主体设置为 IdM LDAP 服务器( host/FQDN@REALM )的 Kerberos 主机主体。主体名称用于连接 IdM 目录,来作为 GSS 客户端身份验证的一部分。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关主机主体的更多信息,请参阅在 在 IdM 中使用规范化的 DNS 主机名。
如有必要,请运行
klist -k来获取确切的主机主体信息。
-
将
33.2. 配置 SSSD 来缓存 autofs 映射 复制链接链接已复制到粘贴板!
SSSD 服务可用于缓存存储在 IdM 服务器上的 autofs 映射,而无需配置 autofs 以使用 IdM 服务器。
先决条件
-
sssd软件包已安装。
流程
打开 SSSD 配置文件:
vim /etc/sssd/sssd.conf
# vim /etc/sssd/sssd.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
autofs服务添加到由 SSSD 处理的服务列表中。[sssd] domains = ldap services = nss,pam,autofs
[sssd] domains = ldap services = nss,pam,autofsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个新的
[autofs]部分。您可以将此留空,因为autofs服务的默认设置适用于大多数基础架构。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如需更多信息,请参阅系统中的
sssd.conf手册页。可选:为
autofs条目设置搜索基础。默认情况下,这是 LDAP 搜索库,但可以在ldap_autofs_search_base参数中指定子树。[domain/EXAMPLE] ldap_search_base = "dc=example,dc=com" ldap_autofs_search_base = "ou=automount,dc=example,dc=com"
[domain/EXAMPLE] ldap_search_base = "dc=example,dc=com" ldap_autofs_search_base = "ou=automount,dc=example,dc=com"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 SSSD 服务:
systemctl restart sssd.service
# systemctl restart sssd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查
/etc/nsswitch.conf文件,以便 SSSD 被列为自动挂载配置的源:automount: sss files
automount: sss filesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
autofs服务:systemctl restart autofs.service
# systemctl restart autofs.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过列出用户的
/home目录来测试配置,假设/home有一个主映射条目:ls /home/userName
# ls /home/userNameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果这没有挂载远程文件系统,请检查
/var/log/messages文件是否有错误。如有必要,通过将logging参数设为debug来提高/etc/sysconfig/autofs文件的 debug 级别。
第 34 章 为 root 文件系统设置只读权限 复制链接链接已复制到粘贴板!
有时,您需要使用只读权限挂载 root 文件系统(/)。示例用例包括在系统意外断电后增强安全性或确保数据完整性。
34.1. 始终保留写入权限的文件和目录 复制链接链接已复制到粘贴板!
要使系统正常工作,一些文件和目录需要保留写权限。当 root 文件系统以只读模式挂载时,这些文件将使用 tmpfs 临时文件系统挂载到 RAM 中。
这些文件和目录的默认集合是从 /etc/rwtab 文件中读取的。请注意,readonly-root 需要在系统中存在这个文件。
/etc/rwtab 文件中的条目遵循以下格式:
copy-method path
copy-method path
在这个语法中:
- 用指定如何将文件或者目录复制到 tmpfs 的关键字之一替换 copy-method。
- 使用到文件或目录的路径替换 path。
/etc/rwtab 文件可识别将文件或目录复制到 tmpfs 的以下方法:
empty一个空路径被复制到
tmpfs。例如:empty /tmp
empty /tmpCopy to Clipboard Copied! Toggle word wrap Toggle overflow dirs目录树被空复制到
tmpfs。例如:dirs /var/run
dirs /var/runCopy to Clipboard Copied! Toggle word wrap Toggle overflow files将文件或目录树被完整地复制到
tmpfs。例如:files /etc/resolv.conf
files /etc/resolv.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在向 /etc/rwtab.d/ 添加自定义路径时,也适用相同的格式。
34.2. 将 root 文件系统配置为在引导时使用只读权限挂载 复制链接链接已复制到粘贴板!
使用这个流程时,根文件系统将以只读方式安装在所有后续引导上。
流程
在
/etc/sysconfig/readonly-root文件中,将READONLY选项设置为yes,以以只读方式挂载文件系统:READONLY=yes
READONLY=yesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 /
etc/fstab文件中的 root 条目(/)中添加ro选项:/dev/mapper/luks-c376919e... / xfs x-systemd.device-timeout=0,ro 1 1
/dev/mapper/luks-c376919e... / xfs x-systemd.device-timeout=0,ro 1 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启用
ro内核选项:grubby --update-kernel=ALL --args="ro"
# grubby --update-kernel=ALL --args="ro"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确定
rw内核选项已禁用:grubby --update-kernel=ALL --remove-args="rw"
# grubby --update-kernel=ALL --remove-args="rw"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您需要在
tmpfs文件系统中添加需要挂载具有写权限的文件和目录,请在/etc/rwtab.d/目录中创建一个文本文件,并将配置放在其中。例如:要将
/etc/example/file文件挂载为具有写权限,请将此行添加到/etc/rwtab.d/example文件中:files /etc/example/file
files /etc/example/fileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要对
tmpfs中的文件和目录所做的更改不会在启动后保留。- 重启系统以应用更改。
故障排除
如果您错误地将 root 文件系统挂载为具有只读权限,则可以使用以下命令再次将其重新挂载为具有读写权限:
mount -o remount,rw /
# mount -o remount,rw /Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 35 章 管理存储设备 复制链接链接已复制到粘贴板!
35.1. 设置 Stratis 文件系统 复制链接链接已复制到粘贴板!
Stratis 是 Red Hat Enterprise Linux 的本地存储管理解决方案。它着重介绍简单、易用性,并可让您访问高级存储功能。
Stratis 作为服务运行,来管理物理存储设备池,简化本地存储管理,易于使用,同时帮助您设置和管理复杂的存储配置。
Stratis 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。有关红帽技术预览功能支持范围的详情,请参考 https://access.redhat.com/support/offerings/techpreview/。
Stratis 可帮助您进行以下操作:
- 存储的初始配置
- 稍后进行修改
- 使用高级存储功能
Stratis 的核心概念是一个存储池。这个池是从一个或多个本地磁盘或分区创建的,文件系统是从池中创建的。该池启用了如下功能:
- 文件系统快照
- 精简置备
- Caching
- Encryption
35.1.1. Stratis 文件系统的组件 复制链接链接已复制到粘贴板!
在外部,Stratis 在命令行和 API 中显示以下文件系统组件:
blockdev- 块设备,如磁盘或者磁盘分区。
pool由一个或多个块设备组成。
池有固定大小,与块设备的大小相等。
池包含大多数 Stratis 层,如使用
dm-cache目标的非易失性数据缓存。Stratis 为每个池创建一个
/dev/stratis/my-pool/目录。这个目录包含了到代表池里 Stratis 文件系统的设备的链接。
filesystem每个池可以包含零个或多个文件系统。包含文件系统的池可以存储任意数量的文件。
文件系统会被精简置备,且没有固定的总大小。文件系统的实际大小随着保存着文件系统中的数据而增长。如果数据的大小接近文件系统的虚拟大小,Sratis 将自动增大精简卷和文件系统。
文件系统使用 XFS 文件系统格式化。
重要Stratis 跟踪它不知道 XFS 的文件系统的信息,并且使用 XFS 所做的更改不会在 Stratis 中自动创建更新。用户不得重新格式化或重新配置由 Stratis 管理的 XFS 文件系统。
Stratis 在
/dev/stratis/my-pool/my-fs路径创建到文件系统的链接。
Stratis 使用很多设备映射器设备,它们出现在 dmsetup 列表中和 /proc/partitions 文件中。类似地,lsblk 命令输出反映了 Stratis 的内部工作方式和层。
35.1.2. 与 Stratis 兼容的块设备 复制链接链接已复制到粘贴板!
可与 Stratis 一起使用的存储设备。
支持的设备
Stratis 池已被测试以可用于这些块设备:
- LUKS
- LVM 逻辑卷
- MD RAID
- DM Multipath
- iSCSI
- HDD 和 SSD
- NVMe 设备
不支持的设备
因为 Stratis 包含精简置备层,因此红帽不推荐将 Stratis 池放在已经精简置备的块设备中。
35.1.3. 安装 Stratis 复制链接链接已复制到粘贴板!
安装 Stratis 所需的软件包。
流程
安装提供 Stratis 服务和命令行工具的软件包:
dnf install stratisd stratis-cli
# dnf install stratisd stratis-cliCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启动
stratisd服务并启用它在引导时启动:systemctl enable --now stratisd
# systemctl enable --now stratisdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证
stratisd服务是否已启用并正在运行:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
35.1.4. 创建未加密的 Stratis 池 复制链接链接已复制到粘贴板!
您可以从一个或多个块设备创建未加密的 Stratis 池。
先决条件
-
Stratis 已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 创建 Stratis 池的块设备没有被使用、卸载,且空间中至少为 1 GB。
在 IBM Z 构架中,必须对
/dev/dasd*块设备进行分区。使用分区设备来创建 Stratis 池。有关分区 DASD 设备的详情,请参考 在 IBM Z 上配置 Linux 实例。
您只能在创建过程中加密 Stratis 池,而不稍后加密。
流程
删除您要在 Stratis 池中使用的每个块设备上存在的任何文件系统、分区表或 RAID 签名:
wipefs --all block-device
# wipefs --all block-deviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow block-device值是块设备的路径,例如/dev/sdb。在所选的块设备上创建新的未加密的 Stratis 池:
stratis pool create my-pool block-device
# stratis pool create my-pool block-deviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow block-device值是到空或者擦除的块设备的路径。您还可以使用以下命令在一行中指定多个块设备:
stratis pool create my-pool block-device-1 block-device-2
# stratis pool create my-pool block-device-1 block-device-2Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
确认创建了新的 Stratis 池:
stratis pool list
# stratis pool listCopy to Clipboard Copied! Toggle word wrap Toggle overflow
35.1.5. 使用 Web 控制台创建未加密的 Stratis 池 复制链接链接已复制到粘贴板!
您可以使用 Web 控制台从一个或多个块设备创建一个未加密的 Stratis 池。
先决条件
- 已安装 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
-
Stratis 已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 创建 Stratis 池的块设备没有被使用、卸载,且空间中至少为 1 GB。
您不能在其创建后加密一个未加密的 Stratis 池。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 Web 控制台的日志记录。
- 点 。
- 在 Storage 表中,点菜单按钮并选择 Create Stratis pool。
- 在 Name 字段中输入 Stratis 池的名称。
- 选择您要从中创建 Stratis 池的Block devices。
- 可选:如果要为池中创建的每个文件系统指定最大大小,请选择 Manage filesystem size。
- 点 。
验证
- 进到 Storage 部分,并确认您可以在 Devices 表中看到新的 Stratis 池。
35.1.6. 使用内核密钥环中的密钥创建加密的 Stratis 池 复制链接链接已复制到粘贴板!
要保护数据,您可以使用内核密钥环从一个或多个块设备创建加密的 Stratis 池。
当您以这种方式创建加密的 Stratis 池时,内核密钥环将用作主加密机制。后续系统重启此内核密钥环后,用来解锁加密的 Stratis 池。
当从一个或多个块设备创建加密的 Stratis 池时,请注意以下几点:
-
每个块设备都使用
cryptsetup库进行加密,并实施LUKS2格式。 - 每个 Stratis 池都可以有一个唯一的密钥,或者与其他池共享相同的密钥。这些密钥保存在内核密钥环中。
- 组成 Stratis 池的块设备必须全部加密或者全部未加密。不可能同时在同一个 Stratis 池中加密和未加密块设备。
- 添加到加密 Stratis 池的数据缓存中的块设备会自动加密。
先决条件
-
Stratis v2.1.0 或更高版本已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 创建 Stratis 池的块设备没有被使用、卸载,且空间中至少为 1 GB。
在 IBM Z 构架中,必须对
/dev/dasd*块设备进行分区。使用 Stratis 池中的分区。有关分区 DASD 设备的详情,请参考 在 IBM Z 上配置 Linux 实例。
流程
删除您要在 Stratis 池中使用的每个块设备上存在的任何文件系统、分区表或 RAID 签名:
wipefs --all block-device
# wipefs --all block-deviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow block-device值是块设备的路径,例如/dev/sdb。如果您还没有设置密钥,请运行以下命令,并按照提示创建用于加密的密钥集:
stratis key set --capture-key key-description
# stratis key set --capture-key key-descriptionCopy to Clipboard Copied! Toggle word wrap Toggle overflow key-description是对在内核密钥环中创建的密钥的引用。系统将提示您在命令行中输入键值。您还可以将 key 值放在文件中,并使用--keyfile-path选项而不是--capture-key选项。创建加密的 Stratis 池并指定用于加密的密钥描述:
stratis pool create --key-desc key-description my-pool block-device
# stratis pool create --key-desc key-description my-pool block-deviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow key-description- 引用您在上一步中创建的内核密钥环中存在的密钥。
my-pool- 指定新的 Stratis 池的名称。
block-device指定到空或者有线块设备的路径。
您还可以使用以下命令在一行中指定多个块设备:
stratis pool create --key-desc key-description my-pool block-device-1 block-device-2
# stratis pool create --key-desc key-description my-pool block-device-1 block-device-2Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
确认创建了新的 Stratis 池:
stratis pool list
# stratis pool listCopy to Clipboard Copied! Toggle word wrap Toggle overflow
35.1.7. 使用 Web 控制台创建加密的 Stratis 池 复制链接链接已复制到粘贴板!
要保护您的数据,您可以使用 Web 控制台从一个或多个块设备创建一个加密的 Stratis 池。
当从一个或多个块设备创建加密的 Stratis 池时,请注意以下几点:
- 每个块设备都使用 cryptsetup 库进行加密,并实施 LUKS2 格式。
- 每个 Stratis 池都可以有一个唯一的密钥,或者与其他池共享相同的密钥。这些密钥保存在内核密钥环中。
- 组成 Stratis 池的块设备必须全部加密或者全部未加密。不可能同时在同一个 Stratis 池中加密和未加密块设备。
- 添加到加密 Stratis 池的数据层中的块设备会自动加密。
先决条件
- 您已安装了 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
-
Stratis v2.1.0 或更高版本已安装,
stratisd服务正在运行。 - 创建 Stratis 池的块设备没有被使用、卸载,且空间中至少为 1 GB。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 Web 控制台的日志记录。
- 点 。
- 在 Storage 表中,点菜单按钮并选择 Create Stratis pool。
- 在 Name 字段中输入 Stratis 池的名称。
- 选择您要从中创建 Stratis 池的Block devices。
选择加密类型,您可以使用密码短语、Tang keyserver 或两者:
passphrase:
- 输入密码短语。
- 确认密码短语。
Tang keyserver :
- 输入 keyserver 地址。如需更多信息,请参阅 部署 SELinux 为 enforcing 模式的 Tang 服务器。
- 可选:如果要为池中创建的每个文件系统指定最大大小,请选择 Manage filesystem sizes 。
- 点 。
验证
- 进到 Storage 部分,并确认您可以在 Devices 表中看到新的 Stratis 池。
35.1.8. 使用 Web 控制台重命名 Stratis 池 复制链接链接已复制到粘贴板!
您可以使用 Web 控制台重命名现有的 Stratis 池。
先决条件
- 您已安装了 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
Stratis 已安装,
stratisd服务正在运行。默认情况下,web 控制台会检测并安装 Stratis。但是,要手动安装 Stratis,请参阅 安装 Stratis。
- 一个 Stratis 池已创建。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 Web 控制台的日志记录。
- 点 。
- 在 Storage 表中,点您要重命名的 Stratis 池。
- 在 Stratis pool 页面中,点 Name 字段旁边的 。
- 在 Rename Stratis pool 对话框中输入新名称。
- 点击 。
35.1.9. 在 Stratis 文件系统中设置过度置备模式 复制链接链接已复制到粘贴板!
默认情况下,每个 Stratis 池都过度置备,这意味着逻辑文件系统大小可能会超过物理分配的空间。Stratis 监控文件系统使用情况,并在需要时自动使用可用空间增加分配量。但是,如果已经分配了所有可用空间,并且池已满,则不会为文件系统分配额外的空间。
如果文件系统耗尽空间,用户可能会丢失数据。对于数据丢失的风险超过过度置备的好处的应用程序,可以禁用此功能。
Stratis 持续监控池使用情况,并使用 D-Bus API 报告值。存储管理员必须监控这些值,并根据需要将设备添加到池中,以防止它达到容量。
先决条件
- Stratis 已安装。如需更多信息,请参阅 安装 Stratis。
流程
要正确设置池,您可以有两个可能:
从一个或多个块设备创建池:
stratis pool create pool-name /dev/sdb
# stratis pool create pool-name /dev/sdbCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在现有池中设置过度置备模式:
stratis pool overprovision pool-name <yes|no>
# stratis pool overprovision pool-name <yes|no>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 如果设置为 "yes",则启用过度置备到池。这意味着池支持的 Stratis 文件系统的逻辑大小总和可能会超过可用空间量。如果池被过度置备,且所有文件系统的逻辑大小总和都超过池中可用的空间,则系统无法关闭过度置备,并返回错误。
验证
查看 Stratis 池的完整列表:
stratis pool list Name Total Physical Properties UUID Alerts pool-name 1.42 TiB / 23.96 MiB / 1.42 TiB ~Ca,~Cr,~Op cb7cb4d8-9322-4ac4-a6fd-eb7ae9e1e540
# stratis pool list Name Total Physical Properties UUID Alerts pool-name 1.42 TiB / 23.96 MiB / 1.42 TiB ~Ca,~Cr,~Op cb7cb4d8-9322-4ac4-a6fd-eb7ae9e1e540Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
检查
stratis pool list输出中是否有池 overprovisioning 模式标记。" ~ " 是 "NOT" 的数学符号,因此~Op表示不进行过度配置。 可选:检查特定池的过度置备:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
35.1.10. 将 Stratis 池绑定到 NBDE 复制链接链接已复制到粘贴板!
将加密的 Stratis 池绑定到网络绑定磁盘加密(NBDE)需要 Tang 服务器。当包含 Stratis 池的系统重启时,它与 Tang 服务器进行连接,以自动解锁加密的池,而无需提供内核密钥环描述。
将 Stratis 池绑定到补充的 Clevis 加密机制不会删除主内核密钥环加密。
先决条件
-
Stratis v2.3.0 或更高版本已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 已创建一个加密的 Stratis 池,并且您有用于加密的密钥的密钥描述。如需更多信息,请参阅 使用内核密钥环 中的 使用密钥创建加密的 Stratis 池。
- 您可以连接到 Tang 服务器。如需更多信息,请参阅 部署 SELinux 为 enforcing 模式的 Tang 服务器。
流程
将加密的 Stratis 池绑定到 NBDE:
stratis pool bind nbde --trust-url my-pool tang-server
# stratis pool bind nbde --trust-url my-pool tang-serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow my-pool- 指定加密的 Stratis 池的名称。
tang-server- 指定 Tang 服务器的 IP 地址或 URL。
35.1.11. 将 Stratis 池绑定到 TPM 复制链接链接已复制到粘贴板!
当您将加密的 Stratis 池绑定到受信任的平台模块(TPM) 2.0 时,包含池的系统会重启,并且池会自动解锁,而无需提供内核 keyring 描述。
先决条件
-
Stratis v2.3.0 或更高版本已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 已创建一个加密的 Stratis 池,并且您有用于加密的密钥的密钥描述。如需更多信息,请参阅 使用内核密钥环 中的 使用密钥创建加密的 Stratis 池。
- 您的系统支持 TPM 2.0。
流程
将加密的 Stratis 池绑定到 TPM:
stratis pool bind tpm my-pool
# stratis pool bind tpm my-poolCopy to Clipboard Copied! Toggle word wrap Toggle overflow my-pool- 指定加密的 Stratis 池的名称。
key-description- 引用内核密钥环中存在的密钥,该密钥是在您创建加密的 Stratis 池时生成的。
35.1.12. 使用内核密钥环解加密的 Stratis 池 复制链接链接已复制到粘贴板!
系统重启后,您的加密 Stratis 池或组成它的块设备可能不可见。您可以使用用来加密池的内核密钥环来解锁池。
先决条件
-
Stratis v2.1.0 已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 已创建一个加密的 Stratis 池。如需更多信息,请参阅 使用内核密钥环 中的 使用密钥创建加密的 Stratis 池。
流程
使用之前使用的相同密钥描述重新创建密钥集:
stratis key set --capture-key key-description
# stratis key set --capture-key key-descriptionCopy to Clipboard Copied! Toggle word wrap Toggle overflow key-description引用内核密钥环中存在的密钥,该密钥是在您创建加密的 Stratis 池时生成的。验证 Stratis 池是可见的:
stratis pool list
# stratis pool listCopy to Clipboard Copied! Toggle word wrap Toggle overflow
35.1.13. 解除 Stratis 池与补充加密的绑定 复制链接链接已复制到粘贴板!
当您解除加密的 Stratis 池与支持的附加加密机制的绑定时,主内核密钥环加密将保持不变。对于一开始就使用 Clevis 加密创建的池,这并不适用。
先决条件
- Stratis v2.3.0 或更高版本已安装在您的系统上。如需更多信息,请参阅 安装 Stratis。
- 已创建一个加密的 Stratis 池。如需更多信息,请参阅 使用内核密钥环 中的 使用密钥创建加密的 Stratis 池。
- 加密的 Stratis 池绑定到受支持的补充加密机制。
流程
解除加密的 Stratis 池与补充加密机制的绑定:
stratis pool unbind clevis my-pool
# stratis pool unbind clevis my-poolCopy to Clipboard Copied! Toggle word wrap Toggle overflow my-pool指定您要解绑的 Stratis 池的名称。
35.1.14. 启动和停止 Stratis 池 复制链接链接已复制到粘贴板!
您可以启动和停止 Stratis 池。这可让您选择忽略或关闭用于构建池的所有对象,如文件系统、缓存设备、精简池和加密设备。请注意,如果池主动使用任何设备或文件系统,则可能会发出警告且无法停止。
stopped 状态记录在池的元数据中。这些池不会在以下引导上启动,直到池收到 start 命令。
先决条件
-
Stratis 已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 创建未加密的或加密的 Stratis 池。如需更多信息,请参阅 创建未加密的 Stratis 池 ,或使用内核密钥环中的密钥创建加密的 Stratis 池。
流程
使用以下命令停止 Stratis 池。这会关闭存储堆栈,但保留所有元数据不变:
stratis pool stop --name pool-name
# stratis pool stop --name pool-nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令启动 Stratis 池。
--unlock-method选项指定池被加密的解锁方法:stratis pool start --unlock-method <keyring|clevis> --name pool-name
# stratis pool start --unlock-method <keyring|clevis> --name pool-nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您可以使用池名称或池 UUID 启动池。
验证
使用以下命令列出系统中的所有活跃池:
stratis pool list
# stratis pool listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令列出所有已停止的池:
stratis pool list --stopped
# stratis pool list --stoppedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令查看已停止池的详细信息。如果指定了 UUID,该命令会打印与 UUID 对应的池的详细信息:
stratis pool list --stopped --uuid UUID
# stratis pool list --stopped --uuid UUIDCopy to Clipboard Copied! Toggle word wrap Toggle overflow
35.1.15. 创建 Stratis 文件系统 复制链接链接已复制到粘贴板!
在现有 Stratis 池上创建 Stratis 文件系统。
先决条件
-
Stratis 已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 一个 Stratis 池已创建。如需更多信息,请参阅 创建未加密的 Stratis 池 或使用内核密钥环 中的密钥。
流程
在池中创建 Stratis 文件系统:
stratis filesystem create --size number-and-unit my-pool my-fs
# stratis filesystem create --size number-and-unit my-pool my-fsCopy to Clipboard Copied! Toggle word wrap Toggle overflow number-and-unit- 指定文件系统的大小。规格格式必须遵循标准大小规格格式进行输入,即 B、KiB、MiB、GiB、TiB 或 PiB。
my-pool- 指定 Stratis 池的名称。
my-fs为文件系统指定一个任意名称。
例如:
例 35.1. 创建 Stratis 文件系统
stratis filesystem create --size 10GiB pool1 filesystem1
# stratis filesystem create --size 10GiB pool1 filesystem1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
列出池中的文件系统,以检查是否已创建 Stratis 文件系统:
stratis fs list my-pool
# stratis fs list my-poolCopy to Clipboard Copied! Toggle word wrap Toggle overflow
35.1.16. 使用 Web 控制台在 Stratis 池上创建文件系统 复制链接链接已复制到粘贴板!
您可以使用 Web 控制台在现有 Stratis 池中创建一个文件系统。
先决条件
- 您已安装了 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
-
stratisd服务在运行。 - 一个 Stratis 池已创建。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 Web 控制台的日志记录。
- 点 。
- 点击您要在其上创建文件系统的 Stratis 池。
- 在 Stratis pool 页面中,滚动到 Stratis filesystems 部分,然后单击 。
- 输入文件系统的名称。
- 输入文件系统的挂载点。
- 选择 挂载选项。
- 在 At boot 下拉菜单中选择您要何时挂载文件系统。
创建文件系统:
- 如果要创建并挂载文件系统,点 。
- 如果您只想创建文件系统,请单击 。
验证
- 新文件系统在 Stratis filesystems 选项卡下的 Stratis pool 页面中可见。
35.1.17. 挂载 Stratis 文件系统 复制链接链接已复制到粘贴板!
挂载现有的 Stratis 文件系统以访问其内容。
先决条件
-
Stratis 已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 已创建一个 Stratis 文件系统。如需更多信息,请参阅创建 Stratis 文件系统。
流程
要挂载文件系统,请使用 Stratis 在
/dev/stratis/目录中维护的条目:mount /dev/stratis/my-pool/my-fs mount-point
# mount /dev/stratis/my-pool/my-fs mount-pointCopy to Clipboard Copied! Toggle word wrap Toggle overflow
现在该文件系统被挂载到 mount-point 目录中并可使用。
在停止池之前,卸载属于池的所有文件系统。如果仍然挂载了任何文件系统,则池不会停止。
您可以使用 systemd 服务管理 /etc/fstab 中的非 root 文件系统。
先决条件
-
Stratis 已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 已创建一个 Stratis 文件系统。如需更多信息,请参阅创建 Stratis 文件系统。
流程
以 root 用户身份,编辑
/etc/fstab文件并添加一行来设置非 root 文件系统:/dev/stratis/my-pool/my-fs mount-point xfs defaults,x-systemd.requires=stratis-fstab-setup@pool-uuid.service,x-systemd.after=stratis-fstab-setup@pool-uuid.service dump-value fsck_value
/dev/stratis/my-pool/my-fs mount-point xfs defaults,x-systemd.requires=stratis-fstab-setup@pool-uuid.service,x-systemd.after=stratis-fstab-setup@pool-uuid.service dump-value fsck_valueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
从加密的 Stratis 池永久挂载 Stratis 文件系统可能会导致引导过程停止,直到提供密码为止。如果池使用任何无人值守机制进行加密,例如 NBDE 或 TPM2,则 Stratis 池将自动解锁。如果没有,用户需要在控制台中输入密码。
35.2. 使用附加块设备扩展 Stratis 池 复制链接链接已复制到粘贴板!
您可以在 Stratis 池中添加附加块设备以便为 Stratis 文件系统提供更多存储容量。您可以手动或使用 Web 控制台进行此操作。
Stratis 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。有关红帽技术预览功能支持范围的详情,请参考 https://access.redhat.com/support/offerings/techpreview/。
35.2.1. 在 Stratis 池中添加块设备 复制链接链接已复制到粘贴板!
您可以在 Stratis 池中添加一个或多个块设备。
先决条件
-
Stratis 已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 创建 Stratis 池的块设备没有被使用、卸载,且空间中至少为 1 GB。
流程
要在池中添加一个或多个块设备,请使用:
stratis pool add-data my-pool device-1 device-2 device-n
# stratis pool add-data my-pool device-1 device-2 device-nCopy to Clipboard Copied! Toggle word wrap Toggle overflow
35.2.2. 使用 Web 控制台向 Stratis 池中添加块设备 复制链接链接已复制到粘贴板!
您可以使用 Web 控制台向现有 Stratis 池中添加块设备。您还可以将缓存添加为块设备。
先决条件
- 您已安装了 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
-
stratisd服务在运行。 - 一个 Stratis 池已创建。
- 创建 Stratis 池的块设备没有被使用、卸载,且空间中至少为 1 GB。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 Web 控制台的日志记录。
- 点 。
- 在 Storage 表中,点您要向其添加块设备的 Stratis 池。
- 在 Stratis 池 页面中,点 并选择 Tier where to add a block device as data 或 cache。
- 如果您要将块设备添加到使用密码短语加密的 Stratis 池中,请输入密码短语。
- 在 Block devices 下,选择要添加到池中的设备。
- 点。
35.3. 监控 Stratis 文件系统 复制链接链接已复制到粘贴板!
作为 Stratis 用户,您可以查看系统中 Stratis 文件系统的信息,以监控其状态和可用空间。
Stratis 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。有关红帽技术预览功能支持范围的详情,请参考 https://access.redhat.com/support/offerings/techpreview/。
35.3.1. 显示 Stratis 文件系统的信息 复制链接链接已复制到粘贴板!
您可以使用 stratis 工具列出 Stratis 文件系统的统计信息,如总数、使用以及可用大小或文件系统以及属于池的块设备。
XFS 文件系统的大小是它可以管理的用户数据总量。在精简配置的 Stratis 池中,Stratis 文件系统可能会显示为大于分配给它的空间的大小。XFS 文件系统的大小与这个明显大小匹配,这意味着它通常大于分配的空间。标准 Linux 实用程序(如 df )报告 XFS 文件系统的大小。这个值通常代表 XFS 文件系统所需的空间,因此由 Stratis 分配的空间。
定期监控过度置备的 Stratis 池的使用情况。如果文件系统使用量接近分配的空间,Stratis 会自动使用池中的可用空间增加分配。但是,如果已经分配了所有可用空间,并且池已满,则不会分配额外的空间,从而导致文件系统耗尽空间。这可能导致使用 Stratis 文件系统的应用程序中数据丢失的风险。
先决条件
-
Stratis 已安装,
stratisd服务正在运行。如需更多信息,请参阅安装 Stratis。
流程
要显示系统中用于 Stratis 的所有块设备的信息:
stratis blockdev Pool Name Device Node Physical Size State Tier my-pool /dev/sdb 9.10 TiB In-use Data
# stratis blockdev Pool Name Device Node Physical Size State Tier my-pool /dev/sdb 9.10 TiB In-use DataCopy to Clipboard Copied! Toggle word wrap Toggle overflow 显示系统中所有 Stratis 池的信息:
stratis pool Name Total Physical Size Total Physical Used my-pool 9.10 TiB 598 MiB
# stratis pool Name Total Physical Size Total Physical Used my-pool 9.10 TiB 598 MiBCopy to Clipboard Copied! Toggle word wrap Toggle overflow 显示系统中所有 Stratis 文件系统的信息:
stratis filesystem Pool Name Name Used Created Device my-pool my-fs 546 MiB Nov 08 2018 08:03 /dev/stratis/my-pool/my-fs
# stratis filesystem Pool Name Name Used Created Device my-pool my-fs 546 MiB Nov 08 2018 08:03 /dev/stratis/my-pool/my-fsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
35.3.2. 使用 Web 控制台查看 Stratis 池 复制链接链接已复制到粘贴板!
您可以使用 Web 控制台查看现有的 Stratis 池,以及其包含的文件系统。
先决条件
- 您已安装了 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
-
stratisd服务在运行。 - 您有一个现有的 Stratis 池。
流程
- 登录到 RHEL 8 web 控制台。
- 点 。
在 Storage 表中,点您要查看的 Stratis 池。
Stratis 池页面显示有关池以及您在池中创建的文件系统的所有信息。
35.4. 在 Stratis 文件系统中使用快照 复制链接链接已复制到粘贴板!
您可以使用 Stratis 文件系统的快照任意时间捕获文件系统状态,并在以后恢复它。
Stratis 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。有关红帽技术预览功能支持范围的详情,请参考 https://access.redhat.com/support/offerings/techpreview/。
35.4.1. Stratis 快照的特性 复制链接链接已复制到粘贴板!
在 Stratis 中,快照是作为另一个 Stratis 文件系统的副本创建的常规 Stratis 文件系统。
Stratis 中的当前快照实现的特征如下:
- 文件系统快照是另一个文件系统。
- 快照及其原始卷在生命周期中不会被链接。快照的文件系统可以比它从中创建的文件系统更长。
- 文件系统不一定被挂载来生成快照。
- 每个快照使用大约一半的实际后备存储,这是 XFS 日志所需要的。
35.4.2. 创建 Stratis 快照 复制链接链接已复制到粘贴板!
您可以创建 Stratis 文件系统作为现有 Stratis 文件系统的快照。
先决条件
-
Stratis 已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 您已创建了 Stratis 文件系统。如需更多信息,请参阅创建 Stratis 文件系统。
流程
创建 Stratis 快照:
stratis fs snapshot my-pool my-fs my-fs-snapshot
# stratis fs snapshot my-pool my-fs my-fs-snapshotCopy to Clipboard Copied! Toggle word wrap Toggle overflow
快照是第一个类 Stratis 文件系统。您可以创建多个 Stratis 快照。这包括单个原始文件系统或者另一个快照文件系统的快照。如果文件系统是快照,则其 origin 字段将在详细的文件系统列表中显示其原始文件系统的 UUID。
35.4.3. 访问 Stratis 快照的内容 复制链接链接已复制到粘贴板!
您可以挂载 Stratis 文件系统的快照,使其可以被读写操作访问。
先决条件
-
Stratis 已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 您已创建了 Stratis 快照。如需更多信息,请参阅创建 Stratis 快照。
流程
要访问快照,请将其作为常规文件系统挂载到
/dev/stratis/my-pool/目录:mount /dev/stratis/my-pool/my-fs-snapshot mount-point
# mount /dev/stratis/my-pool/my-fs-snapshot mount-pointCopy to Clipboard Copied! Toggle word wrap Toggle overflow
35.4.4. 将 Stratis 文件系统恢复到以前的快照 复制链接链接已复制到粘贴板!
您可以将 Stratis 文件系统的内容恢复到 Stratis 快照中捕获的状态。
先决条件
-
Stratis 已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 您已创建了 Stratis 快照。如需更多信息,请参阅创建 Stratis 快照。
流程
可选:备份文件系统的当前状态,以便稍后可以访问它:
stratis filesystem snapshot my-pool my-fs my-fs-backup
# stratis filesystem snapshot my-pool my-fs my-fs-backupCopy to Clipboard Copied! Toggle word wrap Toggle overflow 卸载并删除原始文件系统:
umount /dev/stratis/my-pool/my-fs stratis filesystem destroy my-pool my-fs
# umount /dev/stratis/my-pool/my-fs # stratis filesystem destroy my-pool my-fsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在原始文件系统名称下创建快照副本:
stratis filesystem snapshot my-pool my-fs-snapshot my-fs
# stratis filesystem snapshot my-pool my-fs-snapshot my-fsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 挂载快照,它现在可以和原始文件系统的名称相同:
mount /dev/stratis/my-pool/my-fs mount-point
# mount /dev/stratis/my-pool/my-fs mount-pointCopy to Clipboard Copied! Toggle word wrap Toggle overflow
名为 my-fs 的文件系统的内容与快照 my-fs-snapshot 一致。
35.4.5. 删除 Stratis 快照 复制链接链接已复制到粘贴板!
您可以从池中删除 Stratis 快照。快照中的数据会丢失。
先决条件
-
Stratis 已安装,
stratisd服务正在运行。如需更多信息,请参阅安装 Stratis。 - 您已创建了 Stratis 快照。如需更多信息,请参阅创建 Stratis 快照。
流程
卸载快照:
umount /dev/stratis/my-pool/my-fs-snapshot
# umount /dev/stratis/my-pool/my-fs-snapshotCopy to Clipboard Copied! Toggle word wrap Toggle overflow 销毁快照:
stratis filesystem destroy my-pool my-fs-snapshot
# stratis filesystem destroy my-pool my-fs-snapshotCopy to Clipboard Copied! Toggle word wrap Toggle overflow
35.5. 删除 Stratis 文件系统 复制链接链接已复制到粘贴板!
您可以删除现有 Stratis 文件系统或池。删除 Stratis 文件系统或池后,它无法被恢复。
Stratis 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。有关红帽技术预览功能支持范围的详情,请参考 https://access.redhat.com/support/offerings/techpreview/。
35.5.1. 删除 Stratis 文件系统 复制链接链接已复制到粘贴板!
您可以删除现有 Stratis 文件系统。保存的数据会丢失。
先决条件
-
Stratis 已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 您已创建了 Stratis 文件系统。如需更多信息,请参阅创建 Stratis 文件系统。
流程
卸载文件系统:
umount /dev/stratis/my-pool/my-fs
# umount /dev/stratis/my-pool/my-fsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 销毁文件系统:
stratis filesystem destroy my-pool my-fs
# stratis filesystem destroy my-pool my-fsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证文件系统不再存在:
stratis filesystem list my-pool
# stratis filesystem list my-poolCopy to Clipboard Copied! Toggle word wrap Toggle overflow
35.5.2. 使用 Web 控制台从 Stratis 池中删除文件系统 复制链接链接已复制到粘贴板!
您可以使用 Web 控制台从现有 Stratis 池中删除一个文件系统。
删除 Stratis 池文件系统会删除其包含的所有数据。
先决条件
- 已安装 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
Stratis 已安装,
stratisd服务正在运行。默认情况下,web 控制台会检测并安装 Stratis。但是,要手动安装 Stratis,请参阅 安装 Stratis。
- 您有一个现有的 Stratis 池,并在 Stratis 池中创建一个文件系统。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 Web 控制台的日志记录。
- 点 。
- 在 Storage 表中,点击您要从中删除文件系统的 Stratis 池。
- 在 Stratis 池 页面中,滚动到 Stratis 文件系统 部分,然后点击您要删除的文件系统的菜单按钮 alsa。
- 从下拉菜单中选择 。
- 在 Confirm deletion 对话框中,单击 。
35.5.3. 删除 Stratis 池 复制链接链接已复制到粘贴板!
您可以删除现有 Stratis 池。保存的数据会丢失。
先决条件
-
Stratis 已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 您已创建了 Stratis 池:
- 要创建未加密的池,请参阅 创建未加密的 Stratis 池。
- 要创建加密的池,请参阅使用 内核密钥环 中的密钥创建加密的 Stratis 池。
流程
列出池中的文件系统:
stratis filesystem list my-pool
# stratis filesystem list my-poolCopy to Clipboard Copied! Toggle word wrap Toggle overflow 卸载池中的所有文件系统:
umount /dev/stratis/my-pool/my-fs-1 \ /dev/stratis/my-pool/my-fs-2 \ /dev/stratis/my-pool/my-fs-n# umount /dev/stratis/my-pool/my-fs-1 \ /dev/stratis/my-pool/my-fs-2 \ /dev/stratis/my-pool/my-fs-nCopy to Clipboard Copied! Toggle word wrap Toggle overflow 销毁文件系统:
stratis filesystem destroy my-pool my-fs-1 my-fs-2
# stratis filesystem destroy my-pool my-fs-1 my-fs-2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 销毁池:
stratis pool destroy my-pool
# stratis pool destroy my-poolCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证池不再存在:
stratis pool list
# stratis pool listCopy to Clipboard Copied! Toggle word wrap Toggle overflow
35.5.4. 使用 Web 控制台删除 Stratis 池 复制链接链接已复制到粘贴板!
您可以使用 Web 控制台删除现有的 Stratis 池。
删除 Stratis 池会删除其包含的所有数据。
先决条件
- 已安装 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
-
stratisd服务在运行。 - 您有一个现有的 Stratis 池。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 Web 控制台的日志记录。
- 点 。
- 在 Storage 表中,点您要删除的 Stratis 池的菜单按钮。
- 从下拉菜单中选择 。
- 在 Permanently delete pool 对话框中,单击 。
35.6. swap 入门 复制链接链接已复制到粘贴板!
使用交换空间为不活跃的进程和数据提供临时存储,并防止物理内存满时内存不足。交换空间充当物理内存的扩展,并允许系统在物理内存耗尽时继续平稳运行。请注意,在依赖 swap 空间前,使用 swap 空间可能会降低系统性能,因此优化物理内存的使用可能会更优先使用。
35.6.1. swap 空间概述 复制链接链接已复制到粘贴板!
当物理内存(RAM)已满时,将使用 Linux 中的 交换空间。如果系统需要更多的内存资源并且 RAM 已满,内存中的不活动页面将移到交换空间。虽然交换空间可以帮助具有少量 RAM 的计算机,但不应将其视为更多 RAM 的替代品。
交换空间位于硬盘驱动器上,其访问时间比物理内存要慢。交换空间可以是专用的交换分区(推荐)、交换文件,或者交换分区和交换文件的组合。
过去数年,推荐的 swap 空间会随系统中的 RAM 量增加而线性增大。然而,现代系统通常包含了成百 GB 内存。因此,推荐的交换空间被视为系统内存工作负载的功能,而不是系统内存的功能。
35.6.2. 推荐的系统 swap 空间 复制链接链接已复制到粘贴板!
推荐的 swap 分区的大小取决于系统中的 RAM 量,以及是否需要足够的内存供系统休眠。推荐的 swap 分区大小在安装过程中自动设置。但是,为了允许休眠,您需要在自定义分区阶段编辑交换空间。
以下建议对于内存不足的系统(如 1 GB 或更小)特别重要。无法在这些系统上分配足够的 swap 空间可能会导致问题,如不稳定,甚至导致安装的系统无法引导。
| 系统中的 RAM 量 | 推荐的 swap 空间 | 如果允许休眠则推荐使用 swap 空间 |
|---|---|---|
| ⩽ 2 GB | RAM 量的 2 倍 | RAM 量的 3 倍 |
| > 2 GB - 8 GB | 与 RAM 量相等 | RAM 量的 2 倍 |
| > 8 GB - 64 GB | 至少 4 GB | RAM 量的 1.5 倍 |
| > 64 GB | 至少 4 GB | 不推荐休眠 |
对于边界值,如 2 GB、8 GB 或 64 GB 系统 RAM,请根据您的需要或偏好选择 swap 大小。如果您的系统资源允许此操作,增加 swap 空间可提高性能。
请注意,将交换空间分布到多个存储设备也可以提高交换空间的性能,特别是在具有快速驱动器、控制器和接口的系统上。
在修改时,不应 使用分配被为交换空间的文件系统和 LVM2 卷。如果系统进程或内核正在使用交换空间,则任何修改交换的尝试都会失败。使用 free 和 cat /proc/swaps 命令验证交换的使用量以及位置。
调整 swap 空间大小需要临时将其从系统中删除。如果运行的应用程序依赖于额外的 swap 空间,且可能会遇到低内存情况,这可能会出现问题。最好从救援模式执行 swap 大小调整,请参阅 Debug 引导选项。当提示挂载文件系统时,请选择 。
35.6.3. 为 swap 创建 LVM2 逻辑卷 复制链接链接已复制到粘贴板!
您可以为 swap 创建一个 LVM2 逻辑卷。假设 /dev/VolGroup00/LogVol02 是您要添加的交换卷。
先决条件
- 您有足够的磁盘空间。
流程
创建大小为 2 GB 的 LVM2 逻辑卷:
lvcreate VolGroup00 -n LogVol02 -L 2G
# lvcreate VolGroup00 -n LogVol02 -L 2GCopy to Clipboard Copied! Toggle word wrap Toggle overflow 格式化新 swap 空间:
mkswap /dev/VolGroup00/LogVol02
# mkswap /dev/VolGroup00/LogVol02Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
/etc/fstab文件中添加以下条目:/dev/VolGroup00/LogVol02 none swap defaults 0 0
/dev/VolGroup00/LogVol02 none swap defaults 0 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新生成挂载单元以便您的系统注册新配置:
systemctl daemon-reload
# systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在逻辑卷中激活 swap:
swapon -v /dev/VolGroup00/LogVol02
# swapon -v /dev/VolGroup00/LogVol02Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要测试是否成功创建并激活 swap 逻辑卷,请使用以下命令检查活跃 swap 空间:
cat /proc/swaps total used free shared buff/cache available Mem: 30Gi 1.2Gi 28Gi 12Mi 994Mi 28Gi Swap: 22Gi 0B 22Gi# cat /proc/swaps total used free shared buff/cache available Mem: 30Gi 1.2Gi 28Gi 12Mi 994Mi 28Gi Swap: 22Gi 0B 22GiCopy to Clipboard Copied! Toggle word wrap Toggle overflow free -h total used free shared buff/cache available Mem: 30Gi 1.2Gi 28Gi 12Mi 995Mi 28Gi Swap: 17Gi 0B 17Gi# free -h total used free shared buff/cache available Mem: 30Gi 1.2Gi 28Gi 12Mi 995Mi 28Gi Swap: 17Gi 0B 17GiCopy to Clipboard Copied! Toggle word wrap Toggle overflow
35.6.4. 创建交换文件 复制链接链接已复制到粘贴板!
当系统内存不足时,您可以创建一个 swap 文件来在固态驱动器或硬盘上创建一个临时存储空间。
先决条件
- 您有足够的磁盘空间。
流程
- 以 MB 为单位确定新交换文件的大小,再乘以 1024 来确定块的数量。例如: 64MB swap 文件的块大小为 65536。
创建一个空文件:
dd if=/dev/zero of=/swapfile bs=1024 count=65536
# dd if=/dev/zero of=/swapfile bs=1024 count=65536Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 65536 替换为等于所需块大小的值。
使用以下命令设定 swap 文件:
mkswap /swapfile
# mkswap /swapfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 更改交换文件的安全性,使其不可读。
chmod 0600 /swapfile
# chmod 0600 /swapfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下条目编辑
/etc/fstab文件,以在引导时启用交换文件:/swapfile none swap defaults 0 0
/swapfile none swap defaults 0 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 下次系统引导时,它会激活新的 swap 文件。
重新生成挂载单元,以便您的系统注册新的
/etc/fstab配置:systemctl daemon-reload
# systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 立即激活 swap 文件:
swapon /swapfile
# swapon /swapfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要测试新 swap 文件是否已成功创建并激活,请使用以下命令检查活跃 swap 空间:
cat /proc/swaps
$ cat /proc/swapsCopy to Clipboard Copied! Toggle word wrap Toggle overflow free -h
$ free -hCopy to Clipboard Copied! Toggle word wrap Toggle overflow
35.6.5. 使用 storage RHEL 系统角色创建 swap 卷 复制链接链接已复制到粘贴板!
本节提供了一个 Ansible playbook 示例。此 playbook 应用 storage 角色,来创建 swap 卷(如果不存在),或者使用默认参数修改块设备上的 swap 卷(如果已存在)。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 卷名称(示例中的
swap_fs)目前是任意的。存储角色根据disks:属性下列出的磁盘设备来识别卷。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
35.6.6. 在 LVM2 逻辑卷中扩展 swap 复制链接链接已复制到粘贴板!
您可以在现有 LVM2 逻辑卷上扩展 swap 空间。假设 /dev/VolGroup00/LogVol01 是您要将其扩展为 2 GB 的卷。
先决条件
- 您有足够的磁盘空间。
流程
为关联的逻辑卷禁用交换:
swapoff -v /dev/VolGroup00/LogVol01
# swapoff -v /dev/VolGroup00/LogVol01Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 LVM2 逻辑卷调整为 2 GB :
lvresize /dev/VolGroup00/LogVol01 -L +2G
# lvresize /dev/VolGroup00/LogVol01 -L +2GCopy to Clipboard Copied! Toggle word wrap Toggle overflow 格式化新 swap 空间:
mkswap /dev/VolGroup00/LogVol01
# mkswap /dev/VolGroup00/LogVol01Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启用扩展的逻辑卷:
swapon -v /dev/VolGroup00/LogVol01
# swapon -v /dev/VolGroup00/LogVol01Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要测试是否成功扩展并激活 swap 逻辑卷,请检查活跃 swap 空间:
cat /proc/swaps Filename Type Size Used Priority /dev/dm-1 partition 16322556 0 -2 /dev/dm-4 partition 7340028 0 -3
# cat /proc/swaps Filename Type Size Used Priority /dev/dm-1 partition 16322556 0 -2 /dev/dm-4 partition 7340028 0 -3Copy to Clipboard Copied! Toggle word wrap Toggle overflow free -h total used free shared buff/cache available Mem: 30Gi 1.2Gi 28Gi 12Mi 994Mi 28Gi Swap: 22Gi 0B 22Gi# free -h total used free shared buff/cache available Mem: 30Gi 1.2Gi 28Gi 12Mi 994Mi 28Gi Swap: 22Gi 0B 22GiCopy to Clipboard Copied! Toggle word wrap Toggle overflow
35.6.7. 在 LVM2 逻辑卷中减少 swap 复制链接链接已复制到粘贴板!
您可以减少 LVM2 逻辑卷上的 swap。假设 /dev/VolGroup00/LogVol01 是您要缩小的卷。
流程
为关联的逻辑卷禁用交换:
swapoff -v /dev/VolGroup00/LogVol01
# swapoff -v /dev/VolGroup00/LogVol01Copy to Clipboard Copied! Toggle word wrap Toggle overflow 清理 swap 签名:
wipefs -a /dev/VolGroup00/LogVol01
# wipefs -a /dev/VolGroup00/LogVol01Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 LVM2 逻辑卷减少 512 MB:
lvreduce /dev/VolGroup00/LogVol01 -L -512M
# lvreduce /dev/VolGroup00/LogVol01 -L -512MCopy to Clipboard Copied! Toggle word wrap Toggle overflow 格式化新 swap 空间:
mkswap /dev/VolGroup00/LogVol01
# mkswap /dev/VolGroup00/LogVol01Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在逻辑卷中激活 swap:
swapon -v /dev/VolGroup00/LogVol01
# swapon -v /dev/VolGroup00/LogVol01Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要测试是否成功缩小 swap 逻辑卷,请使用以下命令检查活跃 swap 空间:
cat /proc/swaps
$ cat /proc/swapsCopy to Clipboard Copied! Toggle word wrap Toggle overflow free -h
$ free -hCopy to Clipboard Copied! Toggle word wrap Toggle overflow
35.6.8. 为 swap 删除 LVM2 逻辑卷 复制链接链接已复制到粘贴板!
您可以删除 swap 的一个 LVM2 逻辑卷。假设 /dev/VolGroup00/LogVol02 是您要删除的交换卷。
流程
为关联的逻辑卷禁用交换:
swapoff -v /dev/VolGroup00/LogVol02
# swapoff -v /dev/VolGroup00/LogVol02Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除 LVM2 逻辑卷:
lvremove /dev/VolGroup00/LogVol02
# lvremove /dev/VolGroup00/LogVol02Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从
/etc/fstab文件中删除以下关联的条目:/dev/VolGroup00/LogVol02 none swap defaults 0 0
/dev/VolGroup00/LogVol02 none swap defaults 0 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新生成挂载单元以注册新配置:
systemctl daemon-reload
# systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
测试逻辑卷是否被成功删除,使用以下命令检查活跃的 swap 空间:
cat /proc/swaps
$ cat /proc/swapsCopy to Clipboard Copied! Toggle word wrap Toggle overflow free -h
$ free -hCopy to Clipboard Copied! Toggle word wrap Toggle overflow
35.6.9. 删除交换文件 复制链接链接已复制到粘贴板!
您可以删除一个 swap 文件。
流程
禁用
/swapfileswap 文件:swapoff -v /swapfile
# swapoff -v /swapfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
相应地从
/etc/fstab文件中删除其条目。 重新生成挂载单元以便您的系统注册新配置:
systemctl daemon-reload
# systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除实际的文件:
rm /swapfile
# rm /swapfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow
35.7. 使用 RHEL 系统角色管理本地存储 复制链接链接已复制到粘贴板!
要使用 Ansible 管理 LVM 和本地文件系统(FS),您可以使用 storage 角色,这是 RHEL 8 中提供的 RHEL 系统角色之一。
使用 存储 角色可让您自动管理多台机器上的磁盘和逻辑卷上的文件系统,以及从 RHEL 7.7 开始的所有 RHEL 版本。
有关 RHEL 系统角色以及如何应用它们的更多信息,请参阅 RHEL 系统角色简介。
35.7.1. 使用 storage RHEL 系统角色在块设备上创建 XFS 文件系统 复制链接链接已复制到粘贴板!
示例 Ansible playbook 使用 storage 角色,使用默认参数在块设备上创建一个 XFS 文件系统。如果 /dev/sdb 设备上的文件系统或者挂载点目录不存在,playbook 会创建它们。
存储 角色只能在未分区、整个磁盘或逻辑卷(LV)上创建文件系统。它不能在分区中创建文件系统。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括以下内容:
name: barefs-
卷名称(示例中为
barefs)目前是任意的。storage角色根据disks属性下列出的磁盘设备来识别卷。 fs_type: <file_system>-
如果要使用默认的文件系统 XFS,您可以省略
fs_type参数。 disks: <list_of_disks_and_volumes>磁盘和 LV 名称的 YAML 列表。要在 LV 上创建文件系统,请在
disks属性下提供 LVM 设置,包括括起来的卷组。详情请参阅 使用存储 RHEL 系统角色创建或者重新定义逻辑卷大小。不要提供到 LV 设备的路径。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
35.7.2. 使用 storage RHEL 系统角色永久挂载文件系统 复制链接链接已复制到粘贴板!
示例 Ansible playbook 使用 storage 角色来永久挂载现有的文件系统。它通过向 /etc/fstab 文件中添加合适的条目来确保文件系统立即可用并永久挂载。这允许文件系统在重启后保持挂载。如果 /dev/sdb 设备上的文件系统或者挂载点目录不存在,playbook 会创建它们。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
35.7.3. 使用 storage RHEL 系统角色创建或者重新定义逻辑卷大小 复制链接链接已复制到粘贴板!
使用 storage 角色执行以下任务:
- 在由多个磁盘组成的卷组中创建 LVM 逻辑卷
- 在 LVM 上重新定义现有文件系统大小
- 以池总大小的百分比表示 LVM 卷大小
如果卷组不存在,则角色会创建它。如果逻辑卷存在于卷组中,如果大小与 playbook 中指定的内容不匹配,则会调整大小。
如果您要缩小逻辑卷,为了避免数据丢失,您必须确保该逻辑卷中的文件系统没有使用正在缩小的逻辑卷中的空间。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括以下内容:
大小:< ;size>- 您必须使用单位(如 GiB)或百分比(例如 60%)来指定大小。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证指定的卷是否已创建或重新定义到请求的大小:
ansible managed-node-01.example.com -m command -a 'lvs myvg'
# ansible managed-node-01.example.com -m command -a 'lvs myvg'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
35.7.4. 使用 storage RHEL 系统角色启用在线块丢弃 复制链接链接已复制到粘贴板!
您可以使用在线块丢弃选项挂载 XFS 文件系统,以自动丢弃未使用的块。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证在线块丢弃选项是否已启用:
ansible managed-node-01.example.com -m command -a 'findmnt /mnt/data'
# ansible managed-node-01.example.com -m command -a 'findmnt /mnt/data'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
35.7.5. 使用 storage RHEL 系统角色创建并挂载文件系统 复制链接链接已复制到粘贴板!
示例 Ansible playbook 使用 storage 角色创建和挂载文件系统。它通过向 /etc/fstab 文件中添加合适的条目来确保文件系统立即可用并永久挂载。这允许文件系统在重启后保持挂载。如果 /dev/sdb 设备上的文件系统或者挂载点目录不存在,playbook 会创建它们。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括以下内容:
disks: <list_of_devices>- 角色在创建卷时使用的设备名称的 YAML 列表。
fs_type: <file_system>-
指定角色应在卷上设置的文件系统。您可以选择
xfs、ext3、ext4、swap或unformatted。 label-name: <file_system_label>- 可选:设置文件系统的标签。
mount_point: <directory>-
可选:如果卷应自动挂载,请将
mount_point变量设置为应挂载卷的目录。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
35.7.6. 使用 storage RHEL 系统角色配置 RAID 卷 复制链接链接已复制到粘贴板!
使用 storage 系统角色,您可以使用 Red Hat Ansible Automation Platform 和 Ansible-Core 在 RHEL 上配置 RAID 卷。使用参数创建一个 Ansible playbook,以配置 RAID 卷以满足您的要求。
设备名称在某些情况下可能会改变,例如:当您在系统中添加新磁盘时。因此,为了避免数据丢失,请在 playbook 中使用持久性命名属性。如需有关持久性命名属性的更多信息,请参阅 持久性命名属性概述。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证阵列是否被正确创建:
ansible managed-node-01.example.com -m command -a 'mdadm --detail /dev/md/data'
# ansible managed-node-01.example.com -m command -a 'mdadm --detail /dev/md/data'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
35.7.7. 使用 storage RHEL 系统角色配置带有 RAID 的 LVM 池 复制链接链接已复制到粘贴板!
使用 storage 系统角色,您可以使用 Red Hat Ansible Automation Platform 在 RHEL 上配置带有 RAID 的 LVM 池。您可以使用可用参数建立一个 Ansible playbook,来配置带有 RAID 的 LVM 池。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证您的池是否在 RAID 中:
ansible managed-node-01.example.com -m command -a 'lsblk'
# ansible managed-node-01.example.com -m command -a 'lsblk'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
35.7.8. 使用 storage RHEL 系统角色为 RAID LVM 卷配置条带大小 复制链接链接已复制到粘贴板!
使用 storage 系统角色,您可以使用 Red Hat Ansible Automation Platform 在 RHEL 上为 RAID LVM 卷配置条带大小。您可以使用可用参数建立一个 Ansible playbook,来配置带有 RAID 的 LVM 池。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证条带大小是否被设置为所需的大小:
ansible managed-node-01.example.com -m command -a 'lvs -o+stripesize /dev/my_pool/my_volume'
# ansible managed-node-01.example.com -m command -a 'lvs -o+stripesize /dev/my_pool/my_volume'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
35.7.9. 使用 storage RHEL 系统角色配置 LVM-VDO 卷 复制链接链接已复制到粘贴板!
您可以使用 storage RHEL 系统角色,在启用了压缩和去重的 LVM (LVM-VDO)上创建一个 VDO 卷。
由于 storage 系统角色使用 LVM-VDO,因此每个池只能创建一个卷。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo权限。
步骤
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括以下内容:
vdo_pool_size: <size>- 卷在设备上使用的实际大小。您可以以人类可读的格式指定大小,如 10 GiB。如果没有指定单位,则默认为字节。
size: <size>- VDO 卷的虚拟大小。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
查看压缩和去重的当前状态:
ansible managed-node-01.example.com -m command -a 'lvs -o+vdo_compression,vdo_compression_state,vdo_deduplication,vdo_index_state' LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert VDOCompression VDOCompressionState VDODeduplication VDOIndexState mylv1 myvg vwi-a-v--- 3.00t vpool0 enabled online enabled online
$ ansible managed-node-01.example.com -m command -a 'lvs -o+vdo_compression,vdo_compression_state,vdo_deduplication,vdo_index_state' LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert VDOCompression VDOCompressionState VDODeduplication VDOIndexState mylv1 myvg vwi-a-v--- 3.00t vpool0 enabled online enabled onlineCopy to Clipboard Copied! Toggle word wrap Toggle overflow
35.7.10. 使用 storage RHEL 系统角色创建 LUKS2 加密的卷 复制链接链接已复制到粘贴板!
您可以通过运行 Ansible playbook,使用 storage 角色来创建和配置使用 LUKS 加密的卷。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo权限。
流程
将您的敏感变量存储在一个加密文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:luks_password: <password>
luks_password: <password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。验证 playbook 语法:
ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
查找 LUKS 加密的卷的
luksUUID值:ansible managed-node-01.example.com -m command -a 'cryptsetup luksUUID /dev/sdb' 4e4e7970-1822-470e-b55a-e91efe5d0f5c
# ansible managed-node-01.example.com -m command -a 'cryptsetup luksUUID /dev/sdb' 4e4e7970-1822-470e-b55a-e91efe5d0f5cCopy to Clipboard Copied! Toggle word wrap Toggle overflow 查看卷的加密状态:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证创建的 LUKS 加密的卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 36 章 去重和压缩存储 复制链接链接已复制到粘贴板!
36.1. 部署 VDO 复制链接链接已复制到粘贴板!
作为系统管理员,您可以使用 VDO 创建去重和压缩的存储池。
36.1.1. VDO 简介 复制链接链接已复制到粘贴板!
Virtual Data Optimizer(VDO)以去重、压缩和精简置备的形式为 Linux 提供内联数据降低。当您设置 VDO 卷时,您可以指定一个块设备来构建 VDO 卷以及您要存在的逻辑存储量。
- 当托管活动的虚拟机或容器时,红帽建议按 10:1 的逻辑与物理比例配置存储:也就是说,如果您使用 1TB 的物理存储,则将其显示为 10TB 的逻辑存储。
- 对于对象存储,如 Ceph 提供的类型,红帽建议使用 3:1 的逻辑与物理比例:1TB 的物理存储将显示为 3TB 的逻辑存储。
在这两种情况下,您只需将文件系统放在 VDO 提供的逻辑设备之上,然后直接使用它,或将其作为分布式云存储架构的一部分。
由于 VDO 是迅速置备的,所以文件系统和应用程序只会看到使用中的逻辑空间,且不知道可用的实际物理空间。使用脚本来监控实际的可用空间,并在使用超过阈值时产生一个报警:例如,当 VDO 卷已满 80% 时。
36.1.2. VDO 部署场景 复制链接链接已复制到粘贴板!
您可以使用各种方法部署 VDO,来为以下情况提供去重存储:
- 块和文件的访问
- 本地和远程存储
因为 VDO 会将其去重存储公开为标准 Linux 块设备,所以您可以在标准文件系统、iSCSI 和 FC 目标驱动程序或者统一存储中使用它。
目前,支持在 Ceph RADOS 块设备(RBD)上部署 VDO 卷。但是,目前不支持在 VDO 卷上部署 Red Hat Ceph Storage 集群组件。
KVM
您可以在配置了直接附加存储的 KVM 服务器上部署 VDO。
文件系统
您可以在 VDO 上创建文件系统,并通过 NFS 服务器或 Samba 将其公开给 NFS 或 CIFS 用户。
在 iSCSI 上放置 VDO
您可以将整个 VDO 存储目标作为 iSCSI 目标导出到远程 iSCSI 启动器。
在 iSCSI 上创建 VDO 卷时,您可以将 VDO 卷放在 iSCSI 层之上或之下。尽管需要考虑许多注意事项,但此处提供了一些准则,来帮助您选择最适合您环境的方法。
当将 VDO 卷放在 iSCSI 层下方的 iSCSI 服务器(目标)上时:
- VDO 卷对启动器是透明的,与其他 iSCSI LUN 类似。对客户端隐藏精简配置和节省空间后,更易于监控和维护 LUN 。
- 网络流量会减少,因为没有对 VDO 元数据的读或写,并且在网络上不会发生对去除重复建议的读验证。
- 在 iSCSI 目标上使用的内存和 CPU 资源可以带来更好的性能。例如,能够托管越来越多的 hypervisor ,因为在 iSCSI 目标上发生了卷减少。
- 如果客户端在启动器上实现了加密,且在目标下面有一个 VDO 卷,则不会实现任何空间节省。
当将 VDO 卷放在 iSCSI 层上面的 iSCSI 客户端(启动器)上时:
- 如果要取得较高的空间节省率,则异步模式下的网络流量可能会降低。
- 您可以直接查看和控制空间节省,并监控使用情况。
-
如果要加密数据,例如使用
dm-crypt,您可以在加密之上实现 VDO,并充分利用空间效率。
LVM
在功能丰富的系统上,您可以使用 LVM 来提供多个逻辑单元号(LUN),这些 LUN 都由相同的去重存储池支持。
在下图中,VDO 目标被注册为一个物理卷,这样它可以由 LVM 来管理。从去重存储池中创建多个逻辑卷(LV1到 LV4)。这样 VDO 便可支持多协议统一块或者对底层去重存储池的文件进行访问。
去重的统一存储设计可使多个文件系统通过 LVM 工具共同使用相同的去重域。另外,文件系统可以利用 LVM 快照、写时复制、缩小或增长的功能,所有这些都位于 VDO 之上。
加密
DM Crypt 等设备映射器(DM)机制与 VDO 兼容。加密 VDO 卷有助于确保数据安全,且任何 VDO 以上的文件系统仍会是去重的。
在 VDO 之上应用加密层会几乎不会导致任何数据去重。在 VDO 可以对它们进行去重之前,加密会使重复的数据块不同。
始终将加密层放在 VDO 下。
36.1.3. VDO 卷的组件 复制链接链接已复制到粘贴板!
VDO 使用块设备作为后备存储,它包括由一个或多个磁盘、分区甚至平面文件组成的物理存储聚合。当存储管理工具创建 VDO 卷时,VDO 为 UDS 索引和 VDO 卷保留卷空间。UDS 索引和 VDO 卷会一起交互,以提供去重的块存储。
图 36.1. VDO 磁盘机构
VDO 解决方案包括以下组件:
kvdo载入 Linux 设备映射器层的内核模块提供一个去重的、压缩的和精简配置的块存储卷。
kvdo模块公开一个块设备。对于块存储,您可以直接访问块存储或通过 Linux 文件系统(如 XFS 或 ext4)呈现它。当
kvdo收到一个读取 VDO 卷中数据的逻辑块的请求时,它会将请求的逻辑块映射到底层的物理块上,然后读取并返回请求的数据。当
kvdo收到一个向 VDO 卷写数据块的请求时,它首先检查请求是 DISCARD 还是 TRIM 请求,或者数据是否统一为零。如果其中任何一个条件为真,则kvdo会更新其块映射,并确认请求。否则,VDO 会处理并优化数据。uds一个与卷上 Universal Deduplication Service(UDS)索引进行通信,并分析数据是否有重复的内核模块。对于每个新的数据,UDS 可以快速地判断该数据是否与之前存储的数据相同。如果索引发现匹配项,则存储系统可在内部引用现有项,以避免多次保存相同的信息。
UDS 索引作为
uds内核模块运行在内核中。- 命令行工具
- 用于配置和管理优化的存储。
36.1.4. VDO 卷的物理和逻辑大小 复制链接链接已复制到粘贴板!
VDO 使用以下方法使用物理、可用物理和逻辑大小:
- 物理大小
这与底层块设备的大小相同。VDO 使用这个存储用于:
- 用户数据,这些数据可能会进行重复数据删除和压缩
- VDO 元数据,如 UDS 索引
- 可用物理大小
这是 VDO 可用于用户数据的物理大小的一部分
它等同于物理大小减去元数据的大小,再减去将卷根据指定的 slab 的大小分为 slab 后剩余的值。
- 逻辑大小
这是 VDO 卷在应用程序中的置备大小。它通常大于可用的物理大小。如果没有指定
--vdoLogicalSize选项,则逻辑卷的置备现在会被置备为1:1比例。例如,如果将 VDO 卷放在 20GB 块设备之上,则为 UDS 索引保留 2.5 GB(如果使用默认索引大小)。剩余的 17.5 GB 为 VDO 元数据和用户数据提供。因此,要消耗的可用存储不超过 17.5 GB,且可能会因为组成实际 VDO 卷的元数据而减少。VDO 目前支持任意逻辑卷大小最多为物理卷的 254 倍,但不能超过 4PB。
图 36.2. VDO 磁盘机构
在这个图表中,VDO 重复数据删除存储对象完全位于块设备之上,这意味着 VDO 卷的物理大小与基本块设备大小相同。
36.1.5. VDO 中的 Lab 大小 复制链接链接已复制到粘贴板!
VDO 卷的物理存储被分成几个 slab。每个 slab 都是物理空间的连续区域。给定卷的所有 slab 的大小相同,可以是基于 128 MB 的 2 的指数的任何值,最大值为 32 GB。
默认的 slab 大小为 2 GB,用于在较小的测试系统中评估 VDO。单个 VDO 卷最多可有 8192 个 slabs。因此,在使用 2GB slab 的默认配置中,允许的最大物理存储为 16 TB。当使用 32GB 的 slab 时,允许的最大物理存储为 256 TB。VDO 总是保留至少一个整个 slab 来保存元数据,因此预留 slab 无法用于存储用户数据。
slab 大小不影响 VDO 卷的性能。
| 物理卷大小 | 推荐的 slab 大小 |
|---|---|
| 10–99 GB | 1 GB |
| 100 GB – 1 TB | 2 GB |
| 2–256 TB | 32 GB |
使用默认设置的 2 GB slab 和 0.25dense 索引的 VDO 卷的最小磁盘用量需要 approx 4.7 GB。这提供了在 0% 重复数据删除或压缩时写入的 2 GB 物理数据要少 2 GB。
这里的磁盘用量是默认 slab 大小和密度索引的总和。
您可以通过向 lvcreate 命令提供-- vdosettings 'vdo_slab_size_mb=size-in-megabytes' 选项来控制 slab 大小。
36.1.6. VDO 要求 复制链接链接已复制到粘贴板!
VDO 对其放置和系统资源有一定要求。
36.1.6.1. VDO 内存要求 复制链接链接已复制到粘贴板!
每个 VDO 卷有不同的内存要求:
- VDO 模块
VDO 需要固定的 38 MB RAM 和几个变量数量:
- 每个配置的块映射缓存大小 1 MB 的 1.15 MB RAM。块映射缓存至少需要 150 MB RAM。
- 每个 1 TB 逻辑空间的 1.6 MB RAM。
- 由卷管理的每 1 TB 物理存储的 268 MB RAM。
- UDS 索引
通用重复数据删除服务(UDS)至少需要 250 MB RAM,这也是重复数据删除使用的默认数量。您可以在格式化 VDO 卷时配置值,因为值还影响索引所需的存储量。
UDS 索引所需的内存由索引类型和去重窗口所需的大小决定。去重窗口是 VDO 可以检查匹配块的之前写入的数据量。
Expand 索引类型 重复数据删除窗口 密度
每 1 GB RAM 为 1 TB
稀疏
每 1 GB RAM 为 10 TB
注意使用默认设置的 2 GB slab 和 0.25dense 索引的 VDO 卷的最小磁盘用量需要 approx 4.7 GB。这提供了在 0% 重复数据删除或压缩时写入的 2 GB 物理数据要少 2 GB。
这里的磁盘用量是默认 slab 大小和密度索引的总和。
36.1.6.2. VDO 存储空间要求 复制链接链接已复制到粘贴板!
您可以将 VDO 卷配置为使用最多 256TB 物理存储。只有物理存储的某个部分可用来存储数据。
VDO 需要存储两种类型的 VDO 元数据和 UDS 索引。使用以下计算来确定 VDO 管理的卷的可用大小:
- 第一类 VDO 元数据对于每 4GB 物理贮存使用 1 MB,再加上每个 slab 的额外的 1 MB。
- 第二类 VDO 元数据对于每 1GB 逻辑存储使用 1.25 MB,并舍入到最近的 slab。
- UDS 索引所需的存储量取决于索引类型以及分配给索引的 RAM 量。对于每 1 GB RAM,密度 UDS 索引使用 17GB 存储,稀疏 UDS 索引使用 170 GB 存储。
36.1.6.3. 将 VDO 放置到存储堆栈中 复制链接链接已复制到粘贴板!
将存储层放在 Virtual Data Optimizer (VDO)之上或之下,以符合放置要求。
VDO 卷是一个精简配置的块设备。您可以通过将卷放在之后可以进行扩展的存储层上来防止耗尽物理空间。这种可扩展存储的示例是逻辑卷管理器(LVM)卷,或多设备冗余廉价阵列或独立磁盘(MD RAID)阵列。
您可以将厚置备层放在 VDO 之上。您必须考虑厚置备的层的两个方面:
- 将新数据写入厚设备上未使用的逻辑空间。当使用 VDO 或其他精简置备存储时,设备可能会报告在这类写入过程中空间不足。
- 使用新数据覆盖厚设备上使用的逻辑空间。使用 VDO 时,覆盖数据也会导致设备不足的报告。
这些限制会影响 VDO 层以上的所有层。如果不监控 VDO 设备,您可能会意外耗尽 VDO 之上厚置备卷上的物理空间。
请参阅以下支持和不支持的 VDO 卷配置示例。
图 36.3. 支持的 VDO 卷配置
图 36.4. 不支持的 VDO 卷配置
36.1.6.4. 按物理大小划分的 VDO 要求示例 复制链接链接已复制到粘贴板!
下表根据基础卷的物理大小提供 VDO 的最大系统要求。每个表都列出适合预期部署的要求,如主存储或备份存储。
具体数量取决于您的 VDO 卷的配置。
- 主存储部署
在主存储中,UDS 索引是物理大小的 0.01% 到 25%。
Expand 表 36.2. 用于主存储的存储和内存配置的示例 物理大小 RAM 使用量:UDS RAM 使用量:VDO 磁盘用量 索引类型 1 TB
250 MB
472 MB
2.5 GB
密度
10 TB
1 GB
3 GB
10 GB
密度
250 MB
22 GB
稀疏
50 TB
1 GB
14 GB
85 GB
稀疏
100 TB
3 GB
27 GB
255 GB
稀疏
256 TB
5 GB
69 GB
425 GB
稀疏
- 备份存储部署
在备份存储情况下,去除窗口必须大于备份集。如果您预期备份集或物理大小在以后会增大,则需要把这个值加到索引大小中。
Expand 表 36.3. 用于备份存储的存储和内存配置的示例 重复数据删除窗口 RAM 使用量:UDS 磁盘用量 索引类型 1 TB
250 MB
2.5 GB
密度
10 TB
2 GB
21 GB
密度
50 TB
2 GB
170 GB
稀疏
100 TB
4 GB
340 GB
稀疏
256 TB
8 GB
700 GB
稀疏
36.1.7. 安装 VDO 复制链接链接已复制到粘贴板!
您可以安装创建、挂载和管理 VDO 卷所需的 VDO 软件。
流程
安装 VDO 软件:
yum install lvm2 kmod-kvdo vdo
# yum install lvm2 kmod-kvdo vdoCopy to Clipboard Copied! Toggle word wrap Toggle overflow
36.1.8. 创建 VDO 卷 复制链接链接已复制到粘贴板!
此流程在块设备中创建 VDO 卷。
先决条件
- 安装 VDO 软件。请参阅 第 36.1.7 节 “安装 VDO”。
- 使用可扩展存储作为后备块设备。更多信息请参阅 第 36.1.6.3 节 “将 VDO 放置到存储堆栈中”。
流程
在以下步骤中,将 vdo-name 替换为您要用于 VDO 卷的标识符,例如 vdo1。您必须为系统中的每个 VDO 实例使用不同的名称和设备。
找到您要创建 VDO 卷的块设备的持久名称。有关持久性名称的更多信息,请参阅 第 26 章 持久性命名属性概述。
如果您使用非持久性设备名称,则如果设备名称改变,VDO 可能无法在以后正确启动。
创建 VDO 卷:
vdo create \ --name=vdo-name \ --device=block-device \ --vdoLogicalSize=logical-size# vdo create \ --name=vdo-name \ --device=block-device \ --vdoLogicalSize=logical-sizeCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
使用您要创建 VDO 卷的块设备的持久性名称替换 block-device。例如,
/dev/disk/by-id/scsi-3600508b1001c264ad2af21e903ad031f。 用 VDO 卷使用的逻辑存储数量替换 logical-size。
-
对于活跃的虚拟机或容器存储,逻辑大小为块设备物理大小的 十倍。例如:如果您的块设备大小为 1TB,则在此处使用
10T。 -
对于对象存储,使用逻辑大小,即您的块设备物理大小的 三倍。例如:如果您的块设备大小为 1TB,则在此处使用
3T。
-
对于活跃的虚拟机或容器存储,逻辑大小为块设备物理大小的 十倍。例如:如果您的块设备大小为 1TB,则在此处使用
如果物理块设备大于 16TiB,请添加
--vdoSlabSize=32G选项,将卷的 slab 大小增加到 32GiB。在大于 16TiB 的块设备中使用默认 2GiB 的 slab 大小会导致
vdo create命令失败,并显示以下错误:vdo: ERROR - vdoformat: formatVDO failed on '/dev/device': VDO Status: Exceeds maximum number of slabs supported
vdo: ERROR - vdoformat: formatVDO failed on '/dev/device': VDO Status: Exceeds maximum number of slabs supportedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
例 36.1. 为容器存储创建 VDO
例如,要为 1TB 块设备中的容器存储创建 VDO 卷,您可以使用:
vdo create \ --name=vdo1 \ --device=/dev/disk/by-id/scsi-3600508b1001c264ad2af21e903ad031f \ --vdoLogicalSize=10T# vdo create \ --name=vdo1 \ --device=/dev/disk/by-id/scsi-3600508b1001c264ad2af21e903ad031f \ --vdoLogicalSize=10TCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要如果在创建 VDO 卷时发生故障,请删除要清理的卷。详情请参阅 删除失败创建的 VDO 卷。
-
使用您要创建 VDO 卷的块设备的持久性名称替换 block-device。例如,
在 VDO 卷之上创建一个文件系统:
对于 XFS 文件系统:
mkfs.xfs -K /dev/mapper/vdo-name
# mkfs.xfs -K /dev/mapper/vdo-nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 ext4 文件系统:
mkfs.ext4 -E nodiscard /dev/mapper/vdo-name
# mkfs.ext4 -E nodiscard /dev/mapper/vdo-nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意在新创建的 VDO 卷上使用
-K和-E nodiscard选项的目的是不在发送请求上花费时间,因为它对未分配的块没有影响。新 VDO 卷从 100% 未分配开始。
使用以下命令等待系统注册新设备节点:
udevadm settle
# udevadm settleCopy to Clipboard Copied! Toggle word wrap Toggle overflow
后续步骤
- 挂载文件系统。详情请查看 第 36.1.9 节 “挂载 VDO 卷”。
-
在 VDO 设备中为文件系统启用
丢弃功能。详情请查看 第 36.1.10 节 “启用定期块丢弃”。
36.1.9. 挂载 VDO 卷 复制链接链接已复制到粘贴板!
这个过程会在 VDO 卷中手动挂载文件系统,也可以永久挂载文件系统。
先决条件
- 在您的系统上创建了 VDO 卷。具体说明请查看 第 36.1.8 节 “创建 VDO 卷”。
流程
要手动将文件系统挂载到 VDO 卷中,请使用:
mount /dev/mapper/vdo-name mount-point
# mount /dev/mapper/vdo-name mount-pointCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要将文件系统配置为在引导时自动挂载,请在
/etc/fstab文件中添加行:对于 XFS 文件系统:
/dev/mapper/vdo-name mount-point xfs defaults 0 0
/dev/mapper/vdo-name mount-point xfs defaults 0 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 ext4 文件系统:
/dev/mapper/vdo-name mount-point ext4 defaults 0 0
/dev/mapper/vdo-name mount-point ext4 defaults 0 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果 VDO 卷位于需要网络的块设备中,如 iSCSI,请添加
_netdev挂载选项。
36.1.10. 启用定期块丢弃 复制链接链接已复制到粘贴板!
您可以启用 systemd 计时器来定期丢弃所有支持的文件系统上未使用的块。
流程
启用并启动
systemd计时器:systemctl enable --now fstrim.timer Created symlink /etc/systemd/system/timers.target.wants/fstrim.timer → /usr/lib/systemd/system/fstrim.timer.
# systemctl enable --now fstrim.timer Created symlink /etc/systemd/system/timers.target.wants/fstrim.timer → /usr/lib/systemd/system/fstrim.timer.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证计时器的状态:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
36.1.11. 监控 VDO 复制链接链接已复制到粘贴板!
此流程描述了如何从 VDO 卷获取使用效率的信息。
先决条件
- 安装 VDO 软件。请参阅安装 VDO。
流程
使用
vdostats工具来获取有关 VDO 卷的信息:vdostats --human-readable Device 1K-blocks Used Available Use% Space saving% /dev/mapper/node1osd1 926.5G 21.0G 905.5G 2% 73% /dev/mapper/node1osd2 926.5G 28.2G 898.3G 3% 64%
# vdostats --human-readable Device 1K-blocks Used Available Use% Space saving% /dev/mapper/node1osd1 926.5G 21.0G 905.5G 2% 73% /dev/mapper/node1osd2 926.5G 28.2G 898.3G 3% 64%Copy to Clipboard Copied! Toggle word wrap Toggle overflow
36.2. 维护 VDO 复制链接链接已复制到粘贴板!
部署 VDO 卷后,您可以执行某些任务来维护或优化它。以下一些任务是 VDO 卷正常工作所必需的。
先决条件
- 安装并部署 VDO。请参阅 第 36.1 节 “部署 VDO”。
36.2.1. 管理 VDO 卷的空闲空间 复制链接链接已复制到粘贴板!
VDO 是一个精简配置的块存储目标。因此,您必须主动监控和管理 VDO 卷中的空间使用情况。
36.2.1.1. VDO 卷的物理和逻辑大小 复制链接链接已复制到粘贴板!
VDO 使用以下方法利用物理、可用物理和逻辑大小:
- 物理大小
这与底层块设备的大小相同。VDO 使用这个存储用于:
- 用户数据,这些数据可能会进行重复数据删除和压缩
- VDO 元数据,如 UDS 索引
- 可用物理大小
这是 VDO 可用于用户数据的物理大小的一部分
它等同于物理大小减去元数据的大小,再减去将卷根据指定的 slab 的大小分为 slab 后剩余的值。
- 逻辑大小
这是 VDO 卷在应用程序中的置备大小。它通常大于可用的物理大小。如果没有指定
--vdoLogicalSize选项,则逻辑卷的置备现在会被置备为1:1比例。例如,如果将 VDO 卷放在 20GB 块设备之上,则为 UDS 索引保留 2.5 GB(如果使用默认索引大小)。剩余的 17.5 GB 为 VDO 元数据和用户数据提供。因此,要消耗的可用存储不超过 17.5 GB,且可能会因为组成实际 VDO 卷的元数据而减少。VDO 目前支持任意逻辑卷大小最多为物理卷的 254 倍,但不能超过 4PB。
图 36.5. VDO 磁盘机构
在这个图表中,VDO 重复数据删除存储对象完全位于块设备之上,这意味着 VDO 卷的物理大小与基本块设备大小相同。
36.2.1.2. VDO 中的精简置备 复制链接链接已复制到粘贴板!
VDO 是一个精简配置的块存储目标。VDO 卷使用的物理空间量可能与为存储用户显示的卷大小有所不同。您可以使用它来节约存储成本。
没有可用空间条件
如果写入的数据没有达到预期的性能率,请小心会意外出现存储空间耗尽的问题。
每当逻辑块(虚拟存储)的数量超过物理块(实际存储)的数量时,文件系统和应用程序可能会意外地遇到没有存储空间的问题。因此,使用 VDO 的存储系统必须为您提供一个监控 VDO 卷中可用池大小的方法。
您可以使用 vdostats 程序确定这个可用池的大小。此实用程序的默认输出列出所有运行 VDO 卷的信息,其格式与 Linux df 实用程序类似。例如:
Device 1K-blocks Used Available Use% /dev/mapper/vdo-name 211812352 105906176 105906176 50%
Device 1K-blocks Used Available Use%
/dev/mapper/vdo-name 211812352 105906176 105906176 50%
当 VDO 卷的物理存储容量接近满时,VDO 在系统日志中报告警告,如下所示:
Oct 2 17:13:39 system lvm[13863]: Monitoring VDO pool vdo-name. Oct 2 17:27:39 system lvm[13863]: WARNING: VDO pool vdo-name is now 80.69% full. Oct 2 17:28:19 system lvm[13863]: WARNING: VDO pool vdo-name is now 85.25% full. Oct 2 17:29:39 system lvm[13863]: WARNING: VDO pool vdo-name is now 90.64% full. Oct 2 17:30:29 system lvm[13863]: WARNING: VDO pool vdo-name is now 96.07% full.
Oct 2 17:13:39 system lvm[13863]: Monitoring VDO pool vdo-name.
Oct 2 17:27:39 system lvm[13863]: WARNING: VDO pool vdo-name is now 80.69% full.
Oct 2 17:28:19 system lvm[13863]: WARNING: VDO pool vdo-name is now 85.25% full.
Oct 2 17:29:39 system lvm[13863]: WARNING: VDO pool vdo-name is now 90.64% full.
Oct 2 17:30:29 system lvm[13863]: WARNING: VDO pool vdo-name is now 96.07% full.
这些警告信息只有在 lvm2-monitor 服务正在运行时才会出现。它会被默认启用。
如何防止没有空间的问题
如果可用池的大小低于一定级别,可以执行以下操作:
- 删除数据。当删除的数据不再被重复时,可能重新获得可用空间。只有发出了签发后,删除数据才可以释放空间。
- 添加物理存储
监控 VDO 卷的物理空间,以防止出现空间不足的情况。物理块不足可能会导致 VDO 卷中最近写入的数据丢失。
精简配置以及 TRIM 和 DISCARD 命令
要从精简配置节省的存储中受益,物理存储层需要知道数据何时被删除的。与精简配置存储一起工作的文件系统会发送 TRIM 或 DISCARD 命令,来在不再需要逻辑块时通知存储系统。
有几种发送 TRIM 或 DISCARD 命令的方法:
-
通过
discard挂载选项,文件系统可以在删除块时发送这些命令。 -
您可以通过使用
fstrim等工具以受控的方式发送命令。这些工具告诉文件系统检测哪些逻辑块未使用,并以TRIM或DISCARD命令的形式向存储系统发送信息。
对未使用的块使用 TRIM 或 DISCARD 并不是 VDO 独有的。任何精简置备的存储系统也会遇到同样的问题。
36.2.1.3. 监控 VDO 复制链接链接已复制到粘贴板!
此流程描述了如何从 VDO 卷获取使用情况和效率的信息。
先决条件
- 安装 VDO 软件。请参阅安装 VDO。
流程
使用
vdostats工具来获取有关 VDO 卷的信息:vdostats --human-readable Device 1K-blocks Used Available Use% Space saving% /dev/mapper/node1osd1 926.5G 21.0G 905.5G 2% 73% /dev/mapper/node1osd2 926.5G 28.2G 898.3G 3% 64%
# vdostats --human-readable Device 1K-blocks Used Available Use% Space saving% /dev/mapper/node1osd1 926.5G 21.0G 905.5G 2% 73% /dev/mapper/node1osd2 926.5G 28.2G 898.3G 3% 64%Copy to Clipboard Copied! Toggle word wrap Toggle overflow
36.2.1.4. 在文件系统中为 VDO 回收空间 复制链接链接已复制到粘贴板!
此流程在托管文件系统的 VDO 卷中回收存储空间。
除非文件系统使用 DISCARD、TRIM 或 UNMAP 命令告知块是空闲的,否则 VDO 无法回收空间。
流程
- 如果 VDO 卷中的文件系统支持丢弃(discard)操作,请启用它们。请参阅 Discarding unused blocks。
-
对于不使用
DISCARD、TRIM或UNMAP的文件系统,您可以手动回收空闲空间。保存由二进制 0 组成的文件,以便占据空闲空间,然后删除该文件。
36.2.1.5. 在没有文件系统的情况下为 VDO 回收空间 复制链接链接已复制到粘贴板!
此流程回收 VDO 卷上的存储空间,该卷用作没有文件系统的块存储目标。
流程
使用
blkdiscard工具。例如,可以通过在其上部署 LVM ,可以将单个 VDO 卷划分为多个子卷。在取消配置的逻辑卷前,请使用
blkdiscard工具释放该逻辑卷之前使用的空间。LVM 支持
REQ_DISCARD命令,并在适当的逻辑块地址上将请求转发到 VDO,以便释放空间。如果您使用其他卷管理器,则它们也需要支持REQ_DISCARD,或者等效地支持用于 SCSI 设备的UNMAP或用于 ATA 设备的TRIM。
36.2.1.6. 在光纤通道或以太网网络中为 VDO 回收空间 复制链接链接已复制到粘贴板!
此流程回收配置到光纤通道存储结构上的主机的 VDO 卷(或部分卷)上的存储空间,或使用 SCSI 目标框架的以太网空间,如 LIO 或 SCST。
流程
SCSI 启动器可以使用
UNMAP命令在精简配置的存储目标上释放空间,但需要配置 SCSI 目标框架来公布对此命令的支持。这通常是通过在这些卷上启用精简置备来完成的。通过运行以下命令,来在基于 Linux 的 SCSI 启动器上验证对
UNMAP的支持:sg_vpd --page=0xb0 /dev/device
# sg_vpd --page=0xb0 /dev/deviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在输出中,验证 Maximum unmap LBA count 的值大于零。
36.2.2. 启动或停止 VDO 卷 复制链接链接已复制到粘贴板!
您可以启动或停止给定的 VDO 卷,或所有 VDO 卷及其关联的 UDS 索引。
36.2.2.1. 已启动并激活的 VDO 卷 复制链接链接已复制到粘贴板!
在系统引导过程中,vdo systemd 单元会自动 启动 所有配置为 激活的 VDO 设备。
安装 vdo 软件包时,默认会安装并启用 vdo systemd 单元。此单元会在系统启动时自动运行 vdo start --all 命令来启动所有激活的 VDO 卷。
您还可以通过在 vdo create 命令中添加 --activate=disabled 选项来创建不自动启动的 VDO 卷。
启动顺序
有些系统可能会将 LVM 卷放在 VDO 卷之上,或它们之下。在这些系统中,需要以正确顺序启动服务:
- 必须首先启动 LVM 的下层。在大多数系统中,当安装 LVM 软件包时会自动启动这个层。
-
然后,
vdosystemd单元必须启动。 - 最后,必须运行其他脚本以启动正在运行的 VDO 卷上的 LVM 卷或其他服务。
停止卷所需的时间
停止 VDO 卷需要根据存储设备速度以及卷需要写入的数据量而有所不同:
- 卷总是为每 1GiB UDS 索引写入大约 1GiB。
- 卷还写入与块映射缓存大小相等的数据量,再加上每个 slab 最多 8MiB。
- 卷必须完成处理所有未完成的 IO 请求。
36.2.2.2. 启动 VDO 卷 复制链接链接已复制到粘贴板!
此流程启动给定 VDO 卷或系统中的所有 VDO 卷。
流程
要启动给定的 VDO 卷,请使用:
vdo start --name=my-vdo
# vdo start --name=my-vdoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要启动所有 VDO 卷,请使用:
vdo start --all
# vdo start --allCopy to Clipboard Copied! Toggle word wrap Toggle overflow
36.2.2.3. 停止 VDO 卷 复制链接链接已复制到粘贴板!
此流程停止给定 VDO 卷或系统中的所有 VDO 卷。
流程
停止卷。
要停止给定的 VDO 卷,请使用:
vdo stop --name=my-vdo
# vdo stop --name=my-vdoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要停止所有 VDO 卷,请使用:
vdo stop --all
# vdo stop --allCopy to Clipboard Copied! Toggle word wrap Toggle overflow
- 等待卷完成向磁盘写入数据。
36.2.3. 系统引导时自动启动 VDO 卷 复制链接链接已复制到粘贴板!
您可以配置 VDO 卷以便在系统引导时自动启动。您还可以禁用自动启动。
36.2.3.1. 已启动并激活的 VDO 卷 复制链接链接已复制到粘贴板!
在系统引导过程中,vdo systemd 单元会自动 启动 所有配置为 激活的 VDO 设备。
安装 vdo 软件包时,默认会安装并启用 vdo systemd 单元。此单元会在系统启动时自动运行 vdo start --all 命令来启动所有激活的 VDO 卷。
您还可以通过在 vdo create 命令中添加 --activate=disabled 选项来创建不自动启动的 VDO 卷。
启动顺序
有些系统可能会将 LVM 卷放在 VDO 卷之上,或它们之下。在这些系统中,需要以正确顺序启动服务:
- 必须首先启动 LVM 的下层。在大多数系统中,当安装 LVM 软件包时会自动启动这个层。
-
然后,
vdosystemd单元必须启动。 - 最后,必须运行其他脚本以启动正在运行的 VDO 卷上的 LVM 卷或其他服务。
停止卷所需的时间
停止 VDO 卷需要根据存储设备速度以及卷需要写入的数据量而有所不同:
- 卷总是为每 1GiB UDS 索引写入大约 1GiB。
- 卷还写入与块映射缓存大小相等的数据量,再加上每个 slab 最多 8MiB。
- 卷必须完成处理所有未完成的 IO 请求。
36.2.3.2. 激活 VDO 卷 复制链接链接已复制到粘贴板!
此流程激活 VDO 卷使其自动启动。
流程
激活一个特定卷:
vdo activate --name=my-vdo
# vdo activate --name=my-vdoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 激活所有卷:
vdo activate --all
# vdo activate --allCopy to Clipboard Copied! Toggle word wrap Toggle overflow
36.2.3.3. 取消激活 VDO 卷 复制链接链接已复制到粘贴板!
此流程取消激活 VDO 卷以防止自动启动。
流程
取消激活一个特定卷:
vdo deactivate --name=my-vdo
# vdo deactivate --name=my-vdoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 取消激活所有卷:
vdo deactivate --all
# vdo deactivate --allCopy to Clipboard Copied! Toggle word wrap Toggle overflow
36.2.4. 选择 VDO 写入模式 复制链接链接已复制到粘贴板!
您可以根据基础块设备的要求,为 VDO 卷配置写入模式。默认情况下,VDO 选择自动写入模式。
36.2.4.1. VDO 写入模式 复制链接链接已复制到粘贴板!
VDO 支持以下写入模式:
同步当 VDO 处于
sync模式时,其上的层会假定写入命令将数据写入持久性存储。因此,文件系统或应用程序不需要发出 FLUSH 或强制单元访问(FUA)请求来使数据在关键点上变为持久。只有在底层的存储保证数据在写命令完成后写入持久性存储时,才必须将 VDO 设为
sync模式。也就是说,存储必须没有易变的写缓存,或者不通过缓存进行写入操作。async当 VDO 处于
async模式时,VDO 不能保证在确认写命令时数据会被写入持久性存储。文件系统或应用程序必须发出 FLUSH 或 FUA 请求,来确保每次事务中数据在关键点上的持久性。如果底层存储不能保证在写命令完成后数据被写入到持久性存储,必须将 VDO 设为
async模式;也就是说当存储具有易失性写回缓存时。async-unsafe这个模式与
async具有同样的属性,但它与原子性、一致性、隔离、持久性(ACID)不兼容。与async相比,async-unsafe具有更好的性能。警告当假设 ACID 合规的应用程序或文件系统在 VDO 卷上运行时,
sync-unsafe模式可能会导致意外的数据丢失。auto-
auto模式根据每个设备的特性自动选择sync或async。这是默认选项。
36.2.4.2. VDO 写入模式的内部处理 复制链接链接已复制到粘贴板!
VDO 的写模式是 sync 和 async。以下信息描述了这些模式的操作。
如果 kvdo 模块在同步(synch)模式下运行:
- 它会在请求中临时将数据写入分配块中,然后确认请求。
- 确认完成后,会尝试通过计算块数据的 MurmurHash-3 签名来去除重复的块,该签名发送给 VDO 索引。
-
如果 VDO 索引包含具有相同签名的块的条目,
kvdo会读取指定的块,并对这两个块进行逐字节的比较,以验证它们是否相同。 -
如果它们确实相同,则
kvdo会更新其块映射,以便逻辑块指向相应的物理块,并释放分配的物理块。 -
如果 VDO 索引没有包含正在写入的块的签名的条目,或者指定的块实际上没有包含相同的数据,则
kvdo会更新其块映射,以使临时物理块持久。
如果 kvdo 在异步(async)模式下运行:
- 它将立即确认请求而不是写数据。
- 然后它会尝试使用与上述步骤相同的方法来去重块。
-
如果块是重复的,则
kvdo会更新其块映射,并释放分配的块。否则,它会将请求中的数据写入分配的块,并更新块映射使物理块持久化。
36.2.4.3. 检查 VDO 卷中的写入模式 复制链接链接已复制到粘贴板!
此流程列出了所选 VDO 卷中的主动写入模式。
流程
使用以下命令查看 VDO 卷使用的写入模式:
vdo status --name=my-vdo
# vdo status --name=my-vdoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出列表:
-
配置的写入策略,它是从
sync、async或auto中选择的选项 -
写入策略,其是 VDO 应用的特定的写模式,即
sync或async
-
配置的写入策略,它是从
36.2.4.4. 检查易变的缓存 复制链接链接已复制到粘贴板!
这个过程决定块设备是否有易变的缓存。您可以使用这些信息在 sync 和 async VDO 写模式之间进行选择。
流程
使用以下方法之一确定某个设备是否有写回缓存:
阅读
/sys/block/block-device /device/scsi_disk/标识符/cache_typesysfs文件。例如:cat '/sys/block/sda/device/scsi_disk/7:0:0:0/cache_type' write back
$ cat '/sys/block/sda/device/scsi_disk/7:0:0:0/cache_type' write backCopy to Clipboard Copied! Toggle word wrap Toggle overflow cat '/sys/block/sdb/device/scsi_disk/1:2:0:0/cache_type' None
$ cat '/sys/block/sdb/device/scsi_disk/1:2:0:0/cache_type' NoneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 另外,你可以在内核引导日志中找到上述设备是否有写缓存:
sd 7:0:0:0: [sda] Write cache: enabled, read cache: enabled, does not support DPO or FUA sd 1:2:0:0: [sdb] Write cache: disabled, read cache: disabled, supports DPO and FUA
sd 7:0:0:0: [sda] Write cache: enabled, read cache: enabled, does not support DPO or FUA sd 1:2:0:0: [sdb] Write cache: disabled, read cache: disabled, supports DPO and FUACopy to Clipboard Copied! Toggle word wrap Toggle overflow
在上例中:
-
设备
sda表示它 有 一个回写缓存。对其使用async模式。 -
设备
sdb表示 它没有 一个回写缓存。对其使用sync模式。
如果
cache_type的值是None或writethrough,您应该将 VDO 配置为使用sync写模式。-
设备
36.2.4.5. 设置 VDO 写入模式 复制链接链接已复制到粘贴板!
此流程为 VDO 卷设置了写模式,可以是对现有卷,也可以是在创建新卷时。
使用不正确的写模式可能会在电源故障、系统崩溃或与磁盘意外失去联系后导致数据丢失。
先决条件
- 决定哪个写入模式适合您的设备。请参阅 第 36.2.4.4 节 “检查易变的缓存”。
流程
您可以在现有 VDO 卷上或创建新卷时设置写入模式:
要修改现有的 VDO 卷,请使用:
vdo changeWritePolicy --writePolicy=sync|async|async-unsafe|auto \ --name=vdo-name# vdo changeWritePolicy --writePolicy=sync|async|async-unsafe|auto \ --name=vdo-nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
要在创建 VDO 卷时指定写模式,请在
vdo create命令中添加--writePolicy=sync|async|async-unsafe|auto选项。
36.2.5. 在未清除关闭后恢复 VDO 卷 复制链接链接已复制到粘贴板!
您可以在不干净的关机后恢复 VDO 卷,使其可以继续运行。任务通常是自动的。另外,由于过程中的故障,您可以在 VDO 卷创建失败后进行清理。
36.2.5.1. VDO 写入模式 复制链接链接已复制到粘贴板!
VDO 支持以下写入模式:
同步当 VDO 处于
sync模式时,其上的层会假定写入命令将数据写入持久性存储。因此,文件系统或应用程序不需要发出 FLUSH 或强制单元访问(FUA)请求来使数据在关键点上变为持久。只有在底层的存储保证数据在写命令完成后写入持久性存储时,才必须将 VDO 设为
sync模式。也就是说,存储必须没有易变的写缓存,或者不通过缓存进行写入操作。async当 VDO 处于
async模式时,VDO 不能保证在确认写命令时数据会被写入持久性存储。文件系统或应用程序必须发出 FLUSH 或 FUA 请求,来确保每次事务中数据在关键点上的持久性。如果底层存储不能保证在写命令完成后数据被写入到持久性存储,必须将 VDO 设为
async模式;也就是说当存储具有易失性写回缓存时。async-unsafe这个模式与
async具有同样的属性,但它与原子性、一致性、隔离、持久性(ACID)不兼容。与async相比,async-unsafe具有更好的性能。警告当假设 ACID 合规的应用程序或文件系统在 VDO 卷上运行时,
sync-unsafe模式可能会导致意外的数据丢失。auto-
auto模式根据每个设备的特性自动选择sync或async。这是默认选项。
36.2.5.2. VDO 卷恢复 复制链接链接已复制到粘贴板!
当在一个非干净的关闭后重启一个 VDO 卷时,VDO 会执行以下操作:
- 验证卷元数据的一致性。
- 重建一部分元数据以便在需要时进行修复。
重建是自动的,不需要用户干预。
VDO 可能会重建不同的写入模式,具体取决于活跃的写入模式:
同步-
如果 VDO 在同步存储上运行,且写策略被设为
sync,则写到卷的所有数据都可以被完全恢复。 async-
如果写策略是
async的,如果一些写不是持久化的,则它们可能无法被恢复。这可以通过发送 VDOFLUSH命令或带有 FUA(强制单元访问)标记的写 I/O 来实现。您可以通过调用fsync、fdatasync、sync或umount等数据完整性操作来在用户模式下实现这一点。
在任何一种模式下,某些未被确认或未刷新的写也可能被重新构建。
自动和手动恢复
当 VDO 卷进入到 recovering 操作模式时,VDO 会在其重新上线后自动重建不干净的 VDO 卷。这叫做 在线恢复。
如果 VDO 无法成功恢复 VDO 卷,它会将卷置于只读 操作模式下,该模式在卷重新启动时仍然有效。您需要强制重新构建来手动解决这个问题。
36.2.5.3. VDO 操作模式 复制链接链接已复制到粘贴板!
本节介绍了指示 VDO 卷在正常运行的模式,或者是否从错误中恢复。
您可以使用 vdostats --verbose device 命令显示 VDO 卷的当前操作模式。请参阅输出中的 Operating mode 属性。
Normal-
这是默认的操作模式。VDO 卷总是处于
常规模式,除非以下状态之一强制使用不同的模式。新创建的 VDO 卷以正常模式启动。 恢复当 VDO 卷在关闭前不会保存其所有元数据时,它会在下次启动时自动进入
恢复模式。进入这个模式的典型原因是电源丢失或者基础存储设备出现问题。在恢复模式中,VDO 正在修复该设备中每个物理块的引用计数。恢复通常不需要非常长。时间取决于 VDO 卷的大小、基础存储设备的速度以及其它请求 VDO 同时处理的速度。VDO 卷通常具有以下例外:- 最初,在卷中写入请求的空间量可能会有所限制。当恢复了更多元数据后,更多的可用空间就会可用。
- 如果在恢复 VDO 卷时写入的数据,如果该数据位于还没有被恢复的卷的一部分,则在崩溃前写入的数据可能无法进行重复数据删除。VDO 可在恢复卷时压缩数据。您仍然可以读取或覆盖压缩的块。
- 在在线恢复过程中,某些统计数据不可用:例如,blocks in use 和 blocks free。重建完成后就可使用这些统计数据。
- 由于正在进行恢复工作,读取和写入的响应时间可能比通常要慢
您可以在
recovering模式下安全地关闭 VDO 卷。如果恢复在关闭前没有完成,则设备将在下一次启动时再次进入recovering模式。当 VDO 卷修复了所有引用数时,VDO 卷会自动退出
recovering模式,并进入到normal模式。不需要管理员操作。详情请查看 第 36.2.5.4 节 “在线恢复 VDO 卷”。read-only当 VDO 卷遇到严重的内部错误时,它会进入
read-only模式。可能导致read-only模式的事件包括元数据崩溃或支持的存储设备变为只读。这个模式是一个错误状态。在
read-only模式下,数据读取通常会正常进行,但数据写入会始终失败。VDO 卷会一直处于read-only模式,直到管理员解决了问题。您可以在
read-only模式下安全地关闭 VDO 卷。VDO 卷重启后通常会保留这个模式。在个别情况下,VDO 卷无法将read-only状态记录到支持的存储设备中。在这种情况下,VDO 会尝试进行恢复。当一个卷处于只读模式后,就无法保证卷中的数据不会被丢失或损坏。在这种情况下,红帽建议从只读卷中复制数据,并可能从备份中恢复卷。
如果数据崩溃的风险可以接受,则可以强制离线重新构建 VDO 卷元数据,以便将该卷重新在线并可用。无法保证重建数据的完整性。详情请查看 第 36.2.5.5 节 “强制 VDO 卷元数据离线重建”。
36.2.5.4. 在线恢复 VDO 卷 复制链接链接已复制到粘贴板!
此流程在一个 VDO 卷上执行在线恢复,以在未清除关闭后恢复元数据。
流程
如果 VDO 卷还没有启动,请启动它:
vdo start --name=my-vdo
# vdo start --name=my-vdoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 不需要额外的步骤。恢复在后台运行。
- 如果您依赖卷统计,比如 使用中的块 和块空闲,请等待这些数据可用。
36.2.5.5. 强制 VDO 卷元数据离线重建 复制链接链接已复制到粘贴板!
此流程对 VDO 卷元数据执行强制离线重新构建,以便在不干净的关闭后进行恢复。
此过程可能会导致卷的数据丢失。
先决条件
- 已启动 VDO 卷。
流程
检查卷是否处于只读模式。查看命令输出中的 操作模式 属性:
vdo status --name=my-vdo
# vdo status --name=my-vdoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果卷不处于只读模式,则不需要强制离线重建。执行在线恢复,如 第 36.2.5.4 节 “在线恢复 VDO 卷” 中所述。
如果卷正在运行,请停止它:
vdo stop --name=my-vdo
# vdo stop --name=my-vdoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
--forceRebuild选项重启卷:vdo start --name=my-vdo --forceRebuild
# vdo start --name=my-vdo --forceRebuildCopy to Clipboard Copied! Toggle word wrap Toggle overflow
36.2.5.6. 删除失败创建的 VDO 卷 复制链接链接已复制到粘贴板!
此流程清理处于中间状态的 VDO 卷。如果在创建卷时发生故障,则卷处于中间状态。这可能会在以下情况发生,例如:
- 系统崩溃
- 电源失败
-
管理员中断了运行的
vdo create命令
流程
要进行清理,请使用
--force选项删除创建失败的卷:vdo remove --force --name=my-vdo
# vdo remove --force --name=my-vdoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 需要
--force选项,由于卷创建失败,管理员可能会由于更改了系统配置而导致冲突。如果没有
--force选项,vdo remove命令会失败,并显示以下信息:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
36.2.6. 优化 UDS 索引 复制链接链接已复制到粘贴板!
您可以配置特定的 UDS 索引设置以便在您的系统中优化它。
在创建 VDO 卷后,您无法更改 UDS 索引的属性。
36.2.6.1. VDO 卷的组件 复制链接链接已复制到粘贴板!
VDO 使用块设备作为后备存储,它包括由一个或多个磁盘、分区甚至平面文件组成的物理存储聚合。当存储管理工具创建 VDO 卷时,VDO 为 UDS 索引和 VDO 卷保留卷空间。UDS 索引和 VDO 卷会一起交互,以提供去重的块存储。
图 36.6. VDO 磁盘机构
VDO 解决方案包括以下组件:
kvdo载入 Linux 设备映射器层的内核模块提供一个去重的、压缩的和精简配置的块存储卷。
kvdo模块公开一个块设备。对于块存储,您可以直接访问块存储或通过 Linux 文件系统(如 XFS 或 ext4)呈现它。当
kvdo收到一个读取 VDO 卷中数据的逻辑块的请求时,它会将请求的逻辑块映射到底层的物理块上,然后读取并返回请求的数据。当
kvdo收到一个向 VDO 卷写数据块的请求时,它首先检查请求是 DISCARD 还是 TRIM 请求,或者数据是否统一为零。如果其中任何一个条件为真,则kvdo会更新其块映射,并确认请求。否则,VDO 会处理并优化数据。uds一个与卷上 Universal Deduplication Service(UDS)索引进行通信,并分析数据是否有重复的内核模块。对于每个新的数据,UDS 可以快速地判断该数据是否与之前存储的数据相同。如果索引发现匹配项,则存储系统可在内部引用现有项,以避免多次保存相同的信息。
UDS 索引作为
uds内核模块运行在内核中。- 命令行工具
- 用于配置和管理优化的存储。
36.2.6.2. UDS 索引 复制链接链接已复制到粘贴板!
VDO 使用名为 UDS 的高性能去重索引来检测正在存储的重复的数据块。
UDS 索引提供了 VDO 产品的基础。对于每个新数据段,它会快速确定该数据段是否与之前存储的任何数据段相同。如果索引发现匹配项,则存储系统可在内部引用现有项,以避免多次保存相同的信息。
UDS 索引作为 uds 内核模块运行在内核中。
去重窗口 是索引记住的之前写入的块的数量。可配置的去重窗口的大小。对于给定的窗口大小,索引需要特定数量的 RAM 以及特定数量的磁盘空间。窗口的大小通常通过使用 --indexMem=size 选项指定索引内存的大小来决定。然后,VDO 决定自动使用的磁盘空间量。
UDS 索引由两个部分组成:
- 在内存中使用紧凑表示,每个唯一块最多包含一个条目。
- 记录在索引发生时的相关块名称的磁盘组件,按顺序记录。
UDS 在内存中平均每个条目使用 4 个字节,包括缓存。
磁盘上的组件维护传递给 UDS 的数据的相关历史记录。UDS 为属于这个去重窗口中的数据提供去重建议,其中包括最近看到的块的名称。去重窗口允许 UDS 尽可能高效地索引数据,同时限制索引大型数据存储库所需的内存量。尽管去重窗口具有局限性,但大部分具有高级去重的数据集也表现出高度的时间局部性 - 换句话说,大多数去重发生在几乎同时写入的块集合中。另外,通常要写入的数据通常可能会与最近写入的数据重复。因此,对于给定时间间隔的工作负载,去重比率通常相同,无论 UDS 仅索引了最新的数据还是所有数据。
由于重复数据往往会表现出时间局部性,因此很少需要对存储系统中的每个块进行索引。若非如此,索引内存的成本将超过去重所节省的存储成本。索引大小要求与数据刷新率紧密相关。例如,假设存储系统的总容量为 100 TB,但每周的摄取率为 1 TB 。使用 4TB 的去重窗口,UDS 可探测到上个月写入的数据的最大冗余。
36.2.6.3. 推荐的 UDS 索引配置 复制链接链接已复制到粘贴板!
本节介绍了根据您预期的用例,用于 UDS 索引的推荐选项。
通常,红帽建议在所有产品用例中使用 稀疏 UDS 索引。这是一个非常高效的索引数据结构,在其去重窗口中,每个块大约需要十分之一字节的 RAM 。在磁盘上,每个块大约需要 72 字节磁盘空间。这个索引的最小配置使用了 256 MB RAM,磁盘大约需要 25 GB 空间。
要使用此配置,请在 vdo create 命令中指定 --sparseIndex=enabled --indexMem=0.25 选项。这个配置会导致一个 2.5 TB 的去重窗口(也就是说它会记住 2.5 TB 的历史记录)。在大多数用例中,2.5 TB 的去重窗口适合用于大小高达 10 TB 的去重存储池。
但是,索引的默认配置是使用密度 索引。该索引在 RAM 中的效率要低得多(10 倍),但它需要最少的磁盘空间(也是 10 倍),这使其更便于在受限环境中进行评估。
通常,建议配置一个四分之一 VDO 卷物理大小的去重窗口。但这不是实际要求。即便是小的去重窗口(与物理存储量相比)也可以在许多用例中发现大量的重复数据。也可以使用较大的窗口,但多数情况下,这样做将无用。
36.2.7. 在 VDO 中启用或禁用去重 复制链接链接已复制到粘贴板!
在某些情况下,您可能希望临时禁用写入 VDO 卷的数据的去重,同时仍保留对卷的读写能力。禁用去重可防止后续写入操作被去重,但已经去重的数据会一直保留。
36.2.7.1. VDO 中的去重 复制链接链接已复制到粘贴板!
去重是通过删除重复块的多个副本来减少存储资源消耗的技术。
VDO 检测每个重复块,并将其记录为对原始块的引用,而不是多次写相同的数据。VDO 维护一个从逻辑块地址(由 VDO 上面的存储层使用)到物理块地址(被 VDO 下的存储层使用)的映射。
在进行去重后,可将多个逻辑块地址映射到相同的物理块地址。这些被称为共享块。块共享对存储用户是不可见的,用户会像 VDO 不存在一样读写块。
当共享块被覆盖时,VDO 为保存新块数据分配一个新的物理块,以确保映射到共享物理块的其他逻辑块地址不会被修改。
36.2.7.2. 在 VDO 卷上启用去重 复制链接链接已复制到粘贴板!
此流程重启关联的 UDS 索引,并通知 VDO 卷去重已再次激活。
去重被默认启用。
流程
要在 VDO 卷上重启去重,请使用以下命令:
vdo enableDeduplication --name=my-vdo
# vdo enableDeduplication --name=my-vdoCopy to Clipboard Copied! Toggle word wrap Toggle overflow
36.2.7.3. 在 VDO 卷上禁用去重 复制链接链接已复制到粘贴板!
此流程停止关联的 UDS 索引,并通知 VDO 卷去重不再处于活动状态。
流程
要在 VDO 卷上停止去重,请使用以下命令:
vdo disableDeduplication --name=my-vdo
# vdo disableDeduplication --name=my-vdoCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
您还可以通过在
vdo create命令中添加--deduplication=disabled选项,在创建新 VDO 卷时禁用去重。
36.2.8. 在 VDO 中启用或禁用压缩 复制链接链接已复制到粘贴板!
VDO 提供数据压缩。禁用它可以最大限度地提高性能,并加快不太可能压缩的数据的处理。重新启用它可以节省空间。
36.2.8.1. VDO 中的压缩 复制链接链接已复制到粘贴板!
除了块级去重外,VDO 还提供使用 HIOPS 压缩™ 技术的内联块级压缩。
VDO 卷压缩默认是 on。
虽然去重对虚拟机环境和备份应用程序是最佳解决方案,但压缩非常适合结构化和非结构化的文件格式,这些文件格式通常不会展示块级冗余,如日志文件和数据库。
压缩对未识别为重复的块进行操作。当 VDO 首次看到唯一数据时,它会压缩数据。已存储的数据的后续副本是去重的,而无需额外的压缩步骤。
压缩功能基于一种基于并行的打包算法,其允许一次处理许多压缩操作。在首先存储块并响应请求者后,最佳打包算法会找到多个块,当压缩时,这些块可以放入一个物理块中。确定特定的物理块不太可能保存其他压缩块后,它将被写入存储,并且未压缩块的被释放并被重复使用。
在已经响应请求者后执行压缩和打包操作,使用压缩会带来最小的延迟损失。
36.2.8.2. 在 VDO 卷中启用压缩 复制链接链接已复制到粘贴板!
此流程启用了 VDO 卷的压缩来提高空间节能。
默认启用压缩。
流程
要再次启动它,请使用以下命令:
vdo enableCompression --name=my-vdo
# vdo enableCompression --name=my-vdoCopy to Clipboard Copied! Toggle word wrap Toggle overflow
36.2.8.3. 禁用 VDO 卷上的压缩 复制链接链接已复制到粘贴板!
此流程停止 VDO 卷的压缩,以最大化性能或加快对数据进行压缩的速度。
流程
要停止在现有 VDO 卷中压缩,请使用以下命令:
vdo disableCompression --name=my-vdo
# vdo disableCompression --name=my-vdoCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
另外,在创建新卷时,您可以在
vdo create命令中添加--compression=disabled选项来禁用压缩。
36.2.9. 增大 VDO 卷的大小 复制链接链接已复制到粘贴板!
您可以增加 VDO 卷的物理大小,以利用更多的底层存储容量,或者增加逻辑大小以在卷上提供更多的容量。
36.2.9.1. VDO 卷的物理和逻辑大小 复制链接链接已复制到粘贴板!
VDO 使用以下方法利用物理、可用物理和逻辑大小:
- 物理大小
这与底层块设备的大小相同。VDO 使用这个存储用于:
- 用户数据可以是去重的和压缩的
- VDO 元数据,如 UDS 索引
- 可用物理大小
这是 VDO 可用于用户数据的物理大小的一部分
它等同于物理大小减去元数据的大小,再减去将卷根据指定的 slab 的大小分为 slab 后剩余的值。
- 逻辑大小
这是 VDO 卷在应用程序中的置备大小。它通常大于可用的物理大小。如果没有指定
--vdoLogicalSize选项,则逻辑卷的调配现在被配置为1:1的比率。例如,如果将 VDO 卷放在 20GB 块设备之上,则为 UDS 索引保留 2.5 GB(如果使用默认索引大小)。剩余的 17.5 GB 为 VDO 元数据和用户数据提供。因此,要消耗的可用存储不超过 17.5 GB,且可能会因为组成实际 VDO 卷的元数据而减少。VDO 目前支持任意逻辑卷大小最多为物理卷的 254 倍,但不能超过 4PB。
图 36.7. VDO 磁盘机构
在这个图表中,VDO 去重存储对象完全位于块设备之上,这意味着 VDO 卷的物理大小与基本块设备大小相同。
36.2.9.2. VDO 中的精简置备 复制链接链接已复制到粘贴板!
VDO 是一个精简配置的块存储目标。VDO 卷使用的物理空间量可能与为存储用户显示的卷大小有所不同。您可以使用它来节约存储成本。
没有可用空间条件
如果写入的数据没有达到预期的性能率,请小心会意外出现存储空间耗尽的问题。
每当逻辑块(虚拟存储)的数量超过物理块(实际存储)的数量时,文件系统和应用程序可能会意外地遇到没有存储空间的问题。因此,使用 VDO 的存储系统必须为您提供一个监控 VDO 卷中可用池大小的方法。
您可以使用 vdostats 工具来确定此空闲池的大小。这个工具的默认输出会列出所有运行 VDO 卷的信息,其格式与 Linux df 工具列出的格式类似。例如:
Device 1K-blocks Used Available Use% /dev/mapper/vdo-name 211812352 105906176 105906176 50%
Device 1K-blocks Used Available Use%
/dev/mapper/vdo-name 211812352 105906176 105906176 50%
当 VDO 卷的物理存储容量接近满时,VDO 在系统日志中报告警告,如下所示:
Oct 2 17:13:39 system lvm[13863]: Monitoring VDO pool vdo-name. Oct 2 17:27:39 system lvm[13863]: WARNING: VDO pool vdo-name is now 80.69% full. Oct 2 17:28:19 system lvm[13863]: WARNING: VDO pool vdo-name is now 85.25% full. Oct 2 17:29:39 system lvm[13863]: WARNING: VDO pool vdo-name is now 90.64% full. Oct 2 17:30:29 system lvm[13863]: WARNING: VDO pool vdo-name is now 96.07% full.
Oct 2 17:13:39 system lvm[13863]: Monitoring VDO pool vdo-name.
Oct 2 17:27:39 system lvm[13863]: WARNING: VDO pool vdo-name is now 80.69% full.
Oct 2 17:28:19 system lvm[13863]: WARNING: VDO pool vdo-name is now 85.25% full.
Oct 2 17:29:39 system lvm[13863]: WARNING: VDO pool vdo-name is now 90.64% full.
Oct 2 17:30:29 system lvm[13863]: WARNING: VDO pool vdo-name is now 96.07% full.
这些警告消息只有在 lvm2-monitor 服务运行时才会出现。它会被默认启用。
如何防止没有空间的问题
如果可用池的大小低于一定级别,可以执行以下操作:
- 删除数据。当删除的数据不再被重复时,可能重新获得可用空间。只有发出了签发后,删除数据才可以释放空间。
- 添加物理存储
监控 VDO 卷的物理空间,以防止出现空间不足的情况。物理块不足可能会导致 VDO 卷中最近写入的数据丢失。
精简配置以及 TRIM 和 DISCARD 命令
要从精简配置节省的存储中受益,物理存储层需要知道数据何时被删除的。与精简配置存储一起工作的文件系统会发送 TRIM 或 DISCARD 命令,来在不再需要逻辑块时通知存储系统。
有几种发送 TRIM 或 DISCARD 命令的方法:
-
通过
discard挂载选项,文件系统可以在删除块时发送这些命令。 -
您可以通过使用
fstrim等工具以受控的方式发送命令。这些工具告诉文件系统检测哪些逻辑块未使用,并以TRIM或DISCARD命令的形式向存储系统发送信息。
对未使用的块使用 TRIM 或 DISCARD 并不是 VDO 独有的。任何精简置备的存储系统也会遇到同样的问题。
36.2.9.3. 增大 VDO 卷的逻辑卷大小 复制链接链接已复制到粘贴板!
这个过程会增加给定 VDO 卷的逻辑大小。它允许您首先创建具有逻辑大小足够小的 VDO 卷,使其安全而无法耗尽空间。一段时间后,您可以评估实际的数据减少率,如果足够的话,您可以增大 VDO 卷的逻辑大小以利用节省的空间。
不可能缩小 VDO 卷的逻辑卷大小。
流程
要增大逻辑大小,请使用:
vdo growLogical --name=my-vdo \ --vdoLogicalSize=new-logical-size# vdo growLogical --name=my-vdo \ --vdoLogicalSize=new-logical-sizeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 当逻辑卷增大时,VDO 会报告有新的大小卷上的任何设备或文件系统。
36.2.9.4. 增加 VDO 卷的物理大小 复制链接链接已复制到粘贴板!
此流程增加 VDO 卷可以使用的物理存储量。
不可能以这种方式缩小 VDO 卷。
先决条件
基础块设备的容量大于 VDO 卷的当前物理大小。
如果不是这样,您可以尝试增加设备的大小。确切的流程取决于设备的类型。例如:要调整 MBR 或 GPT 分区的大小,请参阅 管理存储设备 指南中的 重新调整分区大小 部分。
流程
为 VDO 卷添加新物理存储空间:
vdo growPhysical --name=my-vdo
# vdo growPhysical --name=my-vdoCopy to Clipboard Copied! Toggle word wrap Toggle overflow
36.2.10. 删除 VDO 卷 复制链接链接已复制到粘贴板!
您可以删除系统中的现有 VDO 卷。
36.2.10.1. 删除一个有效的 VDO 卷 复制链接链接已复制到粘贴板!
此流程移除 VDO 卷及其关联的 UDS 索引。
流程
- 卸载文件系统并停止使用 VDO 卷中的存储的应用程序。
要从您的系统中删除 VDO 卷,请使用:
vdo remove --name=my-vdo
# vdo remove --name=my-vdoCopy to Clipboard Copied! Toggle word wrap Toggle overflow
36.2.10.2. 删除失败创建的 VDO 卷 复制链接链接已复制到粘贴板!
此流程清理处于中间状态的 VDO 卷。如果在创建卷时发生故障,则卷处于中间状态。这可能会在以下情况发生,例如:
- 系统崩溃
- 电源失败
-
管理员中断了运行的
vdo create命令
流程
要进行清理,请使用
--force选项删除创建失败的卷:vdo remove --force --name=my-vdo
# vdo remove --force --name=my-vdoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 需要
--force选项,由于卷创建失败,管理员可能会由于更改了系统配置而导致冲突。如果没有
--force选项,vdo remove命令会失败,并显示以下信息:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
36.3. 丢弃未使用块 复制链接链接已复制到粘贴板!
您可以在支持它们的块设备中执行或调度丢弃操作。块丢弃操作与挂载的文件系统不再使用的文件系统块进行通信。块丢弃操作允许 SSD 优化垃圾回收例程,它们可以通知精简置备存储来重新使用未使用的物理块。
要求
基本文件系统的块设备必须支持物理的丢弃(discard)操作。
如果
/sys/block/<device>/queue/discard_max_bytes文件中的值不为零,则支持物理丢弃操作。
36.3.1. 块丢弃操作的类型 复制链接链接已复制到粘贴板!
您可以使用不同方法运行 discard 操作:
- 批量丢弃
- 由用户明确触发,并丢弃所选文件系统中所有未使用的块。
- 在线丢弃
-
在挂载时指定,并实时触发,而无需用户干预。在线丢弃操作只丢弃从
used变为free状态的块。 - 定期丢弃
-
是
systemd服务定期运行的批量操作。
XFS 和 ext4 文件系统支持所有类型。
建议
红帽建议您使用批处理或周期性丢弃。
仅在以下情况下使用在线丢弃:
- 系统负载不允许使用批量丢弃,或者
- 为了保持性能,需要在线丢弃操作。
36.3.2. 执行批块丢弃 复制链接链接已复制到粘贴板!
您可以执行批量块丢弃操作,以丢弃挂载的文件系统上未使用的块。
先决条件
- 文件系统已挂载。
- 文件系统底层的块设备支持物理忽略操作。
流程
使用
fstrim工具:要只在所选文件系统中执行丢弃,请使用:
fstrim mount-point
# fstrim mount-pointCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要在所有挂载的文件系统中执行丢弃,请使用:
fstrim --all
# fstrim --allCopy to Clipboard Copied! Toggle word wrap Toggle overflow
如果您在以下设备上执行 fstrim 命令:
- 不支持丢弃操作的设备,或者
- 由多个设备组成的逻辑设备(LVM 或者 MD),其中任意设备不支持丢弃操作:
下面的信息将显示:
fstrim /mnt/non_discard fstrim: /mnt/non_discard: the discard operation is not supported
# fstrim /mnt/non_discard
fstrim: /mnt/non_discard: the discard operation is not supported
36.3.3. 启用在线块丢弃 复制链接链接已复制到粘贴板!
您可以执行在线块丢弃操作,以自动丢弃所有支持的文件系统上未使用的块。
流程
在挂载时启用在线丢弃:
手动挂载文件系统时,请添加
-o discard挂载选项:mount -o discard device mount-point
# mount -o discard device mount-pointCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
永久挂载文件系统时,请将
discard选项添加到/etc/fstab文件的挂载条目中。
36.3.4. 使用 storage RHEL 系统角色启用在线块丢弃 复制链接链接已复制到粘贴板!
您可以使用在线块丢弃选项挂载 XFS 文件系统,来自动丢弃未使用的块。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证在线块丢弃选项是否已启用:
ansible managed-node-01.example.com -m command -a 'findmnt /mnt/data'
# ansible managed-node-01.example.com -m command -a 'findmnt /mnt/data'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
36.3.5. 启用定期块丢弃 复制链接链接已复制到粘贴板!
您可以启用 systemd 计时器来定期丢弃所有支持的文件系统上未使用的块。
流程
启用并启动
systemd计时器:systemctl enable --now fstrim.timer Created symlink /etc/systemd/system/timers.target.wants/fstrim.timer → /usr/lib/systemd/system/fstrim.timer.
# systemctl enable --now fstrim.timer Created symlink /etc/systemd/system/timers.target.wants/fstrim.timer → /usr/lib/systemd/system/fstrim.timer.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证计时器的状态:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
部分 V. 日志文件设计 复制链接链接已复制到粘贴板!
第 37 章 审计系统 复制链接链接已复制到粘贴板!
虽然审计不会为您的系统提供额外的安全性,但您可以使用它发现系统中的安全策略违反情况。然后,您可以通过配置其他安全措施(如 SELinux)来防止将来的冲突。
37.1. Linux 审计 复制链接链接已复制到粘贴板!
Linux 审计系统提供了一种跟踪您的系统与安全相关的信息的方法。根据预配置的规则,审计会生成日志条目,来尽可能多地记录系统上所发生的事件的相关信息。对于关键任务环境而言至关重要,可用来确定安全策略的违反者及其所执行的操作。
以下列表总结了审计可以在其日志文件中记录的一些信息:
- 事件的日期、时间、类型和结果
- 主题和对象的敏感度标签
- 事件与触发事件的用户身份的关联
- 所有对审计配置的修改,并尝试访问审计日志文件
- 所有身份验证机制的使用,如 SSH 和 Kerberos 等
-
对任何可信数据库的更改,如
/etc/passwd - 尝试向或从系统导入或导出信息
- 根据用户身份、主题和对象标签和其他属性包含或排除事件
审计系统的使用也是许多安全相关认证的一项要求。审计旨在满足或超出以下认证或合规指南的要求:
- 受控访问保护配置文件(CAPP)
- 标记的安全保护配置文件(LSPP)
- 规则集基本访问控制(RSBAC)
- 国家工业安全计划操作手册(NISPOM)
- 联邦信息安全管理法案(FISMA)
- 支付卡行业 - 数据安全标准(PCI-DSS)
- 安全技术实施指南(STIG)
审计还由国家信息保障合作伙伴(NIAP)和最佳安全行业(BSI)评估。
使用案例
- 监视文件访问
- 审计可以跟踪文件或目录是否已被访问、修改、执行或文件属性是否已被改变。例如,这有助于检测对重要文件的访问,并在其中一个文件损坏时提供审计跟踪。
- 监控系统调用
-
可将审计配置为在每次使用特定系统调用时生成日志条目。例如,这可用于通过监控
settimeofday、clock_adjtime和其他与时间相关的系统调用来跟踪对系统时间的修改。 - 记录用户运行的命令
-
审计可以跟踪文件是否已被执行,因此可以定义一个规则以记录每次特定命令的执行。例如,可以对
/bin目录中的每个可执行文件定义一个规则。然后,可以按用户 ID 搜索生成的日志条目,以生成每个用户所执行的命令的审计跟踪。 - 记录系统路径名称的执行
- 除了观察在规则调用时将路径转换为 inode 的文件访问之外,审计现在还可以观察路径的执行,即使路径在规则调用中不存在,或者在规则调用后文件被替换了。这允许规则在升级程序可执行文件后或甚至在其安装之前继续运行。
- 记录安全事件
-
pam_faillock认证模块能够记录失败的登录尝试。也可以将审计设置为记录失败的登录尝试,并提供试图登录的用户的额外信息。 - 搜索事件
-
审计提供了
ausearch工具,可用于过滤日志条目,并根据多个条件提供完整的审计跟踪。 - 运行总结报告
-
aureport实用程序可用于生成记录事件的日常报告等。然后,系统管理员可以分析这些报告,并进一步调查可疑的活动。 - 监控网络访问
-
nftables、iptables和ebtables工具可以配置为触发审计事件,使系统管理员能够监控网络访问。
系统性能可能会受到影响,具体取决于审计所收集的信息量。
37.2. 审计系统架构 复制链接链接已复制到粘贴板!
审计系统由两个主要部分组成:用户空间应用程序和工具,以及内核端系统调用处理。内核组件接收用户空间应用程序的系统调用,并通过以下过滤器对其进行过滤:user、task、fstype 或 exit。
系统调用通过 exclude 过滤器后,它将通过上述其中一个过滤器发送,根据审计规则配置,将其发送到审计守护进程以进行进一步处理。
用户空间审计守护进程从内核收集信息,并在日志文件中创建条目。其他审计用户空间工具与审计守护进程、内核审计组件或审计日志文件进行交互:
-
auditctl审计控制工具与内核审计组件交互,来管理规则并控制事件生成进程的许多设置和参数。 -
其余的审计工具将审计日志文件的内容作为输入,并根据用户的要求生成输出。例如,
aureport工具生成所有记录的事件的报告。
在 RHEL 8 中,审计分配程序守护进程(audisp)的功能集成在审计守护进程(auditd)中。用于实时分析程序与审计事件交互的插件配置文件默认位于 /etc/audit/plugins.d/ 目录中。
37.3. 为安全环境配置 auditd 复制链接链接已复制到粘贴板!
默认的 auditd 配置应该适合于大多数环境。但是,如果您的环境必须满足严格的安全策略,您可以在 /etc/audit/auditd.conf 文件中更改审计守护进程配置的以下设置:
log_file-
包含审计日志文件的目录(通常为
/var/log/audit/)应位于单独的挂载点上。这可以防止其他进程消耗此目录的空间,并为审计守护进程提供准确的剩余空间检测。 max_log_file-
指定单个审计日志文件的最大大小,必须设置为充分利用保存审计日志文件的分区上的可用空间。
max_log_file'参数指定最大文件大小(以 MB 为单位)。给出的值必须是数字。 max_log_file_action-
一旦达到
max_log_file中设置的限制,决定要采取什么行动,应将其设置为keep_logs,以防止审计日志文件被覆盖。 space_left-
指定磁盘上剩余的可用空间量,其是
space_left_action参数中设置的触发时所采取的操作。必须设置一个数字,让管理员有足够的时间来响应,并释放磁盘空间。space_left的值取决于审计日志文件的生成速度。如果 space_left 的值被指定为整数,它将被解释为绝对大小(MiB)。如果值被指定为 1 到 99 之间的数字,后跟一个百分比符号(例如 5%),则审计守护进程会根据包含log_file的文件系统的大小来计算绝对大小(以 MB 为单位)。 space_left_action-
建议将
space_left_action参数设置为email或 使用适当通知方法的exec。 admin_space_left-
指定绝对最小可用空间量,其是
admin_space_left_action参数中设置的触发时所采取的操作,必须设置一个值,为记录管理员所执行的操作保留足够的空间。此参数的数字值应小于 space_left 的数。您还可以在数字后面附加一个百分比符号(例如 1%),以便审计守护进程根据磁盘分区计算数值。 admin_space_left_action-
应设置为
single来将系统置于单用户模式,并允许管理员释放一些磁盘空间。 disk_full_action-
指定当保存审计日志文件的分区上没有可用空间时触发的操作,必须设置为
halt或single。当审计无法记录事件时,这可确保系统关闭或以单用户模式运行。 disk_error_action-
指定当在包含审计日志文件的分区上检测到错误时触发的操作,必须设置为
syslog、single或halt,具体取决于您处理硬件故障的本地安全策略。 flush-
应设置为
incremental_async。它与freq参数相结合,该参数决定了在强制与硬盘进行硬盘同步前可以将多少条记录发送到磁盘。freq参数应设置为100。这些参数可确保审计事件数据与磁盘上的日志文件同步,同时保持良好的活动性能。
其余配置选项应根据您的本地安全策略来设置。
37.4. 启动和控制 auditd 复制链接链接已复制到粘贴板!
配置了 auditd 后,启动服务以收集 审计信息,并将它存储在日志文件中。以 root 用户身份运行以下命令来启动 auditd :
service auditd start
# service auditd start
将 auditd 配置为在引导时启动:
systemctl enable auditd
# systemctl enable auditd
您可以使用 # auditctl -e 0 命令临时禁用 auditd,并使用 # auditctl -e 1 重新启用它。
您可以使用 service auditd <action> 命令对 auditd 执行其他操作,其中 <action> 可以是以下之一:
stop-
停止
auditd。 restart-
重新启动
auditd。 reload或force-reload-
重新加载
/etc/audit/auditd.conf文件中auditd的配置。 rotate-
轮转
/var/log/audit/目录中的日志文件。 resume- 在其之前被暂停后重新恢复审计事件记录,例如,当保存审计日志文件的磁盘分区中没有足够的可用空间时。
condrestart或try-restart-
只有当
auditd运行时才重新启动它。 status-
显示
auditd的运行状态。
service命令是与 auditd 守护进程正确交互的唯一方法。您需要使用 service 命令,以便正确记录 auid 值。您只将 systemctl 命令用于两个操作: enable 和 status。
37.5. 了解审计日志文件 复制链接链接已复制到粘贴板!
默认情况下,审计系统将日志条目存储在 /var/log/audit/audit.log 文件中;如果启用了日志轮转,则轮转的 audit.log 文件也在存储同一个目录中。
添加以下审计规则,来记录读取或修改 /etc/ssh/sshd_config 文件的每次尝试:
auditctl -w /etc/ssh/sshd_config -p warx -k sshd_config
# auditctl -w /etc/ssh/sshd_config -p warx -k sshd_config
如果 auditd 守护进程正在运行,使用以下命令在审计日志文件中创建新事件,例如:
cat /etc/ssh/sshd_config
$ cat /etc/ssh/sshd_config
audit.log 文件中的该事件如下。
type=SYSCALL msg=audit(1364481363.243:24287): arch=c000003e syscall=2 success=no exit=-13 a0=7fffd19c5592 a1=0 a2=7fffd19c4b50 a3=a items=1 ppid=2686 pid=3538 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts0 ses=1 comm="cat" exe="/bin/cat" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="sshd_config" type=CWD msg=audit(1364481363.243:24287): cwd="/home/shadowman" type=PATH msg=audit(1364481363.243:24287): item=0 name="/etc/ssh/sshd_config" inode=409248 dev=fd:00 mode=0100600 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 nametype=NORMAL cap_fp=none cap_fi=none cap_fe=0 cap_fver=0 type=PROCTITLE msg=audit(1364481363.243:24287) : proctitle=636174002F6574632F7373682F737368645F636F6E666967
type=SYSCALL msg=audit(1364481363.243:24287): arch=c000003e syscall=2 success=no exit=-13 a0=7fffd19c5592 a1=0 a2=7fffd19c4b50 a3=a items=1 ppid=2686 pid=3538 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts0 ses=1 comm="cat" exe="/bin/cat" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="sshd_config"
type=CWD msg=audit(1364481363.243:24287): cwd="/home/shadowman"
type=PATH msg=audit(1364481363.243:24287): item=0 name="/etc/ssh/sshd_config" inode=409248 dev=fd:00 mode=0100600 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 nametype=NORMAL cap_fp=none cap_fi=none cap_fe=0 cap_fver=0
type=PROCTITLE msg=audit(1364481363.243:24287) : proctitle=636174002F6574632F7373682F737368645F636F6E666967
以上事件由四个记录组成,它们共享相同的时间戳和序列号。记录始终以 type= 关键字开头。每个记录由多个 name=value 对组成,它们之间由空格或逗号分开。对上述事件的详细分析如下:
第一条记录
type=SYSCALL-
type字段包含记录的类型。在本例中,SYSCALL值指定此记录是由对内核的系统调用触发的。
msg=audit(1364481363.243:24287):msg字段记录:-
记录的时间戳和唯一 ID 的格式为
audit(time_stamp:ID)。如果多个记录是作为同一审计事件的一部分而产生的,则它们共享相同的时间戳和 ID。时间戳使用 Unix 时间格式 - 自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数。 -
内核或用户空间应用程序提供的各种特定于事件的
name=value对。
-
记录的时间戳和唯一 ID 的格式为
arch=c000003e-
arch字段包含系统的 CPU 架构信息。该值c000003e以十六进制表示法编码。当使用ausearch命令搜索审计记录时,请使用-i或--interpret选项来自动将十六进制值转换成人类可读的等效值。c000003e值被解释为x86_64。 syscall=2-
syscall字段记录了发送到内核的系统调用的类型。值2可以与/usr/include/asm/unistd_64.h文件中人类可读的等效值匹配。在本例中,2是打开系统调用。请注意,ausyscall工具允许您将系统调用号转换为人类可读的等效值。使用ausyscall --dump命令显示所有系统调用及其编号的列表。如需更多信息,请参阅ausyscall(8)手册页。 success=no-
success字段记录了该特定事件中记录的系统调用是成功还是失败。在这种情况下,调用不成功。 exit=-13exit字段包含一个值,指定系统调用返回的退出码。此值因不同的系统调用而不同。您可以使用以下命令将值解释成人类可读的等效值:ausearch --interpret --exit -13
# ausearch --interpret --exit -13Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,上例假定您的审计日志包含一个失败的事件,其退出码为
-13。a0=7fffd19c5592,a1=0,a2=7fffd19c5592,a3=a-
a0至a3字段记录了该事件中系统调用的前四个参数,用十六进制符号编码。这些参数取决于使用的系统调用,可以通过ausearch工具来解释它们。 items=1-
items字段包含系统调用记录后面的 PATH 辅助记录的数量。 ppid=2686-
ppid字段记录了父进程ID(PPID)。在这种情况下,2686是父进程(如bash)的 PPID 。 pid=3538-
pid字段记录了进程 ID(PID)。在本例中,3538是cat进程的 PID。 auid=1000-
auid字段记录了审计用户 ID,即loginuid。此 ID 在登录时分配给用户,并被每个进程继承,即使用户的身份改变了,例如使用su - john命令切换用户帐户。 uid=1000-
uid字段记录了启动分析过程的用户的用户 ID。使用以下命令可以将用户 ID 解释成用户名:ausearch -i --uid UID。 gid=1000-
gid字段记录了启动分析过程的用户的组 ID。 euid=1000-
euid字段记录了启动分析过程的用户的有效用户 ID。 suid=1000-
suid字段记录了启动分析过程的用户的设置用户 ID。 fsuid=1000-
fsuid字段记录了启动分析进程的用户的文件系统用户 ID。 egid=1000-
egid字段记录了启动分析过程的用户的有效组 ID。 sgid=1000-
sgid字段记录了启动分析过程的用户的组 ID。 fsgid=1000-
fsgid字段记录了启动分析进程的用户的文件系统组 ID。 tty=pts0-
tty字段记录了分析过程被调用的终端。 ses=1-
ses字段记录了分析过程被调用的会话的会话 ID。 comm="cat"-
comm字段记录了用于调用分析过程的命令行名称。在本例中,cat命令用于触发此审计事件。 exe="/bin/cat"-
exe字段记录了用于调用分析过程的可执行文件的路径。 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023-
subj字段记录了被分析的进程在执行时被标记的 SELinux 上下文。 key="sshd_config"-
key记录了与在审计日志中生成该事件的规则相关联的管理员定义的字符串。
第二条记录
type=CWD在第二条记录中,
type字段值为CWD- 当前工作目录。此类型用于记录从中调用第一条记录中指定的系统调用的进程的工作目录。此记录的目的是记录当前进程的位置,以防在相关 PATH 记录中捕获到相对路径。这样,就可以重建绝对路径。
msg=audit(1364481363.243:24287)-
msg字段持有与第一条记录中的值相同的时间戳和 ID 值。时间戳使用 Unix 时间格式 - 自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数。 cwd="/home/user_name"-
cwd字段包含系统调用所在目录的路径。
第三条记录
type=PATH-
在第三条记录中,
type字段值为PATH。审计事件包含作为参数传递给系统调用的每个路径的PATH类型记录。在这个审计事件中,只有一个路径(/etc/ssh/sshd_config) 被用作参数。 msg=audit(1364481363.243:24287):-
msg字段拥有与第一和第二条记录中的值相同的时间戳和 ID 值。 item=0-
item字段表示在SYSCALL类型记录所引用的项目总数中,当前记录是哪个项目。这个数是以零为基础的;值为0表示它是第一项。 name="/etc/ssh/sshd_config"-
name字段记录了作为参数传递给系统调用的文件或目录的路径。在本例中,它是/etc/ssh/sshd_config文件。 inode=409248inode字段包含与该事件中记录的文件或目录相关联的 inode 号。以下命令显示与409248inode 号相关联的文件或目录:find / -inum 409248 -print /etc/ssh/sshd_config
# find / -inum 409248 -print /etc/ssh/sshd_configCopy to Clipboard Copied! Toggle word wrap Toggle overflow dev=fd:00-
dev字段指定了包含该事件中记录的文件或目录的设备的次要和主要 ID。在本例中,值表示/dev/fd/0设备。 mode=0100600-
mode字段记录文件或目录权限,由数字标记。它是st_mode字段中的stat命令返回。如需更多信息,请参阅stat(2)手册页。在这种情况下,0100600可以解释为-rw-------,这意味着只有 root 用户对/etc/ssh/sshd_config文件具有读和写的权限。 ouid=0-
ouid字段记录了对象所有者的用户 ID。 ogid=0-
ogid字段记录了对象所有者的组 ID。 rdev=00:00-
rdev字段包含一个记录的设备标识符,仅用于特殊文件。在这种情况下,不会使用它,因为记录的文件是一个常规文件。 obj=system_u:object_r:etc_t:s0-
obj字段记录了 SELinux 上下文,在执行时,记录的文件或目录被贴上了标签。 nametype=NORMAL-
nametype字段记录了每个路径记录在给定系统调用的上下文中的操作意图。 cap_fp=none-
cap_fp字段记录了与设置文件或目录对象的基于文件系统的允许能力有关的数据。 cap_fi=none-
cap_fi字段记录了与文件或目录对象的基于继承文件系统的能力设置有关的数据。 cap_fe=0-
cap_fe字段记录了文件或目录对象基于文件系统能力的有效位的设置。 cap_fver=0-
cap_fver字段记录了文件或目录对象基于文件系统能力的版本。
第四条记录
type=PROCTITLE-
type字段包含记录的类型。在本例中,PROCTITLE值指定此记录提供触发此审计事件的完整命令行,该事件是由对内核的系统调用触发的。 proctitle=636174002F6574632F7373682F737368645F636F6E666967-
proctitle字段记录了用于调用分析过程的命令的完整命令行。该字段采用十六进制表示法编码,不允许用户影响审计日志解析器。对触发此审计事件的命令进行文本解码。当使用ausearch命令搜索审计记录时,请使用-i或--interpret选项来自动将十六进制值转换成人类可读的等效值。636174002F6574632F7373682F737368645F636F6E666967值解释为cat /etc/ssh/sshd_config。
37.6. 使用 auditctl 来定义和执行审计规则 复制链接链接已复制到粘贴板!
审计系统根据一组规则进行操作,这些规则定义日志文件中所捕获的内容。使用 auditctl 工具,可以在命令行或 /etc/audit/rules.d/ 目录中设置审计规则。
auditctl 命令使您能够控制审计系统的基本功能,并定义决定记录哪些审计事件的规则。
文件系统规则示例
要定义一条规则,记录对
/etc/passwd文件的所有写访问和每个属性的修改:auditctl -w /etc/passwd -p wa -k passwd_changes
# auditctl -w /etc/passwd -p wa -k passwd_changesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要定义一条规则,记录对
/etc/selinux/目录中所有文件的写访问和每个属性的修改:auditctl -w /etc/selinux/ -p wa -k selinux_changes
# auditctl -w /etc/selinux/ -p wa -k selinux_changesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
系统调用规则示例
要定义一条规则,当程序每次使用
adjtimex或settimeofday系统调用时就创建一条日志,系统使用 64 位构架:auditctl -a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_change
# auditctl -a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_changeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 定义一条规则,在 ID 为 1000 或以上的系统用户每次删除或重命名文件时创建一条日志:
auditctl -a always,exit -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete
# auditctl -a always,exit -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k deleteCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,
-F auid!=4294967295选项用于排除未设置登录 UID 的用户。
可执行文件规则
要定义一条规则,记录所有 /bin/id 程序的执行,请执行以下命令:
auditctl -a always,exit -F exe=/bin/id -F arch=b64 -S execve -k execution_bin_id
# auditctl -a always,exit -F exe=/bin/id -F arch=b64 -S execve -k execution_bin_id
37.7. 定义持久性审计规则 复制链接链接已复制到粘贴板!
要定义在重启过程中保持不变的审计规则,必须直接将其包含在 /etc/audit/rules.d/audit.rules 文件中,或者使用 augenrules 程序读取位于/etc/audit/rules.d/ 目录中的规则。
请注意,每次 auditd 服务启动时都会生成 /etc/audit/audit.rules 文件。/etc/audit/rules.d/ 中的文件使用相同的 auditctl 命令行语法来指定规则。哈希符号(#)后面的空行和文本将被忽略。
另外,您可以使用 auditctl 命令来从用 -R 选项指定的文件中读取规则,例如:
auditctl -R /usr/share/audit/sample-rules/30-stig.rules
# auditctl -R /usr/share/audit/sample-rules/30-stig.rules
37.8. 预配置的审计规则文件,以符合标准 复制链接链接已复制到粘贴板!
要配置 Audit 以符合特定的认证标准(如 OSPP、PCI DSS 或 STIG),您可以使用 audit 软件包安装的一组预配置的规则文件来作为起点。示例规则位于 /usr/share/audit/sample-rules 目录中。
sample-rules 目录中的 Audit 示例规则并不详尽,也不是最新的,因为安全标准是动态的,并可能会发生变化。提供这些规则仅为了演示如何构建和编写审计规则。它们不能确保立即符合最新的安全标准。要根据特定安全准则使您的系统符合最新的安全标准,请使用 基于 SCAP 的安全合规性工具。
30-nispom.rules- 满足国家工业安全计划操作手册"信息系统安全"一章中指定的要求的审计规则配置.
30-ospp-v42*.rules- 满足 OSPP(通用目的操作系统保护配置文件)配置文件版本 4.2 中定义的要求的审计规则配置。
30-pci-dss-v31.rules- 满足支付卡行业数据安全标准(PCI DSS)v3.1 要求的审计规则配置。
30-stig.rules- 满足安全技术实施指南(STIG)要求的审计规则配置。
要使用这些配置文件,将其复制到 /etc/audit/rules.d/ 目录中,并使用 augenrules --load 命令,例如:
cd /usr/share/audit/sample-rules/ cp 10-base-config.rules 30-stig.rules 31-privileged.rules 99-finalize.rules /etc/audit/rules.d/ augenrules --load
# cd /usr/share/audit/sample-rules/
# cp 10-base-config.rules 30-stig.rules 31-privileged.rules 99-finalize.rules /etc/audit/rules.d/
# augenrules --load
您可以使用编号方案对审核规则进行排序。如需更多信息,请参阅 /usr/share/audit/sample-rules/README-rules 文件。
37.9. 使用 augenrules 来定义持久性规则 复制链接链接已复制到粘贴板!
augenrules脚本读取位于/etc/audit/rules.d/目录下的规则,并将它们编译成audit.rures文件。这个脚本会根据文件的自然排列顺序,按特定顺序处理以 .rules 结尾的所有文件。这个目录中的文件被组织到具有如下含义的组中:
- 10
- 内核和 auditctl 配置
- 20
- 可以匹配常规规则但您想要不同匹配的规则
- 30
- 主规则
- 40
- 可选规则
- 50
- 特定于服务器的规则
- 70
- 系统本地规则
- 90
- 完成(不可变)
规则并非是一次全部使用。它们是策略的一部分,应仔细考虑,并将单个文件复制到 /etc/audit/rules.d/。例如,要在 STIG 配置中设置系统,请复制规则 10-base-config、30-stig、31-privileged 和 99-finalize。
在 /etc/audit/rules.d/ 目录中有了规则之后,运行带有 --load 参数的 augenrules 脚本来加载它们:
37.10. 禁用 augenrules 复制链接链接已复制到粘贴板!
使用以下步骤来禁用 augenrules 工具。这会将审计切换为使用 /etc/audit/audit.rules 文件中定义的规则。
流程
将
/usr/lib/systemd/system/auditd.service文件复制到/etc/systemd/system/目录中:cp -f /usr/lib/systemd/system/auditd.service /etc/systemd/system/
# cp -f /usr/lib/systemd/system/auditd.service /etc/systemd/system/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在您选择的文本编辑器中编辑
/etc/systemd/system/auditd.service文件,例如:vi /etc/systemd/system/auditd.service
# vi /etc/systemd/system/auditd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注释掉包含
augenrules的行,将包含auditctl -R命令的行取消注释:#ExecStartPost=-/sbin/augenrules --load ExecStartPost=-/sbin/auditctl -R /etc/audit/audit.rules
#ExecStartPost=-/sbin/augenrules --load ExecStartPost=-/sbin/auditctl -R /etc/audit/audit.rulesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重新载入
systemd守护进程以获取auditd.service文件中的修改:systemctl daemon-reload
# systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
auditd服务:service auditd restart
# service auditd restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow
37.11. 设置审计来监控软件更新 复制链接链接已复制到粘贴板!
在 RHEL 8.6 及更高版本中,您可以使用预配置的规则 44-installers.rules 配置审计,来监控安装软件的以下工具:
-
dnf[2] -
yum -
pip -
npm -
cpan -
gem -
luarocks
默认情况下,rpm 在安装或更新软件包时就已提供审计 SOFTWARE_UPDATE 事件。您可以通过在命令行上输入 ausearch -m SOFTWARE_UPDATE 来列出它们。
在 RHEL 8.5 和更早版本中,您可以手动添加规则来监控工具,这些工具将软件安装到 /etc/audit/rules.d/ 目录中的 .rules 文件中。
预配置的规则文件不能用于 ppc64le 和 aarch64 架构的系统。
先决条件
-
auditd是根据 为安全环境配置 auditd 中提供的设置进行配置的。
流程
在 RHEL 8.6 及更高版本中,将
/usr/share/audit/sample-rules/目录中的预配置的规则文件44-installers.rules复制到/etc/audit/rules.d/目录中:cp /usr/share/audit/sample-rules/44-installers.rules /etc/audit/rules.d/
# cp /usr/share/audit/sample-rules/44-installers.rules /etc/audit/rules.d/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 RHEL 8.5 及更早版本中,在
/etc/audit/rules.d/目录中创建一个名为44-installers.rules的新文件,并插入以下规则:-a always,exit -F perm=x -F path=/usr/bin/dnf-3 -F key=software-installer -a always,exit -F perm=x -F path=/usr/bin/yum -F
-a always,exit -F perm=x -F path=/usr/bin/dnf-3 -F key=software-installer -a always,exit -F perm=x -F path=/usr/bin/yum -FCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以使用相同的语法为安装软件的其他工具,如
pip和npm添加额外的规则。加载审计规则:
augenrules --load
# augenrules --loadCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
列出载入的规则:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 执行安装,例如:
yum reinstall -y vim-enhanced
# yum reinstall -y vim-enhancedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在审计日志中搜索最近的安装事件,例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
dnf 在 RHEL 中是符号链接,因此 dnf 审计规则中的路径必须包含符号链接的目标。要接收正确的审计事件,请通过将 path=/usr/bin/dnf 路径改为 /usr/bin/dnf-3 来修改 44-installers.rules 文件。
37.12. 使用审计监控用户登录时间 复制链接链接已复制到粘贴板!
要监控特定时间哪个用户登录了,您不需要以任何特殊的方式配置审计。您可以使用 ausearch 或 aureport 工具,它们提供不同的方法来展示相同的信息。
先决条件
-
auditd是根据 为安全环境配置 auditd 中提供的设置进行配置的。
流程
要显示用户登录的时间,请使用以下命令之一:
在审计日志中搜索
USER_LOGIN消息类型:ausearch -m USER_LOGIN -ts '12/02/2020' '18:00:00' -sv no time->Mon Nov 22 07:33:22 2021 type=USER_LOGIN msg=audit(1637584402.416:92): pid=1939 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:sshd_t:s0-s0:c0.c1023 msg='op=login acct="(unknown)" exe="/usr/sbin/sshd" hostname=? addr=10.37.128.108 terminal=ssh res=failed'
# ausearch -m USER_LOGIN -ts '12/02/2020' '18:00:00' -sv no time->Mon Nov 22 07:33:22 2021 type=USER_LOGIN msg=audit(1637584402.416:92): pid=1939 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:sshd_t:s0-s0:c0.c1023 msg='op=login acct="(unknown)" exe="/usr/sbin/sshd" hostname=? addr=10.37.128.108 terminal=ssh res=failed'Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
您可以使用
-ts选项指定日期和时间。如果不使用这个选项,ausearch将提供从当天开始的结果,如果您省略时间,ausearch将提供从午夜开始的结果。 -
您可以使用
-sv yes选项来过滤成功的登录尝试,-sv no用来过滤失败的登录尝试。
-
您可以使用
将
ausearch命令的原始输出传送给aulast工具,它以类似于last命令的输出格式显示输出。例如:ausearch --raw | aulast --stdin root ssh 10.37.128.108 Mon Nov 22 07:33 - 07:33 (00:00) root ssh 10.37.128.108 Mon Nov 22 07:33 - 07:33 (00:00) root ssh 10.22.16.106 Mon Nov 22 07:40 - 07:40 (00:00) reboot system boot 4.18.0-348.6.el8 Mon Nov 22 07:33
# ausearch --raw | aulast --stdin root ssh 10.37.128.108 Mon Nov 22 07:33 - 07:33 (00:00) root ssh 10.37.128.108 Mon Nov 22 07:33 - 07:33 (00:00) root ssh 10.22.16.106 Mon Nov 22 07:40 - 07:40 (00:00) reboot system boot 4.18.0-348.6.el8 Mon Nov 22 07:33Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
aureport命令及--login -i选项来显示登录事件列表。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
部分 VI. 内核的设计 复制链接链接已复制到粘贴板!
第 38 章 Linux 内核 复制链接链接已复制到粘贴板!
了解由红帽(红帽内核)提供和维护的 Linux 内核和 Linux 内核 RPM 软件包。使红帽内核保持更新,这可以确保操作系统具有最新的程序错误修复、性能增强和补丁,并与新硬件兼容。
38.1. 内核是什么 复制链接链接已复制到粘贴板!
内核是 Linux 操作系统的核心部分,其管理系统资源,并提供硬件和软件应用程序之间的接口。
红帽内核是一个基于上游 Linux 主线内核的定制内核,红帽工程师对其进行了进一步的开发和强化,专注于稳定性和与最新技术和硬件的兼容性。
在红帽发布新内核版本前,内核需要通过一组严格的质量保证测试。
红帽内核以 RPM 格式打包,以便它们可以通过 YUM 软件包管理器轻松地升级和验证。
红帽不支持 不是 由红帽编译的内核。
38.2. RPM 软件包 复制链接链接已复制到粘贴板!
RPM 软件包由用于安装和删除这些文件的文件和元数据的存档组成。具体来说,RPM 软件包包含以下部分:
- GPG 签名
- GPG 签名用于验证软件包的完整性。
- 标头(软件包元数据)
- RPM 软件包管理器使用此元数据来确定软件包依赖项、安装文件的位置及其他信息。
- payload
-
有效负载是一个
cpio归档,其中包含要安装到系统的文件。
RPM 软件包有两种类型。这两种类型都共享文件格式和工具,但内容不同,并实现不同的目的:
源 RPM(SRPM)
SRPM 包含源代码和一个
spec文件,该文件描述了如何将源代码构建为二进制 RPM。另外,SRPM 可以包含源代码的补丁。二进制 RPM
一个二进制 RPM 包含了根据源代码和补丁构建的二进制文件。
38.3. Linux 内核 RPM 软件包概述 复制链接链接已复制到粘贴板!
kernel RPM 是一个元数据软件包,它不包含任何文件,而是保证正确安装了以下子软件包:
kernel-core-
提供内核的二进制镜像、所有与
initramfs相关的对象来引导系统,以及确保核心功能的最小内核模块数量。仅在虚拟和云环境中使用这个子软件包来为 Red Hat Enterprise Linux 8 内核提供一个快速引导时间和小磁盘空间。 kernel-modules-
提供
kernel-core中不存在的其余内核模块。
上述 kernel 子软件包中的一部分旨在帮助系统管理员减少需要维护的范围,特别是在虚拟化和云环境中。
例如,可选内核软件包:
kernel-modules-extra- 为罕见硬件提供内核模块。默认禁用模块的加载。
kernel-debug- 提供了启用了许多调试选项的内核,以便进行内核诊断,以降低性能为代价。
kernel-tools- 提供了操作 Linux 内核和支持文档的工具。
kernel-devel-
提供了内核标头和 makefile,来足以针对
kernel软件包构建模块。 kernel-abi-stablelists-
提供与 RHEL 内核 ABI 相关的信息,包括外部 Linux 内核模块所需的内核符号列表和
yum插件以协助执行。 kernel-headers- 包括指定 Linux 内核和用户空间库以及程序间接口的 C 标头文件。头文件定义构建大多数标准程序所需的结构和常量。
38.4. 显示内核软件包的内容 复制链接链接已复制到粘贴板!
通过查询存储库,您可以看到内核软件包是否提供了一个特定的文件,如模块。不需要下载或安装软件包来显示文件列表。
使用 dnf 工具查询文件列表,例如 kernel-core、kernel-modules-core 或 kernel-modules 软件包的文件列表。请注意,kernel 软件包是一个不包含任何文件的元数据软件包。
流程
列出软件包的可用版本:
yum repoquery <package_name>
$ yum repoquery <package_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示软件包中的文件列表:
yum repoquery -l <package_name>
$ yum repoquery -l <package_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
38.5. 安装特定的内核版本 复制链接链接已复制到粘贴板!
使用 yum 软件包管理器安装新内核。
流程
要安装特定的内核版本,请输入以下命令:
yum install kernel-{version}# yum install kernel-{version}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
38.6. 更新内核 复制链接链接已复制到粘贴板!
使用 yum 软件包管理器更新内核。
流程
要更新内核,请输入以下命令:
yum update kernel
# yum update kernelCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令将内核以及所有依赖项更新至最新可用版本。
- 重启您的系统以使更改生效。
当从 RHEL 7 升级到 RHEL 8 时,请遵循 从 RHEL 7 升级到 RHEL 8 文档中的相关部分。
38.7. 将内核设置为默认 复制链接链接已复制到粘贴板!
使用 grubby 命令行工具和 GRUB 将特定内核设置为默认。
流程
使用
grubby工具将内核设置为默认。输入以下命令,使用
grubby工具将内核设置为默认:grubby --set-default $kernel_path
# grubby --set-default $kernel_pathCopy to Clipboard Copied! Toggle word wrap Toggle overflow 命令使用不带
.conf后缀的计算机 ID 作为参数。注意机器 ID 位于
/boot/loader/entries/目录中。
使用
id参数将内核设置为默认。使用
id参数列出引导条目,然后将所需的内核设置为默认:grubby --info ALL | grep id grubby --set-default /boot/vmlinuz-<version>.<architecture>
# grubby --info ALL | grep id # grubby --set-default /boot/vmlinuz-<version>.<architecture>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意要使用
title参数列出引导条目,请执行# grubby --info=ALL | grep title命令。
仅为下次引导设置默认内核。
执行以下命令,仅在下次使用
grub2-reboot命令重新引导时设置默认内核:grub2-reboot <index|title|id>
# grub2-reboot <index|title|id>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 警告小心地为下次启动设置默认内核。安装新的内核 RPM、自构建内核,以及手动将条目添加到
/boot/loader/entries/目录中可能会更改索引值。
第 39 章 配置内核命令行参数 复制链接链接已复制到粘贴板!
使用内核命令行参数,您可以在引导时更改 Red Hat Enterprise Linux 内核的某些方面的行为。作为系统管理员,您可以控制在引导时设置哪些选项。请注意,某些内核行为只能在引导时设置。
通过修改内核命令行参数来更改系统行为可能会对您的系统造成负面影响。在生产环境中部署更改前,始终测试更改。如需进一步指导,请联系红帽支持团队。
39.1. 什么是内核命令行参数 复制链接链接已复制到粘贴板!
使用内核命令行参数,您可以覆盖默认值并设置特定的硬件设置。在引导时,您可以配置以下功能:
- Red Hat Enterprise Linux 内核
- 初始 RAM 磁盘
- 用户空间特性
默认情况下,使用 GRUB 引导装载程序的系统的内核命令行参数定义在每个内核引导条目的 /boot/grub2/grubenv 文件的 kernelopts 变量中。
对于 IBM Z,内核命令行参数保存在引导条目配置文件中,因为 zipl 引导装载程序不支持环境变量。因此,无法使用 kernelopts 环境变量。
您可以使用 grubby 工具操作引导装载程序配置文件。使用 grubby,您可以执行以下操作:
- 更改默认的引导条目。
- 从 GRUB 菜单条目中添加或删除参数。
39.2. 了解引导条目 复制链接链接已复制到粘贴板!
引导条目是存储在配置文件中并绑定到特定内核版本的选项集合。在实践中,您的引导条目至少与您所安装的系统数量相同。引导条目配置文件位于 /boot/loader/entries/ 目录中:
6f9cc9cb7d7845d49698c9537337cedc-4.18.0-5.el8.x86_64.conf
6f9cc9cb7d7845d49698c9537337cedc-4.18.0-5.el8.x86_64.conf
以上文件名由存储在 /etc/machine-id 文件中的计算机 ID 和内核版本组成。
引导条目配置文件包含有关内核版本、初始 ramdisk 镜像和包含内核命令行参数的 kernelopts 环境变量的信息。配置文件可以包含以下内容:
kernelopts 环境变量在 /boot/grub2/grubenv 文件中定义。
39.3. 为所有引导条目更改内核命令行参数 复制链接链接已复制到粘贴板!
更改系统上所有引导条目的内核命令行参数。
先决条件
-
grubby工具已安装在您的系统上。 -
zipl工具已安装在 IBM Z 系统上。
流程
添加参数:
grubby --update-kernel=ALL --args="<NEW_PARAMETER>"
# grubby --update-kernel=ALL --args="<NEW_PARAMETER>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于使用 GRUB 引导加载程序的系统,该命令会通过向该文件中的
kernelopts变量添加一个新内核参数来更新/boot/grub2/grubenv文件。在 IBM Z 上,更新引导菜单:
zipl
# ziplCopy to Clipboard Copied! Toggle word wrap Toggle overflow
删除参数:
grubby --update-kernel=ALL --remove-args="<PARAMETER_TO_REMOVE>"
# grubby --update-kernel=ALL --remove-args="<PARAMETER_TO_REMOVE>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 IBM Z 上,更新引导菜单:
zipl
# ziplCopy to Clipboard Copied! Toggle word wrap Toggle overflow
新安装的内核继承之前配置的内核中的内核命令行参数。
39.4. 为单一引导条目更改内核命令行参数 复制链接链接已复制到粘贴板!
对系统上单个引导条目的内核命令行参数进行更改。
先决条件
-
grubby和zipl工具已安装在您的系统上。
流程
添加参数:
grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="<NEW_PARAMETER>"
# grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="<NEW_PARAMETER>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 IBM Z 上,更新引导菜单:
zipl
# ziplCopy to Clipboard Copied! Toggle word wrap Toggle overflow
删除参数:
grubby --update-kernel=/boot/vmlinuz-$(uname -r) --remove-args="<PARAMETER_TO_REMOVE>"
# grubby --update-kernel=/boot/vmlinuz-$(uname -r) --remove-args="<PARAMETER_TO_REMOVE>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 IBM Z 上,更新引导菜单:
zipl
# ziplCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在使用 grub.cfg 文件的系统上,默认情况下每个内核引导条目的 options 参数设置为 kernelopts 变量。此变量在 /boot/grub2/grubenv 配置文件中定义。
在 GRUB 系统中:
-
如果为所有引导条目修改了内核命令行参数,
grubby实用程序会更新/boot/grub2/grubenv文件中的kernelopts变量。 -
如果为单个引导条目修改了内核命令行参数,则扩展
kernelopts变量,修改内核参数,结果值存储在相应的引导条目的/boot/loader/entries/<RELEVANT_KERNEL_BOOT_ENTRY.conf>文件中。
在 zIPL 系统中:
-
grubby修改单个内核引导条目的内核命令行参数并将其存储在/boot/loader/entries/<ENTRY>.conf文件中。
39.5. 在引导时临时更改内核命令行参数 复制链接链接已复制到粘贴板!
通过在单个引导过程中更改内核参数,对内核惨淡条目进行临时更改。
这个过程只适用于单一引导,且不会永久进行更改。
流程
- 引导到 GRUB 引导菜单。
- 选择您要启动的内核。
- 按 e 键编辑内核参数。
-
通过移动光标来找到内核命令行。在 64 位 IBM Power 系列和基于 x86-64 BIOS 的系统上内核命令行以
linux开头,或在 UEFI 系统上以linuxefi开头。 将光标移至行末。
注意按 Ctrl+a 跳到行首,按 Ctrl+e 跳到行尾。在某些系统上,Home 和 End 键也可能会正常工作。
根据需要编辑内核参数。例如,要在紧急模式下运行系统,请在
linux行末尾添加emergency参数:linux ($root)/vmlinuz-4.18.0-348.12.2.el8_5.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 emergency
linux ($root)/vmlinuz-4.18.0-348.12.2.el8_5.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 emergencyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要启用系统消息,请删除
rhgb和quiet参数。- 按 Ctrl+x 使用所选内核以及修改的命令行参数进行引导。
如果按 Esc 键离开命令行编辑,它将丢弃用户做的所有更改。
39.6. 配置 GRUB 设置以启用串行控制台连接 复制链接链接已复制到粘贴板!
当您需要连接到无头服务器或嵌入式系统,且网络中断时,串行控制台非常有用。或者,当您需要避免安全规则,并获得不同系统上的登录访问权限时。
您需要配置一些默认的 GRUB 设置,以使用串行控制台连接。
先决条件
- 您有 root 权限。
流程
将下面两行添加到
/etc/default/grub文件中:GRUB_TERMINAL="serial" GRUB_SERIAL_COMMAND="serial --speed=9600 --unit=0 --word=8 --parity=no --stop=1"
GRUB_TERMINAL="serial" GRUB_SERIAL_COMMAND="serial --speed=9600 --unit=0 --word=8 --parity=no --stop=1"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 第一行将禁用图形终端。
GRUB_TERMINAL键覆盖GRUB_TERMINAL_INPUT和GRUB_TERMINAL_OUTPUT键的值。第二行调整了波特率(
--speed),奇偶校验和其他值以适合您的环境和硬件。请注意,对于以下日志文件等任务,最好使用更高的波特率,如 115200。更新 GRUB 配置文件。
在基于 BIOS 的机器上:
grub2-mkconfig -o /boot/grub2/grub.cfg
# grub2-mkconfig -o /boot/grub2/grub.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在基于 UEFI 的机器上:
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow
- 重启系统以使更改生效。
第 40 章 在运行时配置内核参数 复制链接链接已复制到粘贴板!
作为系统管理员,您可以修改 Red Hat Enterprise Linux 内核在运行时行为的很多方面。使用 sysctl 命令,并修改 /etc/sysctl.d/ 和 /proc/sys/ 目录中的配置文件来在运行时配置内核参数。
在产品系统中配置内核参数需要仔细规划。非计划的更改可能导致内核不稳定,需要重启系统。在更改任何内核值之前,验证您是否正在使用有效选项。
有关在 IBM DB2 上调整内核的更多信息,请参阅 为 IBM DB2 调整 Red Hat Enterprise Linux。
40.1. 什么是内核参数 复制链接链接已复制到粘贴板!
内核参数是可调整的值,您可以在系统运行时调整。请注意,要使更改生效,您不需要重启系统或重新编译内核。
可以通过以下方法处理内核参数:
-
sysctl命令 -
挂载于
/proc/sys/目录的虚拟文件系统 -
/etc/sysctl.d/目录中的配置文件
Tunables 被内核子系统划分为不同的类。Red Hat Enterprise Linux 有以下可调整类:
| 可调整类 | 子系统 |
|---|---|
|
| 执行域和个人 |
|
| 加密接口 |
|
| 内核调试接口 |
|
| 特定于设备的信息 |
|
| 全局和特定文件系统的 tunables |
|
| 全局内核 tunables |
|
| 网络 tunables |
|
| Sun 远程过程调用 (NFS) |
|
| 用户命名空间限制 |
|
| 调整和管理内存、缓冲和缓存 |
40.2. 使用 sysctl 临时配置内核参数 复制链接链接已复制到粘贴板!
使用 sysctl 命令在运行时临时设置内核参数。命令也可用于列出和过滤可调项。
先决条件
- 根权限
流程
列出所有参数及其值。
sysctl -a
# sysctl -aCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意# sysctl -a命令显示内核参数,可在运行时和系统启动时调整。要临时配置一个参数,请输入:
sysctl <TUNABLE_CLASS>.<PARAMETER>=<TARGET_VALUE>
# sysctl <TUNABLE_CLASS>.<PARAMETER>=<TARGET_VALUE>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上面的示例命令在系统运行时更改了参数值。更改将立即生效,无需重新启动。
注意在系统重启后,所在的改变会返回到默认状态。
40.3. 使用 sysctl 永久配置内核参数 复制链接链接已复制到粘贴板!
使用 sysctl 命令永久设置内核参数。
先决条件
- 根权限
流程
列出所有参数。
sysctl -a
# sysctl -aCopy to Clipboard Copied! Toggle word wrap Toggle overflow 该命令显示所有可在运行时配置的内核参数。
永久配置一个参数:
sysctl -w <TUNABLE_CLASS>.<PARAMETER>=<TARGET_VALUE> >> /etc/sysctl.conf
# sysctl -w <TUNABLE_CLASS>.<PARAMETER>=<TARGET_VALUE> >> /etc/sysctl.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 示例命令会更改可调值,并将其写入
/etc/sysctl.conf文件,该文件会覆盖内核参数的默认值。更改会立即并永久生效,无需重启。
要永久修改内核参数,您还可以手动更改 /etc/sysctl.d/ 目录中的配置文件。
40.4. 使用 /etc/sysctl.d/ 中的配置文件调整内核参数 复制链接链接已复制到粘贴板!
您必须手动修改 /etc/sysctl.d/ 目录中的配置文件来永久设置内核参数。
先决条件
- 您有 root 权限。
流程
在
/etc/sysctl.d/中创建新配置文件:vim /etc/sysctl.d/<some_file.conf>
# vim /etc/sysctl.d/<some_file.conf>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 包括内核参数,每行一个:
<TUNABLE_CLASS>.<PARAMETER>=<TARGET_VALUE> <TUNABLE_CLASS>.<PARAMETER>=<TARGET_VALUE>
<TUNABLE_CLASS>.<PARAMETER>=<TARGET_VALUE> <TUNABLE_CLASS>.<PARAMETER>=<TARGET_VALUE>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存配置文件。
重启机器以使更改生效。
或者,在不重启的情况下应用更改:
sysctl -p /etc/sysctl.d/<some_file.conf>
# sysctl -p /etc/sysctl.d/<some_file.conf>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 该命令允许您从之前创建的配置文件中读取值。
40.5. 通过 /proc/sys/ 临时配置内核参数 复制链接链接已复制到粘贴板!
通过 /proc/sys/ 虚拟文件系统目录中的文件临时设置内核参数。
先决条件
- 根权限
流程
确定您要配置的内核参数。
ls -l /proc/sys/<TUNABLE_CLASS>/
# ls -l /proc/sys/<TUNABLE_CLASS>/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 命令返回的可写入文件可以用来配置内核。具有只读权限的文件提供了对当前设置的反馈。
为内核参数分配一个目标值。
echo <TARGET_VALUE> > /proc/sys/<TUNABLE_CLASS>/<PARAMETER>
# echo <TARGET_VALUE> > /proc/sys/<TUNABLE_CLASS>/<PARAMETER>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用命令应用的配置更改不是永久的,将在系统重启后消失。
验证
验证新设置内核参数的值。
cat /proc/sys/<TUNABLE_CLASS>/<PARAMETER>
# cat /proc/sys/<TUNABLE_CLASS>/<PARAMETER>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 41 章 安装和配置 kdump 复制链接链接已复制到粘贴板!
41.1. 安装 kdump 复制链接链接已复制到粘贴板!
在 RHEL 8 安装的新版本上,默认安装并激活 kdump 服务。
41.1.1. kdump 复制链接链接已复制到粘贴板!
kdump 是提供崩溃转储机制并生成崩溃转储或 vmcore 转储文件的服务。vmcore 包含用于分析和故障排除的系统内存内容。kdump 使用 kexec 系统调用引导到第二个内核,捕获内核 而不重启。这个内核捕获崩溃内核的内存内容并将其保存到文件中。第二个内核位于系统内存的保留部分。
当系统出现故障时,内核崩溃转储是唯一可用的信息。因此,在关键任务环境中操作 kdump 非常重要。红帽建议在常规内核更新周期中定期更新和测试 kexec-tools。这在安装新内核功能时非常重要。
如果您在机器上有多个内核,则可以为所有安装的内核或只为指定的内核启用 kdump。安装 kdump 时,系统会创建一个默认的 /etc/kdump.conf 文件。/etc/kdump.conf 包含默认的最小 kdump 配置,您可以编辑它来自定义 kdump 配置。
41.1.2. 使用 Anaconda 安装 kdump 复制链接链接已复制到粘贴板!
Anaconda 安装程序在交互安装过程中为 kdump 配置提供了一个图形界面屏幕。您可以启用 kdump ,并保留所需的内存量。
流程
在 Anaconda 安装程序中,点 KDUMP 并启用
kdump:
- 在 Kdump Memory Reservation 中,如果您必须自定义内存保留,请选择 Manual'。
在 KDUMP > Memory for Reserved (MB) 中,为
kdump设置所需的内存保留。
41.1.3. 在命令行中安装 kdump 复制链接链接已复制到粘贴板!
安装选项,如自定义 Kickstart 安装,在某些情况下不会默认安装或启用 kdump。以下流程帮助您在这种情况下启用 kdump。
先决条件
- 一个有效的 RHEL 订阅。
-
包含用于您系统 CPU 架构的
kexec-tools软件包的存储库。 -
满足
kdump配置和目标的要求。详情请查看 支持的 kdump 配置和目标。
流程
检查您的系统中是否安装了
kdump:rpm -q kexec-tools
# rpm -q kexec-toolsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果安装了该软件包,输出:
kexec-tools-2.0.17-11.el8.x86_64
kexec-tools-2.0.17-11.el8.x86_64Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果没有安装该软件包,输出:
package kexec-tools is not installed
package kexec-tools is not installedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 安装
kdump和其他必要的软件包:dnf install kexec-tools
# dnf install kexec-toolsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
从 kernel-3.10.0-693.el7 开始,kdump 支持 Intel IOMMU 驱动程序。对于 kernel-3.10.0-514[.XYZ].el7 及早期版本,您必须确保 Intel IOMMU 被禁用,以防止无响应的捕获内核。
41.2. 在命令行中配置 kdump 复制链接链接已复制到粘贴板!
在系统引导过程中为 kdump 保留内存。您可以在系统的 Grand Unified Bootloader (GRUB)配置文件中配置内存大小。内存大小取决于配置文件中指定的 crashkernel= 值以及系统物理内存的大小。
41.2.1. 估算 kdump 大小 复制链接链接已复制到粘贴板!
在规划和构建 kdump 环境时,务必要知道崩溃转储文件所需的空间。
makedumpfile --mem-usage 命令估计崩溃转储文件所需的空间。它生成一个内存使用率报告。这个报告可帮助您决定转储级别以及安全排除的页面。
流程
输入以下命令生成内存用量报告:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
makedumpfile --mem-usage 命令会以页为单位报告所需的内存。这意味着您必须根据内核页面大小计算所使用的内存大小。
41.2.2. 配置 kdump 内存用量 复制链接链接已复制到粘贴板!
为 kdump 的内存保留在系统引导过程中发生。内存大小是在系统的 Grand Unified Bootloader (GRUB)配置中设定的。内存大小取决于配置文件中指定的 crashkernel= 选项的值以及系统物理内存的大小。
您可以使用多种方式定义 crashkernel= 选项。您可以指定 crashkernel= 值或配置 auto 选项。crashkernel=auto 参数根据系统中的物理内存总量自动保留内存。配置后,内核将自动为捕获内核保留适当数量的所需内存。这有助于防止内存不足(OOM)错误。
kdump 的自动内存分配因系统硬件架构和可用内存大小而异。
如果系统自动分配低于最小内存阈值,您可以手动配置保留内存量。
先决条件
- 您在系统上具有 root 权限。
-
满足
kdump配置和目标的要求。详情请查看 支持的 kdump 配置和目标。
流程
准备
crashkernel=选项。例如:要保留 128 MB 内存,请使用:
crashkernel=128M
crashkernel=128MCopy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,您可以根据安装的内存总量将保留内存量设置为变量。变量中的内存保留语法为
crashkernel=<range1>:<size1>,<range2>:<size2>。例如:crashkernel=512M-2G:64M,2G-:128M
crashkernel=512M-2G:64M,2G-:128MCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果系统内存总量为 512 MB 和 2 GB,则命令保留 64 MB 内存。如果内存量超过 2 GB,则内存保留为 128 MB。
保留内存的偏移。
有些系统需要保留具有特定固定偏移量的内存,因为
crashkernel保留在早期发生,您可能需要为特殊用途保留更多内存。当您定义了一个偏移时,保留的内存将从这个偏移位置开始。要偏移保留的内存,请使用以下语法:crashkernel=128M@16M
crashkernel=128M@16MCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在这个示例中,
kdump从 16 MB 开始保留 128 MB 内存(物理地址0x01000000)。如果将偏移参数设置为 0 或完全省略,kdump会自动偏移保留内存。在设置变量内存保留时,也可以使用此语法。在这种情况下,偏移总是指定最后一个。例如:crashkernel=512M-2G:64M,2G-:128M@16M
crashkernel=512M-2G:64M,2G-:128M@16MCopy to Clipboard Copied! Toggle word wrap Toggle overflow
将
crashkernel=选项应用到引导装载程序配置:grubby --update-kernel=ALL --args="crashkernel=<value>"
# grubby --update-kernel=ALL --args="crashkernel=<value>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<value>替换为您在上一步中准备的crashkernel=选项的值。
41.2.3. 配置 kdump 目标 复制链接链接已复制到粘贴板!
崩溃转储通常以一个文件形式存储在本地文件系统中,直接写入设备。另外,您可以使用 NFS 或 SSH 协议通过网络发送崩溃转储。一次只能设置其中一个选项来保留崩溃转储文件。默认行为是将其存储在本地文件系统的 /var/crash/ 目录中。
先决条件
- 您在系统上具有 root 权限。
-
满足
kdump配置和目标的要求。详情请查看 支持的 kdump 配置和目标。
流程
要将崩溃转储文件保存在本地文件系统的
/var/crash/目录中,请编辑/etc/kdump.conf文件并指定路径:path /var/crash
path /var/crashCopy to Clipboard Copied! Toggle word wrap Toggle overflow 选项
path /var/crash代表kdump在其中保存崩溃转储文件的文件系统的路径。注意-
当您在
/etc/kdump.conf文件中指定转储目标时,路径是相对于指定的转储目标。 -
当您没有在
/etc/kdump.conf文件中指定转储目标时,该路径表示根目录的绝对路径。
根据当前系统中挂载的文件系统,会自动配置转储目标和调整的转储路径。
-
当您在
要保护
kdump生成的崩溃转储文件以及附带文件,您应该为目标目的地目录设置正确的属性,如用户权限和 SELinux 上下文。另外,您可以定义一个脚本,如kdump.conf文件中的kdump_post.sh,如下所示:kdump_post <path_to_kdump_post.sh>
kdump_post <path_to_kdump_post.sh>Copy to Clipboard Copied! Toggle word wrap Toggle overflow kdump_post指令指定kdump完成捕获并将崩溃转储保存到指定的目的地 后 执行的 shell 脚本或命令。您可以使用此机制扩展kdump的功能,以执行包括调整文件权限在内的操作。-
kdump目标配置
# *grep -v ^# /etc/kdump.conf | grep -v ^$* ext4 /dev/mapper/vg00-varcrashvol path /var/crash core_collector makedumpfile -c --message-level 1 -d 31
# *grep -v ^# /etc/kdump.conf | grep -v ^$*
ext4 /dev/mapper/vg00-varcrashvol
path /var/crash
core_collector makedumpfile -c --message-level 1 -d 31
转储目标已指定了(ext4 /dev/mapper/vg00-varcrashvol),因此它被挂载到 /var/crash。path 选项也被设置为 /var/crash。因此,kdump 将 vmcore 文件保存在 /var/crash/var/crash 目录中。
要更改保存崩溃转储的本地目录,以
root用户身份编辑/etc/kdump.conf配置文件:-
从
#path /var/crash行的开头删除哈希符号(#)。 使用预期的目录路径替换该值。例如:
path /usr/local/cores
path /usr/local/coresCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要在 RHEL 8 中,当
kdumpsystemd服务启动时,使用path指令定义为kdump目标的目录必须存在,以避免失败。与早期版本的 RHEL 不同,如果服务启动时目录不存在,则不再自动创建该目录。
-
从
要将文件写入不同的分区,请编辑
/etc/kdump.conf配置文件:根据您的选择,从
#ext4行的开头删除哈希符号(#)。-
设备名称(
#ext4 /dev/vg/lv_kdump行) -
文件系统标签(
#ext4 LABEL=/boot行) -
UUID(
#ext4 UUID=03138356-5e61-4ab3-b58e-27507ac41937行)
-
设备名称(
将文件系统类型和设备名称、标签或 UUID 改为所需的值。指定 UUID 值的正确语法是
UUID="correct-uuid"和UUID=correct-uuid。例如:ext4 UUID=03138356-5e61-4ab3-b58e-27507ac41937
ext4 UUID=03138356-5e61-4ab3-b58e-27507ac41937Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要建议使用
LABEL=或UUID=指定存储设备。无法保证/dev/sda3等磁盘设备名称在重启后保持一致。当您在 IBM Z 硬件上使用 Direct Access Storage Device (DASD)时,请确保在执行
kdump之前,转储设备已在/etc/dasd.conf中正确指定了。
要将崩溃转储直接写入设备,请编辑
/etc/kdump.conf配置文件:-
从
#raw /dev/vg/lv_kdump行的开头删除哈希符号(#)。 使用预期的设备名称替换该值。例如:
raw /dev/sdb1
raw /dev/sdb1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
从
使用
NFS协议将崩溃转储保存到远程机器上:-
从
#nfs my.server.com:/export/tmp行的开头删除哈希符号(#)。 使用有效的主机名和目录路径替换该值。例如:
nfs penguin.example.com:/export/cores
nfs penguin.example.com:/export/coresCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
kdump服务以使更改生效:sudo systemctl restart kdump.service
sudo systemctl restart kdump.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意当使用 NFS 指令指定 NFS 目标时,
kdump.service会自动尝试挂载 NFS 目标,来检查磁盘空间。不需要提前挂载 NFS 目标。要防止kdump.service挂载目标,请在kdump.conf中使用dracut_args --mount指令。这将启用kdump.service,通过--mount参数指定 NFS 目标来调用dracut工具。
-
从
使用 SSH 协议将崩溃转储保存到远程机器上:
-
从
#ssh user@my.server.com行的开头删除哈希符号(#)。 - 使用有效的用户名和密码替换该值。
在配置中包含您的 SSH 密钥。
-
从
#sshkey /root/.ssh/kdump_id_rsa行的开头删除哈希符号。 将该值改为您要转储的服务器中有效密钥的位置。例如:
ssh john@penguin.example.com sshkey /root/.ssh/mykey
ssh john@penguin.example.com sshkey /root/.ssh/mykeyCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
从
-
从
41.2.4. 配置 kdump 核心收集器 复制链接链接已复制到粘贴板!
kdump 服务使用 core_collector 程序捕获崩溃转储镜像。在 RHEL 中,makedumpfile 工具是默认的内核收集器。它通过以下方式帮助缩小转储文件:
- 压缩崩溃转储文件的大小,并使用各种转储级别仅复制必要的页。
- 排除不必要的崩溃转储页。
- 过滤崩溃转储中包含的页面类型。
RHEL 7 及更高版本中默认启用了崩溃转储文件压缩。
如果您需要自定义崩溃转储文件压缩,请按照以下流程操作。
语法
core_collector makedumpfile -l --message-level 1 -d 31
core_collector makedumpfile -l --message-level 1 -d 31
选项
-
-c、-l或-p:指定每个页的压缩 dump 文件的格式,使用zlib用于-c选项、使用lzo用于-l新选项,或snappy用于-p选项。 -
-d(dump_level):排除页面,它们不会复制到转储文件中。 -
--message-level:指定消息类型。您可以通过使用这个选项指定message_level来限制打印的输出。例如,把message_level设置为 7 可打印常见消息和错误消息。message_level的最大值为 31。
先决条件
- 您在系统上具有 root 权限。
-
满足
kdump配置和目标的要求。详情请查看 支持的 kdump 配置和目标。
流程
-
以
root用户身份编辑/etc/kdump.conf配置文件,并删除#core_collector makedumpfile -l --message-level 1 -d 31开头的哈希符号("#")。 - 输入以下命令来启用崩溃转储文件压缩:
core_collector makedumpfile -l --message-level 1 -d 31
core_collector makedumpfile -l --message-level 1 -d 31
-l 选项指定 转储 压缩的文件格式。-d 选项将转储级别指定为 31。message-level 选项将消息级别指定为 1。
另外,请考虑使用 -c 和 -p 选项的示例:
使用
-c压缩崩溃转储文件:core_collector makedumpfile -c -d 31 --message-level 1
core_collector makedumpfile -c -d 31 --message-level 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
-p压缩崩溃转储文件:core_collector makedumpfile -p -d 31 --message-level 1
core_collector makedumpfile -p -d 31 --message-level 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
41.2.5. 配置 kdump 默认失败响应 复制链接链接已复制到粘贴板!
默认情况下,当 kdump 不能在配置的目标位置创建崩溃转储文件时,系统会重启,转储在此过程中会丢失。您可以更改默认失败响应,并配置 kdump ,来在无法将内核转储保存到主目标时执行不同的操作。额外的操作是:
dump_to_rootfs-
将内核转储保存到
root文件系统。 reboot- 重启系统,在此过程中会丢失内核转储。
halt- 停止系统,在此过程中会丢失内核转储。
poweroff- 关闭系统,在此过程中会丢失内核转储。
shell-
从
initramfs中运行 shell 会话,您可以手动记录内核转储。 final_action-
在
kdump成功或在 shell 或dump_to_rootfs失败操作完成后,启用额外的操作,如reboot、halt和poweroff。默认为reboot。 failure_action-
指定在内核崩溃中转储可能失败时要执行的操作。默认为
reboot。
先决条件
- root 权限。
-
满足
kdump配置和目标的要求。详情请查看 支持的 kdump 配置和目标。
流程
-
以
root用户身份,删除/etc/kdump.conf配置文件中#failure_action行开头的哈希符号(#)。 将值替换为所需的操作。
failure_action poweroff
failure_action poweroffCopy to Clipboard Copied! Toggle word wrap Toggle overflow
41.2.6. kdump 的配置文件 复制链接链接已复制到粘贴板!
kdump 内核的配置文件是 /etc/sysconfig/kdump。此文件控制 kdump 内核命令行参数。对于大多数配置,请使用默认选项。然而,在某些情况下,您可能需要修改某些参数来控制 kdump 内核行为。例如:修改 KDUMP_COMMANDLINE_APPEND 选项,以附加 kdump 内核命令行来获取详细的调试输出或修改 KDUMP_COMMANDLINE_REMOVE 选项,以从 kdump 命令行中删除参数。
KDUMP_COMMANDLINE_REMOVE这个选项从当前
kdump命令行中删除参数。它删除了可能导致kdump错误或kdump内核引导失败的参数。这些参数可能已从之前的KDUMP_COMMANDLINE进程解析了,或者从/proc/cmdline文件继承了。如果未配置此变量,它将继承
/proc/cmdline文件中的所有值。配置此选项还提供了有助于调试问题的信息。要删除某些参数,请将其添加到
KDUMP_COMMANDLINE_REMOVE中,如下所示:
KDUMP_COMMANDLINE_REMOVE="hugepages hugepagesz slub_debug quiet log_buf_len swiotlb"
# KDUMP_COMMANDLINE_REMOVE="hugepages hugepagesz slub_debug quiet log_buf_len swiotlb"
KDUMP_COMMANDLINE_APPEND此选项将参数附加到当前命令行。这些参数可能已被之前的
KDUMP_COMMANDLINE_REMOVE变量解析了。对于
kdump内核,禁用某些模块,如mce、cgroup、numa,hest_disable有助于防止内核错误。这些模块可能会消耗为kdump保留的大部分内核内存,或者导致kdump内核引导失败。要在
kdump内核命令行中禁用内存cgroups,请运行以下命令:
KDUMP_COMMANDLINE_APPEND="cgroup_disable=memory"
KDUMP_COMMANDLINE_APPEND="cgroup_disable=memory"
41.2.7. 测试 kdump 配置 复制链接链接已复制到粘贴板!
配置 kdump 后,您必须手动测试系统崩溃,并确保在定义的 kdump 目标中生成了 vmcore 文件。vmcore 文件是从新引导的内核的上下文中捕获的。因此,vmcore 有用于调试内核崩溃的重要信息。
不要对活动状态的生产环境系统测试 kdump。测试 kdump 的命令将导致内核崩溃,且数据丢失。根据您的系统架构,确保您安排了充足的维护时间,因为 kdump 测试可能需要多次重启,且启动时间很长。
如果 vmcore 文件在 kdump 测试过程中没有生成 ,请在再次运行测试前识别并修复问题,以使 kdump 测试成功。
如果进行任何手动系统修改,您必须在任何系统修改的最后测试 kdump 配置。例如,如果您进行以下任何更改,请确保为以下情形测试 kdump 配置,以获取最佳 kdump 性能:
- 软件包升级。
- 硬件级别的更改,如存储或网络更改。
- 固件升级。
- 包括第三方模块的新安装和应用程序升级。
- 如果您使用热插拔机制在支持此机制的硬件上添加更多内存。
-
在
/etc/kdump.conf或/etc/sysconfig/kdump文件中进行更改后。
先决条件
- 您在系统上具有 root 权限。
-
您已保存了所有重要数据。测试
kdump的命令导致内核崩溃及数据丢失。 - 您已根据系统架构安排了大量机器维护时间。
流程
启用
kdump服务:kdumpctl restart
# kdumpctl restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
kdumpctl检查kdump服务的状态:kdumpctl status kdump:Kdump is operational
# kdumpctl status kdump:Kdump is operationalCopy to Clipboard Copied! Toggle word wrap Toggle overflow 另外,如果您使用
systemctl命令,输出会打印在systemd日志中。启动内核崩溃来测试
kdump配置。sysrq-trigger组合键导致内核崩溃,并在需要时可能重启系统。echo c > /proc/sysrq-trigger
# echo c > /proc/sysrq-triggerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在内核重启时,
address-YYYY-MM-DD-HH:MM:SS/vmcore文件在您在/etc/kdump.conf文件中指定的位置创建。默认值为/var/crash/。
41.2.8. 系统崩溃后 kdump 生成的文件 复制链接链接已复制到粘贴板!
系统崩溃后,kdump 服务会将内核内存捕获在转储文件(vmcore)中,它还会生成额外的诊断文件,以帮助故障排除和事后分析。
kdump 生成的文件:
-
vmcore- 崩溃时包含系统内存的主内核内存转储文件。它包含根据kdump配置中指定的core_collector程序配置的数据。默认情况下,包含内核数据结构、进程信息、堆栈跟踪和其他诊断信息。 -
vmcore-dmesg.txt- panic 的主内核中的内核环缓冲区日志的内容(dmesg)。 -
kexec-dmesg.log- 有从收集vmcore数据的辅助kexec内核执行中得到的内核和系统日志消息。
41.2.9. 启用和禁用 kdump 服务 复制链接链接已复制到粘贴板!
您可以配置,以对特定的内核或所有安装的内核启用或禁用 kdump 功能。您必须定期测试 kdump 功能,并验证其是否正确运行。
先决条件
- 您在系统上具有 root 权限。
-
您已为配置和目标完成了
kdump要求。请参阅 支持的 kdump 配置和目标。 -
用于安装
kdump的所有配置都是根据需要设置的。
流程
为
multi-user.target启用kdump服务:systemctl enable kdump.service
# systemctl enable kdump.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在当前会话中启动服务:
systemctl start kdump.service
# systemctl start kdump.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 停止
kdump服务:systemctl stop kdump.service
# systemctl stop kdump.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 禁用
kdump服务:systemctl disable kdump.service
# systemctl disable kdump.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
建议将 kptr_restrict=1 设置为默认值。当将 kptr_restrict 设置为(1)作为默认值时,kdumpctl 服务会加载崩溃内核,而无论是否启用了内核地址空间布局(KASLR)。
如果 kptr_restrict 没有被设置为 1,并且 KASLR 被启用了,则生成的 /proc/kore 文件的内容全为零。kdumpctl 服务无法访问 /proc/kcore 文件,并加载崩溃内核。kexec-kdump-howto.txt 文件显示一条警告信息,建议您设置 kptr_restrict=1。验证 sysctl.conf 文件中的以下内容,以确保 kdumpctl 服务加载崩溃内核:
-
sysctl.conf文件中的内核kptr_restrict=1。
41.2.10. 防止内核驱动程序为 kdump 加载 复制链接链接已复制到粘贴板!
您可以通过在 /etc/sysconfig/kdump 配置文件中添加 KDUMP_COMMANDLINE_APPEND= 变量来从加载某些内核驱动程序中控制捕获内核。使用这个方法,您可以防止来自加载指定的内核模块中的 kdump 初始 RAM 磁盘镜像 initramfs 。这有助于防止内存不足(OOM) killer 错误或其他崩溃内核失败。
您可以使用以下配置选项之一附加 KDUMP_COMMANDLINE_APPEND= 变量:
-
rd.driver.blacklist=<modules> -
modprobe.blacklist=<modules>
先决条件
- 您在系统上具有 root 权限。
流程
显示载入到当前运行内核的模块的列表。选择您要阻止其加载的内核模块:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新
/etc/sysconfig/kdump文件中的KDUMP_COMMANDLINE_APPEND=变量。例如:KDUMP_COMMANDLINE_APPEND="rd.driver.blacklist=hv_vmbus,hv_storvsc,hv_utils,hv_netvsc,hid-hyperv"
KDUMP_COMMANDLINE_APPEND="rd.driver.blacklist=hv_vmbus,hv_storvsc,hv_utils,hv_netvsc,hid-hyperv"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 另外,考虑以下使用
modprobe.blacklist=<modules>配置选项的示例:KDUMP_COMMANDLINE_APPEND="modprobe.blacklist=emcp modprobe.blacklist=bnx2fc modprobe.blacklist=libfcoe modprobe.blacklist=fcoe"
KDUMP_COMMANDLINE_APPEND="modprobe.blacklist=emcp modprobe.blacklist=bnx2fc modprobe.blacklist=libfcoe modprobe.blacklist=fcoe"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
kdump服务:systemctl restart kdump
# systemctl restart kdumpCopy to Clipboard Copied! Toggle word wrap Toggle overflow
41.2.11. 在使用加密磁盘的系统中运行 kdump 复制链接链接已复制到粘贴板!
当您运行 LUKS 加密的分区时,系统需要一定数量的可用内存。如果系统可用内存量小于所需的可用内存量,则 cryptsetup 实用程序无法挂载分区。因此,在第二个内核(捕获内核)中将 vmcore 文件捕获到加密的目标位置会失败。
kdumpctl estimate 命令帮助您估计 kdump 所需的内存量。kdumpctl estimate 打印推荐的 crashkernel 值,这是 kdump 所需的最合适的内存大小。
推荐的 crashkernel 值是根据当前的内核大小、内核模块、initramfs 和 LUKS 加密的目标内存要求计算的。
如果您使用自定义 crashkernel= 选项,kdumpctl estimate 会打印 LUKS required size 的值。值是 LUKS 加密目标所需的内存大小。
流程
输出估计的
crashkernel=值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
通过增加
crashkernel=值来配置所需的内存量。 - 重启系统。
如果 kdump 服务仍无法将转储文件保存到加密的目标,请根据需要增大 crashkernel= 值。
41.3. 启用 kdump 复制链接链接已复制到粘贴板!
对于 RHEL 8 系统,您可以在特定内核或所有安装的内核中配置或者禁用 kdump 功能。但是,您必须定期测试 kdump 功能,并验证其工作状态。
41.3.1. 为所有安装的内核启用 kdump 复制链接链接已复制到粘贴板!
在 kexec 工具安装后,kdump 服务通过启用 kdump.service 启动。您可以为在机器上安装的所有内核启用并启动 kdump 服务。
先决条件
- 有管理员特权。
流程
将
crashkernel=命令行参数添加到所有安装的内核中:grubby --update-kernel=ALL --args="crashkernel=xxM"
# grubby --update-kernel=ALL --args="crashkernel=xxM"Copy to Clipboard Copied! Toggle word wrap Toggle overflow xxM是所需的内存(以 MB 为单位)。启用
kdump服务:systemctl enable --now kdump.service
# systemctl enable --now kdump.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查
kdump服务是否正在运行:systemctl status kdump.service ○ kdump.service - Crash recovery kernel arming Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: disabled) Active: active (live)# systemctl status kdump.service ○ kdump.service - Crash recovery kernel arming Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: disabled) Active: active (live)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
41.3.2. 为特定安装的内核启用 kdump 复制链接链接已复制到粘贴板!
您可以为机器上的特定内核启用 kdump 服务。
先决条件
- 有管理员特权。
流程
列出安装在机器上的内核。
ls -a /boot/vmlinuz-* /boot/vmlinuz-0-rescue-2930657cd0dc43c2b75db480e5e5b4a9 /boot/vmlinuz-4.18.0-330.el8.x86_64 /boot/vmlinuz-4.18.0-330.rt7.111.el8.x86_64
# ls -a /boot/vmlinuz-* /boot/vmlinuz-0-rescue-2930657cd0dc43c2b75db480e5e5b4a9 /boot/vmlinuz-4.18.0-330.el8.x86_64 /boot/vmlinuz-4.18.0-330.rt7.111.el8.x86_64Copy to Clipboard Copied! Toggle word wrap Toggle overflow 向系统的 Grand Unified Bootloader (GRUB)配置中添加特定的
kdump内核。例如:
grubby --update-kernel=vmlinuz-4.18.0-330.el8.x86_64 --args="crashkernel=xxM"
# grubby --update-kernel=vmlinuz-4.18.0-330.el8.x86_64 --args="crashkernel=xxM"Copy to Clipboard Copied! Toggle word wrap Toggle overflow xxM是所需的内存保留(以 MB 为单位)。启用
kdump服务。systemctl enable --now kdump.service
# systemctl enable --now kdump.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查
kdump服务是否正在运行。systemctl status kdump.service ○ kdump.service - Crash recovery kernel arming Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: disabled) Active: active (live)# systemctl status kdump.service ○ kdump.service - Crash recovery kernel arming Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: disabled) Active: active (live)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
41.3.3. 禁用 kdump 服务 复制链接链接已复制到粘贴板!
您可以停止 kdump.service ,并在 RHEL 8 系统上禁用该服务。
先决条件
-
满足
kdump配置和目标的要求。详情请查看支持的 kdump 配置和目标。 -
安装
kdump的所有配置都是根据您的需要设置的。详情请参阅 安装 kdump。
流程
要在当前会话中停止
kdump服务:systemctl stop kdump.service
# systemctl stop kdump.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要禁用
kdump服务:systemctl disable kdump.service
# systemctl disable kdump.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
建议将 kptr_restrict=1 设置为默认值。当将 kptr_restrict 设置为(1)作为默认值时,kdumpctl 服务会加载崩溃内核,而无论是否启用了内核地址空间布局(KASLR)。
如果 kptr_restrict 没有设置为 1,且 KASLR 被启用了,则 /proc/kore 文件的内容被生成为全零。kdumpctl 服务无法访问 /proc/kcore 文件,并加载崩溃内核。kexec-kdump-howto.txt 文件显示一条警告信息,建议您设置 kptr_restrict=1。验证 sysctl.conf 文件中的以下内容,以确保 kdumpctl 服务加载崩溃内核:
-
sysctl.conf文件中的内核kptr_restrict=1。
41.4. 在 web 控制台中配置 kdump 复制链接链接已复制到粘贴板!
您可以使用 RHEL 8 web 控制台设置并测试 kdump 配置。Web 控制台可以在引导时启用 kdump 服务。使用 web 控制台,您可以为 kdump 配置保留的内存,并以未压缩或压缩格式选择 vmcore 的保存位置。
41.4.1. 在 web 控制台中配置 kdump 内存使用率和目标位置 复制链接链接已复制到粘贴板!
您可以为 kdump 内核配置内存保留,并指定目标位置,来使用 RHEL web 控制台界面捕获 vmcore 转储文件。
先决条件
- 必须安装并可以访问 Web 控制台。详情请参阅安装 Web 控制台。
流程
-
在 web 控制台中,打开 选项卡,并通过将 Kernel crash dump 开关设置为 on 来启动
kdump服务。 在终端中配置
kdump内存使用情况,例如:sudo grubby --update-kernel ALL --args crashkernel=512M
$ sudo grubby --update-kernel ALL --args crashkernel=512MCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启系统以应用更改。
- 在 Kernel dump 选项卡中,点 Crash dump location 字段末尾的 Edit。
指定保存
vmcore转储文件的目标目录:- 对于本地文件系统,从下拉菜单中选择 Local Filesystem。
对于使用 SSH 协议的远程系统,从下拉菜单中选择 Remote over SSH ,并指定以下字段:
- 在 Server 字段中,输入远程服务器地址。
- 在 SSH key 字段中,输入 SSH 密钥位置。
- 在 Directory 字段中,输入目标目录。
对于使用 NFS 协议的远程系统,从下拉菜单中选择 Remote over NFS ,并指定以下字段:
- 在 Server 字段中,输入远程服务器地址。
- 在 Export 字段中,输入 NFS 服务器的共享文件夹的位置。
在 Directory 字段中,输入目标目录。
注意您可以通过选择 Compression 复选框来减小
vmcore文件的大小。
可选:点 View automation script 来显示自动化脚本。
此时会打开一个带有生成的脚本的窗口。您可以浏览 shell 脚本和 Ansible playbook 生成选项选项卡。
可选:点 Copy to clipboard 来复制脚本。
您可以使用此脚本在多台机器上应用相同的配置。
验证
- 单击 。
在 Test kdump settings 下点 Crash system。
警告当您启动系统崩溃时,内核操作会停止并导致系统崩溃,并造成数据丢失。
41.5. 支持的 kdump 配置和目标 复制链接链接已复制到粘贴板!
kdump 机制是 Linux 内核的一个功能,它在发生内核崩溃时生成一个崩溃转储文件。内核转储文件有关键的信息,可帮助分析和确定内核崩溃的根本原因。崩溃可能是因为各种因素,举几个例子,如硬件问题或第三方内核模块问题。
通过使用提供的信息和程序,您可以执行以下操作:
- 识别 RHEL 8 系统支持的配置和目标。
- 配置 kdump。
- 验证 kdump 操作。
41.5.1. kdump 的内存要求 复制链接链接已复制到粘贴板!
要让 kdump 捕获内核崩溃转储,并保存它以便进一步分析,应该为捕获内核永久保留系统内存的一部分。保留时,主内核无法使用系统内存的这一部分。
内存要求因某些系统参数而异。主要因素之一就是系统的硬件构架。要识别确切的机器架构,如 Intel 64 和 AMD64,也称为 x86_64,并将其输出到标准输出,请使用以下命令:
uname -m
$ uname -m
使用上述最小内存要求的列表,您可以设置合适的内存大小,来在最新可用版本上为 kdump 自动保留内存。内存大小取决于系统的架构和总可用物理内存。
| 架构 | 可用内存 | 最小保留内存 |
|---|---|---|
|
AMD64 和 Intel 64 ( | 1 GB 到 4 GB | 192 MB 内存 |
| 4 GB 到 64 GB | 256 MB 内存 | |
| 64 GB 及更多 | 512 MB 内存 | |
|
64 位 ARM 架构 ( | 2 GB 及更多 | 480 MB 内存 |
|
IBM Power 系统 ( | 2 GB 到 4 GB | 384 MB 内存 |
| 4 GB 到 16 GB | 512 MB 内存 | |
| 16 GB 到 64 GB | 1 GB 内存 | |
| 64 GB 到 128 GB | 2 GB 内存 | |
| 128 GB 及更多 | 4 GB 内存 | |
|
IBM Z ( | 1 GB 到 4 GB | 192 MB 内存 |
| 4 GB 到 64 GB | 256 MB 内存 | |
| 64 GB 及更多 | 512 MB 内存 |
在很多系统中,kdump 可以估算所需内存量并自动保留。默认情况下,此行为是启用的,但仅适用于内存总量超过特定数量的系统,这些内存因系统架构而异。
根据系统中内存总量自动配置保留内存是最佳工作量估算。实际需要的内存可能因其他因素(如 I/O 设备)而异。使用内存不足可能会导致 debug 内核在出现内核 panic 时无法引导作为捕获内核。要避免这个问题,请足够增大崩溃内核内存。
41.5.2. 自动内存保留的最小阈值 复制链接链接已复制到粘贴板!
默认情况下,kexec-tools 工具配置 crashkernel 命令行参数,并为 kdump 保留特定内存量。但是,在某些系统中,仍可使用引导装载程序配置文件中的 crashkernel=auto 参数为 kdump 分配内存,或者在图形配置工具中启用这个选项。要使此自动保留正常工作,系统中需要有一定数量的总内存。内存要求因系统架构而异。如果系统内存小于指定的阈值,则您必须手动配置内存。
| 构架 | 所需的内存 |
|---|---|
|
AMD64 和 Intel 64 ( | 2 GB |
|
IBM Power 系统 ( | 2 GB |
|
IBM Z ( | 4 GB |
RHEL 9 及更新的版本不再支持引导命令行中的 crashkernel=auto 选项。
41.5.3. 支持的 kdump 目标 复制链接链接已复制到粘贴板!
当发生内核崩溃时,操作系统会将转储文件保存在配置的或默认的目标位置上。您可以将转储文件直接保存到设备上,将其作为文件存储在本地文件系统上,或者通过网络发送转储文件。使用以下转储目标的列表,您可以知道 kdump 目前支持的或不支持的目标。
| 目标类型 | 支持的目标 | 不支持的目标 |
|---|---|---|
| 物理存储 |
|
|
| 网络 |
|
|
| 虚拟机监控程序(Hypervisor) |
| |
| 文件系统 | ext[234]、XFS 和 NFS 文件系统。 |
|
| 固件 |
|
41.5.4. 支持的 kdump 过滤等级 复制链接链接已复制到粘贴板!
要缩小转储文件的大小,kdump 使用 makedumpfile 内核收集器压缩数据,并排除不需要的信息,例如,您可以使用 -8 级别来删除 hugepages 和 hugetlbfs 页。makedumpfile 当前支持的级别可在 Filtering levels for `kdump` 表中看到。
| 选项 | 描述 |
|---|---|
|
| 零页 |
|
| 缓存页 |
|
| 缓存私有 |
|
| 用户页 |
|
| 可用页 |
41.5.5. 支持的默认故障响应 复制链接链接已复制到粘贴板!
默认情况下,当 kdump 创建内核转储失败时,操作系统会重启。但是,当无法将内核转储保存到主目标上时,您可以将 kdump 配置为执行不同的操作。
| 选项 | 描述 |
|---|---|
|
| 尝试将内核转储保存到 root 文件系统。这个选项在与网络目标合并时特别有用:如果网络目标无法访问,这个选项配置 kdump 以在本地保存内核转储。之后会重启该系统。 |
|
| 重启系统,这个过程会丢失 core 转储文件。 |
|
| 关闭系统,这个过程会丢失 core 转储文件。 |
|
| 关闭系统,这个此过程会丢失 core 转储。 |
|
| 从 initramfs 内运行 shell 会话,允许用户手动记录核心转储。 |
|
|
在 |
41.5.6. 使用 final_action 参数 复制链接链接已复制到粘贴板!
当 kdump 成功或者 kdump 无法在配置的目标处保存 vmcore 文件时,您可以使用 final_action 参数执行额外的操作,如 reboot、halt 和 poweroff。如果没有指定 final_action 参数,则 reboot 是默认的响应。
流程
要配置
final_action,请编辑/etc/kdump.conf文件并添加以下选项之一:-
final_action reboot -
final_action halt -
final_action poweroff
-
重启
kdump服务,以使更改生效。kdumpctl restart
# kdumpctl restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow
41.5.7. 使用 failure_action 参数 复制链接链接已复制到粘贴板!
failure_action 参数指定在内核崩溃时转储失败时要执行的操作。failure_action 的默认操作是 重启 系统。
参数接受以下要执行的操作:
reboot- 转储失败后重启系统。
dump_to_rootfs- 当配置了非 root 转储目标时,将转储文件保存在 root 文件系统上。
halt- 关闭系统。
poweroff- 停止系统上正在运行的操作。
shell-
在
initramfs中启动 shell 会话,您可以从中手动执行其他恢复操作。
流程
要将操作配置为在转储失败时执行的操作,请编辑
/etc/kdump.conf文件并指定其中一个failure_action选项:-
failure_action reboot -
failure_action halt -
failure_action poweroff -
failure_action shell -
failure_action dump_to_rootfs
-
重启
kdump服务,以使更改生效。kdumpctl restart
# kdumpctl restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow
41.6. 测试 kdump 配置 复制链接链接已复制到粘贴板!
配置 kdump 后,您必须手动测试系统崩溃,并确保在定义的 kdump 目标中生成了 vmcore 文件。vmcore 文件是从新引导的内核的上下文中捕获的。因此,vmcore 有用于调试内核崩溃的重要信息。
不要对活动状态的生产环境系统测试 kdump。测试 kdump 的命令将导致内核崩溃,且数据丢失。根据您的系统架构,确保您安排了充足的维护时间,因为 kdump 测试可能需要多次重启,且启动时间很长。
如果 vmcore 文件在 kdump 测试过程中没有生成 ,请在再次运行测试前识别并修复问题,以使 kdump 测试成功。
如果进行任何手动系统修改,您必须在任何系统修改的最后测试 kdump 配置。例如,如果您进行以下任何更改,请确保为以下情形测试 kdump 配置,以获取最佳 kdump 性能:
- 软件包升级。
- 硬件级别的更改,如存储或网络更改。
- 固件升级。
- 包括第三方模块的新安装和应用程序升级。
- 如果您使用热插拔机制在支持此机制的硬件上添加更多内存。
-
在
/etc/kdump.conf或/etc/sysconfig/kdump文件中进行更改后。
先决条件
- 您在系统上具有 root 权限。
-
您已保存了所有重要数据。测试
kdump的命令导致内核崩溃及数据丢失。 - 您已根据系统架构安排了大量机器维护时间。
流程
启用
kdump服务:kdumpctl restart
# kdumpctl restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
kdumpctl检查kdump服务的状态:kdumpctl status kdump:Kdump is operational
# kdumpctl status kdump:Kdump is operationalCopy to Clipboard Copied! Toggle word wrap Toggle overflow 另外,如果您使用
systemctl命令,输出会打印在systemd日志中。启动内核崩溃来测试
kdump配置。sysrq-trigger组合键导致内核崩溃,并在需要时可能重启系统。echo c > /proc/sysrq-trigger
# echo c > /proc/sysrq-triggerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在内核重启时,
address-YYYY-MM-DD-HH:MM:SS/vmcore文件在您在/etc/kdump.conf文件中指定的位置创建。默认值为/var/crash/。
41.7. 使用 kexec 引导至不同的内核 复制链接链接已复制到粘贴板!
您可以使用 kexec 系统调用启用从当前运行的内核载入并引导到另一个内核。kexec 从内核中执行引导装载程序的功能。
kexec 实用程序为 kexec 系统调用加载内核和 initramfs 镜像,以引导至另一个内核。
以下流程描述了如何在使用 kexec 工具重启到另一个内核时手动调用 kexec 系统调用。
流程
运行
kexec工具:kexec -l /boot/vmlinuz-3.10.0-1040.el7.x86_64 --initrd=/boot/initramfs-3.10.0-1040.el7.x86_64.img --reuse-cmdline
# kexec -l /boot/vmlinuz-3.10.0-1040.el7.x86_64 --initrd=/boot/initramfs-3.10.0-1040.el7.x86_64.img --reuse-cmdlineCopy to Clipboard Copied! Toggle word wrap Toggle overflow 该命令为
kexec系统调用手动加载内核和initramfs镜像。重启系统:
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow 该命令会检测内核,关闭所有服务,然后调用
kexec系统调用来重新引导到您在上一步中提供的内核中。
当您使用 kexec -e 命令将机器重新引导到不同的内核时,系统不会在启动下一个内核前完成标准关闭序列。这可能导致数据丢失或无响应的系统。
41.8. 防止内核驱动程序为 kdump 加载 复制链接链接已复制到粘贴板!
您可以通过在 /etc/sysconfig/kdump 配置文件中添加 KDUMP_COMMANDLINE_APPEND= 变量来从加载某些内核驱动程序中控制捕获内核。使用这个方法,您可以防止来自加载指定的内核模块中的 kdump 初始 RAM 磁盘镜像 initramfs 。这有助于防止内存不足(OOM) killer 错误或其他崩溃内核失败。
您可以使用以下配置选项之一附加 KDUMP_COMMANDLINE_APPEND= 变量:
-
rd.driver.blacklist=<modules> -
modprobe.blacklist=<modules>
先决条件
- 您在系统上具有 root 权限。
流程
显示载入到当前运行内核的模块的列表。选择您要阻止其加载的内核模块:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新
/etc/sysconfig/kdump文件中的KDUMP_COMMANDLINE_APPEND=变量。例如:KDUMP_COMMANDLINE_APPEND="rd.driver.blacklist=hv_vmbus,hv_storvsc,hv_utils,hv_netvsc,hid-hyperv"
KDUMP_COMMANDLINE_APPEND="rd.driver.blacklist=hv_vmbus,hv_storvsc,hv_utils,hv_netvsc,hid-hyperv"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 另外,考虑以下使用
modprobe.blacklist=<modules>配置选项的示例:KDUMP_COMMANDLINE_APPEND="modprobe.blacklist=emcp modprobe.blacklist=bnx2fc modprobe.blacklist=libfcoe modprobe.blacklist=fcoe"
KDUMP_COMMANDLINE_APPEND="modprobe.blacklist=emcp modprobe.blacklist=bnx2fc modprobe.blacklist=libfcoe modprobe.blacklist=fcoe"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
kdump服务:systemctl restart kdump
# systemctl restart kdumpCopy to Clipboard Copied! Toggle word wrap Toggle overflow
41.9. 在使用加密磁盘的系统中运行 kdump 复制链接链接已复制到粘贴板!
当您运行 LUKS 加密的分区时,系统需要一定数量的可用内存。如果系统可用内存量小于所需的可用内存量,则 cryptsetup 实用程序无法挂载分区。因此,在第二个内核(捕获内核)中将 vmcore 文件捕获到加密的目标位置会失败。
kdumpctl estimate 命令帮助您估计 kdump 所需的内存量。kdumpctl estimate 打印推荐的 crashkernel 值,这是 kdump 所需的最合适的内存大小。
推荐的 crashkernel 值是根据当前的内核大小、内核模块、initramfs 和 LUKS 加密的目标内存要求计算的。
如果您使用自定义 crashkernel= 选项,kdumpctl estimate 会打印 LUKS required size 的值。值是 LUKS 加密目标所需的内存大小。
流程
输出估计的
crashkernel=值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
通过增加
crashkernel=值来配置所需的内存量。 - 重启系统。
如果 kdump 服务仍无法将转储文件保存到加密的目标,请根据需要增大 crashkernel= 值。
41.10. 固件支持的转储机制 复制链接链接已复制到粘贴板!
固件支持的转储 (fadump) 是一个转储捕获机制,作为 IBM POWER 系统中 kdump 机制的替代选择。kexec 和 kdump 机制可用于在 AMD64 和 Intel 64 系统中捕获内核转储。但是,一些硬件(如小型系统和大型机计算机)使用板上固件来隔离内存区域,并防止意外覆盖对分析崩溃很重要的数据。fadump 工具针对 fadump 机制及其与 IBM POWER 系统上 RHEL 的集成进行了优化。
41.10.1. IBM PowerPC 硬件支持转储固件 复制链接链接已复制到粘贴板!
fadump 实用程序从带有 PCI 和 I/O 设备的完全重设系统中捕获 vmcore 文件。这种机制使用固件在崩溃期间保留内存区域,然后重复使用 kdump 用户空间脚本保存 vmcore 文件。内存区域由所有系统内存内容组成,但引导内存、系统注册和硬件页面表条目 (PTE) 除外。
fadump 机制通过重新引导分区并使用新内核转储之前内核崩溃中的数据,提供比传统转储类型的更高可靠性。fadump 需要一个基于 IBM POWER6 处理器或更高版本的硬件平台。
有关 fadump 机制的详情,包括针对 PowerPC 重置硬件的方法,请查看 /usr/share/doc/kexec-tools/fadump-howto.txt 文件。
未保留的内存区域(称为引导内存)是在崩溃事件后成功引导内核所需的 RAM 量。默认情况下,引导内存大小为 256MB 或系统 RAM 总量的 5%,以较大者为准。
与 kexec-initiated 事件不同,fadump 机制使用 production 内核恢复崩溃转储。崩溃后引导时,PowerPC 硬件使设备节点 /proc/device-tree/rtas/ibm.kernel-dump 可供 proc 文件系统 (procfs) 使用。fadump-aware kdump 脚本,检查存储的 vmcore,然后完全完成系统重启。
41.10.2. 启用固件支持的转储机制 复制链接链接已复制到粘贴板!
您可以通过启用固件支持的转储(fadump)机制来增强 IBM POWER 系统的崩溃转储功能。
在安全引导环境中,GRUB 引导装载程序分配一个引导内存区域,称为 Real Mode Area (RMA)。RMA 有 512 MB 大小的内存,在引导组件之间分配。如果组件超过其大小分配,则 GRUB 会失败,并显示内存不足(OOM)错误。
不要在 RHEL 8.7 和 8.6 版本的安全引导环境中启用固件支持的转储(fadump)机制。GRUB2 引导装载程序失败,并显示以下错误:
error: ../../grub-core/kern/mm.c:376:out of memory. Press any key to continue…
error: ../../grub-core/kern/mm.c:376:out of memory.
Press any key to continue…
仅当您因为 fadump 配置而增加默认 initramfs 大小时,系统才是可恢复的。
有关恢复系统的临时解决方案方法的详情,请参考 GRUB 内存不足(OOM)中的系统引导结束 文章。
流程
-
安装和配置
kdump。 启用
fadump=on内核选项:grubby --update-kernel=ALL --args="fadump=on"
# grubby --update-kernel=ALL --args="fadump=on"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果要指定保留引导内存而不是使用默认值,请启用
crashkernel=xxM选项,其中xx是以 MB 为单位所需的内存量:grubby --update-kernel=ALL --args="crashkernel=xxM fadump=on"
# grubby --update-kernel=ALL --args="crashkernel=xxM fadump=on"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要当指定引导选项时,在运行前测试所有引导选项。如果
kdump内核无法引导,请逐渐增加crashkernel=参数中指定的值来设置适当的值。
41.10.3. IBM Z 硬件支持的固件转储机制 复制链接链接已复制到粘贴板!
IBM Z 系统支持以下固件支持的转储机制:
-
独立转储 (sadump) -
VMDUMP
IBM Z 系统支持并使用 kdump 基础架构。但是,使用 IBM Z 的固件辅助转储(fadump)方法之一有以下优点:
-
系统控制台启动并控制
sadump机制,并将其存储在IPL可引导设备上。 -
VMDUMP机制与sadump类似。此工具也从系统控制台启动,但会从硬件检索生成的转储并将其复制到系统以进行分析。 -
这些方法(与其他基于硬件的转储机制类似)能够在
kdump服务启动前捕获机器在早期启动阶段的状态。 -
虽然
VMDUMP包含一种将转储文件接收到 Red Hat Enterprise Linux 系统的机制,但VMDUMP的配置和控制是从 IBM Z 硬件控制台进行管理的。
41.10.4. 在 Fujitsu PRIMEQUEST 系统中使用 sadump 复制链接链接已复制到粘贴板!
当 kdump 无法成功完成时,Fujitsu sadump 机制提供了一种 回退 转储捕获。您可以从系统管理板(MMB)接口手动调用 sadump。使用 MMB,为 Intel 64 或 AMD64 服务器配置 kdump,然后继续启用 sadump。
流程
在
/etc/sysctl.conf文件中添加或编辑以下行,以确保sadump的kdump按预期启动:kernel.panic=0 kernel.unknown_nmi_panic=1
kernel.panic=0 kernel.unknown_nmi_panic=1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 警告特别是,请确保在
kdump后系统不会重启。如果系统在kdump保存vmcore文件失败后重启,则无法调用sadump。适当地将
/etc/kdump.conf中的failure_action参数设置为halt或shell。failure_action shell
failure_action shellCopy to Clipboard Copied! Toggle word wrap Toggle overflow
41.11. 分析内核转储 复制链接链接已复制到粘贴板!
要识别系统崩溃的原因,您可以使用 crash 工具,它提供了一个类似于 GNU Debugger (GDB)的交互式提示。通过使用 crash,您可以分析 kdump、netdump、diskdump 或 xendump ,以及正在运行的 Linux 系统所创建的内核转储。另外,您可以使用 Kernel Oops Analyzer 或 Kdump Helper 工具。
41.11.1. 安装 crash 工具 复制链接链接已复制到粘贴板!
使用提供的信息,了解所需的软件包,以及安装 crash 工具的流程。默认情况下,在 RHEL 8 系统中可能无法安装 crash 工具。crash 是一个在内核崩溃发生和创建内核转储文件时以交互方式分析系统状态的工具。内核转储文件也称为 vmcore 文件。
流程
启用相关的软件仓库:
subscription-manager repos --enable baseos repository
# subscription-manager repos --enable baseos repositoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow subscription-manager repos --enable appstream repository
# subscription-manager repos --enable appstream repositoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow subscription-manager repos --enable rhel-8-for-x86_64-baseos-debug-rpms
# subscription-manager repos --enable rhel-8-for-x86_64-baseos-debug-rpmsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 安装
crash软件包:yum install crash
# yum install crashCopy to Clipboard Copied! Toggle word wrap Toggle overflow 安装
kernel-debuginfo软件包:yum install kernel-debuginfo
# yum install kernel-debuginfoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 软件包
kernel-debuginfo将对应于正在运行的内核,并提供用于转储分析所需的数据。
41.11.2. 运行和退出 crash 工具 复制链接链接已复制到粘贴板!
crash 工具是一个用于分析 kdump 的强大工具。通过对崩溃转储文件运行 crash,您可以在崩溃时洞察系统的状态,识别问题的根本原因,并对与内核相关的问题进行故障排除。
先决条件
-
确定当前运行的内核(例如
4.18.0-5.el8.x86_64)。
流程
要启动
crash工具,请传递以下两个必要的参数:-
debug-info(解压缩的 vmlinuz 镜像),如
/usr/lib/debug/lib/modules/4.18.0-5.el8.x86_64/vmlinux,通过特定的kernel-debuginfo软件包提供。 实际的 vmcore 文件,如
/var/crash/127.0.0.1-2018-10-06-14:05:33/vmcore。生成的
crash命令如下所示:crash /usr/lib/debug/lib/modules/4.18.0-5.el8.x86_64/vmlinux /var/crash/127.0.0.1-2018-10-06-14:05:33/vmcore
# crash /usr/lib/debug/lib/modules/4.18.0-5.el8.x86_64/vmlinux /var/crash/127.0.0.1-2018-10-06-14:05:33/vmcoreCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
kdump捕获的相同 <kernel> 版本。例 41.1. 运行 crash 工具
以下示例演示了使用 4.18.0-5.el8.x86_64 内核分析在 2018 年 10 月 6 日下午 14:05 时创建的内核转储。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
debug-info(解压缩的 vmlinuz 镜像),如
要退出交互式提示并停止
crash,请输入exit或q。crash> exit ~]#
crash> exit ~]#Copy to Clipboard Copied! Toggle word wrap Toggle overflow
crash 命令也作为一个调试实时系统的强大工具被使用。但是,您必须谨慎使用它,以避免系统级的问题。
41.11.3. 在 crash 工具中显示各种指示符 复制链接链接已复制到粘贴板!
使用 crash 工具来显示各种指示符,如内核消息缓冲区、回溯追踪、进程状态、虚拟内存信息以及打开文件。
显示消息缓冲
要显示内核消息缓冲区,请在互动提示符下输入
log命令:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入
help log以了解有关命令用法的更多信息。注意内核消息缓冲区包含有关系统崩溃的最重要的信息。它始终首先转储到
vmcore-dmesg.txt文件中。如果您无法获取完整的vmcore文件,例如由于目标位置上空间不足,则您可以从内核消息缓冲中获得所需的信息。默认情况下,vmcore-dmesg.txt放在/var/crash/目录中。
显示后端
若要显示内核堆栈跟踪,可使用
bt命令。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入
bt <pid>来显示特定进程的回溯追踪,或者输入help bt以了解有关bt用法的更多信息。
显示进程状态
若要显示系统中进程的状态,可使用
ps命令。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
ps <pid>显示单个进程的状态。使用 help ps 了解有关ps用法的更多信息。
显示虚拟内存信息
要显示基本虚拟内存信息,请在交互式提示符下键入
vm命令。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
vm <pid>显示有关单个特定进程的信息,或使用help vm了解有关vm用法的更多信息。
显示打开的文件
要显示有关打开文件的信息,请使用
files命令。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
files <pid>仅显示一个选定进程打开的文件,或者使用help files来获取有关files用法的更多信息。
41.11.4. 使用 Kernel Oops Analyzer 复制链接链接已复制到粘贴板!
Kernel Oops Analyzer 工具通过将 oops 消息与知识库中的已知问题进行比较,来分析崩溃转储。
先决条件
-
oops消息被安全地提供给 Kernel Oops Analyzer。
流程
- 访问 Kernel Oops Analyzer 工具。
要诊断内核崩溃问题,请上传
vmcore中生成的内核 oops 日志。-
或者,您可以通过提供文本消息或
vmcore-dmesg.txt作为输入来诊断内核崩溃问题。
-
或者,您可以通过提供文本消息或
-
点
DETECT,来根据makedumpfile中的信息,将oops消息与已知解决方案进行比较。
41.11.5. Kdump Helper 工具 复制链接链接已复制到粘贴板!
Kdump Helper 工具有助于使用提供的信息设置 kdump。kdump 帮助程序根据您的偏好生成配置脚本。在服务器中启动并运行该脚本可设置 kdump 服务。
41.12. 使用早期 kdump 来捕获引导时间崩溃 复制链接链接已复制到粘贴板!
早期的 kdump 是 kdump 机制的一个特性,如果在系统服务启动前的引导过程的早期阶段发生系统或内核崩溃,它将捕获 vmcore 文件。早期的 kdump 更早地在内存中加载崩溃内核和崩溃内核的 initramfs。
在 kdump 服务启动前的早期引导阶段过程中,内核崩溃有时会发生,可以捕获并保存崩溃的内核内存的内容。因此,与崩溃相关的、对于进行故障排除很重要的信息会丢失。要解决这个问题,您可以使用 early kdump 功能,它是 kdump 服务的一部分。
41.12.1. 启用早期 kdump 复制链接链接已复制到粘贴板!
early kdump 功能设置崩溃内核和初始 RAM 磁盘镜像(initramfs),以便早期加载以捕获早期崩溃的 vmcore 信息。这有助于消除丢失早期引导内核崩溃信息的风险。
先决条件
- 一个有效的 RHEL 订阅。
-
包含用于您系统 CPU 架构的
kexec-tools软件包的存储库。 -
实现了
kdump配置和目标要求。如需更多信息,请参阅 支持的 kdump 配置和目标。
流程
验证
kdump服务是否已启用并活跃:systemctl is-enabled kdump.service && systemctl is-active kdump.service enabled active
# systemctl is-enabled kdump.service && systemctl is-active kdump.service enabled activeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果没有启用并运行
kdump,请设置所有必要的配置,并验证是否已启用kdump服务。使用
早期 kdump功能重建引导内核的initramfs镜像:dracut -f --add earlykdump
# dracut -f --add earlykdumpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 添加
rd.earlykdump内核命令行参数:grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="rd.earlykdump"
# grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="rd.earlykdump"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启系统以反映更改:
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证
rd.earlykdump是否已成功添加,early kdump功能是否已启用:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 42 章 使用内核实时修补程序应用补丁 复制链接链接已复制到粘贴板!
您可以使用 Red Hat Enterprise Linux 内核实时打补丁解决方案,来在不重启或重启任何进程的情况下对运行的内核打补丁。
使用这个解决方案,系统管理员需要:
- 可以在内核中立即应用重要的安全补丁。
- 不必等待长时间运行的任务完成、关闭或调度停机时间。
- 可以控制系统的正常运行时间,且不会牺牲安全性和稳定性。
通过使用内核实时打补丁,您可以减少安全补丁所需的重启数。但请注意,您无法解决所有关键或重要的 CVE。有关实时打补丁的范围的详情,请查看红帽知识库解决方案 Red Hat Enterprise Linux 中是否支持实时内核补丁(kpatch)?
内核实时补丁和其它内核子组件之间存在一些不兼容。在使用内核实时补丁前,请仔细阅读 kpatch 的限制。
有关内核实时补丁更新支持节奏的详情,请参考:
42.1. kpatch 的限制 复制链接链接已复制到粘贴板!
-
通过使用
kpatch功能,您可以应用简单的不需要立即重启系统的安全更新和 bug 修复更新。 -
在载入补丁过程中或之后,您不能使用
SystemTap或kprobe工具。在探测被删除后,补丁可能才会生效。
42.2. 对第三方实时补丁的支持 复制链接链接已复制到粘贴板!
kpatch 实用程序是红帽通过红帽软件仓库提供的 RPM 模块支持的唯一内核实时补丁程序。红帽不支持第三方提供的实时补丁。
有关第三方软件支持策略的更多信息,请参阅 作为客户,在使用第三方组件时红帽如何支持我?
42.3. 获得内核实时补丁 复制链接链接已复制到粘贴板!
内核模块(kmod)实现内核实时打补丁功能,并作为一个 RPM 软件包提供。
所有客户都可以访问内核实时补丁,这些补丁通过常用的通道提供。但是,在下一个次版本发布后,未订阅延长支持服务的客户将无法访问当前次要版本的新修补程序。例如,具有标准订阅的客户只能在 RHEL 8.3 内核发布前提供 RHEL 8.2 内核补丁。
内核实时补丁的组件如下:
- 内核补丁模块
- 内核实时补丁的交付机制。
- 为内核构建的一个内核模块打修补。
- 补丁模块包含内核所需修复的代码。
-
补丁模块注册到
livepatch内核子系统,并指定要替换的原始功能,以及指向替换功能的指针。内核补丁模块以 RPM 的形式提供。 -
命名规则为
kpatch_<kernel version>_<kpatch version>_<kpatch release>。名称中"kernel version"部分的点被下划线替代。
kpatch工具- 用于管理补丁模块的命令行工具。
kpatch服务-
multiuser.target所需的systemd服务。这个目标会在引导时载入内核补丁模块。 kpatch-dnf软件包- 以 RPM 软件包的形式提供的 DNF 插件。此插件管理内核实时补丁的自动订阅。
42.4. 实时对内核打补丁的过程 复制链接链接已复制到粘贴板!
kpatch 内核打补丁解决方案使用 livepatch 内核子系统将过时的功能重定向到更新的功能。将实时内核补丁应用到系统会触发以下进程:
-
内核补丁模块复制到
/var/lib/kpatch/目录中,并在下次引导时由systemd注册以重新应用到内核。 -
kpatch模块加载到运行的内核中,新的功能使用指向新代码在内存中的位置的指针被注册到ftrace机制中。
当内核访问打了补丁的功能时,ftrace 机制会重定向它,绕过原始功能,并将内核引导到打了补丁的函数版本。
图 42.1. 内核实时补丁如何工作
42.5. 将当前安装的内核订阅到实时补丁流 复制链接链接已复制到粘贴板!
内核补丁模块在 RPM 软件包中提供,具体取决于被修补的内核版本。每个 RPM 软件包将随着时间不断累积更新。
以下流程解释了如何订阅以后为给定内核的所有累积实时补丁更新。因为实时补丁是累计的,所以您无法选择为一个特定的内核部署哪些单独的补丁。
红帽不支持任何适用于红帽支持的系统的第三方实时补丁。
先决条件
- 您有 root 权限。
流程
可选:检查您的内核版本:
uname -r 4.18.0-94.el8.x86_64
# uname -r 4.18.0-94.el8.x86_64Copy to Clipboard Copied! Toggle word wrap Toggle overflow 搜索与内核版本对应的实时补丁软件包:
yum search $(uname -r)
# yum search $(uname -r)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 安装实时补丁(live patching)软件包:
yum install "kpatch-patch = $(uname -r)"
# yum install "kpatch-patch = $(uname -r)"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以上命令只为特定内核安装并应用最新的实时补丁。
如果实时补丁软件包的版本是 1-1 或更高版本,则软件包将包含补丁模块。在这种情况下,内核会在安装 live patching 软件包期间自动修补。
内核补丁模块也安装到
/var/lib/kpatch/目录中,供systemd系统和服务管理器以后重启时载入。注意当给定内核没有可用的实时补丁时,将安装空的实时补丁软件包。空的 live patching 软件包会有一个 0-0 的 kpatch_version-kpatch_release,如
kpatch-patch-4_18_0-94-0-0.el8.x86_64.rpm。空 RPM 安装会将系统订阅到以后为给定内核提供的所有实时补丁。
验证
验证是否所有安装的内核都已打了补丁:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出显示内核补丁模块已加载到内核,该内核现在已使用
kpatch-patch-4_18_0-94-1-1.el8.x86_64.rpm软件包的最新修复打了补丁。注意输入
kpatch list命令不会返回一个空的实时补丁软件包。使用rpm -qa | grep kpatch命令替代。rpm -qa | grep kpatch kpatch-patch-4_18_0-477_21_1-0-0.el8_8.x86_64 kpatch-dnf-0.9.7_0.4-2.el8.noarch kpatch-0.9.7-2.el8.noarch
# rpm -qa | grep kpatch kpatch-patch-4_18_0-477_21_1-0-0.el8_8.x86_64 kpatch-dnf-0.9.7_0.4-2.el8.noarch kpatch-0.9.7-2.el8.noarchCopy to Clipboard Copied! Toggle word wrap Toggle overflow
42.6. 自动订阅将来的内核到实时补丁流 复制链接链接已复制到粘贴板!
您可以使用 kpatch-dnf YUM 插件向您的系统订阅内核补丁模块(也称为内核实时补丁)提供的修复。该插件为系统当前使用的任何内核启用自动订阅,以及在以后安装地内核。
先决条件
- 您有 root 权限。
流程
可选:检查所有安装的内核以及您当前运行的内核:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 安装
kpatch-dnf插件:yum install kpatch-dnf
# yum install kpatch-dnfCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启用自动订阅内核实时补丁:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个命令订阅所有当前安装的内核,以接收内核实时补丁。命令还会为所有安装的内核安装并应用最新的累积实时补丁(如果有)。
当您更新内核时,会在新的内核安装过程中自动安装实时补丁。
内核补丁模块也安装到
/var/lib/kpatch/目录中,供systemd系统和服务管理器以后重启时载入。注意当给定内核没有可用的实时补丁时,将安装空的实时补丁软件包。空的 live patching 软件包会有一个 0-0 的 kpatch_version-kpatch_release,如
kpatch-patch-4_18_0-240-0-0.el8.x86_64.rpm。空 RPM 安装会将系统订阅到以后为给定内核提供的所有实时补丁。
验证
验证是否所有安装的内核都已修补:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出显示您正在运行的内核,另一个安装的内核已分别修补了来自
kpatch-patch-4_18_0-240_10_1-0-1.rpm和kpatch-patch-4_18_0-240_15_1-0-1.rpm软件包的修复。注意输入
kpatch list命令不会返回一个空的实时补丁软件包。使用rpm -qa | grep kpatch命令替代。rpm -qa | grep kpatch kpatch-patch-4_18_0-477_21_1-0-0.el8_8.x86_64 kpatch-dnf-0.9.7_0.4-2.el8.noarch kpatch-0.9.7-2.el8.noarch
# rpm -qa | grep kpatch kpatch-patch-4_18_0-477_21_1-0-0.el8_8.x86_64 kpatch-dnf-0.9.7_0.4-2.el8.noarch kpatch-0.9.7-2.el8.noarchCopy to Clipboard Copied! Toggle word wrap Toggle overflow
42.7. 禁用实时补丁流的自动订阅 复制链接链接已复制到粘贴板!
当您向内核补丁模块提供的修复订阅系统时,您的订阅是 自动的。您可以禁用此功能,以禁用 kpatch-patch 软件包的自动安装。
先决条件
- 您有 root 权限。
流程
可选:检查所有安装的内核和您当前运行的内核:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 禁用向内核实时补丁的自动订阅:
yum kpatch manual Updating Subscription Management repositories.
# yum kpatch manual Updating Subscription Management repositories.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以检查成功的结果:
yum kpatch status ... Updating Subscription Management repositories. Last metadata expiration check: 0:30:41 ago on Tue Jun 14 15:59:26 2022. Kpatch update setting: manual
# yum kpatch status ... Updating Subscription Management repositories. Last metadata expiration check: 0:30:41 ago on Tue Jun 14 15:59:26 2022. Kpatch update setting: manualCopy to Clipboard Copied! Toggle word wrap Toggle overflow
42.8. 更新内核补丁模块 复制链接链接已复制到粘贴板!
内核补丁模块通过 RPM 软件包提供并应用。更新累积内核补丁模块的过程与更新任何其他 RPM 软件包类似。
先决条件
- 系统已订阅实时补丁流,如将当前安装的内核订阅到实时补丁流中所述。
流程
更新至当前内核的新累计版本:
yum update "kpatch-patch = $(uname -r)"
# yum update "kpatch-patch = $(uname -r)"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以上命令会自动安装并应用所有当前运行的内核可用的更新。包括将来发布的所有实时补丁。
另外,更新所有安装的内核补丁模块:
yum update "kpatch-patch"
# yum update "kpatch-patch"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
当系统重启到同一内核时,kpatch.service systemd 服务会再次对内核进行补丁。
42.9. 删除 live patching 软件包 复制链接链接已复制到粘贴板!
通过删除 live patching 软件包来禁用 Red Hat Enterprise Linux 内核实时补丁解决方案。
先决条件
- 根权限
- 已安装 live patching 软件包。
流程
选择实时补丁软件包。
yum list installed | grep kpatch-patch kpatch-patch-4_18_0-94.x86_64 1-1.el8 @@commandline …
# yum list installed | grep kpatch-patch kpatch-patch-4_18_0-94.x86_64 1-1.el8 @@commandline …Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例输出列出了您安装的实时补丁软件包。
删除实时补丁软件包。
yum remove kpatch-patch-4_18_0-94.x86_64
# yum remove kpatch-patch-4_18_0-94.x86_64Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除实时补丁软件包后,内核将保持补丁,直到下次重启为止,但内核补丁模块会从磁盘中删除。将来重启时,对应的内核将不再被修补。
- 重启您的系统。
验证 live patching 软件包是否已删除:
yum list installed | grep kpatch-patch
# yum list installed | grep kpatch-patchCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果软件包已被成功删除,命令不会显示任何输出。
验证
验证内核实时补丁解决方案是否已禁用:
kpatch list Loaded patch modules:
# kpatch list Loaded patch modules:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例输出显示内核没有补丁,实时补丁解决方案没有激活,因为目前没有加载补丁模块。
目前,红帽不支持在不重启系统的情况下还原实时补丁。如有任何问题,请联系我们的支持团队。
42.10. 卸载内核补丁模块 复制链接链接已复制到粘贴板!
防止 Red Hat Enterprise Linux 内核实时补丁解决方案在以后的引导中应用内核补丁模块。
先决条件
- 根权限
- 已安装实时补丁软件包。
- 已安装并载入内核补丁模块。
流程
选择内核补丁模块:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 卸载所选的内核补丁模块。
kpatch uninstall kpatch_4_18_0_94_1_1 uninstalling kpatch_4_18_0_94_1_1 (4.18.0-94.el8.x86_64)
# kpatch uninstall kpatch_4_18_0_94_1_1 uninstalling kpatch_4_18_0_94_1_1 (4.18.0-94.el8.x86_64)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,卸载的内核补丁模块仍然被加载:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 卸载所选模块后,内核将保持补丁,直到下次重启为止,但已从磁盘中删除内核补丁模块。
- 重启您的系统。
验证
验证内核补丁模块是否已卸载:
kpatch list Loaded patch modules: …
# kpatch list Loaded patch modules: …Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个示例输出显示没有加载或已安装的内核补丁模块,因此内核没有被修补,且内核实时补丁解决方案没有激活。
42.11. 禁用 kpatch.service 复制链接链接已复制到粘贴板!
防止 Red Hat Enterprise Linux 内核实时补丁解决方案在以后的引导时全局应用所有内核补丁模块。
先决条件
- 根权限
- 已安装实时补丁软件包。
- 已安装并载入内核补丁模块。
流程
验证
kpatch.service是否已启用。systemctl is-enabled kpatch.service enabled
# systemctl is-enabled kpatch.service enabledCopy to Clipboard Copied! Toggle word wrap Toggle overflow 禁用
kpatch.service。systemctl disable kpatch.service Removed /etc/systemd/system/multi-user.target.wants/kpatch.service.
# systemctl disable kpatch.service Removed /etc/systemd/system/multi-user.target.wants/kpatch.service.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,应用的内核补丁模块仍然被载入:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 重启您的系统。
可选:验证
kpatch.service的状态。systemctl status kpatch.service ● kpatch.service - "Apply kpatch kernel patches" Loaded: loaded (/usr/lib/systemd/system/kpatch.service; disabled; vendor preset: disabled) Active: inactive (dead)
# systemctl status kpatch.service ● kpatch.service - "Apply kpatch kernel patches" Loaded: loaded (/usr/lib/systemd/system/kpatch.service; disabled; vendor preset: disabled) Active: inactive (dead)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例输出测试
kpatch.service已禁用。因此,内核实时修补解决方案不活跃。验证内核补丁模块是否已卸载。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上面的示例输出显示内核补丁模块仍处于安装状态,但没有修补内核。
目前,红帽不支持在不重启系统的情况下还原实时补丁。如有任何问题,请联系我们的支持团队。
第 43 章 使用控制组群为应用程序设置系统资源限制 复制链接链接已复制到粘贴板!
使用控制组(cgroups)内核功能,您可以控制应用程序的资源使用情况来更有效地使用它们。
您可以为以下任务使用 cgroups :
- 为系统资源分配设置限制。
- 将硬件资源优先分配给特定的进程。
- 防止某些进程获取硬件资源。
43.1. 控制组简介 复制链接链接已复制到粘贴板!
使用 控制组 Linux 内核功能,您可以将进程组织为按层排序的组 - cgroups。您可以通过为 cgroup 虚拟文件系统提供结构来定义层次结构(控制组树),默认挂载到 /sys/fs/cgroup/ 目录。
systemd 服务管理器使用 cgroups 来组织它管理的所有单元和服务。您可以通过创建和删除 /sys/fs/cgroup/ 目录中的子目录来手动管理 cgroups 的层次结构。
然后,内核中的资源控制器通过限制、优先处理或分配这些进程的系统资源来在 cgroups 中修改进程的行为。这些资源包括以下内容:
- CPU 时间
- 内存
- 网络带宽
- 这些资源的组合
cgroups 的主要用例是聚合系统进程,并在应用程序和用户之间划分硬件资源。这样可以提高环境的效率、稳定性和安全性。
- 控制组群版本 1
控制组版本 1 (
cgroups-v1) 提供按资源控制器层次结构。每个资源(如 CPU、内存或 I/O)都有自己的控制组层次结构。您可以组合不同的控制组层次结构,使一个控制器可以与另一个控制器协调管理各自的资源。但是,当两个控制器属于不同的进程层次结构时,协调会被限制。cgroups-v1控制器在大型时间跨度开发,从而造成控制文件的行为和命名不一致。- 控制组群版本 2
控制组版本 2 (
cgroups-v2)提供单一控制组层次结构,用于挂载所有资源控制器。控制文件行为和命名在不同控制器之间保持一致。
注意RHEL 8.2 及更新的版本完全支持
cgroups-v2。如需更多信息,请参阅 RHEL 8 现在完全支持控制组群 v2。
43.2. 内核资源控制器简介 复制链接链接已复制到粘贴板!
内核资源控制器启用控制组的功能。RHEL 8 支持 控制组群版本 1 (cgroups-v1 )和 控制组版本 2 (cgroups-v2) 的各种控制器。
资源控制器也称为控制组子系统,是一个代表单一资源的内核子系统,如 CPU 时间、内存、网络带宽或磁盘 I/O。Linux 内核提供由 systemd 服务管理器自动挂载的一系列资源控制器。您可以在 /proc/cgroups 文件中找到当前挂载的资源控制器的列表。
cgroups-v1 提供的控制器:
blkio- 设置对块设备的输入/输出访问的限制。
cpu-
调整控制组任务的完全公平调度程序(CFS)的参数。
cpu控制器与cpuacct控制器一起挂载在同一挂载上。 cpuacct-
创建控制组群中任务所使用的有关 CPU 资源的自动报告。
cpuacct控制器与cpu控制器一起挂载在同一挂载上。 cpuset- 将控制组任务限制为仅在指定 CPU 子集上运行,并指示任务仅使用指定内存节点上的内存。
devices- 控制控制组群中任务对设备的访问。
freezer- 暂停或恢复控制组中的任务。
内存- 设置控制组中任务对内存使用的限制,并对这些任务使用的内存资源生成自动报告。
net_cls-
使用类标识符(
classid)标记网络数据包,使 Linux 流量控制器(tc命令)能够识别来自特定控制组任务的数据包。net_cls子系统net_filter(iptables) 也可使用此标签对此类数据包执行操作。net_filter使用防火墙标识符(fwid)标记网络套接字,它允许 Linux 防火墙识别来自特定控制组任务的数据包(通过使用iptables命令)。 net_prio- 设置网络流量的优先级。
pids- 为控制组群中的多个进程及其子进程设置限制。
perf_event-
通过
perf性能监控和报告工具对监控的任务进行分组。 rdma- 对控制组群中远程直接内存访问/InfiniBand 特定资源设置限制。
hugetlb- 按控制组群中的任务限制大量虚拟内存页面的使用。
cgroups-v2 提供的控制器:
io- 设置对块设备的输入/输出访问的限制。
内存- 设置控制组中任务对内存使用的限制,并对这些任务使用的内存资源生成自动报告。
pids- 为控制组群中的多个进程及其子进程设置限制。
rdma- 对控制组群中远程直接内存访问/InfiniBand 特定资源设置限制。
cpu- 为控制组的任务调整完全公平调度程序(CFS)的参数,并创建控制组中任务所使用的 CPU 资源的自动报告。
cpuset-
将控制组任务限制为仅在指定 CPU 子集上运行,并指示任务仅使用指定内存节点上的内存。仅支持具有新分区功能的核心功能(
cpus{,.effective},mems{,.effective})。 perf_event-
通过
perf性能监控和报告工具对监控的任务进行分组。perf_event自动在 v2 层次结构上启用。
资源控制器可以在 cgroups-v1 层次结构或 cgroups-v2 层次结构中使用,不能同时在两者中使用。
43.3. 命名空间简介 复制链接链接已复制到粘贴板!
命名空间为组织和识别软件对象创建单独的空格。这使得它们相互影响。因此,每个软件对象都包含自己的一组资源,如挂载点、网络设备或主机名,即使它们共享相同的系统。
使用命名空间的最常见技术是容器。
对特定全局资源的更改仅对该命名空间中的进程可见,不影响系统或其他命名空间的其余部分。
要检查进程所属的命名空间,您可以在 /proc/<PID>/ns/ 目录中检查符号链接。
| Namespace | Isolates |
|---|---|
| Mount | 挂载点 |
| UTS | 主机名和 NIS 域名 |
| IPC | 系统 V IPC, POSIX 消息队列 |
| PID | 进程 ID |
| Network | 网络设备、堆栈、端口等 |
| User | 用户和组群 ID |
| Control groups | 控制组群根目录 |
43.4. 使用 cgroups-v1 为应用程序设置 CPU 限制 复制链接链接已复制到粘贴板!
要使用 控制组版本 1 ( cgroups-v1)配置对应用程序的 CPU 限制,请使用 /sys/fs/ 虚拟文件系统。
先决条件
- 您有 root 权限。
- 您有一个应用程序来限制其系统中安装的 CPU 消耗。
您确认已挂载了
cgroups-v1控制器:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
流程
识别您要限制 CPU 消耗的应用程序的进程 ID (PID):
Copy to Clipboard Copied! Toggle word wrap Toggle overflow PID 为 6955的sha1sum示例应用程序会消耗大量 CPU 资源。在
cpu资源控制器目录中创建子目录:mkdir /sys/fs/cgroup/cpu/Example/
# mkdir /sys/fs/cgroup/cpu/Example/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此目录代表控制组,您可以在其中放置特定进程,并向进程应用某些 CPU 限制。同时,目录中将创建多个
cgroups-v1接口文件和cpu特定于控制器的文件。可选:检查新创建的控制组:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cpuacct.usage,cpu.cfs._period_us等文件代表特定的配置和/或限制,它们可以为 Example控制组中的进程设置。请注意,文件名前缀为它们所属的控制组控制器的名称。默认情况下,新创建的控制组继承对系统整个 CPU 资源的访问权限,且无限制。
为控制组群配置 CPU 限制:
echo "1000000" > /sys/fs/cgroup/cpu/Example/cpu.cfs_period_us echo "200000" > /sys/fs/cgroup/cpu/Example/cpu.cfs_quota_us
# echo "1000000" > /sys/fs/cgroup/cpu/Example/cpu.cfs_period_us # echo "200000" > /sys/fs/cgroup/cpu/Example/cpu.cfs_quota_usCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
cpu.cfs_period_us文件代表控制组对 CPU 资源的访问权限的频率。时间段为微秒(swigs, "us")。上限为 1000 000 微秒,下限为 1000 微秒。 cpu.cfs_quota_us文件表示控制组中的所有进程可以在一个期间内共同运行的时间(以微秒为单位)的总时间,如cpu.cfs_period_us定义。当控制组中的进程在单个期间内使用配额指定的所有时间时,它们会在句点的剩余时间内节流,并且不允许在下一个周期前运行。下限为 1000 微秒。上面的示例命令设定 CPU 时间限值,使得
Example控制组中的所有进程仅能每 1 秒(cpu.cfs_quota_us定义)每 1 秒(由cpu.cfs_period_us定义)运行 0.2 秒。
-
可选:验证限制:
cat /sys/fs/cgroup/cpu/Example/cpu.cfs_period_us /sys/fs/cgroup/cpu/Example/cpu.cfs_quota_us 1000000 200000
# cat /sys/fs/cgroup/cpu/Example/cpu.cfs_period_us /sys/fs/cgroup/cpu/Example/cpu.cfs_quota_us 1000000 200000Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将应用程序的 PID 添加到
Example控制组群中:echo "6955" > /sys/fs/cgroup/cpu/Example/cgroup.procs
# echo "6955" > /sys/fs/cgroup/cpu/Example/cgroup.procsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令可确保特定的应用成为
Example控制组的成员,并且不超过为Example控制组配置的 CPU 限值。PID 必须代表系统中的一个已存在的进程。此处的PID 6955分配给sha1sum /dev/zero & 进程,用于演示cpu控制器的用例。
验证
验证应用程序是否在指定的控制组群中运行:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用程序的进程在
Example控制组中运行,将 CPU 限制应用到应用程序的进程。确定节流应用程序的当前 CPU 消耗:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,
PID 6955的 CPU 消耗从 99% 减少到 20%。
cpu.cfs_period_us 和 cpu.cfs_quota_us 的 cgroups-v2对应项是 cpu.max 文件。cpu.max 文件可以通过 cpu 控制器获得。
第 44 章 使用 BPF Compiler Collection 分析系统性能 复制链接链接已复制到粘贴板!
BPF Compiler Collection (BCC)通过组合 Berkeley Packet Filter (BPF)的功能来分析系统性能。使用 BPF,您可以安全地运行内核中的自定义程序,以访问系统事件和数据,以性能监控、追踪和调试。BCC 简化了 BPF 程序的开发和部署,用户可使用工具和库从其系统中提取重要见解。
44.1. 安装 bcc-tools 软件包 复制链接链接已复制到粘贴板!
安装 bcc-tools 软件包,该软件包还会将 BPF Compiler Collection (BCC)库作为依赖项安装。
流程
安装
bcc-tools。yum install bcc-tools
# yum install bcc-toolsCopy to Clipboard Copied! Toggle word wrap Toggle overflow BCC 工具安装在
/usr/share/bcc/tools/目录中。
验证
检查安装的工具:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 列表中的
doc目录提供了每个工具的文档。
44.2. 使用所选 bcc-tools 进行性能调整 复制链接链接已复制到粘贴板!
使用 BPF Compiler Collection (BCC)库中的某些预先创建的程序来在每个事件基础上高效、安全地分析系统性能。BCC 库中预创建的程序集可作为创建其他程序的示例。
先决条件
流程
- 使用
execsnoop检查系统进程 -
在一个终端中运行
execsnoop程序:
/usr/share/bcc/tools/execsnoop
# /usr/share/bcc/tools/execsnoopCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要创建
ls命令的简短进程,请在另一个终端中输入:ls /usr/share/bcc/tools/doc/
$ ls /usr/share/bcc/tools/doc/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行
execsnoop的终端显示类似如下的输出:PCOMM PID PPID RET ARGS ls 8382 8287 0 /usr/bin/ls --color=auto /usr/share/bcc/tools/doc/ ...
PCOMM PID PPID RET ARGS ls 8382 8287 0 /usr/bin/ls --color=auto /usr/share/bcc/tools/doc/ ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow execsnoop程序打印消耗系统资源的每个新进程的输出行。它甚至会检测很快运行的程序(如ls)的进程,大多数监控工具也不会进行注册。execsnoop输出显示以下字段:
-
在一个终端中运行
- PCOMM
-
父进程名称。(
ls) - PID
-
进程 ID。(
8382) - PPID
-
父进程 ID。(
8287) - RET
-
exec()系统调用的返回值(0),其将程序代码加载到新进程中。 - ARGS
- 启动的程序的参数的位置。
要查看 execsnoop 的详情、示例和选项,请参阅 /usr/share/bcc/tools/doc/execsnoop_example.txt 文件。
有关 exec () 的详情,请查看 exec (3) 手册页。
- 使用
opensnoop跟踪命令打开的文件 -
在一个终端中,运行
opensnoop程序,以打印仅由uname命令进程打开的文件的输出:
/usr/share/bcc/tools/opensnoop -n uname
# /usr/share/bcc/tools/opensnoop -n unameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在另一个终端中,输入以下命令打开某些文件:
uname
$ unameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行
opensnoop的终端显示类似如下的输出:PID COMM FD ERR PATH 8596 uname 3 0 /etc/ld.so.cache 8596 uname 3 0 /lib64/libc.so.6 8596 uname 3 0 /usr/lib/locale/locale-archive ...
PID COMM FD ERR PATH 8596 uname 3 0 /etc/ld.so.cache 8596 uname 3 0 /lib64/libc.so.6 8596 uname 3 0 /usr/lib/locale/locale-archive ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow opensnoop程序在整个系统中监视open ()系统调用,并为uname尝试打开的每个文件打印一行输出。opensnoop输出显示以下字段:- PID
-
进程 ID。(
8596) - COMM
-
进程名称。(
uname) - FD
-
文件描述符 -
open()返回的值,以指向打开的文件。(3) - ERR
- 任何错误。
- PATH
-
open()试图打开的文件的位置。
如果命令尝试读取不存在的文件,则
FD列返回-1,ERR列将打印与相关错误对应的值。因此,Opennoop可以帮助您识别行为不正确的应用程序。
-
在一个终端中,运行
要查看 opensnoop 的更多详细信息、示例和选项,请参阅 /usr/share/bcc/tools/doc/opensnoop_example.txt 文件。
有关 open () 的更多信息,请参阅 open (2) 手册页。
- 使用
biotop监控磁盘上执行 I/O 操作的主要进程 -
在一个终端中使用参数
30运行biotop程序生成 30 秒概述:
/usr/share/bcc/tools/biotop 30
# /usr/share/bcc/tools/biotop 30Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果未提供任何参数,则默认情况下输出屏幕会每 1 秒刷新一次。
在另一个终端中,输入命令从本地硬盘设备读取内容并将输出写入
/dev/zero文件:dd if=/dev/vda of=/dev/zero
# dd if=/dev/vda of=/dev/zeroCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此步骤会生成特定的 I/O 流量来演示
biotop。运行
biotop的终端显示类似如下的输出:Copy to Clipboard Copied! Toggle word wrap Toggle overflow biotop输出显示以下字段:
-
在一个终端中使用参数
- PID
-
进程 ID。(
9568) - COMM
-
进程名称。(
dd) - DISK
-
执行读操作的磁盘。(
vda) - I/O
- 执行的读操作的数量。(16294)
- Kbytes
- 读操作达到的 Kbytes 量。(14,440,636)
- AVGms
- 读操作的平均 I/O 时间。(3.69)
有关 biotop 的详情、示例和选项,请查看 /usr/share/bcc/tools/doc/biotop_example.txt 文件。
有关 dd 的更多信息,请参阅 dd (1) 手册页。
使用 xfsslower 来公开意外慢的文件系统操作
xfsslower 测量 XFS 文件系统执行读取、写入、打开或同步(fsync)操作所花费的时间。1 参数可确保程序仅显示比 1 ms 较慢的操作。
在一个终端中运行
xfsslower程序:/usr/share/bcc/tools/xfsslower 1
# /usr/share/bcc/tools/xfsslower 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果未提供任何参数,
xfsslower默认会显示比 10 ms 慢的操作。在另一个终端中,输入以下命令在
vim编辑器中创建一个文本文件,以开始与 XFS 文件系统交互:vim text
$ vim textCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行
xfsslower的终端显示在保存上一步中的文件时:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 每行代表文件系统中的一个操作,它所需的时间超过特定阈值。
xfsslower检测可能的文件系统问题,这可能会意外慢的操作。xfsslower输出显示以下字段:- COMM
-
进程名称。(
b'bash') - T
操作类型。(
R)- Read
- Write
- Sync
- OFF_KB
- KB 为单位的文件偏移。(0)
- FILENAME
- 读取、写入或同步的文件。
要查看 xfsslower 的详情、示例和选项,请参阅 /usr/share/bcc/tools/doc/xfsslower_example.txt 文件。
有关 fsync 的详情请参考 fsync (2) 手册页。
部分 VII. 高可用性系统的设计 复制链接链接已复制到粘贴板!
第 45 章 高可用性附加组件概述 复制链接链接已复制到粘贴板!
高可用性附加组件是一个集群的系统,它为关键生产环境服务提供可靠性、可伸缩性以及高可用性。
集群由两个或者多个计算机(称为 节点(node) 或 成员(member))组成来一起执行任务。集群可用于提供高可用性服务或资源。多个机器的冗余是用来在出现各种失败时对环境的保护。
高可用性型机器通过消除单点失效以及在一个节点停止运作时将服务从一个群集节点切换到另外一个节点来提供高可用性服务。通常,高可用性群集中的服务会进行读写数据的操作(使用通过读写方式挂载的文件系统)。因此,高可用性集群必须维护数据的完整性,因为一个集群节点可能需要接管另外一个集群节点的任务。对于集群外的客户端,高可用性集群中出现的节点故障是不可见的。(高可用性机器有时候被称为故障转移(failover)集群。)High Availability Add-On 通过它的高可用性服务管理组件 Pacemaker 为集群提供高可用性。
红帽提供了各种用于规划、配置和维护红帽高可用性集群的文档。有关向 Red Hat 集群文档的各种区域提供指导索引的文章列表,请参阅 红帽高可用性附加组件文档指南。
45.1. High Availability Add-On 附件 复制链接链接已复制到粘贴板!
红帽高可用性附加组件由多个组件组成,它们提供高可用性服务。
High Availability Add-On 的主要组件如下:
- 集群基础架构 - 为节点作为集群一起工作提供基本功能:配置文件管理、成员资格管理、锁定管理和隔离。
- 高可用性服务管理 - 在节点无法正常运行时,提供从一个集群节点故障转移到另一个集群节点。
- 集群管理工具 - 用于设置、配置和管理高可用性附加组件的配置和管理工具。这些工具用于集群基础结构组件、高可用性和服务管理组件以及存储。
您还可以为高可用性附加组件添加以下组件:
- Red Hat GFS2 (Global File System 2)- Resilient Storage Add-On 的一部分,它提供与高可用性附加组件一起使用的集群文件系统。GFS2 允许多个节点进行块级别的存储共享,就好像每个群集节点都连接至本地存储空间一样。GFS2 集群文件系统需要一个集群基础结构。
-
LVM Locking Daemon (
lvmlockd)- Resilient Storage Add-On 的一部分,它提供集群存储的卷管理。lvmlockd支持还需要集群基础架构。 - HAProxy - 在第 4 层(TCP)和第 7 层(HTTP、HTTPS)服务中提供高可用性负载平衡和故障转移的路由软件。
45.2. 高可用性附加组件概念 复制链接链接已复制到粘贴板!
红帽高可用性附加组件集群的一些主要概念如下:
45.2.1. 隔离 复制链接链接已复制到粘贴板!
如果与集群中的单个节点通信失败,则集群中的其他节点必须能够限制或释放对故障集群节点可能有权访问的资源的访问。无法通过联系集群节点本身来实现。因为集群节点本身可能无法响应。反之,必须提供一个外部的方法来实现。这个方法为称为隔离(fencing)。隔离设备是一个外部设备,集群使用它用来限制错误节点对共享资源的访问,或对集群的节点执行硬重启。
如果没有配置隔离设备,您就无法知道以前被出现问题的集群节点使用的资源已被释放,这可能会阻止服务在集群的其他节点中运行。因此,该系统可能会错误地假设集群节点释放了它的资源,从而可能导致数据崩溃和数据丢失。没有隔离设备配置的数据完整性就无法保证,集群配置将不被支持。
当隔离进行时,不允许执行其他集群操作。在隔离完成前,或集群节点重启后重新加入集群前,集群的正常操作不能恢复。
有关隔离的更多信息,请参阅红帽知识库解决方案 红帽高可用性集群中的隔离。
45.2.2. 仲裁 复制链接链接已复制到粘贴板!
为了保持集群的完整性和可用性,集群系统使用一个称为仲裁(quorum) 的概念来防止数据崩溃和丢失。当超过一半的集群节点在线时,集群就已被“仲裁”。为减少由于失败造成数据崩溃的机会,在不满足仲裁数量的情况下,Pacemaker 会默认停止所有资源。
仲裁是通过一个投票(voting)系统来建立的。当一个集群节点工作不正常,或丢掉了与其他集群部分的通信,则大多数工作的节点可以通过投票来分离有问题的节点,如果需要,对节点进行隔离。
例如,在一个 6 个节点集群中,在至少有 4 个集群节点正常工作时就满足了仲裁。如果大多数节点离线或不可用,集群就不再具仲裁数量,Pacemaker 会停止集群的服务。
Pacemaker 仲裁的功能可以防止出现脑裂(split-brain)问题。当集群中出现无法相互通信的部分,而每个部分都可以在自己的部分中作为一个独立的集群运行,则代表集群出现了脑裂的问题。这可能会导致出现数据被破坏的问题。有关处于脑裂状态意味着什么,以及仲裁概念的更多信息,请参阅红帽知识库文章 RHEL 高可用性集群的概念 - 仲裁。
Red Hat Enterprise Linux 高可用性附加组件集群使用 votequorum 服务,并结合隔离,以避免脑裂的情况。为集群中的每个系统分配一组投票机制,只能在大多数投票机制都存在时才允许执行集群操作。
45.2.3. 集群资源 复制链接链接已复制到粘贴板!
集群资源 是要由集群服务管理的程序、数据或应用程序的实例。这些资源通过代理(agent)作为一个标准接口,用来在集群环境中管理资源。
为确保资源健康,您可以在资源的定义中添加监控操作。如果您没有为资源指定监控操作,则会默认添加一个。
您可以通过配置约束(constraint)来决定集群中的资源行为。您可以配置以下约束类别:
- location 约束 - 位置约束决定资源可在哪个节点上运行。
- 排序约束 - 排序约束决定资源运行的顺序。
- colocation 约束 - 共处约束决定资源相对于其他资源的位置。
集集的一个最常见的元素是一组资源,这些资源需要放置在一起,并按顺序启动并按反顺序停止。为简化此配置,Pacemaker 支持组的概念。
45.3. Pacemaker 概述 复制链接链接已复制到粘贴板!
Pacemaker 是一个集群资源管理器。它通过使用集群基础结构的消息和成员资格功能来实现集群服务和资源的最大可用性。
45.3.1. Pacemaker 架构组件 复制链接链接已复制到粘贴板!
使用 Pacemaker 配置的集群由独立的组件守护进程组成,这些守护进程监控集群成员资格、管理服务的脚本以及监控不同资源的管理子系统。
以下组件组成 Pacemaker 架构:
- Cluster Information Base(CIB)
- Pacemaker 信息守护进程使用 XML 在内部向所有其他集群节点分发和同步当前的配置和状态信息。
- 集群资源管理守护进程(CRMd)
Pacemaker 集群资源操作通过这个守护进程进行路由。由 CRMd 管理的资源可由客户端系统查询,并在需要时进行移动、实例化和更改。
每个节点还包括一个本地资源管理器守护进程(LRMd),它充当 CRMd 和资源间的接口。LRMd 将命令从 CRMd 传递给代理,如启动和停止状态信息。
- STONITH(Shoot the Other Node in the Head)
- STONITH 是 Pacemaker 的隔离(fencing)实现。它在 Pacemaker 中作为集群资源使用,用于处理保护请求,强制关闭节点并从集群中移除它们以确保数据的完整性。STONITH 在 CIB 中配置,它可以作为普通的集群资源被监控。
- corosync
corosync是用于高可用性集群的核心成员资格和成员沟通需要的组件。它使用一个同名称的守护进程。它是 High Availability Add-On 正常运行所必需的功能。除了成员资格和消息功能外,
corosync还 :- 管理仲裁规则并进行裁定。
- 为在集群的多个成员间协调或操作的应用程序提供消息功能,因此必须在实例间进行有状态或其他信息通信。
-
使用
kronosnet库作为其网络传输,提供多个冗余链接和自动故障转移。
45.3.2. Pacemaker 配置和管理工具 复制链接链接已复制到粘贴板!
High Availability Add-On 有两个配置工具用于集群部署、监控和管理。
pcspcs命令行界面控制并配置 Pacemaker 和corosync心跳守护进程。基于命令行的程序pcs可以执行以下集群管理任务:- 创建并配置 Pacemaker/Corosync 集群
- 在集群运行时修改集群配置
- 远程配置 Pacemaker 和 Corosync 以及启动、停止和显示集群状态信息
pcsdWeb UI- 用于创建和配置 Pacemaker/Corosync 集群的图形用户界面。
45.3.3. 集群和 Pacemaker 配置文件 复制链接链接已复制到粘贴板!
红帽高可用性附加组件的配置文件是 corosync.conf 和 cib.xml。
corosync.conf 文件提供了 corosync 所使用的集群参数,corosync 是构建 Pacemaker 的集群管理器。通常,您不应该直接编辑 corosync.conf,而是使用 pcs 或 pcsd 接口。
cib.xml 文件是一个 XML 文件,代表集群配置和集群中所有资源的当前状态。Pacemaker 的集群信息基础(Cluster Information Base,CIB)会使用这个文件。CIB 的内容会在整个集群中自动保持同步。不要直接编辑 cib.xml 文件;要使用 pcs 或 pcsd 界面。
第 46 章 Pacemaker 入门 复制链接链接已复制到粘贴板!
要熟悉您用来创建 Pacemaker 集群的工具和进程,您可以执行以下流程。这些内容适用于想了解集群软件以及如何管理它,而不需要配置集群的用户。
这些步骤并不会创建受支持的红帽集群。受支持的红帽集群至少需要两个节点并配置隔离设备。有关红帽对 RHEL 高可用性集群的支持政策、要求和限制的详情,请参考 RHEL 高可用性集群的支持政策。
46.1. 学习使用 Pacemaker 复制链接链接已复制到粘贴板!
通过这个过程,您将了解如何使用 Pacemaker 设置集群、如何显示集群状态以及如何配置集群服务。这个示例创建了一个 Apache HTTP 服务器作为集群资源,并显示了集群在资源失败时如何响应。
在本例中:
-
节点为
z1.example.com。 - 浮动 IP 地址为 192.168.122.120。
先决条件
- 运行 RHEL 8 的单个节点
- 一个浮动的 IP 地址,它与一个节点静态分配的 IP 地址处于同一个网络。
-
运行的节点的名称位于
/etc/hosts文件中
流程
从 High Availability 频道安装 Red Hat High Availability Add-On 软件包,然后启动并启用
pcsd服务。yum install pcs pacemaker fence-agents-all ... systemctl start pcsd.service systemctl enable pcsd.service
# yum install pcs pacemaker fence-agents-all ... # systemctl start pcsd.service # systemctl enable pcsd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您正在运行
firewalld守护进程,启用红帽高可用性附加组件所需的端口。firewall-cmd --permanent --add-service=high-availability firewall-cmd --reload
# firewall-cmd --permanent --add-service=high-availability # firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在集群的每个节点上为用户
hacluster设置密码,并为您要从中运行pcs命令的集群中每个节点验证用户hacluster。本例只使用一个节点,您要从这个节点中运行命令。把这一步包括在这个步骤的原因是,它是配置一个被支持的红帽高可用性多节点集群的一个必要步骤。passwd hacluster ... pcs host auth z1.example.com
# passwd hacluster ... # pcs host auth z1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建名为
my_cluster的集群,具有一个成员并检查集群的状态。这个命令会创建并启动集群。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 红帽高可用性集群要求为集群配置隔离功能。在红帽知识库解决方案 Red Hat High Availability Cluster 中的隔离 中描述了此要求的原因。但是,这里只显示如何使用基本的 Pacemaker 命令,因此将
stonith-enabled集群选项设置为false来禁用隔离功能。警告对生产集群而言,不要使用
stonith-enabled=false。它通知集群,假设出现故障的节点已被安全隔离。pcs property set stonith-enabled=false
# pcs property set stonith-enabled=falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在您的系统中配置网页浏览器并创建一个网页来显示简单文本信息。如果您正在运行
firewalld守护进程,启用httpd所需的端口。注意不要使用
systemctl enable启用任何由集群管理的服务在系统引导时启动。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要让 Apache 资源代理获得 Apache 状态,在现有配置中添加以下内容来启用状态服务器 URL。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
IPaddr2和apache资源,供集群管理。IPaddr2资源是一个浮动 IP 地址,它不能是已经与物理节点关联的浮动 IP 地址。如果没有指定IPaddr2资源的 NIC 设备,浮动 IP 必须位于与静态分配的 IP 地址相同的网络中。您可以使用
pcs resource list命令显示所有可用资源类型的列表。您可以使用pcs resource describe resourcetype命令显示您可以为指定资源类型设置的参数。例如,以下命令显示您可以为类型apache的资源设置的参数:pcs resource describe apache ...
# pcs resource describe apache ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这个示例中,IP 地址资源和 apache 资源都配置为名为
apachegroup的组的一部分,这样可确保在配置正常工作的多节点集群时让资源在同一节点中运行。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置群集资源后,您可以使用
pcs resource config命令显示为该资源配置的选项。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 将浏览器指向使用您配置的浮动 IP 地址创建的网站。这个命令会显示您定义的文本信息。
停止 apache web 服务并检查集群的状态。使用
killall -9模拟应用程序级别的崩溃。killall -9 httpd
# killall -9 httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查集群状态。您应该看到停止 web 服务会导致操作失败,但集群软件会重启该服务,您应该仍然可以访问网站。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以在服务启动并再次运行后,清除失败的资源中的失败状态。当您查看集群状态时,失败的操作通知将不再出现。
pcs resource cleanup WebSite
# pcs resource cleanup WebSiteCopy to Clipboard Copied! Toggle word wrap Toggle overflow 当您完成查看集群和集群状态后,停止节点上的集群服务。虽然在这里只在一个节点中只启动这个服务,但包含了
--all参数,它会停止在一个实际的多节点集群中的所有节点上的集群服务。pcs cluster stop --all
# pcs cluster stop --allCopy to Clipboard Copied! Toggle word wrap Toggle overflow
46.2. 了解配置故障转移 复制链接链接已复制到粘贴板!
以下流程介绍了创建运行一个服务的 Pacemaker 集群,当在其上运行服务的节点变得不可用时,会从一个节点切换到另一个节点。通过这个步骤,您可以了解如何在双节点集群中创建服务,并可以查看在运行该服务的节点出现问题时会出现什么情况。
这个示例步骤配置一个运行 Apache HTTP 服务器的双节点 Pacemaker 集群。然后,您可以停止一个节点上的 Apache 服务来查看该服务仍然可用。
在本例中:
-
节点为
z1.example.com和z2.example.com。 - 浮动 IP 地址为 192.168.122.120。
先决条件
- 两个运行 RHEL 8 的节点可以相互通信
- 一个浮动的 IP 地址,它与一个节点静态分配的 IP 地址处于同一个网络。
-
运行的节点的名称位于
/etc/hosts文件中
流程
在这两个节点中,通过 High Availability 频道安装 Red Hat High Availability Add-On 软件包,并启动并启用
pcsd服务。yum install pcs pacemaker fence-agents-all ... systemctl start pcsd.service systemctl enable pcsd.service
# yum install pcs pacemaker fence-agents-all ... # systemctl start pcsd.service # systemctl enable pcsd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您正在运行
firewalld守护进程,在两个节点上启用红帽高可用性附加组件所需的端口。firewall-cmd --permanent --add-service=high-availability firewall-cmd --reload
# firewall-cmd --permanent --add-service=high-availability # firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在集群的两个节点上为用户
hacluster设置密码。passwd hacluster
# passwd haclusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在要运行
pcs命令的节点上,为集群中的每个节点验证用户hacluster。pcs host auth z1.example.com z2.example.com
# pcs host auth z1.example.com z2.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建名为
my_cluster的集群,两个节点都作为集群成员。这个命令会创建并启动集群。因为pcs配置命令对整个集群的影响,您只需要从集群的一个节点上运行。在集群的一个节点中运行以下命令。
pcs cluster setup my_cluster --start z1.example.com z2.example.com
# pcs cluster setup my_cluster --start z1.example.com z2.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 红帽高可用性集群要求为集群配置隔离功能。在红帽知识库解决方案 Red Hat High Availability Cluster 中的隔离 中描述了此要求的原因。但是,对于此介绍,仅显示了在这个配置中故障转移是如何工作的,通过将
stonith-enabled集群选项设置为false来禁用隔离。警告对生产集群而言,不要使用
stonith-enabled=false。它通知集群,假设出现故障的节点已被安全隔离。pcs property set stonith-enabled=false
# pcs property set stonith-enabled=falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建集群并禁用隔离后,检查集群的状态。
注意运行
pcs cluster status命令时,可能会显示与系统组件启动时稍有不同示例的输出。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这两个节点中,配置网页浏览器并创建一个网页来显示简单的文本信息。如果您正在运行
firewalld守护进程,启用httpd所需的端口。注意不要使用
systemctl enable启用任何由集群管理的服务在系统引导时启动。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要让 Apache 资源代理获得 Apache 状态,集群中的每个节点都会在现有配置之外创建一个新的配置来启用状态服务器 URL。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
IPaddr2和apache资源,供集群管理。IPaddr2资源是一个浮动 IP 地址,它不能是已经与物理节点关联的浮动 IP 地址。如果没有指定IPaddr2资源的 NIC 设备,浮动 IP 必须位于与静态分配的 IP 地址相同的网络中。您可以使用
pcs resource list命令显示所有可用资源类型的列表。您可以使用pcs resource describe resourcetype命令显示您可以为指定资源类型设置的参数。例如,以下命令显示您可以为类型apache的资源设置的参数:pcs resource describe apache ...
# pcs resource describe apache ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这个示例中,IP 地址资源和 apache 资源都配置为名为
apachegroup的组的一部分,这样可确保这些资源在同一节点中运行。在集群中的一个节点中运行以下命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,在这个实例中,
apachegroup服务在节点 z1.example.com 中运行。访问您创建的网站,在运行该服务的节点上停止运行该服务,查看该服务如何切换到第二个节点。
- 将浏览器指向使用您配置的浮动 IP 地址创建的网站。这会显示您定义的文本信息,显示运行网站的节点名称。
停止 apache web 服务。使用
killall -9模拟应用程序级别的崩溃。killall -9 httpd
# killall -9 httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查集群状态。您应该可以看到,停止 web 服务会导致操作失败,但集群软件在运行该服务的节点中重启该服务,所以您应该仍然可以访问网页浏览器。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在服务启动并再次运行后,清除失败状态。
pcs resource cleanup WebSite
# pcs resource cleanup WebSiteCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将运行该服务的节点设置为待机模式。请注意,由于禁用了隔离功能,因此我们无法有效地模拟节点级别的故障(比如拔掉电源电缆)。需要隔离功能集群才可以在出现这类问题时被恢复。
pcs node standby z1.example.com
# pcs node standby z1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查集群的状态并记录该服务正在运行的位置。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 访问网站。服务应该仍然可用,显示信息应该指示服务正在运行的节点。
要将集群服务恢复到第一个节点,让节点离开待机模式。这不一定将该服务转换到第一个节点。
pcs node unstandby z1.example.com
# pcs node unstandby z1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 最后,进行清理,停止两个节点上的集群服务。
pcs cluster stop --all
# pcs cluster stop --allCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 47 章 pcs 命令行界面 复制链接链接已复制到粘贴板!
pcs 命令行界面通过为其配置文件提供简单的接口来控制并配置集群服务,如 corosync、pacemaker、booth 和 sbd。
请注意,您不应该直接编辑 cib.xml 配置文件。在大多数情况下,Pacemaker 会拒绝直接修改的 cib.xml 文件。
47.1. pcs help display 复制链接链接已复制到粘贴板!
您可以使用 pcs 的 -h 选项显示 pcs 命令的参数以及这些参数的描述。
以下命令显示 pcs resource 命令的参数。
pcs resource -h
# pcs resource -h
47.2. 查看原始集群配置 复制链接链接已复制到粘贴板!
虽然您不应该直接编辑集群配置文件,但您可以使用 pcs cluster cib 命令查看原始集群配置。
您可以使用 pcs cluster cib filename 命令将原始集群配置保存到指定的文件中。如果您之前已经配置了集群,且已经有一个活跃的 CIB,则使用以下命令保存原始 xml 文件。
pcs cluster cib filename
pcs cluster cib filename
例如,以下命令可将 CIB 中的原始 xml 保存到名为 testfile 的文件中:
pcs cluster cib testfile
# pcs cluster cib testfile
47.3. 将配置更改保存到工作文件中 复制链接链接已复制到粘贴板!
配置集群时,您可以在不影响活跃 CIB 的情况下将配置更改保存到指定的文件中。这可让您在每次单独的更新时都指定配置更新而无需立即更新当前运行的集群配置。
有关将 CIB 保存到文件的详情,请参考 查看原始集群配置。创建该文件后,您可以使用 pcs 命令的 -f 选项将配置更改保存到该文件而不是活跃的 CIB 中。当您完成更改并准备好更新活跃 CIB 文件后,您可以使用 pcs cluster cib-push 命令来推送这些文件更新。
流程
以下是将更改推送到 CIB 文件的建议步骤。这个过程创建原始保存的 CIB 文件的副本并修改该副本。将这些更改推送到活跃 CIB 时,这个过程会指定 pcs cluster cib-push 命令的 diff-against 选项,以便只有原始文件和更新的文件之间的更改才会被推送到 CIB。这允许用户并行进行更改而不会相互覆盖其内容,这可以减少 Pacemaker(它不需要解析整个配置文件)的负载。
将活动的 CIB 保存到文件中。这个示例将 CIB 保存到名为
original.xml的文件。pcs cluster cib original.xml
# pcs cluster cib original.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将保存的文件复制到您要用于配置更新的工作文件中。
cp original.xml updated.xml
# cp original.xml updated.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 根据需要更新您的配置。以下命令在
update.xml文件中创建一个资源,但不将该资源添加到当前运行的集群配置中。pcs -f updated.xml resource create VirtualIP ocf:heartbeat:IPaddr2 ip=192.168.0.120 op monitor interval=30s
# pcs -f updated.xml resource create VirtualIP ocf:heartbeat:IPaddr2 ip=192.168.0.120 op monitor interval=30sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将更新的文件推送到活跃的 CIB 中,指定您只推送对原始文件进行的更改。
pcs cluster cib-push updated.xml diff-against=original.xml
# pcs cluster cib-push updated.xml diff-against=original.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
另外,您可以使用以下命令推送 CIB 文件的整个内容。
pcs cluster cib-push filename
pcs cluster cib-push filename
在推送整个 CIB 文件时,Pacemaker 会检查这个版本,并不允许推送比集群中已存在的 CIB 文件更早的文件。如果您需要更新整个 CIB 文件,其版本早于集群中的当前版本,可以使用 pcs cluster cib-push 命令的 --config 选项。
pcs cluster cib-push --config filename
pcs cluster cib-push --config filename
47.4. 显示集群状态 复制链接链接已复制到粘贴板!
您可以使用各种命令来显示集群及其组件的状态。
您可以使用以下命令显示集群和集群资源的状态。
pcs status
# pcs status
您可以使用 pcs status 命令的 commands 参数显示特定集群组件的状态,并指定 resources、cluster、nodes 或 pcsd。
pcs status commands
pcs status commands
例如,以下命令显示集群资源的状态。
pcs status resources
# pcs status resources
以下命令显示集群的状态,但不显示集群资源。
pcs cluster status
# pcs cluster status
47.5. 显示完整的集群配置 复制链接链接已复制到粘贴板!
使用以下命令显示完整的集群的当前配置。
pcs config
# pcs config
47.6. 使用 pcs 命令修改 corosync.conf 文件 复制链接链接已复制到粘贴板!
在 Red Hat Enterprise Linux 8.4 及更高版本中,您可以使用 pcs 命令修改 corosync.conf 文件中的参数。
以下命令修改 corosync.conf 文件中的参数。
pcs cluster config update [transport pass:quotes[transport options]] [compression pass:quotes[compression options]] [crypto pass:quotes[crypto options]] [totem pass:quotes[totem options]] [--corosync_conf pass:quotes[path]]
pcs cluster config update [transport pass:quotes[transport options]] [compression pass:quotes[compression options]] [crypto pass:quotes[crypto options]] [totem pass:quotes[totem options]] [--corosync_conf pass:quotes[path]]
以下示例命令会更新 knet_pmtud_interval 传输值,以及 token 和 join 令牌值。
pcs cluster config update transport knet_pmtud_interval=35 totem token=10000 join=100
# pcs cluster config update transport knet_pmtud_interval=35 totem token=10000 join=100
47.7. 使用 pcs 命令显示 corosync.conf 文件 复制链接链接已复制到粘贴板!
以下命令显示 corosync.conf 集群配置文件的内容。
pcs cluster corosync
# pcs cluster corosync
在 Red Hat Enterprise Linux 8.4 及更高版本中,您可以使用 pcs cluster config 命令以人类可读的格式打印 corosync.conf 文件的内容,如下例所示。
如果集群是在 RHEL 8.7 或更高版本中创建的,或者 UUID 是手动添加的,这个命令的输出包括集群的 UUID,如 通过 UUID 识别集群所述。
在 RHEL 8.4 及更高版本中,您可以运行带有 --output-format=cmd 选项的 命令,来显示可用于重新创建现有 pcs cluster config showcorosync.conf 文件的 pcs 配置命令,如下例所示。
第 48 章 使用 Pacemaker 创建红帽高可用性集群 复制链接链接已复制到粘贴板!
使用 pcs 命令行界面,按照以下流程创建一个红帽高可用性双节点集群。
在本例中配置集群需要您的系统包含以下组件:
-
2 个节点,用于创建集群。在本例中,所用的节点为
z1.example.com和z2.example.com。 - 专用网络的网络交换机。我们推荐使用专用网络用于集群节点和其它集群硬件(比如网络电源交换机和光线通道交换机)的通信,当这不是必须的。
-
集群中的每个节点上都有一个隔离设备。这个示例使用 APC 电源交换机的两个端口,主机名为
zapc.example.com。
您必须确保您的配置符合红帽的支持策略。有关红帽对 RHEL 高可用性集群的支持政策、要求和限制的详情,请参考 RHEL 高可用性集群的支持政策。
48.1. 安装集群软件 复制链接链接已复制到粘贴板!
安装集群软件,并使用以下流程为集群创建配置您的系统。
流程
在集群的每个节点中,启用与您的系统架构对应的高可用性存储库。例如,要为 x86_64 系统启用高可用性存储库,您可以输入以下
subscription-manager命令:subscription-manager repos --enable=rhel-8-for-x86_64-highavailability-rpms
# subscription-manager repos --enable=rhel-8-for-x86_64-highavailability-rpmsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在集群的每个节点中,安装 Red Hat High Availability Add-On 软件包,以及 High Availability 性频道中的所有可用的隔离代理。
yum install pcs pacemaker fence-agents-all
# yum install pcs pacemaker fence-agents-allCopy to Clipboard Copied! Toggle word wrap Toggle overflow 另外,您可以使用以下命令安装 Red Hat High Availability Add-On 软件包,并只安装您需要的隔离代理。
yum install pcs pacemaker fence-agents-model
# yum install pcs pacemaker fence-agents-modelCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下命令显示可用隔离代理列表。
rpm -q -a | grep fence fence-agents-rhevm-4.0.2-3.el7.x86_64 fence-agents-ilo-mp-4.0.2-3.el7.x86_64 fence-agents-ipmilan-4.0.2-3.el7.x86_64 ...
# rpm -q -a | grep fence fence-agents-rhevm-4.0.2-3.el7.x86_64 fence-agents-ilo-mp-4.0.2-3.el7.x86_64 fence-agents-ipmilan-4.0.2-3.el7.x86_64 ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 警告在安装 the Red Hat High Availability Add-On 软件包后,需要确定设置了软件更新首选项,以便不会自动安装任何软件。在正在运行的集群上安装可能会导致意外行为。如需更多信息,请参阅将软件更新应用到 RHEL High Availability 或弹性存储集群的建议实践。
如果您正在运行
firewalld守护进程,请执行以下命令启用红帽高可用性附加组件所需的端口。注意您可以使用
rpm -q firewalld命令确定系统上是否安装了firewalld守护进程。如果已安装,您可以使用firewall-cmd --state命令确定它是否正在运行。firewall-cmd --permanent --add-service=high-availability firewall-cmd --add-service=high-availability
# firewall-cmd --permanent --add-service=high-availability # firewall-cmd --add-service=high-availabilityCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意集群组件的理想防火墙配置取决于本地环境,您可能需要考虑节点是否有多个网络接口或主机外防火墙是否存在。在此示例中打开 Pacemaker 集群通常所需的端口,您需要根据具体情况进行修改。为高可用性附加组件启用端口显示为红帽高可用性附加组件启用的端口,并提供每个端口的用途信息。
要使用
pcs配置集群并在节点间通信,您必须在每个节点中为用户 IDhacluster(即pcs管理帐户)设置密码。建议每个节点上的用户hacluster的密码都相同。passwd hacluster Changing password for user hacluster. New password: Retype new password: passwd: all authentication tokens updated successfully.
# passwd hacluster Changing password for user hacluster. New password: Retype new password: passwd: all authentication tokens updated successfully.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在配置集群前,必须启动并启用
pcsd守护进程,以便在每个节点上启动。此守护进程与pcs命令配合使用,以管理集群中跨节点的配置。在集群的每个节点上执行以下命令启动
pcsd服务并在系统启动时启用pcsd。systemctl start pcsd.service systemctl enable pcsd.service
# systemctl start pcsd.service # systemctl enable pcsd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
48.2. 安装 pcp-zeroconf 软件包(推荐使用) 复制链接链接已复制到粘贴板!
设置集群时,建议您为 Performance Co-Pilot(PCP)工具安装 pcp-zeroconf 软件包。PCP 是红帽推荐的 RHEL 系统资源监控工具。安装 pcp-zeroconf 软件包可让您运行 PCP,并收集 performance-monitoring 数据,以便调查隔离、资源故障以及破坏集群的其他事件。
启用 PCP 的集群部署需要足够的空间可用于 PCP 捕获的文件系统上的数据,其中包含 /var/log/pcp/。PCP 空间使用量因部署而异,但在使用 pcp-zeroconf 默认设置时,10Gb 通常就足够了,有些环境的需要可能会更少。监控这个目录中的 14 天期间内的典型活动提供更准确的信息。
流程
要安装 pcp-zeroconf 软件包,请运行以下命令。
yum install pcp-zeroconf
# yum install pcp-zeroconf
这个软件包启用了 pmcd,并以 10 秒的间隔设置数据捕获。
有关查看 PCP 数据的详情,请查看红帽知识库解决方案 为什么重启 RHEL 高可用性集群节点 - 如何防止它再次发生?
48.3. 创建高可用性集群 复制链接链接已复制到粘贴板!
使用以下流程创建一个红帽高可用性附加组件集群。这个示例流程会创建一个由节点 z1.example.com 和 z2.example.com 组成的集群。
流程
在要运行
pcs的节点上,为集群中的每个节点验证pcs用户hacluster。以下命令在
z1.example.com上为双节点集群(由z1.example.com和z2.example.com组成)中的两个节点验证用户hacluster。pcs host auth z1.example.com z2.example.com Username: hacluster Password: z1.example.com: Authorized z2.example.com: Authorized
[root@z1 ~]# pcs host auth z1.example.com z2.example.com Username: hacluster Password: z1.example.com: Authorized z2.example.com: AuthorizedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从
z1.example.com执行以下命令,以创建由z1.example.com和z2.example.com组成的双节点集群my_cluster。这会将集群配置文件传播到集群中的两个节点。此命令包含--start选项,该选项将在集群的两个节点上启动群集服务。pcs cluster setup my_cluster --start z1.example.com z2.example.com
[root@z1 ~]# pcs cluster setup my_cluster --start z1.example.com z2.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在节点引导时,启用集群服务在集群中的每个节点上运行。
注意对于特定环境,您可以跳过这一步来禁用集群服务。这可让您确保在节点重新加入集群前解决集群或您的资源中的任何问题。如果禁用了集群服务,则需要在重新引导节点时手动启动该服务,方法是在该节点上执行
pcs cluster start命令。pcs cluster enable --all
[root@z1 ~]# pcs cluster enable --allCopy to Clipboard Copied! Toggle word wrap Toggle overflow
您可以使用 pcs cluster status 命令显示集群的当前状态。因为在使用 pcs cluster setup 命令的 --start 选项启动集群服务时,集群启动和运行可能有一些延迟,所以您应该确保在集群及其配置上执行后续操作前集群已启动并运行。
48.4. 创建使用多个链接的高可用性集群 复制链接链接已复制到粘贴板!
您可以通过指定每个节点的所有链接,使用 pcs cluster setup 命令创建带有多个链接的红帽高可用性集群。
创建具有两个链接的双节点集群的基本命令格式如下:
pcs cluster setup pass:quotes[cluster_name] pass:quotes[node1_name] addr=pass:quotes[node1_link0_address] addr=pass:quotes[node1_link1_address] pass:quotes[node2_name] addr=pass:quotes[node2_link0_address] addr=pass:quotes[node2_link1_address]
pcs cluster setup pass:quotes[cluster_name] pass:quotes[node1_name] addr=pass:quotes[node1_link0_address] addr=pass:quotes[node1_link1_address] pass:quotes[node2_name] addr=pass:quotes[node2_link0_address] addr=pass:quotes[node2_link1_address]
有关此命令的完整语法,请查看 pcs(8)手册页。
当创建具有多个链接的集群时,您应该考虑以下内容。
-
addr=address参数的顺序非常重要。节点名称后指定的第一个地址为link0,第二个地址用于link1,以此类推。 -
默认情况下,如果没有为链接指定
link_priority,则链接的优先级等于链接号。然后,链接优先级为 0、1、2、3 等,以此类推,0 是最高链路优先级。 -
默认链接模式是
passive,即使用具有最低编号链路优先级的活动链接。 -
使用
link_mode和link_priority的默认值,指定的第一个链接将用作最高优先级链接,如果该链接失败,则将使用指定的下一个链接。 -
可以使用
knet传输协议(即默认的传输协议)指定最多 8 个链接。 -
所有节点必须具有相同数量的
addr=参数。 -
在 RHEL 8.1 及之后的版本中,可以使用
pcs cluster link add、pcs cluster link remove、pcs cluster link delete和pcs cluster link update命令在现有集群中添加、删除和更改链接。 - 与单链路集群一样,请勿将 IPv4 和 IPv6 地址混合到一个链接中,虽然您可以有一个链接运行 IPv4,另一个运行 IPv6。
- 与单链路集群一样,只要在一个单一的链接中没有混合使用 IPv4 和 IPv6,且名称可以被解析为 IPv4 或 IPv6 地址,就可以使用 IP 地址或名称来指定地址。
以下示例创建了名为 my_twolink_cluster 的双节点集群,它包括两个节点:rh80-node1 和 rh80-node2。rh80-node1 有两个接口,IP 地址 192.168.122.201 作为 link0,192.168.123.201 作为 link1。rh80-node2 有两个接口,IP 地址 192.168.122.202 作为 link0,192.168.123.202 作为 link1。
pcs cluster setup my_twolink_cluster rh80-node1 addr=192.168.122.201 addr=192.168.123.201 rh80-node2 addr=192.168.122.202 addr=192.168.123.202
# pcs cluster setup my_twolink_cluster rh80-node1 addr=192.168.122.201 addr=192.168.123.201 rh80-node2 addr=192.168.122.202 addr=192.168.123.202
要将链接优先级设置为与默认值不同的值(即链接号),您可以使用 pcs cluster setup 命令的 link_priority 选项设置链接优先级。以下两个示例命令各自创建一个具有两个接口的双节点集群,其中第一个链接 0 具有链接优先级 1,而链接 1 的链接优先级为 0。首先使用链接 1,链接 0 将充当故障转移的链接。由于未指定链接模式,因此默认为被动(passive)。
这两个命令是等效的。如果您没有在 link 关键字之后指定链接号,pcs 接口会自动添加链接号,从最低的未使用的链接号开始。
pcs cluster setup my_twolink_cluster rh80-node1 addr=192.168.122.201 addr=192.168.123.201 rh80-node2 addr=192.168.122.202 addr=192.168.123.202 transport knet link link_priority=1 link link_priority=0 pcs cluster setup my_twolink_cluster rh80-node1 addr=192.168.122.201 addr=192.168.123.201 rh80-node2 addr=192.168.122.202 addr=192.168.123.202 transport knet link linknumber=1 link_priority=0 link link_priority=1
# pcs cluster setup my_twolink_cluster rh80-node1 addr=192.168.122.201 addr=192.168.123.201 rh80-node2 addr=192.168.122.202 addr=192.168.123.202 transport knet link link_priority=1 link link_priority=0
# pcs cluster setup my_twolink_cluster rh80-node1 addr=192.168.122.201 addr=192.168.123.201 rh80-node2 addr=192.168.122.202 addr=192.168.123.202 transport knet link linknumber=1 link_priority=0 link link_priority=1
您可以使用 pcs cluster setup 命令的 link_mode 选项将链接模式设置为 与默认的 passive 值不同的值,如下例所示:
pcs cluster setup my_twolink_cluster rh80-node1 addr=192.168.122.201 addr=192.168.123.201 rh80-node2 addr=192.168.122.202 addr=192.168.123.202 transport knet link_mode=active
# pcs cluster setup my_twolink_cluster rh80-node1 addr=192.168.122.201 addr=192.168.123.201 rh80-node2 addr=192.168.122.202 addr=192.168.123.202 transport knet link_mode=active
以下示例同时设置链接模式和链接优先级。
pcs cluster setup my_twolink_cluster rh80-node1 addr=192.168.122.201 addr=192.168.123.201 rh80-node2 addr=192.168.122.202 addr=192.168.123.202 transport knet link_mode=active link link_priority=1 link link_priority=0
# pcs cluster setup my_twolink_cluster rh80-node1 addr=192.168.122.201 addr=192.168.123.201 rh80-node2 addr=192.168.122.202 addr=192.168.123.202 transport knet link_mode=active link link_priority=1 link link_priority=0
有关将节点添加到具有多个链接的现有集群中的详情,请参考 将一个节点添加到具有多个链接的集群中。
有关更改具有多个链接的现有集群中的链接的详情,请参考 在现有集群中添加和修改链接。
48.5. 配置隔离 复制链接链接已复制到粘贴板!
您必须为集群中的每个节点配置保护设备。有关保护配置命令和选项的详情,请参考在红帽高可用性集群中配置隔离。
有关隔离的一般信息及其在红帽高可用性集群中的重要性,请查看红帽知识库解决方案 红帽高可用性集群中的隔离。
在配置隔离设备时,应该注意该设备是否与集群中的任何节点或者设备共享电源。如果某个节点及其隔离设备共享了电源,那么如果它的电源出现问题,集群可能就无法收到隔离功能的保护。这样的集群应该有冗余电源来保护设备和节点,或者具有没有和节点共享电源的额外的隔离设置。其他替代的隔离方法,比如 SBD 或存储隔离,也可以用来对电源问题提供冗余保护。
流程
这个示例使用主机名 zapc.example.com 的 APC 电源开关来隔离节点,并使用 fence_apc_snmp 隔离代理。因为这两个节点都使用同一隔离代理实现隔离,所以您可以使用 pcmk_host_map 选项将这两个保护设备配置为单一资源。
您可以使用 pcs stonith create 命令将设备配置为 stonith 资源来创建隔离设备。以下命令配置名为 myapc 的 stonith 资源,该资源对节点 z1.example.com 和 z2.example.com 使用 fence_apc_snmp 隔离代理。pcmk_host_map 选项将 z1.example.com 映射到端口 1,z2.example.com 映射到端口 2。APC 设备的登录值和密码都是 pc。默认情况下,该设备对每个节点都使用 60 秒的监视间隔时间。
请注意,您可以在为节点指定主机名时使用 IP 地址。
pcs stonith create myapc fence_apc_snmp ipaddr="zapc.example.com" pcmk_host_map="z1.example.com:1;z2.example.com:2" login="apc" passwd="apc"
[root@z1 ~]# pcs stonith create myapc fence_apc_snmp ipaddr="zapc.example.com" pcmk_host_map="z1.example.com:1;z2.example.com:2" login="apc" passwd="apc"
以下命令显示现有隔离设备的参数。
pcs stonith config myapc Resource: myapc (class=stonith type=fence_apc_snmp) Attributes: ipaddr=zapc.example.com pcmk_host_map=z1.example.com:1;z2.example.com:2 login=apc passwd=apc Operations: monitor interval=60s (myapc-monitor-interval-60s)
[root@rh7-1 ~]# pcs stonith config myapc
Resource: myapc (class=stonith type=fence_apc_snmp)
Attributes: ipaddr=zapc.example.com pcmk_host_map=z1.example.com:1;z2.example.com:2 login=apc passwd=apc
Operations: monitor interval=60s (myapc-monitor-interval-60s)
配置了隔离设备后,您应该测试该设备。有关测试隔离设备的详情,请参考 测试隔离设备。
不要通过禁用网络接口来测试您的隔离设备,因为这不会正确测试隔离功能。
当配置了隔离功能,且启动集群后,网络重启会触发节点的隔离,即使没有超过超时时间也会重启网络。因此,不要在集群服务运行时重启网络服务,因为它将在节点上触发意外隔离。
48.6. 备份和恢复集群配置 复制链接链接已复制到粘贴板!
以下命令在 tar 归档中备份集群配置,并从备份中恢复所有节点上的集群配置文件。
流程
使用以下命令在 tar 归档中备份集群配置。如果没有指定文件名,会使用标准输出。
pcs config backup filename
pcs config backup filename
pcs config backup 命令只备份 CIB 中配置的集群配置本身;资源守护进程的配置不在这个命令范围内。例如:如果您在集群中配置了 Apache 资源,则会备份资源设置(位于 CIB 中),而 Apache 守护进程设置(如'/etc/httpd' 中的设置)及其服务的文件不会被备份。同样,如果集群中配置了数据库资源,则不会备份数据库本身,而是备份数据库资源配置(CIB)。
使用以下命令从备份中恢复所有集群节点上的集群配置文件。指定 --local 选项只恢复您在其上运行此命令的节点上的集群配置文件。如果没有指定文件名,将使用标准输入。
pcs config restore [--local] [filename]
pcs config restore [--local] [filename]
48.7. 为高可用性附加组件启用端口 复制链接链接已复制到粘贴板!
集群组件的理想防火墙配置取决于本地环境,您可能需要考虑节点是否有多个网络接口或主机外防火墙是否存在。
如果您正在运行 firewalld 守护进程,请执行以下命令启用红帽高可用性附加组件所需的端口。
firewall-cmd --permanent --add-service=high-availability firewall-cmd --add-service=high-availability
# firewall-cmd --permanent --add-service=high-availability
# firewall-cmd --add-service=high-availability
您可能需要修改开放端口以适合本地条件。
您可以使用 rpm -q firewalld 命令确定系统上是否安装了 firewalld 守护进程。如果安装了 firewalld 守护进程,您可以使用 firewall-cmd --state 命令确定它是否正在运行。
下表显示了要为红帽高可用性附加组件启用的端口,并解释了该端口的用途。
| 端口 | 什么时候需要 |
|---|---|
| TCP 2224 |
所有节点都需要默认的
关键是要以这样一种方式开放端口 2224,即来自任何节点的 |
| TCP 3121 | 如果集群有 Pacemaker 远程节点,则所有节点都需要这个端口
整个集群节点上的 Pacemaker 的 |
| TCP 5403 |
当使用对仲裁设备使用 |
| UDP 5404-5412 |
corosync 节点需要这些端口以便在节点间进行通信。打开端口 5404-5412 非常重要,从而使来自任何节点的 |
| TCP 21064 |
如果集群包含需要 DLM 的资源(如 |
| TCP 9929, UDP 9929 | 当使用 Booth 票据管理器被用来建立多站点集群时,需要在所有集群节点和 Booth 仲裁器节点上打开来自任何这些节点的连接。 |
第 49 章 在红帽高可用性集群中配置主动/被动 Apache HTTP 服务器 复制链接链接已复制到粘贴板!
使用以下流程在双节点 Red Hat Enterprise Linux高可用性附加组件集群中配置主动/被动 Apache HTTP 服务器。在这种情况下,客户端通过浮动 IP 地址访问 Apache HTTP 服务器。Web 服务器在集群的两个节点之一中运行。如果运行 web 服务器的节点出现问题,则 web 服务器会在集群的第二个节点上再次启动,以实现服务中断的最小化。
以下示例显示集群的高级概述,其中集群是双节点红帽高可用性集群,该集群使用网络电源交换机以及共享存储配置。集群节点连接到公用网络,以便客户端通过虚拟 IP 访问 Apache HTTP 服务器。Apache 服务器在 Node 1 或 Node 2 中运行,每个节点都可访问保存 Apache 数据的存储。本图例中,网页服务器在 Node 1 上运行,如果 Node 1 停止工作, Node 2 可以运行服务器。
图 49.1. Red Hat High Availability 双节点集群中的 Apache
这个用例需要您的系统包括以下组件:
- 一个双节点 Red Hat High Availability 集群,为每个节点配置了电源隔离功能。我们建议使用专用网络,但这不是必须的。此流程使用了创建带有 Pacemaker 的 Red Hat High-Availability 集群中提供的集群示例。
- Apache 需要的公共虚拟 IP 地址。
- 集群中节点的共享存储,使用 iSCSI、光纤或其他共享网络块设备。
集群被配置为带有 Apache 资源组,其中包含 web 服务器所需的集群组件:LVM 资源、文件系统资源、IP 地址资源以及 web 服务器资源。这个资源组可以从集群的一个节点切换到另外一个节点,允许其中两个节点运行 web 服务器。在为集群创建资源组前,您将执行以下步骤:
-
在逻辑卷
my_lv上配置 XFS 文件系统。 - 配置 web 服务器。
执行这些步骤后,您要创建资源组及其包含的资源。
49.1. 在 Pacemaker 集群中使用 XFS 文件系统配置一个 LVM 卷 复制链接链接已复制到粘贴板!
使用以下流程在集群节点之间共享的存储上创建一个 LVM 逻辑卷。
LVM 卷以及集群节点使用的对应分区和设备必须只能连接到集群节点。
下面的流程创建了一个 LVM 逻辑卷,然后在该卷上创建一个 XFS 文件系统,以便在 Pacemaker 集群中使用。在这个示例中,使用共享分区 /dev/sdb1 来存储创建 LVM 逻辑卷的 LVM 物理卷。
流程
在集群的两个节点中,执行以下步骤将 LVM 系统 ID 的值设置为系统的
uname标识符值。LVM 系统 ID 将用于确保只有集群可以激活卷组。将
/etc/lvm/lvm.conf配置文件中的system_id_source配置选项设置为uname。# Configuration option global/system_id_source. system_id_source = "uname"
# Configuration option global/system_id_source. system_id_source = "uname"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证节点上的 LVM 系统 ID 是否与节点的
uname匹配。lvm systemid system ID: z1.example.com uname -n z1.example.com
# lvm systemid system ID: z1.example.com # uname -n z1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow
创建 LVM 卷并在该卷上创建一个 XFS 文件系统。由于
/dev/sdb1分区是共享的存储,因此您只在一个节点中执行这个操作过程。pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully created
[root@z1 ~]# pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您的 LVM 卷组包含一个或多个位于远程块存储上的物理卷,如 iSCSI 目标,红帽建议您确保服务在 Pacemaker 启动前启动。有关为 Pacemaker 集群使用的远程物理卷配置启动顺序的详情,请参考 为不由 Pacemaker 管理的资源依赖项配置启动顺序。
创建由物理卷
/dev/sdb1组成的卷组my_vg。对于 RHEL 8.5 及之后的版本,指定
--setautoactivation n标志来确保集群中由 Pacemaker 管理的卷组在启动时不会自动激活。如果您要为要创建的 LVM 卷使用现有卷组,您可以使用vgchange --setautoactivation n命令为卷组重置此标记。vgcreate --setautoactivation n my_vg /dev/sdb1 Volume group "my_vg" successfully created
[root@z1 ~]# vgcreate --setautoactivation n my_vg /dev/sdb1 Volume group "my_vg" successfully createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 RHEL 8.4 及更早版本,使用以下命令创建卷组:
vgcreate my_vg /dev/sdb1 Volume group "my_vg" successfully created
[root@z1 ~]# vgcreate my_vg /dev/sdb1 Volume group "my_vg" successfully createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 有关确保集群中 Pacemaker 管理的卷组不会在启动 RHEL 8.4 及更早版本时自动激活的信息,请参阅 确保卷组在多个集群节点上不被激活。
确认新卷组带有您要运行的节点的系统 ID,并从这个节点中创建卷组。
vgs -o+systemid VG #PV #LV #SN Attr VSize VFree System ID my_vg 1 0 0 wz--n- <1.82t <1.82t z1.example.com
[root@z1 ~]# vgs -o+systemid VG #PV #LV #SN Attr VSize VFree System ID my_vg 1 0 0 wz--n- <1.82t <1.82t z1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用卷组
my_vg创建逻辑卷。lvcreate -L450 -n my_lv my_vg Rounding up size to full physical extent 452.00 MiB Logical volume "my_lv" created
[root@z1 ~]# lvcreate -L450 -n my_lv my_vg Rounding up size to full physical extent 452.00 MiB Logical volume "my_lv" createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以使用
lvs命令显示逻辑卷。lvs LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert my_lv my_vg -wi-a---- 452.00m ...
[root@z1 ~]# lvs LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert my_lv my_vg -wi-a---- 452.00m ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在逻辑卷
my_lv上创建一个 XFS 文件系统。mkfs.xfs /dev/my_vg/my_lv meta-data=/dev/my_vg/my_lv isize=512 agcount=4, agsize=28928 blks = sectsz=512 attr=2, projid32bit=1 ...[root@z1 ~]# mkfs.xfs /dev/my_vg/my_lv meta-data=/dev/my_vg/my_lv isize=512 agcount=4, agsize=28928 blks = sectsz=512 attr=2, projid32bit=1 ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
(RHEL 8.5 及更高版本)如果您通过在
lvm.conf文件中设置use_devicesfile = 1来启用设备文件的使用,请将共享设备添加到集群中第二个节点上的设备文件中。默认情况下,不启用设备文件的使用。lvmdevices --adddev /dev/sdb1
[root@z2 ~]# lvmdevices --adddev /dev/sdb1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
49.2. 确保卷组没有在多个集群节点上激活(RHEL 8.4 及更早版本) 复制链接链接已复制到粘贴板!
您可以按照以下流程确保集群中 Pacemaker 管理的卷组不会在启动时自动激活。如果在启动时卷组被自动激活,而不是由 Pacemaker 激活的,则有卷组同时在多个节点上处于活动状态的风险,这可能会损坏卷组的元数据。
对于 RHEL 8.5 及之后的版本,您可以通过为 vgcreate 命令指定 --setautoactivation n 标志,在创建卷组时对卷组禁用自动激活,如在 在 Pacemaker 集群中使用 XFS 文件系统配置一个 LVM 卷 中所述。
此流程修改 /etc/lvm/lvm.conf 配置文件中的 auto_activation_volume_list 条目。auto_activation_volume_list 条目用于将自动激活限制到特定的逻辑卷。将 auto_activation_volume_list 设置为空列表可完全禁用自动激活。
任何未共享且不是由 Pacemaker 管理的本地卷都应包含在 auto_activation_volume_list 条目中,包括与节点的本地根和主目录相关的卷组。由集群管理器管理的所有卷组都必须从 auto_activation_volume_list 条目中排除。
流程
对集群中的每个节点执行以下流程。
使用以下命令确定当前在本地存储上配置了哪些卷组。这将输出一个当前配置的卷组的列表。如果您在此节点上单独的卷组中为 root 以及主目录分配了空间,则您将在输出中看到这些卷,如下例所示。
vgs --noheadings -o vg_name my_vg rhel_home rhel_root
# vgs --noheadings -o vg_name my_vg rhel_home rhel_rootCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将除
my_vg之外的卷组(您刚刚为集群定义的卷组)作为条目添加到/etc/lvm/lvm.conf配置文件中的auto_activation_volume_list。例如,如果您在单独的卷组中为 root 和主目录分配了空间,则您可以取消
lvm.conf文件的auto_activation_volume_list行的注释,并将这些卷组作为条目添加到auto_activation_volume_list中,如下所示:请注意,您刚刚为集群定义的卷组(本例中为my_vg)不在此列表中。auto_activation_volume_list = [ "rhel_root", "rhel_home" ]
auto_activation_volume_list = [ "rhel_root", "rhel_home" ]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果在集群管理器之外激活的节点上没有本地卷组,则您必须将
auto_activation_volume_list条目初始化为auto_activation_volume_list = []。重建
initramfs引导镜像,以确保引导镜像不会尝试激活由集群控制的卷组。使用以下命令更新initramfs设备。此命令最多可能需要一分钟才能完成。dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)
# dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新引导节点。
注意如果您在引导在其上创建启动映像的节点后安装了一个新的 Linux 内核,则新的
initrd镜像将用于创建它时运行的内核,而不是用于重启节点时运行的新内核。您可以通过在重启前后运行uname -r命令来确定正在运行的内核版本,来确保正在使用正确的initrd设备。如果发行版本不一样,请在使用新内核重启后更新initrd文件,然后重启节点。当节点重启时,通过在该节点上执行
pcs cluster status命令来检查集群服务是否已在该节点上再次启动。如果这产生了消息Error: cluster is not currently running on this node,请输入以下命令。pcs cluster start
# pcs cluster startCopy to Clipboard Copied! Toggle word wrap Toggle overflow 另外,您可以等待,直到集群中的每个节点都重启了,然后使用以下命令在集群中的所有节点上启动集群服务。
pcs cluster start --all
# pcs cluster start --allCopy to Clipboard Copied! Toggle word wrap Toggle overflow
49.3. 配置 Apache HTTP 服务器 复制链接链接已复制到粘贴板!
使用以下流程配置 Apache HTTP 服务器。
流程
确定在集群的每个节点中安装了 Apache HTTP Server。您还需要在集群中安装
wget工具才能检查 Apache HTTP 服务器的状态。在每个节点上执行以下命令。
yum install -y httpd wget
# yum install -y httpd wgetCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您在集群的每个节点上运行的
firewalld守护进程启用了红帽高可用性附加组件所需的端口,并启用了运行httpd所需的端口。这个示例启用了httpd端口进行公共访问,但为httpd启用的特定端口可能会因生产用途而异。firewall-cmd --permanent --add-service=http firewall-cmd --permanent --zone=public --add-service=http firewall-cmd --reload
# firewall-cmd --permanent --add-service=http # firewall-cmd --permanent --zone=public --add-service=http # firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要让 Apache 资源代理获得 Apache 状态,集群中的每个节点都会在现有配置之外创建一个新的配置来启用状态服务器 URL。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 Apache 创建网页供服务。
在集群中的一个节点上,确保您在 配置带有 配置一个带有 XFS 文件系统的 LVM 卷 时创建的逻辑卷已被激活,挂载您在该逻辑卷上创建的文件系统,在该文件系统上创建文件
index.html,然后卸载该文件系统。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
49.4. 创建资源和资源组 复制链接链接已复制到粘贴板!
使用以下流程为集群创建资源。为确保这些资源在同一节点上运行,它们都配置为资源组 apachegroup 的一部分。要创建的资源如下,按其启动顺序列出。
-
一个名为
my_lvm的使用您在 配置一个带有 XFS 文件系统的 LVM 卷 时创建的LVM-activate资源。 -
一个名为
my_fs的使用您在 配置一个带有 XFS 文件系统的 LVM 卷 时创建的文件系统设备/dev/my_vg/my_lv的Filesystem资源。 -
IPaddr2资源,它是apachegroup资源组的浮动 IP 地址。IP 地址不能是一个已经与物理节点关联的 IP 地址。如果没有指定IPaddr2资源的 NIC 设备,浮动 IP 必须与节点静态分配的 IP 地址之一位于同一个网络中,否则无法正确检测到分配浮动 IP 地址的 NIC 设备。 -
名为
Website的apache资源使用您在 配置 Apache HTTP 服务器 中定义的index.html文件和 Apache 配置。
以下流程创建资源组 apachegroup 以及组包含的资源。资源将以您添加到组的顺序启动,并按照添加到组中的相反顺序停止。仅从集群的一个节点运行此步骤。
流程
以下命令创建
LVM-activate资源my_lvm。由于资源组apachegroup尚不存在,这个命令会创建资源组。注意不要配置多于一个的在主动/被动 HA 配置中使用相同 LVM 卷组的
LVM-activate资源,因为这可能导致数据崩溃。另外,不要在主动/被动 HA 配置中将LVM-activate资源配置为克隆资源。pcs resource create my_lvm ocf:heartbeat:LVM-activate vgname=my_vg vg_access_mode=system_id --group apachegroup
[root@z1 ~]# pcs resource create my_lvm ocf:heartbeat:LVM-activate vgname=my_vg vg_access_mode=system_id --group apachegroupCopy to Clipboard Copied! Toggle word wrap Toggle overflow 当您创建资源时,会自动启动该资源。您可以使用以下命令确认资源已创建并启动。
pcs resource status Resource Group: apachegroup my_lvm (ocf::heartbeat:LVM-activate): Started# pcs resource status Resource Group: apachegroup my_lvm (ocf::heartbeat:LVM-activate): StartedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以使用
pcs resource disable和pcs resource enable命令手动停止并启动单个资源。以下命令为配置创建剩余的资源,将它们添加到现有资源组
apachegroup中。pcs resource create my_fs Filesystem device="/dev/my_vg/my_lv" directory="/var/www" fstype="xfs" --group apachegroup pcs resource create VirtualIP IPaddr2 ip=198.51.100.3 cidr_netmask=24 --group apachegroup pcs resource create Website apache configfile="/etc/httpd/conf/httpd.conf" statusurl="http://127.0.0.1/server-status" --group apachegroup
[root@z1 ~]# pcs resource create my_fs Filesystem device="/dev/my_vg/my_lv" directory="/var/www" fstype="xfs" --group apachegroup [root@z1 ~]# pcs resource create VirtualIP IPaddr2 ip=198.51.100.3 cidr_netmask=24 --group apachegroup [root@z1 ~]# pcs resource create Website apache configfile="/etc/httpd/conf/httpd.conf" statusurl="http://127.0.0.1/server-status" --group apachegroupCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建资源和包含这些资源的资源组后,您可以检查集群的状态。请注意,所有四个资源都在同一个节点上运行。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,如果您还没有为集群配置隔离设备,默认情况下资源不会启动。
当集群启动并运行后,您可以将浏览器指向定义为
IPaddr2资源,查看示例显示,包括一个简单的单词 "Hello"。Hello
HelloCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果发现配置的资源没有运行,则您可以运行
pcs resource debug-start resource命令来测试资源配置。当您使用
apache资源代理来管理 Apache 时,它不会使用systemd。因此,您必须编辑 Apache 提供的logrotate脚本,使其不使用systemctl重新加载 Apache。在集群中的每个节点上删除
/etc/logrotate.d/httpd文件中的以下行:/bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
/bin/systemctl reload httpd.service > /dev/null 2>/dev/null || trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 RHEL 8.6 及之后的版本,将您删除的行替换为以下三行,将
/var/run/httpd-website.pid指定为 PID 文件路径,其中 website 是 Apache 资源的名称。在本例中,Apache 资源名称是Website。/usr/bin/test -f /var/run/httpd-Website.pid >/dev/null 2>/dev/null && /usr/bin/ps -q $(/usr/bin/cat /var/run/httpd-Website.pid) >/dev/null 2>/dev/null && /usr/sbin/httpd -f /etc/httpd/conf/httpd.conf -c "PidFile /var/run/httpd-Website.pid" -k graceful > /dev/null 2>/dev/null || true
/usr/bin/test -f /var/run/httpd-Website.pid >/dev/null 2>/dev/null && /usr/bin/ps -q $(/usr/bin/cat /var/run/httpd-Website.pid) >/dev/null 2>/dev/null && /usr/sbin/httpd -f /etc/httpd/conf/httpd.conf -c "PidFile /var/run/httpd-Website.pid" -k graceful > /dev/null 2>/dev/null || trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 RHEL 8.5 及更早版本,将您删除的行替换为以下三行:
/usr/bin/test -f /run/httpd.pid >/dev/null 2>/dev/null && /usr/bin/ps -q $(/usr/bin/cat /run/httpd.pid) >/dev/null 2>/dev/null && /usr/sbin/httpd -f /etc/httpd/conf/httpd.conf -c "PidFile /run/httpd.pid" -k graceful > /dev/null 2>/dev/null || true
/usr/bin/test -f /run/httpd.pid >/dev/null 2>/dev/null && /usr/bin/ps -q $(/usr/bin/cat /run/httpd.pid) >/dev/null 2>/dev/null && /usr/sbin/httpd -f /etc/httpd/conf/httpd.conf -c "PidFile /run/httpd.pid" -k graceful > /dev/null 2>/dev/null || trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
49.5. 测试资源配置 复制链接链接已复制到粘贴板!
使用以下流程测试集群中的资源配置。
在 创建资源和资源组 中显示的集群状态中,所有资源都运行在节点 z1.example.com 上。您可以使用以下步骤将第一个 节点设置为待机模式 来测试资源组是否切换到节点 z2.example.com,之后该节点将不再能够托管资源。
流程
以下命令将节点
z1.example.com置于待机模式下。pcs node standby z1.example.com
[root@z1 ~]# pcs node standby z1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将节点
z1置于待机模式后,检查集群状态。请注意,这些资源现在都应在z2中运行。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 定义的 IP 地址的网页仍会显示,而不中断。
要从
待机模式中删除z1,请输入以下命令。pcs node unstandby z1.example.com
[root@z1 ~]# pcs node unstandby z1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意从
待机模式中删除节点本身不会导致资源切换到该节点。这将依赖于资源的resource-stickiness值。有关resource-stickiness元属性的详情,请参考 配置资源以首选其当前节点。
第 50 章 在红帽高可用性集群中配置主动/被动模式的 NFS 服务器 复制链接链接已复制到粘贴板!
红帽高可用性附加组件为在使用共享存储的 Red Hat Enterprise Linux High Availability Add-On 集群上运行高可用的主动/被动 NFS 服务器提供支持。在以下示例中,您要配置一个双节点集群,其中客户端通过浮动 IP 地址访问 NFS 文件系统。NFS 服务器运行在集群的两个节点之一上。如果运行 NFS 服务器的节点出现问题,则 NFS 服务器会在集群的第二个节点上再次启动,以实现服务中断的最小化。
这个用例需要您的系统包括以下组件:
- 一个双节点 Red Hat High Availability 集群,为每个节点配置了电源隔离功能。我们建议使用专用网络,但这不是必须的。此流程使用了创建带有 Pacemaker 的 Red Hat High-Availability 集群中提供的集群示例。
- NFS 服务器需要的一个公共虚拟 IP 地址。
- 集群中节点的共享存储,使用 iSCSI、光纤或其他共享网络块设备。
在现有双节点 Red Hat Enterprise Linux High Availability 集群中配置高可用性的主动/被动 NFS 服务器需要执行以下步骤:
- 在共享存储的 LVM 逻辑卷中为集群中的节点配置文件系统。
- 在 LVM 逻辑卷的共享存储中配置 NFS 共享。
- 创建集群资源。
- 测试您配置的 NFS 服务器。
50.1. 在 Pacemaker 集群中使用 XFS 文件系统配置一个 LVM 卷 复制链接链接已复制到粘贴板!
使用以下流程在集群节点之间共享的存储上创建一个 LVM 逻辑卷。
LVM 卷以及集群节点使用的对应分区和设备必须只能连接到集群节点。
下面的流程创建了一个 LVM 逻辑卷,然后在该卷上创建一个 XFS 文件系统,以便在 Pacemaker 集群中使用。在这个示例中,使用共享分区 /dev/sdb1 来存储创建 LVM 逻辑卷的 LVM 物理卷。
流程
在集群的两个节点中,执行以下步骤将 LVM 系统 ID 的值设置为系统的
uname标识符值。LVM 系统 ID 将用于确保只有集群可以激活卷组。将
/etc/lvm/lvm.conf配置文件中的system_id_source配置选项设置为uname。# Configuration option global/system_id_source. system_id_source = "uname"
# Configuration option global/system_id_source. system_id_source = "uname"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证节点上的 LVM 系统 ID 是否与节点的
uname匹配。lvm systemid system ID: z1.example.com uname -n z1.example.com
# lvm systemid system ID: z1.example.com # uname -n z1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow
创建 LVM 卷并在该卷上创建一个 XFS 文件系统。由于
/dev/sdb1分区是共享的存储,因此您只在一个节点中执行这个操作过程。pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully created
[root@z1 ~]# pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您的 LVM 卷组包含一个或多个位于远程块存储上的物理卷,如 iSCSI 目标,红帽建议您确保服务在 Pacemaker 启动前启动。有关为 Pacemaker 集群使用的远程物理卷配置启动顺序的详情,请参考 为不由 Pacemaker 管理的资源依赖项配置启动顺序。
创建由物理卷
/dev/sdb1组成的卷组my_vg。对于 RHEL 8.5 及之后的版本,指定
--setautoactivation n标志来确保集群中由 Pacemaker 管理的卷组在启动时不会自动激活。如果您要为要创建的 LVM 卷使用现有卷组,您可以使用vgchange --setautoactivation n命令为卷组重置此标记。vgcreate --setautoactivation n my_vg /dev/sdb1 Volume group "my_vg" successfully created
[root@z1 ~]# vgcreate --setautoactivation n my_vg /dev/sdb1 Volume group "my_vg" successfully createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 RHEL 8.4 及更早版本,使用以下命令创建卷组:
vgcreate my_vg /dev/sdb1 Volume group "my_vg" successfully created
[root@z1 ~]# vgcreate my_vg /dev/sdb1 Volume group "my_vg" successfully createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 有关确保集群中 Pacemaker 管理的卷组不会在启动 RHEL 8.4 及更早版本时自动激活的信息,请参阅 确保卷组在多个集群节点上不被激活。
确认新卷组带有您要运行的节点的系统 ID,并从这个节点中创建卷组。
vgs -o+systemid VG #PV #LV #SN Attr VSize VFree System ID my_vg 1 0 0 wz--n- <1.82t <1.82t z1.example.com
[root@z1 ~]# vgs -o+systemid VG #PV #LV #SN Attr VSize VFree System ID my_vg 1 0 0 wz--n- <1.82t <1.82t z1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用卷组
my_vg创建逻辑卷。lvcreate -L450 -n my_lv my_vg Rounding up size to full physical extent 452.00 MiB Logical volume "my_lv" created
[root@z1 ~]# lvcreate -L450 -n my_lv my_vg Rounding up size to full physical extent 452.00 MiB Logical volume "my_lv" createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以使用
lvs命令显示逻辑卷。lvs LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert my_lv my_vg -wi-a---- 452.00m ...
[root@z1 ~]# lvs LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert my_lv my_vg -wi-a---- 452.00m ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在逻辑卷
my_lv上创建一个 XFS 文件系统。mkfs.xfs /dev/my_vg/my_lv meta-data=/dev/my_vg/my_lv isize=512 agcount=4, agsize=28928 blks = sectsz=512 attr=2, projid32bit=1 ...[root@z1 ~]# mkfs.xfs /dev/my_vg/my_lv meta-data=/dev/my_vg/my_lv isize=512 agcount=4, agsize=28928 blks = sectsz=512 attr=2, projid32bit=1 ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
(RHEL 8.5 及更高版本)如果您通过在
lvm.conf文件中设置use_devicesfile = 1来启用设备文件的使用,请将共享设备添加到集群中第二个节点上的设备文件中。默认情况下,不启用设备文件的使用。lvmdevices --adddev /dev/sdb1
[root@z2 ~]# lvmdevices --adddev /dev/sdb1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
50.2. 确保卷组没有在多个集群节点上激活(RHEL 8.4 及更早版本) 复制链接链接已复制到粘贴板!
您可以按照以下流程确保集群中 Pacemaker 管理的卷组不会在启动时自动激活。如果在启动时卷组被自动激活,而不是由 Pacemaker 激活的,则有卷组同时在多个节点上处于活动状态的风险,这可能会损坏卷组的元数据。
对于 RHEL 8.5 及之后的版本,您可以通过为 vgcreate 命令指定 --setautoactivation n 标志,在创建卷组时对卷组禁用自动激活,如在 在 Pacemaker 集群中使用 XFS 文件系统配置一个 LVM 卷 中所述。
此流程修改 /etc/lvm/lvm.conf 配置文件中的 auto_activation_volume_list 条目。auto_activation_volume_list 条目用于将自动激活限制到特定的逻辑卷。将 auto_activation_volume_list 设置为空列表可完全禁用自动激活。
任何未共享且不是由 Pacemaker 管理的本地卷都应包含在 auto_activation_volume_list 条目中,包括与节点的本地根和主目录相关的卷组。由集群管理器管理的所有卷组都必须从 auto_activation_volume_list 条目中排除。
流程
对集群中的每个节点执行以下流程。
使用以下命令确定当前在本地存储上配置了哪些卷组。这将输出一个当前配置的卷组的列表。如果您在此节点上单独的卷组中为 root 以及主目录分配了空间,则您将在输出中看到这些卷,如下例所示。
vgs --noheadings -o vg_name my_vg rhel_home rhel_root
# vgs --noheadings -o vg_name my_vg rhel_home rhel_rootCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将除
my_vg之外的卷组(您刚刚为集群定义的卷组)作为条目添加到/etc/lvm/lvm.conf配置文件中的auto_activation_volume_list。例如,如果您在单独的卷组中为 root 和主目录分配了空间,则您可以取消
lvm.conf文件的auto_activation_volume_list行的注释,并将这些卷组作为条目添加到auto_activation_volume_list中,如下所示:请注意,您刚刚为集群定义的卷组(本例中为my_vg)不在此列表中。auto_activation_volume_list = [ "rhel_root", "rhel_home" ]
auto_activation_volume_list = [ "rhel_root", "rhel_home" ]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果在集群管理器之外激活的节点上没有本地卷组,则您必须将
auto_activation_volume_list条目初始化为auto_activation_volume_list = []。重建
initramfs引导镜像,以确保引导镜像不会尝试激活由集群控制的卷组。使用以下命令更新initramfs设备。此命令最多可能需要一分钟才能完成。dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)
# dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新引导节点。
注意如果您在引导在其上创建启动映像的节点后安装了一个新的 Linux 内核,则新的
initrd镜像将用于创建它时运行的内核,而不是用于重启节点时运行的新内核。您可以通过在重启前后运行uname -r命令来确定正在运行的内核版本,来确保正在使用正确的initrd设备。如果发行版本不一样,请在使用新内核重启后更新initrd文件,然后重启节点。当节点重启时,通过在该节点上执行
pcs cluster status命令来检查集群服务是否已在该节点上再次启动。如果这产生了消息Error: cluster is not currently running on this node,请输入以下命令。pcs cluster start
# pcs cluster startCopy to Clipboard Copied! Toggle word wrap Toggle overflow 另外,您可以等待,直到集群中的每个节点都重启了,然后使用以下命令在集群中的所有节点上启动集群服务。
pcs cluster start --all
# pcs cluster start --allCopy to Clipboard Copied! Toggle word wrap Toggle overflow
50.4. 为集群中的 NFS 服务器配置资源和资源组 复制链接链接已复制到粘贴板!
使用以下流程为集群中的 NFS 服务器配置集群资源。
如果您还没有为集群配置隔离设备,默认情况下资源不会启动。
如果发现您配置的资源没有运行,您可以运行 pcs resource debug-start resource 命令来测试资源配置。这会在集群控制之外启动服务。当配置的资源再次运行时,运行 pcs resource cleanup resource 以使集群已了解到更新。
流程
以下步骤配置系统资源。为确保这些资源在同一节点上运行,它们都配置为资源组 nfsgroup 的一部分。资源将以您添加到组的顺序启动,并按照添加到组中的相反顺序停止。仅从集群的一个节点运行此步骤。
创建名为
my_lvm的 LVM 激活资源。由于资源组nfsgroup尚不存在,这个命令会创建资源组。警告不要配置多于一个的在主动/被动 HA 配置中使用相同 LVM 卷组的
LVM-activate资源,因为这可能导致数据崩溃。另外,不要在主动/被动 HA 配置中将LVM-activate资源配置为克隆资源。pcs resource create my_lvm ocf:heartbeat:LVM-activate vgname=my_vg vg_access_mode=system_id --group nfsgroup
[root@z1 ~]# pcs resource create my_lvm ocf:heartbeat:LVM-activate vgname=my_vg vg_access_mode=system_id --group nfsgroupCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查集群的状态,以验证资源是否在运行。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为集群配置
Filesystem资源。以下命令配置一个名为
nfsshare的 XFSFilesystem资源配置,来作为nfsgroup资源组的一部分。这个文件系统使用您在 配置一个带有 XFS 文件系统的 LVM 卷 时创建的 LVM 卷组和 XFS 文件系统,并将挂载到您在 配置一个 NFS 共享 时创建的/nfsshare目录上。pcs resource create nfsshare Filesystem device=/dev/my_vg/my_lv directory=/nfsshare fstype=xfs --group nfsgroup
[root@z1 ~]# pcs resource create nfsshare Filesystem device=/dev/my_vg/my_lv directory=/nfsshare fstype=xfs --group nfsgroupCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以使用
options=options参数将挂载选项指定为Filesystem资源的资源配置的一部分。运行pcs resource describe Filesystem命令以了解完整的配置选项。验证
my_lvm和nfsshare资源是否正在运行。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建名为
nfs-daemon的nfsserver资源,作为资源组nfsgroup的一部分。注意nfsserver资源允许您指定nfs_shared_infodir参数,它是一个 NFS 服务器用于存储与 NFS 相关的有状态信息的目录。建议将此属性设置为您在这个导出集合中创建的
Filesystem资源的子目录。这样可确保 NFS 服务器将其有状态的信息存储在需要重新定位资源组时可供另一个节点使用的设备中。在这个示例中;-
/nfsshare是由Filesystem资源管理的 shared-storage 目录 -
/nfsshare/exports/export1和/nfsshare/exports/export2是导出目录 -
/nfsshare/nfsinfo是nfsserver资源的共享目录
pcs resource create nfs-daemon nfsserver nfs_shared_infodir=/nfsshare/nfsinfo nfs_no_notify=true --group nfsgroup pcs status ...
[root@z1 ~]# pcs resource create nfs-daemon nfsserver nfs_shared_infodir=/nfsshare/nfsinfo nfs_no_notify=true --group nfsgroup [root@z1 ~]# pcs status ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
添加
exportfs资源以导出/nfsshare/exports目录。这些资源是nfsgroup资源组的一部分。这为 NFSv4 客户端构建了一个虚拟目录。NFSv3 客户端也可以访问这些导出。注意只有在您要为 NFSv4 客户端创建虚拟目录时才需要
fsid=0选项。如需更多信息,请参阅红帽知识库解决方案 如何在 NFS 服务器的 /etc/exports 文件中配置 fsid 选项?pcs resource create nfs-root exportfs clientspec=192.168.122.0/255.255.255.0 options=rw,sync,no_root_squash directory=/nfsshare/exports fsid=0 --group nfsgroup pcs resource create nfs-export1 exportfs clientspec=192.168.122.0/255.255.255.0 options=rw,sync,no_root_squash directory=/nfsshare/exports/export1 fsid=1 --group nfsgroup pcs resource create nfs-export2 exportfs clientspec=192.168.122.0/255.255.255.0 options=rw,sync,no_root_squash directory=/nfsshare/exports/export2 fsid=2 --group nfsgroup
[root@z1 ~]# pcs resource create nfs-root exportfs clientspec=192.168.122.0/255.255.255.0 options=rw,sync,no_root_squash directory=/nfsshare/exports fsid=0 --group nfsgroup [root@z1 ~]# pcs resource create nfs-export1 exportfs clientspec=192.168.122.0/255.255.255.0 options=rw,sync,no_root_squash directory=/nfsshare/exports/export1 fsid=1 --group nfsgroup [root@z1 ~]# pcs resource create nfs-export2 exportfs clientspec=192.168.122.0/255.255.255.0 options=rw,sync,no_root_squash directory=/nfsshare/exports/export2 fsid=2 --group nfsgroupCopy to Clipboard Copied! Toggle word wrap Toggle overflow 添加 NFS 客户端用来访问 NFS 共享的浮动 IP 地址资源。这个资源是资源组
nfsgroup的一部分。在本示例部署中,我们使用 192.168.122.200 作为浮动 IP 地址。pcs resource create nfs_ip IPaddr2 ip=192.168.122.200 cidr_netmask=24 --group nfsgroup
[root@z1 ~]# pcs resource create nfs_ip IPaddr2 ip=192.168.122.200 cidr_netmask=24 --group nfsgroupCopy to Clipboard Copied! Toggle word wrap Toggle overflow 添加
nfsnotify资源,以便在整个 NFS 部署初始化后发送 NFSv3 重启通知。这个资源是资源组nfsgroup的一部分。注意为了正确处理 NFS 通知,浮动 IP 地址必须具有与其关联的主机名,在 NFS 服务器和 NFS 客户端中都一致。
pcs resource create nfs-notify nfsnotify source_host=192.168.122.200 --group nfsgroup
[root@z1 ~]# pcs resource create nfs-notify nfsnotify source_host=192.168.122.200 --group nfsgroupCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在创建资源和资源限制后,您可以检查集群的状态。请注意,所有资源都在同一个节点上运行。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
50.5. 测试 NFS 资源配置 复制链接链接已复制到粘贴板!
您可以按照以下步骤在高可用性集群中验证您的 NFS 资源配置。您应该可以使用 NFSv3 或 NFSv4 挂载导出的文件系统。
50.5.1. 测试 NFS 导出 复制链接链接已复制到粘贴板!
-
如果您在集群节点上运行
firewalld守护进程,请确保在所有节点上都启用了 NFS 访问所需的端口。 在与部署位于同一个网络中的、位于集群以外的一个节点中,通过挂载 NFS 共享来确定 NFS 共享。在本例中,我们使用 192.168.122.0/24 网络。
showmount -e 192.168.122.200 Export list for 192.168.122.200: /nfsshare/exports/export1 192.168.122.0/255.255.255.0 /nfsshare/exports 192.168.122.0/255.255.255.0 /nfsshare/exports/export2 192.168.122.0/255.255.255.0
# showmount -e 192.168.122.200 Export list for 192.168.122.200: /nfsshare/exports/export1 192.168.122.0/255.255.255.0 /nfsshare/exports 192.168.122.0/255.255.255.0 /nfsshare/exports/export2 192.168.122.0/255.255.255.0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要验证您可以用 NFSv4 挂载 NFS 共享,将 NFS 共享挂载到客户端节点的目录中。挂载后,请确定导出目录的内容是可见的。测试后卸载共享。
mkdir nfsshare mount -o "vers=4" 192.168.122.200:export1 nfsshare ls nfsshare clientdatafile1 umount nfsshare
# mkdir nfsshare # mount -o "vers=4" 192.168.122.200:export1 nfsshare # ls nfsshare clientdatafile1 # umount nfsshareCopy to Clipboard Copied! Toggle word wrap Toggle overflow 确定您可以用 NFSv3 挂载 NFS 共享。挂载后,验证测试文件
clientdatafile1可见。和 NFSv4 不同,因为 NFSv3 不使用虚拟文件系统,所以您必须挂载一个特定的导出。测试后卸载共享。mkdir nfsshare mount -o "vers=3" 192.168.122.200:/nfsshare/exports/export2 nfsshare ls nfsshare clientdatafile2 umount nfsshare
# mkdir nfsshare # mount -o "vers=3" 192.168.122.200:/nfsshare/exports/export2 nfsshare # ls nfsshare clientdatafile2 # umount nfsshareCopy to Clipboard Copied! Toggle word wrap Toggle overflow
50.5.2. 测试故障转移 复制链接链接已复制到粘贴板!
在集群外的节点上挂载 NFS 共享,并验证访问您在 配置 NFS 共享 中创建的
clientdatafile1文件。mkdir nfsshare mount -o "vers=4" 192.168.122.200:export1 nfsshare ls nfsshare clientdatafile1
# mkdir nfsshare # mount -o "vers=4" 192.168.122.200:export1 nfsshare # ls nfsshare clientdatafile1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在集群的一个节点中,确定集群中的哪个节点正在运行
nfsgroup。在本例中,nfsgroup在z1.example.com上运行。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在集群的一个节点中,将运行
nfsgroup的节点设置为待机模式。pcs node standby z1.example.com
[root@z1 ~]# pcs node standby z1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证
nfsgroup是否在其他集群节点上成功启动。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在您挂载了 NFS 共享的集群之外的节点中,确认这个外部节点仍然可以访问 NFS 挂载中的测试文件。
ls nfsshare clientdatafile1
# ls nfsshare clientdatafile1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在故障转移的过程中,服务可能会在短暂时间内不可用,但可以在没有用户干预的情况下恢复。默认情况下,使用 NFSv4 的客户端可能最多需要 90 秒恢复该挂载。这个 90 秒代表服务器启动时观察到的 NFSv4 文件租期的宽限期。NFSv3 客户端应该在几秒钟内就可以恢复对该挂载的访问。
从集群中的一个节点中,将最初运行
nfsgroup的节点从待机模式中删除。注意从
待机模式中删除节点本身不会导致资源切换到该节点。这将依赖于资源的resource-stickiness值。有关resource-stickiness元属性的详情,请参考 配置资源以首选其当前节点。pcs node unstandby z1.example.com
[root@z1 ~]# pcs node unstandby z1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 51 章 集群中的 GFS2 文件系统 复制链接链接已复制到粘贴板!
使用以下管理流程在红帽高可用性集群中配置 GFS2 文件系统。
51.1. 在集群中配置 GFS2 文件系统 复制链接链接已复制到粘贴板!
您可以按照以下流程设置包含 GFS2 文件系统的 Pacemaker 集群。在这个示例中,您在双节点集群的三个逻辑卷上创建三个 GFS2 文件系统。
先决条件
- 在集群节点上安装并启动集群软件,并创建一个基本的双节点集群。
- 为集群配置隔离。
有关创建 Pacemaker 集群并为集群配置隔离的详情,请参考 创建一个带有 Pacemaker 的红帽高可用性集群。
流程
在集群中的两个节点上,启用与您的系统架构对应的弹性存储存储库。例如,要为 x86_64 系统启用 Resilient Storage 存储库,您可以输入以下
subscription-manager命令:subscription-manager repos --enable=rhel-8-for-x86_64-resilientstorage-rpms
# subscription-manager repos --enable=rhel-8-for-x86_64-resilientstorage-rpmsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,弹性存储存储库是高可用性存储库的超集。如果启用弹性存储存储库,则不需要启用高可用性存储库。
在集群的两个节点上安装
lvm2-lockd、gfs2-utils和dlm软件包。要支持这些软件包,您必须订阅 AppStream 频道和 Resilient Storage 频道。yum install lvm2-lockd gfs2-utils dlm
# yum install lvm2-lockd gfs2-utils dlmCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在群集的两个节点上,将
/etc/lvm/lvm.conf文件中的use_lvmlockd配置选项设为use_lvmlockd=1。... use_lvmlockd = 1 ...
... use_lvmlockd = 1 ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将全局 Pacemaker 参数
no-quorum-policy设置为freeze。注意默认情况下,将
no-quorum-policy的值设置为stop,表示一旦仲裁丢失,剩余分区上的所有资源都会立即停止。通常,这个默认行为是最安全、最优的选项,但与大多数资源不同,GFS2 要求使用 quorum 才可以正常工作。当使用 GFS2 挂载的应用程序和 GFS2 挂载都丢失时,就无法正确停止 GFS2 挂载。任何在没有 quorum 的情况下停止这些资源的尝试都会失败,并最终会在每次 quorum 都丢失时保护整个集群。要解决这个问题,请在使用 GFS2 时将
no-quorum-policy设置为freeze。这意味着,当 quorum 丢失时,剩余的分区将不会进行任何操作,直到 quorum 功能被恢复。pcs property set no-quorum-policy=freeze
[root@z1 ~]# pcs property set no-quorum-policy=freezeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 设置
dlm资源。这是在集群中配置 GFS2 文件系统所需的依赖软件包。这个示例创建dlm资源作为名为locking的资源组的一部分。pcs resource create dlm --group locking ocf:pacemaker:controld op monitor interval=30s on-fail=fence
[root@z1 ~]# pcs resource create dlm --group locking ocf:pacemaker:controld op monitor interval=30s on-fail=fenceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 克隆
locking资源组,以便资源组可以在集群的两个节点上都活跃。pcs resource clone locking interleave=true
[root@z1 ~]# pcs resource clone locking interleave=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
lvmlockd资源设置为locking资源组的一部分。pcs resource create lvmlockd --group locking ocf:heartbeat:lvmlockd op monitor interval=30s on-fail=fence
[root@z1 ~]# pcs resource create lvmlockd --group locking ocf:heartbeat:lvmlockd op monitor interval=30s on-fail=fenceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查集群的状态,以确保在集群的两个节点上启动了
locking资源组。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在集群的一个节点中,创建两个共享卷组。一个卷组将包含两个 GFS2 文件系统,另一个卷组将包含一个 GFS2 文件系统。
注意如果您的 LVM 卷组包含一个或多个位于远程块存储上的物理卷,如 iSCSI 目标,红帽建议您确保服务在 Pacemaker 启动前启动。有关为 Pacemaker 集群使用的远程物理卷配置启动顺序的详情,请参考 为不由 Pacemaker 管理的资源依赖项配置启动顺序。
以下命令在
/dev/vdb上创建共享卷组shared_vg1。vgcreate --shared shared_vg1 /dev/vdb Physical volume "/dev/vdb" successfully created. Volume group "shared_vg1" successfully created VG shared_vg1 starting dlm lockspace Starting locking. Waiting until locks are ready...
[root@z1 ~]# vgcreate --shared shared_vg1 /dev/vdb Physical volume "/dev/vdb" successfully created. Volume group "shared_vg1" successfully created VG shared_vg1 starting dlm lockspace Starting locking. Waiting until locks are ready...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下命令在
/dev/vdc上创建共享卷组shared_vg2。vgcreate --shared shared_vg2 /dev/vdc Physical volume "/dev/vdc" successfully created. Volume group "shared_vg2" successfully created VG shared_vg2 starting dlm lockspace Starting locking. Waiting until locks are ready...
[root@z1 ~]# vgcreate --shared shared_vg2 /dev/vdc Physical volume "/dev/vdc" successfully created. Volume group "shared_vg2" successfully created VG shared_vg2 starting dlm lockspace Starting locking. Waiting until locks are ready...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在集群的第二个节点上:
(RHEL 8.5 及更高版本)如果您通过在
lvm.conf文件中设置use_devicesfile = 1来启用设备文件的使用,请将共享设备添加到设备文件中。默认情况下,不启用设备文件的使用。lvmdevices --adddev /dev/vdb lvmdevices --adddev /dev/vdc
[root@z2 ~]# lvmdevices --adddev /dev/vdb [root@z2 ~]# lvmdevices --adddev /dev/vdcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为每个共享卷组启动锁管理器。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在集群的一个节点中,创建共享逻辑卷并使用 GFS2 文件系统格式化卷。每个挂载文件系统的节点都需要一个日志。确保为集群中的每个节点创建足够日志。锁表名称的格式为 ClusterName:FSName,其中 ClusterName 是创建 GFS2 文件系统的集群名称,FSName 是文件系统名称,它必须在集群中所有
lock_dlm文件系统是唯一的。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为每个逻辑卷创建一个
LVM-activate资源,以便在所有节点中自动激活该逻辑卷。为卷组
shared_vg1中的逻辑卷shared_lv1创建名为sharedlv1的LVM-activate资源。此命令还会创建包含该资源的资源组shared_vg1。在这个示例中,资源组的名称与包含逻辑卷的共享卷组的名称相同。pcs resource create sharedlv1 --group shared_vg1 ocf:heartbeat:LVM-activate lvname=shared_lv1 vgname=shared_vg1 activation_mode=shared vg_access_mode=lvmlockd
[root@z1 ~]# pcs resource create sharedlv1 --group shared_vg1 ocf:heartbeat:LVM-activate lvname=shared_lv1 vgname=shared_vg1 activation_mode=shared vg_access_mode=lvmlockdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为卷组
shared_vg1中的逻辑卷shared_lv2创建名为sharedlv2的LVM-activate资源。此资源也是资源组shared_vg1的一部分。pcs resource create sharedlv2 --group shared_vg1 ocf:heartbeat:LVM-activate lvname=shared_lv2 vgname=shared_vg1 activation_mode=shared vg_access_mode=lvmlockd
[root@z1 ~]# pcs resource create sharedlv2 --group shared_vg1 ocf:heartbeat:LVM-activate lvname=shared_lv2 vgname=shared_vg1 activation_mode=shared vg_access_mode=lvmlockdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为卷组
shared_vg2中的逻辑卷shared_lv1创建名为sharedlv3的LVM-activate资源。此命令还会创建包含该资源的资源组shared_vg2。pcs resource create sharedlv3 --group shared_vg2 ocf:heartbeat:LVM-activate lvname=shared_lv1 vgname=shared_vg2 activation_mode=shared vg_access_mode=lvmlockd
[root@z1 ~]# pcs resource create sharedlv3 --group shared_vg2 ocf:heartbeat:LVM-activate lvname=shared_lv1 vgname=shared_vg2 activation_mode=shared vg_access_mode=lvmlockdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
克隆两个新资源组。
pcs resource clone shared_vg1 interleave=true pcs resource clone shared_vg2 interleave=true
[root@z1 ~]# pcs resource clone shared_vg1 interleave=true [root@z1 ~]# pcs resource clone shared_vg2 interleave=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 配置排序限制,以确保首先启动包含
dlm和lvmlockd资源的locking资源组。pcs constraint order start locking-clone then shared_vg1-clone Adding locking-clone shared_vg1-clone (kind: Mandatory) (Options: first-action=start then-action=start) pcs constraint order start locking-clone then shared_vg2-clone Adding locking-clone shared_vg2-clone (kind: Mandatory) (Options: first-action=start then-action=start)
[root@z1 ~]# pcs constraint order start locking-clone then shared_vg1-clone Adding locking-clone shared_vg1-clone (kind: Mandatory) (Options: first-action=start then-action=start) [root@z1 ~]# pcs constraint order start locking-clone then shared_vg2-clone Adding locking-clone shared_vg2-clone (kind: Mandatory) (Options: first-action=start then-action=start)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置共存限制,以确保
vg1和vg2资源组在与locking资源组相同的节点上启动。pcs constraint colocation add shared_vg1-clone with locking-clone pcs constraint colocation add shared_vg2-clone with locking-clone
[root@z1 ~]# pcs constraint colocation add shared_vg1-clone with locking-clone [root@z1 ~]# pcs constraint colocation add shared_vg2-clone with locking-cloneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在集群中的两个节点中,验证逻辑卷是否活跃。这可能会延迟几秒钟。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建文件系统资源在所有节点中自动挂载每个 GFS2 文件系统。
您不应该将文件系统添加到
/etc/fstab文件,因为它将作为 Pacemaker 集群资源进行管理。可以通过options=options将挂载选项指定为资源配置的一部分。运行pcs resource describe Filesystem命令显示完整的配置选项。以下命令可创建文件系统资源。这些命令在包含该文件系统逻辑卷资源的资源组中添加每个资源。
pcs resource create sharedfs1 --group shared_vg1 ocf:heartbeat:Filesystem device="/dev/shared_vg1/shared_lv1" directory="/mnt/gfs1" fstype="gfs2" options=noatime op monitor interval=10s on-fail=fence pcs resource create sharedfs2 --group shared_vg1 ocf:heartbeat:Filesystem device="/dev/shared_vg1/shared_lv2" directory="/mnt/gfs2" fstype="gfs2" options=noatime op monitor interval=10s on-fail=fence pcs resource create sharedfs3 --group shared_vg2 ocf:heartbeat:Filesystem device="/dev/shared_vg2/shared_lv1" directory="/mnt/gfs3" fstype="gfs2" options=noatime op monitor interval=10s on-fail=fence
[root@z1 ~]# pcs resource create sharedfs1 --group shared_vg1 ocf:heartbeat:Filesystem device="/dev/shared_vg1/shared_lv1" directory="/mnt/gfs1" fstype="gfs2" options=noatime op monitor interval=10s on-fail=fence [root@z1 ~]# pcs resource create sharedfs2 --group shared_vg1 ocf:heartbeat:Filesystem device="/dev/shared_vg1/shared_lv2" directory="/mnt/gfs2" fstype="gfs2" options=noatime op monitor interval=10s on-fail=fence [root@z1 ~]# pcs resource create sharedfs3 --group shared_vg2 ocf:heartbeat:Filesystem device="/dev/shared_vg2/shared_lv1" directory="/mnt/gfs3" fstype="gfs2" options=noatime op monitor interval=10s on-fail=fenceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证 GFS2 文件系统是否挂载到集群的两个节点中。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查集群的状态。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
51.2. 在集群中配置加密的 GFS2 文件系统 复制链接链接已复制到粘贴板!
(RHEL 8.4 及更高版本)您可以按照以下流程创建一个包含 LUKS 加密的 GFS2 文件系统的 Pacemaker 集群。在这个示例中,您在逻辑卷上创建一个 GFS2 文件系统,并加密文件系统。使用 crypt 资源代理支持加密 GFS2 文件系统,该代理支持 LUKS 加密。
此流程有三个部分:
- 在 Pacemaker 集群中配置共享逻辑卷
-
加密逻辑卷并创建一个
crypt资源 - 使用 GFS2 文件系统格式化加密的逻辑卷并为集群创建文件系统资源
51.2.2. 加密逻辑卷并创建 crypt 资源 复制链接链接已复制到粘贴板!
先决条件
- 您已在 Pacemaker 集群中配置了共享逻辑卷。
流程
在集群的一个节点中,创建一个包含 crypt 密钥的新文件,并在文件中设置权限,使其只能被 root 读取。
touch /etc/crypt_keyfile chmod 600 /etc/crypt_keyfile
[root@z1 ~]# touch /etc/crypt_keyfile [root@z1 ~]# chmod 600 /etc/crypt_keyfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 crypt 密钥。
dd if=/dev/urandom bs=4K count=1 of=/etc/crypt_keyfile 1+0 records in 1+0 records out 4096 bytes (4.1 kB, 4.0 KiB) copied, 0.000306202 s, 13.4 MB/s scp /etc/crypt_keyfile root@z2.example.com:/etc/
[root@z1 ~]# dd if=/dev/urandom bs=4K count=1 of=/etc/crypt_keyfile 1+0 records in 1+0 records out 4096 bytes (4.1 kB, 4.0 KiB) copied, 0.000306202 s, 13.4 MB/s [root@z1 ~]# scp /etc/crypt_keyfile root@z2.example.com:/etc/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
-p参数将 crypt keyfile 分发到集群中的其他节点,以保留您设置的权限。scp -p /etc/crypt_keyfile root@z2.example.com:/etc/
[root@z1 ~]# scp -p /etc/crypt_keyfile root@z2.example.com:/etc/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在要配置加密的 GFS2 文件系统的 LVM 卷中创建加密设备。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 crypt 资源,作为
shared_vg1卷组的一部分。pcs resource create crypt --group shared_vg1 ocf:heartbeat:crypt crypt_dev="luks_lv1" crypt_type=luks2 key_file=/etc/crypt_keyfile encrypted_dev="/dev/shared_vg1/shared_lv1"
[root@z1 ~]# pcs resource create crypt --group shared_vg1 ocf:heartbeat:crypt crypt_dev="luks_lv1" crypt_type=luks2 key_file=/etc/crypt_keyfile encrypted_dev="/dev/shared_vg1/shared_lv1"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
确保 crypt 资源已创建了 crypt 设备,本例中为 /dev/mapper/luks_lv1。
ls -l /dev/mapper/ ... lrwxrwxrwx 1 root root 7 Mar 4 09:52 luks_lv1 -> ../dm-3 ...
[root@z1 ~]# ls -l /dev/mapper/
...
lrwxrwxrwx 1 root root 7 Mar 4 09:52 luks_lv1 -> ../dm-3
...
51.2.3. 使用 GFS2 文件系统格式化加密的逻辑卷,并为集群创建一个文件系统资源 复制链接链接已复制到粘贴板!
先决条件
- 您已加密逻辑卷并创建 crypt 资源。
流程
在集群的一个节点中,使用 GFS2 文件系统格式化卷。每个挂载文件系统的节点都需要一个日志。确保为集群中的每个节点创建足够日志。锁表名称的格式为 ClusterName:FSName,其中 ClusterName 是创建 GFS2 文件系统的集群名称,FSName 是文件系统名称,它必须在集群中所有
lock_dlm文件系统是唯一的。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建文件系统资源在所有节点中自动挂载 GFS2 文件系统。
不要将该文件系统添加到
/etc/fstab文件中,因为它将作为 Pacemaker 集群资源进行管理。可以通过options=options将挂载选项指定为资源配置的一部分。运行pcs resource describe Filesystem命令以了解完整的配置选项。以下命令创建文件系统资源。这个命令在包含该文件系统逻辑卷资源的资源组中添加资源。
pcs resource create sharedfs1 --group shared_vg1 ocf:heartbeat:Filesystem device="/dev/mapper/luks_lv1" directory="/mnt/gfs1" fstype="gfs2" options=noatime op monitor interval=10s on-fail=fence
[root@z1 ~]# pcs resource create sharedfs1 --group shared_vg1 ocf:heartbeat:Filesystem device="/dev/mapper/luks_lv1" directory="/mnt/gfs1" fstype="gfs2" options=noatime op monitor interval=10s on-fail=fenceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证 GFS2 文件系统是否挂载到集群的两个节点上。
mount | grep gfs2 /dev/mapper/luks_lv1 on /mnt/gfs1 type gfs2 (rw,noatime,seclabel) mount | grep gfs2 /dev/mapper/luks_lv1 on /mnt/gfs1 type gfs2 (rw,noatime,seclabel)
[root@z1 ~]# mount | grep gfs2 /dev/mapper/luks_lv1 on /mnt/gfs1 type gfs2 (rw,noatime,seclabel) [root@z2 ~]# mount | grep gfs2 /dev/mapper/luks_lv1 on /mnt/gfs1 type gfs2 (rw,noatime,seclabel)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查集群的状态。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
51.3. 将 GFS2 文件系统从 RHEL7 迁移到 RHEL8 复制链接链接已复制到粘贴板!
当配置包含 GFS2 文件系统的 RHEL 8 集群时,您可以使用现有的 Red Hat Enterprise 7 逻辑卷。
在 Red Hat Enterprise Linux 8 中,LVM 使用 LVM 锁守护进程 lvmlockd ,而不是 clvmd 在管理主动/主动集群中的共享存储设备。这要求您配置作为共享逻辑卷使用的主动/主动集群所需的逻辑卷。另外,这需要您使用 LVM-activate 资源来管理 LVM 卷,并使用 lvmlockd 资源代理来管理 lvmlockd 守护进程。有关配置使用带有共享逻辑卷的 GFS2 文件系统的 Pacemaker 集群的信息,请参阅在集群中配置 GFS2 文件系统。
要在配置包含 GFS2 文件系统的 RHEL8 集群时使用现有的 Red Hat Enterprise Linux 7 逻辑卷,请从 RHEL8 集群中执行以下步骤。在这个示例中,集群的 RHEL 7 逻辑卷是卷组 upgrade_gfs_vg 的一部分。
RHEL8 集群的名称必须与 RHEL7 集群的名称相同,其中包括 GFS2 文件系统才能使现有文件系统有效。
流程
- 确定包含 GFS2 文件系统的逻辑卷当前不活跃。只有所有节点都停止使用卷组时,这个步骤才安全。
从集群中的一个节点中,强制将卷组更改为本地。
vgchange --lock-type none --lock-opt force upgrade_gfs_vg Forcibly change VG lock type to none? [y/n]: y Volume group "upgrade_gfs_vg" successfully changed
[root@rhel8-01 ~]# vgchange --lock-type none --lock-opt force upgrade_gfs_vg Forcibly change VG lock type to none? [y/n]: y Volume group "upgrade_gfs_vg" successfully changedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从集群中的一个节点,将本地卷组改为共享卷组
vgchange --lock-type dlm upgrade_gfs_vg Volume group "upgrade_gfs_vg" successfully changed
[root@rhel8-01 ~]# vgchange --lock-type dlm upgrade_gfs_vg Volume group "upgrade_gfs_vg" successfully changedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在集群的每个节点中,开始锁定卷组。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
执行此流程后,您可以为每个逻辑卷创建一个 LVM-activate 资源。
第 52 章 在 Red Hat High Availability 集群中配置隔离功能 复制链接链接已复制到粘贴板!
不响应的节点可能仍然在访问数据。确定您的数据安全的唯一方法是使用 STONITH 保护节点。STONITH 是"Shoot The Other Node In The Head"的缩写,它保护您的数据不受有问题的节点或并发访问的影响。使用 STONITH 可以确保,在允许从另一个节点访问数据前确定节点真正离线。
当无法停止集群的服务时,STONITH 也会有意义。在这种情况下,集群使用 STONITH 来强制整个节点离线,从而使在其他位置可以安全地启动该服务。
有关隔离的一般信息及其在红帽高可用性集群中的重要程度,请查看 红帽高可用性集群中的红帽知识库解决方案隔离。
您可以在 Pacemaker 集群中为集群的节点配置隔离设备,从而在 Pacemaker 集群中实施 STONITH。
52.1. 显示可用的隔离代理及其选项 复制链接链接已复制到粘贴板!
以下命令可用于查看可用的隔离代理和特定隔离代理的可用选项。
您的系统硬件决定了用于集群的隔离设备的类型。有关支持的平台和架构以及不同的隔离设备的详情,请参考 RHEL 高可用性集群的支持策略 文章中的 集群平台和架构 部分。
运行以下命令列出所有可用的隔离代理。当您指定过滤器时,这个命令只会显示与过滤器匹配的隔离代理。
pcs stonith list [filter]
pcs stonith list [filter]
运行以下命令以显示指定隔离代理的选项。
pcs stonith describe [stonith_agent]
pcs stonith describe [stonith_agent]
例如:以下命令显示 APC 通过 telnet/SSH 的隔离代理的选项。
对于提供 method 选项的隔离代理,fence_sbd 代理除外,cycle 值不被支持,不应被指定,因为它可能导致数据损坏。但是,即使是 fence_sbd,您不应指定一个方法,而是使用默认值。
52.2. 创建隔离设备 复制链接链接已复制到粘贴板!
创建隔离设备的命令格式如下。有关可用隔离设备创建选项的列表,请参阅 pcs stonith -h 显示。
pcs stonith create stonith_id stonith_device_type [stonith_device_options] [op operation_action operation_options]
pcs stonith create stonith_id stonith_device_type [stonith_device_options] [op operation_action operation_options]
以下命令为单一节点创建一个隔离设备。
pcs stonith create MyStonith fence_virt pcmk_host_list=f1 op monitor interval=30s
# pcs stonith create MyStonith fence_virt pcmk_host_list=f1 op monitor interval=30s
有些隔离设备只能隔离一个节点,其他设备则可能隔离多个节点。您创建隔离设备时指定的参数取决于您的隔离设备的支持和要求。
- 有些隔离设备可自动决定它们可以隔离哪些节点。
-
您可以在创建隔离设备时使用
pcmk_host_list参数,以指定由该隔离设备控制的所有机器。 -
有些隔离设备需要主机名与隔离设备可识别的规格映射。在创建隔离设备时,您可以使用
pcmk_host_map参数来映射主机名。
有关 pcmk_host_list 和 pcmk_host_map 参数的详情,请参考 隔离设备的常规属性。
配置隔离设备后,您必须测试该设备以保证其可以正常工作。有关测试隔离设备的详情,请参考 测试隔离设备。
52.3. 隔离设备的常规属性 复制链接链接已复制到粘贴板!
您可以为隔离设备设置很多常规属性,以及决定隔离行为的各种集群属性。
任何集群节点都可以使用任何隔离设备隔离保护其它集群节点,无论隔离资源是启动还是停止。资源是否启动只控制设备的重复监控,而不控制是否使用资源,但以下情况除外:
-
您可以通过运行
pcs stonith disable stonith_id命令来禁用隔离设备。这将阻止任何节点使用该设备。 -
要防止特定节点使用隔离设备,您可以为隔离资源配置位置约束,使用
pcs constraint location … avoids命令。 -
配置
stonith-enabled=false将完全禁用隔离。但请注意,红帽不支持隔离功能被禁用的集群,因为它不适用于生产环境。
下表描述了您可以为隔离设备设置的一般属性。
| 项 | 类型 | Default(默认) | 描述 |
|---|---|---|---|
|
| 字符串 |
用于不支持主机名的设备的主机名到端口号的映射。例如: | |
|
| 字符串 |
此设备控制的机器列表(可选,除非 | |
|
| 字符串 |
如果设置了
* 否则,
* 否则,
* 否则, |
如何确定被设备控制的机器。允许的值: |
下表总结了您可以为隔离设备设置的其他属性。请注意,这些属性仅适用于高级使用。
| 项 | 类型 | Default(默认) | 描述 |
|---|---|---|---|
|
| 字符串 | port |
提供端口的一个替代参数。有些设备不支持标准端口参数,或者可能会提供额外的端口。使用这个参数指定一个替代的、针对于具体设备的参数,它代表要被隔离的机器。值 |
|
| 字符串 | reboot |
要运行的一个替代命令,而不是 |
|
| time | 60s |
指定用于重新启动操作的替代超时,而不是 |
|
| 整数 | 2 |
在超时时间内重试 |
|
| 字符串 | off |
要运行的一个替代命令,而不是 |
|
| time | 60s |
指定用于 off 操作的替代超时,而不是 |
|
| 整数 | 2 | 在超时时间内重试 off 命令的次数上限。有些设备不支持多个连接。如果设备忙碌了处理另一个任务,操作可能会失败,因此如果还有剩余时间,Pacemaker 会自动重试操作。使用这个选项更改 Pacemaker 在放弃前重试操作的次数。 |
|
| 字符串 | list |
要运行的一个替代命令,而不是 |
|
| time | 60s | 指定 list 操作使用的特代的超时时间。和一般的设备相比,有些设备需要更长或更短的时间完成。使用此选项指定替代的、list 操作使用的、特定于设备的超时时间。 |
|
| 整数 | 2 |
在超时时间内重试 |
|
| 字符串 | monitor |
要运行的一个替代命令,而不是 |
|
| time | 60s |
指定用于 monitor 操作的替代超时,而不是 |
|
| 整数 | 2 |
在超时时间内重试 |
|
| 字符串 | status |
要运行的一个替代命令,而不是 |
|
| time | 60s |
指定用于 status 操作的替代超时,而不是 |
|
| 整数 | 2 | 在超时时间内重试 status 命令的次数上限。有些设备不支持多个连接。如果设备忙碌了处理另一个任务,操作可能会失败,因此如果还有剩余时间,Pacemaker 会自动重试操作。使用这个选项更改 Pacemaker 在放弃前 status 操作的次数。 |
|
| 字符串 | 0s |
为隔离操作启用基本延迟,并指定基本延迟值。在 Red Hat Enterprise Linux 8.6 及更高版本中,您可以使用 |
|
| time | 0s |
为隔离操作启用一个随机延迟,并指定最大延迟,即组合基本延迟和随机延迟的最大值。例如,如果基本延迟为 3,并且 |
|
| 整数 | 1 |
在这个设备上可并行执行的最大操作数量。需要首先配置集群属性 |
|
| 字符串 | on |
仅用于高级使用:替代 |
|
| time | 60s |
仅用于高级使用:指定用于 |
|
| 整数 | 2 |
仅用于高级使用:在超时时间内重试 |
除了可以为单独的隔离设备设置的属性外,您还可以设置用来决定隔离行为的集群属性,如下表所述。
| 选项 | Default(默认) | 描述 |
|---|---|---|
|
| true |
表示失败的节点以及带有资源无法停止的节点应该被隔离。保护数据需要将此设置为
如果为
红帽只支持将这个值设置为 |
|
| reboot |
发送到隔离设备的操作。允许的值: |
|
| 60s | 等待 STONITH 操作完成的时间。 |
|
| 10 | 在集群不再立即重新尝试之前,隔离可以失败的次数。 |
|
| 在认为某个节点被硬件 wathcdog 终止前等待的最长时间。建议将此值设置为硬件 watchdog 超时值的两倍。只有在使用 watchdog-only SBD 配置进行隔离时才需要这个选项。 | |
|
| true(RHEL 8.1 及更新的版本) | 允许并行执行隔离操作。 |
|
| stop |
(Red Hat Enterprise Linux 8.2 及更新的版本)决定当集群节点有其自身隔离通知时该如何响应。如果错误配置了隔离,或者使用 fabric 隔离方式当没有中断集群的通信,集群节点可能会收到其自身隔离的通知信息。允许的值为
虽然此属性的默认值是 |
|
| 0(禁用) | (RHEL 8.3 及更新的版本)设置一个隔离延迟,供您配置一个双节点集群,以便在脑裂情况下,运行最少或最重要的资源的节点是被隔离的节点。有关隔离延迟参数及其相互作用的一般信息,请查看 隔离延迟。 |
有关设置集群属性的详情,请参考 设置和删除集群属性。
52.4. 隔离延迟 复制链接链接已复制到粘贴板!
当集群通信在双节点集群中丢失时,一个节点可能首先检测到此节点,并隔离其他节点。但是,如果两个节点同时检测到这个,则每个节点都可以启动其他节点的隔离,使两个节点关闭或重置。通过设置隔离延迟,您可以降低两个集群节点相互隔离的可能性。您可以在具有超过两个节点的集群中设置延迟,但这通常不会有任何好处,因为只有具有仲裁的分区将启动隔离。
您可以根据系统要求设置不同类型的隔离延迟。
静态隔离延迟
静态隔离延迟是一个固定的、预先确定的延迟。在一个节点上设置静态延迟使该节点更有可能被隔离,因为它增加了检测到丢失的通信后,其他节点首先启动隔离的机会。在主动/被动集群中,在被动节点上设置一个延迟,使得在通信中断时,被动节点将更有可能被隔离。您可以使用
pcs_delay_base集群属性配置静态延迟。当为每个节点使用单独的隔离设备时,您可以设置此属性,或使用单一隔离设备用于所有节点时(从 RHEL 8.6 开始)。动态隔离延迟
动态隔离延迟是随机的。它可能会有所不同,并在需要隔离时确定。您可以配置一个随机延迟,并使用
pcs_delay_max集群属性为组合的基本延迟和随机延迟指定最大值。当每个节点的隔离延迟是随机的时,被隔离的节点也是随机的。如果您的集群被配置为在主动/主动设计中具有所有节点的单个隔离设备,则可能会发现此功能很有用。优先级隔离延迟
优先级隔离延迟基于活跃的资源优先级。如果所有资源具有相同的优先级,则运行最少资源的节点是被隔离的节点。在大多数情况下,您只使用一个与延迟相关的参数,但可以组合它们。合并与延迟相关的参数,将资源的优先级值加在一起,以创建总延迟。您可以使用
priority-fencing-delay集群属性配置优先级隔离延迟。您可以在主动/主动集群设计中发现此功能,因为它可以在节点之间的通信丢失时让运行最少资源的节点更有可能被隔离。
pcmk_delay_base 集群属性
设置 pcmk_delay_base 集群属性为隔离启用了基本延迟,并指定了基本延迟值。
当您除了设置 pcmk_delay_base 属性,又设置了 pcmk_delay_max 集群属性时,整个延迟会从添加到此静态延迟的随机延迟值中派生,以便总和保持在最大延迟之下。当您设置了 pcmk_delay_base ,但没有设置 pcmk_delay_max 时,延迟没有随机的组件,它将是 pcmk_delay_base 的值。
在 Red Hat Enterprise Linux 8.6 及更高版本中,您可以使用 pcmk_delay_base 参数为不同的节点指定不同的值。这允许在双节点集群中使用单个隔离设备,每个节点有不同的延迟。您不需要配置两个单独的设备来使用单独的延迟。要为不同的节点指定不同的值,您可以使用与 pcmk_host_map 类似的语法,将主机名映射到该节点的延迟值。例如,在隔离 node1 时,node1:0;node2:10s 将不会使用延迟,在隔离 node2 时使用 10 秒的延迟。
pcmk_delay_max 集群属性
设置 pcmk_delay_max 集群属性启用了隔离操作的随机延迟,并指定了最大延迟,这是组合的基本延迟和随机延迟的最大值。例如,如果基本延迟为 3,并且 pcmk_delay_max 为 10,则随机延迟将在 3 和 10 之间。
当您除了设置 pcmk_delay_max 属性外,还设置了 pcmk_delay_base 集群属性时,整个延迟是从添加到此静态延迟的随机延迟值中派生的,以便总和保持在最大延迟之下。当您设置 pcmk_delay_max ,但没有设置 pcmk_delay_base 时,这个延迟没有静态组件。
priority-fencing-delay 集群属性
(RHEL 8.3 及更高版本)设置 priority-fencing-delay 集群属性,允许您配置一个双节点集群,以便在脑裂情况下,运行最少或最重要的资源的节点是被隔离的节点。
priority-fencing-delay 属性可以设置为持续时间。这个属性的默认值为 0(禁用)。如果将此属性被设置为非零值,并且优先级 meta-attribute 为至少一个资源进行了配置,那么在脑裂的情况下,在其上运行的具有所有资源的最高组合优先级的节点将更有可能保持正常运行。例如,如果您设置了 pcs resource defaults update priority=1 和 pcs property set priority-fencing-delay=15s,且没有设置其他优先级,那么运行最多资源的节点将更有可能保持正常运行,因为其他节点在启动隔离前将等待 15 秒。如果特定资源比其他资源更重要,您可以赋予它更高的优先权。
如果为该克隆配置了优先级,运行可升级的克隆 master 角色的节点会得到额外的 1 点。
隔离延迟的交互
设置多种类型的隔离延迟会产生以下结果:
-
使用
priority-fencing-delay属性设置的任何延迟都被添加到pcmk_delay_base和pcmk_delay_max隔离设备属性中的任何延迟中。当两个节点具有相等的优先级时,或者两个节点因为节点丢失以外的原因需要隔离时,这种行为允许一些延迟,例如当为资源监控器操作设置了on-fail=fencing时。当设置这些延迟的组合时,将priority-fencing-delay属性设置为一个明显大于pcmk_delay_base和pcmk_delay_max中的最大延迟的值,以确保优先级的节点是首选的。将此属性设置为此值的两倍通常是安全的。 -
只有 Pacemaker 本身调度的隔离才能观察到隔离延迟。由外部代码(如
dlm_controld)调度的隔离和由pcs stonith fence命令实现的隔离不会向隔离设备提供必要信息。 -
有些单独的隔离代理实现一个延迟参数,其名称由代理决定,并且其独立于使用
pcmk_delay_* 属性配置的延迟。如果同时配置了这些延迟,它们会被加在一起,通常不会一起使用。
52.5. 测试隔离设备 复制链接链接已复制到粘贴板!
隔离(fencing)是红帽集群基础结构的基本部分,对于验证或测试隔离是否正常运行至关重要。
当 Pacemaker 集群节点或 Pacemaker 远程节点被隔离时,应该发生硬终止,而不是操作系统的安全关闭。如果您的系统隔离节点时发生安全关闭,请在 /etc/systemd/logind.conf 文件中禁用 ACPI 软关闭,以便您的系统会忽略任何电源按钮。有关在 logind.conf 文件中禁用 ACPI soft-off 的说明,请参阅在 logind.conf 文件中禁用 ACPI soft-off。
流程
使用以下步骤测隔离护设备。
使用 ssh、telnet、HTTP 或者任何远程协议连接到该设备以便手动登录并测试隔离设备或者查看给出的输出。例如,如果您要为启用了 IPMI 的设备配置隔离,请尝试使用
ipmitool远程登录。记录手动登录时使用的选项,因为在使用隔离代理时可能需要使用这些选项。如果您无法登录到隔离设备,请确定设备是可以被 ping 到的,没有因为如防火墙等配置限制对隔离设备的访问,在隔离设备中启用了远程访问,且有正确的凭证。
使用隔离代理脚本手动运行隔离代理。这不需要集群服务正在运行,因此您可以在集群配置该设备前执行这个步骤。这可保证在继续前隔离设备响应正常。
注意这些示例将
fence_ipmilan隔离代理脚本用于 iLO 设备。您使用的实际隔离代理以及调用代理的命令取决于服务器硬件。您应该参考您使用的隔离保护代理的 man 页来确定要指定的选项。您通常需要了解隔离设备的登录和密码,以及其它与该隔离设备相关的信息。以下示例显示了使用
-o status参数运行fence_ipmilan隔离代理脚本的格式,来检查另一个节点上的隔离设备接口的状态,而实际上并没有对该节点进行隔离。这可让您在尝试重新引导节点前测试该设备并使其可用。在运行这个命令时,您可以为 iLO 设备指定打开和关闭权限的 iLO 用户的名称和密码。fence_ipmilan -a ipaddress -l username -p password -o status
# fence_ipmilan -a ipaddress -l username -p password -o statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下示例显示了使用
-o reboot参数运行fence_ipmilan隔离代理脚本的格式。在一个节点上运行此命令可重新引导此 iLO 设备管理的节点。fence_ipmilan -a ipaddress -l username -p password -o reboot
# fence_ipmilan -a ipaddress -l username -p password -o rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果隔离代理无法正确地执行 status、off、on 或 reboot 操作,您应该检查硬件、隔离设备的配置以及命令的语法。另外,您可以运行启用了 debug 输出的隔离代理脚本。调试输出会记录隔离设备时失败的事件,对于一些隔离代理,这个信息可能非常有用。
fence_ipmilan -a ipaddress -l username -p password -o status -D /tmp/$(hostname)-fence_agent.debug
# fence_ipmilan -a ipaddress -l username -p password -o status -D /tmp/$(hostname)-fence_agent.debugCopy to Clipboard Copied! Toggle word wrap Toggle overflow 当诊断发生的故障时,您应该确定手动登录到隔离设备时指定的选项与您使用隔离代理传递给隔离代理的操作相同。
对于支持加密连接的隔离代理,您可能会因为证书验证失败而看到一个错误,这需要您信任主机或使用隔离代理的
ssl-insecure参数。同样,如果在目标设备上禁用了 SSL/TLS,可能需要在为隔离代理设置 SSL 参数时考虑此事项。注意如果正在测试的隔离代理是
fence_drac、fence_ilo或系统管理设备的其他一些隔离代理,并且一直出现故障,则返回尝试fence_ipmilan。大多数系统管理卡支持 IPMI 远程登录,唯一支持的隔离代理是fence_ipmilan。一旦隔离设备在集群中配置了与手动操作相同的选项,并且集群已经启动,则可以从任何节点(或者多次从不同的节点)使用
pcs stonith fence命令来测试隔离,如下例所示。pcs stonith fence命令从 CIB 中读取集群配置,并调用配置的隔离代理来执行隔离操作。这会验证集群配置是否正确。pcs stonith fence node_name
# pcs stonith fence node_nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果
pcs stonith fence命令正常工作,这意味着发生隔离事件时集群的隔离配置应该可以正常工作。如果命令失败,这意味着集群管理无法通过它获取的配置调用隔离设备。检查以下问题并根据需要更新集群配置。- 检查您的隔离配置。例如,如果您使用了主机映射,则应该确保系统可以使用您提供的主机名查找节点。
- 检查该设备的密码和用户名是否包含 bash shell 可能会错误解析的特殊字符。请确定,使用引号来包括您输入的密码和用户名是否可以解决这个问题。
-
检查是否可以使用您在
pcs stonith命令中指定的 IP 地址或主机名连接到设备。例如:如果您在 stonith 命令中给出主机名,但使用 IP 地址进行测试,则这不是一个有效的测试。 如果您可以访问您的隔离设备使用的协议,使用那个协议尝试连接该设备。例如,很多代理都使用 ssh 或者 telnet。您应该尝试使用您在配置该设备时提供的凭证连接到该设备,查看是否收到有效提示符并登录该设备。
如果您确定所有参数都正确,但仍无法连接到隔离设备,则可以查看隔离设备的日志信息(如果隔离设备提供了日志)。这会显示该用户是否已连接以及该用户发出什么命令。您还可以在
/var/log/messages文件中搜索 stonith 实例和错误 ,这可以了解发生了什么,但有些代理可以提供额外的信息。
隔离设备测试正常工作并启动并运行集群后,测试实际故障。要做到这一点,在集群中执行应启动令牌丢失的操作。
关闭网络。如何关闭网络取决于您的具体配置。在很多情况下,您可以从主机中物理拔掉网线或电源电缆。有关模拟网络故障的详情,请查看红帽知识库解决方案 模拟 RHEL 集群上网络故障的正确方法是什么?
注意不推荐通过在本地主机中禁用网络接口而不是物理断开网线或者电源电缆的方法进行测试,因为这无法准确模拟典型的实际失败。
使用本地防火墙的阻塞 corosync 的入站和出站网络流落。
以下示例会阻止 corosync,假设使用默认的 corosync 端口,
firewalld用作本地防火墙,corosync 使用的网络接口位于默认防火墙区内:firewall-cmd --direct --add-rule ipv4 filter OUTPUT 2 -p udp --dport=5405 -j DROP firewall-cmd --add-rich-rule='rule family="ipv4" port port="5405" protocol="udp" drop
# firewall-cmd --direct --add-rule ipv4 filter OUTPUT 2 -p udp --dport=5405 -j DROP # firewall-cmd --add-rich-rule='rule family="ipv4" port port="5405" protocol="udp" dropCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
sysrq-trigger模拟崩溃,并使您的机器死机。请注意,触发内核 panic 可能会导致数据丢失 ; 建议首先禁用集群资源。echo c > /proc/sysrq-trigger
# echo c > /proc/sysrq-triggerCopy to Clipboard Copied! Toggle word wrap Toggle overflow
52.6. 配置隔离级别 复制链接链接已复制到粘贴板!
Pacemaker 通过一个称为隔离拓扑的功能实现有多个设备的节点的隔离。要实现拓扑结构,根据常规创建独立设备,然后在配置中的隔离拓扑部分定义一个或多个隔离级别。
Pacemaker 会按如下方式处理隔离级别:
- 级别以整数形式递增,从 1 开始。
- 如果设备失败,对当前级别的处理会中断。不会执行该级别的其他设备,而是尝试下一个级别。
- 如果所有设备被成功隔离,那么该级别已成功,且不会尝试其他级别。
- 当一个级别被通过(success)或所有级别都已经被尝试(failed)后,操作就会完成。
使用以下命令为节点添加隔离级别。这些设备以逗号分开的 stonith id 列表形式提供,对该级别的节点尝试使用这些设备。
pcs stonith level add level node devices
pcs stonith level add level node devices
以下命令列出目前配置的所有隔离级别。
pcs stonith level
pcs stonith level
在以下示例中,为节点 rh7-2 配置了两个隔离设备:名为 my_ilo 的 ilo 隔离设备,以及名为 my_apc 的 apc 隔离设备。这些命令设置了隔离级别,如果设备 my_ilo 失败且无法隔离该节点,Pacemaker 会尝试使用设备 my_apc。本例还显示了配置级别后, pcs stonith level 命令的输出。
以下命令删除指定节点和设备的隔离级别。如果没有指定节点或设备,则您指定的隔离级别会从所有节点中删除。
pcs stonith level remove level [node_id] [stonith_id] ... [stonith_id]
pcs stonith level remove level [node_id] [stonith_id] ... [stonith_id]
以下命令清除指定节点或者 stonith id 的隔离级别。如果您没有指定节点或 stonith id,则会清除所有隔离级别。
pcs stonith level clear [node]|stonith_id(s)]
pcs stonith level clear [node]|stonith_id(s)]
如果您指定一个以上的 stonith id,则必须用逗号分开(不要有空格),如下例所示。
pcs stonith level clear dev_a,dev_b
# pcs stonith level clear dev_a,dev_b
以下命令可验证所有在隔离级别指定的隔离设备和节点是否存在。
pcs stonith level verify
pcs stonith level verify
您可以在隔离拓扑中通过在节点名称上应用的正则表达式、节点属性及其值来指定节点。例如,以下命令将节点 node1、node2 和 node3 配置为使用隔离设备 apc1 和 apc2,节点 node4、node5 和 node6 使用隔离设备 apc3 和 apc4。
pcs stonith level add 1 "regexp%node[1-3]" apc1,apc2 pcs stonith level add 1 "regexp%node[4-6]" apc3,apc4
# pcs stonith level add 1 "regexp%node[1-3]" apc1,apc2
# pcs stonith level add 1 "regexp%node[4-6]" apc3,apc4
以下命令通过使用节点属性匹配得到同样的结果。
52.7. 配置冗余电源的隔离 复制链接链接已复制到粘贴板!
当为冗余电源配置隔离时,集群必须确保在尝试重启主机时,在恢复电源前两个电源都关闭。
如果节点永远无法完全断电,则该节点可能无法释放其资源。这可能会导致同时访问这些资源,并导致节点崩溃的问题。
您需要为每个设备定义一次,并指定它们需要隔离该节点,如下例所示。
52.8. 显示配置的隔离设备 复制链接链接已复制到粘贴板!
以下命令显示所有目前配置的隔离设备。如果指定了 stonith_id,命令仅显示那个配置的隔离设备的选项。如果指定了 --full 选项,则会显示所有配置的隔离选项。
pcs stonith config [stonith_id] [--full]
pcs stonith config [stonith_id] [--full]
52.9. 使用 pcs 命令导出隔离设备 复制链接链接已复制到粘贴板!
在 Red Hat Enterprise Linux 8.7 及更高版本中,您可以显示 pcs 命令,该命令可用于使用 pcs stonith config 命令的 --output-format=cmd 选项在不同的系统上重新创建配置的隔离设备。
以下命令创建一个 fence_apc_snmp 隔离设备,并显示您可以用来重新创建设备的 pcs 命令。
52.10. 修改和删除隔离设备 复制链接链接已复制到粘贴板!
使用以下命令向当前配置的隔离设备修改或添加选项。
pcs stonith update stonith_id [stonith_device_options]
pcs stonith update stonith_id [stonith_device_options]
使用 pcs stonith update 命令更新 SCSI 隔离设备会导致运行隔离资源的同一节点上运行的所有资源重启。在 RHEL 8.5 及更新的版本中,您可以使用以下命令的任一版本更新 SCSI 设备,而不会重启其他集群资源。在 RHEL 8.7 及更高版本中,SCSI 隔离设备可以配置为多路径设备。
pcs stonith update-scsi-devices stonith_id set device-path1 device-path2 pcs stonith update-scsi-devices stonith_id add device-path1 remove device-path2
pcs stonith update-scsi-devices stonith_id set device-path1 device-path2
pcs stonith update-scsi-devices stonith_id add device-path1 remove device-path2
要从当前配置中删除隔离设备。,请使用 pcs stonith delete stonith_id 命令。以下命令删除隔离设备 stonith1。
pcs stonith delete stonith1
# pcs stonith delete stonith1
52.11. 手动隔离一个集群节点 复制链接链接已复制到粘贴板!
您可以使用以下命令手动隔离节点。如果您指定了 --off,这将使用 off API 调用 stonith ,这将关闭节点,而不是重启节点。
pcs stonith fence node [--off]
pcs stonith fence node [--off]
如果隔离设备无法隔离节点,即使它不再活跃,集群可能无法恢复节点上的资源。如果发生了这种情况,在手动确定该节点已关闭后,您可以输入以下命令向集群确认节点已关闭,并释放其资源以用于恢复。
如果您指定的节点实际上没有关闭,但运行了通常由集群控制的集群软件或服务,则数据崩溃/集群失败将发生。
pcs stonith confirm node
pcs stonith confirm node
52.12. 禁用隔离设备 复制链接链接已复制到粘贴板!
要禁用隔离设备/资源,请运行 pcs stonith disable 命令。
以下命令禁用隔离设备 myapc。
pcs stonith disable myapc
# pcs stonith disable myapc
52.13. 防止节点使用隔离设备 复制链接链接已复制到粘贴板!
要防止特定节点使用隔离设备,您可以为隔离资源配置位置限制。
以下示例阻止隔离设备 node1-ipmi 在 node1 上运行。
pcs constraint location node1-ipmi avoids node1
# pcs constraint location node1-ipmi avoids node1
52.14. 配置 ACPI 以用于集成的隔离设备 复制链接链接已复制到粘贴板!
如果您的集群使用集成的隔离设备,必须配置 ACPI(高级配置和电源界面)以保证迅速和完全的隔离。
如果将集群节点配置为使用集成的隔离设备保护,则为该节点禁用 ACPI Soft-Off。禁用 ACPI Soft-Off 允许集成的隔离设备立即并完全关闭节点,而不是尝试彻底关闭(例如,shutdown -h now)。否则,如果启用了 ACPI Soft-Off,集成的隔离设备可能需要 4 秒以上的时间来关闭节点(请参阅下面的备注)。另外,如果启用了 ACPI Soft-Off,且在关闭过程中有一个节点 panic 或停滞,则集成的保护设备可能无法关闭该节点。在这些情况下,隔离会被延迟或者失败。因此,当使用集成隔离设备隔离节点并启用 ACPI Soft-Off时,集群恢复会很慢,或者需要管理员进行干预才能恢复。
保护节点所需时间取决于所使用的集成的保护设备。有些集成的保护设备性能与按住电源按钮相当,因此隔离设备可在 4-5 秒内关闭该节点。其他集成的隔离设备性能与按电源开关一致,依靠操作系统关闭该节点,因此隔离设备关闭该节点的时间要大大超过 4-5 秒。
- 禁用 ACPI Soft-Off 的首选方法是将 BIOS 设置改为 "instant-off" 或一个在不延迟关闭该节点的对等设置,如下为 "Disabling ACPI Soft-Off"。
使用 BIOS 禁用 ACPI Soft-Off 可能不适用于某些系统。如果无法使用 BIOS 禁用 ACPI Soft-Off,您可以使用以下备选方法之一禁用 ACPI Soft-Off:
-
在
/etc/systemd/logind.conf文件中设置HandlePowerKey=ignore,并在隔离时验证节点节点立即关闭,如 logind.conf 文件中的"Disabling ACPI Soft-Off"中所述。这是禁用 ACPI Soft-Off 的第一个替代方法。 在内核引导命令行中附加
acpi=off,如以下 GRUB 文件中完全禁用 ACPI 中所述。这是禁用 ACPI Soft-Off 的第二个替代方法,如果首选方法或第一个替代方法不可用。重要这个方法可完全禁用 ACPI。当 ACPI 被完全禁用时,以下计算机可能无法正确引导。只有在其他方法无法在您的集群中使用时,才使用这个方法。
52.14.1. 使用 BIOS 禁用 ACPI Soft-Off 复制链接链接已复制到粘贴板!
您可以按照以下步骤配置每个集群节点的 BIOS 来禁用 ACPI Soft-Off。
使用 BIOS 禁用 ACPI Soft-Off 的步骤可能因服务器系统而异。您应该在您的硬件文档中验证此步骤。
流程
-
重启节点,并启动
BIOS CMOS 设置工具程序。 - 进入 Power 菜单(或者对等的电源管理菜单)。
在 Power 菜单中,将
Soft-Off by PWR-BTTN功能(或等效的功能)设置为Instant-Off(或使用无延迟电源按钮关闭节点的对等设置)。以下BIOS CMOS Setup Utiliy示例显示ACPI Function设置为Enabled,Soft-Off by PWR-BTTN设置为Instant-Off。注意与
ACPI Function等效,Soft-Off by PWR-BTTN和Instant-Off可能因计算机而异。但这个过程的目的是配置 BIOS,以便计算机能无延迟地关闭电源按钮。-
退出
BIOS CMOS 设置工具程序,保存 BIOS 配置。 - 验证在隔离时该节点是否立即关闭。有关测试隔离设备的详情,请参考 测试隔离设备。
BIOS CMOS 设置实用程序 :
`Soft-Off by PWR-BTTN` set to `Instant-Off`
`Soft-Off by PWR-BTTN` set to
`Instant-Off`
本例展示了 ACPI Function 设置为 Enabled ,Soft-Off by PWR-BTTN 设置为 Instant-Off。
52.14.2. 在 logind.conf 文件中禁用 ACPI Soft-Off 复制链接链接已复制到粘贴板!
要禁用 /etc/systemd/logind.conf 文件中的 电源密钥处理,请使用以下流程。
流程
在
/etc/systemd/logind.conf文件中定义以下配置:HandlePowerKey=ignore
HandlePowerKey=ignoreCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
systemd-logind服务:systemctl restart systemd-logind.service
# systemctl restart systemd-logind.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 验证在隔离时该节点是否立即关闭。有关测试隔离设备的详情,请参考 测试隔离设备。
52.14.3. 在 GRUB 文件中完全禁用 ACPI 复制链接链接已复制到粘贴板!
您可以通过在内核的 GRUB 菜单条目中添加 acpi=off 来禁用 ACPI Soft-Off。
这个方法可完全禁用 ACPI。当 ACPI 被完全禁用时,以下计算机可能无法正确引导。只有在其他方法无法在您的集群中使用时,才使用这个方法。
流程
使用以下步骤在 GRUB 文件中禁用 ACPI:
将
--args选项与grubby工具的--update-kernel选项结合使用,来更改每个集群节点的grub.cfg文件,如下所示:grubby --args=acpi=off --update-kernel=ALL
# grubby --args=acpi=off --update-kernel=ALLCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 重新引导节点。
- 验证在隔离时该节点是否立即关闭。有关测试隔离设备的详情,请参考 测试隔离设备。
第 53 章 配置集群资源 复制链接链接已复制到粘贴板!
使用以下命令创建和删除集群资源。
创建集群资源的命令格式如下:
pcs resource create resource_id [standard:[provider:]]type [resource_options] [op operation_action operation_options [operation_action operation options]...] [meta meta_options...] [clone [clone_options] | master [master_options] [--wait[=n]]
pcs resource create resource_id [standard:[provider:]]type [resource_options] [op operation_action operation_options [operation_action operation options]...] [meta meta_options...] [clone [clone_options] | master [master_options] [--wait[=n]]
集群资源创建的关键选项包括:
-
--before和--after选项指定添加的资源相对于资源组中已存在的资源的位置。 -
指定
--disabled选项表示资源不会自动启动。
对可在集群中创建的资源数量没有限制。
您可以通过配置该资源的约束来决定集群中资源的行为。
资源创建示例
以下命令创建一个 standard的 ocf 、名为 VirtualIP 的资源,provider 为 heartbeat,类型为 IPaddr2 。这个资源的浮动地址是 192.168.0.120,系统会每 30 秒检查一次这个资源是否在运行。
pcs resource create VirtualIP ocf:heartbeat:IPaddr2 ip=192.168.0.120 cidr_netmask=24 op monitor interval=30s
# pcs resource create VirtualIP ocf:heartbeat:IPaddr2 ip=192.168.0.120 cidr_netmask=24 op monitor interval=30s
另外,您可以省略 standard 和 provider 字段,并使用以下命令:这将默认为 ocf 标准, heartbeat 的provider。
pcs resource create VirtualIP IPaddr2 ip=192.168.0.120 cidr_netmask=24 op monitor interval=30s
# pcs resource create VirtualIP IPaddr2 ip=192.168.0.120 cidr_netmask=24 op monitor interval=30s
删除配置的资源
使用以下命令删除一个配置的资源。
pcs resource delete resource_id
pcs resource delete resource_id
例如,以下命令删除具有 VirtualIP 资源 ID 的现有资源。
pcs resource delete VirtualIP
# pcs resource delete VirtualIP
53.1. 资源代理标识符 复制链接链接已复制到粘贴板!
您为资源定义的标识符告诉集群用于该资源的代理,在哪里找到代理及其合规标准。
下表描述了资源代理的这些属性。
| 项 | 描述 |
|---|---|
| standard | 代理符合的标准。允许的值及其含义:
*
*
*
*
* |
| type |
您要使用的资源代理的名称,如 |
| provider |
OCF spec 允许多个厂商提供相同的资源代理。红帽提供的大多数代理都使用 |
下表总结了显示可用资源属性的命令。
| pcs Display 命令 | 输出 |
|---|---|
|
| 显示所有可用资源的列表。 |
|
| 显示可用资源代理标准列表。 |
|
| 显示可用资源代理供应商列表。 |
|
| 显示根据指定字符串过滤的可用资源列表。您可以使用这个命令显示根据标准名称、供应商或类型过滤的资源。 |
53.2. 显示特定于资源的参数 复制链接链接已复制到粘贴板!
对于任何单独的资源,您可以使用以下命令显示资源描述、您可以为该资源设置的参数以及为资源设置的默认值。
pcs resource describe [standard:[provider:]]type
pcs resource describe [standard:[provider:]]type
例如,以下命令显示类型为 apache 的资源的信息。
53.3. 配置资源 meta 选项 复制链接链接已复制到粘贴板!
除了特定于资源的参数外,您还可以为任何资源配置其他资源选项。集群会使用这些选项来决定您的资源的行为。
下表描述了资源 meta 选项。
| 项 | Default(默认) | 描述 |
|---|---|---|
|
|
| 如果不是所有资源都处于活跃状态,集群将停止较低优先级的资源,以便保持优先权更高的资源的活跃状态。 |
|
|
| 指明集群应尝试将此资源保留在什么状态。允许的值:
*
*
*
*
在 RHEL 8.5 及更高版本中, |
|
|
|
指明是否允许集群启动和停止资源。允许的值: |
|
| 0 | 指示资源倾向于保留在当前位置的程度。有关此属性的详情,请参考 配置资源以首选其当前节点。 |
|
| Calculated | 指示可在什么情况下启动资源。
除非在下列情况下,否则默认为
*
*
*
* |
|
|
|
在将这个节点标记为不允许托管此资源之前,节点上可能会发生多少个故障。值 0 表示禁用了此功能(节点永远不会标记为无效);相反,集群将 |
|
|
| 如果经过了这么长时间后没有出现新的故障,则忽略之前失败的资源操作。如果之前达到了其迁移阈值,则这可能允许资源返回到其失败的节点。0 值表示失败不会过期。 警告 :如果这个值太低,且待处理的集群活动阻止集群在这个时间内响应失败,则失败被完全忽略,且不会导致资源恢复,即使重复操作仍然报告失败。这个选项的值应至少大于集群中所有资源的最长操作超时。以小时或天为单位的值是合理的。 |
|
|
| 代表当在多个节点上都找到活跃的资源时集群应该做什么。允许的值:
*
*
*
* |
|
|
|
(RHEL 8.4 及更高版本)为所有涉及资源作为依赖资源(target_resource)的托管约束的 |
|
|
|
(RHEL 8.7 及更高版本)当设为 |
53.3.1. 更改资源选项的默认值 复制链接链接已复制到粘贴板!
在 Red Hat Enterprise Linux 8.3 及更新的版本中,您可以使用 pcs resource defaults update 命令更改所有资源的资源选项默认值。以下命令将资源粘性的默认值重置为 100。
pcs resource defaults update resource-stickiness=100
# pcs resource defaults update resource-stickiness=100
pcs resource defaults name=value 命令为之前版本中的所有资源设置默认值,保持支持,除非配置了多个默认值。但是,pcs resource defaults update 现在是该命令的首选版本。
53.3.2. 更改一组资源选项的默认值 复制链接链接已复制到粘贴板!
在 Red Hat Enterprise Linux 8.3 及更新的版本中,您可以使用 pcs resource defaults set create 命令创建多组资源默认值,该命令允许您指定包含 资源 表达式的规则。在 RHEL 8.3 中,您使用这个命令指定的规则只允许 资源 表达式,包括 and、or 和括号。在 RHEL 8.4 及更高版本中,在您通过此命令指定的规则中只允许 resource 和 date 表达式,包括 和、or 和括号。
使用 pcs resource defaults set create 命令,您可以为特定类型的所有资源配置默认值。例如,如果您正在运行数据库,需要很长时间才能停止,可以提高数据库类型的 resource-stickiness 默认值,以防止这些资源更频繁地迁移到其他节点。
以下命令将类型为 pqsql 的所有资源的 resource- sticky 设置为 100。
-
id选项(即资源默认值的名称)不是强制性的。如果您没有设定此选项,pcs则会自动生成 ID。设置这个值可让您提供更描述性的名称。 在这个示例中,
::pgsql代表一个任何类、任何厂商、类型为pgsql的资源。-
ocf:heartbeat:pgsql代表类为ocf,厂商为heartbeat,类型为pgsql。 -
ocf:pacemaker:代表类为ocf,厂商为pacemaker,类型为任意的资源。
-
pcs resource defaults set create id=pgsql-stickiness meta resource-stickiness=100 rule resource ::pgsql
# pcs resource defaults set create id=pgsql-stickiness meta resource-stickiness=100 rule resource ::pgsql
要更改现有集合中的默认值,请使用 pcs resource defaults set update 命令。
53.3.3. 显示当前配置的资源默认设置 复制链接链接已复制到粘贴板!
pcs resource defaults 命令显示目前配置的资源选项默认值列表,包括您指定的规则。
以下示例显示了在将 resource-stickiness 的默认值重置为 100 后,此命令的输出。
pcs resource defaults Meta Attrs: rsc_defaults-meta_attributes resource-stickiness=100
# pcs resource defaults
Meta Attrs: rsc_defaults-meta_attributes
resource-stickiness=100
以下示例显示,在将类型为 pqsql 的所有资源的 resource-stickiness 默认值重新设置为 100,把 id 选项设置为 id=pgsql-stickiness 后的输出。
pcs resource defaults
Meta Attrs: pgsql-stickiness
resource-stickiness=100
Rule: boolean-op=and score=INFINITY
Expression: resource ::pgsql
# pcs resource defaults
Meta Attrs: pgsql-stickiness
resource-stickiness=100
Rule: boolean-op=and score=INFINITY
Expression: resource ::pgsql
53.3.4. 在创建资源时设置 meta 选项 复制链接链接已复制到粘贴板!
是否重置资源 meta 选项的默认值,您可以在创建资源时将特定资源的资源选项设置为默认值,而不是默认值。以下显示了在为资源元选项指定值时使用的 pcs resource create 命令的格式。
pcs resource create resource_id [standard:[provider:]]type [resource options] [meta meta_options...]
pcs resource create resource_id [standard:[provider:]]type [resource options] [meta meta_options...]
例如,以下命令创建一个 resource-stickiness 值为 50 的资源。
pcs resource create VirtualIP ocf:heartbeat:IPaddr2 ip=192.168.0.120 meta resource-stickiness=50
# pcs resource create VirtualIP ocf:heartbeat:IPaddr2 ip=192.168.0.120 meta resource-stickiness=50
您还可以使用以下命令为现有资源、组或克隆的资源设置资源 meta 选项的值。
pcs resource meta resource_id | group_id | clone_id meta_options
pcs resource meta resource_id | group_id | clone_id meta_options
在以下示例中,有一个名为 dummy_resource 的现有资源。此命令将 failure-timeout 元选项设置为 20 秒,因此资源可在 20 秒内尝试在同一节点上重启。
pcs resource meta dummy_resource failure-timeout=20s
# pcs resource meta dummy_resource failure-timeout=20s
执行此命令后,可以显示资源的值,以验证是否设置了 failure-timeout=20s。
pcs resource config dummy_resource Resource: dummy_resource (class=ocf provider=heartbeat type=Dummy) Meta Attrs: failure-timeout=20s ...
# pcs resource config dummy_resource
Resource: dummy_resource (class=ocf provider=heartbeat type=Dummy)
Meta Attrs: failure-timeout=20s
...
53.4. 配置资源组 复制链接链接已复制到粘贴板!
集集的一个最常见的元素是一组资源,这些资源需要放置在一起,并按顺序启动并按反顺序停止。为简化此配置,Pacemaker 支持资源组的概念。
53.4.1. 创建资源组 复制链接链接已复制到粘贴板!
您可以使用以下命令创建资源组,指定要包含在组中的资源。如果组不存在,这个命令会创建组。如果组存在,这个命令会向组群添加其他资源。这些资源将按您使用此命令指定的顺序启动,并以相反的顺序停止。
pcs resource group add group_name resource_id [resource_id] ... [resource_id] [--before resource_id | --after resource_id]
pcs resource group add group_name resource_id [resource_id] ... [resource_id] [--before resource_id | --after resource_id]
您可以使用此命令的 --before 和 --after 选项来指定添加的资源相对于组中已存在的资源的位置。
您还可以使用以下命令在创建新资源时,将新资源添加到现有组中。您创建的资源会添加到名为 group_name 的组中。如果 group_name 不存在,则会创建它。
pcs resource create resource_id [standard:[provider:]]type [resource_options] [op operation_action operation_options] --group group_name
pcs resource create resource_id [standard:[provider:]]type [resource_options] [op operation_action operation_options] --group group_name
对组可以包含的资源数量没有限制。组群的基本属性如下。
- 资源在一个组中在一起。
- 资源按照您指定的顺序启动。如果组中的资源无法在任何位置运行,则不允许在该资源之后指定资源运行。
- 资源按照您指定的顺序的相反顺序停止。
以下示例创建了一个名为 shortcut 的资源组,其中包含现有的资源 IPaddr 和 Email。
pcs resource group add shortcut IPaddr Email
# pcs resource group add shortcut IPaddr Email
在本例中:
-
IPaddr首先启动,然后是Email。 -
Email资源首先停止,然后是IPAddr。 -
如果
IPaddr无法在任何地方运行,则Email也无法运行。 -
但是,如果
Email无法在任何地方运行,这不会影响IPaddr。
53.4.2. 删除资源组 复制链接链接已复制到粘贴板!
您可以使用以下命令从组中删除资源。如果组中没有剩余资源,这个命令会删除组本身。
pcs resource group remove group_name resource_id...
pcs resource group remove group_name resource_id...
53.4.3. 显示资源组 复制链接链接已复制到粘贴板!
以下命令列出所有目前配置的资源组。
pcs resource group list
pcs resource group list
53.4.4. 组选项 复制链接链接已复制到粘贴板!
您可以为资源组设置以下选项,它们的含义与为单个资源设置时相同: priority、target-role, is-managed。有关资源 meta 选项的详情,请参考 配置资源 meta 选项。
53.4.5. 组粘性 复制链接链接已复制到粘贴板!
粘性(stickiness)在组中是可选的,它代表一个资源倾向于停留在组中的程度。组的每个活跃资源都会为组的总数贡献其粘性值。因此,如果默认的 resource-stickiness 为 100,并且组有 7 个成员,其中 5 个处于活动状态,则整个组将首选其当前位置,分数为 500。
53.5. 确定资源行为 复制链接链接已复制到粘贴板!
您可以通过配置该资源的约束来决定集群中资源的行为。您可以配置以下约束类别:
-
location约束 - 位置约束决定资源可在哪个节点上运行。有关配置位置约束的详情,请参阅 确定资源可在哪些节点上运行。 -
order约束 - 排序约束决定资源运行的顺序。有关配置排序约束的详情,请参考 确定集群资源的运行顺序。 -
colocation约束 - 共处约束决定资源相对于其他资源的位置。有关托管约束的详情,请参考 托管集群资源。
简而言之,配置一组限制会将一组资源放在一起,并确保资源按顺序启动并按相反顺序停止,Pacemaker 支持资源组的概念。创建资源组后,您可以像为单个资源配置限制一样,对组本身配置限制。
第 54 章 确定资源可在哪些节点上运行 复制链接链接已复制到粘贴板!
位置限制决定资源可在哪些节点上运行。您可以配置位置限制,以确定资源是否首选或避免指定节点。
除了位置约束外,资源运行的节点还受到该资源的 resource-stickiness 值的影响,这决定了资源在当前运行的节点上的保留程度。有关设置 resource-stickiness 值的详情,请参考 配置资源以首选其当前节点。
54.1. 配置位置限制 复制链接链接已复制到粘贴板!
您可以配置基本的位置约束,以指定资源是首选某个节点还是避免某个节点,使用可选的 score 值来指示约束的相对首选程度。
以下命令为资源创建一个位置约束,以偏好指定节点。请注意,可以使用单个命令为多个节点在特定资源上创建限制。
pcs constraint location rsc prefers node[=score] [node[=score]] ...
pcs constraint location rsc prefers node[=score] [node[=score]] ...
以下命令为资源创建一个位置约束,以避免指定节。
pcs constraint location rsc avoids node[=score] [node[=score]] ...
pcs constraint location rsc avoids node[=score] [node[=score]] ...
下表总结了配置位置限制的基本选项的含义。
| 项 | 描述 |
|---|---|
|
| 资源名称 |
|
| 节点的名称 |
|
|
正整数值来指示给定资源应首选的资源还是避免给定节点的首选程度。
一个数字分数(即不是 |
以下命令创建了一个位置约束,以指定资源 Webserver 首选节点 node1。
pcs constraint location Webserver prefers node1
# pcs constraint location Webserver prefers node1
pcs 支持命令行中的位置限制中的正则表达式。这些限制适用于基于正则表达式匹配资源名称的多个资源。这可让您使用单一命令行配置多个位置限制。
以下命令创建了一个位置约束,从资源 dummy0 到 dummy9 都首选 node1。
pcs constraint location 'regexp%dummy[0-9]' prefers node1
# pcs constraint location 'regexp%dummy[0-9]' prefers node1
因为 Pacemaker 使用 POSIX 扩展正则表达式,如 http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_04 所述,您可以使用以下命令指定相同的约束。
pcs constraint location 'regexp%dummy[[:digit:]]' prefers node1
# pcs constraint location 'regexp%dummy[[:digit:]]' prefers node1
54.2. 将资源发现限制为节点子集 复制链接链接已复制到粘贴板!
Pacemaker 在任何位置启动资源前,它首先在每个节点上执行一次性 monitor 操作(通常称为"探测"),以了解资源是否已在运行。这种资源发现的过程可能会导致无法执行 monitor 的节点出现错误。
在节点上配置位置约束时,您可以使用 pcs constraint location 命令的 resource-discovery 选项,来为 Pacemaker 是否应该为指定资源在该节点上执行资源发现指示首选。将资源发现限制到物理上能够运行的节点子集可能会在有大量节点时显著提高性能。当使用 pacemaker_remote 来将节点数扩展到数百个节点范围时,应考虑此选项。
以下命令显示了为 pcs constraint location 命令指定 resource-discovery 选项的格式。在这个命令中,一个正的分值值对应一个基本位置约束,它配置为首选节点,而 分数 的负数值对应配置资源以避免节点的基本位置约束。与基本位置限制一样,您也可以使用这些限制的资源使用正则表达式。
pcs constraint location add id rsc node score [resource-discovery=option]
pcs constraint location add id rsc node score [resource-discovery=option]
下表总结了为资源发现配置约束的基本参数的含义。
| 项 | 描述 |
|
| 约束本身的用户选择的名称。 |
|
| 资源名称 |
|
| 节点的名称 |
|
| 整数值来指示给定资源应首选的资源还是避免给定节点的首选程度。一个正的分值对应一个基本位置约束,它配置为首选节点,而分数的负数值对应配置资源以避免节点的基本位置约束。
一个数字分数(即不是 |
|
|
*
*
* |
将 resource-discovery 设置为 never 或 exclusive 的 Pacemaker 能够检测和停止运行不需要的服务实例(在不应该运行)。系统管理员可以确保该服务永远无法在没有资源发现的情况下在节点上活跃(比如卸载相关的软件)。
54.3. 配置位置约束策略 复制链接链接已复制到粘贴板!
在使用位置限制时,您可以配置常规策略来指定资源可在哪些节点上运行:
- Opt-in 集群 - 配置一个集群,默认情况下,任何资源都无法在任何位置运行,然后有选择地为特定资源启用允许的节点。
- Opt-out 集群 - 配置一个集群,默认情况下,所有资源都可以在任何位置运行,然后为不允许在特定节点上运行的资源创建位置限制。
根据您的需要以及集群的组成,把集群设置为 opt-in 集群还是 opt-out 集群。如果大多数资源可以在大多数节点上运行,那么如果没有选择的协议则可能会导致配置更简单。另一方面,如果大多数资源只能在一小部分节点中运行,那么选择的配置可能比较简单。
54.3.1. 配置 "Opt-In" 集群 复制链接链接已复制到粘贴板!
要创建一个 opt-in 集群,请将 symmetric-cluster 集群属性设置为 false,以防止资源默认在任何地方运行。
pcs property set symmetric-cluster=false
# pcs property set symmetric-cluster=false
为单个资源启用节点。以下命令配置位置约束,以便资源 Webserver 首选节点 example-1 ,资源 Database 首选节点 example-2,如果它们的首选节点都出现故障,则这两个资源都可以切换到节点 example-3。当为 opt-in 集群配置位置限制时,设置零分数可允许资源在节点上运行,而不表示首选或避免该节点。
pcs constraint location Webserver prefers example-1=200 pcs constraint location Webserver prefers example-3=0 pcs constraint location Database prefers example-2=200 pcs constraint location Database prefers example-3=0
# pcs constraint location Webserver prefers example-1=200
# pcs constraint location Webserver prefers example-3=0
# pcs constraint location Database prefers example-2=200
# pcs constraint location Database prefers example-3=0
54.3.2. 配置 "Opt-Out" 集群 复制链接链接已复制到粘贴板!
要创建一个 opt-out 集群,请将 symmetric-cluster 集群属性设置为 true,以允许资源默认可在任何地方运行。如果没有明确设置 symmetric-cluster,则这是默认配置。
pcs property set symmetric-cluster=true
# pcs property set symmetric-cluster=true
然后,以下命令将生成一个配置,该配置等同于 "Opt-In" 集群中的示例。如果它们的首选节点出现故障,这两个资源都可以切换到节点 example-3,因为每个节点都有一个隐含的为 0 的 score 。
pcs constraint location Webserver prefers example-1=200 pcs constraint location Webserver avoids example-2=INFINITY pcs constraint location Database avoids example-1=INFINITY pcs constraint location Database prefers example-2=200
# pcs constraint location Webserver prefers example-1=200
# pcs constraint location Webserver avoids example-2=INFINITY
# pcs constraint location Database avoids example-1=INFINITY
# pcs constraint location Database prefers example-2=200
请注意,不需要在这些命令中指定 INFINITY 分数,因为这是分数的默认值。
54.4. 配置资源以首选其当前节点 复制链接链接已复制到粘贴板!
资源有 resource-stickiness 值,您可以在创建资源时设为 meta 属性,如 配置资源 meta 选项 中所述。resource-stickiness 值决定资源要在当前运行的节点上保留多少。Pacemaker 会将 resource-stickiness 值与其他设置(例如,位置约束的 score 值)一起考虑,以确定是否将资源移至其它节点还是将其留在原地。
resource-stickiness 值为 0 时,群集可以根据需要移动资源,以在节点之间平衡资源。这可能会导致资源在不相关的资源启动或停止时移动。对于正的粘性,资源更倾向于保持原处,只有在其他情况超出粘性时才会移动。这可能会导致新添加的节点在没有管理员干预的情况下无法获取分配给它们的任何资源。
默认情况下,创建的资源 resource-stickiness 值为 0。当 resource-stickiness 设置为 0 ,且没有位置约束时,Pacemaker 的默认行为是移动资源,以便在集群节点中平均分配这些资源。这可能导致健康的资源变化频率超过您的要求。要防止这种行为,您可以将 resource-stickiness 的默认值设为 1。此默认值将应用到集群中的所有资源。这个小值可以被您创建的其他限制轻松覆盖,但可以防止 Pacemaker 在集群中无用地移动处于健康状态的资源。
以下命令将默认 resource-stickiness 值设为 1。
pcs resource defaults update resource-stickiness=1
# pcs resource defaults update resource-stickiness=1
因为 resource-stickiness 值为正,任何资源都不会移至新添加的节点。如果此时需要资源平衡,您可以临时将资源 resource-stickiness 值设为 0。
请注意,如果位置约束 score 高于 resource-stickiness 值,则集群仍然可以将健康资源移至位置约束所指向的节点。
如需有关 Pacemaker 如何确定资源的放置位置的更多信息,请参阅配置节点放置策略。
第 55 章 确定运行集群资源的顺序 复制链接链接已复制到粘贴板!
要确定资源运行的顺序,您需要配置一个顺序约束。
以下显示了命令配置排序约束的格式。
pcs constraint order [action] resource_id then [action] resource_id [options]
pcs constraint order [action] resource_id then [action] resource_id [options]
下表总结了配置排序约束的属性和选项。
| 项 | 描述 |
|---|---|
| resource_id | 执行某个操作的资源的名称。 |
| action | 资源操作。action 属性可能的值如下:
*
*
*
*
如果没有指定操作,则 |
|
|
如何强制实施约束。
*
*
* |
|
|
如果为 true,则代表反向约束适用于相反的操作(例如,如果 B 在 A 启动后启动,则 B 会在 A 停止前停止)。对于 |
使用以下命令从任何排序约束中删除资源。
pcs constraint order remove resource1 [resourceN]...
pcs constraint order remove resource1 [resourceN]...
55.1. 配置必须的排序 复制链接链接已复制到粘贴板!
一个强制的顺序约束表示,在第一次操作成功完成了第一个资源之前,不应该对第二个资源启动第二个操作。可以排序的操作是 stop、start,对于可升级克隆,还有 demote 和 promote。例如:"A then B"(相当于 "start A then start B")表示 B 不会被启动,直到 A 成功启动为止。如果约束的 kind 选项被设置为 Mandatory,或保留为默认值,则排序约束是必须的。
如果 symmetrical 选项设定为 true 或保留为默认值,则相反的操作将遵循相反的排序。start 和 stop 操作是相反的操作,demote 和 promote 是相反的操作。例如:一个对称 "promote A" 排序意味着 "stop B then demote A" 表示 A 不能被降级,直到 B 成功停止。对称排序表示 A 状态的改变可能会导致操作调度到 B。例如,给定为 "A then B",如果出现故障,B 将首先停止,A 将被停止,A 将启动,然后启动 A,那么 B 将启动。
请注意,集群会响应每个状态的更改。如果第一个资源在第二个资源启动停止操作前再次处于启动状态,则不需要重启第二个资源。
55.2. 配置公告顺序 复制链接链接已复制到粘贴板!
当为顺序约束指定 kind=Optional 选项时,约束被视为可选的,且仅在两个资源都执行指定操作时才适用。您指定的第一个资源的状态更改不会对您指定的第二个资源起作用。
以下命令为名为 VirtualIP 和 dummy_resource 的资源配置咨询排序约束。
pcs constraint order VirtualIP then dummy_resource kind=Optional
# pcs constraint order VirtualIP then dummy_resource kind=Optional
55.3. 配置排序的资源集 复制链接链接已复制到粘贴板!
管理员创建排序的资源链的一个常见情况,例如,资源 A 在资源 B 之前启动,而资源 B 在资源 C 之前启动。如果您的配置需要创建一组资源,这些资源是按顺序共处和启动的,则您可以配置包含这些资源的资源组。
然而,在有些情况下,配置资源需要以指定顺序启动,因为资源组不合适:
- 您可能需要配置资源以启动,而且资源不一定是在一起的。
- 您可能有一个资源 C,它必须在资源 A 或 B 启动后启动,但 A 和 B 之间没有关系。
- 您可能有资源 C 和 D 在资源 A 和 B 启动时必须启动,但 A 和 B 之间没有关系,C 和 D 之间没有关系。
在这些情况下,您可以使用 pcs constraint set 命令对一组或几组资源创建顺序约束。
您可以使用 pcs constraint order set 命令为一组资源设置以下选项。
sequential,可以设为true或false,以指示资源集合是否可以相互排序。默认值为true。将
sequential设为false,允许一个集合相对于排序约束中的其他集合进行排序,而不对其成员进行相互排序。因此,只有在约束里列出了多个集合时才有意义 ; 否则,约束无效。-
require-all,它可以设为true或false,以指示集合中的所有资源在继续前是否处于活动状态。将require-all设为false,表示集合中只有一个资源需要启动,然后才能继续下一个集合。将require-all设为false没有任何作用,除非与未排序的集合一起使用,未排序的集合是那些sequential设置为false的集合。默认值为true。 -
action,可以被设置为start,promote,demote或stop,如确定群集资源的运行顺序 中" Order Constraint"表中的"属性"中所述。 -
role,它可以设为Stopped、Started、master或Slave。在 RHEL 8.5 及更高版本中,pcs命令行界面接受Promoted和Unpromoted作为角色的值。Promoted和Unpromoted角色在功能上等同于Master和Slave角色。
您可以按照 pcs constraint set 命令的 setoptions 参数,为一组资源设置以下约束选项。
-
ID,为您定义的约束提供名称: -
kind,它表示如何强制实施约束,如 确定集群资源的运行顺序 中"排序约束的属性"表中所述。 -
symmetrical设置约束的反向是否适用于相反的操作,如在确定 确定集群资源的运行顺序 中"排序约束的属性"表中所述。
pcs constraint order set resource1 resource2 [resourceN]... [options] [set resourceX resourceY ... [options]] [setoptions [constraint_options]]
pcs constraint order set resource1 resource2 [resourceN]... [options] [set resourceX resourceY ... [options]] [setoptions [constraint_options]]
如果您有三个名为 D1、D2 和 D3 的资源,以下命令将它们配置为排序的资源集。
pcs constraint order set D1 D2 D3
# pcs constraint order set D1 D2 D3
如果您有六个名为 A、B、C、D、E、和 F 的资源,则示例为一组启动的资源配置了排序约束,如下所示:
-
A和B的启动是相互独立的 -
C在A或B启动后启动 -
D在C启动后启动 -
D启动后,E和F的启动是相互独立的
如果设置了 symmetrical=false,则停止的顺序不受这个约束的影响。
pcs constraint order set A B sequential=false require-all=false set C D set E F sequential=false setoptions symmetrical=false
# pcs constraint order set A B sequential=false require-all=false set C D set E F sequential=false setoptions symmetrical=false
55.4. 为不由 Pacemaker 管理的资源依赖项配置启动顺序 复制链接链接已复制到粘贴板!
集群可能包含不是由集群管理的依赖项的资源。在这种情况下,您必须确保在 Pacemaker 停止后启动这些依赖项,然后才能停止 Pacemaker。
您可以通过 systemd resource-agents-deps target 配置您的启动顺序来应对这种情况。您可以为此目标创建一个 systemd drop-in 单元,Pacemaker 会根据这个目标自行排序。
例如,如果集群包含依赖于集群管理的外部服务 foo 的资源,请执行以下步骤。
创建 drop-in 单元
/etc/systemd/system/resource-agents-deps.target.d/foo.conf,其中包含以下内容:[Unit] Requires=foo.service After=foo.service
[Unit] Requires=foo.service After=foo.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
运行
systemctl daemon-reload命令。
用这种方法指定的集群依赖项可以是服务以外的其它依赖项。例如:您在 /srv 中挂载一个文件系统可能会需要依赖项,这时您可执行以下步骤:
-
确定
/srv列在/etc/fstab文件中。这样,当重新载入系统管理器的配置时,会在启动时自动转换为systemd文件srv.mount。如需更多信息,请参阅systemd.mount(5)和systemd-fstab-generator(8)man page。 要确保 Pacemaker 在挂载磁盘后启动,请创建 drop-in 单元
/etc/systemd/system/resource-agents-deps.target.d/srv.conf,其中包含以下内容:[Unit] Requires=srv.mount After=srv.mount
[Unit] Requires=srv.mount After=srv.mountCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
运行
systemctl daemon-reload命令。
如果 Pacemaker 集群使用的 LVM 卷组包含位于远程块存储上的一个或多个物理卷,如 iSCSI 目标,则您可以为目标配置 systemd resource-agents-deps 目标和一个 systemd 置入单元,以确保服务在 Pacemaker 启动之前启动。
以下流程将 blk-availability.service 配置为依赖项。blk-availability.service 服务是一个包装程序,它包含 iscsi.service 以及其他服务。如果您的部署需要它,则您可以将 iscsi.service (仅用于 iSCSI)或 remote-fs.target 配置为依赖项,而不是 blk-availability。
创建包含以下内容的置入单元
/etc/systemd/system/resource-agents-deps.target.d/blk-availability.conf:[Unit] Requires=blk-availability.service After=blk-availability.service
[Unit] Requires=blk-availability.service After=blk-availability.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
运行
systemctl daemon-reload命令。
第 56 章 Colocating 集群资源 复制链接链接已复制到粘贴板!
要指定一个资源的位置取决于另一个资源的位置,您需要配置 colocation 约束。
在两个资源间创建 colocation 约束具有重要的副作用:它会影响分配给节点资源的顺序。这是因为您无法相对于资源 B 来放置资源 A,除非您知道资源 B 的位置。因此,当创建 colocation 约束时,您必须考虑是将资源 A 与资源 B 共处,还是将资源 B 与资源 A 共处。
在创建 colocation 约束时要记住的是,假设资源 A 与资源 B 在一起,在决定哪个节点要选择资源 B 时,集群也会考虑资源 A 的首选项。
以下命令创建了 colocation 约束。
pcs constraint colocation add [master|slave] source_resource with [master|slave] target_resource [score] [options]
pcs constraint colocation add [master|slave] source_resource with [master|slave] target_resource [score] [options]
下表总结了配置 colocation 约束的属性和选项。
| 参数 | 描述 |
|---|---|
| source_resource | 共处源。如果约束不满意,集群可能决定完全不允许该资源运行。 |
| target_resource | 共处目标。集群将决定优先放置此资源的位置,然后决定放置源资源的位置。 |
| 分数 |
正数值表示资源应该在同一个节点上运行。负值表示资源不应在同一节点上运行。+ |
|
| (RHEL 8.4 及更新的版本)决定集群是否会在依赖资源达到其故障迁移阈值时将主资源(source_resource)和依赖资源(target_resource)移到另一个节点,或者集群是否将依赖资源离线,而不导致服务切换。
当这个选项的值为
当这个选项的值为 |
56.1. 指定资源的强制放置 复制链接链接已复制到粘贴板!
当约束分数为 +INFINITY 或 -INFINITY 时,就会发生强制放置。在这种情况下,如果约束无法满足,则不允许 source_resource 运行。对于 score=INFINITY,这包括 target_resource 未处于活动状态的情况。
如果您需要 myresource1 始终与 myresource2 运行在同一台机器上,则您可以添加以下约束:
pcs constraint colocation add myresource1 with myresource2 score=INFINITY
# pcs constraint colocation add myresource1 with myresource2 score=INFINITY
由于使用了 INFINITY,如果 myresource2 无法在任何一个集群节点上运行(出于某种原因),则将不允许 myresource1 运行。
或者,您可能想要配置相反的情况,在集群中,myresource1 不能与 myresource2 运行在同一台机器上。在这种情况下,请使用 score=-INFINITY
pcs constraint colocation add myresource1 with myresource2 score=-INFINITY
# pcs constraint colocation add myresource1 with myresource2 score=-INFINITY
同样,通过指定 -INFINITY,约束是绑定的。因此,如果只剩下 myresource2 所在的位置可以运行,那么 myresource1 可能无法在任何地方运行。
56.2. 指定资源的公告放置 复制链接链接已复制到粘贴板!
资源的公告放置表示资源的放置是首选项,但并不是强制的。对于 score 大于 -INFINITY 且小于 INFINITY 的约束,集群将尝试满足您的要求,但如果替代方案是停止某些集群资源,则可能会忽略它们。
56.3. 资源共存集合 复制链接链接已复制到粘贴板!
如果您的配置需要您创建一组资源,它们按顺序共处并启动,您可以配置包含这些资源的资源组。然而,在有些情况下,配置需要作为资源组共存的资源是不合适的:
- 您可能需要托管一组资源,但这些资源不一定要按顺序启动。
- 您可能有一个资源 C,它必须和资源 A 或 B 在一起,但 A 和 B 之间没有关系。
- 您可能有资源 C 和 D 必须和资源 A 和 B 在一起,但 A 和 B 之间没有关系,C 和 D 之间没有关系。
在这些情况下,您可以使用 pcs constraint colocation set 命令对一组或几组资源创建共处约束。
您可以使用 pcs constraint colocation set 命令为一组资源设置以下选项。
sequential,它可以设为true或false,以指示集合成员是否必须相互共处。将
sequential设为false,允许此集合的成员与约束后面列出的另一个集合共处,而无论此集合中哪些成员处于活动状态。因此,只有在约束里列出另一个集合之后,这个选项才有意义,否则约束无效。-
role,它可以设为Stopped、Started、master或Slave。
您可以按照 pcs constraint colocation set 命令的 setoptions 参数为一组资源设置以下约束选项。
-
ID,为您定义的约束提供名称: -
score表示此约束的首选程度。有关这个选项的详情,请参考 配置位置约束中的 "Location Constraint Options" 表
当列出集合的成员时,每个成员都与其前一个成员共处。例如:"set A B" 表示 "B 与 A 共存"。但是,当列出多个集合时,每个集合都与后面的组在一起。例如:"set C D sequential=false set A B" 表示 "set C D(其中 C 和 D 间没有关系)与 set A B 在一起(其中 B 与 A 在一起)"。
以下命令在一组或一组资源上创建了 colocation 约束。
pcs constraint colocation set resource1 resource2] [resourceN]... [options] [set resourceX resourceY] ... [options]] [setoptions [constraint_options]]
pcs constraint colocation set resource1 resource2] [resourceN]... [options] [set resourceX resourceY] ... [options]] [setoptions [constraint_options]]
使用以下命令删除带有 source_resource 的共处约束。
pcs constraint colocation remove source_resource target_resource
pcs constraint colocation remove source_resource target_resource
第 57 章 显示资源限制和资源依赖项 复制链接链接已复制到粘贴板!
您可以使用一些命令来显示已经配置的约束。您可以显示所有配置的资源约束,也可以将资源限制的显示限制为特定类型的资源限制。另外,您还可以显示配置的资源依赖项。
显示所有配置的限制
以下命令列出所有当前位置、顺序和 colocation 约束。如果指定了 --full 选项,则显示内部约束 ID。
pcs constraint [list|show] [--full]
pcs constraint [list|show] [--full]
在 RHEL 8.2 及之后的版本中,列出资源限制不再默认显示过期的限制。
要在列表中包含已过期的 constaints,请使用 pcs constraint 命令的 --all 选项。这将列出已过期的限制,请注意显示中的限制及其关联的规则为 (expired)。
显示位置限制
以下命令列出所有当前位置限制。
-
如果指定了
resources,则会按资源显示位置约束。这是默认的行为。 -
如果指定了
nodes,则按节点显示位置约束。 - 如果指定了特定资源或节点,则只显示那些资源或节点的信息。
pcs constraint location [show [resources [resource...]] | [nodes [node...]]] [--full]
pcs constraint location [show [resources [resource...]] | [nodes [node...]]] [--full]
显示排序限制
以下命令列出所有当前排序限制。
pcs constraint order [show]
pcs constraint order [show]
显示 colocation 约束
以下命令列出所有当前的 colocation 约束。
pcs constraint colocation [show]
pcs constraint colocation [show]
显示特定于资源的约束
以下命令列出引用特定资源的约束。
pcs constraint ref resource ...
pcs constraint ref resource ...
显示资源依赖项(Red Hat Enterprise Linux 8.2 及更新的版本)
以下命令显示树结构中集群资源间的关系。
pcs resource relations resource [--full]
pcs resource relations resource [--full]
如果使用 --full 选项,命令会显示附加信息,包括约束 ID 和资源类型。
在以下示例中,有 3 个配置的资源:C、D 和 E。
在以下示例中,有 2 个配置的资源:A 和 B。资源 A 和 B 是资源组 G 的一部分。
第 58 章 使用规则决定资源位置 复制链接链接已复制到粘贴板!
对于更复杂的位置限制,您可以使用 Pacemaker 规则来确定资源的位置。
58.1. Pacemaker 规则 复制链接链接已复制到粘贴板!
Pacemaker 规则可用于使您的配置更动态。规则的一个用法可能是根据时间将机器分配给不同的处理组(使用 node 属性),然后在创建位置约束时使用该属性。
每个规则都可以包含多个表达式、日期表达式甚至其它规则。表达式的结果根据规则的 boolean-op 字段来合并,以确定规则是否最终评估为 true 或 false。接下来的操作要看规则使用的上下文而定。
| 项 | 描述 |
|---|---|
|
|
只有在资源位于该角色时才会应用该规则。允许的值: |
|
|
规则评估为 |
|
|
如果规则评估为 |
|
|
如何组合多个表达式对象的结果。允许的值: |
58.1.1. 节点属性表达式 复制链接链接已复制到粘贴板!
节点属性表达式用于根据节点或节点定义的属性控制资源。
| 项 | 描述 |
|---|---|
|
| 要测试的节点属性 |
|
|
决定值应该如何进行测试。允许的值: |
|
| 执行的对比。允许的值:
*
*
*
*
*
*
*
* |
|
|
用户提供的比较值(必需的,除非 |
除了管理员添加的任何属性外,集群还会为每个节点定义特殊的内置节点属性,如下表中所述。
| 名称 | 描述 |
|---|---|
|
| 节点名 |
|
| 节点 ID |
|
|
节点类型。可能的值有 |
|
|
如果此节点是指定控制器(DC),则为 |
|
|
|
|
|
|
|
| 此节点上相关的可远程克隆的角色。仅在可转发克隆的位置约束的规则内有效。 |
58.1.2. 基于时间/日期的表达式 复制链接链接已复制到粘贴板!
日期表达式用于根据当前的日期/时间控制资源或集群选项。它们可以包含可选的日期规格。
| 项 | 描述 |
|---|---|
|
| 符合 ISO8601 规范的日期/时间。 |
|
| 符合 ISO8601 规范的日期/时间。 |
|
| 根据上下文,将当前日期/时间与开始或结束日期进行比较。允许的值:
*
*
*
* |
58.1.3. 日期规格 复制链接链接已复制到粘贴板!
日期规格用于创建与时间相关的类似 cron 的表达式。每个字段可以包含一个数字或一个范围。任何未提供的字段都会被忽略,而不是使用默认值 0。
例如,monthdays="1" 匹配每月的第一天,hours="09-17" 匹配上午 9 点到下午 5 点(包含)之间的小时数。但是,您不能指定 weekdays="1,2" 或 weekdays="1-2,5-6",因为它们包含多个范围。
| 项 | 描述 |
|---|---|
|
| 日期的唯一名称 |
|
| 允许的值:0-23 |
|
| 允许的值:0-31(取决于月份和年) |
|
| 允许的值:1-7(1代表星期一,7 代表星期日) |
|
| 允许的值:1-366(根据年而定) |
|
| 允许的值:1-12 |
|
|
允许的值:1-53(取决于 |
|
| 根据 Gregorian 日历年 |
|
|
可能不同于 Gregorian 年;例如, |
|
| 允许的值:0-7(0 是新月,4 为满月)。 |
58.2. 使用规则配置 Pacemaker 位置约束 复制链接链接已复制到粘贴板!
使用以下命令配置使用规则的 Pacemaker 约束。如果省略 score,则默认为 INFINITY。如果省略 resource-discovery,则默认为 always。
有关 resource-discovery 选项的信息,请参阅 将资源发现限制到节点的子集。
与基本位置限制一样,您也可以使用这些限制的资源使用正则表达式。
当使用规则来配置位置约束时,score 的值可以是正数,也可以是负数,正数表示"首选",负数表示"避免"。
pcs constraint location rsc rule [resource-discovery=option] [role=master|slave] [score=score | score-attribute=attribute] expression
pcs constraint location rsc rule [resource-discovery=option] [role=master|slave] [score=score | score-attribute=attribute] expression
expression 选项可以是以下之一,其中 duration_options 和 date_spec_options 为:hours, monthdays, weekdays, yeardays, months, weeks, years, weekyears 和 moon,如 日期规范 中"日期规范的属性"表中所述。
-
defined|not_defined attribute -
attribute lt|gt|lte|gte|eq|ne [string|integer|number(RHEL 8.4 及更新版本)|version] value -
date gt|lt date -
date in_range date to date -
date in_range date to duration duration_options … -
date-spec date_spec_options -
expression 和|或 expression -
(表达式)
请注意,持续时间是通过计算方式为 in_range 操作指定结束的方法。例如,您可以指定 19 个月的持续时间。
下面的位置约束配置一个满足以下位置的表达式(如果现在是 2018 年)。
pcs constraint location Webserver rule score=INFINITY date-spec years=2018
# pcs constraint location Webserver rule score=INFINITY date-spec years=2018
以下命令配置一个周一到周五从上午 9 点下午 5 点为 true 的表达式。请注意,小时值为 16 可以匹配到 16:59:59,因为小时数仍然匹配。
pcs constraint location Webserver rule score=INFINITY date-spec hours="9-16" weekdays="1-5"
# pcs constraint location Webserver rule score=INFINITY date-spec hours="9-16" weekdays="1-5"
下面的命令配置一个表达式,当周五且为 13 号并为一个满月时,这个表达式为 true。
pcs constraint location Webserver rule date-spec weekdays=5 monthdays=13 moon=4
# pcs constraint location Webserver rule date-spec weekdays=5 monthdays=13 moon=4
要删除某个规则,使用以下命令:如果您要删除的规则是其约束中的最后一规则,则约束将被删除。
pcs constraint rule remove rule_id
pcs constraint rule remove rule_id
第 59 章 管理集群资源 复制链接链接已复制到粘贴板!
您可以使用各种命令来显示、修改和管理集群资源。
59.1. 显示配置的资源 复制链接链接已复制到粘贴板!
要显示所有配置的资源列表,使用以下命令。
pcs resource status
pcs resource status
例如,如果系统配置了名为 VirtualIP 的资源,以及名为 WebSite 的资源,则 pcs resource status 命令会产生以下输出。
pcs resource status VirtualIP (ocf::heartbeat:IPaddr2): Started WebSite (ocf::heartbeat:apache): Started
# pcs resource status
VirtualIP (ocf::heartbeat:IPaddr2): Started
WebSite (ocf::heartbeat:apache): Started
要显示资源配置的参数,请使用以下命令。
pcs resource config resource_id
pcs resource config resource_id
例如,以下命令显示了资源 VirtualIP 当前配置的参数。
pcs resource config VirtualIP Resource: VirtualIP (type=IPaddr2 class=ocf provider=heartbeat) Attributes: ip=192.168.0.120 cidr_netmask=24 Operations: monitor interval=30s
# pcs resource config VirtualIP
Resource: VirtualIP (type=IPaddr2 class=ocf provider=heartbeat)
Attributes: ip=192.168.0.120 cidr_netmask=24
Operations: monitor interval=30s
在 RHEL 8.5 及更高版本中,若要显示单个资源的状态,请使用以下命令。
pcs resource status resource_id
pcs resource status resource_id
例如,如果系统配置了名为 VirtualIP 的资源,pcs resource status VirtualIP 命令会生成以下输出:
pcs resource status VirtualIP VirtualIP (ocf::heartbeat:IPaddr2): Started
# pcs resource status VirtualIP
VirtualIP (ocf::heartbeat:IPaddr2): Started
在 RHEL 8.5 及之后的版本中,要显示在特定节点上运行的资源的状态,请使用以下命令。您可以使用此命令显示集群和远程节点上资源的状态。
pcs resource status node=node_id
pcs resource status node=node_id
例如,如果 node-01 正在运行名为 VirtualIP 的资源,并且 WebSite 使用 pcs resource status node=node-01 命令可能会生成以下输出:
pcs resource status node=node-01 VirtualIP (ocf::heartbeat:IPaddr2): Started WebSite (ocf::heartbeat:apache): Started
# pcs resource status node=node-01
VirtualIP (ocf::heartbeat:IPaddr2): Started
WebSite (ocf::heartbeat:apache): Started
59.2. 使用 pcs 命令导出集群资源 复制链接链接已复制到粘贴板!
在 Red Hat Enterprise Linux 8.7 及更高版本中,您可以显示 pcs 命令,该命令可用于使用 pcs resource config 命令的 --output-format=cmd 选项在不同的系统上重新创建配置的集群资源。
以下命令为红帽高可用性集群中的主动/被动 Apache HTTP 服务器创建四个资源:LVM-activate 资源、Filesystem 资源、IPaddr2 资源和 Apache 资源。
pcs resource create my_lvm ocf:heartbeat:LVM-activate vgname=my_vg vg_access_mode=system_id --group apachegroup pcs resource create my_fs Filesystem device="/dev/my_vg/my_lv" directory="/var/www" fstype="xfs" --group apachegroup pcs resource create VirtualIP IPaddr2 ip=198.51.100.3 cidr_netmask=24 --group apachegroup pcs resource create Website apache configfile="/etc/httpd/conf/httpd.conf" statusurl="http://127.0.0.1/server-status" --group apachegroup
# pcs resource create my_lvm ocf:heartbeat:LVM-activate vgname=my_vg vg_access_mode=system_id --group apachegroup
# pcs resource create my_fs Filesystem device="/dev/my_vg/my_lv" directory="/var/www" fstype="xfs" --group apachegroup
# pcs resource create VirtualIP IPaddr2 ip=198.51.100.3 cidr_netmask=24 --group apachegroup
# pcs resource create Website apache configfile="/etc/httpd/conf/httpd.conf" statusurl="http://127.0.0.1/server-status" --group apachegroup
创建资源后,以下命令会显示可用来在不同系统上重新创建这些资源的 pcs 命令。
要显示 pcs 命令或您可以用来只重新创建一个配置资源的命令,请指定该资源的资源 ID。
59.3. 修改资源参数 复制链接链接已复制到粘贴板!
要修改配置的资源的参数,请使用以下命令:
pcs resource update resource_id [resource_options]
pcs resource update resource_id [resource_options]
以下命令序列显示了资源 VirtualIP 配置的参数的初始值、更改 ip 参数值的命令,以及 update 命令后的值。
当您使用 pcs resource update 命令更新资源操作时,您没有专门调用的任何选项都将重置为它们的默认值。
59.4. 清除集群资源的失败状态 复制链接链接已复制到粘贴板!
如果资源失败,则当使用 pcs status 命令显示集群状态时会出现失败信息。尝试解决故障原因后,您可以通过再次运行 pcs status 命令检查资源的更新状态,您可以使用 pcs resource failcount show --full 命令检查集群资源的故障数。
您可以使用 pcs resource cleanup 命令清除资源的故障状态。pcs resource cleanup 命令重置资源状态和资源的 failcount 值。此命令还会删除资源的操作历史记录,并重新检测其当前状态。
以下命令重置 resource_id 指定的资源的状态和 failcount 值。
pcs resource cleanup resource_id
pcs resource cleanup resource_id
如果没有指定 resource_id,pcs resource cleanup 命令会为具有失败数的资源重置资源状态和 failcount 值。
除了 pcs resource cleanup resource_id 命令外,您还可以使用 pcs resource refresh resource_id 命令重置资源状态,并清除资源的操作历史记录。与 pcs resource cleanup 命令一样,您可以运行没有指定选项的 pcs resource refresh 命令来重置所有资源的资源状态和 failcount 值。
pcs resource cleanup 和 pcs resource refresh 命令都会清除资源的操作历史记录,并重新检测资源的当前状态。pcs resource cleanup 命令仅会对集群状态中显示失败操作的资源进行操作,而 pcs resource refresh 命令则针对资源进行操作,无论其当前状态如何。
59.5. 在集群中移动资源 复制链接链接已复制到粘贴板!
Pacemaker 提供了各种机制来将资源配置为从一个节点迁移到另一个节点,并在需要时手动移动资源。
您可以使用 pcs resource move 和 pcs resource relocate 命令手动移动集群中的资源,如 手动移动集群资源 中所述。除了这些命令外,您还可以通过启用、禁用和禁止资源来控制集群资源的行为,如 禁用、启用和禁止集群资源 中所述。
您可以配置资源以便在定义多个故障后移到新节点,您可以在外部连接丢失时配置集群来移动资源。
59.5.1. 因为失败而移动资源 复制链接链接已复制到粘贴板!
当您创建资源时,您可以通过为该资源设置 migration-threshold 选项来配置资源,使其在达到定义的故障次数后移至新节点。达到阈值后,这个节点将不再被允许运行失败的资源,直到:
-
已达到资源的
failure-timeout值。 -
管理员使用
pcs resource cleanup命令手动重置资源的故障数。
migration-threshold 的值默认设置为 INFINITY。INFINITY 在内部被定义为一个非常大的数,但是有限的。值 0 会禁用 migration-threshold 功能。
为资源设置 migration-threshold 与为迁移配置资源不同,其中资源移动可以到另一个位置,而不会丢失状态。
以下示例为名为 dummy_resource 的资源添加了一个迁移阈值 10,这表示资源将在 10 次故障后移到一个新节点。
pcs resource meta dummy_resource migration-threshold=10
# pcs resource meta dummy_resource migration-threshold=10
您可以使用以下命令为整个集群的默认值添加迁移阈值。
pcs resource defaults update migration-threshold=10
# pcs resource defaults update migration-threshold=10
要确定资源当前的故障状态和限值,请使用 pcs resource failcount show 命令。
迁移阈值概念有两个例外,当资源无法启动或无法停止时会出现这种情况。如果集群属性 start-failure-is-fatal 设为 true (默认值),启动失败会导致 failcount 被设置为 INFINITY,并总是导致资源立即移动。
停止失败会稍有不同,且非常关键。如果资源无法停止且启用了 STONITH,则集群将隔离该节点,以便能够在其它地方启动资源。如果没有启用 STONITH,那么集群就无法继续,也不会尝试在其他位置启动资源,而是会在失败超时后尝试再次停止它。
59.5.2. 由于连接更改而移动资源 复制链接链接已复制到粘贴板!
将集群设置为在外部连接丢失时移动资源分为两个步骤。
-
在集群中添加
ping资源。ping资源使用同名的系统工具来测试是否可以访问(由 DNS 主机名或 IPv4/IPv6 地址指定)一系列机器,并使用结果来维护名为pingd的节点属性。 - 为资源配置位置约束,该限制将在连接丢失时将资源移动到不同的节点。
下表描述了您可以为 ping 资源设置的属性。
| 项 | 描述 |
|---|---|
|
| 等待(强化)时间进一步发生更改。这会防止,当集群节点在稍有不同的时间发现连接丢失时资源在集群中移动。 |
|
| 连接的 ping 节点数量乘以这个值来获得分数。在配置了多个 ping 节点时很有用。 |
|
| 要联系的以确定当前连接状态的机器。允许的值包括可解析 DNS 主机名、IPv4 和 IPv6 地址。主机列表中的条目是空格分开的。 |
以下示例命令会创建一个 ping 资源,来验证与 gateway.example.com 的连接。在实践中,您可以验证到网络网关/路由器的连接。您可以将 ping 资源配置为克隆,以便资源可以在所有集群节点上运行。
pcs resource create ping ocf:pacemaker:ping dampen=5s multiplier=1000 host_list=gateway.example.com clone
# pcs resource create ping ocf:pacemaker:ping dampen=5s multiplier=1000 host_list=gateway.example.com clone
以下示例为名为 Webserver 的现有资源配置位置约束规则。如果当前运行的主机无法 ping gateway.example.com,这将导致 Webserver 资源移至能够 ping gateway.example.com 的主机。
pcs constraint location Webserver rule score=-INFINITY pingd lt 1 or not_defined pingd
# pcs constraint location Webserver rule score=-INFINITY pingd lt 1 or not_defined pingd
59.6. 禁用 monitor 操作 复制链接链接已复制到粘贴板!
停止重复 monitor 的最简单方法是删除它。然而,在有些情况下,您可能只想临时禁用它。在这种情况下,将 enabled="false" 添加到操作的定义中。当您想重新使用 monitor 操作时,将 enabled="true" 设置为操作的定义。
当您使用 pcs resource update 命令更新资源操作时,您没有专门调用的任何选项都将重置为它们的默认值。例如,如果您已经配置了自定义超时值为 600 的监控操作,运行以下命令会将超时值重置为默认值 20(或通过 pcs resource op defaults 命令设置的任何默认值)。
pcs resource update resourceXZY op monitor enabled=false pcs resource update resourceXZY op monitor enabled=true
# pcs resource update resourceXZY op monitor enabled=false
# pcs resource update resourceXZY op monitor enabled=true
为了保持这个选项的原始值 600,当您重新启用 monitor 控操作时,必须指定那个值,如下例所示。
pcs resource update resourceXZY op monitor timeout=600 enabled=true
# pcs resource update resourceXZY op monitor timeout=600 enabled=true
59.7. 配置和管理集群资源标签 复制链接链接已复制到粘贴板!
在 Red Hat Enterprise Linux 8.3 及更新的版本中,您可以使用 pcs 命令标记集群资源。这允许您使用单个命令启用、禁用、管理或取消管理指定的一组资源。
59.7.1. 为管理标记集群资源,按类别标记 复制链接链接已复制到粘贴板!
以下流程使用资源标签标记两个资源,并禁用标记的资源。在本例中,要标记的现有资源命名为 d-01 和 d-02。
流程
为
d-01和d-02资源创建一个名为special-resources的标签。pcs tag create special-resources d-01 d-02
[root@node-01]# pcs tag create special-resources d-01 d-02Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示资源标签配置。
pcs tag config special-resources d-01 d-02
[root@node-01]# pcs tag config special-resources d-01 d-02Copy to Clipboard Copied! Toggle word wrap Toggle overflow 禁用带有
special-resources标签的所有资源。pcs resource disable special-resources
[root@node-01]# pcs resource disable special-resourcesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 显示资源状态,以确认资源
d-01和d-02已被禁用。pcs resource * d-01 (ocf::pacemaker:Dummy): Stopped (disabled) * d-02 (ocf::pacemaker:Dummy): Stopped (disabled)
[root@node-01]# pcs resource * d-01 (ocf::pacemaker:Dummy): Stopped (disabled) * d-02 (ocf::pacemaker:Dummy): Stopped (disabled)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
除了 pcs resource disable 命令,pcs resource enable、pcs resource manage 和 pcs resource unmanage 命令还支持对带标记资源的管理。
创建资源标签后:
-
您可以使用
pcs tag delete命令删除资源标签。 -
您可以使用
pcs tag update命令修改现有资源标签的资源标签配置。
59.7.2. 删除标记的集群资源 复制链接链接已复制到粘贴板!
您不能使用 pcs 命令删除标记的群集资源。要删除标记的资源,请使用以下步骤。
流程
删除资源标签。
以下命令从具有该标签的所有资源中删除资源标签
special-resources,pcs tag remove special-resources pcs tag No tags defined
[root@node-01]# pcs tag remove special-resources [root@node-01]# pcs tag No tags definedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下命令仅从资源
d-01中删除资源标签special-resources。pcs tag update special-resources remove d-01
[root@node-01]# pcs tag update special-resources remove d-01Copy to Clipboard Copied! Toggle word wrap Toggle overflow
删除资源。
pcs resource delete d-01 Attempting to stop: d-01... Stopped
[root@node-01]# pcs resource delete d-01 Attempting to stop: d-01... StoppedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 60 章 创建在多个节点上活跃的集群资源(克隆的资源) 复制链接链接已复制到粘贴板!
您可以克隆集群资源,以便在多个节点上激活该资源。例如,您可以使用克隆的资源配置 IP 资源的多个实例来分布到群集中以进行节点均衡。您可以克隆资源代理支持的任何资源。克隆由一个资源或一个资源组组成。
只有同时可在多个节点上活跃的资源才适用于克隆。例如:从挂载非集群文件系统(如共享内存设备的 ext4 )的 Filesystem 资源不应被克隆。由于 ext4 分区不支持集群,因此此文件系统不适用于同时发生在多个节点上的读写操作。
60.1. 创建和删除克隆的资源 复制链接链接已复制到粘贴板!
可以同时创建资源以及该资源的克隆。
使用以下单一命令创建资源并克隆资源:
RHEL 8.4 及更新版本:
pcs resource create resource_id [standard:[provider:]]type [resource options] [meta resource meta options] clone [clone_id] [clone options]
pcs resource create resource_id [standard:[provider:]]type [resource options] [meta resource meta options] clone [clone_id] [clone options]
RHEL 8.3 及更早版本:
pcs resource create resource_id [standard:[provider:]]type [resource options] [meta resource meta options] clone [clone options]
pcs resource create resource_id [standard:[provider:]]type [resource options] [meta resource meta options] clone [clone options]
默认情况下,克隆的名称将是 resource_id-clone。
在 RHEL 8.4 及更高版本中,您可以通过为 clone_id 选项指定值来为克隆设置自定义名称。
您不能在单个命令中创建资源组以及该资源组的克隆。
另外,您可以使用以下命令创建之前创建的资源或资源组的克隆。
RHEL 8.4 及更新版本:
pcs resource clone resource_id | group_id [clone_id][clone options]...
pcs resource clone resource_id | group_id [clone_id][clone options]...
RHEL 8.3 及更早版本:
pcs resource clone resource_id | group_id [clone options]...
pcs resource clone resource_id | group_id [clone options]...
默认情况下,克隆的名称将是 resource_id-clone 或 group_name-clone。在 RHEL 8.4 及更高版本中,您可以通过为 clone_id 选项指定值来为克隆设置自定义名称。
您只需要在一个节点中配置资源配置更改。
在配置限制时,始终使用组或克隆的名称。
当您创建资源的克隆时,默认情况下,克隆将使用资源名称,并在名称后附加 -clone 。以下命令创建一个名为 webfarm 、类型为 apache 的资源,以及名为 webfarm-clone 资源的克隆。
pcs resource create webfarm apache clone
# pcs resource create webfarm apache clone
当您创建一个资源或资源组克隆,其将在另一个克隆后排序时,您几乎应该始终设置 interleave=true 选项。这样可保证当依赖克隆的克隆停止或启动时,依赖克隆的副本可以停止或启动。如果没有设置这个选项,克隆的资源 B 依赖于克隆的资源 A,且节点离开集群,当节点返回到集群并在该节点上启动资源 A,那么所有节点上的资源 B 的副本都将会重启。这是因为,当依赖的克隆资源没有设置 interleave 选项时,该资源的所有实例都依赖于它所依赖的资源的任何正在运行的实例。
使用以下命令删除资源或资源组的克隆。这不会删除资源或资源组本身。
pcs resource unclone resource_id | clone_id | group_name
pcs resource unclone resource_id | clone_id | group_name
下表描述了您可以为克隆资源指定的选项。
| 项 | 描述 |
|---|---|
|
| 从正在克隆的资源继承的选项,如 配置资源元选项 中"资源元选项"表中所述。 |
|
| 要启动的资源副本数量。默认为集群中的节点数量。 |
|
|
在一个节点上可以启动资源的副本数 ; 默认值为 |
|
|
当停止或启动克隆的副本时,预先并在操作成功时告知所有其他副本。允许的值: |
|
|
克隆的每个副本是否会执行不同的功能?允许的值:
如果此选项的值为
如果此选项的值为 |
|
|
是否应该以系列的方式启动副本(而不是并行的)。允许的值: |
|
|
更改排序限制的行为(克隆之间)的行为,以便在相同节点中的同一节点中的副本立即启动或停止(而不是等到第二个克隆的每个实例启动或停止)。允许的值: |
|
|
如果指定了值,则在此克隆后排序的任何克隆都将无法启动,直到原始克隆指定数量的实例都在运行,即使 |
要实现稳定的分配模式,默认情况下克隆具有稍微的粘贴性,这意味着它们更喜欢保留在运行的节点中。如果未提供 resource-stickiness 值,克隆将使用值 1。作为一个小的值,它会对其他资源分数计算最小,但足以防止 Pacemaker 在集群间不必要地移动副本。有关设置 resource-stickiness 资源 meta-option 的详情,请参考 配置资源 meta 选项。
60.2. 配置克隆资源限制 复制链接链接已复制到粘贴板!
在大多数情况下,克隆将在每个活跃集群节点上都有一个副本。但是,您可以将资源克隆的 clone-max 设置为一个小于集群中节点总数的值。如果情况如此,您可以指定集群使用资源位置约束来优先分配哪些节点。这些限制与用于常规资源的条件相同,除了必须使用克隆的 id 以外。
以下命令为集群创建了一个位置约束,以优先将资源克隆 webfarm-clone 分配给 node1。
pcs constraint location webfarm-clone prefers node1
# pcs constraint location webfarm-clone prefers node1
排序限制对克隆的行为稍有不同。在下例中,由于 interleave 克隆选项保留为 false,因此在启动需要启动的所有 webfarm-clone 的实例之前,不会启动任何 webfarm-stats 的实例。只有任何 webfarm-clone 的副本都无法启动时,才会阻止 webfarm-stats 处于活动状态。此外,webfarm-clone 在停止其自身之前,将等待 webfarm-stats 停止。
pcs constraint order start webfarm-clone then webfarm-stats
# pcs constraint order start webfarm-clone then webfarm-stats
将常规(或组)资源与克隆在一起,意味着该资源可在任何有克隆活跃副本的机器中运行。集群将根据克隆运行情况以及资源自己的位置首选项选择一个副本。
克隆之间的并发位置也是有可能的。在这种情况下,克隆允许的位置集合仅限于克隆要激活的节点。然后分配可以正常执行。
以下命令创建了一个共处约束,以确保资源 webfarm-stats 与 webfarm-clone 的活动副本运行在同一节点上。
pcs constraint colocation add webfarm-stats with webfarm-clone
# pcs constraint colocation add webfarm-stats with webfarm-clone
60.3. 可升级克隆资源 复制链接链接已复制到粘贴板!
可升级克隆资源是将 promotable meta 属性设置为 true 的克隆资源。它们允许实例处于两种操作模式之一;它们被称为 master 和 slave。模式的名称没有特定的含义,除了一个限制,即实例启动时,它必须处于 Slave 状态。
60.3.1. 创建可升级的克隆资源 复制链接链接已复制到粘贴板!
您可以用下列单一命令将资源创建为可升级的克隆。
RHEL 8.4 及更新版本:
pcs resource create resource_id [standard:[provider:]]type [resource options] promotable [clone_id] [clone options]
pcs resource create resource_id [standard:[provider:]]type [resource options] promotable [clone_id] [clone options]
RHEL 8.3 及更早版本:
pcs resource create resource_id [standard:[provider:]]type [resource options] promotable [clone options]
pcs resource create resource_id [standard:[provider:]]type [resource options] promotable [clone options]
默认情况下,可升级克隆的名称为 resource_id-clone。
在 RHEL 8.4 及更高版本中,您可以通过为 clone_id 选项指定值来为克隆设置自定义名称。
另外,您可以使用以下命令从之前创建的资源或资源组中创建可升级的资源。
RHEL 8.4 及更新版本:
pcs resource promotable resource_id [clone_id] [clone options]
pcs resource promotable resource_id [clone_id] [clone options]
RHEL 8.3 及更早版本:
pcs resource promotable resource_id [clone options]
pcs resource promotable resource_id [clone options]
默认情况下,可升级克隆的名称为 resource_id-clone 或 group_name-clone。
在 RHEL 8.4 及更高版本中,您可以通过为 clone_id 选项指定值来为克隆设置自定义名称。
下表描述了您可以为可升级资源指定的额外克隆选项。
| 项 | 描述 |
|---|---|
|
| 可以升级的资源副本数 ; 默认为 1。 |
|
| 在一个节点中可升级的资源副本数 ; 默认为 1。 |
60.3.2. 配置可升级资源限制 复制链接链接已复制到粘贴板!
在大多数情况下,可升级的资源在每个活跃的集群节点上都有一个副本。如果情况不同,您可以指定集群使用资源位置约束来优先分配哪些节点。这些限制与常规资源的写法不同。
您可以创建一个 colocation 约束,指定资源是在 master 角色还是在 slave 角色中运行。以下命令创建了资源 colocation 约束。
pcs constraint colocation add [master|slave] source_resource with [master|slave] target_resource [score] [options]
pcs constraint colocation add [master|slave] source_resource with [master|slave] target_resource [score] [options]
有关托管约束的详情,请参考 托管集群资源。
在配置一个包含可升级资源的排序约束时,您可以为资源指定的一个操作是 promote,表示资源从 slave 角色提升到 master 角色。另外,您可以指定一个 demote 操作,表示资源从主角色降级为 slave 角色。
配置顺序约束的命令如下。
pcs constraint order [action] resource_id then [action] resource_id [options]
pcs constraint order [action] resource_id then [action] resource_id [options]
有关资源顺序约束的详情,请参阅 确定集群资源的运行顺序。
60.4. 失败时降级升级的资源 复制链接链接已复制到粘贴板!
在 RHEL 8.3 及之后的版本中,您可以配置可升级的资源,以便在资源的 promote 或 monitor 操作失败时,或者运行资源的分区丢失仲裁时,资源将被降级,但不会完全停止。这可避免在完全停止资源时需要的人工干预。
要将可升级资源配置为在
promote操作失败时降级,请将on-fail操作 meta 选项设置为demote,如下例所示。pcs resource op add my-rsc promote on-fail="demote"
# pcs resource op add my-rsc promote on-fail="demote"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要在
monitor操作失败时将可升级的资源配置为降级,请将interval设置为非零值,将on-fail操作元选项设置为demote,并将role设置为Master,如下例中所示。pcs resource op add my-rsc monitor interval="10s" on-fail="demote" role="Master"
# pcs resource op add my-rsc monitor interval="10s" on-fail="demote" role="Master"Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
要配置集群,当集群分区丢失仲裁时,任何升级的资源都会降级但会继续运行,所有其他资源都将停止,将
no-quorum-policy集群属性设置为demote
将操作的 on-fail 元属性设为 demote 不会影响如何决定资源的提升。如果受影响的节点仍然具有最高的升级分数,则会选择再次提升。
第 61 章 管理集群节点 复制链接链接已复制到粘贴板!
您可以使用各种 pcs 命令来管理群集节点,包括启动和停止集群服务以及添加和删除集群节点的命令。
61.1. 停止集群服务 复制链接链接已复制到粘贴板!
以下命令在指定的一个节点或几个节点上停止集群服务。与 pcs cluster start 一样,--all 选项会停止所有节点上的集群服务,如果没有指定任何节点,则只停止本地节点上的集群服务。
pcs cluster stop [--all | node] [...]
pcs cluster stop [--all | node] [...]
您可以使用以下命令强制停止本地节点上的集群服务,该命令会执行 kill -9 命令。
pcs cluster kill
pcs cluster kill
61.2. 启用和禁用集群服务 复制链接链接已复制到粘贴板!
使用以下命令启用集群服务。这会将集群服务配置为在指定节点启动时运行。
启用允许节点在集集被隔离后自动重新加入集群,从而减少集群性能小于满额性能的时间。如果没有启用集群服务,管理员可以在手动启动集群服务前手动调查出了什么问题,例如:当有硬件问题的节点可能会再次失败时无法重新访问该集群。
-
如果指定了
--all选项,该命令将启用所有节点上的集群服务。 - 如果您没有指定任何节点,则仅在本地节点上启用集群服务。
pcs cluster enable [--all | node] [...]
pcs cluster enable [--all | node] [...]
使用以下命令将集群服务配置为在指定的一个节点或几个节点启动时不运行。
-
如果指定了
--all选项,该命令将禁用所有节点上的集群服务。 - 如果没有指定任何节点,则仅在本地节点上禁用集群服务。
pcs cluster disable [--all | node] [...]
pcs cluster disable [--all | node] [...]
61.3. 添加集群节点 复制链接链接已复制到粘贴板!
使用以下流程将新节点添加到现有集群中。
这个过程添加了运行 corosync 的标准集群节点。有关将非 corosync 节点整合到集群中的详情,请参考 将非 corosync 节点整合到集群中:pacemaker_remote 服务。
建议您仅在生产环境维护窗口期间将节点添加到现有集群中。这可让您对新节点及其保护配置执行适当的资源和部署测试。
在本例中,现有的集群节点为 clusternode-01.example.com、clusternode-02.example.com 和 clusternode-03.example.com。新节点为 newnode.example.com。
流程
在加入到集群中的新节点上,执行以下任务。
安装集群软件包。如果集群使用 SBD、Booth 票据管理器或仲裁设备,则必须在新节点上手动安装相应的软件包(
sbd、booth-site、corosync-qdevice)。yum install -y pcs fence-agents-all
[root@newnode ~]# yum install -y pcs fence-agents-allCopy to Clipboard Copied! Toggle word wrap Toggle overflow 除了集群软件包外,还需要安装并配置在集群中运行的所有服务(已安装在现有集群节点上)。例如:如果您在红帽高可用性集群中运行 Apache HTTP 服务器,则需要在您要添加的节点中安装该服务器,以及检查服务器状态的
wget工具。如果您正在运行
firewalld守护进程,请执行以下命令启用红帽高可用性附加组件所需的端口。firewall-cmd --permanent --add-service=high-availability firewall-cmd --add-service=high-availability
# firewall-cmd --permanent --add-service=high-availability # firewall-cmd --add-service=high-availabilityCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为用户 ID
hacluster设置密码。建议您为集群中的每个节点使用相同的密码。passwd hacluster Changing password for user hacluster. New password: Retype new password: passwd: all authentication tokens updated successfully.
[root@newnode ~]# passwd hacluster Changing password for user hacluster. New password: Retype new password: passwd: all authentication tokens updated successfully.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 执行以下命令启动
pcsd服务,并在系统启动时启用pcsd:systemctl start pcsd.service systemctl enable pcsd.service
# systemctl start pcsd.service # systemctl enable pcsd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在现有集群中的一个节点上执行以下任务。
在新集群节点上验证用户
hacluster。pcs host auth newnode.example.com Username: hacluster Password: newnode.example.com: Authorized
[root@clusternode-01 ~]# pcs host auth newnode.example.com Username: hacluster Password: newnode.example.com: AuthorizedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在现有集群中添加新节点。此命令还会将集群配置文件
corosync.conf同步到集群中的所有节点上,包括您添加的新节点。pcs cluster node add newnode.example.com
[root@clusternode-01 ~]# pcs cluster node add newnode.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在加入到集群中的新节点上,执行以下任务。
在新节点上启动并启用集群服务。
pcs cluster start Starting Cluster... pcs cluster enable
[root@newnode ~]# pcs cluster start Starting Cluster... [root@newnode ~]# pcs cluster enableCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 确保您为新集群节点配置并测试隔离设备。
61.4. 删除集群节点 复制链接链接已复制到粘贴板!
以下命令关闭指定的节点,并将其从集群中其它节点上的配置文件 corosync.conf 中删除。
pcs cluster node remove node
pcs cluster node remove node
61.5. 使用多个链接在集群中添加节点 复制链接链接已复制到粘贴板!
当将节点添加到有多个链接的集群时,您必须为所有链接指定地址。
以下示例将节点 rh80-node3 添加到集群中,为第一个链接指定 IP 地址 192.168.122.203,第二个链接为 192.168.123.203。
pcs cluster node add rh80-node3 addr=192.168.122.203 addr=192.168.123.203
# pcs cluster node add rh80-node3 addr=192.168.122.203 addr=192.168.123.203
61.6. 在现有集群中添加和修改链接 复制链接链接已复制到粘贴板!
在 RHEL 8.1 及之后的版本中,在大多数情况下,您可以在现有集群中添加或修改链接,而无需重启集群。
61.6.1. 在现有集群中添加和删除链接 复制链接链接已复制到粘贴板!
要向正在运行的集群添加新链接,请使用 pcs cluster link add 命令。
- 在添加链接时,必须为每个节点指定一个地址。
-
只有在您使用
knet传输协议时,才能添加和删除链接。 - 在任何时候,集群中至少都需要有一个链接被定义。
- 集群中的最多链接数量为 8 个,编号为 0-7。定义了哪些链接无关紧要,例如,您可以只定义链接 3、6 和 7。
-
在不指定链接号的情况下添加链接时,
pcs使用最低可用的链接。 -
当前配置的链接链接号包括在
corosync.conf文件中。要显示corosync.conf文件,请运行pcs cluster corosync命令或(对于 RHEL 8.4 及更高版本)pcs cluster config show命令。
以下命令将链接号 5 添加到三个节点集群中。
[root@node1 ~] # pcs cluster link add node1=10.0.5.11 node2=10.0.5.12 node3=10.0.5.31 options linknumber=5
[root@node1 ~] # pcs cluster link add node1=10.0.5.11 node2=10.0.5.12 node3=10.0.5.31 options linknumber=5
要删除现有链接,请使用 pcs cluster link delete 或 pcs cluster link remove 命令。下列指令之一可以将编号为 5 的链接删除。
[root@node1 ~] # pcs cluster link delete 5 [root@node1 ~] # pcs cluster link remove 5
[root@node1 ~] # pcs cluster link delete 5
[root@node1 ~] # pcs cluster link remove 5
61.6.2. 使用多个链接修改集群中的链接 复制链接链接已复制到粘贴板!
如果集群中有多个链接,并且要更改其中的一个链接,请执行以下步骤。
流程
删除您要更改的链接。
[root@node1 ~] # pcs cluster link remove 2
[root@node1 ~] # pcs cluster link remove 2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用更新的地址和选项将链接重新添加到集群。
[root@node1 ~] # pcs cluster link add node1=10.0.5.11 node2=10.0.5.12 node3=10.0.5.31 options linknumber=2
[root@node1 ~] # pcs cluster link add node1=10.0.5.11 node2=10.0.5.12 node3=10.0.5.31 options linknumber=2Copy to Clipboard Copied! Toggle word wrap Toggle overflow
61.6.3. 使用单个链接修改集群中的链接地址 复制链接链接已复制到粘贴板!
如果您的集群只使用一个链接,且您想要修改该链接以使用不同的地址,请执行以下步骤。在这个示例中,原始链接是链接 1。
添加新地址和选项的链接。
[root@node1 ~] # pcs cluster link add node1=10.0.5.11 node2=10.0.5.12 node3=10.0.5.31 options linknumber=2
[root@node1 ~] # pcs cluster link add node1=10.0.5.11 node2=10.0.5.12 node3=10.0.5.31 options linknumber=2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除原始链接。
[root@node1 ~] # pcs cluster link remove 1
[root@node1 ~] # pcs cluster link remove 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
请注意,您不能指定在向集群添加链接时正被使用的地址。例如,这表示如果您有一个双节点集群,它有一个链接,而您希望只为一个节点更改地址,则无法使用上述流程添加指定一个新地址和一个现有地址的新链接。反之,您可以在删除现有链接并通过更新的地址将其重新添加前添加临时链接,如下例所示。
在本例中:
- 现有集群的链接为 link 1,节点 1 使用地址 10.0.5.11,节点 2 使用地址 10.0.5.12。
- 您要将节点 2 的地址改为 10.0.5.31。
流程
要只为带有单一链接的双节点集群更新其中一个地址,请使用以下步骤。
使用当前没有使用的地址为现有集群添加新临时链接。
[root@node1 ~] # pcs cluster link add node1=10.0.5.13 node2=10.0.5.14 options linknumber=2
[root@node1 ~] # pcs cluster link add node1=10.0.5.13 node2=10.0.5.14 options linknumber=2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除原始链接。
[root@node1 ~] # pcs cluster link remove 1
[root@node1 ~] # pcs cluster link remove 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加新的修改的链接。
[root@node1 ~] # pcs cluster link add node1=10.0.5.11 node2=10.0.5.31 options linknumber=1
[root@node1 ~] # pcs cluster link add node1=10.0.5.11 node2=10.0.5.31 options linknumber=1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除您创建的临时链接
[root@node1 ~] # pcs cluster link remove 2
[root@node1 ~] # pcs cluster link remove 2Copy to Clipboard Copied! Toggle word wrap Toggle overflow
61.6.4. 使用单一链接修改集群中链接的选项 复制链接链接已复制到粘贴板!
如果您的集群只使用一个链接,且您想要修改该链接的选项,但您不想更改要使用的地址,可以在删除和更新链接前添加临时链接以进行修改。
在本例中:
- 现有集群的链接为 link 1,节点 1 使用地址 10.0.5.11,节点 2 使用地址 10.0.5.12。
-
您要将链接选项
link_priority更改为 11。
流程
使用以下流程,使用单个链接修改集群中的 link 选项。
使用当前没有使用的地址为现有集群添加新临时链接。
[root@node1 ~] # pcs cluster link add node1=10.0.5.13 node2=10.0.5.14 options linknumber=2
[root@node1 ~] # pcs cluster link add node1=10.0.5.13 node2=10.0.5.14 options linknumber=2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除原始链接。
[root@node1 ~] # pcs cluster link remove 1
[root@node1 ~] # pcs cluster link remove 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用更新的选项为原始链接添加后端。
[root@node1 ~] # pcs cluster link add node1=10.0.5.11 node2=10.0.5.12 options linknumber=1 link_priority=11
[root@node1 ~] # pcs cluster link add node1=10.0.5.11 node2=10.0.5.12 options linknumber=1 link_priority=11Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除临时链接。
[root@node1 ~] # pcs cluster link remove 2
[root@node1 ~] # pcs cluster link remove 2Copy to Clipboard Copied! Toggle word wrap Toggle overflow
61.6.5. 不可能在添加新链接时修改链接 复制链接链接已复制到粘贴板!
如果由于某种原因在配置中不可能添加新链接,且您的唯一选项是修改单个现有链接,您可以使用以下步骤来关闭集群。
流程
以下示例步骤更新集群中的链接 1,并将链接的 link_priority 选项设置为 11。
停止集群的集群服务。
[root@node1 ~] # pcs cluster stop --all
[root@node1 ~] # pcs cluster stop --allCopy to Clipboard Copied! Toggle word wrap Toggle overflow 更新链接地址和选项。
pcs cluster link update命令不要求您指定所有节点地址和选项。反之,您只能指定要更改的地址。这个示例只修改node1和node3的地址和link_priority选项。[root@node1 ~] # pcs cluster link update 1 node1=10.0.5.11 node3=10.0.5.31 options link_priority=11
[root@node1 ~] # pcs cluster link update 1 node1=10.0.5.11 node3=10.0.5.31 options link_priority=11Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要删除某个选项,您可以使用
option=格式将选项设置为 null 值。重启集群
[root@node1 ~] # pcs cluster start --all
[root@node1 ~] # pcs cluster start --allCopy to Clipboard Copied! Toggle word wrap Toggle overflow
61.7. 配置节点健康策略 复制链接链接已复制到粘贴板!
节点可能运行良好,足以维护其集群成员身份,但在某些情况下可能会处于不健康状态,使它成为资源不受欢迎的位置。例如,磁盘驱动器可能会报告 SMART 错误,或者 CPU 可能负载过高。在 RHEL 8.7 及更高版本中,您可以使用 Pacemaker 中的节点健康策略来自动将资源从不健康节点移出。
您可以使用以下健康节点资源代理来监控节点的健康状况,该代理根据 CPU 和磁盘状态设置节点属性:
-
ocf:pacemaker:HealthCPU,其监控 CPU 空闲 -
ocf:pacemaker:HealthIOWait,其监控 CPU I/O 等待 -
ocf:pacemaker:HealthSMART,其监控磁盘驱动器的 SMART 状态 -
ocf:pacemaker:SysInfo其使用本地系统信息设置各种节点属性,并作为健康代理监控磁盘空间的使用情况
另外,任何资源代理都可能会提供可用于定义健康节点策略的节点属性。
流程
以下流程为集群配置了健康节点策略,该策略会将资源从任何 CPU I/O 等待超过 15% 的节点移出。
设置
health-node-strategy集群属性,以定义 Pacemaker 如何对节点健康状况中的变化做出响应。pcs property set node-health-strategy=migrate-on-red
# pcs property set node-health-strategy=migrate-on-redCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建使用健康节点资源代理的克隆的集群资源,设置
allow-unhealthy-nodes资源元选项,以定义集群是否将检测节点的健康状态是否恢复了,并将资源移回该节点。使用重复的监控操作配置此资源,以持续检查所有节点的健康状况。本例创建了一个
HealthIOWait资源代理来监控 CPU I/O 等待,为将资源从节点移出的红色限制设置为 15%。此命令将allow-unhealthy-nodes资源元选项设为true,并配置 10 秒的重复监控间隔。pcs resource create io-monitor ocf:pacemaker:HealthIOWait red_limit=15 op monitor interval=10s meta allow-unhealthy-nodes=true clone
# pcs resource create io-monitor ocf:pacemaker:HealthIOWait red_limit=15 op monitor interval=10s meta allow-unhealthy-nodes=true cloneCopy to Clipboard Copied! Toggle word wrap Toggle overflow
61.8. 使用许多资源配置大型集群 复制链接链接已复制到粘贴板!
如果要部署的集群由大量节点和许多资源组成,您可能需要为集群修改以下参数的默认值。
cluster-ipc-limit集群属性cluster-ipc-limit集群属性是在一个集群守护进程断开连接前的最大 IPC 消息积压。当在大型集群中同时清理或修改大量资源时,大量 CIB 更新会一次性进行。如果 Pacemaker 服务没有时间处理 CIB 事件队列阈值前的所有配置更新,这可能会导致速度较慢的客户端被驱除。在大型集群中推荐的
cluster-ipc-limit值是集群中的资源数量乘以节点的数量。如果您在日志中看到"Evicting client"消息,则可能会引发该值。您可以使用
pcs property set命令从默认值 500 增加cluster-ipc-limit的值。例如,对于具有 200 个资源的十个节点集群,您可以使用以下命令将cluster-ipc-limit的值设置为 2000。pcs property set cluster-ipc-limit=2000
# pcs property set cluster-ipc-limit=2000Copy to Clipboard Copied! Toggle word wrap Toggle overflow PCMK_ipc_bufferPacemaker 参数在非常大的部署中,内部 Pacemaker 消息可能会超过消息缓冲区的大小。当发生这种情况时,您会看到以下格式系统日志中的信息:
Compressed message exceeds X% of configured IPC limit (X bytes); consider setting PCMK_ipc_buffer to X or higher
Compressed message exceeds X% of configured IPC limit (X bytes); consider setting PCMK_ipc_buffer to X or higherCopy to Clipboard Copied! Toggle word wrap Toggle overflow 当您看到此消息时,您可以增加每个节点上的
/etc/sysconfig/pacemaker配置文件中的PCMK_ipc_buffer的值。例如,要将PCMK_ipc_buffer的值从默认值提高为 13396332 字节,请按如下所示更改集群中每个节点的/etc/sysconfig/pacemaker文件中没有被注册掉的PCMK_ipc_buffer字段:PCMK_ipc_buffer=13396332
PCMK_ipc_buffer=13396332Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要应用此更改,请运行以下命令:
systemctl restart pacemaker
# systemctl restart pacemakerCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 62 章 Pacemaker 集群属性 复制链接链接已复制到粘贴板!
集群属性控制在集群操作过程中可能发生情况时集群的行为。
62.1. 集群属性和选项概述 复制链接链接已复制到粘贴板!
下表总结了 Pacemaker 集群属性,显示属性的默认值以及您可以为这些属性设置的可能值。
另外,还有额外的用于隔离功能的集群属性。有关这些属性的详情,请查看确定 隔离设备常规属性 中的隔离行为的集群属性表。
除了本表格中描述的属性外,还有一些由集群软件公开的集群属性。对于这些属性,建议您不要修改其默认值。
| 选项 | 默认 | 描述 |
|---|---|---|
|
| 0 | 集群可以并行执行的资源操作数量。"正确的"值取决于网络和集群节点的速度和负载。默认值为 0,表示当任何节点有高 CPU 负载时,集群会动态强制限制。 |
|
| -1(无限) | 集群允许在节点上并行执行的迁移作业数量。 |
|
| stop | 当集群没有仲裁(quorum)时该做什么。允许的值: * ignore - 继续所有资源管理 * freeze - 继续管理资源,但不会从受影响分区以外的节点中恢复资源 * stop - 停止受影响集群分区中的所有资源 * suicide - 隔离受影响集群分区中的所有节点 * demote - 如果集群分区缺少仲裁,降级任何提升的资源并停止所有其他资源 |
|
| true | 指明资源是否可以默认在任何节点上运行。 |
|
| 60s | 在网络间进行往返延时(不包括操作执行)。"正确的"值取决于网络和集群节点的速度和负载。 |
|
| 20s | 在启动期间等待来自其他节点的响应时间。"正确的"值将取决于您网络的速度和负载,以及所使用的交换机的类型。 |
|
| true | 指明是否应该停止删除的资源。 |
|
| true | 指明是否应该取消删除的动作。 |
|
| true |
指明某个节点上启动资源失败是否防止了在该节点上进一步启动尝试。当设置为
将 |
|
| -1(全部) | 调度程序输入的数量会导致要保存 ERRORs。报告问题时使用。 |
|
| -1(全部) | 调度程序输入的数量会导致 WARNINGs 保存。报告问题时使用。 |
|
| -1(全部) | 要保存的 "normal" 调度程序输入数。报告问题时使用。 |
|
| 当前运行的 Pacemaker 的消息堆栈。用于信息和诊断目的,用户不能配置。 | |
|
| 集群的 Designated Controller(DC)上的 Pacemaker 版本。用于诊断目的,用户不能配置。 | |
|
| 15 分钟 |
Pacemaker 主要由事件驱动,并提前了解何时重新检查集群的故障超时和大多数基于时间的规则。Pacemaker 还会在此属性指定的不活跃的时间后重新检查集群。此集群重新检查有两个目的:具有 |
|
| false | Maintenance Mode 让集群进入"手动关闭"模式,而不要启动或停止任何服务,直到有其他指示为止。当维护模式完成后,集群会对任何服务的当前状态进行完整性检查,然后停止或启动任何需要它的状态。 |
|
| 20min | 在经过这个时间后,放弃安全关闭并直接退出。只用于高级使用。 |
|
| false | 集群是否应该停止所有资源。 |
|
| false |
指明集群是否可以使用 |
|
| default | 指定在决定集群节点上资源放置时集群是否以及如何考虑使用属性。 |
|
| none | 与健康资源代理一起使用时,控制 Pacemaker 如何对节点健康状况中的变化做出响应。允许的值:
*
*
*
* |
62.2. 设置和删除集群属性 复制链接链接已复制到粘贴板!
要设置集群属性的值,使用以下 pcs 命令。
pcs property set property=value
pcs property set property=value
例如,若要将 symmetric-cluster 的值设置为 false,请使用以下命令:
pcs property set symmetric-cluster=false
# pcs property set symmetric-cluster=false
您可以使用以下命令从配置中删除集群属性。
pcs property unset property
pcs property unset property
另外,您可以通过将 pcs property set 命令的 value 字段留空来从配置中删除集群属性。这会将该属性恢复为默认值。例如,如果您之前将 symmetric-cluster 属性设置为 false,以下命令会从配置中删除您设置的值,并将 symmetric-cluster 的值恢复为 true,这是它的默认值。
pcs property set symmetic-cluster=
# pcs property set symmetic-cluster=
62.3. 查询集群属性设置 复制链接链接已复制到粘贴板!
在大多数情况下,当使用 pcs 命令来显示各种集群组件的值时,您可以互换使用 pcs list 或 pcs show。在以下示例中,pcs list 是用来显示多个属性的所有设置的完整列表的格式,而 pcs show 是用来显示特定属性值的格式。
要显示为集群设置的属性设置的值,使用以下 pcs 命令。
pcs property list
pcs property list
要显示集群属性设置的所有值,包括未明确设置的属性设置的默认值,请使用以下命令。
pcs property list --all
pcs property list --all
要显示特定集群属性的当前值,请使用以下命令。
pcs property show property
pcs property show property
例如,要显示 cluster-infrastructure 属性的当前值,请执行以下命令:
pcs property show cluster-infrastructure Cluster Properties: cluster-infrastructure: cman
# pcs property show cluster-infrastructure
Cluster Properties:
cluster-infrastructure: cman
为方便起见,您可以通过下列命令,显示这些属性的所有默认值,无论是否将其设置为非默认值。
pcs property [list|show] --defaults
pcs property [list|show] --defaults
62.4. 使用 pcs 命令导出集群属性 复制链接链接已复制到粘贴板!
在 Red Hat Enterprise Linux 8.9 及更新的版本中,您可以显示 pcs 命令,该命令可用于使用 pcs property config 命令的 --output-format=cmd 选项在不同的系统上重新创建配置的集群属性。
以下命令将 migration-limit 集群属性设置为 10。
pcs property set migration-limit=10
# pcs property set migration-limit=10
设置集群属性后,以下命令显示可用于在不同系统上设置集群属性的 pcs 命令。
pcs property config --output-format=cmd pcs property set --force -- \ migration-limit=10 \ placement-strategy=minimal
# pcs property config --output-format=cmd
pcs property set --force -- \
migration-limit=10 \
placement-strategy=minimal
第 63 章 将虚拟域配置为资源 复制链接链接已复制到粘贴板!
您可以使用 pcs resource create 命令将 libvirt 虚拟化框架管理的虚拟域配置为集群资源,并将 VirtualDomain 指定为资源类型。
当将虚拟域配置为资源时,请考虑以下事项:
- 在将虚拟域配置为集群资源之前,应停止它。
- 一旦虚拟域是集群资源,除了通过集群工具外,它不应该启动、停止或迁移。
- 不要配置您已配置为集群资源的虚拟域,使其在主机引导时启动。
- 所有允许运行虚拟域的节点都必须有权访问该虚拟域所需的配置文件和存储设备。
如果您希望集群管理虚拟域本身中的服务,可以将该虚拟域配置为客户机节点。
63.1. 虚拟域资源选项 复制链接链接已复制到粘贴板!
下表描述了您可以为 VirtualDomain 资源配置的资源选项。
| 项 | Default(默认) | 描述 |
|---|---|---|
|
|
(必需)到此虚拟域的 | |
|
| 依赖系统 |
要连接的虚拟机管理器 URI。您可以通过运行 |
|
|
|
在停止时总是强制关闭("destroy")域。默认的行为是仅在安全关闭尝试失败后强制关闭。只有在您的虚拟域(或您的虚拟化后端)不支持安全关闭时,才应将其设置为 |
|
| 依赖系统 |
迁移时用来连接到远程管理程序的传输。如果省略此参数,资源将使用 |
|
| 使用专用的迁移网络。迁移 URI 由在节点名称末尾添加此参数的值组成。如果节点名称是一个完全限定域名(FQDN),在 FQDN 的第一个句点(.)前插入后缀。确定由此组成的主机名可在本地被解析,相关的 IP 地址可以通过网络被访问。 | |
|
|
要额外监控虚拟域中的服务,请使用要监控的脚本列表添加这个参数。注:当使用监控脚本时,只有所有监控脚本都成功完成时, | |
|
|
|
如果设置为 |
|
|
|
如果设置为 true,代理会通过 |
|
| 随机高端口 |
此端口将用在 |
|
|
保存虚拟机镜像的快照目录的路径。设定此参数后,虚拟机的 RAM 状态将在停止后保存在快照目录中的文件。如果启动了某个域的状态文件,域将在最后停止之前恢复到正确的状态。此选项与 |
除了 VirtualDomain 资源选项外,您还可以配置 allow-migrate 元数据选项,以允许将资源实时迁移到另一节点上。当此选项设为 true 时,可以迁移资源,而且不丢失状态。当此选项设为 false 时(这是默认状态),虚拟域将在第一节点上关闭,然后在其从一个节点移到另一个节点时,在第二个节点上重新启动。
63.2. 创建虚拟域资源 复制链接链接已复制到粘贴板!
以下流程为之前创建的虚拟机在集群中创建一个 VirtualDomain 资源。
流程
要创建
VirtualDomain资源代理来管理虚拟机,Pacemaker 需要虚拟机的xml配置文件转储到磁盘上的文件中。例如,如果您创建了名为guest1的虚拟机,请将xml文件转储到允许运行该客户端的一个集群节点中的某个文件中。您可以使用您选择的文件名;本例使用/etc/pacemaker/guest1.xml。virsh dumpxml guest1 > /etc/pacemaker/guest1.xml
# virsh dumpxml guest1 > /etc/pacemaker/guest1.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
将虚拟机的
xml配置文件复制到允许运行客户机的所有其它集群节点中,在每个节点中位于同一位置。 - 请确定所有允许运行虚拟域的节点都可访问该虚拟域所需的存储设备。
- 单独测试虚拟域是否可以在每个运行虚拟域的节点中启动和停止。
- 如果正在运行,请关闭该客户机节点。Pacemaker 会在集群中配置时启动节点。不应该将虚拟机配置为在主机引导时自动启动。
使用
pcs resource create命令配置VirtualDomain资源。例如,以下命令配置了一个名为VM的VirtualDomain资源。由于allow-migrate选项设置为true,因此pcs resource move VM nodeX命令将作为实时迁移执行。在本例中,
migration_transport设置为ssh。请注意,要使 SSH 迁移正常工作,无密钥日志记录必须可以在节点间正常工作。pcs resource create VM VirtualDomain config=/etc/pacemaker/guest1.xml migration_transport=ssh meta allow-migrate=true
# pcs resource create VM VirtualDomain config=/etc/pacemaker/guest1.xml migration_transport=ssh meta allow-migrate=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 64 章 配置集群仲裁(quorum) 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 高可用性附加组件集群使用 votequorum 服务,并结合隔离,以避免脑裂的情况。为集群中的每个系统分配一组投票机制,只能在大多数投票机制都存在时才允许执行集群操作。该服务必须被加载到所有节点或无节点 ; 如果服务被载入到集群节点的一个子集,则结果将无法预计。有关 votequorum 服务的配置和操作的详情,请查看 votequorum(5)手册页。
64.1. 配置仲裁选项 复制链接链接已复制到粘贴板!
使用 pcs cluster setup 命令创建集群时,可以设置仲裁配置的一些特殊功能。下表总结了这些选项。
| 选项 | 描述 |
|---|---|
|
|
启用后,集群可能会以确定的方式达到 50% 个节点同时失败的情况。集群分区或仍与
|
|
| 在启用后,只有在所有节点都最少同时可见一次后,集群才会第一次处于仲裁状态。
当集群具有两个节点,不使用仲裁设备,且禁用 |
|
|
启用后,集群可以在特定情况下重新动态计算 |
|
|
在集群丢失节点后,在重新计算 |
有关配置和使用这些选项的详情,请查看 votequorum(5)手册页。
64.2. 修改仲裁选项 复制链接链接已复制到粘贴板!
您可以使用 pcs quorum update 命令修改集群的常规仲裁选项。执行此命令需要停止集群。有关仲裁选项的信息,请查看 votequorum(5)手册页。
pcs quorum update 命令的格式如下。
pcs quorum update [auto_tie_breaker=[0|1]] [last_man_standing=[0|1]] [last_man_standing_window=[time-in-ms] [wait_for_all=[0|1]]
pcs quorum update [auto_tie_breaker=[0|1]] [last_man_standing=[0|1]] [last_man_standing_window=[time-in-ms] [wait_for_all=[0|1]]
以下一系列命令修改 wait_for_all 仲裁选项,并显示选项的更新状态:请注意,系统不允许在集群运行时执行这个命令。
64.3. 显示制裁配置和状态 复制链接链接已复制到粘贴板!
集群运行后,您可以输入以下集群仲裁命令来显示仲裁配置和状态。
以下命令显示制裁配置。
pcs quorum [config]
pcs quorum [config]
以下命令显示制裁运行时状态。
pcs quorum status
pcs quorum status
64.4. 运行非仲裁的集群 复制链接链接已复制到粘贴板!
如果您将节点长时间移出集群,且这些节点的丢失会导致仲裁丢失,则您可以使用 pcs quorum expected-votes 命令更改实时集群的 expected_votes 参数的值。这可让集群在没有仲裁的情况下继续操作。
在 Live 集群中更改预期投票时应特别小心。如果因为您手动更改了预期的投票,集群的少于 50% 的部分在运行,那么集群中的其他节点就可以单独启动并运行集群服务,从而导致数据崩溃和其他意外结果。如果更改了这个值,您应该确保启用了 wait_for_all 参数。
以下命令将 live 集群中的预期 vote 设置为指定的值。这只会影响实时集群,不会更改配置文件;如果重新加载,则 expected_votes 的值将重置为配置文件中的值。
pcs quorum expected-votes votes
pcs quorum expected-votes votes
在您知道集群不问题但您希望集群进行资源管理时,您可以使用 pcs quorum unblock 命令防止集群在建立仲裁时等待所有节点。
使用这个命令时需要特别小心。在运行此命令前,请确定关闭没有在集群中的节点,并确保无法访问共享资源。
pcs quorum unblock
# pcs quorum unblock
第 65 章 将非 corosync 节点整合到集群中: pacemaker_remote 服务 复制链接链接已复制到粘贴板!
pacemaker_remote 服务允许没有运行 corosync 的节点集成到集群中,让集群管理它们的资源,就像它们是实际的集群节点一样。
pacemaker_remote 服务提供的功能如下:
-
pacemaker_remote服务允许您扩展到红帽对 RHEL 8.1 支持 32 个节点的限制之外。 -
pacemaker_remote服务允许您将虚拟环境作为集群资源来管理,还可以将虚拟环境中的单个服务作为集群资源来管理。
以下术语用于描述 pacemaker_remote 服务:
-
集群节点 - 运行高可用性服务(
pacemaker和corosync)的节点。 -
远程节点-运行
pacemaker_remote的节点,用于远程集成到集群中,而无需corosync集群成员资格。远程节点被配置为使用ocf:pacemaker:remote资源代理的集群资源。 -
客户机节点 - 运行
pacemaker_remote服务的虚拟客户机节点。虚拟客体资源由集群管理,它由集群启动,并作为远程节点集成到集群中。 -
pacemaker_remote - 一个可在远程节点和 Pacemaker 集群环境中 KVM 客户机节点中执行远程应用程序管理的服务守护进程。这个服务是 Pacemaker 的本地 executor 守护进程(
pacemaker-execd)的改进版本,能够在没有运行 corosync 的节点中远程管理资源。
运行 pacemaker_remote 服务的 Pacemaker 集群具有以下特征:
-
远程节点和客户机节点运行
pacemaker_remote服务(虚拟机端只需要很少的配置)。 -
在集群节点上运行的集群堆栈(
pacemaker和corosync)连接到远程节点上的pacemaker_remote服务,允许它们集成到集群中。 -
在集群节点上运行的集群堆栈(
pacemaker和corosync)可启动客户机节点,并立即连接到客户机节点上的pacemaker_remote服务,允许它们集成到集群中。
集群节点与集群节点管理的远程和客户机节点之间的关键区别在于远程和客户机节点没有运行集群堆栈。这意味着远程和虚拟机节点有以下限制:
- 它们不会在仲裁里进行
- 它们不执行隔离设备操作
- 他们没有有资格成为集群的指定控制器(DC)
-
它们本身不运行所有的
pcs命令
另外,远程节点和客户机节点不与与集群堆栈关联的可扩展性限制绑定。
除这些限制外,远程和客户机节点的行为与集群节点在资源管理方面的行为类似,且远程和虚拟机节点本身也可被保护。集群完全能够管理和监控每个远程和客户机节点上的资源:您可以针对它们构建限制,将其置于备用状态,或使用 pcs 命令在群集节点上执行任何其他操作。远程和虚拟机节点如集群节点一样显示在集群状态输出中。
65.1. pacemaker_remote 节点的主机和虚拟机验证 复制链接链接已复制到粘贴板!
集群节点与 pacemaker_remote 之间的连接是使用传输层安全(TLS)进行安全保护,使用预共享密钥(PSK)加密和验证 TCP(默认使用端口 3121)进行验证。这意味着集群节点和运行 pacemaker_remote 的节点必须共享相同的私钥。默认情况下,此密钥必须放在集群节点和远程节点上的 /etc/pacemaker/authkey 中。
第一次运行 pcs cluster node add-guest 命令或 pcs cluster node add-remote 命令时,它会创建 authkey 并将其安装到集群中的所有现有节点上。当您稍后创建任何类型的新节点时,现有 authkey 会复制到新节点。
65.2. 配置 KVM 客户机节点 复制链接链接已复制到粘贴板!
Pacemaker 客户机节点是运行 pacemaker_remote 服务的虚拟客户机节点。虚拟客户机节点由集群管理。
65.2.1. 客户端节点资源选项 复制链接链接已复制到粘贴板!
当将虚拟机配置为作为客户机节点时,您可以创建一个 VirtualDomain 资源,用于管理该虚拟机。有关您可以为 VirtualDomain 资源设置的选项的描述,请参阅 虚拟域资源选项 中的"虚拟域资源的资源选项"表。
除了 VirtualDomain 资源选项外,元数据选项将资源定义为客户机节点,并定义了连接参数。您可以使用 pcs cluster node add-guest 命令设置这些资源选项。下表描述了这些元数据选项。
| 项 | Default(默认) | 描述 |
|---|---|---|
|
| <none> | 此资源定义的客户机节点的名称。这可让资源作为客户机节点启用,并定义用于识别客户端节点的唯一名称。警告 :这个值不能与任何资源或节点 ID 重叠。 |
|
| 3121 |
配置一个自定义端口,用于到 |
|
|
| 要连接的 IP 地址或主机名 |
|
| 60s | 待处理的客户端连接超时前的时间 |
65.2.2. 将虚拟机整合为客户机节点 复制链接链接已复制到粘贴板!
以下流程是有关 Pacemaker 启动虚拟机以及将机器作为客户机节点集成的步骤的高级概述,使用 libvirt 和 KVM 虚拟机。
流程
-
配置
VirtualDomain资源。 在每一虚拟机上输入以下命令来安装
pacemaker_remote软件包,启动pcsd服务并启用它在启动时运行,并允许 TCP 端口 3121 通过防火墙。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 为每个虚拟机分配一个静态网络地址和唯一主机名,适用于所有节点。
如果您还没有这样做,在要整合为最优节点的节点上验证
pcs。pcs host auth nodename
# pcs host auth nodenameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令将现有
VirtualDomain资源转换为客户机节点。这个命令必须在集群节点上运行,而不是在要添加的客户端节点上运行。除了转换资源外,这个命令会将/etc/pacemaker/authkey复制到客户机节点上,并在客户机节点上启动并启用pacemaker_remote守护进程。客户机节点的节点名称(您可以随意定义)可以与节点的主机名不同。pcs cluster node add-guest nodename resource_id [options]
# pcs cluster node add-guest nodename resource_id [options]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
VirtualDomain资源后,您可以像对待集群中的任何其他节点一样对待客户机节点。例如,您可以创建资源并在客户机节点中运行的资源上放置资源约束,如下命令可在集群节点中运行。您可以在组群中包含客户机节点,它们允许您对存储设备、文件系统和虚拟机进行分组。pcs resource create webserver apache configfile=/etc/httpd/conf/httpd.conf op monitor interval=30s pcs constraint location webserver prefers nodename
# pcs resource create webserver apache configfile=/etc/httpd/conf/httpd.conf op monitor interval=30s # pcs constraint location webserver prefers nodenameCopy to Clipboard Copied! Toggle word wrap Toggle overflow
65.3. 配置 Pacemaker 远程节点 复制链接链接已复制到粘贴板!
远程节点被定义为将 ocf:pacemaker:remote 作为资源代理的集群资源。您可以使用 pcs cluster node add-remote 命令创建此资源。
65.3.1. 远程节点资源选项 复制链接链接已复制到粘贴板!
下表描述了您可以为 remote 资源配置的资源选项。
| 项 | Default(默认) | 描述 |
|---|---|---|
|
| 0 | 在到远程节点活跃连接断开后,在尝试重新连接到远程节点前等待的时间(以秒为单位)。这个等待是重复的。如果在等待时间过后重新连接失败,会在观察等待时间后进行一个新的重新连接尝试。当使用这个选项时,Pacemaker 会在每次等待的时间段内一直尝试退出并连接到远程节点。 |
|
|
使用 | 要连接的服务器。这可以是 IP 地址或主机名。 |
|
| 要连接的 TCP 端口。 |
65.3.2. 远程节点配置概述 复制链接链接已复制到粘贴板!
以下概述了配置 Pacemaker 远程节点并将该节点整合到现有 Pacemaker 集群环境中的步骤。
流程
在您要配置为远程节点的节点上,允许通过本地防火墙与集群相关的服务。
firewall-cmd --permanent --add-service=high-availability success firewall-cmd --reload success
# firewall-cmd --permanent --add-service=high-availability success # firewall-cmd --reload successCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您直接使用
iptables,或者firewalld以外的其他防火墙解决方案,只需打开以下端口:TCP 端口 2224 和 3121。在远程节点上安装
pacemaker_remote守护进程。yum install -y pacemaker-remote resource-agents pcs
# yum install -y pacemaker-remote resource-agents pcsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在远程节点上启动并启用
pcsd。systemctl start pcsd.service systemctl enable pcsd.service
# systemctl start pcsd.service # systemctl enable pcsd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您还没有这样做,请在要添加为远程节点的节点上验证
pcs。pcs host auth remote1
# pcs host auth remote1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令在集群中添加远程节点资源。此命令还会将所有相关配置文件同步到新节点上,启动节点,并将其配置为在引导时启动
pacemaker_remote。这个命令必须运行在集群节点中,而不必在要添加的远程节点中运行。pcs cluster node add-remote remote1
# pcs cluster node add-remote remote1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在集群中添加
远程资源后,您可以像对待集群中的任何其他节点一样对待远程节点。例如,您可以创建资源并在远程节点中运行的资源上放置资源约束,如下命令可在集群节点中运行。pcs resource create webserver apache configfile=/etc/httpd/conf/httpd.conf op monitor interval=30s pcs constraint location webserver prefers remote1
# pcs resource create webserver apache configfile=/etc/httpd/conf/httpd.conf op monitor interval=30s # pcs constraint location webserver prefers remote1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 警告资源组、colocation 约束或顺序约束中永远不会涉及远程节点连接资源。
- 为远程节点配置保护资源。远程节点的隔离方式与集群节点相同。配置保护资源,以便使用与集群节点相同的远程节点。但请注意,远程节点永远不会启动隔离操作。只有群集节点能够真正对另一节点执行隔离操作。
65.4. 更改默认端口位置 复制链接链接已复制到粘贴板!
如果您需要更改 Pacemaker 或 pacemaker_remote 的默认端口位置,您可以设置影响这两个守护进程的 PCMK_remote_port 环境变量。可以通过将其放在 /etc/sysconfig/pacemaker 文件中来启用该变量,如下所示:
\#==#==# Pacemaker Remote ... # # Specify a custom port for Pacemaker Remote connections PCMK_remote_port=3121
\#==#==# Pacemaker Remote
...
#
# Specify a custom port for Pacemaker Remote connections
PCMK_remote_port=3121
当更改特定客户机节点或远程节点使用的默认端口时,必须在该节点的 /etc/sysconfig/pacemaker 文件中设置 PCMK_remote_port 变量,创建客户机节点或远程节点连接的集群资源也必须使用同样的端口号来配置(对客户机节点使用 remote-port 元数据选项,对远程节点使用 port 选项)。
65.5. 使用 pacemaker_remote 节点升级系统 复制链接链接已复制到粘贴板!
如果在活跃的 Pacemaker 远程节点上停止 pacemaker_remote 服务,集群将在停止节点前安全地迁移该节点的资源。这可让您在不从集群中删除节点的情况下执行软件升级和其他常规维护流程。关闭 pacemaker_remote 后,集群将立即尝试重新连接。如果 pacemaker_remote 在资源的监控器超时内没有重启,集群会将 monitor 操作视为失败。
如果您希望避免在活跃的 Pacemaker 远程节点上停止 pacemaker_remote 服务时监控失败,您可以在执行任何可能停止 pacemaker_remote 的系统管理前使用以下步骤使节点退出集群。
流程
使用
pcs resource disable resourcename命令停止节点的连接资源,这样可将所有服务移出该节点。连接资源是远程节点的ocf:pacemaker:remote资源,通常为客户机节点的ocf:heartbeat:VirtualDomain资源。对于客户机节点,此命令也会停止虚拟机,因此虚拟机必须在集群外启动(例如,使用virsh)以执行任何维护。pcs resource disable resourcename
pcs resource disable resourcenameCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 执行所需的维护。
当准备好将节点返回集群时,使用
pcs resource enable命令重新启用该资源。pcs resource enable resourcename
pcs resource enable resourcenameCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 66 章 执行集群维护 复制链接链接已复制到粘贴板!
要在集群的节点上执行维护,您可能需要停止或移动该集群中运行的资源和服务。或者,在不影响服务的同时,您可能需要停止集群软件。pacemaker 提供各种执行系统维护的方法。
- 如果您需要停止集群中的节点,同时继续提供在另一个节点中运行的服务,您可以让该集群节点处于待机模式。处于待机模式的节点无法再托管资源。该节点上任何当前活跃的资源都将移至另一节点,如果没有其他节点有资格运行该资源,则停止。有关待机模式的详情,请参考 将节点置于待机模式。
如果您需要在不停止该资源的情况下将资源从当前运行的节点中移除,您可以使用
pcs resource move命令将资源移到其他节点上。当您执行
pcs resource move命令时,这会为资源添加一个约束,以防止其在当前运行的节点上运行。当您准备重新移回资源时,可以执行pcs resource clear或pcs constraint delete命令来删除约束。这不一定将资源回原始节点,因为此时可以在哪里运行这些资源取决于您最初配置的资源。您可以使用pcs resource relocate run命令将资源重新定位到首选节点。-
如果您需要完全停止正在运行的资源,并防止集群再次启动它,您可以使用
pcs resource disable命令。有关pcs resource disable命令的详情,请参考 禁用、启用和禁止集群资源。 -
如果要防止 Pacemaker 对资源执行任何操作(例如,要在资源维护时禁用恢复操作,或者需要重新加载
/etc/sysconfig/pacemaker设置),请使用pcs resource unmanage命令,如 将资源设置为非受管模式 中所述。pacemaker 远程连接资源应该永远不是非受管状态。 -
如果您需要将集群置于不启动或停止服务的状态,您可以设置
maintenance-mode集群属性。将集群放入维护模式会自动使所有资源为非受管状态。有关将集群置于维护模式的详情,请参考 将集群置于维护模式。 - 如果您需要更新组成 RHEL 高可用性和弹性存储附加组件的软件包,您可以一次在一个节点上或在整个集群上更新软件包,如 更新 RHEL 高可用性集群 中所述。
- 如果您需要在 Pacemaker 远程节点上执行维护操作,可以通过禁用远程节点资源从集群中删除该节点,如升级远程节点和客户机节点中所述。
- 如果需要在 RHEL 集群中迁移虚拟机,您首先需要停止虚拟机上的集群服务,以从集群中删除该节点,然后在执行迁移后启动集群备份。如 迁移 RHEL 集群中的虚拟机 中所述。
66.1. 把节点设置为待机模式 复制链接链接已复制到粘贴板!
当集群节点处于待机模式时,节点将不再能够托管资源。该节点上所有当前活跃的资源都将移至另一节点。
以下命令将指定节点设置为待机模式。如果您指定了 --all,该命令会将所有节点置于待机模式。
您可以在更新资源的软件包时使用此命令。您还可以在测试配置时使用此命令模拟恢复,而无需实际关闭节点。
pcs node standby node | --all
pcs node standby node | --all
以下命令将指定节点从待机模式中删除。运行此命令后,指定节点就可以托管资源。如果您指定了 --all,该命令会将所有节点从待机模式中删除。
pcs node unstandby node | --all
pcs node unstandby node | --all
请注意,当您执行 pcs node standby 命令时,这会阻止资源在指定节点上运行。当您执行 pcs node unstandby 命令时,这允许资源在指定节点上运行。这不一定将资源回指定节点 ; 此时可以在哪里运行这些资源取决于您最初配置的资源。
66.2. 手动移动集群资源 复制链接链接已复制到粘贴板!
您可以覆盖集群并强制资源从其当前位置移动。当您要做到这一点时有两个问题:
- 当某个节点处于维护状态时,您需要将该节点上运行的所有资源移至不同节点
- 当需要移动单独指定的资源时
要将节点上运行的所有资源移动到另一个节点,需要使该节点处于待机模式。
您可以用下列方式之一移动独立指定的资源。
-
您可以使用
pcs resource move命令将资源从当前运行的节点中移出。 -
您可以使用
pcs resource relocate run命令将资源移至首选节点,具体由当前的集群状态、约束、资源位置和其他设置来决定。
66.2.1. 将资源从其当前节点移动 复制链接链接已复制到粘贴板!
要将资源从其当前运行的节点上移出,请使用以下命令,指定定义的资源的 resource_id。如果要指定在哪个节点上运行您要移动的资源,请指定 destination_node。
pcs resource move resource_id [destination_node] [--master] [lifetime=lifetime]
pcs resource move resource_id [destination_node] [--master] [lifetime=lifetime]
运行 pcs resource move 命令时,这会为资源添加约束,以防止资源在其当前运行的节点上运行。在 RHEL 8.6 及更高版本中,您可以为此命令指定-- autodelete 选项,这会导致在资源移动后,这个命令创建的位置约束将自动被删除。对于早期版本,您可以运行 pcs resource clear 或 pcs constraint delete 命令来手动删除约束。移除约束不一定将资源重新移回原始节点; 此时资源可以在哪里运行取决于您最初是如何配置资源的。
如果您指定了 pcs resource move 命令的 --master 参数,则约束仅适用于提升的资源实例。
您可选择为 pcs resource move 命令配置 lifetime 参数,以指示约束应保留的时间。根据 ISO 8601 中定义的格式来指定 lifetime 参数的单位,它要求您将单位指定为一个大写字母,例如 Y(年)、M(月)、W(周)、D(天)、H(小时)、M(分钟)和 S(秒)。
为了将分钟(M)与月(M)区分开,需要在分钟值前添加 PT 来指定。例如,lifetime 参数为 5M 表示 5 个月的间隔,而 lifetime 参数为 PT5M 则表示间隔为 5 分钟。
以下命令将资源 resource1 移到节点 example-node2,并防止它重新移至最初在其上运行了 1 小时 30 分钟的节点。
pcs resource move resource1 example-node2 lifetime=PT1H30M
pcs resource move resource1 example-node2 lifetime=PT1H30M
以下命令将资源 resource1 移到节点 example-node2,并防止它重新移至最初在其上运行了 30 分钟的节点。
pcs resource move resource1 example-node2 lifetime=PT30M
pcs resource move resource1 example-node2 lifetime=PT30M
66.2.2. 将资源移动到首选节点 复制链接链接已复制到粘贴板!
由于故障转移或管理员手动移动节点,在资源移动后,即使解决了造成故障转移的情况,它也不一定会迁移到其原始的节点。要将资源重新定位到首选节点,请使用以下命令。首选节点由当前的集群状态、约束、资源位置和其他设置决定,并可能随时间变化。
pcs resource relocate run [resource1] [resource2] ...
pcs resource relocate run [resource1] [resource2] ...
如果没有指定任何资源,则所有资源都会重新定位到首选节点。
此命令在忽略资源粘性时为每个资源计算首选的节点。在计算首选节点后,它会创建位置限制,导致资源移至首选节点。移动资源后,这些限制会自动被删除。要删除由 pcs resource relocate run 命令创建的所有约束,您可以输入 pcs resource relocate clear 命令。要显示资源的当前状态及其忽略资源粘性的最佳节点,请输入 pcs resource relocate show 命令。
66.3. 禁用、启用和禁止集群资源 复制链接链接已复制到粘贴板!
除了 pcs resource move 和 pcs resource relocate 命令外,您还可以使用各种其他命令来控制集群资源的行为。
禁用集群资源
您可以手动停止正在运行的资源,并使用以下命令防止集群再次启动它。根据其他配置(约束、选项、失败等)配置,资源可能会继续启动。如果您指定了 --wait 选项,pcs 将最多等待资源停止 'n' 秒,然后返回 0 (如果资源停止)或 1(如果资源尚未停止)。如果没有指定 'n',则默认为 60 分钟。
pcs resource disable resource_id [--wait[=n]]
pcs resource disable resource_id [--wait[=n]]
在 RHEL 8.2 及之后的版本中,您可以指定仅在禁用资源对其他资源没有影响时禁用资源。在具有复杂的资源关系时,这可能无法通过手动设置来完成。
-
pcs resource disable --simulate命令显示在更改集群配置的同时禁用资源的效果。 -
pcs resource disable --safe命令仅在没有任何方式影响任何其他资源时禁用资源,比如从一个节点迁移到另一个节点。pcs resource secure-disable命令是pcs resource disable --safe命令的别名。 -
pcs resource disable --safe --no-strict命令仅在没有其他资源停止或降级时禁用资源。
在 RHEL 8.5 及更高版本中,您可以为 pcs resource disable 选项,以仅打印错误。同样从 RHEL 8.5 开始,如果安全禁用操作失败,则 --safe 命令指定--briefpcs resource disable --safe 命令生成的错误报告会包含受影响的资源 ID。如果您只需要知道受禁用资源影响的资源 ID,请使用 --brief 选项,这不提供完整的模拟结果。
启用集群资源
使用以下命令来允许集群启动资源。根据其余配置,资源可能会继续停止。如果您指定了 --wait 选项,pcs 将最多等待资源启动 'n' 秒,然后返回 0 (如果资源启动)或 1(如果资源尚未启动)。如果没有指定 'n',则默认为 60 分钟。
pcs resource enable resource_id [--wait[=n]]
pcs resource enable resource_id [--wait[=n]]
防止资源在特定节点上运行
使用以下命令来防止资源在指定节点上运行,如果没有指定节点则在当前节点上运行。
pcs resource ban resource_id [node] [--master] [lifetime=lifetime] [--wait[=n]]
pcs resource ban resource_id [node] [--master] [lifetime=lifetime] [--wait[=n]]
请注意,当执行 pcs resource ban 命令时,这会向资源添加 -INFINITY 位置约束,以防止其在指定的节点上运行。您可以执行 pcs resource clear 或 pcs constraint delete 命令来删除约束。这不一定将资源回指定节点 ; 此时可以在哪里运行这些资源取决于您最初配置的资源。
如果您指定 pcs resource ban 命令的 --master 参数,则约束的范围仅限于 master 角色,您必须指定 master_id 而不是 resource_id。
您可选择为 pcs resource ban 命令配置 lifetime 参数,以指示约束应保留的时间。
您可以选择为 pcs resource ban 命令配置 --wait[=n] 参数,以指示在返回 0(如果资源已启动)或 1 (如果资源尚未启动)之前,在目标节点上等待资源启动的秒数。如果没有指定 n,将使用默认的资源超时时间。
强制资源在当前节点上启动
使用 pcs resource 命令的 debug-start 参数强制指定资源在当前节点上启动,忽略集群建议并打印启动资源的输出。这主要用于调试资源;在集群上启动资源总是(几乎)由 Pacemaker 来完成,而不是直接使用 pcs 命令。如果您的资源没有启动,这通常是由于资源配置错误(您在系统日志中调试)、阻止资源启动的限制,或者禁用资源。您可以使用这个命令来测试资源配置,但通常不应该用来启动集群中的资源。
debug-start 命令的格式如下:
pcs resource debug-start resource_id
pcs resource debug-start resource_id
66.4. 将资源设置为非受管模式 复制链接链接已复制到粘贴板!
当资源处于 unmanaged 模式时,该资源仍然处于配置中,但 Pacemaker 不管理该资源。
以下命令将指定的资源设置为 unmanaged 模式。
pcs resource unmanage resource1 [resource2] ...
pcs resource unmanage resource1 [resource2] ...
以下命令将资源设置为 managed 模式,这是默认状态。
pcs resource manage resource1 [resource2] ...
pcs resource manage resource1 [resource2] ...
您可以使用 pcs resource manage 或 pcs resource unmanage 命令来指定资源组的名称。命令将对组中的所有资源执行操作,以便您可以通过单个命令将组中的所有资源设置为 managed 或 unmanaged 模式,然后单独管理包含的资源。
66.5. 将集群设置为维护模式 复制链接链接已复制到粘贴板!
当集群处于维护模式时,除非有特别说明,集群不会启动或停止任何服务。当维护模式完成后,集群会对任何服务的当前状态进行完整性检查,然后停止或启动任何需要它的状态。
要将集群设置为维护模式,请使用以下命令将 maintenance-mode 集群属性设置为 true。
pcs property set maintenance-mode=true
# pcs property set maintenance-mode=true
要从维护模式中删除集群,请使用以下命令将 maintenance-mode 集群属性设置为 false。
pcs property set maintenance-mode=false
# pcs property set maintenance-mode=false
您可以使用以下命令从配置中删除集群属性。
pcs property unset property
pcs property unset property
另外,您可以通过将 pcs property set 命令的 value 字段留空来从配置中删除集群属性。这会将该属性恢复为默认值。例如,如果您之前将 symmetric-cluster 属性设置为 false,以下命令会从配置中删除您设置的值,并将 symmetric-cluster 的值恢复为 true,这是它的默认值。
pcs property set symmetric-cluster=
# pcs property set symmetric-cluster=
66.6. 更新 RHEL 高可用性集群 复制链接链接已复制到粘贴板!
可使用以下两种通用方法之一更新组成 RHEL High Availability 和 Resilient Storage 附加组件的软件包:
- 滚动更新 :一次从服务中移出一个节点,更新其软件,然后将其重新集成到集群中。这可让集群在更新每个节点时继续提供服务和管理资源。
- 整个集群更新 :停止整个集群,对所有节点应用更新,然后重新启动集群。
在为 Red Hat Enterprise Linux High Availability 和 Resilient Storage 集群执行软件更新流程时,您必须确保在更新启动前,将进行更新的任何节点都不是集群的活跃成员。
有关以上方法及更新的流程的完整描述,请参阅将软件更新应用到 RHEL High Availability 或弹性存储集群的建议实践。
66.7. 升级远程节点和客户机节点 复制链接链接已复制到粘贴板!
如果在活动远程节点或客户机节点上停止 pacemaker_remote 服务,则该集群将在停止该节点前安全地迁移该节点的资源。这可让您在不从集群中删除节点的情况下执行软件升级和其他常规维护流程。关闭 pacemaker_remote 后,集群将立即尝试重新连接。如果 pacemaker_remote 在资源的监控器超时内没有重启,集群会将 monitor 操作视为失败。
如果您希望避免在活跃的 Pacemaker 远程节点上停止 pacemaker_remote 服务时监控失败,您可以在执行任何可能停止 pacemaker_remote 的系统管理前使用以下步骤使节点退出集群。
流程
使用
pcs resource disable resourcename命令停止节点的连接资源,这样可将所有服务移出该节点。连接资源是远程节点的ocf:pacemaker:remote资源,通常为客户机节点的ocf:heartbeat:VirtualDomain资源。对于客户机节点,此命令也会停止虚拟机,因此虚拟机必须在集群外启动(例如,使用virsh)以执行任何维护。pcs resource disable resourcename
pcs resource disable resourcenameCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 执行所需的维护。
当准备好将节点返回集群时,使用
pcs resource enable命令重新启用该资源。pcs resource enable resourcename
pcs resource enable resourcenameCopy to Clipboard Copied! Toggle word wrap Toggle overflow
66.8. 在 RHEL 集群中迁移虚拟机 复制链接链接已复制到粘贴板!
红帽不支持在虚拟机监控程序或主机间实时迁移活跃集群节点,如 RHEL High Availability 集群支持政策 - 虚拟化集群成员的一般条件。如果需要执行实时迁移,首先需要停止虚拟机上的集群服务从集群中删除该节点,然后在执行迁移后启动集群备份。以下步骤概述了从集群中删除虚拟机、迁移虚拟机以及将虚拟机恢复到集群的步骤。
以下步骤概述了从集群中删除虚拟机、迁移虚拟机以及将虚拟机恢复到集群的步骤。
此流程适用于用作完整集群节点的虚拟机,不适用于作为集群资源(包括用作客户机节点的虚拟机)管理的虚拟机,这些虚拟机可以在不需要特别计划的情况下进行实时迁移。有关单独或整体更新组成 RHEL 高可用性和弹性存储附加组件的软件包所需的完整流程的常规信息,请参阅将 将软件更新应用到 RHEL 高可用性或弹性存储集群的推荐实践。
执行此步骤前,请考虑删除集群节点对集群仲裁的影响。例如,如果您有一个三节点集群,并且删除了一个节点,则集群将无法承受任何节点故障。这是因为,如果三节点集群中的一个节点已停机,则删除第二个节点将会丢失仲裁。
流程
- 如果需要在停止或移动虚拟机上运行的资源或软件进行迁移前进行准备,请执行这些步骤。
在虚拟机上运行以下命令来停止虚拟机上的集群软件。
pcs cluster stop
# pcs cluster stopCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 执行虚拟机的实时迁移。
在虚拟机上启动集群服务。
pcs cluster start
# pcs cluster startCopy to Clipboard Copied! Toggle word wrap Toggle overflow
66.9. 通过 UUID 识别集群 复制链接链接已复制到粘贴板!
在 Red Hat Enterprise Linux 8.7 及更高版本中,当您创建集群时,它有一个关联的 UUID。因为集群名称不是一个唯一的集群标识符,因此第三方工具(如管理具有相同名称的多个集群的配置管理数据库)可以通过其 UUID 来唯一标识集群。您可以使用 pcs cluster config [show] 命令显示当前的集群 UUID,该命令在其输出中包含集群 UUID。
要向现有集群添加 UUID,请运行以下命令:
pcs cluster config uuid generate
# pcs cluster config uuid generate
要为具有现有 UUID 的集群重新生成 UUID,请运行以下命令:
pcs cluster config uuid generate --force
# pcs cluster config uuid generate --force
第 67 章 配置和管理逻辑卷 复制链接链接已复制到粘贴板!
67.1. 逻辑卷管理概述 复制链接链接已复制到粘贴板!
逻辑卷管理器(LVM)在物理存储上创建一个抽象层,帮助您创建逻辑存储卷。与直接物理存储用法相比,这提供了更大的灵活性。
另外,硬件存储配置对软件是隐藏的,因此您可以在不停止应用程序或卸载文件系统的情况下调整其大小和移动它。这可降低操作成本。
67.1.1. LVM 构架 复制链接链接已复制到粘贴板!
以下是 LVM 组件:
- 物理卷
- 物理卷(PV)是指定为 LVM 使用的分区或整个磁盘。如需更多信息,请参阅管理 LVM 物理卷。
- 卷组
- 卷组(VG)是物理卷(PV)的一个集合,它创建一个磁盘空间池,您可以从中分配逻辑卷。如需更多信息,请参阅管理 LVM 卷组。
- 逻辑卷
- 一个逻辑卷代表一个可用的存储设备。如需更多信息,请参阅 基本逻辑卷管理 和 高级逻辑卷管理。
下图显示了 LVM 的组件:
图 67.1. LVM 逻辑卷组件
67.1.2. LVM 的优点 复制链接链接已复制到粘贴板!
与直接使用物理存储相比,逻辑卷具有以下优势:
- 灵活的容量
- 使用逻辑卷时,您可以将设备和分区聚合到一个逻辑卷中。借助此功能,文件系统可以扩展到多个设备中,就像它们是一个单一的大型设备一样。
- 方便设备命名
- 逻辑卷可以使用用户定义的名称和自定义名称进行管理。
- 存储卷大小
- 您可以使用简单的软件命令扩展逻辑卷或减小逻辑卷大小,而无需重新格式化和重新分区基础设备。如需更多信息,请参阅 重新调整逻辑卷大小。
- 在线数据重新定位
要部署更新、更快或更弹性的存储子系统,您可以使用
pvmove命令在系统处于活动状态时移动数据。在磁盘处于使用状态时可以重新分配磁盘。例如,您可以在删除热插拔磁盘前将其清空。有关如何迁移数据的更多信息,请参阅
pvmove手册页,以及 从卷组中删除物理卷。- 条带化卷
- 您可以创建一个在两个或者多个设备间条带化分布数据的逻辑卷。这可显著提高吞吐量。如需更多信息,请参阅 创建条带逻辑卷。
- RAID 卷
- 逻辑卷为您对数据配置 RAID 提供了一种便捷的方式。这可防止设备故障并提高性能。如需更多信息,请参阅 配置 RAID 逻辑卷。
- 卷快照
- 您可以对数据进行快照(逻辑卷在一个特点时间点上的副本)用于一致性备份或测试更改的影响,而不影响实际数据。如需更多信息,请参阅 管理逻辑卷快照。
- 精简卷
- 逻辑卷可以是精简调配的。这可让您创建大于可用物理空间的逻辑卷。如需更多信息,请参阅 创建精简逻辑卷。
- Caching
- 缓存使用 SSD 等快速设备来缓存逻辑卷中的数据,从而提高性能。如需更多信息,请参阅 缓存逻辑卷。
67.2. 管理 LVM 物理卷 复制链接链接已复制到粘贴板!
物理卷(PV)是物理存储设备或者 LVM 使用的存储设备上的一个分区。
在初始化过程中,LVM 磁盘标签和元数据被写入设备,这允许 LVM 作为逻辑卷管理方案的一部分来跟踪和管理设备。
在初始化后,您无法增加元数据的大小。如果您需要较大的元数据,您必须在初始化过程中设置合适的大小。
初始化过程完成后,您可以将 PV 分配给卷组(VG)。您可以将这个 VG 分成逻辑卷(LV),后者是操作系统和应用程序可用于存储的虚拟块设备。
为确保最佳性能,将整个磁盘分区为一个 PV ,以供 LVM 使用。
67.2.1. 创建 LVM 物理卷 复制链接链接已复制到粘贴板!
您可以使用 pvcreate 命令初始化 LVM 使用的物理卷。
先决条件
- 管理访问权限.
-
lvm2软件包已安装。
流程
确定您要用作物理卷的存储设备。要列出所有可用存储设备,请使用:
lsblk
$ lsblkCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 LVM 物理卷:
pvcreate /dev/sdb
# pvcreate /dev/sdbCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用您要初始化为物理卷的设备的名称替换 /dev/sdb。
验证步骤
显示创建的物理卷:
pvs PV VG Fmt Attr PSize PFree /dev/sdb lvm2 a-- 28.87g 13.87g
# pvs PV VG Fmt Attr PSize PFree /dev/sdb lvm2 a-- 28.87g 13.87gCopy to Clipboard Copied! Toggle word wrap Toggle overflow
67.2.2. 删除 LVM 物理卷 复制链接链接已复制到粘贴板!
您可以使用 pvremove 命令删除物理卷,以供 LVM 使用。
先决条件
- 管理访问权限.
流程
列出物理卷,以识别您要删除的设备:
pvs PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 --- 28.87g 28.87g
# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 --- 28.87g 28.87gCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除物理卷:
pvremove /dev/sdb1
# pvremove /dev/sdb1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 /dev/sdb1 替换为与物理卷关联的设备的名称。
如果您的物理卷是卷组的一部分,则您需要首先将其从卷组中删除。
如果卷组包含多个物理卷,请使用
vgreduce命令:vgreduce VolumeGroupName /dev/sdb1
# vgreduce VolumeGroupName /dev/sdb1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称。将 /dev/sdb1 替换为设备的名称。
如果您的卷组只包含一个物理卷,请使用
vgremove命令:vgremove VolumeGroupName
# vgremove VolumeGroupNameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称。
验证
验证物理卷是否已删除:
pvs
# pvsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
67.2.3. 在 web 控制台中创建逻辑卷 复制链接链接已复制到粘贴板!
逻辑卷作为物理驱动器使用。您可以使用 RHEL 8 web 控制台在卷组中创建 LVM 逻辑卷。
先决条件
- 您已安装了 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
-
cockpit-storaged软件包已安装在您的系统上。 - 已创建卷组。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 Web 控制台的日志记录。
- 点 Storage。
- 在 Storage 表中,点您要在其中创建逻辑卷的卷组。
- 在 Logical volume group 页面中,滚动到 LVM2 logical volumes 部分,然后点击 。
- 在 Name 字段中输入新逻辑卷的名称。不要在名称中包含空格。
在 下拉菜单中,选择 Block device for filesystems。
此配置允许您创建一个逻辑卷,其最大卷大小等于卷组中所含所有驱动器的总和。
定义逻辑卷的大小。考虑:
- 使用这个逻辑卷的系统所需的空间。
- 您要创建的逻辑卷数量。
您可以选择不使用整个空间。如果需要,您可以稍后增大逻辑卷。
点 。
逻辑卷被创建。要使用逻辑卷,您必须格式化并挂载卷。
验证
在 Logical volume 页面中,滚动到 LVM2 logical volumes 部分,并验证是否列出了新逻辑卷。
67.2.4. 在 web 控制台中格式化逻辑卷 复制链接链接已复制到粘贴板!
逻辑卷作为物理驱动器使用。要使用它们,您必须使用文件系统格式化它们。
格式化逻辑卷会删除卷上的所有数据。
您选择的文件系统决定了可用于逻辑卷的配置参数。例如,XFS 文件系统不支持缩小卷。
先决条件
- 已安装 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
-
cockpit-storaged软件包已安装在您的系统上。 - 逻辑卷已创建。
- 您有对系统的 root 访问权限。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 Web 控制台的日志记录。
- 点 。
- 在 Storage 表中,点创建了逻辑卷的卷组。
- 在 Logical volume group 页面中,滚动到 LVM2 logical volumes 部分。
- 点击您要格式的卷组旁的菜单按钮 。
从下拉菜单中选择 。
- 在 Name 字段中输入文件系统的名称。
在 Mount Point 字段中添加挂载路径。
在 下拉菜单中选择一个文件系统:
XFS 文件系统支持大的逻辑卷,在不停止工作的情况下在线切换物理驱动器,并可以增大现有的文件系统。如果您没有不同的首选项,请保留这个文件系统。
XFS 不支持缩小使用 XFS 文件系统格式的卷大小
ext4 文件系统支持:
- 逻辑卷
- 在不中断的情况下在线切换物理驱动器
- 增大文件系统
- 缩小文件系统
如果您希望 RHEL web 控制台使用零重写整个磁盘,请选择 Overwrite existing data with zeros 复选框。使用这个选项较慢,因为程序必须经过整个磁盘,但它更为安全。如果磁盘包含任何数据且需要覆盖数据,则使用这个选项。
如果您没有选择 Overwrite existing data with zeros 复选框,RHEL web 控制台只重写磁盘头。这提高了格式化速度。
如果要在逻辑卷上启用它,请在 下拉菜单中选择加密的类型。
您可以选择具有 LUKS1 (Linux Unified Key Setup)或 LUKS2 加密的版本,其允许您使用密码短语加密卷。
- 在 下拉菜单中,选择您希望逻辑卷在系统引导后何时挂载。
- 选择所需的 挂载选项。
格式化逻辑卷:
- 如果要格式化卷并立即挂载它,请单击 。
如果要格式化卷,而不挂载它,请单击 。
根据卷大小以及选择格式化选项,格式化可能需要几分钟。
验证
在 Logical volume group 页面中,滚动到 LVM2 logical volumes 部分,然后点逻辑卷,来检查详情和其它选项。
- 如果您选择了 选项,点逻辑卷行末尾的菜单按钮,然后选择 来使用逻辑卷。
67.2.5. 在 web 控制台中重新定义逻辑卷大小 复制链接链接已复制到粘贴板!
您可以在 RHEL 8 web 控制台中扩展或减少逻辑卷。示例流程演示了如何在不使卷离线的情况下增大和缩小逻辑卷的大小。
您不能减少包含 GFS2 或者 XFS 文件系统的卷。
先决条件
- 您已安装了 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
-
cockpit-storaged软件包已安装在您的系统上。 - 现有逻辑卷包含支持调整逻辑卷大小的文件系统。
步骤
- 登录到 RHEL web 控制台。
- 点 。
- 在 Storage 表中,点创建了逻辑卷的卷组。
在 Logical Volume group 页面中,滚动到 LVM2 logical volumes 部分,然后点击您要调整其大小的卷组旁的菜单按钮 。
在菜单中,选择 Grow 或 Shrink 来调整卷的大小:
增大卷:
- 选择 来增加卷的大小。
在 Grow logical volume 对话框中调整逻辑卷的大小。
点 。
LVM 增大逻辑卷,而不会导致系统中断。
缩小卷:
- 选择 以减少卷的大小。
在 Shrink logical volume 对话框中调整逻辑卷的大小。
点 。
LVM 缩小逻辑卷,而不会导致系统中断。
67.3. 管理 LVM 卷组 复制链接链接已复制到粘贴板!
您可以创建并使用卷组(VG)来管理组合到单个存储实体中的多个物理卷(PV),并调整其大小。
扩展是您可以在 LVM 中分配的最小空间单位。物理扩展(PE)和逻辑扩展(LE)的默认大小为 4 MiB,您可以进行配置。所有扩展都有同样的大小。
当您在 VG 中创建逻辑卷(LV)时,LVM 会对 PV 分配物理扩展。LV 中的逻辑扩展与 VG 中的物理扩展一一对应。您不需要指定创建 LV 的 PE。LVM 将找到可用的 PE,并将它们拼凑在一起,来创建所需大小的LV。
在 VG 中,您可以创建多个 LV,每个 LV 就像一个传统的分区,但可以跨物理卷,并可以动态调整大小。VG 可以自动管理磁盘空间的分配。
67.3.1. 创建 LVM 卷组 复制链接链接已复制到粘贴板!
您可以使用 vgcreate 命令创建卷组(VG)。您可以为非常大或非常小的卷调整扩展的大小,以优化性能和存储效率。您可以在创建 VG 时指定扩展的大小。要更改扩展的大小,您必须重新创建卷组。
先决条件
- 管理访问权限.
-
lvm2软件包已安装。 - 创建一个或多个物理卷。有关创建物理卷的更多信息,请参阅 创建 LVM 物理卷。
步骤
列出并识别您要包含在 VG 中的 PV:
pvs
# pvsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 VG:
vgcreate VolumeGroupName PhysicalVolumeName1 PhysicalVolumeName2
# vgcreate VolumeGroupName PhysicalVolumeName1 PhysicalVolumeName2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用您要创建的卷组的名称替换 VolumeGroupName。将 PhysicalVolumeName 替换为 PV 的名称。
要在创建 VG 时指定扩展的大小,请使用
-s ExtentSize选项。将 ExtentSize 替换为扩展的大小。如果没有提供大小的后缀,命令默认使用 MB。
验证
验证 VG 是否已创建:
vgs VG #PV #LV #SN Attr VSize VFree VolumeGroupName 1 0 0 wz--n- 28.87g 28.87g
# vgs VG #PV #LV #SN Attr VSize VFree VolumeGroupName 1 0 0 wz--n- 28.87g 28.87gCopy to Clipboard Copied! Toggle word wrap Toggle overflow
67.3.2. 在 web 控制台中创建卷组 复制链接链接已复制到粘贴板!
从一个或多个物理驱动器或者其它存储设备创建卷组。
从卷组创建逻辑卷。每个卷组都可以包括多个逻辑卷。
先决条件
- 您已安装了 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
-
cockpit-storaged软件包已安装在您的系统上。 - 要创建卷组的物理驱动器或其他类型的存储设备。
步骤
登录到 RHEL 8 web 控制台。
详情请参阅 Web 控制台的日志记录。
- 点 。
- 在 Storage 表中,点菜单按钮。
从下拉菜单中选择 Create LVM2 volume group。
- 在 Name 字段中输入卷组的名称。名称不得包含空格。
选择您要组合的驱动器来创建卷组。
RHEL web 控制台仅显示未使用的块设备。如果您没有在列表中看到设备,请确保它没有被系统使用,或者将其格式化为空且未使用。使用的设备包括,例如:
- 使用文件系统格式化的设备
- 另一个卷组中的物理卷
- 物理卷是另一个软件 RAID 设备的成员
点 。
已创建卷组。
验证
- 在 Storage 页面中,检查新卷组是否列在 Storage 表中。
67.3.3. 重命名 LVM 卷组 复制链接链接已复制到粘贴板!
您可以使用 vgrename 命令重命名卷组(VG)。
先决条件
- 管理访问权限.
-
lvm2软件包已安装。 - 创建一个或多个物理卷。有关创建物理卷的更多信息,请参阅 创建 LVM 物理卷。
- 已创建卷组。有关创建卷组的详情,请参考 第 67.3.1 节 “创建 LVM 卷组”。
步骤
列出并识别您要重命名的 VG:
vgs
# vgsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重命名 VG:
vgrename OldVolumeGroupName NewVolumeGroupName
# vgrename OldVolumeGroupName NewVolumeGroupNameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 OldVolumeGroupName 替换为 VG 的名称。将 NewVolumeGroupName 替换为 VG 的新名称。
验证
验证 VG 是否有新名称:
vgs VG #PV #LV #SN Attr VSize VFree NewVolumeGroupName 1 0 0 wz--n- 28.87g 28.87g
# vgs VG #PV #LV #SN Attr VSize VFree NewVolumeGroupName 1 0 0 wz--n- 28.87g 28.87gCopy to Clipboard Copied! Toggle word wrap Toggle overflow
67.3.4. 扩展 LVM 卷组 复制链接链接已复制到粘贴板!
您可以使用 vgextend 命令将物理卷(PV)添加到卷组(VG)中。
先决条件
- 管理访问权限.
-
lvm2软件包已安装。 - 创建一个或多个物理卷。有关创建物理卷的更多信息,请参阅 创建 LVM 物理卷。
- 已创建卷组。有关创建卷组的详情,请参考 第 67.3.1 节 “创建 LVM 卷组”。
步骤
列出并识别您要扩展的 VG:
vgs
# vgsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 列出并识别您要添加到 VG 中的 PV:
pvs
# pvsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 扩展 VG:
vgextend VolumeGroupName PhysicalVolumeName
# vgextend VolumeGroupName PhysicalVolumeNameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为 VG 的名称。将 PhysicalVolumeName 替换为 PV 的名称。
验证
验证 VG 现在是否包含新 PV:
pvs PV VG Fmt Attr PSize PFree /dev/sda VolumeGroupName lvm2 a-- 28.87g 28.87g /dev/sdd VolumeGroupName lvm2 a-- 1.88g 1.88g
# pvs PV VG Fmt Attr PSize PFree /dev/sda VolumeGroupName lvm2 a-- 28.87g 28.87g /dev/sdd VolumeGroupName lvm2 a-- 1.88g 1.88gCopy to Clipboard Copied! Toggle word wrap Toggle overflow
67.3.5. 合并 LVM 卷组 复制链接链接已复制到粘贴板!
您可以使用 vgmerge 命令将两个现有的卷组(VG)合并。源卷将被合并到目标卷中。
先决条件
- 管理访问权限.
-
lvm2软件包已安装。 - 创建一个或多个物理卷。有关创建物理卷的更多信息,请参阅 创建 LVM 物理卷。
- 创建两个或多个卷组。有关创建卷组的详情,请参考 第 67.3.1 节 “创建 LVM 卷组”。
流程
列出并识别您要合并的 VG:
vgs VG #PV #LV #SN Attr VSize VFree VolumeGroupName1 1 0 0 wz--n- 28.87g 28.87g VolumeGroupName2 1 0 0 wz--n- 1.88g 1.88g
# vgs VG #PV #LV #SN Attr VSize VFree VolumeGroupName1 1 0 0 wz--n- 28.87g 28.87g VolumeGroupName2 1 0 0 wz--n- 1.88g 1.88gCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将源 VG 合并到目标 VG 中:
vgmerge VolumeGroupName2 VolumeGroupName1
# vgmerge VolumeGroupName2 VolumeGroupName1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName2 替换为源 VG 的名称。将 VolumeGroupName1 替换为目标 VG 的名称。
验证
验证 VG 现在是否包含新 PV:
vgs VG #PV #LV #SN Attr VSize VFree VolumeGroupName1 2 0 0 wz--n- 30.75g 30.75g
# vgs VG #PV #LV #SN Attr VSize VFree VolumeGroupName1 2 0 0 wz--n- 30.75g 30.75gCopy to Clipboard Copied! Toggle word wrap Toggle overflow
67.3.6. 从卷组中删除物理卷 复制链接链接已复制到粘贴板!
要从卷组(VG)中删除未使用的物理卷(PV),请使用 vgreduce 命令。vgreduce 命令通过删除一个或多个空物理卷来缩小卷组的容量。这样就可以使不同的卷组自由使用那些物理卷,或者将其从系统中删除。
流程
如果物理卷仍在使用,请将数据从同一卷组迁移到另一个物理卷中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果现有卷组中的其他物理卷上没有足够的空闲扩展:
从 /dev/vdb4 创建一个新物理卷:
pvcreate /dev/vdb4 Physical volume "/dev/vdb4" successfully created
# pvcreate /dev/vdb4 Physical volume "/dev/vdb4" successfully createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将新创建的物理卷添加到卷组中:
vgextend VolumeGroupName /dev/vdb4 Volume group "VolumeGroupName" successfully extended
# vgextend VolumeGroupName /dev/vdb4 Volume group "VolumeGroupName" successfully extendedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将数据从 /dev/vdb3 移到 /dev/vdb4 中 :
pvmove /dev/vdb3 /dev/vdb4 /dev/vdb3: Moved: 33.33% /dev/vdb3: Moved: 100.00%
# pvmove /dev/vdb3 /dev/vdb4 /dev/vdb3: Moved: 33.33% /dev/vdb3: Moved: 100.00%Copy to Clipboard Copied! Toggle word wrap Toggle overflow
从卷组中删除物理卷 /dev/vdb3:
vgreduce VolumeGroupName /dev/vdb3 Removed "/dev/vdb3" from volume group "VolumeGroupName"
# vgreduce VolumeGroupName /dev/vdb3 Removed "/dev/vdb3" from volume group "VolumeGroupName"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证 /dev/vdb3 物理卷是否已从 VolumeGroupName 卷组中删除:
pvs PV VG Fmt Attr PSize PFree Used /dev/vdb1 VolumeGroupName lvm2 a-- 1020.00m 0 1020.00m /dev/vdb2 VolumeGroupName lvm2 a-- 1020.00m 0 1020.00m /dev/vdb3 lvm2 a-- 1020.00m 1008.00m 12.00m
# pvs PV VG Fmt Attr PSize PFree Used /dev/vdb1 VolumeGroupName lvm2 a-- 1020.00m 0 1020.00m /dev/vdb2 VolumeGroupName lvm2 a-- 1020.00m 0 1020.00m /dev/vdb3 lvm2 a-- 1020.00m 1008.00m 12.00mCopy to Clipboard Copied! Toggle word wrap Toggle overflow
67.3.7. 分割 LVM 卷组 复制链接链接已复制到粘贴板!
如果在物理卷中有足够的空闲空间,就可在不添加新磁盘的情况下创建新的卷组。
在初始设置中,卷组 VolumeGroupName1 由 /dev/vdb1、/dev/vdb2 和 /dev/vdb3 组成。完成此流程后,卷组 VolumeGroupName1 将包含 /dev/vdb1 和 /dev/vdb2,第二个卷组 VolumeGroupName2 将包含 /dev/vdb3。
先决条件
-
卷组中有足够的空间。使用
vgscan命令确定卷组中当前有多少可用空间。 -
根据现有物理卷中的可用容量,使用
pvmove命令将所有使用的物理区块移动到其他物理卷。如需更多信息,请参阅从卷组中删除物理卷。
流程
将现有卷组 VolumeGroupName1 分成新卷组 VolumeGroupName2 :
vgsplit VolumeGroupName1 VolumeGroupName2 /dev/vdb3 Volume group "VolumeGroupName2" successfully split from "VolumeGroupName1"
# vgsplit VolumeGroupName1 VolumeGroupName2 /dev/vdb3 Volume group "VolumeGroupName2" successfully split from "VolumeGroupName1"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您使用现有卷组创建了逻辑卷,请使用以下命令取消激活逻辑卷:
lvchange -a n /dev/VolumeGroupName1/LogicalVolumeName
# lvchange -a n /dev/VolumeGroupName1/LogicalVolumeNameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 查看两个卷组的属性:
vgs VG #PV #LV #SN Attr VSize VFree VolumeGroupName1 2 1 0 wz--n- 34.30G 10.80G VolumeGroupName2 1 0 0 wz--n- 17.15G 17.15G
# vgs VG #PV #LV #SN Attr VSize VFree VolumeGroupName1 2 1 0 wz--n- 34.30G 10.80G VolumeGroupName2 1 0 0 wz--n- 17.15G 17.15GCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证新创建的卷组 VolumeGroupName2 是否由 /dev/vdb3 物理卷组成:
pvs PV VG Fmt Attr PSize PFree Used /dev/vdb1 VolumeGroupName1 lvm2 a-- 1020.00m 0 1020.00m /dev/vdb2 VolumeGroupName1 lvm2 a-- 1020.00m 0 1020.00m /dev/vdb3 VolumeGroupName2 lvm2 a-- 1020.00m 1008.00m 12.00m
# pvs PV VG Fmt Attr PSize PFree Used /dev/vdb1 VolumeGroupName1 lvm2 a-- 1020.00m 0 1020.00m /dev/vdb2 VolumeGroupName1 lvm2 a-- 1020.00m 0 1020.00m /dev/vdb3 VolumeGroupName2 lvm2 a-- 1020.00m 1008.00m 12.00mCopy to Clipboard Copied! Toggle word wrap Toggle overflow
67.3.8. 将卷组移动到另一个系统中 复制链接链接已复制到粘贴板!
您可以使用以下命令将整个 LVM 卷组(VG)移到另一个系统中:
vgexport- 在现有系统上使用此命令使系统无法访问不活跃的 VG。一旦 VG 无法访问,您可以分离其物理卷(PV)。
vgimport- 在其他系统上使用以下命令使在旧系统中不活跃的 VG 在新系统中可访问。
先决条件
- 没有用户正在访问您要移动的卷组中活动卷上的文件。
流程
卸载 LogicalVolumeName 逻辑卷:
umount /dev/mnt/LogicalVolumeName
# umount /dev/mnt/LogicalVolumeNameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 停用激活卷组中的所有逻辑卷,这可防止卷组上的任何进一步活动:
vgchange -an VolumeGroupName vgchange -- volume group "VolumeGroupName" successfully deactivated
# vgchange -an VolumeGroupName vgchange -- volume group "VolumeGroupName" successfully deactivatedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 导出卷组,以防止其被您要删除它的系统访问:
vgexport VolumeGroupName vgexport -- volume group "VolumeGroupName" successfully exported
# vgexport VolumeGroupName vgexport -- volume group "VolumeGroupName" successfully exportedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 查看导出的卷组:
pvscan PV /dev/sda1 is in exported VG VolumeGroupName [17.15 GB / 7.15 GB free] PV /dev/sdc1 is in exported VG VolumeGroupName [17.15 GB / 15.15 GB free] PV /dev/sdd1 is in exported VG VolumeGroupName [17.15 GB / 15.15 GB free] ...
# pvscan PV /dev/sda1 is in exported VG VolumeGroupName [17.15 GB / 7.15 GB free] PV /dev/sdc1 is in exported VG VolumeGroupName [17.15 GB / 15.15 GB free] PV /dev/sdd1 is in exported VG VolumeGroupName [17.15 GB / 15.15 GB free] ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 关闭您的系统,拔出组成卷组的磁盘,并将其连接到新系统。
将磁盘插入新系统,并导入卷组使其可以被新系统访问:
vgimport VolumeGroupName
# vgimport VolumeGroupNameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您可以使用
vgimport命令的--force参数导入缺少物理卷的卷组,然后运行vgreduce --removemissing命令。激活卷组:
vgchange -ay VolumeGroupName
# vgchange -ay VolumeGroupNameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 挂载文件系统使其可使用:
mkdir -p /mnt/VolumeGroupName/users mount /dev/VolumeGroupName/users /mnt/VolumeGroupName/users
# mkdir -p /mnt/VolumeGroupName/users # mount /dev/VolumeGroupName/users /mnt/VolumeGroupName/usersCopy to Clipboard Copied! Toggle word wrap Toggle overflow
其他资源
-
您系统上的
vgimport (8),vgexport (8)和vgchange (8)手册页
67.3.9. 删除 LVM 卷组 复制链接链接已复制到粘贴板!
您可以使用 vgremove 命令删除现有卷组。只有不包含逻辑卷的卷组才能被删除。
先决条件
- 管理访问权限.
流程
确定卷组不包含逻辑卷:
vgs -o vg_name,lv_count VolumeGroupName VG #LV VolumeGroupName 0
# vgs -o vg_name,lv_count VolumeGroupName VG #LV VolumeGroupName 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称。
删除卷组:
vgremove VolumeGroupName
# vgremove VolumeGroupNameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称。
67.3.10. 在集群环境中删除 LVM 卷组 复制链接链接已复制到粘贴板!
在集群环境中,LVM 使用 lockspace <qualifier> 协调对在多个机器之间共享的卷组的访问。在删除卷组前您必须停止 lockspace,以确保在删除过程中没有其他节点尝试访问或修改它。
先决条件
- 管理访问权限.
- 卷组没有包含逻辑卷。
流程
确定卷组不包含逻辑卷:
vgs -o vg_name,lv_count VolumeGroupName VG #LV VolumeGroupName 0
# vgs -o vg_name,lv_count VolumeGroupName VG #LV VolumeGroupName 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称。
停止所有节点上的
lockspace,但您要删除卷组的节点除外:vgchange --lockstop VolumeGroupName
# vgchange --lockstop VolumeGroupNameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称,并等待锁停止。
删除卷组:
vgremove VolumeGroupName
# vgremove VolumeGroupNameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称。
67.4. 管理 LVM 逻辑卷 复制链接链接已复制到粘贴板!
逻辑卷是文件系统、数据库或应用可以使用的虚拟块存储设备。要创建 LVM 逻辑卷,物理卷(PV)合并为一个卷组(VG)。这会创建一个磁盘空间池,用于分配 LVM 逻辑卷(LV)。
67.4.1. 逻辑卷功能的概述 复制链接链接已复制到粘贴板!
使用逻辑卷管理器(LVM),您可以以一种传统分区方案无法提供的灵活、高效的方式管理磁盘存储。以下是用于存储管理和优化的重要的 LVM 功能的概述。
- 级联
- 级联涉及将一个或多个物理卷中的空间合并成一个逻辑卷,来有效地合并物理存储。
- 条带
- 条带通过将数据分布到多个物理卷上来优化数据 I/O 效率。这个方法通过允许并行 I/O 操作提高了顺序读写的性能。
- RAID
- LVM 支持 RAID 0、1、4、5、6 和 10。当您创建 RAID 逻辑卷时,LVM 会创建一个元数据子卷,它是阵列中的每个数据或奇偶校验子卷的大小的一个区块。
- 精简置备
- 精简配置允许创建比可用物理存储大的逻辑卷。通过精简配置,系统可以根据实际使用情况,而不是预先分配预定的量来动态分配存储。
- 快照
- 使用 LVM 快照,您可以创建逻辑卷的时间点副本。快照开始为空。当原始逻辑卷上发生更改时,快照会通过写时复制(CoW)捕获更改前的状态,并仅随着变化而增长,以保留原始逻辑卷的状态。
- Caching
- LVM 支持在较慢的块设备中使用快速块设备(比如 SSD 驱动器)作为写入或者写入缓存。用户可以创建缓存逻辑卷来提高其现有逻辑卷的性能,或者创建由小而快速的设备组成的新缓存逻辑卷,再加上一个大型、较慢的设备。
67.4.2. 管理逻辑卷快照 复制链接链接已复制到粘贴板!
快照是一个在特定时间点镜像另一个 LV 的内容的逻辑卷(LV)。
67.4.2.1. 了解逻辑卷快照 复制链接链接已复制到粘贴板!
当您创建快照时,您在创建一个作为另一个 LV 的时间点副本的新 LV。最初,快照 LV 不包含实际数据。而它会在创建快照时引用原始 LV 的数据块。
定期监控快照的存储使用情况非常重要。如果快照达到其分配空间的 100%,则它将无效。
必须在完全填满快照之前扩展快照。这可以通过使用 lvextend 命令手动完成,或者通过 /etc/lvm/lvm.conf 文件自动完成。
- 厚 LV 快照
- 当原始 LV 上的数据发生变化时,写时复制(CoW)系统会在更改之前将原始数据,未更改的数据复制到快照。这样,快照的大小仅在更改发生时增长,在创建快照时存储原始卷的状态。后快照是一种 LV,其需要您预先分配一些存储空间。这个数量以后可以进行扩展或减少,但您应该考虑您要对原始 LV 进行何种类型的更改。这帮助您避免由于分配太多空间而浪费资源,或者由于分配的太少而频繁增加快照大小。
- 精简 LV 快照
精简快照是从现有精简置备的 LV 创建的一种 LV 。精简快照不需要预先分配额外的空间。最初,原始 LV 及其快照共享同样的数据块。当对原始 LV 进行更改时,它会将新数据写到不同的块,而快照继续引用原始块,并在创建快照时保留 LV 数据的时间点视图。
精简配置是一种通过按需分配磁盘空间来优化和高效管理存储的方法。这意味着您可以创建多个 LV,而无需为每个 LV 预先分配大量存储。存储在精简池中的所有 LV 中共享,使精简池更有效地使用资源。精简池按需为其 LV 分配空间。
- 在厚和精简 LV 快照之间进行选择
- 厚或精简 LV 快照之间的选择直接由您在执行的快照的 LV 的类型决定。如果您的原始 LV 是厚 LV,则您的快照将是厚的。如果您的原始 LV 是精简的,则您的快照将是精简的。
67.4.2.2. 管理厚逻辑卷快照 复制链接链接已复制到粘贴板!
当您创建厚 LV 快照时,务必要考虑存储要求和快照的预期寿命。您需要根据原始卷的预期变化来为其分配足够的存储。在其预期的寿命内,快照必须有足够的大小来捕获更改,但它不能超过原始 LV 的大小。如果您预期更改率较低,则 10%-15% 的快照大小可能就足够了。对于高更改率的 LV,您可能需要分配 30% 或更多的空间。
必须在完全填满快照之前扩展快照。如果快照达到其分配空间的 100%,则其变为无效。您可以使用 lvs -o lv_name,data_percent,origin 命令监控快照容量。
67.4.2.2.1. 创建厚逻辑卷快照 复制链接链接已复制到粘贴板!
您可以使用 lvcreate 命令创建厚 LV 快照。
先决条件
- 管理访问权限.
- 您已创建了一个物理卷。如需更多信息,请参阅 创建 LVM 物理卷。
- 您已创建了一个卷组。如需更多信息,请参阅创建 LVM 卷组。
- 您已创建了一个逻辑卷。如需更多信息,请参阅 创建逻辑卷。
流程
确定您要创建快照的 LV:
lvs -o vg_name,lv_name,lv_size VG LV LSize VolumeGroupName LogicalVolumeName 10.00g
# lvs -o vg_name,lv_name,lv_size VG LV LSize VolumeGroupName LogicalVolumeName 10.00gCopy to Clipboard Copied! Toggle word wrap Toggle overflow 快照的大小不能超过 LV 的大小。
创建厚 LV 快照:
lvcreate --snapshot --size SnapshotSize --name SnapshotName VolumeGroupName/LogicalVolumeName
# lvcreate --snapshot --size SnapshotSize --name SnapshotName VolumeGroupName/LogicalVolumeNameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用您要为快照分配的大小(如 10G)替换 SnapshotSize。使用您要给快照逻辑卷取的名称替换 SnapshotName。使用包含原始逻辑卷的卷组的名称替换 VolumeGroupName。使用您要为其创建快照的逻辑卷的名称替换 LogicalVolumeName。
验证
验证快照是否已创建:
lvs -o lv_name,origin LV Origin LogicalVolumeName SnapshotName LogicalVolumeName
# lvs -o lv_name,origin LV Origin LogicalVolumeName SnapshotName LogicalVolumeNameCopy to Clipboard Copied! Toggle word wrap Toggle overflow
67.4.2.2.2. 手动扩展逻辑卷快照 复制链接链接已复制到粘贴板!
如果快照达到其分配空间的 100%,则其变为无效。必须在完全填满快照之前扩展快照。这可以通过使用 lvextend 命令手动完成此操作。
先决条件
- 管理访问权限.
流程
列出快照的卷组、逻辑卷、源卷、它们的使用率百分比和大小:
lvs -o vg_name,lv_name,origin,data_percent,lv_size VG LV Origin Data% LSize VolumeGroupName LogicalVolumeName 10.00g VolumeGroupName SnapshotName LogicalVolumeName 82.00 5.00g
# lvs -o vg_name,lv_name,origin,data_percent,lv_size VG LV Origin Data% LSize VolumeGroupName LogicalVolumeName 10.00g VolumeGroupName SnapshotName LogicalVolumeName 82.00 5.00gCopy to Clipboard Copied! Toggle word wrap Toggle overflow 扩展厚配置快照:
lvextend --size +AdditionalSize VolumeGroupName/SnapshotName
# lvextend --size +AdditionalSize VolumeGroupName/SnapshotNameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用要添加到快照中的空间(如 +1G)替换 AdditionalSize。将 VolumeGroupName 替换为卷组的名称。使用快照的名称替换 SnapshotName。
验证
验证 LV 是否已扩展:
lvs -o vg_name,lv_name,origin,data_percent,lv_size VG LV Origin Data% LSize VolumeGroupName LogicalVolumeName 10.00g VolumeGroupName SnapshotName LogicalVolumeName 68.33 6.00g
# lvs -o vg_name,lv_name,origin,data_percent,lv_size VG LV Origin Data% LSize VolumeGroupName LogicalVolumeName 10.00g VolumeGroupName SnapshotName LogicalVolumeName 68.33 6.00gCopy to Clipboard Copied! Toggle word wrap Toggle overflow
67.4.2.2.3. 自动扩展厚逻辑卷快照 复制链接链接已复制到粘贴板!
如果快照达到其分配空间的 100%,则其变为无效。必须在完全填满快照之前扩展快照。这可以自动完成。
先决条件
- 管理访问权限.
流程
-
以
root用户身份,在您选择的编辑器中打开/etc/lvm/lvm.conf文件。 取消
snapshot_autoextend_threshold和snapshot_autoextend_percent行的注释,并将每个参数设置为所需的值:snapshot_autoextend_threshold = 70 snapshot_autoextend_percent = 20
snapshot_autoextend_threshold = 70 snapshot_autoextend_percent = 20Copy to Clipboard Copied! Toggle word wrap Toggle overflow snapshot_autoextend_threshold决定 LVM 开始自动扩展快照的百分比。例如,将参数设置为 70 表示 LVM 将在达到 70% 容量时尝试扩展快照。snapshot_autoextend_percent指定快照在达到阈值时应扩展的百分比。例如,将参数设置为 20 表示快照将增加其当前大小的 20%。- 保存更改并退出编辑器。
重启
lvm2-monitor:systemctl restart lvm2-monitor
# systemctl restart lvm2-monitorCopy to Clipboard Copied! Toggle word wrap Toggle overflow
67.4.2.2.4. 合并厚逻辑卷快照 复制链接链接已复制到粘贴板!
您可以将厚 LV 快照合并到创建快照的原始逻辑卷中。合并过程意味着原始 LV 恢复回创建快照时所处的状态。合并完成后,快照被删除。
如果原始 LV 和快照 LV 中的任何一个处于活动状态,则它们之间的合并会被推迟。只有在 LV 被重新激活且没有使用时,才会继续。
先决条件
- 管理访问权限.
流程
列出 LV、其卷组及其路径:
lvs -o lv_name,vg_name,lv_path LV VG Path LogicalVolumeName VolumeGroupName /dev/VolumeGroupName/LogicalVolumeName SnapshotName VolumeGroupName /dev/VolumeGroupName/SnapshotName
# lvs -o lv_name,vg_name,lv_path LV VG Path LogicalVolumeName VolumeGroupName /dev/VolumeGroupName/LogicalVolumeName SnapshotName VolumeGroupName /dev/VolumeGroupName/SnapshotNameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查挂载 LV 的位置:
findmnt -o SOURCE,TARGET /dev/VolumeGroupName/LogicalVolumeName findmnt -o SOURCE,TARGET /dev/VolumeGroupName/SnapshotName
# findmnt -o SOURCE,TARGET /dev/VolumeGroupName/LogicalVolumeName # findmnt -o SOURCE,TARGET /dev/VolumeGroupName/SnapshotNameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 /dev/VolumeGroupName/LogicalVolumeName 替换为逻辑卷的路径。将 /dev/VolumeGroupName/SnapshotName 替换为快照的路径。
卸载 LV:
umount /LogicalVolume/MountPoint umount /Snapshot/MountPoint
# umount /LogicalVolume/MountPoint # umount /Snapshot/MountPointCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 /LogicalVolume/MountPoint 替换为逻辑卷的挂载点。将 /Snapshot/MountPoint 替换为您的快照的挂载点。
停用 LV:
lvchange --activate n VolumeGroupName/LogicalVolumeName lvchange --activate n VolumeGroupName/SnapshotName
# lvchange --activate n VolumeGroupName/LogicalVolumeName # lvchange --activate n VolumeGroupName/SnapshotNameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称。使用逻辑卷的名称替换 LogicalVolumeName。将 SnapshotName 替换为您的快照的名称。
将厚 LV 快照合并到原始卷中:
lvconvert --merge SnapshotName
# lvconvert --merge SnapshotNameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用快照的名称替换 SnapshotName。
激活 LV:
lvchange --activate y VolumeGroupName/LogicalVolumeName
# lvchange --activate y VolumeGroupName/LogicalVolumeNameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称。使用逻辑卷的名称替换 LogicalVolumeName。
挂载 LV:
umount /LogicalVolume/MountPoint
# umount /LogicalVolume/MountPointCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 /LogicalVolume/MountPoint 替换为逻辑卷的挂载点。
验证
验证快照是否已删除:
lvs -o lv_name
# lvs -o lv_nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow
67.4.2.3. 管理精简逻辑卷快照 复制链接链接已复制到粘贴板!
当存储效率是优先考虑因素时,精简置备是合适的。存储空间动态分配减少了初始存储成本,并最大限度地利用了可用的存储资源。在具有动态工作负载或存储随时间而增长的环境中,精简配置允许灵活性。它使存储系统能够适应变化的需求,而无需预先分配大量的存储空间。使用动态分配时,有可能会过度置备,其中所有 LV 的总大小可能会超过精简池的物理大小,假设所有空间不会被同时使用。
67.4.2.3.1. 创建精简逻辑卷快照 复制链接链接已复制到粘贴板!
您可以使用 lvcreate 命令创建精简 LV 快照。在创建精简 LV 快照时,避免指定快照大小。包含 size 参数会导致创建厚快照。
先决条件
- 管理访问权限.
- 您已创建了一个物理卷。如需更多信息,请参阅 创建 LVM 物理卷。
- 您已创建了一个卷组。如需更多信息,请参阅创建 LVM 卷组。
- 您已创建了一个逻辑卷。如需更多信息,请参阅 创建逻辑卷。
流程
确定您要创建快照的 LV:
lvs -o lv_name,vg_name,pool_lv,lv_size LV VG Pool LSize PoolName VolumeGroupName 152.00m ThinVolumeName VolumeGroupName PoolName 100.00m
# lvs -o lv_name,vg_name,pool_lv,lv_size LV VG Pool LSize PoolName VolumeGroupName 152.00m ThinVolumeName VolumeGroupName PoolName 100.00mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建精简 LV 快照:
lvcreate --snapshot --name SnapshotName VolumeGroupName/ThinVolumeName
# lvcreate --snapshot --name SnapshotName VolumeGroupName/ThinVolumeNameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用您要给快照逻辑卷取的名称替换 SnapshotName。使用包含原始逻辑卷的卷组的名称替换 VolumeGroupName。使用您要为其创建快照的精简逻辑卷的名称替换 ThinVolumeName。
验证
验证快照是否已创建:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.4.2.3.2. 合并精简逻辑卷快照 复制链接链接已复制到粘贴板!
您可以将精简 LV 快照合并到创建快照的原始逻辑卷中。合并过程意味着原始 LV 恢复回创建快照时所处的状态。合并完成后,快照被删除。
先决条件
- 管理访问权限.
流程
列出 LV、其卷组及其路径:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查原始 LV 挂载的位置:
findmnt -o SOURCE,TARGET /dev/VolumeGroupName/ThinVolumeName
# findmnt -o SOURCE,TARGET /dev/VolumeGroupName/ThinVolumeNameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName/ThinVolumeName 替换为逻辑卷的路径。
卸载 LV:
umount /ThinLogicalVolume/MountPoint
# umount /ThinLogicalVolume/MountPointCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 /ThinLogicalVolume/MountPoint 替换为逻辑卷的挂载点。将 /ThinSnapshot/MountPoint 替换为您的快照的挂载点。
停用 LV:
lvchange --activate n VolumeGroupName/ThinLogicalVolumeName
# lvchange --activate n VolumeGroupName/ThinLogicalVolumeNameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称。将 ThinLogicalVolumeName 替换为逻辑卷的名称。
将精简 LV 快照合并到原始逻辑卷中:
lvconvert --mergethin VolumeGroupName/ThinSnapshotName
# lvconvert --mergethin VolumeGroupName/ThinSnapshotNameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称。将 ThinSnapshotName 替换为快照的名称。
挂载 LV:
umount /ThinLogicalVolume/MountPoint
# umount /ThinLogicalVolume/MountPointCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 /ThinLogicalVolume/MountPoint 替换为逻辑卷的挂载点。
验证
验证原始 LV 是否已合并:
lvs -o lv_name
# lvs -o lv_nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow
67.4.3. 创建 RAID0 条带化逻辑卷 复制链接链接已复制到粘贴板!
RAID0 逻辑卷以条的大小为单位,将逻辑卷数据分散到多个数据子卷中。下面的步骤创建了一个名为 mylv 的 LVM RAID0 逻辑卷,该逻辑卷在磁盘间条状分布数据。
先决条件
- 您已创建了三个或者多个物理卷。有关创建物理卷的更多信息,请参阅 创建 LVM 物理卷。
- 您已创建了卷组。如需更多信息,请参阅创建 LVM 卷组。
流程
从现有卷组中创建 RAID0 逻辑卷。以下命令从卷组 myvg 中创建 RAID0 卷 mylv,大小为 2G,有三个条带,条带大小为 4kB :
lvcreate --type raid0 -L 2G --stripes 3 --stripesize 4 -n mylv my_vg Rounding size 2.00 GiB (512 extents) up to stripe boundary size 2.00 GiB(513 extents). Logical volume "mylv" created.
# lvcreate --type raid0 -L 2G --stripes 3 --stripesize 4 -n mylv my_vg Rounding size 2.00 GiB (512 extents) up to stripe boundary size 2.00 GiB(513 extents). Logical volume "mylv" created.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 RAID0 逻辑卷中创建文件系统。以下命令在逻辑卷中创建 ext4 文件系统:
mkfs.ext4 /dev/my_vg/mylv
# mkfs.ext4 /dev/my_vg/mylvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 挂载逻辑卷并报告文件系统磁盘空间使用情况:
mount /dev/my_vg/mylv /mnt df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/my_vg-mylv 2002684 6168 1875072 1% /mnt
# mount /dev/my_vg/mylv /mnt # df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/my_vg-mylv 2002684 6168 1875072 1% /mntCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
查看创建的 RAID0 剥离的逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.4.4. 从逻辑卷中删除磁盘 复制链接链接已复制到粘贴板!
这个步骤描述了如何从现有逻辑卷中删除磁盘,替换磁盘或者将磁盘用作不同卷的一部分。
要删除磁盘,您必须首先将 LVM 物理卷中的扩展移动到不同的磁盘或者一组磁盘中。
流程
在使用 LV 时查看物理卷的已用和可用空间:
pvs -o+pv_used PV VG Fmt Attr PSize PFree Used /dev/vdb1 myvg lvm2 a-- 1020.00m 0 1020.00m /dev/vdb2 myvg lvm2 a-- 1020.00m 0 1020.00m /dev/vdb3 myvg lvm2 a-- 1020.00m 1008.00m 12.00m
# pvs -o+pv_used PV VG Fmt Attr PSize PFree Used /dev/vdb1 myvg lvm2 a-- 1020.00m 0 1020.00m /dev/vdb2 myvg lvm2 a-- 1020.00m 0 1020.00m /dev/vdb3 myvg lvm2 a-- 1020.00m 1008.00m 12.00mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将数据移到其他物理卷中:
如果现有卷组中的其他物理卷中有足够的可用扩展,请使用以下命令移动数据:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果现有卷组中的其他物理卷上没有足够的可用扩展,请使用以下命令来添加新物理卷,使用新创建的物理卷扩展卷组,并将数据移动到此物理卷中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
删除物理卷:
vgreduce myvg /dev/vdb3 Removed "/dev/vdb3" from volume group "myvg"
# vgreduce myvg /dev/vdb3 Removed "/dev/vdb3" from volume group "myvg"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果逻辑卷包含失败的物理卷,您就无法使用该逻辑卷。要从卷组中删除缺少的物理卷,如果缺少的物理卷上没有分配逻辑卷,您可以使用
vgreduce命令的--removemissing参数:vgreduce --removemissing myvg
# vgreduce --removemissing myvgCopy to Clipboard Copied! Toggle word wrap Toggle overflow
67.4.5. 使用 Web 控制台更改卷组中的物理驱动器 复制链接链接已复制到粘贴板!
您可以使用 RHEL 8 web 控制台更改卷组中的驱动器。
先决条件
- 用于替换旧的或有问题的驱动器的新物理驱动器。
- 该配置期望物理驱动器在一个卷组中进行组织。
67.4.5.1. 在 web 控制台中的卷组中添加物理驱动器 复制链接链接已复制到粘贴板!
您可以使用 RHEL 8 web 控制台在现有逻辑卷中添加新物理驱动器或者其他类型的卷。
先决条件
- 您已安装了 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
-
cockpit-storaged软件包已安装在您的系统上。 - 必须创建一个卷组。
- 连接到机器的新驱动器。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 Web 控制台的日志记录。
- 点 Storage。
- 在 Storage 表中,点您要向其添加物理驱动器的卷组。
- 在 LVM2 volume group 页面中,单击 。
- 在 Add Disks 对话框中,选择首选的驱动器并点 。
验证
- 在 LVM2 volume group 页面中,检查 Physical volumes 部分,以验证卷组中的新物理驱动器是否可用。
67.4.5.2. 在 web 控制台中,从卷组中删除物理驱动器 复制链接链接已复制到粘贴板!
如果逻辑卷包含多个物理驱动器,您可以在线删除其中一个物理驱动器。
系统会在删除过程中自动将驱动器中的所有数据移至其他驱动器。请注意,这可能需要一些时间。
web 控制台也会验证删除物理驱动器是否会有足够的空间。
先决条件
- 已安装 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
-
cockpit-storaged软件包已安装在您的系统上。 - 一个连接了多个物理驱动器的卷组。
流程
- 登录到 RHEL 8 web 控制台。
- 点 Storage。
- 在 Storage 表中,点您要向其添加物理驱动器的卷组。
- 在 LVM2 volume group 页面中,滚动到 Physical volumes 部分。
- 点您要删除的物理卷旁边的菜单按钮 。
从下拉菜单中选择 。
RHEL 8 web 控制台会验证逻辑卷是否有足够可用空间来删除磁盘。如果没有可用空间来传输数据,则无法删除磁盘,您必须首先添加一个磁盘来增加卷组的容量。详情请参阅 在 web 控制台中向逻辑卷添加物理驱动器。
67.4.6. 删除逻辑卷 复制链接链接已复制到粘贴板!
您可以使用 lvremove 命令删除现有逻辑卷,包括快照。
先决条件
- 管理访问权限.
流程
列出逻辑卷及其路径:
lvs -o lv_name,lv_path LV Path LogicalVolumeName /dev/VolumeGroupName/LogicalVolumeName
# lvs -o lv_name,lv_path LV Path LogicalVolumeName /dev/VolumeGroupName/LogicalVolumeNameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查挂载逻辑卷的位置:
findmnt -o SOURCE,TARGET /dev/VolumeGroupName/LogicalVolumeName SOURCE TARGET /dev/mapper/VolumeGroupName-LogicalVolumeName /MountPoint
# findmnt -o SOURCE,TARGET /dev/VolumeGroupName/LogicalVolumeName SOURCE TARGET /dev/mapper/VolumeGroupName-LogicalVolumeName /MountPointCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 /dev/VolumeGroupName/LogicalVolumeName 替换为逻辑卷的路径。
卸载逻辑卷:
umount /MountPoint
# umount /MountPointCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 /MountPoint 替换为您的逻辑卷的挂载点。
删除逻辑卷:
lvremove VolumeGroupName/LogicalVolumeName
# lvremove VolumeGroupName/LogicalVolumeNameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName/LogicalVolumeName 替换为逻辑卷的路径。
67.4.7. 使用 RHEL 系统角色管理 LVM 逻辑卷 复制链接链接已复制到粘贴板!
使用 storage 角色执行以下任务:
- 在由多个磁盘组成的卷组中创建 LVM 逻辑卷。
- 在逻辑卷中创建一个带给定标签的 ext4 文件系统。
- 永久挂载 ext4 文件系统。
先决条件
-
包含
storage角色的 Ansible playbook
67.4.7.1. 使用 storage RHEL 系统角色创建或者重新定义逻辑卷大小 复制链接链接已复制到粘贴板!
使用 storage 角色执行以下任务:
- 在由多个磁盘组成的卷组中创建 LVM 逻辑卷
- 在 LVM 上重新定义现有文件系统大小
- 以池总大小的百分比表示 LVM 卷大小
如果卷组不存在,则角色会创建它。如果逻辑卷存在于卷组中,如果大小与 playbook 中指定的内容不匹配,则会调整大小。
如果您要缩小逻辑卷,为了避免数据丢失,您必须确保该逻辑卷中的文件系统没有使用正在缩小的逻辑卷中的空间。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括以下内容:
大小:< ;size>- 您必须使用单位(如 GiB)或百分比(例如 60%)来指定大小。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证指定的卷是否已创建或重新定义到请求的大小:
ansible managed-node-01.example.com -m command -a 'lvs myvg'
# ansible managed-node-01.example.com -m command -a 'lvs myvg'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.4.8. 使用 storage RHEL 系统角色调整 LVM 上现有文件系统的大小 复制链接链接已复制到粘贴板!
您可以使用 storage RHEL 系统角色使用文件系统重新定义 LVM 逻辑卷大小。
如果您要缩小的逻辑卷有一个文件系统,为了防止数据丢失,您必须确保文件系统没有使用正在缩小的逻辑卷中的空间。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此 playbook 调整以下现有文件系统的大小:
-
挂载在
/opt/mount1上的mylv1卷上的 Ext4 文件系统,大小调整为 10 GiB。 -
挂载在
/opt/mount2上的mylv2卷上的 Ext4 文件系统,大小调整为 50 GiB。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。-
挂载在
验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证逻辑卷是否已调整为请求的大小:
ansible managed-node-01.example.com -m command -a 'lvs myvg'
# ansible managed-node-01.example.com -m command -a 'lvs myvg'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用文件系统工具验证文件系统大小。例如,对于 ext4,通过乘以块数和 dumpe2fs 工具报告的块大小来计算文件系统大小:
ansible managed-node-01.example.com -m command -a 'dumpe2fs -h /dev/myvg/mylv | grep -E "Block count|Block size"'
# ansible managed-node-01.example.com -m command -a 'dumpe2fs -h /dev/myvg/mylv | grep -E "Block count|Block size"'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.5. 修改逻辑卷的大小 复制链接链接已复制到粘贴板!
创建逻辑卷后,您可以修改卷的大小。
67.5.1. 扩展条状逻辑卷 复制链接链接已复制到粘贴板!
您可以使用 lvextend 命令及所需大小来扩展条状逻辑卷(LV)。
先决条件
- 您在组成卷组(VG)的底层物理卷(PV)上有足够的空闲空间来支持条带。
流程
可选:显示卷组:
vgs VG #PV #LV #SN Attr VSize VFree myvg 2 1 0 wz--n- 271.31G 271.31G
# vgs VG #PV #LV #SN Attr VSize VFree myvg 2 1 0 wz--n- 271.31G 271.31GCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:使用卷组中的整个空间来创建一个条带:
lvcreate -n stripe1 -L 271.31G -i 2 myvg Using default stripesize 64.00 KB Rounding up size to full physical extent 271.31 GiB
# lvcreate -n stripe1 -L 271.31G -i 2 myvg Using default stripesize 64.00 KB Rounding up size to full physical extent 271.31 GiBCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:通过添加新物理卷来扩展 myvg 卷组:
vgextend myvg /dev/sdc1 Volume group "myvg" successfully extended
# vgextend myvg /dev/sdc1 Volume group "myvg" successfully extendedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重复此步骤,根据您的条带类型和已用空间量来添加足够的物理卷。例如,对于使用整个卷组的双向条带,您需要添加至少两个物理卷。
扩展是 myvg VG 一部分的条状逻辑卷 stripe1 :
lvextend myvg/stripe1 -L 542G Using stripesize of last segment 64.00 KB Extending logical volume stripe1 to 542.00 GB Logical volume stripe1 successfully resized
# lvextend myvg/stripe1 -L 542G Using stripesize of last segment 64.00 KB Extending logical volume stripe1 to 542.00 GB Logical volume stripe1 successfully resizedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您还可以扩展 stripe1 逻辑卷,来填充 myvg 卷组中所有未分配的空间:
lvextend -l+100%FREE myvg/stripe1 Size of logical volume myvg/stripe1 changed from 1020.00 MiB (255 extents) to <2.00 GiB (511 extents). Logical volume myvg/stripe1 successfully resized.
# lvextend -l+100%FREE myvg/stripe1 Size of logical volume myvg/stripe1 changed from 1020.00 MiB (255 extents) to <2.00 GiB (511 extents). Logical volume myvg/stripe1 successfully resized.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证扩展的条状 LV 的新大小:
lvs LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert stripe1 myvg wi-ao---- 542.00 GB
# lvs LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert stripe1 myvg wi-ao---- 542.00 GBCopy to Clipboard Copied! Toggle word wrap Toggle overflow
67.6. 自定义 LVM 报告 复制链接链接已复制到粘贴板!
LVM 提供了广泛的配置和命令行选项来生成自定义报告。您可以对输出进行排序,指定单元、使用选择条件,并更新 lvm.conf 文件以自定义 LVM 报告。
67.6.1. 控制 LVM 显示的格式 复制链接链接已复制到粘贴板!
当您使用没有附加选项的 pvs、lvs 或 vgs 命令时,您会看到以默认排序顺序显示的默认字段集合。pvs 命令的默认字段包括以下信息,按物理卷名称排序:
pvs PV VG Fmt Attr PSize PFree /dev/vdb1 VolumeGroupName lvm2 a-- 17.14G 17.14G /dev/vdb2 VolumeGroupName lvm2 a-- 17.14G 17.09G /dev/vdb3 VolumeGroupName lvm2 a-- 17.14G 17.14G
# pvs
PV VG Fmt Attr PSize PFree
/dev/vdb1 VolumeGroupName lvm2 a-- 17.14G 17.14G
/dev/vdb2 VolumeGroupName lvm2 a-- 17.14G 17.09G
/dev/vdb3 VolumeGroupName lvm2 a-- 17.14G 17.14G
PV- 物理卷名称。
VG- 卷组名称。
Fmt-
物理卷的元数据格式:
lvm2或lvm1。 Attr- 物理卷的状态:(a)- 可分配或(x)- 导出。
PSize- 物理卷的大小。
PFree- 物理卷中剩余的可用空间。
显示自定义字段
要显示与默认字段不同的字段,请使用 -o 选项。下面的例子只显示物理卷的名称、大小和可用空间:
pvs -o pv_name,pv_size,pv_free PV PSize PFree /dev/vdb1 17.14G 17.14G /dev/vdb2 17.14G 17.09G /dev/vdb3 17.14G 17.14G
# pvs -o pv_name,pv_size,pv_free
PV PSize PFree
/dev/vdb1 17.14G 17.14G
/dev/vdb2 17.14G 17.09G
/dev/vdb3 17.14G 17.14G
对 LVM 显示进行排序
要根据特定条件对结果进行排序,请使用 -O 选项。以下示例按其物理卷的空闲空间以升序排序条目:
pvs -o pv_name,pv_size,pv_free -O pv_free PV PSize PFree /dev/vdb2 17.14G 17.09G /dev/vdb1 17.14G 17.14G /dev/vdb3 17.14G 17.14G
# pvs -o pv_name,pv_size,pv_free -O pv_free
PV PSize PFree
/dev/vdb2 17.14G 17.09G
/dev/vdb1 17.14G 17.14G
/dev/vdb3 17.14G 17.14G
要按降序排列结果,请使用 -O 选项和 - 字符:
pvs -o pv_name,pv_size,pv_free -O -pv_free PV PSize PFree /dev/vdb1 17.14G 17.14G /dev/vdb3 17.14G 17.14G /dev/vdb2 17.14G 17.09G
# pvs -o pv_name,pv_size,pv_free -O -pv_free
PV PSize PFree
/dev/vdb1 17.14G 17.14G
/dev/vdb3 17.14G 17.14G
/dev/vdb2 17.14G 17.09G
67.6.2. 为 LVM 显示指定单位 复制链接链接已复制到粘贴板!
您可以通过指定 LVM 显示命令的 --units 参数,以 2 或 10 为基数查看 LVM 设备的大小。请查看下表以了解所有参数:
| 单元类型 | 描述 | 可用选项 | default |
|---|---|---|---|
| 基数 2 单位 | 单位以 2 的幂(1024 的倍数)显示。 |
|
|
| 基数 10 单位 | 以 1000 的倍数显示的单位。 |
| N/A |
| 自定义单位 |
数量与 2 或 10 基数单位的组合。例如,若要以 4MB 为单位显示结果,可使用 | N/A | N/A |
如果您没有指定单位的值,则默认使用人类可读的格式(
r)。以下vgs命令以人类可读的格式显示 VG 的大小。使用最合适的单位,并且舍入指示符<显示实际大小是一个大概值,其小于 931 gibibytes。vgs myvg VG #PV #LV #SN Attr VSize VFree myvg 1 1 0 wz-n <931.00g <930.00g
# vgs myvg VG #PV #LV #SN Attr VSize VFree myvg 1 1 0 wz-n <931.00g <930.00gCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下
pvs命令以基数 2 gibibyte 单位显示/dev/vdb物理卷的输出:pvs --units g /dev/vdb PV VG Fmt Attr PSize PFree /dev/vdb myvg lvm2 a-- 931.00g 930.00g
# pvs --units g /dev/vdb PV VG Fmt Attr PSize PFree /dev/vdb myvg lvm2 a-- 931.00g 930.00gCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下
pvs命令以基数 10GB 单位显示/dev/vdb物理卷的输出:pvs --units G /dev/vdb PV VG Fmt Attr PSize PFree /dev/vdb myvg lvm2 a-- 999.65G 998.58G
# pvs --units G /dev/vdb PV VG Fmt Attr PSize PFree /dev/vdb myvg lvm2 a-- 999.65G 998.58GCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下
pvs命令以 512 字节扇区显示输出:pvs --units s PV VG Fmt Attr PSize PFree /dev/vdb myvg lvm2 a-- 1952440320S 1950343168S
# pvs --units s PV VG Fmt Attr PSize PFree /dev/vdb myvg lvm2 a-- 1952440320S 1950343168SCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以为 LVM 显示命令指定自定义单位。下面的例子以 4MB 为单位显示
pvs命令的输出:pvs --units 4m PV VG Fmt Attr PSize PFree /dev/vdb myvg lvm2 a-- 238335.00U 238079.00U
# pvs --units 4m PV VG Fmt Attr PSize PFree /dev/vdb myvg lvm2 a-- 238335.00U 238079.00UCopy to Clipboard Copied! Toggle word wrap Toggle overflow
67.6.3. 自定义 LVM 配置文件 复制链接链接已复制到粘贴板!
您可以通过编辑 lvm.conf 文件,根据具体的存储和系统要求自定义 LVM 配置。例如,您可以编辑 lvm.conf 文件来修改过滤设置、配置卷组自动激活、管理精简池或自动扩展快照。
流程
-
在您选择的编辑器中打开
lvm.conf文件。 通过取消要修改默认显示值的设置的注释并进行修改来自定义
lvm.conf文件。要自定义您在
lvs输出中看到的字段,请取消lvs_cols参数的注释并进行修改:lvs_cols="lv_name,vg_name,lv_attr"
lvs_cols="lv_name,vg_name,lv_attr"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要隐藏
pvs、vgs和lvs命令的空字段,请取消compact_output=1设置的注释:compact_output = 1
compact_output = 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要将 gigabytes 设置为
pvs、vgs和lvs命令的默认单位,请将units = "r"设置替换为units = "G":units = "G"
units = "G"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
确保已取消了
lvm.conf文件的相应部分的注释。例如,要修改lvs_cols参数,必须取消report部分的注释:report { ... }report { ... }Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
修改
lvm.conf文件后查看更改的值:lvmconfig --typeconfig diff
# lvmconfig --typeconfig diffCopy to Clipboard Copied! Toggle word wrap Toggle overflow
67.6.4. 定义 LVM 选择标准 复制链接链接已复制到粘贴板!
选择标准是 <field> <operator> <value> 形式的一组语句,它使用比较运算符来定义特定字段的值。然后,处理或显示与选择条件匹配的对象。对象可以是物理卷(PV)、卷组(VG)或逻辑卷(LV)。语句通过逻辑和分组运算符进行组合。
要定义选择标准,请使用 -S 或 --select 选项,后跟一个或多个语句。
-S 选项的工作原理是通过描述要处理的对象,而不是命名每个对象。这在处理许多对象时很有用,当搜索有复杂特征集合的对象时,很难查找和单独命名每个对象。也可以使用 -S 选项作为一种快捷方式,来避免输入许多名称。
要查看字段和可能的运算符的完整集合,请使用 lvs -S help 命令。使用任何报告或处理命令替换 lvs 来查看该命令的详情:
-
报告命令包括
pvs,vgs,lvs,pvdisplay,vgdisplay,lvdisplay和dmsetup info -c。 -
处理命令包括
pvchange,vgchange,lvchange,vgimport,vgexport,vgremove和lvremove。
使用 pvs 命令的选择条件的示例
以下
pvs命令示例只显示名称包含字符串nvme的物理卷:pvs -S name=~nvme PV Fmt Attr PSize PFree /dev/nvme2n1 lvm2 --- 1.00g 1.00g
# pvs -S name=~nvme PV Fmt Attr PSize PFree /dev/nvme2n1 lvm2 --- 1.00g 1.00gCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下
pvs命令示例只显示myvg卷组中的物理设备:pvs -S vg_name=myvg PV VG Fmt Attr PSize PFree /dev/vdb1 myvg lvm2 a-- 1020.00m 396.00m /dev/vdb2 myvg lvm2 a-- 1020.00m 896.00m
# pvs -S vg_name=myvg PV VG Fmt Attr PSize PFree /dev/vdb1 myvg lvm2 a-- 1020.00m 396.00m /dev/vdb2 myvg lvm2 a-- 1020.00m 896.00mCopy to Clipboard Copied! Toggle word wrap Toggle overflow
使用 lvs 命令的选择条件的示例
以下
lvs命令示例只显示大小大于 100m 但小于 200m 的逻辑卷:lvs -S 'size > 100m && size < 200m' LV VG Attr LSize Cpy%Sync rr myvg rwi-a-r--- 120.00m 100.00
# lvs -S 'size > 100m && size < 200m' LV VG Attr LSize Cpy%Sync rr myvg rwi-a-r--- 120.00m 100.00Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下
lvs命令示例只显示名称包含lvol和 0 到 2 之间任何数字的逻辑卷:lvs -S name=~lvol[02] LV VG Attr LSize lvol0 myvg -wi-a----- 100.00m lvol2 myvg -wi------- 100.00m
# lvs -S name=~lvol[02] LV VG Attr LSize lvol0 myvg -wi-a----- 100.00m lvol2 myvg -wi------- 100.00mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下
lvs命令示例只显示具有raid1段类型的逻辑卷:lvs -S segtype=raid1 LV VG Attr LSize Cpy%Sync rr myvg rwi-a-r--- 120.00m 100.00
# lvs -S segtype=raid1 LV VG Attr LSize Cpy%Sync rr myvg rwi-a-r--- 120.00m 100.00Copy to Clipboard Copied! Toggle word wrap Toggle overflow
高级示例
您可以将选择条件与其他选项合并。
以下
lvchange命令示例只将特定的标签mytag添加给活跃的逻辑卷:lvchange --addtag mytag -S active=1 Logical volume myvg/mylv changed. Logical volume myvg/lvol0 changed. Logical volume myvg/lvol1 changed. Logical volume myvg/rr changed.
# lvchange --addtag mytag -S active=1 Logical volume myvg/mylv changed. Logical volume myvg/lvol0 changed. Logical volume myvg/lvol1 changed. Logical volume myvg/rr changed.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下
lvs命令示例显示所有名称与_pmspare不匹配的逻辑卷,并将默认标头改为自定义卷:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 下面的
lvchange命令示例使用role=thinsnapshot和origin=thin1标记正常激活命令过程要跳过的逻辑卷:lvchange --setactivationskip n -S 'role=thinsnapshot && origin=thin1' Logical volume myvg/thin1s changed.
# lvchange --setactivationskip n -S 'role=thinsnapshot && origin=thin1' Logical volume myvg/thin1s changed.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下
lvs命令示例只显示与所有三个条件都匹配的逻辑卷:-
名称包含
_tmeta。 -
角色是
metadata。 - 大小小于或等于 4m。
lvs -a -S 'name=~_tmeta && role=metadata && size <= 4m' LV VG Attr LSize [tp_tmeta] myvg ewi-ao---- 4.00m
# lvs -a -S 'name=~_tmeta && role=metadata && size <= 4m' LV VG Attr LSize [tp_tmeta] myvg ewi-ao---- 4.00mCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
名称包含
其他资源
-
您系统上的
lvmreport (7)手册页
67.7. 配置 RAID 逻辑卷 复制链接链接已复制到粘贴板!
您可以使用逻辑卷管理器(LVM)创建和管理 Redundant Array of Independent Disks (RAID)卷。LVM 支持 RAID 0、1、4、5、6 和 10。LVM RAID 卷有以下特征:
- LVM 会创建和管理利用多设备 (MD) 内核驱动程序的 RAID 逻辑卷。
- 您可以从阵列中临时分割 RAID1 镜像,并在之后将其合并到阵列中。
- LVM RAID 卷支持快照。
- RAID 逻辑卷不是集群感知的。您可以只在一台机器中创建和激活 RAID 逻辑卷,但不能在多台机器中同时激活它们。
-
当您创建 RAID 逻辑卷(LV)时,LVM 会创建一个元数据子卷,它是阵列中的每个数据或奇偶校验子卷的大小的一个区块。例如,创建一个双向 RAID1 阵列会导致两个元数据子卷(
lv_rmeta_0和lv_rmeta_1)以及两个数据子卷(lv_rimage_0和lv_rimage_1)。 - 在 RAID LV 中添加完整性可减少或防止软损坏。
67.7.1. RAID 级别和线性支持 复制链接链接已复制到粘贴板!
以下是 RAID 支持的配置,包括级别 0、1、4、5、6、10 和线性:
- 0 级
RAID 级别 0,通常称为条带化的数据映射技术。这意味着,要写入阵列的数据被分成条块,并在阵列的成员磁盘中写入,这样可以在成本低的情况下提供高的 I/O 性能,但不提供冗余。
RAID 级别 0 的实现只在成员设备间条状分布到阵列中最小设备的大小。就是说,如果您有多个设备,它们的大小稍有不同,那么每个设备的大小都被视为与最小设备的大小相同。因此,级别 0 阵列的常见存储容量是所有磁盘的总容量。如果成员磁盘具有不同的大小,RAID0 将使用可用区使用这些磁盘的所有空间。
- 1 级
RAID 级别 1 或称为镜像(mirroring),通过将相同数据写入阵列的每个磁盘来提供冗余,在每个磁盘上保留"镜像"副本。因为其简单且数据高度可用,RAID 1 仍然被广泛使用。级别 1 需要两个或者多个磁盘,它提供了很好的数据可靠性,提高了需要读取的应用程序的性能,但是成本相对高。
为了实现数据可靠性,需要向阵列中的所有磁盘写入相同的信息,所以 RAID 1 的成本会很高。与基于奇偶校验的其他级别(如级别 5)相比,空间的利用效率较低。然而,对空间利用率的牺牲提供了高性能:基于奇偶校验的 RAID 级别会消耗大量 CPU 资源以便获得奇偶校验,而 RAID 级别 1 只是一次向多个 RAID 成员中写入同样数据,其对 CPU 的消耗较小。因此,在使用软件 RAID 的系统中,或系统中有其他操作需要大量使用 CPU 资源时,RAID 1 可能会比使用基于奇偶校验的 RAID 级别的性能更好。
级别 1 阵列的存储容量等于硬件 RAID 中最小镜像硬盘或者软件 RAID 中最小镜像分区的容量相同。级别 1 所提供的冗余性是所有 RAID 级别中最高的,因为阵列只需要在有一个成员可以正常工作的情况下就可以提供数据。
- 级别 4
级别 4 使用单一磁盘驱动器中的奇偶校验来保护数据。奇偶校验信息根据阵列中其余成员磁盘的内容计算。然后当阵列中的一个磁盘失败时,这个信息就可以被用来重建数据。然后,在出现问题的磁盘被替换前,使用被重建的数据就可以满足 I/O 的请求。在磁盘被替换后,可以在上面重新生成数据。
因为专用奇偶校验磁盘代表所有写交易到 RAID 阵列的固有瓶颈,因此在没有写回缓存等技术的情况下,级别 4 很少被使用。或者在特定情况下,系统管理员有意设计具有这个瓶颈的软件 RAID 设备,比如当阵列使用数据填充后没有写入事务的数组。因此,Anaconda 中并没有提供 RAID 4 这个选项。但是,如果需要,用户可以手动创建它。
硬件 RAID 4 的存储容量等于分区数量减一乘以最小成员分区的容量。RAID 4 阵列的性能是非对称的,即读的性能会好于写的性能。这是因为,写操作会在生成奇偶校验时消耗额外的 CPU 和主内存带宽,然后在将实际数据写入磁盘时也会消耗额外的总线带宽,因为您不仅写数据,而且还写奇偶校验。读操作只需要读取数据而不是奇偶校验,除非该阵列处于降级状态。因此,在正常操作条件下,对于相同数量的数据传输,读操作会对驱动器和计算机总线产生较少的流量。
- 5 级
这是最常见的 RAID 类型。通过在一个阵列的所有成员磁盘中分布奇偶校验,RAID 5 解除了级别 4 中原有的写入瓶颈。唯一性能瓶颈是奇偶校验计算过程本身。现代 CPU 可以非常快速地计算奇偶校验。但是,如果您在 RAID 5 阵列中有大量磁盘,以便在所有设备间合并数据传输速度非常高,则奇偶校验计算可能会成为瓶颈。
5 级具有非对称性能,读性能显著提高。RAID 5 的存储容量的计算方法与级别 4 的计算方法是一样的。
- 级别 6
如果数据的冗余性和保护性比性能更重要,且无法接受 RAID 1 的空间利用率低的问题,则通常会选择使用级别 6。级别 6 使用一个复杂的奇偶校验方式,可以在阵列中出现任意两个磁盘失败的情况下进行恢复。因为使用的奇偶校验方式比较复杂,软件 RAID 设备会对 CPU 造成较大负担,同时对写操作造成更大的负担。因此,与级别 4 和 5 相比,级别 6 的性能不对称性更严重。
RAID 6 阵列的总容量与 RAID 5 和 4 类似,但您必须从额外奇偶校验存储空间的设备数中减去 2 个设备(而不是 1 个)。
- 级别 10
这个 RAID 级别将级别 0 的性能优势与级别 1 的冗余合并。它还可减少在具有多于两个设备的 1 级阵列中发现的一些空间。对于 10 级,可以创建一个 3 个驱动器阵列,来仅存储每块数据的 2 个副本,然后允许整个阵列的大小为最小设备的 1.5 倍,而不是只等于最小设备(这与 3 设备1 级阵列类似)。与 RAID 级别 6 相比,计算奇偶校验对 CPU 的消耗较少,但空间效率较低。
在安装过程中,不支持创建 RAID 10。您可在安装后手动创建。
- 线性 RAID
线性 RAID 是创建更大的虚拟驱动器的一组驱动器。
在线性 RAID 中,块会被从一个成员驱动器中按顺序分配,只有在第一个完全填充时才会进入下一个驱动器。这个分组方法不会提供性能优势,因为 I/O 操作不太可能在不同成员间同时进行。线性 RAID 也不提供冗余性,并会降低可靠性。如果有任何一个成员驱动器失败,则无法使用整个阵列,数据可能会丢失。该容量是所有成员磁盘的总量。
67.7.2. LVM RAID 片段类型 复制链接链接已复制到粘贴板!
要创建 RAID 逻辑卷,您可以使用 lvcreate 命令的 --type 参数指定 RAID 类型。对于大多数用户,指定五个可用主类型之一 raid1、raid4、raid5、raid6 和 raid10 应足够。
下表描述了可能的 RAID 片段类型。
| 片段类型 | 描述 |
|---|---|
|
|
RAID1 镜像。当您指定 |
|
| RAID4 专用奇偶校验磁盘。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 条带。RAID0 以条带大小的单位在多个数据子卷间分布逻辑卷数据。这可以提高性能。如果任何数据子卷失败,逻辑卷数据将会丢失。 |
67.7.3. 创建 RAID0 的参数 复制链接链接已复制到粘贴板!
您可以使用 lvcreate --type raid0[meta] --stripes _Stripes --stripesize StripeSize VolumeGroup [PhysicalVolumePath] 命令创建 RAID0 条状逻辑卷。
下表描述了不同的参数,您可以在创建 RAID0 条状逻辑卷时使用它们。
| 参数 | 描述 |
|---|---|
|
|
指定 |
|
| 指定在其中分割逻辑卷的设备数。 |
|
| 以 KB 为单位指定每个条的大小。这是在移动到下一个设备前写入一个设备的数据量。 |
|
| 指定要使用的卷组。 |
|
| 指定要使用的设备。如果没有指定,LVM 将选择 Stripes 选项指定的设备数,每个条带一个。 |
67.7.4. 创建 RAID 逻辑卷 复制链接链接已复制到粘贴板!
您可以根据您为 -m 参数指定的值,来创建具有不同副本数的 RAID1 阵列。同样,您可以使用 -i 参数为 RAID 0、4、5、6 和 10 逻辑卷指定条带数。您还可以使用 -I 参数指定条带大小。下面的步骤描述了创建不同类型的 RAID 逻辑卷的不同方法。
流程
创建一个双向 RAID。以下命令在卷组 my_vg 中创建一个名为 my_lv 的双向 RAID1 阵列,大小为 1G :
lvcreate --type raid1 -m 1 -L 1G -n my_lv my_vg Logical volume "my_lv" created.
# lvcreate --type raid1 -m 1 -L 1G -n my_lv my_vg Logical volume "my_lv" created.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用条带创建 RAID5 阵列。以下命令在卷组 my_vg 中创建具有三个条带的 RAID5 阵列和一个隐式奇偶校验驱动器,名为 my_lv,大小为 1G。请注意,您可以指定与 LVM 条带卷类似的条带数。自动添加正确奇偶校验驱动器数。
lvcreate --type raid5 -i 3 -L 1G -n my_lv my_vg
# lvcreate --type raid5 -i 3 -L 1G -n my_lv my_vgCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用条带创建 RAID6 阵列。以下命令在卷组 my_vg 中创建具有三个 3 个条带的 RAID6 阵列,以及名为 my_lv 的两个隐式奇偶校验驱动器,大小为 1G :
lvcreate --type raid6 -i 3 -L 1G -n my_lv my_vg
# lvcreate --type raid6 -i 3 -L 1G -n my_lv my_vgCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示 LVM 设备 my_vg/my_lv,它是一个双向 RAID1 阵列:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.7.5. 使用 storage RHEL 系统角色配置一个带有 RAID 的 LVM 池 复制链接链接已复制到粘贴板!
使用 storage 系统角色,您可以使用 Red Hat Ansible Automation Platform 在 RHEL 上配置一个带有 RAID 的 LVM 池。您可以使用可用参数建立一个 Ansible playbook,来配置带有 RAID 的 LVM 池。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证您的池是否在 RAID 上:
ansible managed-node-01.example.com -m command -a 'lsblk'
# ansible managed-node-01.example.com -m command -a 'lsblk'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.7.6. 创建 RAID0 条带化逻辑卷 复制链接链接已复制到粘贴板!
RAID0 逻辑卷以条的大小为单位,将逻辑卷数据分散到多个数据子卷中。下面的步骤创建了一个名为 mylv 的 LVM RAID0 逻辑卷,该逻辑卷在磁盘间条状分布数据。
先决条件
- 您已创建了三个或者多个物理卷。有关创建物理卷的更多信息,请参阅 创建 LVM 物理卷。
- 您已创建了卷组。如需更多信息,请参阅创建 LVM 卷组。
流程
从现有卷组中创建 RAID0 逻辑卷。以下命令从卷组 myvg 中创建 RAID0 卷 mylv,大小为 2G,有三个条带,条带大小为 4kB :
lvcreate --type raid0 -L 2G --stripes 3 --stripesize 4 -n mylv my_vg Rounding size 2.00 GiB (512 extents) up to stripe boundary size 2.00 GiB(513 extents). Logical volume "mylv" created.
# lvcreate --type raid0 -L 2G --stripes 3 --stripesize 4 -n mylv my_vg Rounding size 2.00 GiB (512 extents) up to stripe boundary size 2.00 GiB(513 extents). Logical volume "mylv" created.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 RAID0 逻辑卷中创建文件系统。以下命令在逻辑卷中创建 ext4 文件系统:
mkfs.ext4 /dev/my_vg/mylv
# mkfs.ext4 /dev/my_vg/mylvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 挂载逻辑卷并报告文件系统磁盘空间使用情况:
mount /dev/my_vg/mylv /mnt df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/my_vg-mylv 2002684 6168 1875072 1% /mnt
# mount /dev/my_vg/mylv /mnt # df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/my_vg-mylv 2002684 6168 1875072 1% /mntCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
查看创建的 RAID0 剥离的逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.7.7. 使用 storage RHEL 系统角色为 RAID LVM 卷配置条带大小 复制链接链接已复制到粘贴板!
使用 storage 系统角色,您可以使用 Red Hat Ansible Automation Platform 在 RHEL 上为 RAID LVM 卷配置条带大小。您可以使用可用参数建立一个 Ansible playbook,来配置带有 RAID 的 LVM 池。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证条带大小是否被设置为所需的大小:
ansible managed-node-01.example.com -m command -a 'lvs -o+stripesize /dev/my_pool/my_volume'
# ansible managed-node-01.example.com -m command -a 'lvs -o+stripesize /dev/my_pool/my_volume'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.7.8. 软数据崩溃 复制链接链接已复制到粘贴板!
数据存储中的软崩溃意味着,从存储设备中检索的数据与写入到那个设备中的数据不同。错误的数据可以在存储设备中无限期存在。在检索并尝试使用此数据之前,您可能不会发现此损坏数据。
根据配置类型,一个独立磁盘的冗余阵列 (RAID) 逻辑卷 (LV) 可防止设备失败时数据丢失。如果由 RAID 阵列组成的设备失败,可以从 RAID LV 一部分的其他设备中恢复数据。但是 RAID 配置不能保证数据本身的完整性。软崩溃、静默崩溃、软错误和静默错误用来描述,即使系统和软件仍继续按预期工作,但数据已损坏的情况的术语。
当创建一个具有 DM 完整性或在现有 RAID LV 中添加完整性的 RAID LV 时,请考虑以下点:
- 完整性元数据需要额外的存储空间。对于每个 RAID 镜像,每个 500MB 数据都需要 4MB 的额外存储空间,因为校验和被添加到数据中。
- 添加 DM 完整性会因为访问数时延迟而影响到性能,有些 RAID 的配置会比其他 RAID 配置受到的影响更大。RAID1 配置通常比 RAID5 或其变体提供更好的性能。
- RAID 完整性块的大小也会影响性能。配置更大的 RAID 完整块可提供更好的性能。但是,一个较小的 RAID 完整性块可以提供更好的兼容性。
-
完整性有两种模式:
位图(bitmap)或日志(journal)。bitmap完整性模式通常比journal模式提供更好的性能。
如果您遇到性能问题,请使用带有完整性的 RAID1,或者测试特定 RAID 配置的性能以确保它满足您的要求。
67.7.9. 创建带有 DM 完整性的 RAID 逻辑卷 复制链接链接已复制到粘贴板!
当您创建一个具有设备映射器(DM)完整性的 RAID LV 或者在现有 RAID 逻辑卷(LV)中添加完整性时,它会降低因为软损坏而丢失数据的风险。在使用 LV 前,等待完整性同步和 RAID 元数据完成。否则,在后台进行的初始化可能会影响 LV 的性能。
设备映射程序(DM)完整性与 RAID 级别 1、4、5、6 和 10 一起使用,用于缓解或防止软崩溃导致数据丢失。RAID 层可确保数据没有破坏的副本可以修复软崩溃错误。
流程
创建具有 DM 完整性的 RAID LV。以下示例在 my_vg 卷组中创建一个名为 test-lv 的 RAID LV,可用大小为 256M 和 RAID 级别 1:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意要在现有 RAID LV 中添加 DM 完整性,请使用以下命令:
lvconvert --raidintegrity y my_vg/test-lv
# lvconvert --raidintegrity y my_vg/test-lvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 RAID LV 中添加完整性限制了您可以在那个 RAID LV 上执行的一些操作。
可选:在执行某些操作前删除完整性。
lvconvert --raidintegrity n my_vg/test-lv Logical volume my_vg/test-lv has removed integrity.
# lvconvert --raidintegrity n my_vg/test-lv Logical volume my_vg/test-lv has removed integrity.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
查看有关添加的 DM 完整性的信息:
查看在 my_vg 卷组中创建的 test-lv RAID LV 的信息:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 下面描述了此输出的不同选项:
g属性-
它是 Attr 列下的属性列表,表示 RAID 镜像使用完整性。完整性将校验和存储在
_imetaRAID LV 中。 Cpy%Sync列- 它指示顶层 RAID LV 和每个 RAID 镜像的同步进度。
- RAID 镜像
-
它通过
raid_image_N在 LV 列中指示。 LV列- 它确保对顶层 RAID LV 和每个 RAID 镜像显示 100% 同步进度。
显示每个 RAID LV 的类型:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有一个增量的计数器,它计算在每个 RAID 镜像上检测到的不匹配数。查看 my_vg/test-lv 下的
rimage_0检测到的数据不匹配:lvs -o+integritymismatches my_vg/test-lv_rimage_0 LV VG Attr LSize Origin Cpy%Sync IntegMismatches [test-lv_rimage_0] my_vg gwi-aor--- 256.00m [test-lv_rimage_0_iorig] 100.00 0
# lvs -o+integritymismatches my_vg/test-lv_rimage_0 LV VG Attr LSize Origin Cpy%Sync IntegMismatches [test-lv_rimage_0] my_vg gwi-aor--- 256.00m [test-lv_rimage_0_iorig] 100.00 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这个示例中,完整性还没有检测到任何不匹配的数据,因此
IntegMismatches计数器会显示 0 (0)。查看
/var/log/messages日志文件中的数据完整性信息,如下例所示:例 67.1. 内核消息日志中的 dm-integrity 不匹配示例
device-mapper: integrity: dm-12:校验和在扇区 0x24e7 时失败
例 67.2. 来自内核消息日志的 dm-integrity 数据更正示例
md/raid1:mdX: 读取错误修正(8 扇区位在 dm-16 上 的 9448)
67.7.10. 将 RAID 逻辑卷转换为另一个 RAID 级别 复制链接链接已复制到粘贴板!
LVM 支持 RAID 接管,这意味着将 RAID 逻辑卷从一个 RAID 级别转换为另一个 RAID 级别,例如从 RAID 5 转换到 RAID 6。您可以更改 RAID 级别,以增加或减少设备故障的恢复能力。
流程
创建 RAID 逻辑卷:
lvcreate --type raid5 -i 3 -L 500M -n my_lv my_vg Using default stripesize 64.00 KiB. Rounding size 500.00 MiB (125 extents) up to stripe boundary size 504.00 MiB (126 extents). Logical volume "my_lv" created.
# lvcreate --type raid5 -i 3 -L 500M -n my_lv my_vg Using default stripesize 64.00 KiB. Rounding size 500.00 MiB (125 extents) up to stripe boundary size 504.00 MiB (126 extents). Logical volume "my_lv" created.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查看 RAID 逻辑卷:
lvs -a -o +devices,segtype LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices Type my_lv my_vg rwi-a-r--- 504.00m 100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0),my_lv_rimage_3(0) raid5 [my_lv_rimage_0] my_vg iwi-aor--- 168.00m /dev/sda(1) linear
# lvs -a -o +devices,segtype LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices Type my_lv my_vg rwi-a-r--- 504.00m 100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0),my_lv_rimage_3(0) raid5 [my_lv_rimage_0] my_vg iwi-aor--- 168.00m /dev/sda(1) linearCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 RAID 逻辑卷转换为另一个 RAID 级别:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果这个命令提示重复转换,请运行:
lvconvert --type raid6 my_vg/my_lv
# lvconvert --type raid6 my_vg/my_lvCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
查看具有转换的 RAID 级别的 RAID 逻辑卷:
lvs -a -o +devices,segtype LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices Type my_lv my_vg rwi-a-r--- 504.00m 100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0),my_lv_rimage_3(0),my_lv_rimage_4(0) raid6 [my_lv_rimage_0] my_vg iwi-aor--- 172.00m /dev/sda(1) linear
# lvs -a -o +devices,segtype LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices Type my_lv my_vg rwi-a-r--- 504.00m 100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0),my_lv_rimage_3(0),my_lv_rimage_4(0) raid6 [my_lv_rimage_0] my_vg iwi-aor--- 172.00m /dev/sda(1) linearCopy to Clipboard Copied! Toggle word wrap Toggle overflow
67.7.11. 将线性设备转换为 RAID 逻辑卷 复制链接链接已复制到粘贴板!
您可以将现有的线性逻辑卷转换为 RAID 逻辑卷。要执行此操作,请使用 lvconvert 命令的 --type 参数。
RAID 逻辑卷由元数据和数据子卷对组成。当您将线性设备转换为 RAID1 阵列时,它会创建一个新的元数据子卷,并将其与线性卷所在的同一物理卷中的原始逻辑卷相关联。其他镜像添加到 metadata/data 子卷对中。如果无法将与原始逻辑卷配对的元数据镜像放在同一个物理卷上,则 lvconvert 将失败。
流程
查看需要转换的逻辑卷设备:
lvs -a -o name,copy_percent,devices my_vg LV Copy% Devices my_lv /dev/sde1(0)
# lvs -a -o name,copy_percent,devices my_vg LV Copy% Devices my_lv /dev/sde1(0)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将线性逻辑卷转换为 RAID 设备。以下命令将卷组 __my_vg 中的线性逻辑卷 my_lv 转换为双向 RAID1 阵列:
lvconvert --type raid1 -m 1 my_vg/my_lv Are you sure you want to convert linear LV my_vg/my_lv to raid1 with 2 images enhancing resilience? [y/n]: y Logical volume my_vg/my_lv successfully converted.
# lvconvert --type raid1 -m 1 my_vg/my_lv Are you sure you want to convert linear LV my_vg/my_lv to raid1 with 2 images enhancing resilience? [y/n]: y Logical volume my_vg/my_lv successfully converted.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
确定逻辑卷是否转换为 RAID 设备:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.7.12. 将 LVM RAID1 逻辑卷转换为 LVM 线性逻辑卷 复制链接链接已复制到粘贴板!
您可以将现有的 RAID1 LVM 逻辑卷转换为 LVM 线性逻辑卷。要执行此操作,请使用 lvconvert 命令并指定 -m0 参数。这会删除所有 RAID 数据子卷以及构成 RAID 阵列的所有 RAID 元数据子卷,保留顶层 RAID1 镜像作为线性逻辑卷。
流程
显示现有 LVM RAID1 逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将现有的 RAID1 LVM 逻辑卷转换为 LVM 线性逻辑卷。以下命令将 LVM RAID1 逻辑卷 my_vg/my_lv 转换为 LVM 线性设备:
lvconvert -m0 my_vg/my_lv Are you sure you want to convert raid1 LV my_vg/my_lv to type linear losing all resilience? [y/n]: y Logical volume my_vg/my_lv successfully converted.
# lvconvert -m0 my_vg/my_lv Are you sure you want to convert raid1 LV my_vg/my_lv to type linear losing all resilience? [y/n]: y Logical volume my_vg/my_lv successfully converted.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当您将 LVM RAID1 逻辑卷转换成 LVM 线性卷,,您可以指定要删除的物理卷。在以下示例中,
lvconvert命令指定要删除 /dev/sde1,保留 /dev/sdf1 作为组成线性设备的物理卷:lvconvert -m0 my_vg/my_lv /dev/sde1
# lvconvert -m0 my_vg/my_lv /dev/sde1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证 RAID1 逻辑卷是否转换为 LVM 线性设备:
lvs -a -o name,copy_percent,devices my_vg LV Copy% Devices my_lv /dev/sdf1(1)
# lvs -a -o name,copy_percent,devices my_vg LV Copy% Devices my_lv /dev/sdf1(1)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.7.13. 将镜像 LVM 设备转换为 RAID1 逻辑卷 复制链接链接已复制到粘贴板!
您可以将片段类型为 mirror 的现有镜像 LVM 设备转换为 RAID1 LVM 设备。要执行此操作,请使用带有 --type raid1 参数的 lvconvert 命令。这会将名为 mimage 的镜像子卷重命名为名为 rimage 的 RAID 子卷。
另外,它还会删除镜像日志,并为同一物理卷上的数据子卷创建名为 rmeta 的元数据子卷,来作为响应的数据子卷。
流程
查看镜像逻辑卷 my_vg/my_lv 的布局:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将镜像逻辑卷 my_vg/my_lv 转换为 RAID1 逻辑卷:
lvconvert --type raid1 my_vg/my_lv Are you sure you want to convert mirror LV my_vg/my_lv to raid1 type? [y/n]: y Logical volume my_vg/my_lv successfully converted.
# lvconvert --type raid1 my_vg/my_lv Are you sure you want to convert mirror LV my_vg/my_lv to raid1 type? [y/n]: y Logical volume my_vg/my_lv successfully converted.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证镜像逻辑卷是否转换为 RAID1 逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.7.14. 更改现有 RAID1 设备中的镜像数 复制链接链接已复制到粘贴板!
您可以更改现有 RAID1 阵列中的镜像数量,类似于更改 LVM 镜像实现中的镜像数量。
当您使用 lvconvert 命令将镜像添加到 RAID1 逻辑卷时,您可以执行以下操作:
- 指定生成的设备的镜像总数,
- 要添加到该设备的镜像数量,以及
- 可以指定新元数据/数据镜像对所在的物理卷。
流程
显示 LVM 设备 my_vg/my_lv,它是一个双向 RAID1 阵列:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 元数据子卷(名为
rmeta)始终与它们的数据子卷rimage存在于同一物理设备上。元数据/数据子卷对不会与 RAID 阵列中另一元数据/数据子卷对创建在同一物理卷上(除非您指定了--alloc anywhere)。将双向 RAID1 逻辑卷 my_vg/my_lv 转换为三向 RAID1 逻辑卷:
lvconvert -m 2 my_vg/my_lv Are you sure you want to convert raid1 LV my_vg/my_lv to 3 images enhancing resilience? [y/n]: y Logical volume my_vg/my_lv successfully converted.
# lvconvert -m 2 my_vg/my_lv Are you sure you want to convert raid1 LV my_vg/my_lv to 3 images enhancing resilience? [y/n]: y Logical volume my_vg/my_lv successfully converted.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下是更改现有 RAID1 设备中的镜像数的几个示例:
您还可以在 RAID 中添加镜像时要使用的物理卷。以下命令通过指定用于阵列的物理卷 /dev/sdd1 ,将双向 RAID1 逻辑卷 my_vg/my_lv 转换为三向 RAID1 逻辑卷:
lvconvert -m 2 my_vg/my_lv /dev/sdd1
# lvconvert -m 2 my_vg/my_lv /dev/sdd1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将三向 RAID1 逻辑卷转换成双向 RAID1 逻辑卷:
lvconvert -m1 my_vg/my_lv Are you sure you want to convert raid1 LV my_vg/my_lv to 2 images reducing resilience? [y/n]: y Logical volume my_vg/my_lv successfully converted.
# lvconvert -m1 my_vg/my_lv Are you sure you want to convert raid1 LV my_vg/my_lv to 2 images reducing resilience? [y/n]: y Logical volume my_vg/my_lv successfully converted.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过指定物理卷 /dev/sde1,其中包含要删除的镜像,将三向 RAID1 逻辑卷转换成双向 RAID1 逻辑卷:
lvconvert -m1 my_vg/my_lv /dev/sde1
# lvconvert -m1 my_vg/my_lv /dev/sde1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 另外,当您删除镜像及其关联的元数据子卷时,任何高数字镜像都会被切换以填充插槽。如果您从包含
lv_rimage_0、lv_rimage_1和lv_rimage_2的三向 RAID1 阵列中删除lv_rimage_1,则会产生一个由lv_rimage_0和lv_rimage_1组成的 RAID1 阵列。lv_rimage_2将会被重命名,并接管空插槽,成为lv_rimage_1。
验证
在更改现有 RAID1 设备中的镜像数后查看 RAID1 设备:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.7.15. 将 RAID 镜像分离为一个独立的逻辑卷 复制链接链接已复制到粘贴板!
您可以分离 RAID 逻辑卷的镜像形成新的逻辑卷。和您从现有 RAID1 逻辑卷中删除 RAID 镜像一样,当您从设备的中间部分删除 RAID 数据子卷(及其关联的元数据子卷)时,会使用数字高的镜像来填充空的位置。因此,构成 RAID 阵列的逻辑卷上的索引号将是一个完整的整数序列。
如果 RAID1 阵列还没有同步,您就无法分离 RAID 镜像。
流程
显示 LVM 设备 my_vg/my_lv,它是一个双向 RAID1 阵列:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 RAID 镜像分成一个单独的逻辑卷:
以下示例将一个双向 RAID1 逻辑卷 my_lv 分成两个线性逻辑卷 my_lv 和 new:
lvconvert --splitmirror 1 -n new my_vg/my_lv Are you sure you want to split raid1 LV my_vg/my_lv losing all resilience? [y/n]: y
# lvconvert --splitmirror 1 -n new my_vg/my_lv Are you sure you want to split raid1 LV my_vg/my_lv losing all resilience? [y/n]: yCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下示例将一个三向 RAID1 逻辑卷 my_lv 分成一个双向 RAID1 逻辑卷 my_lv 以及一个线性逻辑卷 new :
lvconvert --splitmirror 1 -n new my_vg/my_lv
# lvconvert --splitmirror 1 -n new my_vg/my_lvCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在分离 RAID 逻辑卷的镜像后查看逻辑卷:
lvs -a -o name,copy_percent,devices my_vg LV Copy% Devices my_lv /dev/sde1(1) new /dev/sdf1(1)
# lvs -a -o name,copy_percent,devices my_vg LV Copy% Devices my_lv /dev/sde1(1) new /dev/sdf1(1)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.7.16. 分割和合并 RAID 镜像 复制链接链接已复制到粘贴板!
您可以使用 lvconvert 命令的 --trackchanges 参数(使用 --trackchanges 参数和 lvconvert 命令的 --splitmirrors 参数),临时分离 RAID1 阵列的镜像以进行只读使用。这可让您以后将镜像合并到阵列中,同时只重新同步那些自镜像被分割后更改的阵列的部分。
当您使用 --trackchanges 参数分离 RAID 镜像时,您可以指定要分离哪个镜像,但您不能更改要分离的卷的名称。另外,得到的卷有以下限制:
- 创建的新卷为只读。
- 不能调整新卷的大小。
- 不能重命名剩余的数组。
- 不能调整剩余的数组大小。
- 您可以独立激活新卷和剩余的阵列。
您可以合并分离的镜像。当您合并镜像时,只有自镜像分割后更改的阵列部分会被重新同步。
流程
创建 RAID 逻辑卷:
lvcreate --type raid1 -m 2 -L 1G -n my_lv my_vg Logical volume "my_lv" created
# lvcreate --type raid1 -m 2 -L 1G -n my_lv my_vg Logical volume "my_lv" createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:查看创建的 RAID 逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从创建的 RAID 逻辑卷中分割镜像,并跟踪对剩余的阵列的更改:
lvconvert --splitmirrors 1 --trackchanges my_vg/my_lv my_lv_rimage_2 split from my_lv for read-only purposes. Use 'lvconvert --merge my_vg/my_lv_rimage_2' to merge back into my_lv
# lvconvert --splitmirrors 1 --trackchanges my_vg/my_lv my_lv_rimage_2 split from my_lv for read-only purposes. Use 'lvconvert --merge my_vg/my_lv_rimage_2' to merge back into my_lvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:在分割镜像后查看逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将卷合并回阵列中:
lvconvert --merge my_vg/my_lv_rimage_1 my_vg/my_lv_rimage_1 successfully merged back into my_vg/my_lv
# lvconvert --merge my_vg/my_lv_rimage_1 my_vg/my_lv_rimage_1 successfully merged back into my_vg/my_lvCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
查看合并的逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.7.17. 将 RAID 失败策略设置为 allocate 复制链接链接已复制到粘贴板!
您可以在 /etc/lvm/lvm.conf 文件中将 raid_fault_policy 字段设置为 allocate 参数。使用这个首选项,系统会尝试使用卷组中的备用设备替换失败的设备。如果没有备用设备,系统日志会包含此信息。
流程
查看 RAID 逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 /dev/sdb 设备失败,请查看 RAID 逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 /dev/sdb 设备失败,您还可以查看系统日志中的错误消息。
在
lvm.conf文件中,将raid_fault_policy字段设置为allocate:vi /etc/lvm/lvm.conf raid_fault_policy = "allocate"
# vi /etc/lvm/lvm.conf raid_fault_policy = "allocate"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果将
raid_fault_policy设置为allocate,但没有备用设备,则分配会失败,逻辑卷保留原样。如果分配失败,您可以使用lvconvert --repair命令修复和替换失败的设备。如需更多信息,请参阅 在逻辑卷中替换失败的 RAID 设备。
验证
验证失败的设备现在是否被卷组中的新设备替换了:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意即使失败的设备现在被替换了,但显示仍然表示 LVM 没有找到失败的设备,因为该设备还没有从卷组中删除。您可以通过执行
vgreduce --removemissing my_vg命令从卷组中删除失败的设备。
67.7.18. 将 RAID 失败策略设置为 warn 复制链接链接已复制到粘贴板!
您可以在lvm.conf 文件中将 raid_fault_policy 字段设置为 warn 参数。有了这个首选项,系统会在系统日志中添加了一条指示失败设备的警告。根据警告,您可以确定后续步骤。
默认情况下,lvm.conf 中 raid_fault_policy 字段的值是 warn。
流程
查看 RAID 逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 lvm.conf 文件中将 raid_fault_policy 字段设置为 warn :
vi /etc/lvm/lvm.conf # This configuration option has an automatic default value. raid_fault_policy = "warn"
# vi /etc/lvm/lvm.conf # This configuration option has an automatic default value. raid_fault_policy = "warn"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 /dev/sdb 设备失败,请查看系统日志以显示错误消息:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 /dev/sdb 设备失败,系统日志会显示错误消息。在这种情况下,LVM 将不会自动尝试通过替换其中一个镜像修复 RAID 设备。如果设备失败,您可以使用
lvconvert命令的--repair参数替换该设备。如需更多信息,请参阅 在逻辑卷中替换失败的 RAID 设备。
67.7.19. 替换正常工作的 RAID 设备 复制链接链接已复制到粘贴板!
您可以使用 lvconvert 命令的 --replace 参数替换逻辑卷中正常工作的 RAID 设备。
如果 RAID 设备失败,以下命令无法工作。
先决条件
- RAID 设备没有失败。
流程
创建 RAID1 阵列:
lvcreate --type raid1 -m 2 -L 1G -n my_lv my_vg Logical volume "my_lv" created
# lvcreate --type raid1 -m 2 -L 1G -n my_lv my_vg Logical volume "my_lv" createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查创建的 RAID1 阵列:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 根据您的要求,使用以下任一方法替换 RAID 设备:
通过指定要替换的物理卷来替换 RAID1 设备:
lvconvert --replace /dev/sdb2 my_vg/my_lv
# lvconvert --replace /dev/sdb2 my_vg/my_lvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过指定要用于替换的物理卷来替换 RAID1 设备:
lvconvert --replace /dev/sdb1 my_vg/my_lv /dev/sdd1
# lvconvert --replace /dev/sdb1 my_vg/my_lv /dev/sdd1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过指定多个 replace 参数来一次替换多个 RAID 设备:
lvconvert --replace /dev/sdb1 --replace /dev/sdc1 my_vg/my_lv
# lvconvert --replace /dev/sdb1 --replace /dev/sdc1 my_vg/my_lvCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在指定要替换的物理卷后检查 RAID1 阵列:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在指定要用于替换的物理卷后检查 RAID1 阵列:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 一次替换多个 RAID 设备后检查 RAID1 阵列:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.7.20. 在逻辑卷中替换失败的 RAID 设备 复制链接链接已复制到粘贴板!
RAID 与传统的 LVM 镜像不同。如果是 LVM 镜像,请删除失败的设备。否则,当 RAID 阵列继续使用失败的设备运行时,镜像逻辑卷将挂起。对于 RAID1 以外的 RAID 级别,删除设备意味着转换到较低 RAID 级别,例如从 RAID6 转换到 RAID5,或者从 RAID4 或 RAID5 转换到 RAID0。
您可以使用 lvconvert 命令的 --repair 参数替换 RAID 逻辑卷中作为物理卷的故障设备,而不是删除失败的设备并分配一个替换品。
先决条件
卷组包含一个物理卷,它有足够的可用容量替换失败的设备。
如果卷组中没有有足够可用扩展的物理卷,请使用
vgextend程序添加一个新的、足够大的物理卷。
流程
查看 RAID 逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 /dev/sdc 设备失败后查看 RAID 逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 替换失败的设备:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:手动指定替换失败设备的物理卷:
lvconvert --repair my_vg/my_lv replacement_pv
# lvconvert --repair my_vg/my_lv replacement_pvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用替换检查逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在您从卷组中删除失败的设备前,LVM 工具仍然指示 LVM 无法找到失败的设备。
从卷组中删除失败的设备:
vgreduce --removemissing my_vg
# vgreduce --removemissing my_vgCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
删除失败的设备后查看可用的物理卷:
pvscan PV /dev/sde1 VG rhel_virt-506 lvm2 [<7.00 GiB / 0 free] PV /dev/sdb1 VG my_vg lvm2 [<60.00 GiB / 59.50 GiB free] PV /dev/sdd1 VG my_vg lvm2 [<60.00 GiB / 59.50 GiB free] PV /dev/sdd1 VG my_vg lvm2 [<60.00 GiB / 59.50 GiB free]
# pvscan PV /dev/sde1 VG rhel_virt-506 lvm2 [<7.00 GiB / 0 free] PV /dev/sdb1 VG my_vg lvm2 [<60.00 GiB / 59.50 GiB free] PV /dev/sdd1 VG my_vg lvm2 [<60.00 GiB / 59.50 GiB free] PV /dev/sdd1 VG my_vg lvm2 [<60.00 GiB / 59.50 GiB free]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 替换失败的设备后检查逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.7.21. 检查 RAID 逻辑卷中数据的一致性 复制链接链接已复制到粘贴板!
LVM 提供对 RAID 逻辑卷的清理支持。RAID 清理是读取阵列中的所有数据和奇偶校验块的过程,并检查它们是否是分配的。lvchange --syncaction repair 命令对阵列启动后台同步操作。
流程
可选:通过设置以下选项之一来控制 RAID 逻辑卷初始化的速率:
-
--maxrecoveryrate Rate[bBsSkKmMgG]为 RAID 逻辑卷设置最大恢复率,使其不会驱逐正常的 I/O 操作。 --minrecoveryrate Rate[bBsSkKmMgG]设置 RAID 逻辑卷的最小恢复率,以确保 sync 操作的 I/O 达到最小吞吐量,即使存在大量标准 I/O 时lvchange --maxrecoveryrate 4K my_vg/my_lv Logical volume _my_vg/my_lv_changed.
# lvchange --maxrecoveryrate 4K my_vg/my_lv Logical volume _my_vg/my_lv_changed.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用恢复率值替换 4K,它是阵列中每个设备的每秒的量。如果没有后缀,选项会假定为 kiB/每秒/每个设备。
lvchange --syncaction repair my_vg/my_lv
# lvchange --syncaction repair my_vg/my_lvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 当您执行 RAID 清理操作时,
sync操作所需的后台 I/O 可能会排挤 LVM 设备的其它 I/O,如对卷组元数据的更新。这可能导致其它 LVM 操作速度下降。注意您还可以在创建 RAID 设备时使用这些最大和最小 I/O 速率。例如,
lvcreate --type raid10 -i 2 -m 1 -L 10G --maxrecoveryrate 128 -n my_lv my_vg创建一个双向 RAID10 阵列 my_lv,它在卷组 my_vg 中,有大小为 10G,最大恢复率为 128 kiB/sec/device 的 3 个条带。
-
显示阵列中未修复的差异的数量,没有修复它们:
lvchange --syncaction check my_vg/my_lv
# lvchange --syncaction check my_vg/my_lvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令对阵列启动后台同步操作。
-
可选:查看
var/log/syslog文件以了解内核消息。 修正阵列中的差异:
lvchange --syncaction repair my_vg/my_lv
# lvchange --syncaction repair my_vg/my_lvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这个命令修复或者替换 RAID 逻辑卷中失败的设备。您可以在执行此命令后,在
var/log/syslog文件查看内核消息。
验证
显示有关清理操作的信息:
lvs -o +raid_sync_action,raid_mismatch_count my_vg/my_lv LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert SyncAction Mismatches my_lv my_vg rwi-a-r--- 500.00m 100.00 idle 0
# lvs -o +raid_sync_action,raid_mismatch_count my_vg/my_lv LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert SyncAction Mismatches my_lv my_vg rwi-a-r--- 500.00m 100.00 idle 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.7.22. RAID1 逻辑卷上的 I/O 操作 复制链接链接已复制到粘贴板!
您可以使用 lvchange 命令的 --writemostly 和 --writebehind 参数来控制对 RAID1 逻辑卷中设备的 I/O 操作。以下是使用这些参数的格式:
--[raid]writemostly PhysicalVolume[:{t|y|n}]将 RAID1 逻辑卷中的一个设备标记为
write-mostly,并避免对这些驱动器的所有读操作(除非有必要)。设置此参数会使驱动器中的 I/O 操作数量保持最小。使用
lvchange --writemostly /dev/sdb my_vg/my_lv命令设置此参数。您可以使用以下方法设置
writemostly属性::y-
默认情况下,对于逻辑卷中指定的物理卷,
writemostly属性的值是 yes。 :n-
要删除
writemostly标志,请将:n附加到物理卷上。 :t要切换
writemostly属性的值,请指定--writemostly参数。您可以在单个命令中多次使用此参数,例如
lvchange --writemostly /dev/sdd1:n --writemostly /dev/sdb1:t --writemostly /dev/sdc1:y my_vg/my_lv。通过这种方式,可以一次切换逻辑卷中所有物理卷的writemostly属性。
--[raid]writebehind IOCount将待处理写的最大数量标记为
writemostly。这些是适用于 RAID1 逻辑卷中设备的写操作的数量。超过这个参数值后,在 RAID 阵列通知所有写操作完成前,对组成设备的所有写操作都会同步完成。您可以使用
lvchange --writebehind 100 my_vg/my_lv设置此参数。将writemostly属性的值设置为零来清除首选项。使用这个设置,系统可以任意选择值。
67.7.23. 重塑 RAID 卷 复制链接链接已复制到粘贴板!
RAID 重塑意味着在不更改 RAID 级别的情况下更改 RAID 逻辑卷的属性。您可以更改的一些属性包括 RAID 布局、条带大小和条带数目。
流程
创建 RAID 逻辑卷:
lvcreate --type raid5 -i 2 -L 500M -n my_lv my_vg Using default stripesize 64.00 KiB. Rounding size 500.00 MiB (125 extents) up to stripe boundary size 504.00 MiB (126 extents). Logical volume "my_lv" created.
# lvcreate --type raid5 -i 2 -L 500M -n my_lv my_vg Using default stripesize 64.00 KiB. Rounding size 500.00 MiB (125 extents) up to stripe boundary size 504.00 MiB (126 extents). Logical volume "my_lv" created.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查看 RAID 逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:查看 RAID 逻辑卷的
stripes镜像和stripesize:lvs -o stripes my_vg/my_lv #Str 3# lvs -o stripes my_vg/my_lv #Str 3Copy to Clipboard Copied! Toggle word wrap Toggle overflow lvs -o stripesize my_vg/my_lv Stripe 64.00k
# lvs -o stripesize my_vg/my_lv Stripe 64.00kCopy to Clipboard Copied! Toggle word wrap Toggle overflow 根据您的要求,使用以下方法修改 RAID 逻辑卷的属性:
修改 RAID 逻辑卷的
stripes镜像:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 修改 RAID 逻辑卷的
stripesize:lvconvert --stripesize 128k my_vg/my_lv Converting stripesize 64.00 KiB of raid5 LV my_vg/my_lv to 128.00 KiB. Are you sure you want to convert raid5 LV my_vg/my_lv? [y/n]: y Logical volume my_vg/my_lv successfully converted.
# lvconvert --stripesize 128k my_vg/my_lv Converting stripesize 64.00 KiB of raid5 LV my_vg/my_lv to 128.00 KiB. Are you sure you want to convert raid5 LV my_vg/my_lv? [y/n]: y Logical volume my_vg/my_lv successfully converted.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 修改
maxrecoveryrate和minrecoveryrate属性:lvchange --maxrecoveryrate 4M my_vg/my_lv Logical volume my_vg/my_lv changed.
# lvchange --maxrecoveryrate 4M my_vg/my_lv Logical volume my_vg/my_lv changed.Copy to Clipboard Copied! Toggle word wrap Toggle overflow lvchange --minrecoveryrate 1M my_vg/my_lv Logical volume my_vg/my_lv changed.
# lvchange --minrecoveryrate 1M my_vg/my_lv Logical volume my_vg/my_lv changed.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 修改
syncaction属性:lvchange --syncaction check my_vg/my_lv
# lvchange --syncaction check my_vg/my_lvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 修改
writemostly和writebehind属性:lvchange --writemostly /dev/sdb my_vg/my_lv Logical volume my_vg/my_lv changed.
# lvchange --writemostly /dev/sdb my_vg/my_lv Logical volume my_vg/my_lv changed.Copy to Clipboard Copied! Toggle word wrap Toggle overflow lvchange --writebehind 100 my_vg/my_lv Logical volume my_vg/my_lv changed.
# lvchange --writebehind 100 my_vg/my_lv Logical volume my_vg/my_lv changed.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
查看 RAID 逻辑卷的
stripes镜像和stripesize:lvs -o stripes my_vg/my_lv #Str 4# lvs -o stripes my_vg/my_lv #Str 4Copy to Clipboard Copied! Toggle word wrap Toggle overflow lvs -o stripesize my_vg/my_lv Stripe 128.00k
# lvs -o stripesize my_vg/my_lv Stripe 128.00kCopy to Clipboard Copied! Toggle word wrap Toggle overflow 修改
maxrecoveryrate属性后,查看 RAID 逻辑卷:lvs -a -o +raid_max_recovery_rate LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert MaxSync my_lv my_vg rwi-a-r--- 10.00g 100.00 4096 [my_lv_rimage_0] my_vg iwi-aor--- 10.00g [...]
# lvs -a -o +raid_max_recovery_rate LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert MaxSync my_lv my_vg rwi-a-r--- 10.00g 100.00 4096 [my_lv_rimage_0] my_vg iwi-aor--- 10.00g [...]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 修改
minrecoveryrate属性后,查看 RAID 逻辑卷:lvs -a -o +raid_min_recovery_rate LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert MinSync my_lv my_vg rwi-a-r--- 10.00g 100.00 1024 [my_lv_rimage_0] my_vg iwi-aor--- 10.00g [...]
# lvs -a -o +raid_min_recovery_rate LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert MinSync my_lv my_vg rwi-a-r--- 10.00g 100.00 1024 [my_lv_rimage_0] my_vg iwi-aor--- 10.00g [...]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 修改
syncaction属性后,查看 RAID 逻辑卷:lvs -a LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert my_lv my_vg rwi-a-r--- 10.00g 2.66 [my_lv_rimage_0] my_vg iwi-aor--- 10.00g [...]
# lvs -a LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert my_lv my_vg rwi-a-r--- 10.00g 2.66 [my_lv_rimage_0] my_vg iwi-aor--- 10.00g [...]Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.7.24. 在 RAID 逻辑卷中更改区域大小 复制链接链接已复制到粘贴板!
当您创建 RAID 逻辑卷时,/etc/lvm/lvm.conf 文件中的 raid_region_size 参数代表 RAID 逻辑卷的区域大小。创建 RAID 逻辑卷后,您可以更改卷的区域大小。此参数定义跟踪脏或干净状态的粒度。位图中的脏位定义 RAID 卷脏关闭(例如系统故障)后要同步的工作集。
如果将 raid_region_size 设置为更高的值,它会减小位图的大小以及拥塞。但它会影响重新同步区域期间的 write 操作,因为写入 RAID 会延迟,直到同步区域完成为止。
流程
创建 RAID 逻辑卷:
lvcreate --type raid1 -m 1 -L 10G test Logical volume "lvol0" created.
# lvcreate --type raid1 -m 1 -L 10G test Logical volume "lvol0" created.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查看 RAID 逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Region 列显示 raid_region_size 参数的值。
可选:查看
raid_region_size参数的值:cat /etc/lvm/lvm.conf | grep raid_region_size # Configuration option activation/raid_region_size. # raid_region_size = 2048
# cat /etc/lvm/lvm.conf | grep raid_region_size # Configuration option activation/raid_region_size. # raid_region_size = 2048Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更改 RAID 逻辑卷的区域大小:
lvconvert -R 4096K my_vg/my_lv Do you really want to change the region_size 512.00 KiB of LV my_vg/my_lv to 4.00 MiB? [y/n]: y Changed region size on RAID LV my_vg/my_lv to 4.00 MiB.
# lvconvert -R 4096K my_vg/my_lv Do you really want to change the region_size 512.00 KiB of LV my_vg/my_lv to 4.00 MiB? [y/n]: y Changed region size on RAID LV my_vg/my_lv to 4.00 MiB.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新同步 RAID 逻辑卷:
lvchange --resync my_vg/my_lv Do you really want to deactivate logical volume my_vg/my_lv to resync it? [y/n]: y
# lvchange --resync my_vg/my_lv Do you really want to deactivate logical volume my_vg/my_lv to resync it? [y/n]: yCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
查看 RAID 逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Region 列表示
raid_region_size参数的更改值。查看
lvm.conf文件中raid_region_size参数的值:cat /etc/lvm/lvm.conf | grep raid_region_size # Configuration option activation/raid_region_size. # raid_region_size = 4096
# cat /etc/lvm/lvm.conf | grep raid_region_size # Configuration option activation/raid_region_size. # raid_region_size = 4096Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.8. 逻辑卷的快照 复制链接链接已复制到粘贴板!
使用 LVM 快照功能,您可以在特定时刻创建卷(例如 /dev/sda)的虚拟镜像,而不会导致服务中断。
67.8.1. 快照卷的概述 复制链接链接已复制到粘贴板!
当您制作快照后修改原始卷(源头)时,快照功能会对修改的数据区域创建一个副本来作为更改前的状态,以便可以重建卷的状态。当您创建快照时,需要对原始卷有完全的读写权限。
因为快照只复制创建快照后更改的数据区域,因此快照功能只需要少量的存储。例如,对于很少更新的原始卷,原始容量的 3-5% 就足以进行快照维护。它不提供备份过程的替代品。快照副本是虚拟副本,不是实际的介质备份。
快照的大小控制为存储原始卷的更改而预留的空间量。例如:如果您创建了一个快照,然后完全覆盖了原始卷,则快照应至少与原始卷大小一样方可保存更改。您应该定期监控快照的大小。例如:一个以读为主的短期快照(如 /usr)需要的空间小于卷的长期快照,因为它包含很多写入,如 /home。
如果快照满了,则快照就会失效,因为它无法跟踪原始卷的变化。但是,您可以将 LVM 配置为每当使用量超过 snapshot_autoextend_threshold 值时就自动扩展快照,以免快照失效。快照是完全可调整大小的,您可以执行以下操作:
- 如果您有存储容量,您可以增加快照卷的大小,以防止其被删除。
- 如果快照卷大于您的需要,您可以缩小卷的大小来释放空间,以供其他逻辑卷使用。
快照卷提供以下优点:
- 大多数情况下,当需要对逻辑卷执行备份时制作快照,而不用停止持续更新数据的活动系统。
-
您可以在快照文件系统上执行
fsck命令来检查文件系统的完整性,并确定原始文件系统是否需要文件系统修复。 - 由于快照是读/写的,因此您可以通过制作快照并对快照运行测试来对生产数据测试应用程序,而无需接触真实数据。
- 您可以创建 LVM 卷来用于 Red Hat Virtualization 。您可以使用 LVM 快照来创建虚拟客户端镜像的快照。这些快照可方便修改现有客户虚拟机或者使用最小附加存储创建新客户虚拟机。
67.8.2. 创建写时复制快照 复制链接链接已复制到粘贴板!
创建后,写时复制(COW)快照不包含任何数据。相反,它会在创建快照时引用原始卷的数据块。当原始卷中的数据更改时,COW 系统会在进行更改前将原始数据复制到快照。这样,快照的大小仅在更改发生时增长,在创建快照时存储原始卷的状态。通过最小数据更改,COW 快照对于短期备份和情况效率更高,提供了一种空间节约的方法来捕获并恢复到特定时间点。当您创建 COW 快照时,根据原始卷的预期更改来分配足够的存储。
在创建快照前,务必要考虑存储要求和快照的预期期限。快照的大小应该足以捕获其预期生命周期期间的更改,但它不能超过原始 LV 的大小。如果您预期更改率较低,则 10%-15% 的快照大小可能就足够了。对于高更改率的 LV,您可能需要分配 30% 或更多的空间。
定期监控快照的存储使用情况非常重要。如果快照达到其分配空间的 100%,则它将无效。您可以使用 lvs 命令显示快照的信息。
必须在完全填满快照之前扩展快照。这可以通过使用 lvextend 命令手动完成此操作。或者,您可以通过在 /etc/lvm/lvm.conf 文件中设置 snapshot_autoextend_threshold 和 snapshot_autoextend_percent 参数来设置自动扩展。此配置允许 dmeventd 在用量达到定义的阈值时自动扩展快照。
COW 快照允许您访问文件系统在创建快照时的只读版本。这可启用备份或数据分析,而不中断原始文件系统上的持续操作。虽然挂载并使用了快照,但原始逻辑卷及其文件系统可以继续更新和正常使用。
以下流程概述了如何从卷组 vg001 创建名为 origin 的逻辑卷,然后创建名为 snap 的快照。
先决条件
- 管理访问权限.
- 您已创建了一个卷组。如需更多信息,请参阅创建 LVM 卷组。
流程
从卷组 vg001 创建一个名为 origin 的逻辑卷:
lvcreate -L 1G -n origin vg001
# lvcreate -L 1G -n origin vg001Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建名为 snap 的快照 /dev/vg001/origin LV,大小为 100 MB :
lvcreate --size 100M --name snap --snapshot /dev/vg001/origin
# lvcreate --size 100M --name snap --snapshot /dev/vg001/originCopy to Clipboard Copied! Toggle word wrap Toggle overflow 显示原始卷以及当前使用的快照卷的百分比:
lvs -a -o +devices LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices origin vg001 owi-a-s--- 1.00g /dev/sde1(0) snap vg001 swi-a-s--- 100.00m origin 0.00 /dev/sde1(256)
# lvs -a -o +devices LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices origin vg001 owi-a-s--- 1.00g /dev/sde1(0) snap vg001 swi-a-s--- 100.00m origin 0.00 /dev/sde1(256)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.8.3. 将快照合并到其原始卷中 复制链接链接已复制到粘贴板!
使用 lvconvert 命令和 --merge 选项,将快照合并到其原始(源头)卷中。如果您丢失了数据或文件,您可以执行系统回滚,否则的话需要将系统恢复到之前的状态。合并快照卷后,得到的逻辑卷具有原始卷的名称、次要号码和 UUID。在合并过程中,对原始卷的读取和写入将会被指向要合并的快照。当合并完成后,会删除合并的快照。
如果原始卷和快照卷都没有打开且处于活跃状态,则合并会立即开始。否则,合并会在原始卷或快照激活后,或两者都关闭后开始。您可以在原始卷激活后,将快照合并到一个不能关闭的原始卷中,如 root 文件系统。
流程
合并快照卷。以下命令将快照卷 vg001/snap 合并到其 origin 中:
lvconvert --merge vg001/snap Merging of volume vg001/snap started. vg001/origin: Merged: 100.00%
# lvconvert --merge vg001/snap Merging of volume vg001/snap started. vg001/origin: Merged: 100.00%Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查看原始卷:
lvs -a -o +devices LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices origin vg001 owi-a-s--- 1.00g /dev/sde1(0)
# lvs -a -o +devices LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices origin vg001 owi-a-s--- 1.00g /dev/sde1(0)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.8.4. 使用快照 RHEL 系统角色创建 LVM 快照 复制链接链接已复制到粘贴板!
使用新的 snapshot RHEL 系统角色,您现在可以创建 LVM 快照。此系统角色还可以通过将 snapshot_lvm_action 参数设置为 check ,来检查是否有足够空间用于创建的快照,且与其名称没有冲突。要挂载创建的快照,请将 snapshot_lvm_action 设置为 mount。
在以下示例中,设置了 nouuid 选项,且仅在使用 XFS 文件系统时才需要此选项。XFS 不支持使用相同的 UUID 同时挂载多个文件系统。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这里,
snapshot_lvm_set参数描述了同一卷组中特定的逻辑卷(LV)。您还可以在设置此参数时指定不同 VG 种的 LV。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在受管节点上,查看创建的快照:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在受管节点上,通过检查 /data1_snapshot 和 /data2_snapshot 是否存在,来验证挂载操作是否成功:
ls -al /data1_snapshot ls -al /data2_snapshot
# ls -al /data1_snapshot # ls -al /data2_snapshotCopy to Clipboard Copied! Toggle word wrap Toggle overflow
67.8.5. 使用 snapshot RHEL 系统角色卸载 LVM 快照 复制链接链接已复制到粘贴板!
您可以通过将 snapshot_lvm_action 参数设置为 umount 来卸载特定的快照或所有快照。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 您已使用名称 <_snapset1_> 为一组快照创建了快照。
-
您已通过将
snapshot_lvm_action设置为mount挂载了快照,或手动挂载了它们。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:卸载特定的 LVM 快照:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这里,
snapshot_lvm_lv参数描述了特定的逻辑卷(LV),snapshot_lvm_vg参数描述了特定的卷组(VG)。卸载一组 LVM 快照:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这里,
snapshot_lvm_set参数描述了同一 VG 中的特定 LV。您还可以在设置此参数时指定不同 VG 种的 LV。
验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
67.8.6. 使用 snapshot RHEL 系统角色扩展 LVM 快照 复制链接链接已复制到粘贴板!
使用新的 snapshot RHEL 系统角色,您现在可以通过将 snapshot_lvm_action 参数设置为 extend 来扩展 LVM 快照。您可以将 snapshot_lvm_percent_space_required 参数设置为扩展快照后应该分配给快照的所需空间。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 您已为给定的卷组和逻辑卷创建了快照。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:通过为
percent_space_required参数指定值来扩展所有 LVM 快照:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这里,
snapshot_lvm_set参数描述了同一 VG 中的特定 LV。您还可以在设置此参数时指定不同 VG 种的 LV。通过为集合中每对 VG 和 LV 的
percent_space_required设置不同的值来扩展 LVM 快照:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在受管节点上,查看快照是否扩展了 30% :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.8.7. 使用 snapshot RHEL 系统角色恢复 LVM 快照 复制链接链接已复制到粘贴板!
使用新的 snapshot RHEL 系统角色,现在您可以通过将 snapshot_lvm_action 参数设置为 revert,将 LVM 快照恢复回其原始卷。
如果逻辑卷和快照卷都不是打开和活动的,则恢复操作立即开始。否则,它会在原始卷或快照都激活或两者都关闭后开始。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 您已使用 <_snapset1_> 作为 snapset 名称,为给定卷组和逻辑卷创建了快照。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:将特定的 LVM 快照恢复到其原始卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这里,
snapshot_lvm_lv参数描述了特定的逻辑卷(LV),snapshot_lvm_vg参数描述了特定的卷组(VG)。将一组 LVM 快照恢复到其原始卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这里,
snapshot_lvm_set参数描述了同一 VG 中的特定 LV。您还可以在设置此参数时指定不同 VG 种的 LV。注意revert操作可能需要一些时间才能完成。
验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启主机,或使用以下步骤停止并重新激活逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在受管节点上,查看恢复的快照:
lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert data1 data_vg -wi-a----- 1.00g data2 data_vg -wi-a----- 1.00g
# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert data1 data_vg -wi-a----- 1.00g data2 data_vg -wi-a----- 1.00gCopy to Clipboard Copied! Toggle word wrap Toggle overflow
67.8.8. 使用 snapshot RHEL 系统角色删除 LVM 快照 复制链接链接已复制到粘贴板!
使用新的 snapshot RHEL 系统角色,您现在可以通过指定快照的前缀或模式,并将 snapshot_lvm_action 参数设置为 remove,来删除所有 LVM 快照。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 您已使用 <_snapset1_> 作为快照名称创建了指定的快照。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:删除特定的 LVM 快照:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这里,
snapshot_lvm_vg参数描述了卷组中的特定逻辑卷(LV)。删除一组 LVM 快照:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这里,
snapshot_lvm_set参数描述了同一 VG 中的特定 LV。您还可以在设置此参数时指定不同 VG 种的 LV。
验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
67.9. 创建和管理精简配置的卷(精简卷) 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 支持精简配置的快照卷和逻辑卷:
- 使用精简配置的逻辑卷,您可以创建大于可用物理存储的逻辑卷。
- 使用精简配置的快照卷,您可以在同一数据卷中存储更多虚拟设备。
67.9.1. 精简配置概述 复制链接链接已复制到粘贴板!
很多现代存储堆栈现在提供在密集配置和精简配置之间进行选择的能力:
- 密集配置提供了块存储的传统行为,其中块的分配与其实际用途无关。
- 精简配置允许置备更大的块存储池,其大小可能大于存储数据的物理设备,从而导致过度配置。过度置备可能是因为单个块在实际使用之前没有被分配。如果您有多个共享同一池的精简置备设备,那么这些设备可以是过度配置的。
通过使用精简配置,您可以超额使用物理存储,且可以管理称为精简池的可用空间池。当应用程序需要时,您可以将这个精简池分配给任意数量的设备。当需要有效分配存储空间时,您可以动态扩展精简池。
例如,如果 10 个用户的每个用户都为他们的应用程序请求一个 100GB 的文件系统,那么您可以为每个用户创建一个 100GB 的文件系统,但其由较少的实际存储支持,仅在需要时使用。
在使用精简配置时,监控存储池,并在可用物理空间耗尽时添加更多容量是非常重要的。
以下是使用精简配置的设备的一些优点:
- 您可以创建大于可用物理存储的逻辑卷。
- 您可以将更多的虚拟设备存储在相同的数据卷中。
- 您可以创建逻辑上可自动增长的文件系统,以支持数据需求,并将未使用的块返回给池,以供池中的任意文件系统使用
以下是使用精简配置的设备的潜在缺陷:
- 精简配置的卷存在耗尽可用物理存储的固有风险。如果过度配置了底层存储,您可能会因为缺少可用物理存储而导致停机。例如,如果您创建了 10T 的精简配置的存储,而只有 1T 的物理存储来支持,则卷将在 1T 耗尽后不可用或不可写。
-
如果卷在精简配置的设备后没有向层发送丢弃,那么对使用情况的统计将不准确。例如,在不使用
-o discard mount选项的情况下放置文件系统,且不在精简配置的设备之上定期运行fstrim,则永远不会不分配之前使用的存储。在这种情况下,随着时间的推移,即使没有真正使用它,您最终都会使用全部的置备量。 - 您必须监控逻辑和物理使用情况,以便不会用尽可用的物理空间。
- 在带有快照的文件系统上,写时复制(CoW)操作可能会较慢。
- 数据块可以在多个文件系统之间混合,导致底层存储的随机访问限制,即使它没有向最终用户展示那种方式。
67.9.2. 创建精简配置的逻辑卷 复制链接链接已复制到粘贴板!
使用精简配置的逻辑卷,您可以创建大于可用物理存储的逻辑卷。创建精简配置的卷集允许系统分配您所使用的卷,而不是分配所请求的全部存储。
使用 lvcreate 命令的 -T 或 --thin 选项,您可以创建精简池或精简卷。您还可以使用 lvcreate 命令的 -T 选项,使用单个命令创建精简池和精简卷。这个流程描述了如何创建和增大精简配置的逻辑卷。
先决条件
- 您已创建了一个卷组。如需更多信息,请参阅创建 LVM 卷组。
流程
创建精简池:
lvcreate -L 100M -T vg001/mythinpool Thin pool volume with chunk size 64.00 KiB can address at most 15.81 TiB of data. Logical volume "mythinpool" created.
# lvcreate -L 100M -T vg001/mythinpool Thin pool volume with chunk size 64.00 KiB can address at most 15.81 TiB of data. Logical volume "mythinpool" created.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意:由于您要创建物理空间池,您必须指定池的大小。
lvcreate命令的-T选项不使用参数;它从随命令一起添加的其他选项来确定要创建的设备类型。您还可以使用额外的参数创建精简池,如下面的例子所示:您还可以使用
lvcreate命令的--thinpool参数创建精简池。与-T选项不同,--thinpool参数要求您指定您要创建的精简池逻辑卷的名称。以下示例使用--thinpool参数在卷组 vg001 中创建名为 mythinpool 的精简池,大小为 100M :lvcreate -L 100M --thinpool mythinpool vg001 Thin pool volume with chunk size 64.00 KiB can address at most 15.81 TiB of data. Logical volume "mythinpool" created.
# lvcreate -L 100M --thinpool mythinpool vg001 Thin pool volume with chunk size 64.00 KiB can address at most 15.81 TiB of data. Logical volume "mythinpool" created.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 由于池创建支持条带,所以您可以使用
-i和-I选项创建条带。以下命令在卷组 vg001 中创建一个名为 thinpool 的 100M 精简池,其有两个 64 kB 条带和一个大小为 256 kB 的块。它还会创建一个名为 vg001/thinvolume 的 1T 的精简卷。注意确保卷组中有两个有足够空闲空间的物理卷,否则您无法创建精简池。
lvcreate -i 2 -I 64 -c 256 -L 100M -T vg001/thinpool -V 1T --name thinvolume
# lvcreate -i 2 -I 64 -c 256 -L 100M -T vg001/thinpool -V 1T --name thinvolumeCopy to Clipboard Copied! Toggle word wrap Toggle overflow
创建精简卷:
lvcreate -V 1G -T vg001/mythinpool -n thinvolume WARNING: Sum of all thin volume sizes (1.00 GiB) exceeds the size of thin pool vg001/mythinpool (100.00 MiB). WARNING: You have not turned on protection against thin pools running out of space. WARNING: Set activation/thin_pool_autoextend_threshold below 100 to trigger automatic extension of thin pools before they get full. Logical volume "thinvolume" created.
# lvcreate -V 1G -T vg001/mythinpool -n thinvolume WARNING: Sum of all thin volume sizes (1.00 GiB) exceeds the size of thin pool vg001/mythinpool (100.00 MiB). WARNING: You have not turned on protection against thin pools running out of space. WARNING: Set activation/thin_pool_autoextend_threshold below 100 to trigger automatic extension of thin pools before they get full. Logical volume "thinvolume" created.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这种情况下,您为卷指定了虚拟大小,其大于包含它的池。您还可以使用额外的参数创建精简卷,如下面的例子所示:
要创建精简卷和精简池,请使用
lvcreate命令的-T选项,并指定大小和虚拟大小参数:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要使用剩余的空闲空间来创建精简卷和精简池,请使用
100%FREE选项:lvcreate -V 1G -l 100%FREE -T vg001/mythinpool -n thinvolume Thin pool volume with chunk size 64.00 KiB can address at most <15.88 TiB of data. Logical volume "thinvolume" created.
# lvcreate -V 1G -l 100%FREE -T vg001/mythinpool -n thinvolume Thin pool volume with chunk size 64.00 KiB can address at most <15.88 TiB of data. Logical volume "thinvolume" created.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要将现有的逻辑卷转换成精简池卷,请使用
lvconvert命令的--thinpool参数。您还必须将--poolmetadata参数与--thinpool参数结合使用,将现有的逻辑卷转换成精简池卷的元数据卷。以下示例将卷组 vg001 中的现有逻辑卷 lv1 转换为精简池卷,并将卷组 vg001 中的现有逻辑卷 lv2 转换为那个精简池卷的元数据卷:
lvconvert --thinpool vg001/lv1 --poolmetadata vg001/lv2 Converted vg001/lv1 to thin pool.
# lvconvert --thinpool vg001/lv1 --poolmetadata vg001/lv2 Converted vg001/lv1 to thin pool.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意将逻辑卷转换成精简池卷或者精简池元数据卷会破坏逻辑卷的内容,因为
lvconvert不会保留设备的内容,而是覆盖其内容。默认情况下,
lvcreate命令使用以下公式近似设置精简池元数据逻辑卷的大小:Pool_LV_size / Pool_LV_chunk_size * 64
Pool_LV_size / Pool_LV_chunk_size * 64Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您有大量快照,或者您的精简池有小的块,且预期以后精简池的大小会显著增长,则您可能需要使用
lvcreate命令的--poolmetadatasize参数来增加精简池的元数据卷的默认值。精简池元数据逻辑卷所支持的值在 2MiB 到 16GiB 之间。以下示例演示了如何增大精简池的元数据卷的默认值:
lvcreate -V 1G -l 100%FREE -T vg001/mythinpool --poolmetadatasize 16M -n thinvolume Thin pool volume with chunk size 64.00 KiB can address at most 15.81 TiB of data. Logical volume "thinvolume" created.
# lvcreate -V 1G -l 100%FREE -T vg001/mythinpool --poolmetadatasize 16M -n thinvolume Thin pool volume with chunk size 64.00 KiB can address at most 15.81 TiB of data. Logical volume "thinvolume" created.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
查看创建的精简池和精简卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:使用
lvextend命令扩展精简池的大小。但是您无法缩小精简池的大小。注意在创建精简池和精简卷的过程中,如果您使用
-l 100%FREE参数,这个命令会失败。以下命令调整了一个已存在的大小为 100M 的精简池,将其大小增加 100M。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:要重命名精简池和精简卷,请使用以下命令:
lvrename vg001/mythinpool vg001/mythinpool1 Renamed "mythinpool" to "mythinpool1" in volume group "vg001" lvrename vg001/thinvolume vg001/thinvolume1 Renamed "thinvolume" to "thinvolume1" in volume group "vg001"
# lvrename vg001/mythinpool vg001/mythinpool1 Renamed "mythinpool" to "mythinpool1" in volume group "vg001" # lvrename vg001/thinvolume vg001/thinvolume1 Renamed "thinvolume" to "thinvolume1" in volume group "vg001"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重命名后查看精简池和精简卷:
lvs LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert mythinpool1 vg001 twi-a-tz 100.00m 0.00 thinvolume1 vg001 Vwi-a-tz 1.00g mythinpool1 0.00
# lvs LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert mythinpool1 vg001 twi-a-tz 100.00m 0.00 thinvolume1 vg001 Vwi-a-tz 1.00g mythinpool1 0.00Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:要删除精简池,请使用以下命令:
lvremove -f vg001/mythinpool1 Logical volume "thinvolume1" successfully removed. Logical volume "mythinpool1" successfully removed.
# lvremove -f vg001/mythinpool1 Logical volume "thinvolume1" successfully removed. Logical volume "mythinpool1" successfully removed.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.9.3. 在 web 控制台中为精简置备的卷创建池 复制链接链接已复制到粘贴板!
为精简配置的卷创建一个池。
先决条件
- 已安装 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
-
cockpit-storaged软件包已安装在您的系统上。 - 已创建一个卷组。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 Web 控制台的日志记录。
- 点 Storage。
- 在 Storage 表中,点您要在其中创建精简卷的卷组。
- 在 Logical volume group 页面中,滚动到 LVM2 logical volumes 部分,然后点击 。
- 在 Name 字段中输入新逻辑卷的名称。不要在名称中包含空格。
在 下拉菜单中,选择 Pool for thinly provisioned volumes。
此配置允许您创建一个逻辑卷,其最大卷大小等于卷组中所含所有驱动器的总和。
定义逻辑卷的大小。考虑:
- 使用这个逻辑卷的系统需要多少空间。
- 您要创建的逻辑卷数量。
您可以选择不使用整个空间。如果需要,您可以稍后增大逻辑卷。
点 。
精简卷的池创建了,您现在可以向池中添加精简卷。
67.9.4. 在 web 控制台中创建精简配置的逻辑卷 复制链接链接已复制到粘贴板!
您可以使用 Web 控制台在池中创建精简配置的逻辑卷。该池可以包含多个精简卷,每个精简卷可以变大,作为精简卷本身的池。
使用精简卷需要定期检查逻辑卷的实际可用物理空间。
先决条件
- 已安装 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
-
cockpit-storaged软件包已安装在您的系统上。 - 用于精简卷的池已创建。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 Web 控制台的日志记录。
- 点 Storage。
- 在 Storage 表中,点您要在其中创建精简卷的卷组的菜单按钮。
- 在 Logical volume group 页面中,滚动到 LVM2 logical volumes 部分,然后点击您要在其中创建精简逻辑卷的池。
- 在 Pool for thinly provisioned LVM2 logical volumes 页面中,滚动到 Thinly provisioned LVM2 logical volumes 部分,然后点 Create new thinly provisioned logical volume。
- 在 Create thin volume 对话框中输入精简卷的名称。不要在名称中使用空格。
- 定义精简卷的大小。
点 Create。
精简逻辑卷被创建。您必须先格式化卷,然后才能使用它。
67.9.5. 块大小概述 复制链接链接已复制到粘贴板!
块是专用于快照存储的物理磁盘的最大单元。
使用以下条件来使用块大小:
- 较小的块需要更多元数据并会影响到性能,但可以更好地利用快照。
- 较大的块需要较少的元数据操作,但快照的空间利用率较小。
默认情况下,lvm2 以 64KiB 块大小开头,并估算此类块大小的好的元数据大小。lvm2 可以创建和使用的最小元数据大小为 2 MiB。如果元数据大小需要大于 128 MiB,它开始增大块大小,因此元数据大小会保持紧凑。然而,这可能会导致一些大的块值,这使快照使用效率较低。在这种情况下,较小的块大小和较大的元数据大小是一个更好的选择。
要根据您的需要指定块大小,请使用 -c 或 --chunksize 参数来覆盖 lvm2 估计的块大小。请注意,精简池创建后您无法更改块大小。
如果卷数据的大小在 TiB 范围内,请使用 ~15.8GiB 作为元数据大小,这是支持的最大大小,并根据您的要求设置块大小。但请注意,如果您需要扩展卷的数据大小且具有小的块,则无法增大元数据大小。
当用户在 元数据 中耗尽空间,或者由于有限的最大可寻址精简池数据大小,使用块大小和元数据的不合适的组合可能会导致出现潜在问题的情况。
67.9.6. 精简配置的快照卷 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 支持精简配置的快照卷。精简逻辑卷的快照也会创建一个精简逻辑卷(LV)。精简快照卷具有与其它精简卷相同的特征。您可以独立激活卷、扩展卷、重新命名卷、删除卷、甚至快照卷。
与所有 LVM 快照卷以及所有精简卷类似,集群中的节点不支持精简快照卷。快照卷必须在一个集群节点中完全激活。
传统快照必须为创建的每一个快照分配新的空间,其中数据作为对源的修改而被保留。但精简配置的快照与源共享相同的空间。精简 LV 的快照非常有效,因为精简 LV 及它的任何快照的公共数据块是共享的。您可以创建精简 LV 的快照或从其他精简快照创建快照。递归快照的通用块也在精简池中共享。
精简快照卷提供以下优点:
- 增加源的快照数量对性能的影响可以忽略不计。
- 精简快照卷可以减少磁盘用量,因为只有新数据被写入,且不会复制到每个快照中。
- 不需要同时激活精简快照卷和源,这是传统快照的要求。
- 当从快照恢复源时,不需要合并精简快照。您可以删除源,而使用快照。传统的快照有单独的卷,其中存储必须要复制回来的更改,即:合并到源以重置它。
- 与传统的快照相比,对允许的快照数量有很大的限制。
虽然使用精简快照卷有很多好处,但在有些情况下,传统的 LVM 快照卷功能可能更适合您的需要。您可以对所有类型的卷使用传统快照。但是,要使用精简快照则要求您使用精简配置。
您不能限制精简快照卷的大小 ; 如有必要,快照将使用精简池中的所有空间。一般说来,在决定使用什么快照格式时,您应该考虑具体的要求。
默认情况下,在通常的激活命令过程中会跳过精简快照卷。
67.9.7. 创建精简配置的快照卷 复制链接链接已复制到粘贴板!
使用精简配置的快照卷,可以在同一数据卷上存储更多的虚拟设备。
在创建精简快照卷时,不要指定卷的大小。如果指定了 size 参数,则创建的快照不会是一个精简快照卷,也不会使用精简池来存储数据。例如,命令 lvcreate -s vg/thinvolume -L10M 不会创建精简快照,即使原始卷是精简卷。
可为精简配置的原始卷创建精简快照,也可针对不是精简置备的原始卷创建精简快照。以下流程描述了创建精简配置的快照卷的不同方法。
先决条件
- 您已创建了一个精简配置的逻辑卷。如需更多信息,请参阅精简置备概述。
流程
创建一个精简配置的快照卷。下面的命令在精简配置的逻辑卷 vg001/thinvolume 上创建一个名为 mysnapshot1 的精简配置的快照卷:
lvcreate -s --name mysnapshot1 vg001/thinvolume Logical volume "mysnapshot1" created
# lvcreate -s --name mysnapshot1 vg001/thinvolume Logical volume "mysnapshot1" createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow lvs LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert mysnapshot1 vg001 Vwi-a-tz 1.00g mythinpool thinvolume 0.00 mythinpool vg001 twi-a-tz 100.00m 0.00 thinvolume vg001 Vwi-a-tz 1.00g mythinpool 0.00
# lvs LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert mysnapshot1 vg001 Vwi-a-tz 1.00g mythinpool thinvolume 0.00 mythinpool vg001 twi-a-tz 100.00m 0.00 thinvolume vg001 Vwi-a-tz 1.00g mythinpool 0.00Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意在使用精简配置时,存储管理员务必要监控存储池,并在其被完全占用时添加更多容量。有关扩展精简卷大小的详情,请参考 创建精简配置的逻辑卷。
您还可以为非置备的逻辑卷创建精简配置的快照。因为非精简配置的逻辑卷不包含在精简池中,因此它也被称为外部源。外部原始卷可以被很多精简置备的快照卷使用和共享,即使在不同的精简池中也是如此。在创建精简置备快照时,外部原始源必须不活跃且只读。
以下示例创建一个名为 origin_volume 的、只读的、不活动的逻辑卷的精简快照卷。精简快照卷名为 mythinsnap。然后,逻辑卷 origin_volume 在卷组 vg001 中成为精简快照卷 mythinsnap 的精简外部源,其使用现有的精简池 vg001/pool。原始卷必须与快照卷位于同一个卷组中。在指定原始逻辑卷时不要指定卷组。
lvcreate -s --thinpool vg001/pool origin_volume --name mythinsnap
# lvcreate -s --thinpool vg001/pool origin_volume --name mythinsnapCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以通过执行以下命令,创建第一个快照卷的第二个精简配置的快照卷。
lvcreate -s vg001/mysnapshot1 --name mysnapshot2 Logical volume "mysnapshot2" created.
# lvcreate -s vg001/mysnapshot1 --name mysnapshot2 Logical volume "mysnapshot2" created.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要创建第三个精简配置的快照卷,请使用以下命令:
lvcreate -s vg001/mysnapshot2 --name mysnapshot3 Logical volume "mysnapshot3" created.
# lvcreate -s vg001/mysnapshot2 --name mysnapshot3 Logical volume "mysnapshot3" created.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示精简快照逻辑卷的所有祖先和后代的列表:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这里,
- thinvolume 是卷组 vg001 中的一个原始卷。
- mysnapshot1 是 thinvolume 的一个快照
- mysnapshot2 是 mysnapshot1 的一个快照
mysnapshot3 是 mysnapshot2 的一个快照
注意lv_ancestors和lv_descendants字段显示现有的依赖关系。但是,如果从链中删除了条目,则它们不会跟踪这些条目,因为这些条目可能会破坏依赖关系链。
67.9.8. 使用 Web 控制台创建精简配置的快照卷 复制链接链接已复制到粘贴板!
您可以在 RHEL web 控制台中创建精简逻辑卷的快照,来备份最后一个快照以来磁盘上记录的更改。
先决条件
- 已安装 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
-
cockpit-storaged软件包已安装在您的系统上。 - 一个精简配置卷已创建。
流程
- 登录到 RHEL 8 web 控制台。
- 点 Storage。
- 在 Storage 表中,点您要在其中创建精简卷的卷组。
- 在 Logical volume group 页面中,滚动到 LVM2 logical volumes 部分,然后点击您要在其中创建精简逻辑卷的池。
- 在 Pool for thinly provisioned LVM2 logical volumes 页面中,滚动到 Thinly provisioned LVM2 logical volumes 部分,然后点击逻辑卷旁边的菜单按钮 。
从下拉菜单中选择 Create snapshot。
在 Name 字段中输入快照名称。
- 点 。
- 在 Pool for thinly provisioned LVM2 logical volumes 页面中,滚动到 Thinly provisioned LVM2 logical volumes 部分,然后点击新创建的快照旁的菜单按钮 。
从下拉菜单中选择 Activate 来激活卷。
67.10. 启用缓存来提高逻辑卷性能 复制链接链接已复制到粘贴板!
您可以在 LVM 逻辑卷中添加缓存以提高性能。LVM 然后使用快速设备(如 SSD)将 I/O 操作缓存到逻辑卷中。
下面的过程会从快速设备创建一个特殊的 LV,并将这个特殊 LV 附加到原始 LV,以便提高性能。
67.10.1. LVM 中的缓存方法 复制链接链接已复制到粘贴板!
LVM 提供以下缓存类型。每种模式适合逻辑卷中的不同类型的 I/O 模式。
dm-cache这个方法可通过在更快的卷上缓存数据来加快频繁使用数据的访问速度。这个方法会缓存读写操作。
dm-cache方法创建类型为缓存的逻辑卷。dm-writecache这个方法只缓存写操作。使用快速卷进行写入操作,然后将其迁移到后台较慢的磁盘中。快速卷通常是一个 SSD 或持久内存(PMEM)磁盘。
dm-writecache方法创建类型为writecache的逻辑卷。
67.10.2. LVM 缓存组件 复制链接链接已复制到粘贴板!
LVM 支持向 LVM 逻辑卷添加缓存的支持。LVM 缓存使用以下 LVM 逻辑卷类型:
- 主 LV
- 较大、较慢且原始的卷。
- 缓存池 LV
-
可用于缓存主 LV 数据的复合 LV。它有两个子 LV:存储缓存数据的数据和管理缓存数据的元数据。您可以为数据和元数据配置特定的磁盘。您只能使用具有
dm-cache的缓存池。 - Cachevol LV
-
可用于缓存主 LV 数据的线性 LV。您无法为数据和元数据配置单独的磁盘。
cachevol只能与dm-cache或dm-writecache一起使用。
所有这些关联的 LV 必须位于同一卷组中。
您可以将主逻辑卷(LV)与更快速、通常是较小的保存缓存数据的 LV 相结合。快速 LV 是从快速块设备(如 SSD 驱动器)创建的。当您为逻辑卷启用缓存时,LVM 会重新命名并隐藏原始卷,并显示由原始逻辑卷组成的新逻辑卷。新逻辑卷的组成取决于缓存方法以及您是否使用 cachevol 或 cachepool 选项。
cachevol 和 cachepool 选项会公开对缓存组件的放置不同级别的控制:
-
使用
cachevol选项,快速设备会同时存储数据块的缓存副本以及用于管理缓存的元数据。 使用
cachepool选项,单独的设备可以存储数据块的缓存副本以及用于管理缓存的元数据。dm-writecache方法与cachepool不兼容。
在所有配置中,LVM 会公开一个生成的设备,它会将所有缓存组件组合在一起。得到的设备的名称与原来的较慢的逻辑卷的名称相同。
67.10.3. 为逻辑卷启用 dm-cache 缓存 复制链接链接已复制到粘贴板!
这个过程使用 dm-cache 方法启用逻辑卷中常用数据缓存。
先决条件
-
您希望使用
dm-cache加快的逻辑卷存在于系统中。 - 包含较慢逻辑卷的卷组还包含在快速块设备中未使用的物理卷。
流程
在快速设备中创建
cachevol卷:lvcreate --size cachevol-size --name <fastvol> <vg> </dev/fast-pv>
# lvcreate --size cachevol-size --name <fastvol> <vg> </dev/fast-pv>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 替换以下值:
cachevol-size-
cachevol卷的大小,如5G fastvol-
cachevol卷的名称 vg- 卷组名称
/dev/fast-pv快速块设备的路径,如
/dev/sdf例 67.3. 创建一个
cachevol卷lvcreate --size 5G --name fastvol vg /dev/sdf Logical volume "fastvol" created.
# lvcreate --size 5G --name fastvol vg /dev/sdf Logical volume "fastvol" created.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
将
cachevol卷附加到主逻辑卷以开始缓存:lvconvert --type cache --cachevol <fastvol> <vg/main-lv>
# lvconvert --type cache --cachevol <fastvol> <vg/main-lv>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 替换以下值:
fastvol-
cachevol卷的名称 vg- 卷组名称
main-lv较慢的逻辑卷名称
例 67.4. 将
cachevol卷附加到主 LVlvconvert --type cache --cachevol fastvol vg/main-lv Erase all existing data on vg/fastvol? [y/n]: y Logical volume vg/main-lv is now cached.
# lvconvert --type cache --cachevol fastvol vg/main-lv Erase all existing data on vg/fastvol? [y/n]: y Logical volume vg/main-lv is now cached.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证新创建的逻辑卷是否启用了
dm-cache:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.10.4. 使用 cachepool 为逻辑卷启用 dm-cache 缓存 复制链接链接已复制到粘贴板!
这个过程可让您单独创建缓存数据和缓存元数据逻辑卷,然后将卷合并到缓存池中。
先决条件
-
您希望使用
dm-cache加快的逻辑卷存在于系统中。 - 包含较慢逻辑卷的卷组还包含在快速块设备中未使用的物理卷。
流程
在快速设备中创建
cachepool卷:lvcreate --type cache-pool --size <cachepool-size> --name <fastpool> <vg /dev/fast>
# lvcreate --type cache-pool --size <cachepool-size> --name <fastpool> <vg /dev/fast>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 替换以下值:
cachepool-size-
cachepool的大小,如5G fastpool-
cachepool卷的名称 vg- 卷组名称
/dev/fast到快速块设备的路径,如
/dev/sdf1注意您可以使用
--poolmetadata选项指定创建 cache-pool 时池元数据的位置。例 67.5. 创建一个
cachepool卷lvcreate --type cache-pool --size 5G --name fastpool vg /dev/sde Logical volume "fastpool" created.
# lvcreate --type cache-pool --size 5G --name fastpool vg /dev/sde Logical volume "fastpool" created.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
将
cachepool附加到主逻辑卷中开始缓存:lvconvert --type cache --cachepool <fastpool> <vg/main>
# lvconvert --type cache --cachepool <fastpool> <vg/main>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 替换以下值:
fastpool-
cachepool卷的名称 vg- 卷组名称
main较慢的逻辑卷名称
例 67.6. 将
cachepool附加到主 LVlvconvert --type cache --cachepool fastpool vg/main Do you want wipe existing metadata of cache pool vg/fastpool? [y/n]: y Logical volume vg/main is now cached.
# lvconvert --type cache --cachepool fastpool vg/main Do you want wipe existing metadata of cache pool vg/fastpool? [y/n]: y Logical volume vg/main is now cached.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查具有
cache-pool类型的新创建的设备卷:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.10.5. 为逻辑卷启用 dm-writecache 缓存 复制链接链接已复制到粘贴板!
这个过程允许使用 dm-writecache 方法将 I/O 操作缓存到逻辑卷中。
先决条件
-
您希望使用
dm-writecache加快的逻辑卷存在于系统中。 - 包含较慢逻辑卷的卷组还包含在快速块设备中未使用的物理卷。
- 如果较慢的逻辑卷处于活跃状态,请停用它。
流程
如果一个较慢的逻辑卷是活跃的,取消激活它:
lvchange --activate n <vg>/<main-lv>
# lvchange --activate n <vg>/<main-lv>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 替换以下值:
vg- 卷组名称
main-lv- 较慢的逻辑卷名称
在快速设备中创建一个已停用的
cachevol卷:lvcreate --activate n --size <cachevol-size> --name <fastvol> <vg> </dev/fast-pv>
# lvcreate --activate n --size <cachevol-size> --name <fastvol> <vg> </dev/fast-pv>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 替换以下值:
cachevol-size-
cachevol卷的大小,如5G fastvol-
cachevol卷的名称 vg- 卷组名称
/dev/fast-pv快速块设备的路径,如
/dev/sdf例 67.7. 创建一个停用的
cachevol卷lvcreate --activate n --size 5G --name fastvol vg /dev/sdf WARNING: Logical volume vg/fastvol not zeroed. Logical volume "fastvol" created.
# lvcreate --activate n --size 5G --name fastvol vg /dev/sdf WARNING: Logical volume vg/fastvol not zeroed. Logical volume "fastvol" created.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
将
cachevol卷附加到主逻辑卷以开始缓存:lvconvert --type writecache --cachevol <fastvol> <vg/main-lv>
# lvconvert --type writecache --cachevol <fastvol> <vg/main-lv>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 替换以下值:
fastvol-
cachevol卷的名称 vg- 卷组名称
main-lv较慢的逻辑卷名称
例 67.8. 将
cachevol卷附加到主 LVCopy to Clipboard Copied! Toggle word wrap Toggle overflow
激活生成的逻辑卷:
lvchange --activate y <vg/main-lv>
# lvchange --activate y <vg/main-lv>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 替换以下值:
vg- 卷组名称
main-lv- 较慢的逻辑卷名称
验证
检查新创建的设备:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.10.6. 为逻辑卷禁用缓存 复制链接链接已复制到粘贴板!
这个过程禁用 dm-cache 或 dm-writecache 缓存,该缓存在逻辑卷中当前启用。
先决条件
- 在逻辑卷中启用了缓存。
流程
取消激活逻辑卷:
lvchange --activate n <vg>/<main-lv>
# lvchange --activate n <vg>/<main-lv>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用卷组名称替换 vg,使用启用了缓存的逻辑卷的名称替换 main-lv。
分离
cachevol或cachepool卷:lvconvert --splitcache <vg>/<main-lv>
# lvconvert --splitcache <vg>/<main-lv>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 替换以下值:
使用卷组名称替换 vg,使用启用了缓存的逻辑卷的名称替换 main-lv。
例 67.9. 分离
cachevol或cachepool卷lvconvert --splitcache vg/main-lv Detaching writecache already clean. Logical volume vg/main-lv writecache has been detached.
# lvconvert --splitcache vg/main-lv Detaching writecache already clean. Logical volume vg/main-lv writecache has been detached.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查逻辑卷不再连接在一起:
lvs --all --options +devices <vg> LV Attr Type Devices fastvol -wi------- linear /dev/fast-pv main-lv -wi------- linear /dev/slow-pv
# lvs --all --options +devices <vg> LV Attr Type Devices fastvol -wi------- linear /dev/fast-pv main-lv -wi------- linear /dev/slow-pvCopy to Clipboard Copied! Toggle word wrap Toggle overflow
67.11. 逻辑卷激活 复制链接链接已复制到粘贴板!
默认情况下,当您创建逻辑卷时,它处于活动状态。处于活跃状态的逻辑卷可以通过块设备使用。激活的逻辑卷可以被访问,并可能会发生变化。
有些情况下,您需要使单个逻辑卷不活跃,因此对内核未知。您可以使用 lvchange 命令的 -a 选项激活或停用单独的逻辑卷。
以下是停用单个逻辑卷的格式:
lvchange -an vg/lv
# lvchange -an vg/lv
以下是激活单个逻辑卷的格式:
lvchange -ay vg/lv
# lvchange -ay vg/lv
您可以使用 vgchange 命令的 -a 选项激活或停用卷组中的所有逻辑卷。这等同于在卷组的每个独立逻辑卷中运行 lvchange -a 命令。
以下是停用卷组中所有逻辑卷的格式:
vgchange -an vg
# vgchange -an vg
以下是激活卷组中所有逻辑卷的格式:
vgchange -ay vg
# vgchange -ay vg
在手动激活过程中,systemd 会使用 /etc/fstab 文件中相应的挂载点自动挂载 LVM 卷,除非 systemd-mount 单元被屏蔽。
67.11.1. 控制逻辑卷和卷组的自动激活 复制链接链接已复制到粘贴板!
自动激活逻辑卷指的是,在系统启动时基于事件自动激活逻辑卷。当设备在系统中可用(设备在线事件)时,systemd/udev 会为每个设备运行 lvm2-pvscan 服务。此服务运行 pvscan --cache -aay device 命令,该命令读取指定的设备。如果设备属于卷组,则 pvscan 命令将检查系统上是否存在该卷组的所有物理卷。如果是这样,该命令将在那个卷组中激活逻辑卷。
您可以在 VG 或 LV 上设置自动激活属性。当禁用了自动激活属性时,VG 或 LV 将不会通过自动激活命令被激活,如 vgchange、lvchange,或使用 -aay 选项的 pvscan。如果在 VG 上禁用了自动激活,则不会在该 VG 中自动激活 LV,自动激活没有效果。如果在 VG 上启用了自动激活,则可以为单个 LV 禁用自动激活。
流程
您可以使用以下方法之一更新自动激活设置:
使用命令行控制 VG 的自动激活:
vgchange --setautoactivation <y|n>
# vgchange --setautoactivation <y|n>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用命令行控制 LV 的自动激活:
lvchange --setautoactivation <y|n>
# lvchange --setautoactivation <y|n>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下配置选项之一控制
/etc/lvm/lvm.conf配置文件中 LV 的自动激活:global/event_activation当禁用
event_activation时,systemd/udev只会在系统启动期间自动激活物理卷。如果还没有出现所有物理卷,那么可能不会自动激活一些逻辑卷。activation/auto_activation_volume_list将
auto_activation_volume_list设置为空列表可完全禁用自动激活。将auto_activation_volume_list设置为特定的逻辑卷,并且卷组将自动激活限制到这些逻辑卷。
67.11.2. 控制逻辑卷激活 复制链接链接已复制到粘贴板!
您可以使用以下方法控制逻辑卷的激活:
-
通过
/etc/lvm/conf文件中的activation/volume_list设置。这可让您指定激活哪些逻辑卷。有关使用这个选项的详情,请查看/etc/lvm/lvm.conf配置文件。 - 逻辑卷的激活跳过标签。当为逻辑卷设定这个标签时,会在正常的激活命令中跳过该卷。
或者,您可以将 --setactivationskip y|n 选项与 lvcreate 或 lvchange 命令一起使用,以启用或禁用激活跳过标志。
流程
您可以使用以下方法在逻辑卷上设置激活跳过标签:
要确定是否为逻辑卷设置了激活跳过标签,请运行
lvs命令,该命令显示k属性,如下例所示:lvs vg/thin1s1 LV VG Attr LSize Pool Origin thin1s1 vg Vwi---tz-k 1.00t pool0 thin1
# lvs vg/thin1s1 LV VG Attr LSize Pool Origin thin1s1 vg Vwi---tz-k 1.00t pool0 thin1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 除了标准的
-ay或--activate y选项外,您还可以使用-K或--ignoreactivationskip选项来激活具有k属性的逻辑卷。默认情况下,精简快照卷在创建时将其标记为激活跳过。您可以使用
/etc/lvm/lvm.conf文件中的auto_set_activation_skip设置控制新精简快照卷的默认激活跳过设置。下面的命令激活设置了激活跳过标签的精简快照逻辑卷:
lvchange -ay -K VG/SnapLV
# lvchange -ay -K VG/SnapLVCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下命令创建没有激活跳过标签的精简快照:
lvcreate -n SnapLV -kn -s vg/ThinLV --thinpool vg/ThinPoolLV
# lvcreate -n SnapLV -kn -s vg/ThinLV --thinpool vg/ThinPoolLVCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下命令从快照逻辑卷中删除激活跳过标签:
lvchange -kn VG/SnapLV
# lvchange -kn VG/SnapLVCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证是否创建了没有激活跳过标签的精简快照:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.11.3. 激活共享逻辑卷 复制链接链接已复制到粘贴板!
您可以使用 lvchange 和 vgchange 命令的 -a 选项控制共享逻辑卷的逻辑卷激活,如下所示:
| 命令 | 激活 |
|---|---|
|
| 以相互排斥的模式激活共享逻辑卷,只允许一个主机激活逻辑卷。如果激活失败,如逻辑卷在另外一个主机上激活一样,会报告一个错误。 |
|
| 以共享模式激活共享逻辑卷,允许多个主机同时激活逻辑卷。如果激活失败,如逻辑卷只在另一个主机中激活时一样,会出错。如果逻辑类型禁止共享访问,比如快照,命令将报告错误并失败。无法从多个主机同时使用的逻辑卷类型包括 thin、cache、raid 和 snapshot。 |
|
| 取消激活逻辑卷。 |
67.11.4. 在缺少设备的情况下激活逻辑卷 复制链接链接已复制到粘贴板!
您可以控制缺少设备的 LV 是否可以使用带有 --activationmode partial|degraded|complete 选项的 lvchange 命令激活。这些值如下所述:
| 激活模式 | 含义 |
|---|---|
| complete | 只允许激活没有缺失物理卷的逻辑卷。这是限制性最强的模式。 |
| degraded | 允许激活含有缺失物理卷的 RAID 逻辑卷。 |
| partial | 允许激活任何含有缺失物理卷的逻辑卷。这个选项只应用于恢复或修复。 |
activationmode 的默认值由 /etc/lvm/lvm.conf 文件中的 activationmode 设置决定。如果未给出命令行选项,则会使用它。
67.12. 限制 LVM 设备可见性和用法 复制链接链接已复制到粘贴板!
您可以通过控制 LVM 可扫描的设备来限制逻辑卷管理器(LVM)可用的设备。
要调整 LVM 设备扫描的配置,请编辑 /etc/lvm/lvm.conf 文件中的 LVM 设备过滤器设置。lvm.conf 文件中的过滤器由一系列简单的正则表达式组成。系统会将这些表达式应用于 /dev 目录中的每个设备名称,以确定是否接受或拒绝每个检测到的块设备。
67.12.1. LVM 过滤的持久性标识符 复制链接链接已复制到粘贴板!
传统的 Linux 设备名称(如 /dev/sda )可能会在系统修改和重启过程中改变。持久性命名属性(PNA),如全球识别符(WWID)、通用唯一标识符(UUID))和路径名称都基于存储设备的唯一特征,并对硬件配置中的更改有弹性。这使得它们在系统重启后更稳定和可预测。
在 LVM 过滤中持久设备标识符的实现可增强 LVM 配置的稳定性和可靠性。它还降低了与设备名称的动态性质关联的系统引导失败的风险。
67.12.2. LVM 设备过滤器 复制链接链接已复制到粘贴板!
Logical Volume Manager (LVM)设备过滤器是设备名称模式列表。您可以用它来指定系统可以评估设备的一组强制标准,并将其视为可以有效地与 LVM 一起使用。LVM 设备过滤器可让您控制 LVM 使用哪个设备。这有助于防止意外数据丢失或未授权访问存储设备。
67.12.2.1. LVM 设备过滤器模式特征 复制链接链接已复制到粘贴板!
LVM 设备过滤器的模式采用正则表达式的形式。正则表达式使用一个字符分割,前面为 a 表示接收,为 r 表示拒绝。匹配设备的列表中的第一个正则表达式决定了 LVM 接受还是拒绝(忽略)一个特定设备。然后,LVM 会在匹配设备路径的列表中查找初始正则表达式。LVM 使用这个正则表达式来确定是否应该使用a 结果批准设备,或使用 r 结果拒绝设备。
如果单个设备有多个路径名称,LVM 会根据它们列出的顺序访问这些路径名称。在任何 r 模式之前,如果至少有一个路径名称与一个 a 模式匹配 ,则 LVM 会批准设备。但是,如果在发现 a 模式之前所有路径名称都与 r 模式一致,则设备将被拒绝。
与模式不匹配的路径名称不会影响设备的批准状态。如果没有与设备的模式相对应的路径名,LVM 仍然会批准设备。
对于系统上的每个设备,udev 规则会生成多个符号链接。目录包含符号链接,如 /dev/disk/by-id/、/dev/disk/by-uuid/、/dev/disk/by-path/,以确保系统上的每个设备都可以通过多个路径名称访问。
要拒绝过滤器中的设备,与该特定设备关联的所有路径名称必须与对应的拒绝 r 表达式匹配。但是,识别要拒绝的所有可能路径名称可能会有一定难度。因此,这就是使用一系列特定的 a 表达式,后跟一个拒绝所有其它路径的 r|.*| 表达式来创建专门接受某些路径并拒绝所有其他路径的过滤的原因。
在过滤器中定义特定设备时,为该设备使用符号链接名称,而不是内核名称。设备的内核名称可能会改变,如 /dev/sda,而某些符号链接名称不会改变,如 /dev/disk/by-id/wwn-*。
默认设备过滤器接受所有连接到系统的设备。理想的用户配置的设备过滤器接受一个或多个模式,并拒绝所有其他模式。例如,模式列表以 r|.*| 结尾。
您可以在 lvm.conf 文件的 devices/filter 和 devices/global_filter 配置字段中找到 LVM 设备过滤器配置。devices/filter 和 devices/global_filter 配置字段是等同的。
67.12.2.2. LVM 设备过滤器配置示例 复制链接链接已复制到粘贴板!
以下示例显示了过滤配置,以控制 LVM 扫描并稍后使用的设备。要在 lvm.conf 文件中配置设备过滤器,请参阅
在处理复制或克隆的 PV 时,您可能会遇到重复的物理卷(PV)警告。您可以设置过滤器来解决这个问题。请参阅 防止重复 PV 警告的 LVM 设备过滤器示例 中的过滤器配置示例。
要扫描所有设备,请输入:
filter = [ "a|.*|" ]
filter = [ "a|.*|" ]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要删除
cdrom设备以避免驱动器中无介质时的延迟,请输入:filter = [ "r|^/dev/cdrom$|" ]
filter = [ "r|^/dev/cdrom$|" ]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要添加所有 loop 设备,并删除所有其他设备,请输入:
filter = [ "a|loop|", "r|.*|" ]
filter = [ "a|loop|", "r|.*|" ]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要添加所有循环和 SCSI 设备,并删除所有其他块设备,请输入:
filter = [ "a|loop|", "a|/dev/sd.*|", "r|.*|" ]
filter = [ "a|loop|", "a|/dev/sd.*|", "r|.*|" ]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要在第一个 SCSI 驱动器上只添加分区 8 ,并删除所有其他块设备,请输入:
filter = [ "a|^/dev/sda8$|", "r|.*|" ]
filter = [ "a|^/dev/sda8$|", "r|.*|" ]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要从 WWID 以及所有多路径设备标识的特定设备和中添加所有分区,请输入:
filter = [ "a|/dev/disk/by-id/<disk-id>.|", "a|/dev/mapper/mpath.|", "r|.*|" ]
filter = [ "a|/dev/disk/by-id/<disk-id>.|", "a|/dev/mapper/mpath.|", "r|.*|" ]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 命令还会删除任何其他块设备。
67.12.2.3. 应用 LVM 设备过滤器配置 复制链接链接已复制到粘贴板!
您可以通过在 lvm.conf 配置文件中设置过滤器来控制 LVM 扫描哪个设备。
先决条件
- 您已准备了要使用的设备过滤器模式。
流程
使用以下命令测试设备过滤器模式,而不实际修改
/etc/lvm/lvm.conf文件。以下包括一个过滤器配置示例。lvs --config 'devices{ filter = [ "a|/dev/emcpower.|", "r|.|" ] }'# lvs --config 'devices{ filter = [ "a|/dev/emcpower.|", "r|.|" ] }'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
/etc/lvm/lvm.conf文件的配置部分devices中添加设备过滤器模式:filter = [ "a|/dev/emcpower.*|", "r|*.|" ]
filter = [ "a|/dev/emcpower.*|", "r|*.|" ]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启时只扫描所需的设备:
dracut --force --verbose
# dracut --force --verboseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这个命令重建
initramfs文件系统,以便 LVM 在重启时只扫描必要的设备。
67.13. 控制 LVM 分配 复制链接链接已复制到粘贴板!
默认情况下,卷组使用 normal 分配策略。这会根据常识性规则分配物理扩展,如不在同一个物理卷上放置并行条带。您可以使用 vgcreate 命令的 --alloc 参数指定不同的分配策略(contiguous、anywhere 或 cling)。通常,只在特殊情况下需要指定非通常或非标准扩展分配时,才需要不同于 normal 的分配策略。
67.13.1. 从指定设备分配扩展 复制链接链接已复制到粘贴板!
您可以使用命令行末尾的 device 参数以及 lvcreate 和 lvconvert 命令来限制从特定的设备分配。您可以为每个设备指定实际的扩展范围,以提供更多控制。命令通过使用指定的物理卷(PV)作为参数,来只为新逻辑卷(LV)分配扩展。它使用每个 PV 的可用扩展,直到它们耗尽,然后使用列出的下一个 PV 中的扩展。如果所有列出的 PV 上没有足够的空间用于请求的 LV 大小,则命令失败。请注意,命令只从指定的 PV 分配。RAID LV 对单独的 raid 镜像或单独的条带使用顺序 PV 。如果 PV 对于整个 raid 镜像不够大,则生成的设备使用不是完全可预测的。
流程
创建卷组(VG):
vgcreate <vg_name> <PV> ...
# vgcreate <vg_name> <PV> ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
-
<vg_name>是 VG 的名称。 -
<PV>是 PV。
-
您可以分配 PV 来创建不同的卷类型,如 linear 或 raid :
分配扩展以创建线性卷:
lvcreate -n <lv_name> -L <lv_size> <vg_name> [ <PV> ... ]
# lvcreate -n <lv_name> -L <lv_size> <vg_name> [ <PV> ... ]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
-
<lv_name>是 LV 的名称。 -
<lv_size>是 LV 的大小。默认单位是 MB。 -
<vg_name>是 VG 的名称。 [ <PV …> ]是 PV。您可以在命令行上指定其中一个 PV、所有 PV 或 none :
如果您指定一个 PV,则会从其中为那个 LV 分配扩展。
注意如果 PV 对于整个 LV 没有足够的空闲扩展,则
lvcreate失败。- 如果您指定了两个 PV,则将从其中一个 PV 或两者的组合为那个 LV 分配扩展。
如果没有指定任何 PV,则将从 VG 中的一个 PV 或者 VG 中所有 PV 的组合分配扩展。
注意在这些情况下,LVM 可能无法使用所有命名的 PV 或可用的 PV。如果第一个 PV 对于整个 LV 有足够的空闲扩展,则可能不会使用其他 PV。但是,如果第一个 PV 没有一组空闲扩展的分配大小,则 LV 可能会从第一个 PV 中分配一部分,从第二个 PV 中分配一部分。
例 67.10. 从一个 PV 中分配扩展
在这个示例中,
lv1扩展将从sda分配。lvcreate -n lv1 -L1G vg /dev/sda
# lvcreate -n lv1 -L1G vg /dev/sdaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例 67.11. 从两个 PV 中分配扩展
在这个示例中,
lv2扩展将从sda或sdb或两者的组合中分配。lvcreate -n lv2 L1G vg /dev/sda /dev/sdb
# lvcreate -n lv2 L1G vg /dev/sda /dev/sdbCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例 67.12. 分配扩展,而不指定 PV
在本例中,
lv3扩展将从 VG 中的一个 PV 或 VG 中所有 PV 的组合中分配。lvcreate -n lv3 -L1G vg
# lvcreate -n lv3 -L1G vgCopy to Clipboard Copied! Toggle word wrap Toggle overflow 或者
-
分配扩展以创建 raid 卷:
lvcreate --type <segment_type> -m <mirror_images> -n <lv_name> -L <lv_size> <vg_name> [ <PV> ... ]
# lvcreate --type <segment_type> -m <mirror_images> -n <lv_name> -L <lv_size> <vg_name> [ <PV> ... ]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
-
<segment_type>是指定的片段类型(如raid5、mirror、snapshot)。 -
<mirror_images>使用创建一个带有指定的镜像数的raid1或镜像 LV。例如,-m 1会产生一个带有两个镜像的raid1LV。 -
<lv_name>是 LV 的名称。 -
<lv_size>是 LV 的大小。默认单位是 MB。 -
<vg_name>是 VG 的名称。 <[PV …]>是 PV。第一个 raid 镜像将从第一个 PV 中分配,第二个 raid 镜像将从第二个 PV 中分配,以此类推。
例 67.13. 从两个 PV 中分配 raid 镜像
在这个示例中,
lv4第一个 raid 镜像将从sda中分配,第二个镜像将从sdb中分配。lvcreate --type raid1 -m 1 -n lv4 -L1G vg /dev/sda /dev/sdb
# lvcreate --type raid1 -m 1 -n lv4 -L1G vg /dev/sda /dev/sdbCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例 67.14. 从三个 PV 中分配 raid 镜像
在本例中,
lv5第一个 raid 镜像将从sda中分配,第二个镜像将从sdb中分配,第三个镜像将从sdc中分配。lvcreate --type raid1 -m 2 -n lv5 -L1G vg /dev/sda /dev/sdb /dev/sdc
# lvcreate --type raid1 -m 2 -n lv5 -L1G vg /dev/sda /dev/sdb /dev/sdcCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
67.13.2. LVM 分配策略 复制链接链接已复制到粘贴板!
当 LVM 操作必须为一个或多个逻辑卷(LV)分配物理扩展时,分配过程如下:
- 生成卷组中的未分配物理扩展的完整集以供考虑。如果您在命令行末尾提供了任何范围的物理扩展,则只考虑指定物理卷(PV)上此范围内未分配的物理扩展。
-
每个分配策略依次尝试,从最严格的策略(
contiguous)开始,以使用--alloc选项指定的分配策略结束,或者设为特定 LV 或卷组(VG)的默认分配策略。对于每个策略,从需要填充的空 LV 空间的最低编号的逻辑扩展开始工作,根据分配策略施加的限制,来分配尽可能多的空间。如果需要更多空间,LVM 会进入下一个策略。
分配策略的限制如下:
contiguous策略要求任何逻辑扩展的物理位置紧挨着前一个逻辑扩展的物理位置,但 LV 的第一个逻辑扩展除外。当 LV 为条带或镜像时,
contiguous分配限制将独立应用于每个需要空间的条带或 raid 镜像。-
cling分配策略要求将用于任何逻辑扩展的 PV 添加到现有 LV 中,该 LV 之前已被该 LV 中至少一个逻辑扩展使用。 -
normal分配策略不会选择一个共享同一 PV 的物理扩展,因为逻辑扩展已分配给在那个并行 LV 中相同偏移处的一个并行 LV(即,不同的条带或 raid 镜像)。 -
如果有足够的空闲扩展来满足分配请求,但
normal分配策略将不使用它们,而anywhere分配策略将使用它们,即使这通过在同一 PV 上放置两个条带降低了性能。
您可以使用 vgchange 命令更改分配策略。
未来的更新可能会根据定义的分配策略在布局行为中引入代码更改。例如:如果您在命令行中提供两个空物理卷,它们有相同数量的可用物理扩展可用于分配,LVM 当前会以它们列出的顺序处理它们,但不保证在将来的版本中这个行为不会有变化。如果您需要特定 LV 的一个特定布局,请通过 lvcreate 和 lvconvert 步骤序列构建它,这样应用到每个步骤的分配策略就不会让 LVM 自行决定布局。
67.13.3. 防止在物理卷中分配 复制链接链接已复制到粘贴板!
您可以使用 pvchange 命令防止在一个或多个物理卷的空闲空间上分配物理扩展。如果有磁盘错误或者要删除物理卷,则可能需要这样做。
流程
使用以下命令禁止在
device_name上分配物理扩展:pvchange -x n /dev/sdk1
# pvchange -x n /dev/sdk1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您还可以使用
pvchange命令的-xy参数允许之前被禁止的分配。
67.14. LVM 故障排除 复制链接链接已复制到粘贴板!
您可以使用逻辑卷管理器(LVM)工具来排除 LVM 卷和组群中的各种问题。
67.14.1. 在 LVM 中收集诊断数据 复制链接链接已复制到粘贴板!
如果 LVM 命令没有按预期工作,您可以使用以下方法收集诊断信息。
流程
使用以下方法收集不同类型的诊断数据:
-
向任何 LVM 命令添加
-v参数,以提高命令输出的详细程度。添加更多的v会进一步增加输出的详细程度。最多允许 4 个这样的v,例如-vvvv。 -
在
/etc/lvm/lvm.conf配置文件的log部分中,增加level选项的值。这会导致 LVM 在系统日志中提供更多详情。 如果问题与逻辑卷激活有关,请启用 LVM 在激活过程中记录信息:
-
在
/etc/lvm/lvm.conf配置文件的log部分中设置activation = 1选项。 -
使用
-vvvv选项执行 LVM 命令。 - 检查命令输出。
将
activation选项重置为0。如果您没有将选项重置为
0,则系统在内存不足时可能会变得无响应。
-
在
为诊断显示信息转储:
lvmdump
# lvmdumpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 显示附加系统信息:
lvs -v
# lvs -vCopy to Clipboard Copied! Toggle word wrap Toggle overflow pvs --all
# pvs --allCopy to Clipboard Copied! Toggle word wrap Toggle overflow dmsetup info --columns
# dmsetup info --columnsCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
检查
/etc/lvm/backup/目录中的最后一个 LVM 元数据备份,并在/etc/lvm/archive/目录中检查存档版本。 检查当前的配置信息:
lvmconfig
# lvmconfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
检查
/run/lvm/hints缓存文件以获取哪些设备上具有物理卷的记录。
-
向任何 LVM 命令添加
67.14.2. 显示有关失败的 LVM 设备的信息 复制链接链接已复制到粘贴板!
有关失败的逻辑卷管理器(LVM)卷的故障排除信息可帮助您确定失败的原因。您可以检查以下最常见 LVM 卷失败的示例。
例 67.15. 失败的卷组
在本例中,组成卷组 myvg 的设备之一失败。然后卷组可用性取决于故障类型。例如,如果涉及到 RAID 卷,卷组仍可用。您还可以查看有关失败的设备的信息。
例 67.16. 逻辑卷失败
在这个示例中,其中一个设备失败了。这可能是卷组中逻辑卷失败的原因。命令输出显示失败的逻辑卷。
例 67.17. RAID 逻辑卷的失败的镜像
下面的例子显示了 RAID 逻辑卷的镜像失败时,pvs 和 lvs 工具的命令输出。逻辑卷仍可使用。
67.14.3. 从卷组中删除丢失的 LVM 物理卷 复制链接链接已复制到粘贴板!
如果物理卷失败,您可以激活卷组中剩余的物理卷,并从卷组中删除所有使用该物理卷的逻辑卷。
流程
激活卷组中剩余的物理卷:
vgchange --activate y --partial myvg
# vgchange --activate y --partial myvgCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查要删除哪些逻辑卷:
vgreduce --removemissing --test myvg
# vgreduce --removemissing --test myvgCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从卷组中删除所有使用丢失的物理卷的逻辑卷:
vgreduce --removemissing --force myvg
# vgreduce --removemissing --force myvgCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果您意外删除要保留的逻辑卷,您可以撤销
vgreduce操作:vgcfgrestore myvg
# vgcfgrestore myvgCopy to Clipboard Copied! Toggle word wrap Toggle overflow 警告如果您删除了精简池,LVM 无法撤销操作。
67.14.4. 查找丢失的 LVM 物理卷的元数据 复制链接链接已复制到粘贴板!
如果意外覆盖或者破坏了卷组物理卷元数据区域,您会得到出错信息表示元数据区域不正确,或者系统无法使用特定的 UUID 找到物理卷。
这个过程找到丢失或者损坏的物理卷的最新归档元数据。
流程
查找包含物理卷的卷组元数据文件。归档的元数据文件位于
/etc/lvm/archive/volume-group-name_backup-number.vg路径中:cat /etc/lvm/archive/myvg_00000-1248998876.vg
# cat /etc/lvm/archive/myvg_00000-1248998876.vgCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用备份号替换 00000-1248998876。选择该卷组最高数字最后已知的有效元数据文件。
找到物理卷的 UUID。使用以下任一方法。
列出逻辑卷:
lvs --all --options +devices Couldn't find device with uuid 'FmGRh3-zhok-iVI8-7qTD-S5BI-MAEN-NYM5Sk'.
# lvs --all --options +devices Couldn't find device with uuid 'FmGRh3-zhok-iVI8-7qTD-S5BI-MAEN-NYM5Sk'.Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
检查归档的元数据文件。在卷组配置的
physical_volumes部分中,查找标记为id =的 UUID。 使用
--partial选项取消激活卷组:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.14.5. 在 LVM 物理卷中恢复元数据 复制链接链接已复制到粘贴板!
这个过程恢复被损坏或者替换为新设备的物理卷的元数据。您可以通过重写物理卷的元数据区域从物理卷中恢复数据。
不要在正常的 LVM 逻辑卷中尝试这个步骤。如果您指定了不正确的 UUID,将会丢失您的数据。
先决条件
- 您已找出丢失的物理卷的元数据。详情请查看查找缺少的 LVM 物理卷的元数据。
流程
恢复物理卷中的元数据:
pvcreate --uuid physical-volume-uuid \ --restorefile /etc/lvm/archive/volume-group-name_backup-number.vg \ block-device
# pvcreate --uuid physical-volume-uuid \ --restorefile /etc/lvm/archive/volume-group-name_backup-number.vg \ block-deviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意该命令只覆盖 LVM 元数据区域,不会影响现有的数据区域。
例 67.18. 在 /dev/vdb1上恢复物理卷
以下示例使用以下属性将
/dev/vdb1设备标记为物理卷:-
FmGRh3-zhok-iVI8-7qTD-S5BI-MAEN-NYM5Sk的 UUID VG_00050.vg中包含的元数据信息,它是卷组最新的好归档元数据。pvcreate --uuid "FmGRh3-zhok-iVI8-7qTD-S5BI-MAEN-NYM5Sk" \ --restorefile /etc/lvm/archive/VG_00050.vg \ /dev/vdb1 ... Physical volume "/dev/vdb1" successfully created
# pvcreate --uuid "FmGRh3-zhok-iVI8-7qTD-S5BI-MAEN-NYM5Sk" \ --restorefile /etc/lvm/archive/VG_00050.vg \ /dev/vdb1 ... Physical volume "/dev/vdb1" successfully createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
恢复卷组的元数据:
vgcfgrestore myvg Restored volume group myvg
# vgcfgrestore myvg Restored volume group myvgCopy to Clipboard Copied! Toggle word wrap Toggle overflow 显示卷组中的逻辑卷:
lvs --all --options +devices myvg
# lvs --all --options +devices myvgCopy to Clipboard Copied! Toggle word wrap Toggle overflow 逻辑卷目前不活跃。例如:
LV VG Attr LSize Origin Snap% Move Log Copy% Devices mylv myvg -wi--- 300.00G /dev/vdb1 (0),/dev/vdb1(0) mylv myvg -wi--- 300.00G /dev/vdb1 (34728),/dev/vdb1(0)
LV VG Attr LSize Origin Snap% Move Log Copy% Devices mylv myvg -wi--- 300.00G /dev/vdb1 (0),/dev/vdb1(0) mylv myvg -wi--- 300.00G /dev/vdb1 (34728),/dev/vdb1(0)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果逻辑卷的片段类型是 RAID,则重新同步逻辑卷:
lvchange --resync myvg/mylv
# lvchange --resync myvg/mylvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 激活逻辑卷:
lvchange --activate y myvg/mylv
# lvchange --activate y myvg/mylvCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
如果磁盘中的 LVM 元数据至少使用了覆盖其数据的空间,这个过程可以恢复物理卷。如果覆盖元数据的数据超过了元数据区域,则该卷中的数据可能会受到影响。您可能能够使用
fsck命令恢复这些数据。
验证
显示活跃逻辑卷:
lvs --all --options +devices LV VG Attr LSize Origin Snap% Move Log Copy% Devices mylv myvg -wi--- 300.00G /dev/vdb1 (0),/dev/vdb1(0) mylv myvg -wi--- 300.00G /dev/vdb1 (34728),/dev/vdb1(0)
# lvs --all --options +devices LV VG Attr LSize Origin Snap% Move Log Copy% Devices mylv myvg -wi--- 300.00G /dev/vdb1 (0),/dev/vdb1(0) mylv myvg -wi--- 300.00G /dev/vdb1 (34728),/dev/vdb1(0)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.14.6. LVM 输出中的轮询错误 复制链接链接已复制到粘贴板!
LVM 命令报告卷组中的空间使用情况,将报告的编号舍入到 2 个十进制位置,以提供人类可读的输出。这包括 vgdisplay 和 vgs 实用程序。
因此,报告的剩余空间值可能大于卷组中物理扩展提供的内容。如果您试图根据报告可用空间的大小创建逻辑卷,则可能会遇到以下错误:
Insufficient free extents
Insufficient free extents
要临时解决这个问题,您必须检查卷组中可用物理扩展的数量,即可用空间的具体值。然后您可以使用扩展数目成功创建逻辑卷。
67.14.7. 防止创建 LVM 卷时出现循环错误 复制链接链接已复制到粘贴板!
在创建 LVM 逻辑卷时,您可以指定逻辑卷的逻辑扩展数目以避免循环错误。
流程
在卷组中找到可用物理扩展数目:
vgdisplay myvg
# vgdisplay myvgCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例 67.19. 卷组中可用扩展
例如:以下卷组有 8780 可用物理扩展:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建逻辑卷。以扩展而不是字节为单位输入卷大小。
例 67.20. 通过指定扩展数目来创建逻辑卷
lvcreate --extents 8780 --name mylv myvg
# lvcreate --extents 8780 --name mylv myvgCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例 67.21. 创建逻辑卷以占据所有剩余空间
另外,您可以扩展逻辑卷使其使用卷组中剩余的可用空间的比例。例如:
lvcreate --extents 100%FREE --name mylv myvg
# lvcreate --extents 100%FREE --name mylv myvgCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查卷组现在使用的扩展数目:
vgs --options +vg_free_count,vg_extent_count VG #PV #LV #SN Attr VSize VFree Free #Ext myvg 2 1 0 wz--n- 34.30G 0 0 8780
# vgs --options +vg_free_count,vg_extent_count VG #PV #LV #SN Attr VSize VFree Free #Ext myvg 2 1 0 wz--n- 34.30G 0 0 8780Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.14.8. LVM 元数据及其在磁盘上的位置 复制链接链接已复制到粘贴板!
提供不同偏移和大小的 LVM 标头和元数据区域。
默认的 LVM 磁盘标头:
-
可在
label_header和pv_header结构中找到。 - 在磁盘的第二个 512 字节扇区中。请注意,如果在创建物理卷(PV)时没有指定默认位置,则标头也可以在第一个或第三个扇区中。
标准的 LVM 元数据区域:
- 从磁盘开始的头 4096 个字节。
- 从磁盘开始的最后 1 MiB。
-
从包含
mda_header结构的 512 字节扇区开始。
元数据文本区域从 mda_header 扇区之后开始,一直到元数据区域的末尾。LVM VG 元数据文本以循环方式写入元数据文本区域中。mda_header 指向文本区域中最新 VG 元数据的位置。
您可以使用 # pvck --dump headers /dev/sda 命令打印磁盘中的 LVM 标头。此命令打印 label_header、pv_header、mda_header 以及元数据文本的位置(如果发现的话)。错误字段使用 CHECK 前缀打印。
LVM 元数据区偏移将匹配创建 PV 的机器的页大小,因此元数据区域也可以从磁盘开始的 8K、16K 或 64K 开始。
在创建 PV 时可以指定较大或较小的元数据区域,在这种情况下,元数据区域可能不在 1 MiB 处结束。pv_header 指定元数据区域的大小。
在创建 PV 时,可选择在磁盘末尾处启用第二个元数据区域。pv_header 包含元数据区域的位置。
67.14.9. 从磁盘中提取 VG 元数据 复制链接链接已复制到粘贴板!
根据您的情况,选择以下流程之一,来从磁盘中提取 VG 元数据。有关如何保存提取的元数据的详情,请参考 将提取的元数据保存在文件中。
要进行修复,您可以使用 /etc/lvm/backup/ 中的备份文件,而无需从磁盘中提取元数据。
流程
打印有效的
mda_header中提到的当前元数据文本:pvck --dump metadata <disk>
# pvck --dump metadata <disk>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 67.22. 有效的
mda_header中的元数据文本pvck --dump metadata /dev/sdb metadata text at 172032 crc Oxc627522f # vgname test segno 59 --- <raw metadata from disk> ---
# pvck --dump metadata /dev/sdb metadata text at 172032 crc Oxc627522f # vgname test segno 59 --- <raw metadata from disk> ---Copy to Clipboard Copied! Toggle word wrap Toggle overflow 根据找到的有效的
mda_header,打印元数据区域中找到的所有元数据副本的位置:pvck --dump metadata_all <disk>
# pvck --dump metadata_all <disk>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 67.23. 元数据区域中元数据副本的位置
pvck --dump metadata_all /dev/sdb metadata at 4608 length 815 crc 29fcd7ab vg test seqno 1 id FaCsSz-1ZZn-mTO4-Xl4i-zb6G-BYat-u53Fxv metadata at 5632 length 1144 crc 50ea61c3 vg test seqno 2 id FaCsSz-1ZZn-mTO4-Xl4i-zb6G-BYat-u53Fxv metadata at 7168 length 1450 crc 5652ea55 vg test seqno 3 id FaCsSz-1ZZn-mTO4-Xl4i-zb6G-BYat-u53Fxv
# pvck --dump metadata_all /dev/sdb metadata at 4608 length 815 crc 29fcd7ab vg test seqno 1 id FaCsSz-1ZZn-mTO4-Xl4i-zb6G-BYat-u53Fxv metadata at 5632 length 1144 crc 50ea61c3 vg test seqno 2 id FaCsSz-1ZZn-mTO4-Xl4i-zb6G-BYat-u53Fxv metadata at 7168 length 1450 crc 5652ea55 vg test seqno 3 id FaCsSz-1ZZn-mTO4-Xl4i-zb6G-BYat-u53FxvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 搜索元数据区域中所有的元数据副本,而不使用
mda_header,例如,如果标头丢失或损坏:pvck --dump metadata_search <disk>
# pvck --dump metadata_search <disk>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 67.24. 不使用
mda_header的元数据区域中的元数据副本pvck --dump metadata_search /dev/sdb Searching for metadata at offset 4096 size 1044480 metadata at 4608 length 815 crc 29fcd7ab vg test seqno 1 id FaCsSz-1ZZn-mTO4-Xl4i-zb6G-BYat-u53Fxv metadata at 5632 length 1144 crc 50ea61c3 vg test seqno 2 id FaCsSz-1ZZn-mTO4-Xl4i-zb6G-BYat-u53Fxv metadata at 7168 length 1450 crc 5652ea55 vg test seqno 3 id FaCsSz-1ZZn-mTO4-Xl4i-zb6G-BYat-u53Fxv
# pvck --dump metadata_search /dev/sdb Searching for metadata at offset 4096 size 1044480 metadata at 4608 length 815 crc 29fcd7ab vg test seqno 1 id FaCsSz-1ZZn-mTO4-Xl4i-zb6G-BYat-u53Fxv metadata at 5632 length 1144 crc 50ea61c3 vg test seqno 2 id FaCsSz-1ZZn-mTO4-Xl4i-zb6G-BYat-u53Fxv metadata at 7168 length 1450 crc 5652ea55 vg test seqno 3 id FaCsSz-1ZZn-mTO4-Xl4i-zb6G-BYat-u53FxvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
dump命令中包含-v选项,以显示每个元数据副本的描述:pvck --dump metadata -v <disk>
# pvck --dump metadata -v <disk>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 67.25. 显示元数据的每个副本的描述
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
此文件可用于修复。默认情况下,第一个元数据区域用于转储元数据。如果磁盘在磁盘末尾处有第二个元数据区域,则您可以使用 --settings "mda_num=2" 选项来将第二个元数据区域用于转储元数据。
67.14.10. 将提取的元数据保存到文件中 复制链接链接已复制到粘贴板!
如果您需要使用转储的元数据进行修复,则需要使用 -f 选项和 --setings 选项将提取的元数据保存到文件中。
流程
-
如果将
-f <filename>添加到--dump metadata中,则原始元数据被写入到指定的文件中。您可以使用此文件进行修复。 -
如果将
-f <filename>添加到--dump metadata_all或--dump metadata_search中,则所有位置的原始元数据都被写入到指定的文件中。 要保存
--dump metadata_all|metadata_searchadd--settings "metadata_offset=<offset>"中的一个元数据文本的实例,其中<offset>来自列表输出 "metadata at <offset>"。例 67.26. 命令的输出
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
您可以恢复损坏的或者使用新设备替换的物理卷上的元数据和标头。您可以通过重写物理卷的元数据区域从物理卷中恢复数据。
这些指令应当谨慎使用,只有在您熟悉每个命令的含义、卷的当前布局、您需要实现的布局以及备份元数据文件的内容时才应使用。这些命令可能会损坏数据,因此建议您联系红帽全球支持服务来帮助进行故障排除。
先决条件
- 您已找出丢失的物理卷的元数据。详情请查看查找缺少的 LVM 物理卷的元数据。
流程
收集
pvcreate和vgcfgrestore命令需要的以下信息。您可以通过运行# pvs -o+uuid命令收集有关磁盘和 UUID 的信息。-
metadata-file 是 VG 的最新元数据备份文件的路径,例如:
/etc/lvm/backup/<vg-name> - VG-name 是有损坏或缺失 PV 的 VG 的名称。
-
此设备上损坏的 PV 的 UUID 是从
# pvs -i+uuid命令的输出中获得的值。 -
disk 是 PV 所在磁盘的名称,例如
/dev/sdb。请注意,这是正确的磁盘,或寻求帮助,否则以下这些步骤可能导致数据丢失。
-
metadata-file 是 VG 的最新元数据备份文件的路径,例如:
在磁盘上重新创建 LVM 标头:
pvcreate --restorefile <metadata-file> --uuid <UUID> <disk>
# pvcreate --restorefile <metadata-file> --uuid <UUID> <disk>Copy to Clipboard Copied! Toggle word wrap Toggle overflow (可选)验证标头是否有效:
pvck --dump headers <disk>
# pvck --dump headers <disk>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 恢复磁盘上的 VG 元数据:
vgcfgrestore --file <metadata-file> <vg-name>
# vgcfgrestore --file <metadata-file> <vg-name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow (可选)验证元数据是否已恢复:
pvck --dump metadata <disk>
# pvck --dump metadata <disk>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果没有 VG 的元数据备份文件,您可以使用 将提取的元数据保存到文件 中的流程来获得。
验证
要验证新物理卷是否完整,且卷组是否正常工作,请检查以下命令的输出:
vgs
# vgsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
67.14.12. 使用 pvck 命令修复带有损坏的 LVM 标头和元数据的磁盘 复制链接链接已复制到粘贴板!
这是 使用 pvcreate 和 vgcfgrestore 命令修复带有损坏的 LVM 标头和元数据的磁盘 的替代方法。有些情况下,pvcreate 和 vgcfgrestore 命令可能无法正常工作。这个方法更针对损坏的磁盘。
此方法使用 pvck --dump 提取的元数据输入文件,或者 /etc/lvm/backup 中的备份文件。在可能的情况下,使用 pvck --dump 从同一 VG 中的其他 PV 中保存的元数据,或者从 PV 上的第二个元数据区域中保存的元数据。如需更多信息,请参阅 将提取的元数据保存到文件中。
流程
修复磁盘上的标头和元数据:
pvck --repair -f <metadata-file> <disk>
# pvck --repair -f <metadata-file> <disk>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
-
<metadata-file> 是包含 VG 的最新元数据的文件。这可以是
/etc/lvm/backup/vg-name,也可以是包含pvck --dump metadata_search命令输出中的原始元数据文本的文件。 -
<disk> 是 PV 所在的磁盘的名称,例如
/dev/sdb。要防止数据丢失,请验证是否为正确的磁盘。如果您不确定磁盘是否正确,请联系红帽支持团队。
-
<metadata-file> 是包含 VG 的最新元数据的文件。这可以是
如果元数据文件是一个备份文件,则 pvck --repair 应在 VG 中保存元数据的每个 PV 上运行。如果元数据文件是从另一个 PV 中提取的原始元数据,则仅需要在损坏的 PV 上运行 pvck --repair。
验证
要检查新物理卷是否完整,且卷组是否工作正常,请检查以下命令的输出:
vgs <vgname>
# vgs <vgname>Copy to Clipboard Copied! Toggle word wrap Toggle overflow pvs <pvname>
# pvs <pvname>Copy to Clipboard Copied! Toggle word wrap Toggle overflow lvs <lvname>
# lvs <lvname>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.14.13. LVM RAID 故障排除 复制链接链接已复制到粘贴板!
您可以对 LVM RAID 设备中的多个问题进行故障排除,修正数据错误、恢复设备或者替换失败的设备。
67.14.13.1. 检查 RAID 逻辑卷中数据的一致性 复制链接链接已复制到粘贴板!
LVM 提供对 RAID 逻辑卷的清理支持。RAID 清理是读取阵列中的所有数据和奇偶校验块的过程,并检查它们是否是分配的。lvchange --syncaction repair 命令对阵列启动后台同步操作。
流程
可选:通过设置以下选项之一来控制 RAID 逻辑卷初始化的速率:
-
--maxrecoveryrate Rate[bBsSkKmMgG]为 RAID 逻辑卷设置最大恢复率,使其不会驱逐正常的 I/O 操作。 --minrecoveryrate Rate[bBsSkKmMgG]设置 RAID 逻辑卷的最小恢复率,以确保 sync 操作的 I/O 达到最小吞吐量,即使存在大量标准 I/O 时lvchange --maxrecoveryrate 4K my_vg/my_lv Logical volume _my_vg/my_lv_changed.
# lvchange --maxrecoveryrate 4K my_vg/my_lv Logical volume _my_vg/my_lv_changed.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用恢复率值替换 4K,它是阵列中每个设备的每秒的量。如果没有后缀,选项会假定为 kiB/每秒/每个设备。
lvchange --syncaction repair my_vg/my_lv
# lvchange --syncaction repair my_vg/my_lvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 当您执行 RAID 清理操作时,
sync操作所需的后台 I/O 可能会排挤 LVM 设备的其它 I/O,如对卷组元数据的更新。这可能导致其它 LVM 操作速度下降。注意您还可以在创建 RAID 设备时使用这些最大和最小 I/O 速率。例如,
lvcreate --type raid10 -i 2 -m 1 -L 10G --maxrecoveryrate 128 -n my_lv my_vg创建一个双向 RAID10 阵列 my_lv,它在卷组 my_vg 中,有大小为 10G,最大恢复率为 128 kiB/sec/device 的 3 个条带。
-
显示阵列中未修复的差异的数量,没有修复它们:
lvchange --syncaction check my_vg/my_lv
# lvchange --syncaction check my_vg/my_lvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令对阵列启动后台同步操作。
-
可选:查看
var/log/syslog文件以了解内核消息。 修正阵列中的差异:
lvchange --syncaction repair my_vg/my_lv
# lvchange --syncaction repair my_vg/my_lvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这个命令修复或者替换 RAID 逻辑卷中失败的设备。您可以在执行此命令后,在
var/log/syslog文件查看内核消息。
验证
显示有关清理操作的信息:
lvs -o +raid_sync_action,raid_mismatch_count my_vg/my_lv LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert SyncAction Mismatches my_lv my_vg rwi-a-r--- 500.00m 100.00 idle 0
# lvs -o +raid_sync_action,raid_mismatch_count my_vg/my_lv LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert SyncAction Mismatches my_lv my_vg rwi-a-r--- 500.00m 100.00 idle 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.14.13.2. 在逻辑卷中替换失败的 RAID 设备 复制链接链接已复制到粘贴板!
RAID 与传统的 LVM 镜像不同。如果是 LVM 镜像,请删除失败的设备。否则,当 RAID 阵列继续使用失败的设备运行时,镜像逻辑卷将挂起。对于 RAID1 以外的 RAID 级别,删除设备意味着转换到较低 RAID 级别,例如从 RAID6 转换到 RAID5,或者从 RAID4 或 RAID5 转换到 RAID0。
您可以使用 lvconvert 命令的 --repair 参数替换 RAID 逻辑卷中作为物理卷的故障设备,而不是删除失败的设备并分配一个替换品。
先决条件
卷组包含一个物理卷,它有足够的可用容量替换失败的设备。
如果卷组中没有有足够可用扩展的物理卷,请使用
vgextend程序添加一个新的、足够大的物理卷。
流程
查看 RAID 逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 /dev/sdc 设备失败后查看 RAID 逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 替换失败的设备:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:手动指定替换失败设备的物理卷:
lvconvert --repair my_vg/my_lv replacement_pv
# lvconvert --repair my_vg/my_lv replacement_pvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用替换检查逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在您从卷组中删除失败的设备前,LVM 工具仍然指示 LVM 无法找到失败的设备。
从卷组中删除失败的设备:
vgreduce --removemissing my_vg
# vgreduce --removemissing my_vgCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
删除失败的设备后查看可用的物理卷:
pvscan PV /dev/sde1 VG rhel_virt-506 lvm2 [<7.00 GiB / 0 free] PV /dev/sdb1 VG my_vg lvm2 [<60.00 GiB / 59.50 GiB free] PV /dev/sdd1 VG my_vg lvm2 [<60.00 GiB / 59.50 GiB free] PV /dev/sdd1 VG my_vg lvm2 [<60.00 GiB / 59.50 GiB free]
# pvscan PV /dev/sde1 VG rhel_virt-506 lvm2 [<7.00 GiB / 0 free] PV /dev/sdb1 VG my_vg lvm2 [<60.00 GiB / 59.50 GiB free] PV /dev/sdd1 VG my_vg lvm2 [<60.00 GiB / 59.50 GiB free] PV /dev/sdd1 VG my_vg lvm2 [<60.00 GiB / 59.50 GiB free]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 替换失败的设备后检查逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.14.14. 对多路径 LVM 设备进行重复的物理卷警告进行故障排除 复制链接链接已复制到粘贴板!
当将 LVM 与多路径存储搭配使用时,列出卷组或者逻辑卷的 LVM 命令可能会显示如下信息:
Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/dm-5 not /dev/sdd Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/emcpowerb not /dev/sde Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/sddlmab not /dev/sdf
Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/dm-5 not /dev/sdd
Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/emcpowerb not /dev/sde
Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/sddlmab not /dev/sdf
您可以排除这些警告来了解 LVM 显示它们的原因,或者隐藏警告信息。
67.14.14.1. 重复 PV 警告的根本原因 复制链接链接已复制到粘贴板!
当设备映射器多路径(DM 多路径)、EMC PowerPath 或 Hitachi Dynamic Link Manager (HDLM)等多路径软件管理系统上的存储设备时,每个路径都会作为不同的 SCSI 设备注册。
然后多路径软件会创建一个映射到这些独立路径的新设备。因为每个 LUN 在 /dev 目录中有多个指向同一底层数据的设备节点,所以所有设备节点都包含相同的 LVM 元数据。
| 多路径软件 | 到 LUN 的 SCSI 路径 | 多路径设备映射到路径 |
|---|---|---|
| DM Multipath |
|
|
| EMC PowerPath |
| |
| HDLM |
|
由于多个设备节点,LVM 工具会多次查找相同的元数据,并将其作为重复报告。
67.14.14.2. 重复 PV 警告的情况 复制链接链接已复制到粘贴板!
LVM 在以下任一情况下显示重复的 PV 警告:
- 指向同一设备的单路径
输出中显示的两个设备都是指向同一设备的单一路径。
以下示例显示一个重复的 PV 警告,在该示例中重复的设备是同一设备的单一路径。
Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/sdd not /dev/sdf
Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/sdd not /dev/sdfCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您使用
multipath -ll命令列出当前的 DM 多路径拓扑,您可以在相同的多路径映射中找到/dev/sdd和/dev/sdf。这些重复的信息只是警告,并不意味着 LVM 操作失败。相反,它们会提醒您 LVM 只使用其中一个设备作为物理卷,并忽略其它设备。
如果消息表示 LVM 选择了不正确的设备,或者警告是否对用户造成破坏,您可以应用过滤器。过滤器将 LVM 配置为只搜索物理卷所需的设备,并将任何基本路径留给多路径设备。因此,不再会出现警告。
- 多路径映射
输出中显示的两个设备都是多路径映射。
以下示例显示两个设备都有重复的 PV 警告,它们是多路径映射。重复的物理卷位于两个不同的设备中,而不是位于同一设备的两个不同路径中。
Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/mapper/mpatha not /dev/mapper/mpathc Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/emcpowera not /dev/emcpowerh
Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/mapper/mpatha not /dev/mapper/mpathc Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/emcpowera not /dev/emcpowerhCopy to Clipboard Copied! Toggle word wrap Toggle overflow 对于同一设备上的单一路径的设备来说,这种情形比重复的警告更为严重。这些警告通常意味着机器正在访问它不应该访问的设备:例如: LUN 克隆或镜像(mirror)。
除非您明确知道您应该从机器中删除哪些设备,否则这个情况可能无法恢复。红帽建议联系红帽技术支持来解决这个问题。
67.14.14.3. 防止重复 PV 警告的 LVM 设备过滤器示例 复制链接链接已复制到粘贴板!
以下示例显示 LVM 设备过滤器,它避免了由单一逻辑单元(LUN)由多个存储路径导致的重复物理卷警告。
您可以为逻辑卷管理器(LVM)配置过滤器来检查所有设备的元数据。元数据包括其上有根卷组的本地硬盘,以及任何多路径设备。通过拒绝到多路径设备的底层路径(如 /dev/sdb、/dev/sdd),您可以避免这些重复的 PV 警告,因为 LVM 在多路径设备上只查找每个唯一元数据区域一次。
要接受第一块硬盘上的第二个分区以及任何设备映射器(DM)多路径设备,并拒绝任何其它设备,请输入:
filter = [ "a|/dev/sda2$|", "a|/dev/mapper/mpath.*|", "r|.*|" ]
filter = [ "a|/dev/sda2$|", "a|/dev/mapper/mpath.*|", "r|.*|" ]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要接受所有 HP SmartArray 控制器和任何 EMC PowerPath 设备,请输入:
filter = [ "a|/dev/cciss/.*|", "a|/dev/emcpower.*|", "r|.*|" ]
filter = [ "a|/dev/cciss/.*|", "a|/dev/emcpower.*|", "r|.*|" ]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要接受第一个 IDE 驱动器上的任何分区,以及任何多路径设备,请输入:
filter = [ "a|/dev/hda.*|", "a|/dev/mapper/mpath.*|", "r|.*|" ]
filter = [ "a|/dev/hda.*|", "a|/dev/mapper/mpath.*|", "r|.*|" ]Copy to Clipboard Copied! Toggle word wrap Toggle overflow