管理存储设备
配置和管理本地和远程存储设备
摘要
- 创建一个独立磁盘冗余阵列(RAID),来在多个驱动器上存储数据,并避免数据丢失。
- 使用 iSCSI 和 Fabrics 上的 NVMe 通过网络访问存储。
- 设置 Stratis 来管理物理存储设备的池。
对红帽文档提供反馈 复制链接链接已复制到粘贴板!
我们感谢您对我们文档的反馈。让我们了解如何改进它。
通过 Jira 提交反馈(需要帐户)
- 登录到 Jira 网站。
- 在顶部导航栏中点 Create
- 在 Summary 字段中输入描述性标题。
- 在 Description 字段中输入您对改进的建议。包括文档相关部分的链接。
- 点对话框底部的 Create。
第 1 章 可用存储选项概述 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 中提供了几个本地的、远程的和基于集群的存储选项。
本地存储意味着存储设备安装在系统上,或者直接附加到系统。
使用远程存储时,可以通过 LAN、互联网或使用光纤通道网络对设备进行访问。以下高级别 Red Hat Enterprise Linux 存储图描述了不同的存储选项。
图 1.1. Red Hat Enterprise Linux 存储图
1.1. 本地存储概述 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 10 提供了多个本地存储选项。
- 基本磁盘管理
通过使用
parted和fdisk,您可以创建、修改、删除和查看磁盘分区。以下是分区布局标准:- GUID 分区表(GPT)
- 它使用全局唯一标识符(GUID),并提供唯一的磁盘和分区 GUID。
- 主引导记录(MBR)
- 它用于基于 BIOS 的计算机。您可以创建主分区、扩展分区及逻辑分区。
- 存储消耗选项
- Non-Volatile Dual In-line Memory Modules(NVDIMM)管理
- 它是内存和存储的组合。您可以在连接到您的系统的 NVDIMM 设备中启用和管理各种存储类型。
- 块存储管理
- 数据以块形式存储,每个块都有唯一的标识符。
- 文件存储
- 数据存储在本地系统中的文件级别。这些数据可以使用 XFS(默认)或 ext4 在本地进行访问,可使用 NFS 和 SMB 通过网络进行访问。
- 逻辑卷
- 逻辑卷管理器(LVM)
- 它从物理设备中创建逻辑设备。逻辑卷(LV)是物理卷(PV)和卷组(VG)的组合。
- Virtual Data Optimizer(VDO)
它被用来通过重复数据删除(deduplication)、压缩和精简置备来减少数据。在 LV 下使用 VDO 可以帮助:
- 扩展 VDO 卷
- 通过多个设备生成 VDO 卷
- 本地文件系统
- XFS
- 默认 RHEL 文件系统。
- ext4
- 传统的文件系统。
- Stratis
- Stratis 是一个支持高级存储功能的混合用户和内核本地存储管理系统。
1.2. 远程存储概述 复制链接链接已复制到粘贴板!
以下是 RHEL 10 中提供的远程存储选项:
- 存储连接选项
- iSCSI
- RHEL 10 使用 targetcli 工具来添加、删除、查看,并监控 iSCSI 存储互连。
- 光纤频道(FC)
RHEL 10 提供以下原生光纤通道驱动程序:
-
lpfc -
qla2xxx -
zfcp
-
- Non-volatile Memory Express(NVMe)
一个允许主机软件工具与固态驱动器进行通信的接口。使用以下类型的光纤传输来通过光纤配置 NVMe:
- 使用远程直接内存访问(NVMe/RDMA)的 NVMe over fabrics
- 使用光纤通道(NVMe/FC)的 NVMe over fabrics
- 使用 TCP (NVMe/TCP)的 NVMe over fabrics
- 设备映射器多路径(DM 多路径)
- 允许您将服务器节点和存储阵列间的多个 I/O 路径配置为单一设备。这些 I/O 路径是可包含独立电缆、交换机和控制器的物理 SAN 连接。
- 网络文件系统
- NFS
- SMB
第 2 章 持久性命名属性 复制链接链接已复制到粘贴板!
您识别和管理存储设备的方式确保了系统的稳定性和可预测性。RHEL 10 为此使用两种主要命名方案:传统的设备名称和持久命名属性。
传统设备名称
Linux 内核根据它们在系统或其枚举中出现的顺序分配传统设备名称。例如,第一个 SATA 驱动器通常被标记为 /dev/sda,第二个被标记为 /dev/sdb,以此类推。虽然这些名称非常简单,但在添加或删除设备时,在硬件配置修改时,或者系统重启时,它们可能会改变。这可能会对脚本和配置文件造成挑战。另外,传统名称缺少有关设备用途或特征的描述性信息。
持久性命名属性
持久命名属性(PNA)基于存储设备的唯一特性,使其在提供给系统时更稳定且可预测,即使在系统重启后也是如此。PNA 的一个主要好处是其对硬件配置变化的弹性,使其非常适合维护一致的命名约定。使用 PNA 时,您可以在脚本、配置文件和管理工具中引用存储设备,而无需担心意外的名称变化。另外,PNA 通常包括宝贵的元数据,如设备类型或制造商信息,如供应商、型号名称和序列号组合,从而增强了其描述性性以便实现有效设备识别和管理。PNA 最终用于在 /dev/disk 目录中创建设备链接来访问单个设备。设备链接名称构成和管理的方式由 udev 规则驱动。
以下是我们在 /dev/disk/ 中找到的目录的列表:
即使系统重启后,其内容保持唯一的目录:
-
by-id:基于硬件属性,使用vendor/model/serial_string组合。 -
by-path* :基于物理硬件放置。对于物理连接到机器的设备或磁盘,这是它们物理连接到主板上主机总线的插槽或端口。但是,对于通过网络连接的设备或磁盘,这包含网络地址规范。 -
by-partlabel:基于分配给设备分区的标签。这些标签由用户分配。 -
by-partuuid:基于自动生成的UUID形式的唯一数字。 -
by-uuid:基于自动生成的 UUID 形式的唯一数字。
-
在当前系统运行期间,而不是系统重启后,其内容保持唯一的目录:
-
by-diskseq:diskseq是在系统引导时从 1 开始的 '磁盘序列号'。它将这个序列号分配给新连接的磁盘,之后的每个磁盘按顺序获得下一个序列号。当系统重启时,计数器从 1 重新开始。
-
带有专门用于循环设备的内容的目录:
-
by-loop-ref -
by-loop-inode
-
2.1. 用于识别文件系统和块设备的持久属性 复制链接链接已复制到粘贴板!
在 RHEL 10 存储中,持久命名属性(PNA)是在系统重启、硬件更改或其他事件后为存储设备提供一致且可靠的命名机制。这些属性用于一致地识别存储设备,即使存储设备被添加、被删除或被重新配置。
PNA 用于识别文件系统和块设备,但它们的用途不同:
- 用于识别文件系统的持久属性
通用唯一标识符(UUID)
UUID 主要用于唯一识别存储设备上的文件系统。每个文件系统实例都有其自动分配的 UUID,即使文件系统被卸载、重新挂载或者设备被分离和重新连接时,这个标识符也会保持不变。
标签
标签是用户为文件系统分配的名称。虽然它们可以用来识别和引用文件系统,但它们并不像 UUID 那样标准化。由于用户分配文件系统标签,所以其唯一性取决于他们的选择。标签通常用作 UUID 的替代方法,用来在配置文件中指定文件系统。
当您为文件系统分配标签时,它会成为文件系统元数据的一部分。这个标签与文件系统保持关联,即使文件系统被卸载了、重新挂载了或者设备被分离了和重新连接了。
- 用于识别块设备的持久属性
通用唯一标识符(UUID)
UUID 可用于识别存储块设备。当存储设备被格式化时,通常会为设备本身分配一个 UUID。此类 UUID 通常在其他块设备之上生成并分配给虚拟块设备,其中真正的设备在最底层。例如,基于设备映射器(DM)的设备及其关联的子系统,如逻辑卷管理器(LVM)和 crypt,都将 UUID 用于设备识别,如逻辑卷 UUID (LVUUID)和 crypt UUID。
此外,基于多设备(MD)的设备都分配了 UUID。虚拟设备通常也使用组件 UUID 标记底层设备。例如,LVM 使用物理卷 UUID (PVUUID)标记其底层设备,MD 使用 MD 组件 UUID 标记其底层设备。
这些 UUID 嵌在虚拟块设备元数据中,它们用作持久命名属性。它允许您唯一标识块设备,即使您更改了其上的文件系统。也会为设备分区分配 UUID。
此类 UUID 可以与其他设备 ID 共存。例如:由其
vendor/model/serial_number组合或 WWID 标识的设备堆栈底层的 sda 设备也有一个由 LVM 分配的 PVUUID。然后,这被 LVM 本身识别,来在其上面的层中构建卷组(VG)或逻辑卷(LV)。- 标签或名称标签或名称也可以分配给特定的块设备。这适用于有用户分配的标签的分区。某些虚拟块设备,如基于设备映射器(DM)的设备和基于多设备(MD)的设备也使用名称来识别设备。
全球标识符(WWID)
WWID 包含一组全局唯一的标识符,它们通常与存储设备或存储组件关联。它们通常用在企业级存储区域网络(SAN),如光纤通道(FC),来识别存储节点 - 全球节点名称(WWNN)或到节点上存储设备的实际端口/连接 - 全球端口名称(WWPN)。WWID 确保服务器和 SAN 存储设备之间的一致通信,并帮助管理存储设备的冗余路径。
其他类型的设备也可能使用 WWID 形式,如 NVME 设备。这些设备不必需要通过网络或 SAN 访问,它们也不必是企业级设备。
WWID 格式不遵循单一的标准。例如,SCSI 使用 NAA、T10 和 EUI 等格式。NVME 使用 EUI-64、NGUUID 和 UUID 等格式。
序列字符串
序列字符串是制造商分配给每个存储块设备的唯一标识符。它可用于区分存储设备,并可与其他属性(如 UUID 或 WWID)结合使用,来管理设备。
在
udev 规则中,因此在/dev/disk/by-id内容中,"短串序列字符串"通常代表设备本身报告的实际序列字符串。而"序列字符串"由几个组件组成,通常为<bus_type>-<vendor_name>_<model_name>_<short_serial_string>。实际设备首选 wwids 和序列字符串。对于虚拟设备,首选 UUID 或名称。
2.2. udev 设备命名规则 复制链接链接已复制到粘贴板!
用户空间设备管理器(udev)子系统允许您为设备分配持久名称定义规则。这些规则存储在带有 .rules 扩展名的文件中。有两个存储 udev 规则的主要位置:
-
/usr/lib/udev/rules.d/目录包含安装的软件包附带的默认规则。 -
/etc/udev/rules.d目录用于自定义udev规则。
如果修改了 /usr/lib/udev/rules.d/ 中的规则,它将在更新过程中被软件包的规则文件所覆盖。因此,任何手动或自定义规则都应添加到 /etc/udev/rules.d 中,它在其中一直保留,直到明确删除为止。在使用前,两个目录中的 udev 规则会被合并。如果 /etc/udev/rules.d 中的规则与 /usr/lib/udev/rules.d/ 中的规则的名称相同,则前者优先。
这些规则的目的是确保存储设备的识别一致且可预测,即使系统重启和配置发生了改变也是如此。
udev 规则根据通知有关添加、更改或删除设备的传入事件定义要执行的操作。这也帮助收集持久存储属性的值,并指导 udev 根据收集的信息创建 /dev 内容。udev 规则使用键值对,以人类可读的格式编写。
对于存储设备,udev 规则控制在 /dev/disk/ 目录中创建符号链接。这些符号链接为存储设备提供用户友好的别名,从而使引用和管理这些设备更为方便。
您可以创建自定义 udev 规则,来指定设备应该如何根据各种属性(如序列号、全球名称(WWN)标识符或其他特定于设备的特征)来命名。通过定义特定的命名规则,您可以精确控制设备如何在系统中被识别。要在 /dev 中为设备创建一个特定的自定义符号链接,请查看您系统上的 udev (7) 手册页。
虽然 udev 规则非常灵活,但了解 udev 限制很重要:
-
可访问性计时:在
udev查询时可能无法访问一些存储设备。 -
基于事件的处理:内核可以随时发送
udev事件,如果设备无法访问,可能会触发规则处理和链接删除。 - 处理延迟:事件生成和处理之间可能会有延迟,特别是有多个设备时,从而导致内核检测和链路可用性之间的滞后。
-
设备可访问性:
udev规则调用的外部程序(如blkid)可能会短暂打开该设备,使其他任务暂时无法访问它。 -
链接更新:由
/dev/disk/中的udev管理的设备名称可能会在主版本间有所变化,需要链接更新。
下表列出了 /dev/disk 中提供的符号链接。
| 设备类型 | 非持久名称(内核名称) | 持久符号链接名称 |
|---|---|---|
| 真实设备 | ||
| nvme (Non-Volatile Memory Express) | /dev/nvme* |
/dev/disk/by-id/nvme-<wwid> |
| SCSI (小型计算机系统接口) | /dev/sd*, /dev/sr* |
/dev/disk/by-id/scsi-<model>_<serial> |
| ata(高级技术附加)/atapi(ATA 数据包接口) | /dev/sd*, /dev/sr* |
/dev/disk/by-id/ata-<model>_<serial> |
| cciss (用于 SCSI-3 支持的 Compaq 命令接口) | /dev/cciss* |
/dev/disk/by-id/cciss-<model>_<serial> |
| virtio(虚拟输入输出) | /dev/vd* | /dev/disk/by-id/virtio-<serial> |
| pmem(持久内存) | /dev/pmem* | /dev/disk/by-id/pmem-<uuid> |
| mmc(多媒体卡) | /dev/mmcblk* | /dev/disk/by-id/mmc-<name>_<serial> |
| memstick (记忆棒) | /dev/msblk* | /dev/disk/by-id/memstick-<name>_<serial> |
| 虚拟设备 | ||
| loop | /dev/loop* |
/dev/disk/by-loop-inode/<id_loop_backing_device>-<id_loop_backing_inode> |
| dm (device-mapper) | /dev/dm-* |
/dev/mapper/<name> |
| md(多个设备) | /dev/md* |
/dev/md/<devname> |
| 分区(在实际或者虚拟设备之上) | ||
| (任何) | (任何) |
/dev/disk/by-partuuid/<uuid> |
| LVM PV(逻辑卷管理器物理卷;在实际或虚拟设备之上) | ||
| (任何) | (任何) | /dev/disk/by-id/lvm-pv-uuid-<pvuuid> |
2.2.1. 获取现有设备的设备链接值 复制链接链接已复制到粘贴板!
您可以从当前 udev 数据库获取现有设备的设备链接值。
先决条件
- 设备存在且连接到系统。
流程
列出
/dev下现有设备的到基本内核设备节点(DEVNAME)的所有分配的设备符号链接(DEVLINKS):# udevadm info --name /dev/nvme0n1 --query property --property DEVLINKS --value /dev/disk/by-path/pci-0000:00:02.0-nvme-1 /dev/disk/by-diskseq/6 /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_nvme-1_1 /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_nvme-1 /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_nvme-1-ns-1 /dev/disk/by-id/nvme-nvme.8086-6e766d652d31-51454d55204e564d65204374726c-00000001将 nvme0n1 替换为您的设备名称。
您还可以使用以下命令获得所有 devlink 指向的基本内核名称:
# udevadm info --name /dev/nvme0n1 --query property --property DEVNAME --value /dev/nvme0n1内核名称和其任何 devlink 可以互换使用。
您可以使用以下命令之一获取 devlink 的完整列表:
# udevadm info --name /dev/disk/by-id/nvme-nvme.8086-6e766d652d31-51454d55204e564d65204374726c-00000001 --query property --property DEVLINKS --value /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_nvme-1 /dev/disk/by-diskseq/6 /dev/disk/by-id/nvme-nvme.8086-6e766d652d31-51454d55204e564d65204374726c-00000001 /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_nvme-1-ns-1 /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_nvme-1_1 /dev/disk/by-path/pci-0000:00:02.0-nvme-1
第 3 章 磁盘分区 复制链接链接已复制到粘贴板!
要将磁盘分成一个或多个逻辑区域,请使用磁盘分区实用程序。这可以对每个分区进行独立的管理。
3.1. 分区概述 复制链接链接已复制到粘贴板!
硬盘在分区表中保存每个磁盘分区的位置和大小信息。使用分区表中的信息,操作系统会将每个分区视为一个逻辑磁盘。磁盘分区的一些优点包括:
- 减少对物理卷的管理疏忽的可能性
- 保证有足够的备份
- 提供有效的磁盘管理
3.2. 分区表类型比较 复制链接链接已复制到粘贴板!
要在设备中启用分区,使用不同类型的分区表格式化块设备。下表比较您可以在块设备中创建的不同类型的分区表的属性。
本节不涵盖 DASD 分区表,它特定于 IBM Z 构架。
| 分区表 | 最多分区数 | 最大分区大小 |
|---|---|---|
| GUID 分区表(GPT) | 128 |
如果使用 512 b 扇区驱动器则为 8 ZiB |
| 主引导记录(MBR) | 4 个主分区,或 3 个主分区以及 1 个有 56 个逻辑分区的扩展分区 |
如果使用 512 b 扇区驱动器则为 2 TiB |
3.3. GUID 分区表 复制链接链接已复制到粘贴板!
GUID 分区表(GPT)是基于全局唯一标识符(GUID)的分区方案。
GPT 处理 Mater Boot Record (MBR)分区表的限制。MBR 分区表无法处理大于 2 TiB 的存储,相当于大约 2.2 TB。相反,GPT 支持容量较大的硬盘。使用 512 b 扇区驱动器时,最大可寻址磁盘大小为 8 ZiB,使用 4096 b 扇区驱动器时,最大可寻址磁盘大小为 64 ZiB。另外,默认情况下,GPT 支持创建最多 128 个主分区。通过向分区表分配更多空间来扩展主分区的最大数量。
GPT 有基于 GUID 的分区类型。某些分区需要特定的 GUID。例如,可扩展固件接口(EFI)引导装载程序的系统分区需要 GUID C12A7328-F81F-11D2-BA4B-00A0C93EC93B。
GPT 磁盘使用逻辑块寻址(LBA)和分区布局,如下所示:
- 为了向后兼容 MBR 磁盘,系统为 MBR 数据保留 GPT 的第一个扇区(LBA 0),并应用名称"protective MBR"。
主 GPT
- 标头从设备的第二个逻辑块(LBA 1)开始。标头中包含磁盘 GUID、主分区表的位置、从属 GPT 标头的位置、自身的 CRC32 checksum 以及主分区表。它还指定表上的分区条目数目。
- 默认情况下,主 GPT 包含 128 个分区条目。每个分区的条目大小为 128 字节、分区类型 GUID 和唯一的分区 GUID。
二级 GPT
- 对于恢复,当主分区表格损坏时,备份表非常有用。
- 磁盘的最后一个逻辑扇区包含二级 GPT 标头并恢复 GPT 信息(如果主标头损坏)。
它包含:
- 磁盘 GUID
- 二级分区表和主 GPT 标头的位置
- 自身的 CRC32 checksums
- 二级分区表
- 可能的分区条目数
图 3.1. 带有 GUID 分区表的磁盘
要在 BIOS 兼容模式下运行的 BIOS 系统或 UEFI 系统上的 GPT 磁盘上成功安装引导装载程序,必须存在一个 BIOS 引导分区。有关所需引导分区的更多信息,请参阅 推荐的分区方案。
3.4. MBR 磁盘分区 复制链接链接已复制到粘贴板!
分区表保存在磁盘的最开始,任何文件系统或用户数据都会保存在它的后面。为了更明确的显示,下图中的不同分区表分开显示。
图 3.2. 有 MBR 分区表的磁盘
如上图所示,分区表被分为四个未使用主分区的四个部分。主分区是硬盘上仅包含一个逻辑驱动器(或部分)的分区。每个逻辑驱动器都有定义单个分区所需的信息,这意味着分区表可以定义不超过四个主分区。
每个分区表条目都包含分区的重要特性:
- 磁盘上分区启动和结束的点
-
分区的状态,因为只有一个分区可以被标记为
活跃分区 - 分区的类型
起点和结束点定义了磁盘上分区的大小和位置。有些操作系统引导装载程序使用 active 标记。这意味着,在标记为"活跃"的分区中的操作系统被引导。
类型由一个数字代表,用于识别分区预定的使用情况。有些操作系统使用分区类型来:
- 表示特定的文件系统类型
- 将分区标记为与特定操作系统关联的
- 指明分区包含可引导操作系统
下图显示了含有单一分区的驱动器示例:在这个示例中,第一个分区被标记为 DOS 分区类型:
图 3.3. 只有一个分区的磁盘
3.5. 扩展 MBR 分区 复制链接链接已复制到粘贴板!
要创建额外分区(如果需要),请将类型设置为 extended。
扩展分区类似于磁盘驱动器。它有自己的分区表,指向一个或多个逻辑分区,完全包含在扩展分区中。下图显示了一个磁盘驱动器,它有两个主分区和一个包含两个逻辑分区(以及一些未分区的可用空间)的扩展分区:
图 3.4. 带两个主分区和扩展的 MBR 分区的磁盘
您最多只能有四个主分区或三个主分区和一个扩展分区。对逻辑分区的数量没有固定限制。作为 Linux 中访问分区的一个限制,单个磁盘驱动器允许最多 60 个分区。
3.6. MBR 分区类型 复制链接链接已复制到粘贴板!
下表显示了一些最常用的 MBR 分区类型和用于代表它们的十六进制数字。
| MBR 分区类型 | value |
|---|---|
| 空 | 00 |
| Extended | 05 |
| Linux swap | 82 |
| Linux native | 83 |
| Linux extended | 85 |
| Win95 FAT32 | 0b |
| Win95 FAT32(LBA) | 0c |
| Win95 FAT16(LBA) | 0e |
| Win95 Extended (LBA) | 0f |
3.7. 分区类型 复制链接链接已复制到粘贴板!
管理分区类型的方法有多种:
-
fdisk工具通过指定十六进制代码来支持所有的分区类型。 -
systemd-gpt-auto-generator(单位生成器程序程序)使用分区类型自动识别和挂载设备。 parted实用程序使用 flags 对分区类型进行映射。parted工具只处理某些分区类型,如 LVM、swap 或 RAID。parted实用程序支持设置以下标记:-
boot -
root -
swap -
hidden -
raid -
lvm -
lba -
legacy_boot -
irst -
esp -
palo
-
在具有 parted 3.5 的 Red Hat Enterprise Linux 10 上,您可以使用额外的标记 chromeos_kernel 和 bls_boot。
parted 工具在创建分区时接受文件系统类型参数。有关所需条件的列表,请参阅 使用 parted 创建分区。使用值来:
- 在 MBR 中设置分区标记。
-
在 GPT 中设定分区 UUID 类型。例如,
swap、fat或hfs文件系统类型设置不同的 GUID。默认值为 Linux Data GUID。
参数不会修改分区中的文件系统。它只会区分受支持的标志和 GUID。
支持以下文件系统类型:
-
xfs -
ext2 -
ext3 -
ext4 -
fat16 -
fat32 -
hfs -
hfs+ -
linux-swap -
ntfs -
reiserfs
3.8. 分区命名方案 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 使用基于文件的命名方案,其文件名采用 /dev/xxyN 的形式。
设备和分区名称由以下结构组成:
/dev/-
包含所有设备文件的目录的名称。硬盘包含分区,因此代表所有可能分区的文件位于
/dev中。 xx- 分区名的前两个字母标明包含该分区的设备类型。
y-
这个字母标明包含分区的特定设备。例如:
/dev/sda用于第一个硬盘,第二个硬盘为/dev/sdb。您可以在超过 26 个驱动器的系统中使用更多字母,例如/dev/sdaa1。 N最后的字母代表分区的数字。前四个(主或扩展)分区编号为
1到4。逻辑分区从5开始。例如,/dev/sda3是第一个硬盘上的第三个主分区或扩展分区,/dev/sdb6是第二个硬盘上的第二个逻辑分区。驱动器分区编号只适用于 MBR 分区表。请注意,N 并不总是意味着分区。对于以数字结尾的磁盘,会为分区添加
p。例如,NVMe 驱动器nvme0n1上的第一个分区是nvme0n1p1。
即使 Red Hat Enterprise Linux 可以识别和引用 所有类型的磁盘分区,它可能无法读取文件系统,因此无法访问分区类型中保存的数据。然而,在很多情况下,成功访问专用于另一个操作系统的分区中的数据是可能的。
3.9. 挂载点和磁盘分区 复制链接链接已复制到粘贴板!
在 Red Hat Enterprise Linux 中,每个分区都被用来成为支持一组文件和目录所必需的存储的一部分。挂载分区会导致该分区的存储可用,从指定目录开始,称为挂载点。
例如,如果分区 /dev/sda5 挂载在 /usr/ 上,这意味着 /usr/ 下的所有文件和目录都在 /dev/sda5 上。文件 /usr/share/doc/FAQ/txt/Linux-FAQ 位于 /dev/sda5 中,而文件 /etc/gdm/custom.conf 不在。
继续这个示例,也可以将 /usr/ 下的一个或多个目录作为其他分区的挂载点。例如: /usr/local/man/whatis 位于 /dev/sda7 上,而不是位于 /dev/sda5 上,如果 /usr/local 包含挂载的 /dev/sda7 分区。
第 4 章 分区入门 复制链接链接已复制到粘贴板!
使用磁盘分区将磁盘分成一个或多个逻辑区域,这些区域可以单独在每个分区上工作。硬盘在分区表中保存每个磁盘分区的位置和大小信息。使用表,每个分区然后显示为操作系统的逻辑磁盘。然后您可以在这些独立磁盘中进行读取和写入。
有关在块设备上使用分区的优点和缺点的概述,请查看红帽知识库解决方案 在 LUN 上直接使用分区或在 LUN 之间使用 LVM 有哪些优点和缺点?
4.1. 使用 parted 在磁盘中创建分区表 复制链接链接已复制到粘贴板!
使用 parted 实用程序更轻松地使用分区表格式化块设备。
使用分区表格式化块设备会删除该设备中所有存储的数据。
流程
启动交互式
partedshell:# parted block-device确定该设备中是否已有一个分区表:
(parted) print如果设备已经包含分区,则后续步骤中将删除它们。
创建新分区表:
(parted) mklabel table-type使用预期的分区表类型替换 table-type :
-
用于的 MBR 的
msdos -
用于 GPT 的
gpt
-
用于的 MBR 的
例 4.1. 创建 GUID 分区表(GPT)表
要在磁盘上创建 GPT 表,请使用:
(parted) mklabel gpt在输入以下命令后,这些更改将开始应用。
查看分区表以确认其已创建:
(parted) print退出
partedshell:(parted) quit
4.2. 查看使用 parted 的分区表 复制链接链接已复制到粘贴板!
显示块设备的分区表,以查看分区布局和单个分区的详情。您可以使用 parted 工具查看块设备上的分区表。
流程
启动
parted工具。例如:以下输出列出了设备/dev/sda:# parted /dev/sda查看分区表:
(parted) print Model: ATA SAMSUNG MZNLN256 (scsi) Disk /dev/sda: 256GB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 1049kB 269MB 268MB primary xfs boot 2 269MB 34.6GB 34.4GB primary 3 34.6GB 45.4GB 10.7GB primary 4 45.4GB 256GB 211GB extended 5 45.4GB 256GB 211GB logical可选:切换到您要检查的设备:
(parted) select block-device
有关打印命令输出的详细描述,请查看以下信息:
模型: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。有关标志的完整列表,请参阅您系统上的parted (8)手册页。
4.3. 使用 parted 创建分区 复制链接链接已复制到粘贴板!
作为系统管理员,您可以使用 parted 实用程序在磁盘上创建新分区。
所需分区是 swap、/boot/ 和 /(root)。
先决条件
- 磁盘上的分区表。
- 如果要创建大于 2 TiB 的分区,请使用 GUID 分区表(GPT) 格式化磁盘。
流程
启动
parted工具:# parted block-device查看当前的分区表来确定是否有足够空闲空间:
(parted) print- 如果分区没有足够的可用空间,则调整分区大小。
从分区表中决定:
- 新分区的开始和结束点。
- 在 MBR 上,应该是什么分区类型。
创建新分区:
对于 MS-DOS:
(parted) mkpart part-type fs-type start end对于 GPT:
(parted) mkpart part-name fs-type start end-
使用
primary、logical或extended替换 part-type。这只适用于 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。
例 4.2. 创建小的主分区
要在 MBR 表上创建一个从 1024 MiB 到 2048 MiB 的主分区,请使用:
(parted) mkpart primary 1024MiB 2048MiB在输入以下命令后,这些更改开始应用。
-
使用
查看分区表以确认创建的分区位于分区表中,并具有正确的分区类型、文件系统类型和大小:
(parted) print退出
partedshell:(parted) quit验证内核是否识别了新的分区:
# cat /proc/partitions
4.4. 使用 fdisk 设置分区类型 复制链接链接已复制到粘贴板!
您可以使用 fdisk 工具设置分区类型或标志。
先决条件
- 磁盘上的一个分区。
流程
启动交互式
fdiskshell:# fdisk block-device查看当前的分区表以确定副分区号码:
Command (m for help): print您可以在
Type列中看到当前的分区类型,在Id列中看到相应的类型 ID 。输入分区类型命令并使用其次编号选择一个分区:
Command (m for help): type Partition number (1-3, default 3): 2可选:显示分区类型:
对于有 MBR 分区表的磁盘:
Hex code or alias (type L to list all codes): L对于有 GPT 分区表的磁盘:
Partition type or alias (type L to list all): L
设置分区类型:
对于有 MBR 分区表的磁盘:
Hex code or alias (type L to list all codes): 8e对于有 GPT 分区表的磁盘:
Partition type or alias (type L to list all): 44
写入更改并退出
fdiskshell:Command (m for help): write The partition table has been altered. Syncing disks.
验证
验证您的更改:
# fdisk --list block-device
4.5. 使用 parted 重新定义分区大小 复制链接链接已复制到粘贴板!
使用 parted 工具扩展分区以使用未使用的磁盘空间,或者缩小分区以将其容量用于不同的目的。
先决条件
- 在缩小分区前备份数据。
- 如果要创建大于 2 TiB 的分区,请使用 GUID 分区表(GPT) 格式化磁盘。
- 如果您想缩小分区,首先缩小文件系统,使其不大于重新定义大小的分区。
XFS 不支持缩小。
流程
启动
parted工具:# parted block-device查看当前的分区表:
(parted) print从分区表中决定:
- 分区的副号码。
- 调整大小后现有分区的位置和新结束点。
当调整分区大小时,请确保要调整大小的分区末尾和下一个分区的开始,或磁盘的末尾(如果其是最后一个分区)之间有足够的未分配空间。如果没有足够的空间,parted 将返回一个错误。但是,最好在尝试调整大小之前验证可用空间,以避免分区重叠。
重新定义分区大小:
(parted) resizepart 1 2GiB- 使用您要重新定义分区的副号码替换 1。
-
将 2 替换为确定重新定义重新定义分区大小的新结束点的大小,从磁盘开始计算。您可以使用大小后缀,如
512MiB、20GiB或1.5TiB。默认的大小是 MB。
查看分区表以确认调整了大小的分区位于分区表中,且大小正确:
(parted) print退出
partedshell:(parted) quit验证内核是否注册了新分区:
# cat /proc/partitions- 可选:如果您扩展分区,还要扩展它的文件系统。
4.6. 使用 parted 删除分区 复制链接链接已复制到粘贴板!
使用 parted 工具,您可以删除磁盘分区以释放磁盘空间。
流程
启动交互式
partedshell:# parted block-device-
使用您要删除分区的设备的路径替换 block-device :例如
/dev/sda。
-
使用您要删除分区的设备的路径替换 block-device :例如
查看当前的分区表以确定要删除的分区的次号:
(parted) print删除分区:
(parted) rm partition-number- 使用您要删除的分区号替换 partition-number。
输入此命令后,这些更改会立即应用。
验证您是否已从分区表中删除了分区:
(parted) print退出
partedshell:(parted) quit验证内核是否注册分区是否已删除:
# cat /proc/partitions-
如果分区存在,从
/etc/fstab文件中删除分区。找到声明删除的分区的行,并将其从文件中删除。 重新生成挂载单元,以便您的系统注册新的
/etc/fstab配置:# systemctl daemon-reload重要要删除
/proc/cmdline中提到的分区或其是 LVM 的一部分,请参阅 配置和管理逻辑卷,以及您系统上的dracut (8)和grubby (8)手册页。
第 5 章 重新分区磁盘策略 复制链接链接已复制到粘贴板!
大多数 RHEL 系统使用 逻辑卷管理器 管理存储空间。但是,操作分区表仍然是管理发生在设备级别的存储空间的基本和低级方法。您可以使用 parted、fdisk 或其他图形工具来执行磁盘分区操作。
重新分区磁盘的方法有多种。包括:
- 有可用的未分区的空闲空间。
- 一个未使用的分区可用。
- 在一个活跃使用的分区中的空闲空间是可用。
以下示例提供了分区技术的一般概述。为清晰起见,对它们进行了简化,并没有反映典型的 Red Hat Enterprise Linux 安装过程中确切的分区布局。
5.1. 使用未分区的空闲空间 复制链接链接已复制到粘贴板!
已定义且没有跨越整个硬盘的分区,保留不属于任何定义的分区的未分配空间。
未使用的硬盘也属于这一类别。唯一的区别是,所有 空间并不是任何定义的分区的一部分。
在新磁盘上,您可以从未使用的空间创建必要的分区。大部分预安装的操作系统都被配置为占据磁盘驱动器上所有可用空间。
5.2. 使用未使用分区中的空间 复制链接链接已复制到粘贴板!
要使用分配给未使用分区的空间,请删除分区,然后创建适当的 Linux 分区。或者,在安装过程中,删除未使用的分区并手动创建新分区。
5.3. 使用活跃分区中的空闲空间 复制链接链接已复制到粘贴板!
因为已经使用的一个活跃分区包含所需的可用空间,所以此过程可能很难管理。在大多数情况下,预安装软件的计算机的硬盘包含一个大型分区,存放操作系统和数据。
如果您尝试调整或修改一个包含操作系统(OS)的活动分区,则有丢失或使操作系统无法引导的风险。因此,在某些情况下,您可能需要重新安装操作系统。在继续操作前,请检查您的系统是否包含恢复或安装介质。
要选择使用可用空间,您可以使用破坏性或非破坏性重新分区的方法。
5.3.1. 破坏性重新分区 复制链接链接已复制到粘贴板!
破坏性重新分区会破坏硬盘上的分区,并在其位置上创建新分区。备份原始分区中任何需要的数据,因为此方法会删除全部内容。
从现有操作系统创建新分区后,您可以:
- 重新安装软件。
- 恢复您的数据。
这个方法会删除之前存储在原始分区中的所有数据。
5.3.2. 非破坏性重新分区 复制链接链接已复制到粘贴板!
非破坏性重新分区分区大小,没有任何数据丢失。这个方法是可靠的,但在大型驱动器上需要更长的处理时间。
以下是帮助启动非破坏性重新分区的方法列表。
- 重新组织现有数据
无法更改某些数据的存储位置,这可以防止将分区调整到所需大小;最终需要一个破坏性重新分区过程。重组现有分区中的数据可帮助您根据需要调整分区大小,以便为额外的分区创建空间或最大化可用的空闲空间。
为了避免任何可能的数据丢失,请在继续数据迁移过程之前创建备份。
- 重新划分现存分区的大小
通过重新调整已存在的分区的大小,您可以释放未使用的空间。根据您的软件重新定义大小,结果可能会有所不同。在大多数情况下,您可以创建同一类型的新未格式化的分区,与原始分区不同。
调整大小后采取的步骤可以取决于您所使用的软件。在以下示例中,最佳实践是删除新的 DOS(Disk Operating System)分区,而是创建一个 Linux 分区。在启动重新定义大小过程前,验证最适合您的磁盘。
调整大小和创建分区可能因您使用的工具而异,如 parted、GParted。具体说明请参考工具的文档。
- 可选:创建新分区
一些调整大小的软件支持基于 Linux 的系统。在这种情况下,在调整大小后不需要删除新创建的分区。之后创建新分区取决于您使用的软件。
第 6 章 配置 iSCSI 目标 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 使用 targetcli shell 作为命令行界面执行以下操作:
- 添加、删除、查看和监控 iSCSI 存储间的连接来利用 iSCSI 硬件。
- 将由文件、卷、本地 SCSI 设备或者 RAM 磁盘支持的本地存储资源导出到远程系统。
targetcli 工具带有一个基于树形的布局,包括内置的 tab 完成 、自动完成支持和在线文档。
6.1. 安装 targetcli 复制链接链接已复制到粘贴板!
安装 targetcli 工具,来添加、监控和删除 iSCSI 存储互联。
流程
安装
targetcli工具:# dnf install targetcli启动目标服务:
# systemctl start target将目标配置为在引导时启动:
# systemctl enable target在防火墙中打开端口
3260,并重新载入防火墙配置:# firewall-cmd --permanent --add-port=3260/tcp success# firewall-cmd --reload success
验证
查看
targetcli布局:# targetcli /> ls o- /........................................[...] o- backstores.............................[...] | o- block.................[Storage Objects: 0] | o- fileio................[Storage Objects: 0] | o- pscsi.................[Storage Objects: 0] | o- ramdisk...............[Storage Objects: 0] o- iscsi...........................[Targets: 0] o- loopback........................[Targets: 0] o- srpt ...........................[Targets: 0]
6.2. 创建 iSCSI 目标 复制链接链接已复制到粘贴板!
您可以创建一个 iSCSI 目标,来使客户端的 iSCSI 启动器能够访问服务器上的存储设备。目标和发起方都有唯一的标识名称。
先决条件
-
已安装并运行
targetcli。如需更多信息,请参阅安装 targetcli。
流程
导航到 iSCSI 目录。您也可以使用
cd命令导航到 iSCSI 目录。/> iscsi/使用以下选项之一创建 iSCSI 对象:
使用默认目标名称创建 iSCSI 对象:
/iscsi> create Created target iqn.2003-01.org.linux-iscsi.hostname.x8664:sn.78b473f296ff Created TPG1使用特定名称创建 iSCSI 对象:
/iscsi> create iqn.2006-04.com.example:444 Created target iqn.2006-04.com.example:444 Created TPG1将 iqn.2006-04.com.example:444 替换为特定目标名称。
验证新创建的目标:
/iscsi> ls o- iscsi.......................................[1 Target] o- iqn.2006-04.com.example:444................[1 TPG] o- tpg1...........................[enabled, auth] o- acls...............................[0 ACL] o- luns...............................[0 LUN] o- portals.........................[0 Portal]
6.3. iSCSI Backstore 复制链接链接已复制到粘贴板!
iSCSI 后端存储支持支持在本地计算机上存储导出的 LUN 数据的不同方法。创建存储对象定义了后端存储使用的资源。
管理员可以选择 Linux-IO(LIO)支持的任何后端存储设备:
fileio后端存储-
如果您将本地文件系统中的常规文件用作磁盘镜像,请创建一个
fileio存储对象。有关创建fileio后端存储的信息,请参阅创建 fileio 存储对象。 Blockbackstore-
如果您使用任何本地块设备和逻辑设备,请创建一个
块存储对象。有关创建块后备存储的信息,请参阅 创建块存储对象。 pscsi后端存储-
如果您的存储对象支持直接通过 SCSI 命令,请创建一个
pscsi存储对象。有关创建pscsi后端存储的信息,请参阅创建 pscsi 存储对象。 ramdisk后端存储-
如果要创建临时 RAM 支持的设备,请创建一个
ramdisk存储对象。有关创建ramdisk后端存储,请参阅创建内存复制 RAM 磁盘存储对象。
6.4. 创建 fileio 存储对象 复制链接链接已复制到粘贴板!
fileio 存储对象可以支持 write_back 或 write_thru 操作。write_back 操作启用本地文件系统缓存。这提高了性能,但会增加数据丢失的风险。
建议使用 write_back=false 禁用 write_back 操作来使用 write_thru 操作。
先决条件
-
已安装并运行
targetcli。如需更多信息,请参阅安装 targetcli。
流程
从
backstores/目录中进入fileio/:/> backstores/fileio创建
fileio存储对象:/backstores/fileio> create file1 /tmp/disk1.img 200M write_back=false Created fileio file1 with size 209715200
验证
验证创建的
fileio存储对象:/backstores/fileio> ls
6.5. 创建块存储对象 复制链接链接已复制到粘贴板!
块驱动程序允许使用 /sys/block/ 目录中出现的任何块设备来与 Linux-IO(LIO)一起使用。这包括物理设备,如 HDD、SSD、CD 和 DVD,以及逻辑设备,如软件或硬件 RAID 卷或 LVM 卷。
先决条件
-
已安装并运行
targetcli。如需更多信息,请参阅安装 targetcli。
流程
从
backstores/目录中进入block/:/> backstores/block/创建
块后备存储:/backstores/block> create name=block_backend dev=/dev/sdb Created block storage object block_backend using /dev/sdb.
验证
验证创建的
块存储对象:/backstores/block> ls
6.6. 创建 pscsi 存储对象 复制链接链接已复制到粘贴板!
您可以将任何支持直接传递 SCSI 命令而无需 SCSI 仿真的存储对象,且带有使用 lsscsi 在 /proc/scsi/scsi 中显示的底层 SCSI 设备(如 SAS 硬盘)配置为后备存储。这个子系统支持 SCSI-3 及更高系统。
pscsi 应该仅由高级用户使用。高级 SCSI 命令(如 Asymmetric Logical Unit Assignment (ALUAs) 或 Persistent Reservations(例如被 VMware ESX, 和 vSphere 使用))通常不会在设备固件中实施,并可能导致出现故障或崩溃。如果有疑问,请在生产环境中改为使用 block 后端存储。
先决条件
-
已安装并运行
targetcli。如需更多信息,请参阅安装 targetcli。
流程
从
backstores/目录中进入到pscsi/:/> backstores/pscsi/为物理 SCSI 设备创建
pscsi后端存储,本示例中是使用/dev/sr0的 TYPE_ROM 设备:/backstores/pscsi> create name=pscsi_backend dev=/dev/sr0 Created pscsi storage object pscsi_backend using /dev/sr0
验证
验证创建的
pscsi存储对象:/backstores/pscsi> ls
6.7. 创建内存副本 RAM 磁盘存储对象 复制链接链接已复制到粘贴板!
Memory Copy RAM 磁盘(ramdisk)为 RAM 磁盘提供完整的 SCSI 模拟,并使用启动器的内存副本来分隔内存映射。这为多会话提供了功能,在用于生产目的的快速和可变量存储中特别有用。
先决条件
-
已安装并运行
targetcli。如需更多信息,请参阅安装 targetcli。
流程
从
backstores/目录进入到ramdisk/:/> backstores/ramdisk/创建 1GB RAM 磁盘后备存储:
/backstores/ramdisk> create name=rd_backend size=1GB Created ramdisk rd_backend with size 1GB.
验证
验证创建的
ramdisk存储对象:/backstores/ramdisk> ls
6.8. 创建 iSCSI 门户 复制链接链接已复制到粘贴板!
您可以创建一个 iSCSI 门户。这会在目标中添加一个 IP 地址和端口,使目标保持启用状态。
先决条件
-
已安装并运行
targetcli。如需更多信息,请参阅安装 targetcli。 - 与目标门户组(TPG)关联的 iSCSI 目标。如需更多信息,请参阅创建 iSCSI 目标。
流程
进入 TPG 目录:
/iscsi> iqn.2006-04.com.example:444/tpg1/使用以下选项之一创建 iSCSI 门户:
创建默认门户使用默认 iSCSI 端口
3260,并允许目标侦听该端口上的所有 IP 地址:/iscsi/iqn.20...mple:444/tpg1> portals/ create Using default IP port 3260 Binding to INADDR_Any (0.0.0.0) Created network portal 0.0.0.0:3260使用特定 IP 地址创建门户:
/iscsi/iqn.20...mple:444/tpg1> portals/ create 192.168.122.137 Using default IP port 3260 Created network portal 192.168.122.137:3260
验证
验证新创建的门户网站:
/iscsi/iqn.20...mple:444/tpg1> ls o- tpg.................................. [enabled, auth] o- acls ......................................[0 ACL] o- luns ......................................[0 LUN] o- portals ................................[1 Portal] o- 192.168.122.137:3260......................[OK]
6.9. 创建 iSCSI LUN 复制链接链接已复制到粘贴板!
逻辑单元号(LUN)是一个由 iSCSI 后端存储支持的物理设备。每个 LUN 都有唯一的数字。
先决条件
-
已安装并运行
targetcli。如需更多信息,请参阅安装 targetcli。 - 与目标门户组(TPG)关联的 iSCSI 目标。如需更多信息,请参阅创建 iSCSI 目标。
- 已创建存储对象。如需更多信息,请参阅 iSCSI Backstore。
流程
创建已创建的存储对象的 LUN:
/iscsi/iqn.20...mple:444/tpg1> luns/ create /backstores/ramdisk/rd_backend Created LUN 0. /iscsi/iqn.20...mple:444/tpg1> luns/ create /backstores/block/block_backend Created LUN 1. /iscsi/iqn.20...mple:444/tpg1> luns/ create /backstores/fileio/file1 Created LUN 2.验证创建的 LUN:
/iscsi/iqn.20...mple:444/tpg1> ls o- tpg.................................. [enabled, auth] o- acls ......................................[0 ACL] o- luns .....................................[3 LUNs] | o- lun0.........................[ramdisk/ramdisk1] | o- lun1.................[block/block1 (/dev/vdb1)] | o- lun2...................[fileio/file1 (/foo.img)] o- portals ................................[1 Portal] o- 192.168.122.137:3260......................[OK]默认 LUN 名称以
0开头。重要默认情况下,创建的 LUN 有读/写权限。如果在创建 ACL 后添加了新的 LUN,LUN 会自动映射到所有可用 ACL,并可能导致安全风险。要创建具有只读权限的 LUN,请参阅创建只读 iSCSI LUN。
- 配置 ACL。如需更多信息,请参阅创建 iSCSI ACL。
6.10. 创建只读 iSCSI LUN 复制链接链接已复制到粘贴板!
默认情况下,创建的 LUN 有读/写权限。您可以创建一个只读 LUN。
先决条件
-
已安装并运行
targetcli。如需更多信息,请参阅安装 targetcli。 - 与目标门户组(TPG)关联的 iSCSI 目标。如需更多信息,请参阅创建 iSCSI 目标。
- 已创建存储对象。如需更多信息,请参阅 iSCSI Backstore。
流程
设置只读权限:
/> set global auto_add_mapped_luns=false Parameter auto_add_mapped_luns is now 'false'.这样可防止 LUN 自动映射到现有 ACL,从而允许手动映射 LUN。
进入 initiator_iqn_name 目录:
/> iscsi/target_iqn_name/tpg1/acls/initiator_iqn_name/创建 LUN:
/iscsi/target_iqn_name/tpg1/acls/initiator_iqn_name> create mapped_lun=next_sequential_LUN_number tpg_lun_or_backstore=backstore write_protect=1例如:
/iscsi/target_iqn_name/tpg1/acls/2006-04.com.example:888> create mapped_lun=1 tpg_lun_or_backstore=/backstores/block/block2 write_protect=1 Created LUN 1. Created Mapped LUN 1.验证所创建的 LUN:
/iscsi/target_iqn_name/tpg1/acls/2006-04.com.example:888> ls o- 2006-04.com.example:888 .. [Mapped LUNs: 2] | o- mapped_lun0 .............. [lun0 block/disk1 (rw)] | o- mapped_lun1 .............. [lun1 block/disk2 (ro)]mapping_lun1 行现在在结尾带有(
ro)(不像 mapping_lun0 为 (rw)),这表示它是只读的。- 配置 ACL。如需更多信息,请参阅创建 iSCSI ACL。
6.11. 创建 iSCSI ACL 复制链接链接已复制到粘贴板!
targetcli 服务使用访问控制列表(ACL)来定义访问规则,并授予每个启动器访问逻辑单元号(LUN)的权限。
目标和发起方都有唯一的标识名称。您必须知道配置 ACL 的发起方的唯一名称。由 iscsi-initiator-utils 软件包提供的 /etc/iscsi/initiatorname.iscsi 文件包含 iSCSI 启动器名称。
先决条件
-
已安装并运行
targetcli。如需更多信息,请参阅安装 targetcli。 - 与目标门户组(TPG)关联的 iSCSI 目标。如需更多信息,请参阅创建 iSCSI 目标。
流程
- 可选:要禁用自动将 LUN 映射到 ACL,请参阅 创建一个只读 iSCSI LUN。
进入
acls目录:/> iscsi/target_iqn_name/tpg_name/acls/使用以下选项之一创建一个 ACL:
使用启动器上的
/etc/iscsi/initiatorname.iscsi文件中的 initiator_iqn_name :iscsi/target_iqn_name/tpg_name/acls> create initiator_iqn_name Created Node ACL for initiator_iqn_name Created mapped LUN 2. Created mapped LUN 1. Created mapped LUN 0.使用 custom_name ,并更新启动器以匹配它:
iscsi/target_iqn_name/tpg_name/acls> create custom_name Created Node ACL for custom_name Created mapped LUN 2. Created mapped LUN 1. Created mapped LUN 0.有关更新启动器名称的详情,请参考 创建一个 iSCSI 启动器。
验证
验证创建的 ACL:
iscsi/target_iqn_name/tpg_name/acls> ls o- acls .................................................[1 ACL] o- target_iqn_name ....[3 Mapped LUNs, auth] o- mapped_lun0 .............[lun0 ramdisk/ramdisk1 (rw)] o- mapped_lun1 .................[lun1 block/block1 (rw)] o- mapped_lun2 .................[lun2 fileio/file1 (rw)]
6.12. 为目标设置 Challenge-Handshake 验证协议 复制链接链接已复制到粘贴板!
通过使用 Challenge-Handshake Authentication Protocol(CHAP),用户可以使用密码保护目标。发起方必须了解这个密码才能连接到目标。
先决条件
- 创建 iSCSI ACL。如需更多信息,请参阅创建 iSCSI ACL。
流程
设置属性身份验证:
/iscsi/iqn.20...mple:444/tpg1> set attribute authentication=1 Parameter authentication is now '1'.设置
userid和密码:/tpg1> set auth userid=redhat Parameter userid is now 'redhat'. /iscsi/iqn.20...689dcbb3/tpg1> set auth password=redhat_passwd Parameter password is now 'redhat_passwd'.进入
acls目录:/> iscsi/target_iqn_name/tpg1/acls/initiator_iqn_name/设置属性身份验证:
/iscsi/iqn.20...:605fcc6a48be> set attribute authentication=1 Parameter authentication is now '1'.设置
userid和密码:/iscsi/iqn.20...:605fcc6a48be> set auth userid=redhat Parameter userid is now 'redhat'. /iscsi/iqn.20...:605fcc6a48be> set auth password=redhat_passwd Parameter password is now 'redhat_passwd'.
6.13. 使用 targetcli 工具删除 iSCSI 对象 复制链接链接已复制到粘贴板!
您可以使用 targetcli 工具删除 iSCSI 对象。
流程
从目标登出:
# iscsiadm -m node -T iqn.2006-04.com.example:444 -u有关如何登录到目标的更多信息,请参阅 创建一个 iSCSI 启动器。
删除整个目标,包括所有 ACL、LUN 和门户:
/> iscsi/ delete iqn.2006-04.com.example:444将 iqn.2006-04.com.example:444 替换为 target_iqn_name。
删除 iSCSI 后端存储:
/> backstores/backstore-type/ delete block_backend使用
fileio、block、pscsi或ramdisk替换 backstore-type。使用您要删除的 backstore-name 替换 block_backend。
要删除 iSCSI 目标的部分,如 ACL:
/> /iscsi/iqn-name/tpg/acls/ delete iqn.2006-04.com.example:444
验证
查看更改:
/> iscsi/ ls
第 7 章 配置 iSCSI initiator 复制链接链接已复制到粘贴板!
iSCSI 启动程序形成连接 iSCSI 目标的会话。默认情况下,iSCSI 服务是“懒启动” ,服务只在运行 iscsiadm 命令后才启动。如果 root 没有位于 iSCSI 设备,或者没有标记为 node.startup = automatic 的节点,则 iSCSI 服务将不会启动,直到执行 iscsiadm 命令后,需要 iscsid 或 iscsi 内核模块启动。
以 root 身份运行 systemctl start iscsid 命令,以强制 iscsid 服务运行并加载 iSCSI 内核模块。
7.1. 创建 iSCSI 启动程序 复制链接链接已复制到粘贴板!
创建 iSCSI 启动器以连接到 iSCSI 目标,以访问服务器上的存储设备。
先决条件
您有一个 iSCSI 目标的主机名和 IP 地址:
- 如果您要连接到外部软件创建的存储目标,请从存储管理员查找目标主机名和 IP 地址。
- 如果您要创建 iSCSI 目标,请参阅创建 iSCSI 目标。
流程
在客户端机器上安装
iscsi-initiator-utils:# dnf install iscsi-initiator-utils启动
iscsid服务:# systemctl start iscsid检查 initiator 名称:
# cat /etc/iscsi/initiatorname.iscsi InitiatorName=iqn.2006-04.com.example:888如果在创建 iSCI ACL 时,ACL 被指定了一个自定义名称,请更新启动器名称以匹配 ACL:
打开
/etc/iscsi/initiatorname.iscsi文件,并修改启动器名称:# vi /etc/iscsi/initiatorname.iscsi InitiatorName=custom-name重启
iscsid服务:# systemctl restart iscsid
发现目标并使用显示的目标 IQN 登录到目标:
# iscsiadm -m discovery -t st -p 10.64.24.179 10.64.24.179:3260,1 iqn.2006-04.com.example:444 # iscsiadm -m node -T iqn.2006-04.com.example:444 -l Logging in to [iface: default, target: iqn.2006-04.com.example:444, portal: 10.64.24.179,3260] (multiple) Login to [iface: default, target: iqn.2006-04.com.example:444, portal: 10.64.24.179,3260] successful.将 10.64.24.179 替换为 target-ip-address。
如果将相应的启动器名称添加到 ACL 中,您可以将这个步骤用于连接到同一目标的任意启动器名称,如创建 iSCSI ACL 所述。
找到 iSCSI 磁盘名称并在这个 iSCSI 磁盘中创建文件系统:
# grep "Attached SCSI" /var/log/messages # mkfs.ext4 /dev/disk_name使用
/var/log/messages文件中显示的 iSCSI 磁盘名称替换 disk_name。挂载文件系统:
# mkdir /mount/point # mount /dev/disk_name /mount/point使用分区的挂载点替换 /mount/point。
编辑
/etc/fstab文件,以便在系统引导时自动挂载文件系统:# vi /etc/fstab /dev/disk_name /mount/point ext4 _netdev 0 0使用 iSCSI 磁盘名称替换 disk_name,使用分区的挂载点替换 /mount/point。
7.2. 为发起方设置 Challenge-Handshake Authentication Protocol 复制链接链接已复制到粘贴板!
通过使用 Challenge-Handshake Authentication Protocol(CHAP),用户可以使用密码保护目标。发起方必须了解这个密码才能连接到目标。
先决条件
- 创建 iSCSI initiator。如需更多信息,请参阅创建 iSCSI 启动器。
-
为目标设置
CHAP。如需更多信息,请参阅 为目标设置 Challenge-Handshake Authentication Protocol。
流程
在
iscsid.conf文件中启用 CHAP 验证:# vi /etc/iscsi/iscsid.conf node.session.auth.authmethod = CHAP默认情况下,
node.session.auth.authmethod设置为None在
iscsid.conf文件中添加目标用户名和密码:node.session.auth.username = redhat node.session.auth.password = redhat_passwd重启
iscsid服务:# systemctl restart iscsid
7.3. 使用 iscsiadm 工具监控 iSCSI 会话 复制链接链接已复制到粘贴板!
您可以使用 iscsiadm 工具监控 iscsi 会话。
默认情况下,iSCSI 服务是“懒启动” ,服务只在运行 iscsiadm 命令后才启动。如果 root 没有位于 iSCSI 设备,或者没有标记为 node.startup = automatic 的节点,则 iSCSI 服务将不会启动,直到执行 iscsiadm 命令后,需要 iscsid 或 iscsi 内核模块启动。
以 root 用户身份使用 systemctl start iscsid 命令,来强制 iscsid 服务运行和加载 iSCSI 内核模块。
流程
在客户端机器上安装
iscsi-initiator-utils:# dnf install iscsi-initiator-utils查找正在运行的会话的信息:
# iscsiadm -m session -P 3这个命令显示会话或设备状态、会话 ID(sid)、一些协商的参数以及可通过会话访问的 SCSI 设备。
如果只需要简短的输出,例如:只显示
sid-to-node映射,请运行:# iscsiadm -m session -P 0 or # iscsiadm -m session tcp [2] 10.15.84.19:3260,2 iqn.1992-08.com.netapp:sn.33615311 tcp [3] 10.15.85.19:3260,3 iqn.1992-08.com.netapp:sn.33615311这些命令以以下格式显示了正在运行的会话列表:
driver [sid] target_ip:port,target_portal_group_tag proper_target_name。
7.4. DM 多路径覆盖设备超时 复制链接链接已复制到粘贴板!
restore_tmo sysfs 选项控制一个特定 iSCSI 设备的超时时间。以下选项全局覆盖 recovery_tmo 值:
-
replacement_timeout配置选项会全局覆盖所有 iSCSI 设备的recovery_tmo值。 对于由 DM 多路径管理的所有 iSCSI 设备,DM 多路径中的
fast_io_fail_tmo选项会全局覆盖recovery_tmo值。DM 多路径中的
fast_io_fail_tmo选项会覆盖光纤通道设备的fast_io_fail_tmo选项。
DM 多路径 fast_io_fail_tmo 选项优先于 replacement_timeout。每次重新载入 multipathd 服务时,它会将 recovery_tmo 重置为 fast_io_fail_tmo 配置选项的值。使用 DM 多路径 fast_io_fail_tmo 配置选项覆盖由 DM 多路径管理的设备中的 recovery_tmo。
第 8 章 使用光纤通道设备 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 10 提供以下原生光纤通道驱动程序:
-
lpfc -
qla2xxx -
zfcp
8.1. 在调整 LUN 的大小后重新扫描光纤通道逻辑单元 复制链接链接已复制到粘贴板!
如果您更改了外部存储上的逻辑单元号(LUN)大小,请使用 echo 命令更新内核的大小视图。
流程
确定哪些设备是
多路径逻辑单元的路径:# multipath -ll在使用多路径的系统中重新扫描光纤通道逻辑单元:
$ echo 1 > /sys/block/<device_ID>/device/rescan将
<device_ID>替换为您设备的 ID,如sda。
8.2. 使用光纤通道确定设备链路丢失行为 复制链接链接已复制到粘贴板!
如果驱动程序实现了传输 dev_loss_tmo 回调,当检测到传输问题时,通过链接访问设备的尝试将被阻止。
流程
确定远程端口的状态:
$ cat /sys/class/fc_remote_ports/rport-host:bus:remote-port/port_state这个命令返回以下输出之一:
-
当远程端口以及通过它访问的设备被阻止时为
Blocked。 如果远程端口正常运行,则为
Online如果在
dev_loss_tmo秒内没有解决这个问题,则rport和设备将被取消阻塞。所有在该设备上运行的 I/O 以及发送到该设备的新 I/O 将失败。
-
当远程端口以及通过它访问的设备被阻止时为
当链路丢失超过 dev_loss_tmo 时,会删除 scsi_device 和 sd_N_ 设备。通常,光纤通道类不会更改设备,例如 /dev/sda 保留 /dev/sda 不变。这是因为目标绑定由 Fibre Channel 驱动程序保存,当目标端口返回时,SCSI 地址会被重新创建。但是,这无法保证,只有在没有对 LUN 的存储框配置进行额外的更改时,才会恢复设备。
8.3. Fibre Channel 配置文件 复制链接链接已复制到粘贴板!
以下是 /sys/class/ 目录中为 Fibre Channel 提供用户空间 API 的配置文件列表。
项目使用以下变量:
H- 主机号
B- 总线号
T- 目标
L- 逻辑单元(LUN)
R- 远程端口号
如果您的系统使用多路径软件,请在更改本节中描述的任何值前咨询您的硬件厂商。
传输配置 /sys/class/fc_transport/targetH:B:T/
port_id- 24 位端口 ID/地址
node_name- 64 位节点名称
port_name- 64 位端口名称
远程端口配置 /sys/class/fc_remote_ports/rport-H:B-R/
-
port_id -
node_name -
port_name dev_loss_tmo控制 scsi 设备从系统中删除的时间。在
dev_loss_tmo触发后,scsi 设备被删除。在multipath.conf文件中,您可以将dev_loss_tmo设置为infinity。在 Red Hat Enterprise Linux 10 中,如果您没有设置
fast_io_fail_tmo选项,dev_loss_tmo的上限为600秒。默认情况下,如果multipathd服务正在运行,fast_io_fail_tmo会在 Red Hat Enterprise Linux 10 中被设置为5秒;否则,它被设置为off。fast_io_fail_tmo指定在将链接标记为"bad"之前要等待的秒数。链接被标记为坏的后,现有正在运行的 I/O 或相应路径上的任何新 I/O 都将失败。
如果 I/O 处于阻塞队列中,则在
dev_loss_tmo到期前和队列未阻塞前,它不会失败。如果
fast_io_fail_tmo被设为不是 off 的任何值时,则会取消封dev_loss_tmo的上限。如果fast_io_fail_tmo设为 off,则在设备从系统中删除之前不会出现 I/O 失败。如果fast_io_fail_tmo设置为一个数字,则在达到fast_io_fail_tmo设置的超时会立即触发 I/O 失败。
主机设置 /sys/class/fc_host/hostH/
-
port_id -
node_name -
port_name issue_lip指示驱动重新发现远程端口。
第 9 章 NVMe over fabric 设备概述 复制链接链接已复制到粘贴板!
Non-volatile Memory Express™(NVMe™)是一个接口,它允许主机软件工具与固态驱动器进行通信。
使用以下类型的光纤传输来通过光纤设备配置 NVMe:
- NVMe over Remote Direct Memory Access(NVMe/RDMA)
- 有关如何配置 NVMe™/RDMA 的详情,请参考 使用 NVMe/RDMA 配置 NVMe over fabrics。
- NVMe over Fibre Channel (NVMe/FC)
- 有关如何配置 NVMe™/FC 的详情,请参考 使用 NVMe/FC 配置 NVMe over fabrics。
- NVMe over TCP (NVMe/TCP)
- 有关如何配置 NVMe™/TCP 的详情,请参考 使用 NVMe/TCP 配置 NVMe over fabrics。
当使用 NVMe over fabrics 时,固态驱动器不必在系统本地,可以通过 NVMe over fabrics 设备进行远程配置。
第 10 章 使用 NVMe/RDMA 配置 NVMe over fabrics 复制链接链接已复制到粘贴板!
在 Non-volatile Memory Express™ (NVMe™) over RDMA 设置中,您配置一个 NVMe 控制器和一个 NVMe 启动器。
10.1. 使用 configfs 设置 NVMe/RDMA 控制器 复制链接链接已复制到粘贴板!
您可以使用 configfs 配置一个 Non-volatile Memory Express™ (NVMe™) over RDMA (NVMe™/RDMA) 控制器。
先决条件
-
验证您有一个要分配给
nvmet子系统的块设备。
流程
创建
nvmet-rdma子系统:# modprobe nvmet-rdma # mkdir /sys/kernel/config/nvmet/subsystems/testnqn # cd /sys/kernel/config/nvmet/subsystems/testnqn使用子系统名称替换 testnqn。
允许任何主机连接到此控制器:
# echo 1 > attr_allow_any_host配置命名空间:
# mkdir namespaces/10 # cd namespaces/10使用命名空间号替换 10
设置 NVMe 设备的路径:
# echo -n /dev/nvme0n1 > device_path启用命名空间:
# echo 1 > enable创建带有 NVMe 端口的目录:
# mkdir /sys/kernel/config/nvmet/ports/1 # cd /sys/kernel/config/nvmet/ports/1显示 mlx5_ib0 的 IP 地址:
# ip addr show mlx5_ib0 8: mlx5_ib0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 4092 qdisc mq state UP group default qlen 256 link/infiniband 00:00:06:2f:fe:80:00:00:00:00:00:00:e4:1d:2d:03:00:e7:0f:f6 brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff inet 172.31.0.202/24 brd 172.31.0.255 scope global noprefixroute mlx5_ib0 valid_lft forever preferred_lft forever inet6 fe80::e61d:2d03:e7:ff6/64 scope link noprefixroute valid_lft forever preferred_lft forever为控制器设置传输地址:
# echo -n 172.31.0.202 > addr_traddr将 RDMA 设置为传输类型:
# echo rdma > addr_trtype # echo 4420 > addr_trsvcid为端口设置地址系列:
# echo ipv4 > addr_adrfam创建软链接:
# ln -s /sys/kernel/config/nvmet/subsystems/testnqn /sys/kernel/config/nvmet/ports/1/subsystems/testnqn
验证
验证 NVMe 控制器是否在指定端口上侦听并准备好连接请求:
# dmesg | grep "enabling port" [ 1091.413648] nvmet_rdma: enabling port 1 (172.31.0.202:4420)
10.2. 使用 nvmetcli 设置 NVMe/RDMA 控制器 复制链接链接已复制到粘贴板!
您可以使用 nvmetcli 工具配置 Non-volatile Memory Express™ (NVMe™) over RDMA (NVMe™/RDMA)控制器。nvmetcli 实用程序提供命令行和交互式 shell 选项。
先决条件
-
验证您有一个要分配给
nvmet子系统的块设备。 -
以 root 用户身份运行以下
nvmetcli操作。
流程
安装
nvmetcli软件包:# dnf install nvmetcli下载
rdma.json文件:# wget http://git.infradead.org/users/hch/nvmetcli.git/blob_plain/0a6b088db2dc2e5de11e6f23f1e890e4b54fee64:/rdma.json-
编辑
rdma.json文件,并将traddr值更改为172.31.0.202。 通过载入 NVMe 控制器配置文件来设置控制器:
# nvmetcli restore rdma.json
如果没有指定 NVMe 控制器配置文件名称,则 nvmetcli 使用 /etc/nvmet/config.json 文件。
验证
验证 NVMe 控制器是否在指定端口上侦听并准备好连接请求:
# dmesg | tail -1 [ 4797.132647] nvmet_rdma: enabling port 2 (172.31.0.202:4420)可选:清除当前 NVMe 控制器:
# nvmetcli clear
10.3. 配置 NVMe/RDMA 主机 复制链接链接已复制到粘贴板!
您可以使用 NVMe 管理命令行界面(nvme-cli)工具配置一个 Non-volatile Memory Express™ (NVMe™) over RDMA (NVMe™/RDMA) 主机。
流程
安装
nvme-cli工具:# dnf install nvme-cli如果没有加载,则加载
nvme-rdma模块:# modprobe nvme-rdma在 NVMe 控制器中发现可用的子系统:
# nvme discover -t rdma -a 172.31.0.202 -s 4420 Discovery Log Number of Records 2, Generation counter 2 =====Discovery Log Entry 0====== trtype: rdma adrfam: ipv4 subtype: current discovery subsystem treq: not specified, sq flow control disable supported portid: 2 trsvcid: 4420 subnqn: nqn.2014-08.org.nvmexpress.discovery traddr: 172.31.0.202 eflags: none rdma_prtype: not specified rdma_qptype: connected rdma_cms: rdma-cm rdma_pkey: 0000 =====Discovery Log Entry 1====== trtype: rdma adrfam: ipv4 subtype: nvme subsystem treq: not specified, sq flow control disable supported portid: 2 trsvcid: 4420 subnqn: testnqn traddr: 172.31.0.202 eflags: none rdma_prtype: not specified rdma_qptype: connected rdma_cms: rdma-cm rdma_pkey: 0000连接到发现的子系统:
# nvme connect -t rdma -a 172.31.0.202 -s 4420 -n testnqn connecting to device: nvme0 # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 465.8G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 464.8G 0 part ├─rhel_rdma--virt--03-root 253:0 0 50G 0 lvm / ├─rhel_rdma--virt--03-swap 253:1 0 4G 0 lvm [SWAP] └─rhel_rdma--virt--03-home 253:2 0 410.8G 0 lvm /home nvme0n1 # cat /sys/class/nvme/nvme0/transport rdma使用 NVMe 子系统名称替换 testnqn。
将 172.31.0.202 替换为控制器 IP 地址。
使用端口号替换 4420。
验证
列出当前连接的 NVMe 设备:
# nvme list可选:从控制器断开连接:
# nvme disconnect -n testnqn NQN:testnqn disconnected 1 controller(s) # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 465.8G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 464.8G 0 part ├─rhel_rdma--virt--03-root 253:0 0 50G 0 lvm / ├─rhel_rdma--virt--03-swap 253:1 0 4G 0 lvm [SWAP] └─rhel_rdma--virt--03-home 253:2 0 410.8G 0 lvm /home
第 11 章 使用 NVMe/FC 配置 NVMe over fabrics 复制链接链接已复制到粘贴板!
当与某些 Broadcom Emulex 和 Marvell Qlogic Fibre Channel 适配器一起使用时,在主机模式下完全支持光纤通道 (NVMe™/FC) 传输上的 Non-volatile Memory Express™(NVMe™)。
11.1. 为广播适配器配置 NVMe 主机 复制链接链接已复制到粘贴板!
您可以使用 NVMe 管理命令行界面(nvme-cli)工具配置一个带有 Broadcom 适配器的 Non-volatile Memory Express™(NVMe™)主机。
流程
安装
nvme-cli工具:# dnf install nvme-cli这会在
/etc/nvme/目录中创建hostnqn文件。hostn文件标识 NVMe 主机。查找本地和远程端口的全球节点名称(WWNN)和全球端口名称(WWPN)标识符:
# cat /sys/class/scsi_host/host*/nvme_info NVME Host Enabled XRI Dist lpfc0 Total 6144 IO 5894 ELS 250 NVME LPORT lpfc0 WWPN x10000090fae0b5f5 WWNN x20000090fae0b5f5 DID x010f00 ONLINE NVME RPORT WWPN x204700a098cbcac6 WWNN x204600a098cbcac6 DID x01050e TARGET DISCSRVC ONLINE NVME Statistics LS: Xmt 000000000e Cmpl 000000000e Abort 00000000 LS XMIT: Err 00000000 CMPL: xb 00000000 Err 00000000 Total FCP Cmpl 00000000000008ea Issue 00000000000008ec OutIO 0000000000000002 abort 00000000 noxri 00000000 nondlp 00000000 qdepth 00000000 wqerr 00000000 err 00000000 FCP CMPL: xb 00000000 Err 00000000使用这些
host-traddr和traddr值,找到子系统 NVMe 限定名称(NQN):# nvme discover --transport fc \ --traddr nn-0x204600a098cbcac6:pn-0x204700a098cbcac6 \ --host-traddr nn-0x20000090fae0b5f5:pn-0x10000090fae0b5f5 Discovery Log Number of Records 2, Generation counter 49530 =====Discovery Log Entry 0====== trtype: fc adrfam: fibre-channel subtype: nvme subsystem treq: not specified portid: 0 trsvcid: none subnqn: nqn.1992-08.com.netapp:sn.e18bfca87d5e11e98c0800a098cbcac6:subsystem.st14_nvme_ss_1_1 traddr: nn-0x204600a098cbcac6:pn-0x204700a098cbcac6将 nn-0x204600a098cbcac6:pn-0x204700a098cbcac6 替换为
traddr。将 nn-0x20000090fae0b5f5:pn-0x10000090fae0b5f5 替换为
host-traddr。使用
nvme-cli连接到 NVMe 控制器:# nvme connect --transport fc \ --traddr nn-0x204600a098cbcac6:pn-0x204700a098cbcac6 \ --host-traddr nn-0x20000090fae0b5f5:pn-0x10000090fae0b5f5 \ -n nqn.1992-08.com.netapp:sn.e18bfca87d5e11e98c0800a098cbcac6:subsystem.st14_nvme_ss_1_1 \ -k 5注意如果您在连接时间超过默认的 keep-alive timeout 值时看到
keep-alive timer (5 seconds) expired!错误,请使用-k选项增加它。例如,您可以使用-k 7。在这里,
将 nn-0x204600a098cbcac6:pn-0x204700a098cbcac6 替换为
traddr。将 nn-0x20000090fae0b5f5:pn-0x10000090fae0b5f5 替换为
host-traddr。将 nqn.1992-08.com.netapp:sn.e18bfca87d5e11e98c0800a098cbcac6:subsystem.st14_nvme_ss_1_1 替换为
subnqn。将 5 替换为 keep-alive timeout 值(以秒为单位)。
验证
列出当前连接的 NVMe 设备:
# nvme list Node SN Model Namespace Usage Format FW Rev ---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- -------- /dev/nvme0n1 80BgLFM7xMJbAAAAAAAC NetApp ONTAP Controller 1 107.37 GB / 107.37 GB 4 KiB + 0 B FFFFFFFF # lsblk |grep nvme nvme0n1 259:0 0 100G 0 disk
11.2. 为 QLogic 适配器配置 NVMe 主机 复制链接链接已复制到粘贴板!
您可以使用 NVMe 管理命令行界面(nvme-cli)工具配置一个带有 Qlogic 适配器的 Non-volatile Memory Express™(NVMe™)主机。
流程
安装
nvme-cli工具:# dnf install nvme-cli这会在
/etc/nvme/目录中创建hostnqn文件。hostn文件标识 NVMe 主机。重新载入
qla2xxx模块:# modprobe -r qla2xxx # modprobe qla2xxx查找本地和远程端口的全球节点名称(WWNN)和全球端口名称(WWPN)标识符:
# dmesg |grep traddr [ 6.139862] qla2xxx [0000:04:00.0]-ffff:0: register_localport: host-traddr=nn-0x20000024ff19bb62:pn-0x21000024ff19bb62 on portID:10700 [ 6.241762] qla2xxx [0000:04:00.0]-2102:0: qla_nvme_register_remote: traddr=nn-0x203b00a098cbcac6:pn-0x203d00a098cbcac6 PortID:01050d使用这些
host-traddr和traddr值,找到子系统 NVMe 限定名称(NQN):# nvme discover --transport fc \ --traddr nn-0x203b00a098cbcac6:pn-0x203d00a098cbcac6 \ --host-traddr nn-0x20000024ff19bb62:pn-0x21000024ff19bb62 Discovery Log Number of Records 2, Generation counter 49530 =====Discovery Log Entry 0====== trtype: fc adrfam: fibre-channel subtype: nvme subsystem treq: not specified portid: 0 trsvcid: none subnqn: nqn.1992-08.com.netapp:sn.c9ecc9187b1111e98c0800a098cbcac6:subsystem.vs_nvme_multipath_1_subsystem_468 traddr: nn-0x203b00a098cbcac6:pn-0x203d00a098cbcac6将 nn-0x203b00a098cbcac6:pn-0x203d00a098cbcac6 替换为
traddr。将 nn-0x20000024ff19bb62:pn-0x21000024ff19bb62 替换为
host-traddr。使用
nvme-cli工具连接到 NVMe 控制器:# nvme connect --transport fc \ --traddr nn-0x203b00a098cbcac6:pn-0x203d00a098cbcac6 \ --host-traddr nn-0x20000024ff19bb62:pn-0x21000024ff19bb62 \ -n nqn.1992-08.com.netapp:sn.c9ecc9187b1111e98c0800a098cbcac6:subsystem.vs_nvme_multipath_1_subsystem_468\ -k 5注意如果您在连接时间超过默认的 keep-alive timeout 值时看到
keep-alive timer (5 seconds) expired!错误,请使用-k选项增加它。例如,您可以使用-k 7。在这里,
将 nn-0x203b00a098cbcac6:pn-0x203d00a098cbcac6 替换为
traddr。将 nn-0x20000024ff19bb62:pn-0x21000024ff19bb62 替换为
host-traddr。将 nqn.1992-08.com.netapp:sn.c9ecc9187b1111e98c0800a098cbcac6:subsystem.vs_nvme_multipath_1_subsystem_468 替换为
subnqn。将 5 替换为 keep-live timeout 值(以秒为单位)。
验证
列出当前连接的 NVMe 设备:
# nvme list Node SN Model Namespace Usage Format FW Rev ---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- -------- /dev/nvme0n1 80BgLFM7xMJbAAAAAAAC NetApp ONTAP Controller 1 107.37 GB / 107.37 GB 4 KiB + 0 B FFFFFFFF # lsblk |grep nvme nvme0n1 259:0 0 100G 0 disk
第 12 章 使用 NVMe/TCP 配置 NVMe over fabrics 复制链接链接已复制到粘贴板!
在 Non-volatile Memory Express™ (NVMe™) over TCP (NVMe/TCP)设置中,主机模式被完全支持,控制器设置不被支持。
在 Red Hat Enterprise Linux 10 中,原生 NVMe 多路径默认启用。NVMe/TCP 不支持启用 DM 多路径。
12.1. 配置 NVMe/TCP 主机 复制链接链接已复制到粘贴板!
您可以使用 NVMe 管理命令行界面(nvme-cli)工具配置一个 Non-volatile Memory Express™ (NVMe™) over TCP (NVMe/TCP)主机。
流程
安装
nvme-cli工具:# dnf install nvme-cli此工具在
/etc/nvme/目录中创建hostnqn文件,该文件标识 NVMe 主机。找到 nvme
hostid和hostnqn:# cat /etc/nvme/hostnqn nqn.2014-08.org.nvmexpress:uuid:8ae2b12c-3d28-4458-83e3-658e571ed4b8 # cat /etc/nvme/hostid 09e2ce17-ccc9-412d-8dcf-2b0a1d581ee3使用
hostid和hostn值配置 NVMe/TCP 控制器。检查控制器的状态:
# nmcli device show ens6 GENERAL.DEVICE: ens6 GENERAL.TYPE: ethernet GENERAL.HWADDR: 52:57:02:12:02:02 GENERAL.MTU: 1500 GENERAL.STATE: 30 (disconnected) GENERAL.CONNECTION: -- GENERAL.CON-PATH: -- WIRED-PROPERTIES.CARRIER: on使用静态 IP 地址为新安装的以太网控制器配置主机网络:
# nmcli connection add con-name ens6 ifname ens6 type ethernet ip4 192.168.101.154/24 gw4 192.168.101.1此处,将 192.168.101.154 替换为主机 IP 地址。
# nmcli connection mod ens6 ipv4.method manual # nmcli connection up ens6由于创建了一个新网络来将 NVMe/TCP 主机连接到 NVMe/TCP 控制器,因此也在控制器上重复此步骤。
验证
验证新创建的主机网络是否正常工作:
# nmcli device show ens6 GENERAL.DEVICE: ens6 GENERAL.TYPE: ethernet GENERAL.HWADDR: 52:57:02:12:02:02 GENERAL.MTU: 1500 GENERAL.STATE: 100 (connected) GENERAL.CONNECTION: ens6 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/5 WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 192.168.101.154/24 IP4.GATEWAY: 192.168.101.1 IP4.ROUTE[1]: dst = 192.168.101.0/24, nh = 0.0.0.0, mt = 101 IP4.ROUTE[2]: dst = 192.168.1.1/32, nh = 0.0.0.0, mt = 101 IP4.ROUTE[3]: dst = 0.0.0.0/0, nh = 192.168.1.1, mt = 101 IP6.ADDRESS[1]: fe80::27ce:dde1:620:996c/64 IP6.GATEWAY: -- IP6.ROUTE[1]: dst = fe80::/64, nh = ::, mt = 101
12.2. 将 NVMe/TCP 主机连接到 NVMe/TCP 控制器 复制链接链接已复制到粘贴板!
将 TCP (NVMe/TCP)上的 NVMe™ 主机连接到 NVMe/TCP 控制器系统,以验证 NVMe/TCP 主机现在是否可以访问命名空间。
不支持 NVMe/TCP 控制器(nvmet-tcp)模块。
先决条件
- 您已配置了 NVMe/TCP 主机。如需更多信息,请参阅配置 NVMe/TCP 主机。
- 您已使用外部存储软件配置了 NVMe/TCP 控制器,且在控制器上配置了网络。在此流程中,192.168.101.55 是 NVMe/TCP 控制器的 IP 地址。
流程
如果还没有加载
nvme-tcp模块,请加载它:# modprobe nvme-tcp在 NVMe 控制器中发现可用的子系统:
# nvme discover --transport=tcp --traddr=192.168.101.55 --host-traddr=192.168.101.154 --trsvcid=8009 Discovery Log Number of Records 2, Generation counter 7 =====Discovery Log Entry 0====== trtype: tcp adrfam: ipv4 subtype: current discovery subsystem treq: not specified, sq flow control disable supported portid: 2 trsvcid: 8009 subnqn: nqn.2014-08.org.nvmexpress.discovery traddr: 192.168.101.55 eflags: not specified sectype: none =====Discovery Log Entry 1====== trtype: tcp adrfam: ipv4 subtype: nvme subsystem treq: not specified, sq flow control disable supported portid: 2 trsvcid: 8009 subnqn: nqn.2014-08.org.nvmexpress:uuid:0c468c4d-a385-47e0-8299-6e95051277db traddr: 192.168.101.55 eflags: not specified sectype: none在这里,192.168.101.55 是 NVMe/TCP 控制器 IP 地址,192.168.101.154 是 NVMe/TCP 主机 IP 地址。
配置
/etc/nvme/discovery.conf文件,以添加nvme discover命令中使用的参数:# echo "--transport=tcp --traddr=192.168.101.55 --host-traddr=192.168.101.154 --trsvcid=8009" >> /etc/nvme/discovery.conf将 NVMe/TCP 主机连接到控制器系统:
# nvme connect-all
验证
验证 NVMe/TCP 主机是否可以访问命名空间:
# nvme list-subsys nvme-subsys3 - NQN=nqn.2014-08.org.nvmexpress:uuid:0c468c4d-a385-47e0-8299-6e95051277db \ +- nvme3 tcp traddr=192.168.101.55,trsvcid=8009,host_traddr=192.168.101.154 live optimized # nvme list Node Generic SN Model Namespace Usage Format FW Rev --------------------- --------------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- -------- /dev/nvme3n1 /dev/ng3n1 d93a63d394d043ab4b74 Linux 1 21.47 GB / 21.47 GB 512 B + 0 B 5.18.5-2
12.3. 配置 NVMe 主机身份验证 复制链接链接已复制到粘贴板!
要使用 NVMe over Fabrics (NVMe-oF)控制器建立经过身份验证的连接,您可以在 Non-volatile Memory Express (NVMe)主机上配置身份验证。NVMe 身份验证使用共享 secret 或一对 secret,并使用 challenge-response 协议,例如 NVMe DH-HMAC-CHAP。
NVMe 身份验证只支持 NVMe/TCP 传输类型。此功能不适用于其他传输,如 NVMe over Remote Direct Memory Access (NVMe/RDMA)或 NVMe over Fibre Channel (NVMe/FC)。
先决条件
-
nvme-cli软件包已安装。 -
您知道主机 NVMe 限定名称(Host NQN)和 子系统 NVMe 限定名称(子系统 NQN) ,如果使用双向身份验证。要查看系统的默认主机 NQN,请运行
nvme show-hostnqnq。
流程
生成一个身份验证 secret:
对于主机:
# hostkey=$(nvme gen-dhchap-key -n ${HOSTNQN})对于子系统:
# ctrlkey=$(nvme gen-dhchap-key -n ${SUBSYSTEM})
配置主机以进行身份验证:
# nvme connect -t tcp -n ${SUBSYSTEM} -a ${TRADDR} -s 4420 --dhchap-secret=${hostkey} --dhchap-ctrl-secret=${ctrlkey}这为
nvme-connect工具提供了身份验证 secret,以便它可以验证并建立到目标的连接。-
可选:要启用自动登录,请设置持久的 NVMe fabrics 配置。为此,请将
--dhchap-secret和--dhchap-ctrl-secret参数添加到/etc/nvme/discovery.conf或/etc/nvme/config.json。
-
可选:要启用自动登录,请设置持久的 NVMe fabrics 配置。为此,请将
验证
验证 NVMe 存储是否已连接:
# nvme list这将显示当前连接到主机的 NVMe 设备的列表。验证预期的存储是否列出,表示到存储服务器的连接成功。
第 13 章 swap 入门 复制链接链接已复制到粘贴板!
使用交换空间为不活跃的进程和数据提供临时存储,并防止物理内存满时内存不足。交换空间充当物理内存的扩展,并允许系统在物理内存耗尽时继续平稳运行。请注意,使用 swap 空间可能会降低系统性能,因此在依赖 swap 空间前,优化物理内存的使用可能会更有利。
13.1. swap 空间概述 复制链接链接已复制到粘贴板!
当物理内存(RAM)已满时,将使用 Linux 中的 交换空间。如果系统需要更多的内存资源并且 RAM 已满,内存中的不活动页面将移到交换空间。虽然交换空间可以帮助具有少量 RAM 的计算机,但不应将其视为更多 RAM 的替代品。
交换空间位于硬盘驱动器上,其访问时间比物理内存要慢。交换空间可以是专用的交换分区(推荐)、交换文件,或者交换分区和交换文件的组合。
过去数年,推荐的 swap 空间会随系统中的 RAM 量增加而线性增大。然而,现代系统通常包含了成百 GB 内存。因此,推荐的交换空间被视为系统内存工作负载的功能,而不是系统内存的功能。
13.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 引导选项。当提示挂载文件系统时,请选择 。
13.3. 为 swap 创建 LVM2 逻辑卷 复制链接链接已复制到粘贴板!
您可以为 swap 创建一个 LVM2 逻辑卷。假设 /dev/VolGroup00/LogVol02 是您要添加的交换卷。
先决条件
- 您有足够的磁盘空间。
流程
创建大小为 4 GB 的 LVM2 逻辑卷:
# lvcreate -n LogVol02 -L 4G VolGroup00格式化新 swap 空间:
# mkswap /dev/VolGroup00/LogVol02在
/etc/fstab文件中添加以下条目:/dev/VolGroup00/LogVol02 none swap defaults 0 0重新生成挂载单元以便您的系统注册新配置:
# systemctl daemon-reload在逻辑卷中激活 swap:
# swapon -v /dev/VolGroup00/LogVol02
验证
要测试是否成功创建并激活 swap 逻辑卷,请使用以下命令检查活跃 swap 空间:
# cat /proc/swaps Filename Type Size Used Priority /dev/dm-6 partition 4194300 0 -2# free -h total used free shared buff/cache available Mem: 30Gi 1.2Gi 28Gi 12Mi 995Mi 28Gi Swap: 4.0Gi 0B 4.0Gi
13.4. 创建交换文件 复制链接链接已复制到粘贴板!
当系统内存不足时,您可以创建一个 swap 文件来在固态驱动器或硬盘上创建一个临时存储空间。
先决条件
- 您有足够的磁盘空间。
流程
- 以 MB 为单位确定新交换文件的大小,再乘以 1024 来确定块的数量。例如,64 MB 文件所需的 1024 字节大小的块的数量为 65536。
创建一个空文件:
# dd if=/dev/zero of=/swapfile bs=1024 count=65536将 65536 替换为等于所需块大小的值。
使用以下命令设定 swap 文件:
# mkswap /swapfile更改交换文件的安全性,使其不可读。
# chmod 0600 /swapfile使用以下条目编辑
/etc/fstab文件,以在引导时启用交换文件:/swapfile none swap defaults 0 0下次系统引导时,它会激活新的 swap 文件。
重新生成挂载单元,以便您的系统注册新的
/etc/fstab配置:# systemctl daemon-reload立即激活 swap 文件:
# swapon /swapfile
验证
要测试新 swap 文件是否已成功创建并激活,请使用以下命令检查活跃 swap 空间:
$ cat /proc/swaps$ free -h
13.5. 使用 storage RHEL 系统角色创建 swap 卷 复制链接链接已复制到粘贴板!
本节提供了一个 Ansible Playbook 示例。此 playbook 应用 storage 角色来创建一个 swap 卷(如果不存在),或者使用默认参数修改块设备上的 swap 卷(如果已存在)。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:--- - name: Create a disk device with swap hosts: managed-node-01.example.com roles: - rhel-system-roles.storage vars: storage_volumes: - name: swap_fs type: disk disks: - /dev/sdb size: 15 GiB fs_type: swap卷名称(示例中的
swap_fs)目前是任意的。存储角色根据disks:属性下列出的磁盘设备来识别卷。有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。验证 playbook 语法:
$ ansible-playbook --syntax-check ~/playbook.yml请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
$ ansible-playbook ~/playbook.yml
13.6. 在 LVM2 逻辑卷中扩展 swap 复制链接链接已复制到粘贴板!
您可以在现有 LVM2 逻辑卷上扩展 swap 空间。假设 /dev/VolGroup00/LogVol02 是您要扩展 2 GB 的卷。
先决条件
- 您有足够的磁盘空间。
流程
为关联的逻辑卷禁用交换:
# swapoff -v /dev/VolGroup00/LogVol02将 LVM2 逻辑卷调整为 2 GB :
# lvresize -L +2G /dev/VolGroup00/LogVol02格式化新 swap 空间:
# mkswap /dev/VolGroup00/LogVol02启用扩展的逻辑卷:
# swapon -v /dev/VolGroup00/LogVol02
验证
要测试是否成功扩展并激活 swap 逻辑卷,请检查活跃 swap 空间:
# cat /proc/swaps Filename Type Size Used Priority /dev/dm-6 partition 6291452 0 -2# free -h total used free shared buff/cache available Mem: 30Gi 1.2Gi 28Gi 12Mi 994Mi 28Gi Swap: 6.0Gi 0B 6.0Gi
13.7. 在 LVM2 逻辑卷中减少 swap 复制链接链接已复制到粘贴板!
您可以减少 LVM2 逻辑卷上的 swap。假设 /dev/VolGroup00/LogVol02 是您要缩小的卷。
流程
为关联的逻辑卷禁用交换:
# swapoff -v /dev/VolGroup00/LogVol02清理 swap 签名:
# wipefs -a /dev/VolGroup00/LogVol02将 LVM2 逻辑卷减少 512 MB:
# lvreduce -L -512M /dev/VolGroup00/LogVol02格式化新 swap 空间:
# mkswap /dev/VolGroup00/LogVol02在逻辑卷中激活 swap:
# swapon -v /dev/VolGroup00/LogVol02
验证
要测试是否成功缩小 swap 逻辑卷,请使用以下命令检查活跃的 swap 空间:
$ cat /proc/swaps$ free -h
13.8. 删除 swap 的 LVM2 逻辑卷 复制链接链接已复制到粘贴板!
您可以删除 swap 的一个 LVM2 逻辑卷。假设 /dev/VolGroup00/LogVol02 是您要删除的交换卷。
流程
为关联的逻辑卷禁用交换:
# swapoff -v /dev/VolGroup00/LogVol02删除 LVM2 逻辑卷:
# lvremove /dev/VolGroup00/LogVol02从
/etc/fstab文件中删除以下关联的条目:/dev/VolGroup00/LogVol02 none swap defaults 0 0重新生成挂载单元以注册新配置:
# systemctl daemon-reload
验证
测试逻辑卷是否被成功删除,使用以下命令检查活跃的 swap 空间:
$ cat /proc/swaps$ free -h
13.9. 删除 swap 文件 复制链接链接已复制到粘贴板!
您可以删除一个 swap 文件。
流程
禁用
/swapfileswap 文件:# swapoff -v /swapfile-
相应地从
/etc/fstab文件中删除其条目。 重新生成挂载单元以便您的系统注册新配置:
# systemctl daemon-reload删除实际的文件:
# rm /swapfile
第 14 章 使用以太网配置光纤 复制链接链接已复制到粘贴板!
根据 IEEE T11 FC-BB-5 标准,使用以太网(FCoE)的光纤通道是通过以太网传输光纤通道帧的协议。通常数据中心有一个专用的 LAN 和 Storage Area Network(SAN),它和它们自己的配置是相互分开的。FCoE 将这些网络合并为一个整合的网络结构。例如 FCoE 的优点是降低硬件和能源成本。
14.1. 在 RHEL 中使用硬件 FCoE HBA 复制链接链接已复制到粘贴板!
在 RHEL 中,您可以使用以太网的硬件光纤通道(FCoE)主机总线适配器(HBA),这些驱动程序支持以下驱动程序:
-
qedf -
fnic
如果您使用这样的 HBA,在 HBA 设置中配置 FCoE 设置。如需更多信息,请参阅适配器文档。
配置 HBA 后,从 Storage Area Network(SAN)中导出的逻辑单元号(LUN)将自动用于 RHEL 作为 /dev/sd* 设备。您可以使用类似本地存储设备的设备。
第 15 章 管理磁带设备 复制链接链接已复制到粘贴板!
磁带设备是保存数据并按顺序访问的磁带。使用磁带驱动器将数据写入此磁带设备。不需要创建文件系统来存储磁带设备中的数据。可以使用各种接口(如 SCSI、FC、USB、SATA 和其他接口)连接到主机计算机。
15.1. 磁带设备的类型 复制链接链接已复制到粘贴板!
以下是不同类型的磁带设备列表:
-
/dev/st0是一个回卷磁带设备。 -
/dev/nst0是一个非回卷磁带设备。使用非缓解设备进行日常备份。
使用磁带设备有几个优点。它们成本效益高且稳定。磁带设备也对数据崩溃具有弹性,并适合长久保存数据。
15.2. 安装磁带驱动器管理工具 复制链接链接已复制到粘贴板!
为磁带驱动器操作安装 mt-st 软件包。使用 mt 工具控制磁带驱动器操作,使用 st 工具控制 SCSI 磁带驱动器。
流程
安装
mt-st软件包:# dnf install mt-st
15.3. 磁带命令 复制链接链接已复制到粘贴板!
以下是常见的 mt 命令:
| 命令 | 描述 |
|---|---|
|
| 显示磁带设备的状态。 |
|
| 擦除整个磁带。 |
|
| 插入磁带设备。 |
|
| 将磁带头切换到转发记录。在这里,n 是一个可选的文件数。如果指定了文件计数,磁带头将跳过 n 个记录。 |
|
| 将磁头切换到之前的记录。 |
|
| 将磁带头切换到数据的末尾。 |
15.4. 写入如回卷磁带设备 复制链接链接已复制到粘贴板!
在每次操作后,回卷磁带设备会进行回卷。要备份数据,您可以使用 tar 命令。默认情况下,在磁带设备中,块大小 为 10 KB (bs=10k)。您可以使用 export TAPE=/dev/st0 属性设置 TAPE 环境变量。使用 -f 设备选项指定磁带设备文件。当您使用多个磁带设备时,这个选项很有用。
先决条件
-
已安装
mt-st软件包。如需更多信息,请参阅安装磁带驱动器管理工具。 加载磁带驱动器:
# mt -f /dev/st0 load
流程
检查磁带头:
# mt -f /dev/st0 status SCSI 2 tape drive: File number=-1, block number=-1, partition=0. Tape block size 0 bytes. Density code 0x0 (default). Soft error count since last status=0 General status bits on (50000): DR_OPEN IM_REP_EN在这里:
-
当前
文件号为 -1。 -
块编号定义磁带头。默认情况下,它被设置为 -1。 -
块大小0 表示磁带设备没有固定的块大小。 -
软错误数表示在执行 mt status 命令后遇到的错误数量。 -
General status 位解释了磁带设备的状态。 -
DR_OPEN表示公开,磁带设备为空。IM_REP_EN是即时报告模式。
-
当前
如果磁带设备不是空的,覆盖它:
# tar -czf /dev/st0 _/source/directory该命令使用
/source/directory目录的内容覆盖 tape 设备中的数据将
/source/directory目录备份到磁带设备中:# tar -czf /dev/st0 _/source/directory tar: Removing leading `/' from member names /source/directory /source/directory/man_db.conf /source/directory/DIR_COLORS /source/directory/rsyslog.conf [...]查看磁带设备的状态:
# mt -f /dev/st0 status
验证
查看磁带设备上的所有文件列表:
# tar -tzf /dev/st0 /source/directory/ /source/directory/man_db.conf /source/directory/DIR_COLORS /source/directory/rsyslog.conf [...]
15.5. 写入非回卷解磁带设备 复制链接链接已复制到粘贴板!
在完成特定命令后,非回卷磁带设备会将磁带保持在当前位置。例如,备份后,您可以将更多数据附加到非回卷的磁带设备中。您还可以使用它来避免任何意外的回卷。
先决条件
-
已安装
mt-st软件包。如需更多信息,请参阅安装磁带驱动器管理工具。 加载磁带驱动器:
# mt -f /dev/nst0 load
流程
检查非回卷磁带设备
/dev/nst0的磁带头:# mt -f /dev/nst0 status指定位于头或磁带末尾的指针:
# mt -f /dev/nst0 rewind附加磁带设备中的数据:
# mt -f /dev/nst0 eod # tar -czf /dev/nst0 /source/directory/将
/source/directory/备份到磁带设备中:# tar -czf /dev/nst0 /source/directory/ tar: Removing leading `/' from member names /source/directory/ /source/directory/man_db.conf /source/directory/DIR_COLORS /source/directory/rsyslog.conf [...]查看磁带设备的状态:
# mt -f /dev/nst0 status
验证
查看磁带设备上的所有文件列表:
# tar -tzf /dev/nst0 /source/directory/ /source/directory/man_db.conf /source/directory/DIR_COLORS /source/directory/rsyslog.conf [...]
15.6. 在磁带设备中切换磁带头 复制链接链接已复制到粘贴板!
您可以使用 eod 选项切换磁带设备中的磁带头。
先决条件
-
已安装
mt-st软件包。如需更多信息,请参阅安装磁带驱动器管理工具。 - 数据被写入磁带设备。如需更多信息,请参阅写入回卷磁带设备,或写入非回卷磁带设备。
流程
查看磁带指针的当前位置:
# mt -f /dev/nst0 tell在将数据附加到磁带设备时切换磁带头:
# mt -f /dev/nst0 eod使用之前的记录:
# mt -f /dev/nst0 bsfm 1转至正向记录:
# mt -f /dev/nst0 fsf 1
15.7. 从磁带设备中恢复数据 复制链接链接已复制到粘贴板!
您可以使用 tar 命令从磁带设备中恢复数据。
先决条件
-
已安装
mt-st软件包。如需更多信息,请参阅安装磁带驱动器管理工具。 - 数据被写入磁带设备。如需更多信息,请参阅写入回卷磁带设备,或写入非回卷磁带设备。
流程
对于回卷磁带设备
/dev/st0:恢复
/source/directory/:# tar -xzf /dev/st0 /source/directory/
对于非回卷磁带设备
/dev/nst0:重新构建磁带设备:
# mt -f /dev/nst0 rewind恢复
etc目录:# tar -xzf /dev/nst0 /source/directory/
15.8. 从磁带设备中删除数据 复制链接链接已复制到粘贴板!
您可以使用 erase 选项删除磁带设备中的数据。
先决条件
-
已安装
mt-st软件包。如需更多信息,请参阅安装磁带驱动器管理工具。 - 数据被写入磁带设备。如需更多信息,请参阅写入回卷磁带设备,或写入非回卷磁带设备。
流程
从磁带设备中删除数据:
# mt -f /dev/st0 erase卸载磁带设备:
# mt -f /dev/st0 offline
第 16 章 管理 RAID 复制链接链接已复制到粘贴板!
您可以使用独立磁盘的冗余阵列 (RAID) 在多个驱动器间存储数据。它可以帮助避免驱动器失败时数据丢失。
16.1. RAID 概述 复制链接链接已复制到粘贴板!
在 RAID 中,多个设备(如 HDD、SSD 或 NVMe)组合成一个阵列来实现性能或冗余目标,而不是使用一个大而昂贵的驱动器。这组设备以单一逻辑存储单元或驱动器在计算机中出现。
RAID 支持各种配置,包括 0、1、4、5、6、10 和 linear。RAID 使用磁盘条带 (RAID 0)、磁盘镜像 (RAID 1)和带有奇偶校验 (RAID 4 4、5 和 6) 的磁盘条带等技术来实现冗余、较低延迟、增大带宽以及最大程度从硬盘崩溃中恢复的能力。
RAID 通过将数据分解为一致的块(通常为 256 KB 或 512 KB)来跨阵列中的每个设备分发数据,但其他值可以接受。根据所使用的 RAID 级别,它会将这些块写入 RAID 阵列中的硬盘中。在读取数据时,进程是相反的顺序,实现阵列中的多个设备实际上是一个大驱动器的效果。
对于需要管理大量数据的人员,RAID 技术非常有用。以下是部署 RAID 的主要原因:
- 它可以提高速度
- 它使用单个虚拟磁盘增加存储容量
- 尽可能减少磁盘出现问题时导致数据丢失的问题
- RAID 布局和级别在线转换
16.2. RAID 类型 复制链接链接已复制到粘贴板!
以下是可能的 RAID 类型:
- 固件 RAID
- 固件 RAID(也称为 ATARAID)是一种软件 RAID,可以使用基于固件的菜单配置 RAID 集。此类 RAID 使用的固件也会挂接到 BIOS 中,允许您从 RAID 集启动。不同的供应商使用不同的磁盘元数据格式来标记 RAID 集成员。Intel Matrix RAID 是固件 RAID 系统的示例。
- 硬件 RAID
基于硬件的阵列独立于主机管理 RAID 子系统。它可能会在每个 RAID 阵列中存在多个设备。
硬件 RAID 设备可能是系统内部或外部的。内部设备通常由专用的控制器卡组成,该控制器卡处理对操作系统透明的 RAID 任务。外部设备通常通过 SCSI、光纤、iSCSI、InfiniBand 或者其它高速网络互联连接的系统,并显示卷如逻辑单元到系统。
RAID 控制器卡的功能类似于操作系统的 SCSI 控制器,并处理所有实际驱动器通信。您可以将驱动器插入与普通 SCSI 控制器类似的 RAID 控制器,然后将其添加到 RAID 控制器配置中。操作系统将无法辨别它们的不同。
- 软件 RAID
软件 RAID 在内核块设备代码中实现各种 RAID 级别。它提供最便宜的解决方案,因为不需要昂贵的磁盘控制器卡或热插拔机箱。使用热插拔机箱时,您可以在不关闭系统的情况下删除硬盘驱动器。软件 RAID 也可用于任何由 Linux 内核支持的块存储,如 SATA、SCSI 和 NVMe。随着新 CPU 的速度加快,除非您使用高端存储设备,软件 RAID 通常会优于硬件 RAID。
由于 Linux 内核包含多个设备 (MD) 驱动程序,因此 RAID 解决方案将完全独立于硬件。基于软件的阵列的性能取决于服务器 CPU 的性能和负载。
以下是 Linux 软件 RAID 堆栈的主要功能:
- 多线程设计
- 在不同的 Linux 机器间移动磁盘阵列不需要重新构建数据
- 使用空闲系统资源进行后台阵列重构
- 支持热插拔驱动器
- 自动 CPU 检测以利用某些 CPU 功能,如流传输单一指令多个数据 (SIMD) 支持。
- 自动更正阵列磁盘中的错误扇区。
- 定期检查 RAID 数据,以确保阵列的健康状态。
- 主动监控阵列,在发生重要事件时将电子邮件报警发送到指定的电子邮件地址。
Write-intent 位图通过允许内核准确了解磁盘的哪些部分需要重新同步,而不必在系统崩溃后重新同步整个阵列,可以大大提高了重新同步事件的速度。
注意resync 是一个通过现有 RAID 设备同步数据以达到冗余的过程
- 重新同步检查点,以便如果您在重新同步期间重新启动计算机,则在启动时重新同步会从其停止的地方开始,而不是从头开始
- 安装后更改阵列参数的功能,称为重塑(reshaping)。例如:当有新设备需要添加时,您可以将 4 磁盘 RAID5 阵列增加成 5 磁盘 RAID5 阵列。这种增加操作是实时的,不需要您在新阵列上重新安装。
- 重塑支持更改设备数量、RAID 算法或 RAID 阵列类型的大小,如 RAID4、RAID5、RAID6 或 RAID10。
- 接管支持 RAID 级别转换,比如 RAID0 到 RAID6。
- 集群 MD 是集群的存储解决方案,可为集群提供 RAID1 镜像的冗余。目前,只支持 RAID1。
16.3. 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 也不提供冗余性,并会降低可靠性。如果有任何一个成员驱动器失败,则无法使用整个阵列,数据可能会丢失。该容量是所有成员磁盘的总量。
16.4. 支持的 RAID 转换 复制链接链接已复制到粘贴板!
您可以从一个 RAID 级别转换到另一个 RAID 级别。例如:您可以从 RAID10 转换到 RAID5,但从 RAID10 转换到 RAID0 之间有一个中间步骤,然后再转换到 RAID5。有关更多支持的 RAID 转换的信息,请查看下表:
| RAID 转换级别 | 转换步骤 | 注 |
|---|---|---|
| RAID 级别 0 到 RAID 级别 4 |
| 您需要在 MD 阵列中添加一块磁盘,因为它至少需要 3 块磁盘。 |
| RAID 级别 0 到 RAID 级别 5 |
| 您需要在 MD 阵列中添加一块磁盘,因为它至少需要 3 块磁盘。 |
| RAID 级别 0 到 RAID 级别 10 |
| 您需要在 MD 阵列中添加两块额外的磁盘。 |
| RAID 级别 1 到 RAID 级别 0 |
| |
| RAID 级别 1 到 RAID 级别 5 |
| 您需要在 MD 阵列中添加 3 块额外的磁盘。 |
| RAID 级别 4 到 RAID 级别 0 |
| |
| RAID 级别 4 到 RAID 级别 5 |
| |
| RAID 级别 5 到 RAID 级别 0 |
| |
| RAID 级别 5 到 RAID 级别 1 |
|
使用 |
| RAID 级别 5 到 RAID 级别 4 |
| |
| RAID 级别 5 到 RAID 级别 6 |
| |
| RAID 级别 5 到 RAID 级别 10 |
| 将 RAID 级别 5 转换为 RAID 级别 10 是一个两步骤的转换:
转换到 RAID0 后删除其中一块 RAID5 磁盘。 |
| RAID 级别 6 到 RAID 级别 5 |
| 其中一块 RAID6 磁盘在新的 RAID5 阵列中处于备用状态(用于热备份)。 |
| RAID 级别 10 到 RAID 级别 0 |
| 两块 RAID10 磁盘从新的 RAID0 阵列中删除。 |
只有在使用 ALGORITHM_PARITY_N 布局时,才可以将 RAID5 转换到 RAID0 和 RAID4。
转换 RAID 级别后,使用 mdadm --detail /dev/md0 或 cat /proc/mdstat 命令验证转换。
16.5. RAID 子系统 复制链接链接已复制到粘贴板!
以下子系统组成了 RAID:
- 硬件 RAID 控制器驱动程序
- 硬件 RAID 控制器没有特定的 RAID 子系统。由于它们使用特殊的 RAID 芯片组,因此硬件 RAID 控制器有自己的驱动程序。使用这些驱动程序时,系统会检测 RAID 集作为常规磁盘。
mdraidmdraid子系统被设计为软件 RAID 解决方案。这也是 Red Hat Enterprise Linux 中软件 RAID 的首选解决方案。此子系统使用自己的元数据格式,称为原生 MD 元数据。它还支持其他元数据格式,称为外部元数据。Red Hat Enterprise Linux 10 使用带有外部元数据的
mdraid来访问 Intel Rapid Storage (ISW)或 Intel Matrix Storage Manager (IMSM)集以及存储网络行业关联(SNIA)磁盘驱动器格式(DDF)。mdraid子系统集通过mdadm程序进行配置和控制。
16.6. 在安装过程中创建软件 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 类型,至少需要两个磁盘。
- 您已在 Installation Destination 窗口中选择了 单选按钮,并通过单击 Done 按钮进到 Manual Partitioning 窗口。
- 您创建了挂载点。通过配置挂载点,您可以配置 RAID 设备。
流程
- 在 Manual Partitioning 窗口左面地框中,选所需的分区。
- 点击设备类型下拉菜单并选择 RAID。
- 在 Device(s) 部分点 。此时会打开 Configure Mount Point 对话框。
- 选择您要包含在 RAID 设备中的磁盘,然后点击 关闭对话框。
- 点击文件系统下拉菜单并选择您首选的文件系统类型。
- 点击RAID 级别下拉菜单并选择您需要的 RAID 级别。
- 点击 保存您的更改。
- 点 应用设置并返回到按照概述窗口。
16.7. 在安装的系统中创建软件 RAID 复制链接链接已复制到粘贴板!
您可以使用 mdadm 工具在现有系统上创建一个软件独立磁盘冗余阵列(RAID)。
先决条件
-
已安装
mdadm软件包。 - 您已在系统上创建了两个或多个分区。具体说明请参阅 使用 parted 创建分区。
流程
创建两个块设备的 RAID,如 /dev/sda1 和 /dev/sdc1 :
# mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sda1 /dev/sdc1 mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.level_value 选项定义 RAID 级别。
可选:检查 RAID 的状态:
# mdadm --detail /dev/md0 /dev/md0: Version : 1.2 Creation Time : Thu Oct 13 15:17:39 2022 Raid Level : raid0 Array Size : 18649600 (17.79 GiB 19.10 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Thu Oct 13 15:17:39 2022 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 [...]可选:观察 RAID 中每个设备的详细信息:
# mdadm --examine /dev/sda1 /dev/sdc1 /dev/sda1: Magic : a92b4efc Version : 1.2 Feature Map : 0x1000 Array UUID : 77ddfb0a:41529b0e:f2c5cde1:1d72ce2c Name : 0 Creation Time : Thu Oct 13 15:17:39 2022 Raid Level : raid0 Raid Devices : 2 [...]在 RAID 驱动器中创建文件系统:
# mkfs -t xfs /dev/md0使用您选择格式化驱动器的文件系统替换 xfs。
为 RAID 驱动器创建挂载点并挂载它:
# mkdir /mnt/raid1 # mount /dev/md0 /mnt/raid1使用挂载点替换 /mnt/raid1。
如果您希望 RHEL 在系统引导时自动挂载
md0RAID 设备,请将设备的条目添加到/etc/fstab 文件中:/dev/md0 /mnt/raid1 xfs defaults 0 0
16.8. 在 web 控制台中创建 RAID 复制链接链接已复制到粘贴板!
在 RHEL 10 web 控制台中配置 RAID。
先决条件
您已安装了 RHEL 10 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
-
您已在系统上安装了
cockpit-storaged软件包。 - 您已连接了物理磁盘,且对系统可见。
流程
- 登录到 RHEL 10 web 控制台。
- 在面板中,单击 Storage。
- 在 Storage 表中,单击菜单按钮,然后选择 Create MDRAID device。
- 在 Create RAID Device 字段中,为新 RAID 输入一个名称。
- 在 RAID 级别下拉列表中,选择您要使用的 RAID 级别。
在 Chunk Size 下拉列表中,从可用选项列表中选择大小。
Chunk Size 值指定用于写数据的每个块有多大。例如,如果块大小为 512 KiB,系统将把第一个 512 KiB 写入第一个磁盘中,第二个 512 KiB 将被写入第二个磁盘中,第三个块将被写入第三个磁盘中。如果您的 RAID 中有三个磁盘,则第四个 512 KiB 被再次写入第一个磁盘中。
- 选择您要用于 RAID 的磁盘。
- 点 Create。
验证
- 进到 Storage 部分,并在 RAID devices 框中选中您可以看到的新 RAID。
16.9. 在 web 控制台中格式化 RAID 复制链接链接已复制到粘贴板!
您可以在 RHEL 10 web 控制台中格式化并挂载软件 RAID 设备。
根据卷大小以及选择格式化选项,格式化可能需要几分钟。
先决条件
您已安装了 RHEL 10 web 控制台。
具体说明请参阅安装并启用 Web 控制台。
-
您已安装了
cockpit-storaged软件包。 - 您已连接了物理磁盘,且对系统可见。
- 您已创建了 RAID。
流程
- 登录到 RHEL 10 web 控制台。
- 在面板中,单击 Storage。
- 在 Storage 表中,点您要格式化的 RAID 设备的菜单按钮 。
- 从下拉菜单中选择 。
- 在 Format 字段中输入名称。
- 在 Mount Point 字段中添加挂载路径。
- 从 Type 下拉列表中选择文件系统的类型。
- 可选:检查 Overwrite existing data with zeros 选项,如果磁盘包含任何敏感数据,并且您要覆盖它们。否则 RHEL web 控制台只重写磁盘头。
- 在 Encryption 下拉菜单中选择加密类型。如果您不想加密卷,请选择 No encryption。
- 在 At boot 下拉菜单中选择您要何时挂载卷。
在 Mount options 部分中:
- 如果要将卷挂载为只读逻辑卷,请选择 Mount read only 复选框。
- 如果要更改默认挂载选项,请选择 Custom mount options 复选框,并添加挂载选项。
格式化 RAID 分区:
- 如果要格式化并挂载分区,请点 按钮。
- 如果您只想格式化分区,请点 按钮。
验证
- 格式化成功完成后,您可以在 Storage 页的 Storage 表中看到格式化逻辑卷的详情。
16.10. RAID 服务 复制链接链接已复制到粘贴板!
以下组件一起工作,来通过使用 mdadm 和 systemd 在系统上执行自动 RAID 一致性检查:
config.file-
/etc/sysconfig/raid-check文件包含 RAID 检查行为的配置说明。 raid-check.timer-
这是一个 systemd 计时器,它决定
raid-check服务何时运行。您可以根据需要配置它的时间表。 raid-check.service-
这是在被
raid-check timer触发时运行的一个 systemdraid-check服务。它执行/usr/sbin/raid-check脚本。 raid-check 脚本-
raid-check.service执行raid-check脚本。它检查数据不匹配数,并尝试修复任何发现的坏块。如果检测到不匹配,它会记录一条警告,RAID1 和 RAID10 除外,因为不匹配计数不能正常工作。但是,它仍然对 RAID 和 RAID10 执行检查操作,以识别并修复坏块。
16.11. 使用 Web 控制台在 RAID 上创建分区表 复制链接链接已复制到粘贴板!
在 RHEL 10 界面中创建的新软件 RAID 设备上格式化带有分区表的 RAID。
先决条件
您已安装了 RHEL 10 web 控制台。
具体说明请参阅安装并启用 Web 控制台。
-
您已安装了
cockpit-storaged软件包。 - 您已连接了物理磁盘,且对系统可见。
- 您已创建了 RAID。
流程
- 登录到 RHEL 10 web 控制台。
- 在面板中,单击 Storage。
- 在 Storage 表中,点您要在其上创建分区表的 RAID 设备。
- 点 MDRAID device 部分中的菜单按钮 。
- 从下拉菜单中选择 。
在 Initialize disk 对话框中选择以下内容:
Partitioning :
- 如果分区应该与所有系统和设备兼容,请选择 MBR。
- 如果分区应该与现代系统兼容,且硬盘必须大于 2 TB,请选择 GPT。
- 如果您不需要进行分区,请选择 No partitioning。
Overwrite :
- 如果磁盘包含任何敏感数据并且您想覆盖它们,请检查 Overwrite existing data with zeros 选项。否则 RHEL web 控制台只重写磁盘头。
- 单击 。
16.12. 使用 Web 控制台在 RAID 上创建分区 复制链接链接已复制到粘贴板!
在现有分区表中创建一个分区。您可以在创建分区后创建更多的分区。
先决条件
您已安装了 RHEL 10 web 控制台。
具体说明请参阅安装并启用 Web 控制台。
-
cockpit-storaged软件包已安装在您的系统上。 - RAID 上的分区表已创建。
流程
- 登录到 RHEL 10 web 控制台。
- 在面板中,单击 Storage。
- 点击您要在其上创建分区的 RAID 设备。
- 在 RAID 设备页面中,滚动到 GPT partitions 部分,然后点击菜单按钮[⋮]。
- 点 ,然后在 Create partition 字段中输入文件系统的名称。不要在名称中使用空格。
- 在 Mount Point 字段中输入挂载路径。
- 在 Type 下拉列表中选择文件系统的类型。
- 在 Size 滑块中设置分区的大小。
- 可选:如果磁盘包含任何敏感数据并且您要覆盖它们,请选择 Overwrite existing data with zeros。否则 RHEL web 控制台只重写磁盘头。
- 在 Encryption 下拉菜单中选择加密类型。如果您不想加密卷,请选择 No encryption。
- 在 At boot 下拉菜单中选择您要何时挂载卷。
在 Mount options 部分中:
- 如果要将卷挂载为只读逻辑卷,请选择 Mount read only 复选框。
- 如果要更改默认挂载选项,请选择 Custom mount options 复选框,并添加挂载选项。
创建分区:
- 如果要创建并挂载分区,请点 按钮。
如果您只想创建分区,点 按钮。
根据卷大小以及选择格式化选项,格式化可能需要几分钟。
验证
- 您可以在主存储页的 Storage 表中看到格式化的逻辑卷的详情。
16.13. 使用 Web 控制台在 RAID 上创建卷组 复制链接链接已复制到粘贴板!
从软件 RAID 构建卷组。
先决条件
您已安装了 RHEL 10 web 控制台。
具体说明请参阅安装并启用 Web 控制台。
-
您已安装了
cockpit-storaged软件包。 - 您有一个没有格式化且没有挂载的 RAID 设备。
流程
- 登录到 RHEL 10 web 控制台。
- 在面板中,单击 Storage。
- 在 Storage 表中,点菜单按钮 [⋮] 并选择 Create LVM2 volume group。
- 在 Create LVM2 volume group 字段中,为输入新卷组的名称。
在 Disks 列表中选择一个 RAID 设备。
如果您在列表中没有看到 RAID,从系统中卸载 RAID。RAID 设备必须没有被 RHEL 10 系统使用 。
- 点 。
16.14. 使用 storage RHEL 系统角色配置 RAID 卷 复制链接链接已复制到粘贴板!
使用 storage 系统角色,您可以使用 Red Hat Ansible Automation Platform 和 Ansible-Core 在 RHEL 上配置一个 RAID 卷。创建一个带参数的 Ansible Playbook,以配置 RAID 卷来满足您的要求。
设备名称在某些情况下可能会改变,例如:当您在系统中添加新磁盘时。因此,为了避免数据丢失,请在 playbook 中使用持久性命名属性。有关持久命名属性的更多信息,请参阅 持久命名属性。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:--- - name: Manage local storage hosts: managed-node-01.example.com tasks: - name: Create a RAID on sdd, sde, sdf, and sdg ansible.builtin.include_role: name: redhat.rhel_system_roles.storage vars: storage_safe_mode: false storage_volumes: - name: data type: raid disks: [sdd, sde, sdf, sdg] raid_level: raid0 raid_chunk_size: 32 KiB mount_point: /mnt/data state: present有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。验证 playbook 语法:
$ ansible-playbook --syntax-check ~/playbook.yml请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
$ ansible-playbook ~/playbook.yml
验证
验证阵列是否被正确创建:
# ansible managed-node-01.example.com -m command -a 'mdadm --detail /dev/md/data'
16.15. 扩展 RAID 复制链接链接已复制到粘贴板!
您可以使用 mdadm 工具的 --grow 选项扩展 RAID。
先决条件
- 有足够的磁盘空间。
-
parted软件包已经安装。
流程
- 扩展 RAID 分区。如需更多信息,请参阅使用 parted 重新定义分区。
将 RAID 扩展到最大分区容量:
# mdadm --grow --size=max /dev/md0要设置特定大小,设置
--size参数的值(单位为 kB),如--size=524228。增加文件系统的大小。例如,如果卷使用 XFS 并挂载到 /mnt/,请输入:
# xfs_growfs /mnt/
16.16. 缩小 RAID 复制链接链接已复制到粘贴板!
您可以使用 mdadm 工具的 --grow 选项缩小 RAID。
XFS 文件系统不支持缩小。
先决条件
-
parted软件包已经安装。
流程
- 缩小文件系统。如需更多信息,请参阅管理文件系统。
减少 RAID 的大小,例如 512 MB :
# mdadm --grow --size=524228 /dev/md0写
--size参数(单位为 kB)。- 将分区缩小到您需要的大小。
16.17. 安装后将根磁盘转换为 RAID1 复制链接链接已复制到粘贴板!
您可在安装 Red Hat Enterprise Linux 10 后,将非 RAID root 磁盘转换为 RAID1 镜像。
在 PowerPC (PPC) 构架中,执行以下步骤:
先决条件
完成红帽知识库解决方案 在安装 Red Hat Enterprise Linux 7 后如何将 root 磁盘转换为 RAID1 ? 中的步骤。
注意执行
grub2-install /dev/sda命令无法在 PowerPC 机器上工作并返回错误,但系统会按预期引导。
流程
将 PowerPC Reference Platform (PReP) 引导分区从 /dev/sda1 复制到 /dev/sdb1 :
# dd if=/dev/sda1 of=/dev/sdb1在两个磁盘的第一个分区中更新
prep和boot标志:$ parted /dev/sda set 1 prep on $ parted /dev/sda set 1 boot on $ parted /dev/sdb set 1 prep on $ parted /dev/sdb set 1 boot on
16.18. 创建高级 RAID 设备 复制链接链接已复制到粘贴板!
在某些情况下,您可能想要在安装完成前创建的阵列上安装操作系统。通常,这意味着在复杂的 RAID 设备中设置 /boot 或 root 文件系统阵列。在这种情况下,您可能需要使用 Anaconda 安装程序不支持的数组选项。要临时解决这个问题,请执行以下步骤。
安装程序的有限 Rescue Mode 不包括 man page。mdadm (8) 和 md (4) 手册页包含创建自定义 RAID 阵列的有用信息,在整个临时解决方案中可能都需要这些信息。
流程
- 插入安装磁盘。
-
在初始启动过程中,选择 Rescue Mode 而不是 Install 或 Upgrade。当系统完全引导至
Rescue mode时,您可以看到命令行终端。 在这个终端中执行以下命令:
-
使用
parted命令在目标硬盘上创建 RAID 分区。 -
使用这些分区中的
mdadm命令,使用任何以及所有可用的设置和选项来手动创建 raid 阵列。
-
使用
- 可选:创建阵列后,在阵列上创建文件系统。
- 重新启动计算机,再选择要安装的 Install 或 Upgrade。当 Anaconda 安装程序搜索系统中的磁盘时,它会找到预先存在的 RAID 设备。
- 当问到如何使用系统中的磁盘时,请选择 Custom Layout ,并点 。在设备列表中,会列出预先存在的 MD RAID 设备。
- 选择一个 RAID 设备并点 。
- 如果之前没有创建挂载点,则配置其挂载点以及应使用的文件系统类型,然后点 。Anaconda 安装至此已存在的 RAID 设备,保留在 Rescue Mode 中创建时选择的自定义选项。
16.19. 设置用于监控 RAID 的电子邮件通知 复制链接链接已复制到粘贴板!
您可以使用 mdadm 工具设置电子邮件警报来监控 RAID。当 MAILADDR 变量设置为所需的电子邮件地址后,监控系统会将警报发送到添加的电子邮件地址。
先决条件
-
已安装
mdadm软件包。 - 设定邮件服务。
流程
通过扫描 RAID 详情来创建
/etc/mdadm.conf配置文件来监控阵列:# mdadm --detail --scan >> /etc/mdadm.conf请注意,
ARRAY和MAILADDR是强制的变量。使用您选择的文本编辑器打开
/etc/mdadm.conf配置文件,并使用通知的电子邮件地址添加MAILADDR变量。例如,添加新行:MAILADDR example@example.com在这里,example@example.com 是从阵列监控接收警报的电子邮件地址。
-
保存
/etc/mdadm.conf文件中的更改并关闭它。
16.20. 替换 RAID 中失败的磁盘 复制链接链接已复制到粘贴板!
您可以使用剩余的磁盘从失败的磁盘重建数据。RAID 级别和磁盘总数决定了成功重建数据所需的最小剩余磁盘量。
在此过程中,/dev/md0 RAID 包含四个磁盘。/dev/sdd 磁盘失败,您需要将它替换为 /dev/sdf 磁盘。
先决条件
- 用于替换的备用磁盘。
-
已安装
mdadm软件包。
流程
检查失败的磁盘:
查看内核日志:
# journalctl -k -f搜索类似如下的消息:
md/raid:md0: Disk failure on sdd, disabling device. md/raid:md0: Operation continuing on 3 devices.-
按 Ctrl+C 键退出
journalctl程序。
将失败的磁盘标记为故障:
# mdadm --manage /dev/md0 --fail /dev/sdd可选:检查失败的磁盘是否已正确标记:
# mdadm --detail /dev/md0输出末尾是 /dev/md0 RAID 中的磁盘列表,其中磁盘 /dev/sdd 具有 faulty 状态 :
Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc - 0 0 2 removed 3 8 64 3 active sync /dev/sde 2 8 48 - faulty /dev/sdd从 RAID 中删除失败的磁盘:
# mdadm --manage /dev/md0 --remove /dev/sdd警告如果您的 RAID 无法与另一个磁盘失败,在新磁盘有 active sync 状态前不会删除任何磁盘。您可以使用
watch cat /proc/mdstat命令监控进度。在 RAID 中添加新磁盘:
# mdadm --manage /dev/md0 --add /dev/sdf/dev/md0 RAID 现在包括新磁盘 /dev/sdf,
mdadm服务将自动从其他磁盘将数据复制到其中。
验证
检查阵列的详情:
# mdadm --detail /dev/md0如果这个命令显示 /dev/md0 RAID 中的磁盘列表,其中新磁盘在输出末尾具有 spare rebuilding 状态,则数据仍会从其他磁盘复制到其中:
Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc 4 8 80 2 spare rebuilding /dev/sdf 3 8 64 3 active sync /dev/sde数据复制完成后,新磁盘会处于 active sync 状态。
检查同步的进度:
# cat /proc/mdstat Personalities : [raid4] [raid5] [raid6] md0 : active raid5 sdf[5] sde[4] sdc[1] sdb[0] 6282240 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/3] [UU_U] [==============>......] recovery = 72.0% (1509820/2094080) finish=0.0min speed=215688K/sec unused devices: <none>
16.21. 修复 RAID 磁盘 复制链接链接已复制到粘贴板!
您可以使用 repair 选项修复 RAID 阵列中的磁盘。
先决条件
-
已安装
mdadm软件包。
流程
检查阵列失败的磁盘行为:
# echo check > /sys/block/md0/md/sync_action这会检查数组和
/sys/block/md0/md/sync_action文件显示 sync 操作。-
使用您选择的文本编辑器打开
/sys/block/md0/md/sync_action文件,并查看是否有任何有关磁盘同步失败的消息。 -
查看
/sys/block/md0/md/mismatch_cnt文件。如果mismatch_cnt参数不是0,这意味着 RAID 磁盘需要修复。 修复阵列中的磁盘:
# echo repair > /sys/block/md0/md/sync_action这会修复阵列中的磁盘,并将结果写入
/sys/block/md0/md/sync_action文件。查看同步进度:
# cat /sys/block/md0/md/sync_action repair # cat /proc/mdstat Personalities : [raid0] [raid6] [raid5] [raid4] [raid1] md0 : active raid1 sdg[1] dm-3[0] 511040 blocks super 1.2 [2/2] [UU] unused devices: <none>
第 17 章 使用 LUKS 加密块设备 复制链接链接已复制到粘贴板!
您可以使用磁盘加密来保护块设备上的数据。要访问设备的解密内容,请输入密码短语或密钥作为身份验证。这对移动计算机和可移动介质非常重要,因为它有助于保护设备的内容,即使它已从系统上物理移除。LUKS 格式是 Red Hat Enterprise Linux 中块设备加密的默认实现。
17.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 个密钥插槽。
- 需要文件级加密的应用程序。
17.2. RHEL 中的 LUKS 版本 复制链接链接已复制到粘贴板!
在 Red Hat Enterprise Linux 中,LUKS 加密的默认格式为 LUKS2。旧的 LUKS1 格式仍被完全支持,并作为与早期 Red Hat Enterprise Linux 版本兼容的格式提供。与 LUKS1 重新加密相比,LUKS2 重新加密被视为更强大且更安全。
LUKS2 格式允许各种部分的未来更新,而无需修改二进制结构。它在内部对元数据使用 JSON 文本格式,提供元数据冗余,检测元数据损坏,并从元数据副本自动修复。
不要在只支持 LUKS1 的系统中使用 LUKS2。
从 Red Hat Enterprise Linux 9.2 开始,您可以对两个 LUKS 版本使用 cryptsetup reencrypt 命令来加密磁盘。
在线重新加密
LUKS2 格式支持在设备正在使用时重新加密加密设备。例如:您不必卸载该设备中的文件系统来执行以下任务:
- 更改卷密钥
更改加密算法
加密未加密的设备时,您仍然必须卸载文件系统。您可以在简短初始化加密后重新挂载文件系统。
LUKS1 格式不支持在线重新加密。
转换
在某些情况下,您可以将 LUKS1 转换为 LUKS2。在以下情况下无法进行转换:
-
LUKS1 设备被标记为被基于策略的解密(PBD) Clevis 解决方案使用。当检测到某些
luksmeta元数据时,cryptsetup工具不会转换设备。 - 设备正在活跃。在任何转换前,设备必须处于不活跃状态。
17.3. LUKS2 重新加密过程中数据保护选项 复制链接链接已复制到粘贴板!
LUKS2 提供了几个选项,在重新加密过程中优先选择性能或数据保护。它为 resilience 选项提供了以下模式,您可以使用 cryptsetup reencrypt --resilience resilience-mode /dev/<device_ID> 命令选择任何一种模式,其中您可以将 <device_ID> 替换为您的设备的 ID。
checksum默认模式。它在数据保护和性能之间保持平衡。
这个模式将扇区的校验和存储在重新加密的区域,恢复过程可以检测 LUKS2 重新加密的扇区。模式要求块设备扇区写入具有“原子”性。
journal- 最安全的模式,但也是最慢的模式。由于此模式在二进制区域中记录重新加密区域,因此 LUKS2 将数据写入两次。
none-
none模式优先选择性能,不提供数据保护。它只保护数据免受安全进程终止的影响,如SIGTERM信号或用户按了 Ctrl+C 键。任何意外的系统故障或应用程序失败都可能会导致数据损坏。
如果 LUKS2 重新加密进程意外被强行终止,LUKU2 可通过以下方法执行恢复:
- 自动
在下一个 LUKS2 设备打开操作过程中,执行以下操作之一会触发自动恢复操作:
-
执行
cryptsetup open命令。 -
使用
systemd-cryptsetup命令附加设备。
-
执行
- 手动
-
通过对 LUKS2 设备使用
cryptsetup repair /dev/<device_ID>命令。
17.4. 使用 LUKS2 加密块设备上的现有数据 复制链接链接已复制到粘贴板!
您可以使用 LUKS2 格式在尚未加密的设备上加密现有数据。新的 LUKS 标头保存在设备的标头中。
先决条件
- 块设备有一个文件系统。
已备份了数据。
警告由于硬件、内核或人为故障,您可能会在加密过程中丢失数据。在开始加密数据之前,请确保您有可靠的备份。
流程
卸载您要加密的设备上的所有文件系统,例如:
# umount /dev/mapper/vg00-lv00为存储 LUKS 标头腾出空间。使用以下适合您场景的选项之一:
如果是加密逻辑卷,您可以扩展逻辑卷而无需调整文件系统的大小。例如:
# lvextend -L+32M /dev/mapper/vg00-lv00-
使用分区管理工具(如
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.挂载该设备:
# mount /dev/mapper/lv00_encrypted /mnt/lv00_encrypted向
/etc/crypttab文件添加持久映射的一个条目:查找
luksUUID:# cryptsetup luksUUID /dev/mapper/vg00-lv00 a52e2cc9-a5be-47b8-a95d-6bdf4f2d9325在您选择的文本编辑器中打开
/etc/crypttab,并在此文件中添加设备:$ vi /etc/crypttab lv00_encrypted UUID=a52e2cc9-a5be-47b8-a95d-6bdf4f2d9325 none将 a52e2cc9-a5be-47b8-a95d-6bdf4f2d9325 替换为您设备的
luksUUID。使用
dracut刷新 initramfs:$ dracut -f --regenerate-all
-
如果
/etc/fstab文件中存在这个设备的条目,请确定它使用文件系统 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 luksDump /dev/mapper/vg00-lv00 LUKS header information Version: 2 Epoch: 4 Metadata area: 16384 [bytes] Keyslots area: 16744448 [bytes] UUID: a52e2cc9-a5be-47b8-a95d-6bdf4f2d9325 Label: (no label) Subsystem: (no subsystem) Flags: (no flags) Data segments: 0: crypt offset: 33554432 [bytes] length: (whole device) cipher: aes-xts-plain64 [...]查看加密的空白块设备的状态:
# cryptsetup status lv00_encrypted /dev/mapper/lv00_encrypted is active and is in use. type: LUKS2 cipher: aes-xts-plain64 keysize: 512 bits key location: keyring device: /dev/mapper/vg00-lv00
17.5. 使用带有分离标头的 LUKS2 在块设备上加密现有数据 复制链接链接已复制到粘贴板!
您可以加密块设备上的现有数据,而无需为存储 LUKS 标头创建可用空间。标头存储在分离的位置,它也充当额外的安全层。该流程使用 LUKS2 加密格式。
先决条件
- 块设备有一个文件系统。
您的数据已备份。
警告由于硬件、内核或人为故障,您可能会在加密过程中丢失数据。在开始加密数据之前,请确保您有可靠的备份。
流程
卸载设备上的所有文件系统,例如:
# umount /dev/<nvme0n1p1>将
<nvme0n1p1>替换为与您要卸载的分区对应的设备标识符。初始化加密:
# cryptsetup reencrypt --encrypt --init-only --header </home/header> /dev/<nvme0n1p1> <nvme_encrypted> WARNING! ======== Header file does not exist, do you want to create it? Are you sure? (Type 'yes' in capital letters): YES Enter passphrase for </home/header>: Verify passphrase: /dev/mapper/<nvme_encrypted> is now active and ready for online encryption.替换:
-
</home/header>替换为带有分离的 LUKS 头的文件的路径。分离的 LUKS 标头必须可以访问,以便稍后解锁加密设备。 -
<nvme_encrypted>替换为加密后创建的设备映射器的名称。
-
挂载该设备:
# mount /dev/mapper/<nvme_encrypted> /mnt/<nvme_encrypted>向
/etc/crypttab文件添加持久映射的一个条目:# <nvme_encrypted> /dev/disk/by-id/<nvme-partition-id> none header=</home/header>将
<nvme-partition-id>替换为 NVMe 分区的标识符。使用
dracut重新生成 initramfs:# dracut -f --regenerate-all -v向
/etc/fstab文件中添加一个永久挂载条目:查找活跃 LUKS 块设备的文件系统 UUID:
$ blkid -p /dev/mapper/<nvme_encrypted> /dev/mapper/<nvme_encrypted>: UUID="37bc2492-d8fa-4969-9d9b-bb64d3685aa9" BLOCK_SIZE="4096" TYPE="xfs" USAGE="filesystem"在文本编辑器中打开
/etc/fstab,并在此文件中添加一个设备,例如:$ vi /etc/fstab UUID=<file_system_UUID> /home auto rw,user,auto 0将
<file_system_UUID>替换为您的文件系统的 UUID。
恢复在线加密:
# 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
验证
验证使用带有分离标头的 LUKS2 块设备上的现有数据是否已加密:
# cryptsetup luksDump </home/header> LUKS header information Version: 2 Epoch: 88 Metadata area: 16384 [bytes] Keyslots area: 16744448 [bytes] UUID: c4f5d274-f4c0-41e3-ac36-22a917ab0386 Label: (no label) Subsystem: (no subsystem) Flags: (no flags) Data segments: 0: crypt offset: 0 [bytes] length: (whole device) cipher: aes-xts-plain64 sector: 512 [bytes] [...]查看加密的空白块设备的状态:
# cryptsetup status <nvme_encrypted> --header </home/header> /dev/mapper/<nvme_encrypted> is active and is in use. type: LUKS2 cipher: aes-xts-plain64 keysize: 512 bits key location: keyring device: /dev/<nvme0n1p1> sector size: 512 offset: 0 sectors size: 10485760 sectors mode: read/write
17.6. 使用 LUKS2 加密空白块设备 复制链接链接已复制到粘贴板!
您可以加密空白块设备,您可以使用 LUKS2 格式将其用于加密存储。
先决条件
-
空白块设备。您可以使用
lsblk等命令来查找该设备上是否没有实际的数据,例如,文件系统。
流程
将分区设置为加密的 LUKS 分区:
# cryptsetup luksFormat /dev/nvme0n1p1 WARNING! ======== This will overwrite data on /dev/nvme0n1p1 irrevocably. Are you sure? (Type 'yes' in capital letters): YES Enter passphrase for /dev/nvme0n1p1: Verify passphrase:打开加密的 LUKS 分区:
# cryptsetup open /dev/nvme0n1p1 nvme0n1p1_encrypted Enter passphrase for /dev/nvme0n1p1:这会解锁分区,并使用设备映射器将其映射到新设备。要不覆盖加密的数据,这个命令会警告内核,该设备是一个加密设备,并使用
/dev/mapper/device_mapped_name路径通过 LUKS 解决了。创建一个文件系统来将加密的数据写入分区,该分区必须可通过设备映射名称访问:
# mkfs -t ext4 /dev/mapper/nvme0n1p1_encrypted挂载该设备:
# mount /dev/mapper/nvme0n1p1_encrypted mount-point
验证
验证空白块设备是否已加密:
# cryptsetup luksDump /dev/nvme0n1p1 LUKS header information Version: 2 Epoch: 3 Metadata area: 16384 [bytes] Keyslots area: 16744448 [bytes] UUID: 34ce4870-ffdf-467c-9a9e-345a53ed8a25 Label: (no label) Subsystem: (no subsystem) Flags: (no flags) Data segments: 0: crypt offset: 16777216 [bytes] length: (whole device) cipher: aes-xts-plain64 sector: 512 [bytes] [...]查看加密的空白块设备的状态:
# cryptsetup status nvme0n1p1_encrypted /dev/mapper/nvme0n1p1_encrypted is active and is in use. type: LUKS2 cipher: aes-xts-plain64 keysize: 512 bits key location: keyring device: /dev/nvme0n1p1 sector size: 512 offset: 32768 sectors size: 20938752 sectors mode: read/write
17.7. 在 web 控制台中配置 LUKS 密码短语 复制链接链接已复制到粘贴板!
如果要在系统中的现有逻辑卷中添加加密,则只能通过格式化卷进行。
先决条件
您已安装了 RHEL 10 web 控制台。
具体说明请参阅安装并启用 Web 控制台。
-
cockpit-storaged软件包已安装在您的系统上。 - 在没有加密的情况下可用的现有逻辑卷.
流程
- 登录到 RHEL 10 web 控制台。
- 在面板中,单击 Storage。
- 在 Storage 表中,点您要加密的存储设备的菜单按钮 ,然后单击 。
- 在 Encryption field 中,选择加密规格 LUKS1 或 LUKS2。
- 设置并确认您的新密码短语。
- 可选:修改进一步的加密选项。
- 完成格式化设置。
- 点 Format。
17.8. 使用命令行更改 LUKS 密码短语 复制链接链接已复制到粘贴板!
使用命令行更改加密磁盘或分区上的 LUKS 密码短语。使用 cryptsetup 工具,您可以使用各种配置选项和功能控制加密过程,并将其集成到现有自动化工作流中。
先决条件
-
您有
root权限或使用sudo输入管理命令的权限。
流程
更改 LUKS 加密设备上现有的密码短语:
# cryptsetup luksChangeKey /dev/<device_ID>将
<device_ID>替换为设备标识符,例如sda。如果您配置了多个密钥插槽,您可以指定要使用的插槽:
# cryptsetup luksChangeKey /dev/<device_ID> --key-slot <slot_number>将
<slot_number>替换为您要修改的密钥插槽的编号。插入当前的密码短语和新密码短语:
Enter passphrase to be changed: Enter new passphrase: Verify passphrase:验证新密码短语:
# cryptsetup --verbose open --test-passphrase /dev/<device_ID>
验证
验证新密码短语是否可以解锁设备:
Enter passphrase for /dev/<device_ID>: Key slot <slot_number> unlocked. Command successful.
17.9. 在 web 控制台中更改 LUKS 密码短语 复制链接链接已复制到粘贴板!
在 web 控制台中的加密磁盘或分区上更改 LUKS 密码短语。
先决条件
您已安装了 RHEL 10 web 控制台。
具体说明请参阅安装并启用 Web 控制台。
-
cockpit-storaged软件包已安装在您的系统上。
流程
- 登录到 RHEL 10 web 控制台。
- 在面板中,单击 Storage。
- 在 Storage 表中,选择带有加密数据的磁盘。
- 在磁盘页面中,滚动到 Keys 部分,然后点 edit 按钮。
在更改密码短语对话框中:
- 输入您当前的密码短语。
- 输入您的新密码短语。
- 确认您的新密码短语。
- 点击 Save。
17.10. 使用 storage RHEL 系统角色创建 LUKS2 加密的卷 复制链接链接已复制到粘贴板!
您可以使用 storage 角色,通过运行 Ansible Playbook 来创建和配置使用 LUKS 加密的卷。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
将敏感变量存储在加密的文件中:
创建 vault :
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:luks_password: <password>- 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:--- - name: Manage local storage hosts: managed-node-01.example.com vars_files: - ~/vault.yml tasks: - name: Create and configure a volume encrypted with LUKS ansible.builtin.include_role: name: redhat.rhel_system_roles.storage vars: storage_volumes: - name: barefs type: disk disks: - sdb fs_type: xfs fs_label: <label> mount_point: /mnt/data encryption: true encryption_password: "{{ luks_password }}" encryption_cipher: <cipher> encryption_key_size: <key_size> encryption_luks_version: luks2示例 playbook 中指定的设置包括如下:
encryption_cipher: <cipher>-
指定 LUKS 密码。可能的值有:
twofish-xts-plain64,serpent-xts-plain64和aes-xts-plain64(默认)。 encryption_key_size: <key_size>-
指定 LUKS 密钥大小。默认值为
512位。 encryption_luks_version: luks2-
指定 LUKS 版本。默认为
luks2。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。验证 playbook 语法:
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
$ ansible-playbook --ask-vault-pass ~/playbook.yml
验证
验证创建的 LUKS 加密的卷:
# ansible managed-node-01.example.com -m command -a 'cryptsetup luksDump /dev/sdb' LUKS header information Version: 2 Epoch: 3 Metadata area: 16384 [bytes] Keyslots area: 16744448 [bytes] UUID: bdf6463f-6b3f-4e55-a0a6-1a66f0152a46 Label: (no label) Subsystem: (no subsystem) Flags: (no flags) Data segments: 0: crypt offset: 16777216 [bytes] length: (whole device) cipher: aes-cbc-essiv:sha256 sector: 512 [bytes] Keyslots: 0: luks2 Key: 256 bits Priority: normal Cipher: aes-cbc-essiv:sha256 Cipher key: 256 bits
第 18 章 使用 NVDIMM 持久性内存存储 复制链接链接已复制到粘贴板!
您可以在连接到您的系统的非线性内存模块 (NVDIMM) 设备上启用和管理各种存储类型。
18.1. NVDIMM 持久内存技术 复制链接链接已复制到粘贴板!
非易失性双内存模块 (NVDIMM) 持久内存(也称为存储类内存或 pmem)是内存和存储的组合。
NVDIMM 将存储的持久性与低访问延迟和动态 RAM (DRAM) 的高带宽合并。以下是使用 NVDIMM 的其他优点:
- NVDIMM 存储是字节地址的,这意味着可以使用 CPU 负载和存储指令来访问。除了访问传统的基于块的存储所需的 read() 和 write() 系统调用外,NVDIMM 还支持直接加载和存储编程模型。
- NVDIMM 的性能特征与具有非常低访问延迟的 DRAM 类似,通常以十到百纳秒为单位。
- 当电源关闭时,保存在 NVDIMM 中的数据会被保留,类似于持久性内存。
- 通过直接访问 (DAX) 技术,无需通过系统页面缓存,即可直接到内存映射存储。这样便可为其他目的释放 DRAM。
在以下用例中 NVDIMM 很有用,比如:
- 数据库
- NVDIMM 减少的存储访问延迟可提高数据库性能。
- 快速重启
快速重启也被称为热缓存效果。例如:文件服务器在启动后没有在内存中的文件内容。客户端连接和读取或者写入数据时,会在页面缓存中缓存这些数据。最后,缓存包括大多数热数据。重启后,该系统必须在传统存储上再次启动该进程。
使用 NVDIMM 时,如果应用程序被正确设计,应用程序可能会在重启后保留 warm 缓存。在本例中,不会涉及页面缓存:应用程序会直接在持久内存中缓存数据。
- 快速写缓存
- 在数据被存入持久介质前,文件服务器通常不会确认客户端的写入请求。使用 NVDIMM 作为快速写入缓存可让文件服务器快速确认写入请求,因为会较低延迟。
18.2. NVDIMM 交集和地区 复制链接链接已复制到粘贴板!
非易失性双内存模块 (NVDIMM) 设备支持分组到交集区域。
NVDIMM 设备可以像常规动态 RAM (DRAM) 一样分组为交集。interleave 集与跨多个 DIMM 的 RAID 0 级别(条带)配置类似。Interleave 集也称为区域(region)。
它有以下优点:
- 当 NVDIMM 设备被配置为 interleave 集时,会提高性能。
- 交集可以将多个较小的 NVDIMM 设备组合成一个更大的逻辑设备。
NVDIMM 交集是在系统 BIOS 或 UEFI 固件中配置的。Red Hat Enterprise Linux 为每个交集创建一个区域设备。
18.3. NVDIMM 命名空间 复制链接链接已复制到粘贴板!
根据标签区域的大小,非易失性双内存模块 (NVDIMM) 区域可以划分为一个或多个命名空间。使用命名空间,您可以根据命名空间的访问模式(如 fsdax、devdax 和 raw),使用不同的方法访问设备。如需更多信息,请参阅 NVDIMM 访问模式。
有些 NVDIMM 设备不支持区域中的多个命名空间:
- 如果您的 NVDIMM 设备支持标签,您可以将区域重新划分到命名空间。
- 如果您的 NVDIMM 设备不支持标签,则区域只能包含单个命名空间。在这种情况下,Red Hat Enterprise Linux 会创建一个覆盖整个区域的默认命名空间。
18.4. NVDIMM 访问模式 复制链接链接已复制到粘贴板!
您可以配置 Non-Volatile Dual In-line Memory Modules (NVDIMM) 命名空间,以使用以下模式之一:
devdax或设备直接访问 (DAX)使用
devdax时,NVDIMM 设备支持直接访问编程,如存储网络行业关联 (SNIA) 非易失性内存(NVM) 编程模型规格中所述。在这个模式中,I/O 绕过内核的存储堆栈。因此无法使用设备映射器驱动程序。设备 DAX 通过使用 DAX 字符设备节点提供对 NVDIMM 存储的原始访问。可以使用 CPU 缓存清除和隔离指令,使
devdax设备中的数据可用。某些数据库和虚拟机虚拟机监控程序可能会受益于此模式。无法在devdax设备上创建文件系统。这个模式中的设备可作为
/dev/daxN.M提供。创建命名空间后,请参阅列出的chardev值。fsdax,或者文件系统直接访问 (DAX)使用
fsdax时,NVDIMM 设备支持直接访问编程,如存储网络行业关联 (SNIA) 非易失性内存(NVM) 编程模型规格中所述。在这个模式中,I/O 会绕过内核的存储堆栈,因此无法使用很多设备映射器驱动程序。您可以在文件系统 DAX 设备中创建文件系统。
此模式中的设备可作为
/dev/pmemN提供。创建命名空间后,查看列出的blockdev值。raw显示不支持 DAX 的内存磁盘。在这个模式中,命名空间有一些限制,不应使用。
此模式中的设备可作为
/dev/pmemN提供。创建命名空间后,查看列出的blockdev值。
18.5. 安装 ndctl 复制链接链接已复制到粘贴板!
您可以安装 ndctl 工具来配置和监控 Non-Volatile Dual In-line Memory Modules (NVDIMM) 设备。
流程
安装
ndctl工具:# dnf install ndctl
18.6. 在 NVDIMM 上创建设备 DAX 命名空间 复制链接链接已复制到粘贴板!
在设备 DAX 模式下配置附加到您系统的 NVDIMM 设备,以支持具有直接访问功能的字符存储。
考虑以下选项:
- 将现有命名空间重新配置为设备 DAX 模式。
- 如果有可用空间,请创建新设备 DAX 命名空间。
18.6.1. 设备直接访问模式中的 NVDIMM 复制链接链接已复制到粘贴板!
设备直接访问(设备 DAX、devdax)提供了应用程序直接访问存储的方法,而无需参与文件系统。设备 DAX 的优点是它提供有保证的容错粒度,可以使用 ndctl 工具的 --align 选项来进行配置。
对于 Intel 64 和 AMD64 构架,支持以下故障颗粒度:
- 4 KiB
- 2 MiB
- 1 GiB
设备 DAX 节点只支持以下系统调用:
-
open() -
close() -
mmap()
您可以使用 ndctl list --human --capabilities 命令查看 NVDIMM 设备支持的协调。例如,若要为 region0 设备查看它,请使用 ndctl list --human --capabilities -r region0 命令。
不支持 read() 和 write() 系统调用,因为设备 DAX 用例与 SNIA Non-Volatile Memory Programming Model 关联。
18.6.2. 将现有的 NVDIMM 命名空间重新配置为设备 DAX 模式 复制链接链接已复制到粘贴板!
您可以将现有的 Non-Volatile Dual In-line Memory Modules (NVDIMM) 命名空间重新配置为设备 DAX 模式。
重新配置命名空间会删除之前在命名空间中存储的数据。
先决条件
-
已安装
ndctl工具。如需更多信息,请参阅安装 ndctl。
流程
列出系统中的所有命名空间:
# ndctl list --namespaces --idle [ { "dev":"namespace1.0", "mode":"raw", "size":34359738368, "uuid":"ac951312-b312-4e76-9f15-6e00c8f2e6f4" "state":"disabled", "numa_node":1 }, { "dev":"namespace0.0", "mode":"raw", "size":38615912448, "uuid":"ff5a0a16-3495-4ce8-b86b-f0e3bd9d1817", "state":"disabled", "numa_node":0 } ]重新配置任何命名空间:
# ndctl create-namespace --force --mode=devdax --reconfig=namespace-ID例 18.1. 将命名空间配置为设备 DAX
以下命令为支持 DAX 的数据存储重新配置
namespace0.1。它与 2-MiB 故障粒度一致,以确保操作系统一次在 2-MiB 页面中故障:# ndctl create-namespace --force --mode=devdax --align=2M --reconfig=namespace0.1 { "dev":"namespace0.1", "mode":"devdax", "map":"dev", "size":"35.44 GiB (38.05 GB)", "uuid":"426d6a52-df92-43d2-8cc7-046241d6d761", "daxregion":{ "id":0, "size":"35.44 GiB (38.05 GB)", "align":2097152, "devices":[ { "chardev":"dax0.1", "size":"35.44 GiB (38.05 GB)", "target_node":4, "mode":"devdax" } ] }, "align":2097152 }命名空间现在位于
/dev/dax0.1路径。
验证
验证系统中的现有命名空间是否已重新配置:
# ndctl list --namespace namespace0.1 [ { "dev":"namespace0.1", "mode":"devdax", "map":"dev", "size":38048628736, "uuid":"426d6a52-df92-43d2-8cc7-046241d6d761", "chardev":"dax0.1", "align":2097152 } ]
18.6.3. 在设备 DAX 模式下创建新 NVDIMM 命名空间 复制链接链接已复制到粘贴板!
如果区域中有可用空间,您可以在非线性内存模块(NVDIMM)设备上创建一个新设备 DAX 命名空间。
先决条件
-
已安装
ndctl工具。如需更多信息,请参阅安装 ndctl。 NVDIMM 设备支持标签在区域中创建多个命名空间。您可以使用以下命令检查它:
# ndctl read-labels nmem0 >/dev/null read 1 nmem这表示它读取一个 NVDIMM 设备的标签。如果值为
0,这表示您的设备不支持标签。
流程
列出系统上有可用空间的
pmem区域。在以下示例中,在 region1 和 region0 区域中有空间:# ndctl list --regions [ { "dev":"region1", "size":2156073582592, "align":16777216, "available_size":2117418876928, "max_available_extent":2117418876928, "type":"pmem", "iset_id":-9102197055295954944, "badblock_count":1, "persistence_domain":"memory_controller" }, { "dev":"region0", "size":2156073582592, "align":16777216, "available_size":2143188680704, "max_available_extent":2143188680704, "type":"pmem", "iset_id":736272362787276936, "badblock_count":3, "persistence_domain":"memory_controller" } ]在任何可用区域上分配一个或多个命名空间:
# ndctl create-namespace --mode=devdax --region=regionN --size=namespace-size例 18.2. 在区域上创建命名空间
以下命令在 region0 上创建 36-GiB 设备 DAX 命名空间。它与 2-MiB 故障粒度一致,以确保操作系统一次在 2-MiB 页面中故障:
# ndctl create-namespace --mode=devdax --region=region0 --align=2M --size=36G { "dev":"namespace0.2", "mode":"devdax", "map":"dev", "size":"35.44 GiB (38.05 GB)", "uuid":"89d13f41-be6c-425b-9ec7-1e2a239b5303", "daxregion":{ "id":0, "size":"35.44 GiB (38.05 GB)", "align":2097152, "devices":[ { "chardev":"dax0.2", "size":"35.44 GiB (38.05 GB)", "target_node":4, "mode":"devdax" } ] }, "align":2097152 }命名空间现在作为
/dev/dax0.2提供。
验证
验证是否已在设备 DAX 模式下创建了新命名空间:
# ndctl list -RN -n namespace0.2 { "regions":[ { "dev":"region0", "size":2156073582592, "align":16777216, "available_size":2065879269376, "max_available_extent":2065879269376, "type":"pmem", "iset_id":736272362787276936, "badblock_count":3, "persistence_domain":"memory_controller", "namespaces":[ { "dev":"namespace0.2", "mode":"devdax", "map":"dev", "size":38048628736, "uuid":"89d13f41-be6c-425b-9ec7-1e2a239b5303", "chardev":"dax0.2", "align":2097152 } ] } ] }
18.7. 在 NVDIMM 上创建文件系统 DAX 命名空间 复制链接链接已复制到粘贴板!
在文件系统 DAX 模式下配置附加到您系统的 NVDIMM 设备,以支持具有直接访问功能的文件系统。
考虑以下选项:
- 将现有命名空间重新配置为文件系统 DAX 模式。
- 如果有可用空间,请创建新文件系统 DAX 命名空间。
18.7.1. 文件系统直接访问模式中的 NVDIMM 复制链接链接已复制到粘贴板!
当在文件系统直接访问(文件系统 DAX、fsdax)模式下配置 NVDIMM 设备时,您可以在上面创建一个文件系统。对此文件系统上的文件执行 mmap() 操作的任何应用程序都可以直接访问其存储。这启用了 NVDIMM 的直接访问编程模型。
以下新的 -o dax 选项现在可用,如果需要,可以通过文件属性控制直接访问行为:
-o dax=inode当您不要在挂载文件系统时指定任何 dax 选项时,这个选项是默认选项。使用这个选项,您可以在文件上设置属性标志,以控制是否激活 dax 模式。如果需要,您可以在单个文件中设置此标志。
您还可以在一个目录上设置此标志,并且该目录中的任何文件将使用相同的标志创建。您可以使用
xfs_io -c 'chattr +x'directory-name 命令设置此属性标志。-o dax=never-
使用此选项时,即使 dax 标记被设置为
inode模式,也不会启用 dax 模式。这意味着,per-inode dax 属性标志会被忽略,使用这个标志设置的文件永远不会启用直接访问。 -o dax=always这个选项等同于旧的
-o dax行为。使用这个选项,您可以激活文件系统中任何文件的直接访问模式,而不考虑 dax 属性标志。警告在以后的发行版本中,
-o dax可能不被支持,如果需要,您可以使用-o dax=always。在这个模式中,每个文件都可能处于直接访问模式。- 按页元数据分配
这个模式需要在系统 DRAM 或 NVDIMM 设备本身中分配每个页面元数据。每个 4 KiB 页的这个数据结构的开销是 64 字节:
- 在小设备中,开销非常小,足以满足 DRAM 的要求。例如,16-GiB 命名空间只需要 256 MiB 用于页面结构。因为 NVDIMM 设备通常比较小且昂贵,所以最好将页面跟踪数据结构保存在 DRAM 中。
在大小为 TB 或更大的 NVDIMM 设备上,存储页面跟踪数据结构所需的内存量可能会超过系统中的 DRAM 量。一个 TiB 的 NVDIMM 需要 16 GiB 用于页面结构。因此,在这种情况下首选将数据结构存储在 NVDIMM 本身中。
您可以在配置命名空间时使用
--map选项配置每个页面元数据存储的位置:-
要在系统 RAM 中分配,请使用
--map=mem。 -
要在 NVDIMM 上分配,请使用
--map=dev。
18.7.2. 将现有的 NVDIMM 命名空间重新配置为文件系统 DAX 模式 复制链接链接已复制到粘贴板!
您可以将现有的非易失性双内存模块 (NVDIMM) 命名空间重新配置为文件系统 DAX 模式。
重新配置命名空间会删除之前在命名空间中存储的数据。
先决条件
-
已安装
ndctl工具。如需更多信息,请参阅安装 ndctl。
流程
列出系统中的所有命名空间:
# ndctl list --namespaces --idle [ { "dev":"namespace1.0", "mode":"raw", "size":34359738368, "uuid":"ac951312-b312-4e76-9f15-6e00c8f2e6f4" "state":"disabled", "numa_node":1 }, { "dev":"namespace0.0", "mode":"raw", "size":38615912448, "uuid":"ff5a0a16-3495-4ce8-b86b-f0e3bd9d1817", "state":"disabled", "numa_node":0 } ]重新配置任何命名空间:
# ndctl create-namespace --force --mode=fsdax --reconfig=namespace-ID例 18.3. 将命名空间配置为文件系统 DAX
要将
namespace0.0用于支持 DAX 的文件系统,请使用以下命令:# ndctl create-namespace --force --mode=fsdax --reconfig=namespace0.0 { "dev":"namespace0.0", "mode":"fsdax", "map":"dev", "size":"11.81 GiB (12.68 GB)", "uuid":"f8153ee3-c52d-4c6e-bc1d-197f5be38483", "sector_size":512, "align":2097152, "blockdev":"pmem0" }命名空间现在位于
/dev/pmem0路径中。
验证
验证系统中的现有命名空间是否已重新配置:
# ndctl list --namespace namespace0.0 [ { "dev":"namespace0.0", "mode":"fsdax", "map":"dev", "size":12681478144, "uuid":"f8153ee3-c52d-4c6e-bc1d-197f5be38483", "sector_size":512, "align":2097152, "blockdev":"pmem0" } ]
18.7.3. 在文件系统 DAX 模式下创建新 NVDIMM 命名空间 复制链接链接已复制到粘贴板!
如果区域中有可用空间,您可以在非线性内存模块(NVDIMM)设备上创建新文件系统 DAX 命名空间。
先决条件
-
已安装
ndctl工具。如需更多信息,请参阅安装 ndctl。 NVDIMM 设备支持标签在区域中创建多个命名空间。您可以使用以下命令检查它:
# ndctl read-labels nmem0 >/dev/null read 1 nmem这表示它读取一个 NVDIMM 设备的标签。如果值为
0,这表示您的设备不支持标签。
流程
列出系统上有可用空间的
pmem区域。在以下示例中,在 region1 和 region0 区域中有空间:# ndctl list --regions [ { "dev":"region1", "size":2156073582592, "align":16777216, "available_size":2117418876928, "max_available_extent":2117418876928, "type":"pmem", "iset_id":-9102197055295954944, "badblock_count":1, "persistence_domain":"memory_controller" }, { "dev":"region0", "size":2156073582592, "align":16777216, "available_size":2143188680704, "max_available_extent":2143188680704, "type":"pmem", "iset_id":736272362787276936, "badblock_count":3, "persistence_domain":"memory_controller" } ]在任何可用区域上分配一个或多个命名空间:
# ndctl create-namespace --mode=fsdax --region=regionN --size=namespace-size例 18.4. 在区域上创建命名空间
以下命令在 region0 上创建 36-GiB 文件系统 DAX 命名空间:
# ndctl create-namespace --mode=fsdax --region=region0 --size=36G { "dev":"namespace0.3", "mode":"fsdax", "map":"dev", "size":"35.44 GiB (38.05 GB)", "uuid":"99e77865-42eb-4b82-9db6-c6bc9b3959c2", "sector_size":512, "align":2097152, "blockdev":"pmem0.3" }命名空间现在作为
/dev/pmem0.3提供。
验证
验证是否已在文件系统 DAX 模式下创建了新命名空间:
# ndctl list -RN -n namespace0.3 { "regions":[ { "dev":"region0", "size":2156073582592, "align":16777216, "available_size":2027224563712, "max_available_extent":2027224563712, "type":"pmem", "iset_id":736272362787276936, "badblock_count":3, "persistence_domain":"memory_controller", "namespaces":[ { "dev":"namespace0.3", "mode":"fsdax", "map":"dev", "size":38048628736, "uuid":"99e77865-42eb-4b82-9db6-c6bc9b3959c2", "sector_size":512, "align":2097152, "blockdev":"pmem0.3" } ] } ] }
18.7.4. 在文件系统 DAX 设备中创建文件系统 复制链接链接已复制到粘贴板!
您可以在文件系统 DAX 设备中创建文件系统并挂载文件系统。创建文件系统后,应用程序可以使用持久内存,并在 mount-point 目录中创建文件,打开文件,并使用 mmap 操作映射文件来进行直接访问。
流程
可选:在文件系统 DAX 设备中创建一个分区。如需更多信息,请参阅使用 parted 创建分区。
注意当在
fsdax设备中创建分区时,分区必须在页边界上保持一致。在 Intel 64 和 AMD64 构架中,启动和结束分区至少需要 4 KiB 校对。2 MiB 是首选的校对。默认情况下,
parted工具在 1 MiB 边界上对齐分区。对于第一个分区,指定 2 MiB 作为分区的起点。如果分区的大小是 2 MiB 的倍数,则所有其他分区也都一致。在分区或者 NVDIMM 设备中创建 XFS 或者 ext4 文件系统:
# mkfs.xfs -d su=2m,sw=1 fsdax-partition-or-device注意现在,支持 dax 的文件和 reflinked 文件现在可以在文件系统中共存。但是,对于单个文件,dax 和 reflink 是互斥的。
另外,为了增加大型页面映射的可能性,请设置条带单元和条带宽度。
挂载文件系统:
# mount f_sdax-partition-or-device mount-point_不需要使用 dax 选项挂载文件系统来启用直接访问模式。当您在挂载时没有指定 dax 选项时,文件系统处于
dax=inode模式。在激活直接访问模式前,在文件上设置 dax 选项。
18.8. 使用 S.M.A.R.T 监控 NVDIMM 健康状况。 复制链接链接已复制到粘贴板!
一些非线性内存模块 (NVDIMM) 设备支持自监控、分析和报告技术 (S.M.A.R.T.) 接口以检索健康信息。
定期监控 NVDIMM 健康状况以防止数据丢失。如果 S.M.A.R.T. 报告 NVDIMM 设备健康状态的问题,请替换它,如弃用并替换有问题的 NVDIMM 设备中所述。
先决条件
可选:在一些系统中,上传
acpi_ipmi驱动程序以检索健康信息:# modprobe acpi_ipmi
流程
访问健康信息:
# ndctl list --dimms --health [ { "dev":"nmem1", "id":"8089-a2-1834-00001f13", "handle":17, "phys_id":32, "security":"disabled", "health":{ "health_state":"ok", "temperature_celsius":36.0, "controller_temperature_celsius":37.0, "spares_percentage":100, "alarm_temperature":false, "alarm_controller_temperature":false, "alarm_spares":false, "alarm_enabled_media_temperature":true, "temperature_threshold":82.0, "alarm_enabled_ctrl_temperature":true, "controller_temperature_threshold":98.0, "alarm_enabled_spares":true, "spares_threshold":50, "shutdown_state":"clean", "shutdown_count":4 } }, [...] ]
18.9. 检测和替换断开问题的 NVDIMM 设备 复制链接链接已复制到粘贴板!
如果您发现与系统日志中报告的 Non-Volatile Dual In-line Memory Modules (NVDIMM) 相关的错误消息,或者 S.M.A.R.T.,这可能意味着 NVDIMM 设备失败。在这种情况下,需要:
- 检测哪个 NVDIMM 设备失败
- 备份保存的数据
- 物理替换该设备
流程
检测有问题的设备:
# ndctl list --dimms --regions --health { "dimms":[ { "dev":"nmem1", "id":"8089-a2-1834-00001f13", "handle":17, "phys_id":32, "security":"disabled", "health":{ "health_state":"ok", "temperature_celsius":35.0, [...] } [...] }查找有问题的 NVDIMM 的
phys_id属性:# ndctl list --dimms --human在上例中,您知道
nmem0是有问题的 NVDIMM。因此,查找nmem0的phys_id属性。例 18.5. NVDIMM 的 phys_id 属性
在以下示例中,
phys_id是0x10:# ndctl list --dimms --human [ { "dev":"nmem1", "id":"XXXX-XX-XXXX-XXXXXXXX", "handle":"0x120", "phys_id":"0x1c" }, { "dev":"nmem0", "id":"XXXX-XX-XXXX-XXXXXXXX", "handle":"0x20", "phys_id":"0x10", "flag_failed_flush":true, "flag_smart_event":true } ]查找有问题的 NVDIMM 的内存插槽:
# dmidecode在输出中,找到 Handle 标识符与有问题的 NVDIMM 的
phys_id属性匹配的条目。Locator 字段列出了有问题的 NVDIMM 使用的内存插槽。例 18.6. NVDIMM 内存插槽列表
在以下示例中,
nmem0设备与0x0010标识符匹配,并使用DIMM-XXX-YYYY内存插槽:# dmidecode ... Handle 0x0010, DMI type 17, 40 bytes Memory Device Array Handle: 0x0004 Error Information Handle: Not Provided Total Width: 72 bits Data Width: 64 bits Size: 125 GB Form Factor: DIMM Set: 1 Locator: DIMM-XXX-YYYY Bank Locator: Bank0 Type: Other Type Detail: Non-Volatile Registered (Buffered) ...备份 NVDIMM 命名空间中的所有数据。如果您在替换 NVDIMM 前没有备份数据,当您从系统中删除 NVDIMM 时数据将会丢失。
警告在某些情况下,比如 NVDIMM 完全无法正常工作,备份可能会失败。
要防止这种情况,请使用 S.M.A.R.T.T 定期监控 NVDIMM 设备,如 使用 S.M.A.R.T.T 监控 NVDIMM 健康状况 中所述,并在它们中断前替换失败的 NVDIMM。
列出 NVDIMM 上的命名空间:
# ndctl list --namespaces --dimm=DIMM-ID-number例 18.7. NVDIMM 命名空间列表
在以下示例中,
nmem0设备包含namespace0.0和namespace0.2命名空间,您需要备份:# ndctl list --namespaces --dimm=0 [ { "dev":"namespace0.2", "mode":"sector", "size":67042312192, "uuid":"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "raw_uuid":"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "sector_size":4096, "blockdev":"pmem0.2s", "numa_node":0 }, { "dev":"namespace0.0", "mode":"sector", "size":67042312192, "uuid":"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "raw_uuid":"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "sector_size":4096, "blockdev":"pmem0s", "numa_node":0 } ]- 以物理方式替换失效的 NVDIMM。
第 19 章 丢弃未使用块 复制链接链接已复制到粘贴板!
您可以在支持它们的块设备中执行或调度丢弃操作。块丢弃操作与挂载的文件系统不再使用的文件系统块进行通信。块丢弃操作允许 SSD 优化垃圾回收例程,并可通知精简配置存储来重新使用未使用的物理块。
要求
基本文件系统的块设备必须支持物理的丢弃(discard)操作。
如果
/sys/block/<device>/queue/discard_max_bytes文件中的值不为零,则支持物理丢弃操作。
19.1. 块丢弃操作的类型 复制链接链接已复制到粘贴板!
您可以使用不同方法运行 discard 操作:
- 批量丢弃
-
这种丢弃是
fstrim命令的一部分。它丢弃与管理员指定条件匹配的文件系统中所有未使用的块。Red Hat Enterprise Linux 10 支持在支持物理丢弃操作的 XFS 和 ext4 格式化的设备上进行批量丢弃。 - 在线丢弃
这种类型的丢弃操作是在挂载时通过 discard 选项进行配置,并在用户不干预的情况下实时运行。但是,它只丢弃从已使用到空闲的块。Red Hat Enterprise Linux 10 支持 XFS 和 ext4 格式化的设备上的在线丢弃。
除了需要在线丢弃来保持性能或批量丢弃对系统工作负载不可行之外,使用批量丢弃。
- 定期丢弃
-
systemd服务定期运行的批处理操作。
XFS 和 ext4 文件系统支持所有类型。
建议
使用批处理或定期丢弃。
仅在以下情况下使用在线丢弃:
- 系统负载不允许使用批量丢弃,或者
- 为了保持性能,需要在线丢弃操作。
19.2. 执行批块丢弃 复制链接链接已复制到粘贴板!
您可以执行批量块丢弃操作,以丢弃挂载的文件系统上未使用的块。
先决条件
- 文件系统已挂载。
- 文件系统底层的块设备支持物理忽略操作。
流程
使用
fstrim工具:要只在所选文件系统中执行丢弃,请使用:
# fstrim mount-point要在所有挂载的文件系统中执行丢弃,请使用:
# fstrim --all
如果您对以下设备运行 fstrim 命令:
- 不支持丢弃操作的设备,或者
- 由多个设备组成的逻辑设备(LVM 或者 MD),其中任意设备不支持丢弃操作:
下面的信息将显示:
# fstrim /mnt/non_discard
fstrim: /mnt/non_discard: the discard operation is not supported
19.3. 启用在线块丢弃 复制链接链接已复制到粘贴板!
您可以执行在线块丢弃操作,以自动丢弃所有支持的文件系统上未使用的块。
流程
在挂载时启用在线丢弃:
手动挂载文件系统时,请添加
-o discard挂载选项:# mount -o discard device mount-point-
永久挂载文件系统时,请将
discard选项添加到/etc/fstab文件的挂载条目中。
19.4. 使用 storage RHEL 系统角色启用在线块丢弃 复制链接链接已复制到粘贴板!
您可以使用在线块丢弃选项挂载 XFS 文件系统,来自动丢弃未使用的块。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:--- - name: Manage local storage hosts: managed-node-01.example.com tasks: - name: Enable online block discard ansible.builtin.include_role: name: redhat.rhel_system_roles.storage vars: storage_volumes: - name: barefs type: disk disks: - /dev/sdb fs_type: xfs mount_point: /mnt/data mount_options: discard有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。验证 playbook 语法:
$ ansible-playbook --syntax-check ~/playbook.yml请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
$ ansible-playbook ~/playbook.yml
验证
验证在线块丢弃选项是否已启用:
# ansible managed-node-01.example.com -m command -a 'findmnt /mnt/data'
19.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 status fstrim.timer fstrim.timer - Discard unused blocks once a week Loaded: loaded (/usr/lib/systemd/system/fstrim.timer; enabled; vendor preset: disabled) Active: active (waiting) since Wed 2023-05-17 13:24:41 CEST; 3min 15s ago Trigger: Mon 2023-05-22 01:20:46 CEST; 4 days left Docs: man:fstrim May 17 13:24:41 localhost.localdomain systemd[1]: Started Discard unused blocks once a week.
第 20 章 删除存储设备 复制链接链接已复制到粘贴板!
您可以从正在运行的系统中安全地删除存储设备,这有助于防止系统内存过载和数据丢失。不要删除系统上的存储设备,其中:
- 空闲内存低于内存总量的 5%,每 100 个超过 10 个样本。
-
交换是活跃的(在
vmstat命令的输出中非零的si和so列)。
先决条件
在删除存储设备前,请确保由于在 I/O 刷新过程中增加了系统内存负载而有足够的可用内存。使用以下命令查看系统的当前内存负载和可用内存:
# vmstat 1 100 # free
20.1. 安全删除存储设备 复制链接链接已复制到粘贴板!
从正在运行的系统中安全地删除存储设备需要顶级的方法。从顶层(通常是应用程序或文件系统)开始,并在底层(即物理设备)上工作。
您可以通过多种方式使用存储设备,它们可以在物理设备之上有不同的虚拟配置。例如:您可以将设备的多个实例分组到多路径设备中,使其成为 RAID 的一部分,或者您可以将其成为 LVM 组的一部分。此外,设备可以通过文件系统访问,也可以直接访问,如,作为"raw"设备。
使用 top-to-bottom 方法时,您必须确保:
- 要删除的设备没有被使用
- 对该设备的所有待处理的 I/O 都会被清除
- 操作系统无法引用存储设备
20.2. 删除块设备和相关的元数据 复制链接链接已复制到粘贴板!
要从正在运行的系统中安全地删除块设备,以防止系统内存过载和数据丢失,您需要首先从它们中删除元数据。从文件系统开始,处理堆栈中的每一层,然后继续处理磁盘。这些操作可防止将您的系统置于不一致的状态。
根据您要删除的设备类型,使用特定的命令:
-
对于 LVM,运行
lvremove、vgremove和pvremove。 -
对于软件 RAID,请运行
mdadm以删除阵列。如需更多信息,请参阅 管理 RAID。 - 对于使用 LUKS 加密的块设备,有特定的额外步骤。以下流程对于使用 LUKS 加密的块设备不适用。如需更多信息,请参阅 使用 LUKS 加密块设备。
重新扫描 SCSI 总线或执行更改操作系统状态的其他操作,而无需遵循这个流程,因为 I/O 超时、设备被意外删除或数据丢失。
先决条件
- 您有一个现有的包含文件系统、逻辑卷和卷组的块设备堆栈。
- 您确保没有其他应用程序或服务正在使用您要删除的设备。
- 备份您要删除的设备中的数据。
可选:如果要删除多路径设备,且您无法访问其路径设备,请运行以下命令禁用多路径设备的队列:
# multipathd disablequeueing map multipath-device这可让设备的 I/O 失败,允许使用该设备的应用程序关闭。
一次一层地删除设备及其元数据可确保不会在磁盘上保留过时的签名。
流程
卸载文件系统:
# umount /mnt/mount-point删除文件系统:
# wipefs -a /dev/vg0/myvol如果您已在
/etc/fstab文件中添加了一个条目,来在文件系统和挂载点之间建立持久关联,请在此时编辑/etc/fstab来删除该条目。根据您要删除的设备类型,继续执行以下步骤:
删除包含文件系统的逻辑卷(LV):
# lvremove vg0/myvol如果卷组中没有其他的逻辑卷(VG),您可以安全地删除包含该设备的 VG:
# vgremove vg0从 PV 设备中删除物理卷(PV)元数据:
# pvremove /dev/sdc1# wipefs -a /dev/sdc1删除包含 PV 的分区:
# parted /dev/sdc rm 1如果要完全擦除设备,请删除分区表:
# wipefs -a /dev/sdc只有在您要物理删除设备时才执行以下步骤:
如果您要删除多路径设备,请执行以下命令:
查看该设备的所有路径:
# multipath -l稍后需要这个命令的输出。
清除 I/O 并删除多路径设备:
# multipath -f multipath-device
如果该设备没有配置为多路径设备,或者设备配置为多路径设备,并且您之前将 I/O 传递给单个路径,请将任何未完成的 I/O 刷新到所有使用的设备路径:
# blockdev --flushbufs device对于直接访问的设备非常重要,
umount或vgreduce命令不会清除 I/O。如果您要删除 SCSI 设备,请执行以下命令:
-
删除对基于路径的设备名称的任何引用,如
/dev/sd、/dev/disk/by-path或major:minornumber(在系统上的应用程序、脚本或工具中)。这样可保证以后添加的不同设备不会为当前的设备错误。 从 SCSI 子系统中删除该设备的每个路径:
# echo 1 > /sys/block/device-name/device/delete此处,如果设备之前被用作多路径设备,则
device-name可从multipath -l命令的输出中检索到。
-
删除对基于路径的设备名称的任何引用,如
- 从正在运行的系统中删除物理设备。请注意,当您删除此设备时,I/O 到其它设备不会停止。
验证
验证您要删除的设备是否没有在
lsblk命令的输出中显示。以下是一个输出示例:# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 5G 0 disk sr0 11:0 1 1024M 0 rom vda 252:0 0 10G 0 disk |-vda1 252:1 0 1M 0 part |-vda2 252:2 0 100M 0 part /boot/efi `-vda3 252:3 0 9.9G 0 part /
第 21 章 设置 Stratis 文件系统 复制链接链接已复制到粘贴板!
Stratis 是 Red Hat Enterprise Linux 的本地存储管理解决方案。它注重简单性、易用性,并可让您访问高级存储功能。
Stratis 作为服务运行,来管理物理存储设备池,简化本地存储管理,易于使用,同时帮助您设置和管理复杂的存储配置。
Stratis 可在以下方面帮助您:
- 存储的初始配置
- 稍后进行修改
- 使用高级存储功能
Stratis 的核心概念是存储池。这个池是从一个或多个本地磁盘或分区创建的,文件系统是从池中创建的。池启用了如下功能:
- 文件系统快照
- 精简置备
- 缓存
- 加密
21.1. Stratis 文件系统的组件 复制链接链接已复制到粘贴板!
从外部来看,Stratis 在命令行上并通过 API 表示以下文件系统组件:
blockdev- 块设备,如磁盘或者磁盘分区。
pool由一个或多个块设备组成。
池有固定大小,与块设备的大小相等。
池包含大多数 Stratis 层,如使用
dm-cache目标的非易失性数据缓存。Stratis 为每个池创建一个
/dev/stratis/my-pool/目录。这个目录包含了到代表池里 Stratis 文件系统的设备的链接。filesystem每个池可以包含零个或多个文件系统。包含文件系统的池可以存储任意数量的文件。
文件系统会被精简置备,且没有固定的总大小。文件系统的实际大小随着保存着文件系统中的数据而增长。如果数据的大小接近文件系统的虚拟大小,Sratis 将自动增大精简卷和文件系统。
文件系统使用 XFS 文件系统进行格式化。Stratis 对其存储使用 XFS 文件系统,并置备一个 Stratis 卷。
在文档的其余部分中,Stratis 卷将被称为“Stratis 文件系统”,以与命令行界面保持一致。
Stratis 跟踪它创建的文件系统的信息,而 XFS 并不知道这些信息,并且使用 XFS 所做的更改不会自动在 Stratis 中创建更新。用户不得重新格式化或重新配置由 Stratis 管理的 XFS 文件系统。
Stratis 在 /dev/stratis/my-pool/my-fs 路径创建到文件系统的链接。
Stratis 使用很多设备映射器设备,它们出现在 dmsetup 列表和 /proc/partitions 文件中。类似地,lsblk 命令输出反映了 Stratis 的内部工作方式和层。
21.2. 与 Stratis 兼容的块设备 复制链接链接已复制到粘贴板!
可与 Stratis 一起使用的存储设备。
支持的设备
Stratis 池已被测试以可用于这些块设备:
- LUKS
- LVM 逻辑卷
- MD RAID
- DM Multipath
- iSCSI
- HDD 和 SSD
- NVMe 设备
21.3. 安装 Stratis 复制链接链接已复制到粘贴板!
安装 Stratis 所需的软件包。
流程
安装提供 Stratis 服务和命令行工具的软件包:
# dnf install stratisd stratis-cli要启动
stratisd服务并使其在引导时启动:# systemctl enable --now stratisd
验证
验证
stratisd服务是否已启用并正在运行:# systemctl status stratisd stratisd.service - Stratis daemon Loaded: loaded (/usr/lib/systemd/system/stratisd.service; enabled; preset:> Active: active (running) since Tue 2025-03-25 14:04:42 CET; 30min ago Docs: man:stratisd(8) Main PID: 24141 (stratisd) Tasks: 22 (limit: 99365) Memory: 10.4M CPU: 1.436s CGroup: /system.slice/stratisd.service └─24141 /usr/libexec/stratisd --log-level debug
21.4. 创建未加密的 Stratis 池 复制链接链接已复制到粘贴板!
您可以从一个或多个块设备创建未加密的 Stratis 池。
先决条件
-
Stratis 已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 您在其上创建 Stratis 池的块设备没有被使用、卸载,且至少有 1 GB 空间。
在 IBM Z 构架中,必须对
/dev/dasd*块设备进行分区。使用分区设备来创建 Stratis 池。有关分区 DASD 设备的详情,请参考 在 64 位 IBM Z 上配置 Linux 实例。
您只能在创建过程中加密 Stratis 池,之后不能。
流程
删除您要在 Stratis 池中使用的每个块设备上存在的任何文件系统、分区表或 RAID 签名:
# wipefs --all block-deviceblock-device值是块设备的路径,例如/dev/sdb。在所选的块设备上创建新的未加密的 Stratis 池:
# stratis pool create my-pool block-deviceblock-device值是空或者擦除的块设备的路径。您还可以使用以下命令在一行上指定多个块设备:
# stratis pool create my-pool block-device-1 block-device-2
验证
确认创建了新的 Stratis 池:
# stratis pool list
21.5. 使用 Web 控制台创建未加密的 Stratis 池 复制链接链接已复制到粘贴板!
您可以使用 Web 控制台从一个或多个块设备创建一个未加密的 Stratis 池。
先决条件
您已安装了 RHEL 10 web 控制台。
具体说明请参阅安装并启用 Web 控制台。
-
Stratis 已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 您在其上创建 Stratis 池的块设备没有被使用、卸载,且至少有 1 GB 空间。
您不能在其创建后加密一个未加密的 Stratis 池。
流程
- 登录到 RHEL 10 web 控制台。
- 点 。
- 在 Storage 表中,点菜单按钮并选择 Create Stratis pool。
- 在 Name 字段中输入 Stratis 池的名称。
- 选择您要从中创建 Stratis 池的Block devices。
- 可选:如果要为池中创建的每个文件系统指定最大大小,请选择 Manage filesystem size。
- 点 。
验证
- 进到 Storage 部分,并确认您可以在 Devices 表中看到新的 Stratis 池。
21.6. 使用内核 keyring 中的密钥创建加密的 Stratis 池 复制链接链接已复制到粘贴板!
要保护数据,您可以使用内核 keyring ,来从一个或多个块设备创建加密的 Stratis 池。
当您以这种方式创建加密的 Stratis 池时,内核 keyring 作为主加密机制使用。后续系统重启此内核密钥环后,用来解锁加密的 Stratis 池。
当从一个或多个块设备创建加密的 Stratis 池时,请注意以下几点:
-
每个块设备都使用
cryptsetup库进行加密,并实施LUKS2格式。 - 每个 Stratis 池都可以有一个唯一的密钥,或者与其他池共享相同的密钥。这些密钥保存在内核密钥环中。
- 组成 Stratis 池的块设备必须全部加密或者全部未加密。不可能同时在同一个 Stratis 池中加密和未加密块设备。
- 添加到加密的 Stratis 池的数据缓存中的块设备被自动加密。
先决条件
-
Stratis v2.1.0 或更高版本已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 您在其上创建 Stratis 池的块设备没有被使用、卸载,且至少有 1 GB 空间。
在 IBM Z 构架中,必须对
/dev/dasd*块设备进行分区。使用 Stratis 池中的分区。有关分区 DASD 设备的详情,请参考 在 64 位 IBM Z 上配置 Linux 实例。
流程
删除您要在 Stratis 池中使用的每个块设备上存在的任何文件系统、分区表或 RAID 签名:
# wipefs --all block-deviceblock-device值是块设备的路径,例如/dev/sdb。如果您还没有设置密钥,请运行以下命令,并按照提示创建用于加密的密钥集:
# stratis key set --capture-key key-descriptionkey-description是对在内核 keyring 中创建的密钥的引用。在命令行上,系统将提示您输入密钥值。您还可以将密钥值放在一个文件中,使用--keyfile-path选项,而不是--capture-key选项。创建加密的 Stratis 池,并指定用于加密的密钥描述:
# stratis pool create --key-desc key-description my-pool block-devicekey-description- 引用您在上一步中创建的内核密钥环中存在的密钥。
my-pool- 指定新的 Stratis 池的名称。
block-device指定到空或者有线块设备的路径。
您还可以使用以下命令在一行上指定多个块设备:
# stratis pool create --key-desc key-description my-pool block-device-1 block-device-2
验证
确认创建了新的 Stratis 池:
# stratis pool list
21.7. 使用 Clevis 创建加密的 Stratis 池 复制链接链接已复制到粘贴板!
从 Stratis 2.4.0 开始,您可以通过在命令行上指定 Clevis 选项来使用 Clevis 机制创建加密池。
先决条件
-
Stratis v2.3.0 或更高版本已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 已创建一个加密的 Stratis 池。如需更多信息,请参阅 使用内核 keyring 中的密钥创建加密的 Stratis 池。
- 您的系统支持 TPM 2.0。
流程
删除您要在 Stratis 池中使用的每个块设备上存在的任何文件系统、分区表或 RAID 签名:
# wipefs --all block-deviceblock-device值是块设备的路径,例如/dev/sdb。创建加密的 Stratis 池,并指定用于加密的 Clevis 机制:
# stratis pool create --clevis tpm2 my-pool block-devicetpm2- 指定要使用的 Clevis 机制。
my-pool- 指定新的 Stratis 池的名称。
block-device指定到空或者有线块设备的路径。
或者,使用以下命令使用 Clevis tang 服务器机制:
# stratis pool create --clevis tang --tang-url my-url --thumbprint thumbprint my-pool block-devicetang- 指定要使用的 Clevis 机制。
my-url- 指定 tang 服务器的 URL。
thumbprint引用 tang 服务器的指纹。
您还可以使用以下命令在一行上指定多个块设备:
# stratis pool create --clevis tpm2 my-pool block-device-1 block-device-2
验证
确认创建了新的 Stratis 池:
# stratis pool list注意您还可以通过在创建池期间同时指定 Clevis 和 keyring 选项,创建使用 Clevis 和 keyring 机制的加密池。
21.8. 使用 storage RHEL 系统角色创建加密的 Stratis 池 复制链接链接已复制到粘贴板!
要保护数据,您可以使用 storage RHEL 系统角色创建一个加密的 Stratis 池。除了密码短语外,您还可以使用 Clevis 和 Tang 或 TPM 保护作为加密方法。
您只能对整个池配置 Stratis 加密。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 您可以连接到 Tang 服务器。如需更多信息,请参阅 部署 SELinux 为 enforcing 模式的 Tang 服务器。
流程
将敏感变量存储在加密的文件中:
创建 vault :
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:luks_password: <password>- 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:--- - name: Manage local storage hosts: managed-node-01.example.com vars_files: - ~/vault.yml tasks: - name: Create a new encrypted Stratis pool with Clevis and Tang ansible.builtin.include_role: name: redhat.rhel_system_roles.storage vars: storage_pools: - name: mypool disks: - sdd - sde type: stratis encryption: true encryption_password: "{{ luks_password }}" encryption_clevis_pin: tang encryption_tang_url: tang-server.example.com:7500示例 playbook 中指定的设置包括如下:
encryption_password- 用于解锁 LUKS 卷的密码或密码短语。
encryption_clevis_pin-
可用来加密创建的池的 Clevis 方法。您可以使用
tang和tpm2。 encryption_tang_url- Tang 服务器的 URL。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。验证 playbook 语法:
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
$ ansible-playbook --ask-vault-pass ~/playbook.yml
验证
验证是否创建了池,并配置了 Clevis 和 Tang :
$ ansible managed-node-01.example.com -m command -a 'sudo stratis report' ... "clevis_config": { "thp": "j-G4ddvdbVfxpnUbgxlpbe3KutSKmcHttILAtAkMTNA", "url": "tang-server.example.com:7500" }, "clevis_pin": "tang", "in_use": true, "key_description": "blivet-mypool",
21.9. 使用 Web 控制台创建加密的 Stratis 池 复制链接链接已复制到粘贴板!
要保护您的数据,您可以使用 Web 控制台从一个或多个块设备创建一个加密的 Stratis 池。
当从一个或多个块设备创建加密的 Stratis 池时,请注意以下几点:
- 每个块设备都使用 cryptsetup 库进行加密,并实施 LUKS2 格式。
- 每个 Stratis 池都可以有一个唯一的密钥,或者与其他池共享相同的密钥。这些密钥保存在内核密钥环中。
- 组成 Stratis 池的块设备必须全部加密或者全部未加密。不可能同时在同一个 Stratis 池中加密和未加密块设备。
- 添加到加密 Stratis 池的数据层中的块设备会自动加密。
先决条件
您已安装了 RHEL 10 web 控制台。
具体说明请参阅安装并启用 Web 控制台。
-
Stratis v2.1.0 或更高版本已安装,
stratisd服务正在运行。 - 您在其上创建 Stratis 池的块设备没有被使用、卸载,且至少有 1 GB 空间。
流程
- 登录到 RHEL 10 web 控制台。
- 点 。
- 在 Storage 表中,点菜单按钮并选择 Create Stratis pool。
- 在 Name 字段中输入 Stratis 池的名称。
- 选择您要从中创建 Stratis 池的Block devices。
选择加密类型,您可以使用密码短语、Tang keyserver 或两者:
passphrase:
- 输入密码短语。
- 确认密码短语。
Tang keyserver :
- 输入 keyserver 地址。如需更多信息,请参阅 部署 SELinux 为 enforcing 模式的 Tang 服务器。
- 可选:如果要为池中创建的每个文件系统指定最大大小,请选择 Manage filesystem size。
- 点 。
验证
- 进到 Storage 部分,并确认您可以在 Devices 表中看到新的 Stratis 池。
21.10. 使用 Web 控制台重命名 Stratis 池 复制链接链接已复制到粘贴板!
您可以使用 Web 控制台重命名现有的 Stratis 池。
先决条件
您已安装了 RHEL 10 web 控制台。
具体说明请参阅安装并启用 Web 控制台。
Stratis 已安装,
stratisd服务正在运行。默认情况下,web 控制台会检测并安装 Stratis。但是,要手动安装 Stratis,请参阅 安装 Stratis。
- 一个 Stratis 池已创建。
流程
- 登录到 RHEL 10 web 控制台。
- 点 。
- 在 Storage 表中,点您要重命名的 Stratis 池。
- 在 Stratis pool 页面中,点 Name 字段旁边的 。
- 在 Rename Stratis pool 对话框中输入新名称。
- 点击 。
21.11. 在 Stratis 文件系统中设置过度置备模式 复制链接链接已复制到粘贴板!
默认情况下,每个 Stratis 池都被过度置备,意味着逻辑文件系统大小可以超过物理分配的空间。Stratis 监控文件系统使用情况,并在需要时自动使用可用空间增加分配。但是,如果所有可用空间都已分配了,并且池已满,则不会为文件系统分配额外的空间。
如果文件系统耗尽空间,用户可能会丢失数据。对于数据丢失的风险超过过度置备的好处的应用程序,可以禁用此功能。
Stratis 持续监控池使用情况,并使用 D-Bus API 报告值。存储管理员必须监控这些值,并根据需要将设备添加到池中,以防止其达到容量上限。
先决条件
- Stratis 已安装。如需更多信息,请参阅 安装 Stratis。
流程
要正确设置池,您可以有两个可能:
从一个或多个块设备创建池,以便在创建时完全置备池:
# stratis pool create --no-overprovision pool-name /dev/sdb-
通过使用
--no-overprovision选项,池无法分配比实际可用的物理空间更多的逻辑空间。
-
通过使用
在现有池中设置过度置备模式:
# stratis pool overprovision pool-name <yes|no>- 如果设置为 "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输出中是否有池 overprovisioning 模式标记。" ~ " 是 "NOT" 的数学符号,因此~Op表示不进行过度配置。 可选:检查特定池的过度置备:
# stratis pool overprovision pool-name yes # 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
21.12. 将 Stratis 池绑定到 NBDE 复制链接链接已复制到粘贴板!
将加密的 Stratis 池绑定到网络绑定磁盘加密(NBDE)需要 Tang 服务器。当包含 Stratis 池的系统重启时,它与 Tang 服务器进行连接,以自动解锁加密的池,而无需提供内核密钥环描述。
将 Stratis 池绑定到补充的 Clevis 加密机制不会删除主内核密钥环加密。
先决条件
-
Stratis v2.3.0 或更高版本已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 已创建一个加密的 Stratis 池,并且您有用于加密的密钥的密钥的密钥描述。如需更多信息,请参阅 使用内核 keyring 中的密钥创建加密的 Stratis 池。
- 您可以连接到 Tang 服务器。如需更多信息,请参阅 部署 SELinux 为 enforcing 模式的 Tang 服务器。
流程
将加密的 Stratis 池绑定到 NBDE:
# stratis pool bind nbde --trust-url my-pool tang-servermy-pool- 指定加密的 Stratis 池的名称。
tang-server- 指定 Tang 服务器的 IP 地址或 URL。
21.13. 将 Stratis 池绑定到 TPM 复制链接链接已复制到粘贴板!
当您将加密的 Stratis 池绑定到受信任的平台模块(TPM) 2.0 时,包含池的系统会重启,并且池会自动解锁,而无需提供内核 keyring 描述。
先决条件
-
Stratis v2.3.0 或更高版本已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 已创建一个加密的 Stratis 池,并且您有用于加密的密钥的密钥的密钥描述。如需更多信息,请参阅 使用内核 keyring 中的密钥创建加密的 Stratis 池。
- 您的系统支持 TPM 2.0。
流程
将加密的 Stratis 池绑定到 TPM:
# stratis pool bind tpm my-poolmy-pool- 指定加密的 Stratis 池的名称。
key-description- 引用内核密钥环中存在的密钥,该密钥是在您创建加密的 Stratis 池时生成的。
21.14. 使用内核密钥环解加密的 Stratis 池 复制链接链接已复制到粘贴板!
系统重启后,您的加密 Stratis 池或组成它的块设备可能不可见。您可以使用用来加密池的内核密钥环来解锁池。
先决条件
-
Stratis v2.1.0 已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 已创建一个加密的 Stratis 池。如需更多信息,请参阅 使用内核 keyring 中的密钥创建加密的 Stratis 池。
流程
使用之前使用的相同密钥描述重新创建密钥集:
# stratis key set --capture-key key-descriptionkey-description引用内核 keyring 中存在的密钥,该密钥是在您创建加密的 Stratis 池时生成的。验证 Stratis 池是可见的:
# stratis pool list
21.15. 解除 Stratis 池与补充加密的绑定 复制链接链接已复制到粘贴板!
当您解除加密的 Stratis 池与支持的附加加密机制的绑定时,主内核密钥环加密将保持不变。对于一开始就使用 Clevis 加密创建的池,这并不适用。
先决条件
- Stratis v2.3.0 或更高版本已安装在您的系统上。如需更多信息,请参阅 安装 Stratis。
- 已创建一个加密的 Stratis 池。如需更多信息,请参阅 使用内核 keyring 中的密钥创建加密的 Stratis 池。
- 加密的 Stratis 池绑定到受支持的补充加密机制。
流程
解除加密的 Stratis 池与补充加密机制的绑定:
# stratis pool unbind clevis my-poolmy-pool指定您要解绑的 Stratis 池的名称。
21.16. 启动和停止 Stratis 池 复制链接链接已复制到粘贴板!
您可以启动和停止 Stratis 池。这可让您选择拆卸或关闭用于构建池的所有对象,如文件系统、缓存设备、精简池和加密的设备。请注意,如果池主动使用任何设备或文件系统,则可能会发出一个警告,且无法停止。
stopped 状态记录在池的元数据中。这些池不会在以下引导上启动,直到池收到 start 命令。
先决条件
-
Stratis 已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 一个未加密的或加密的 Stratis 池已创建。如需更多信息,请参阅 创建未加密的 Stratis 池 或 使用内核 keyring 中的密钥创建加密的 Stratis 池。
流程
使用以下命令停止 Stratis 池。这会关闭存储堆栈,但保留所有元数据不变:
# stratis pool stop --name pool-name使用以下命令启动 Stratis 池。
--unlock-method选项指定池被加密的解锁方法:# stratis pool start --unlock-method <keyring|clevis> --name pool-name注意您可以使用池名称或池 UUID 启动池。
验证
使用以下命令列出系统上所有活跃的池:
# stratis pool list使用以下命令列出所有停止的池:
# stratis pool list --stopped使用以下命令查看停止的池的详细信息。如果指定了 UUID,该命令会打印与 UUID 对应的池的详细信息:
# stratis pool list --stopped --uuid UUID
21.17. 创建 Stratis 文件系统 复制链接链接已复制到粘贴板!
在现有 Stratis 池上创建 Stratis 文件系统。
先决条件
-
Stratis 已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 一个 Stratis 池已创建。如需更多信息,请参阅 创建未加密的 Stratis 池 或 使用内核 keyring 中的密钥。
流程
在池上创建一个 Stratis 文件系统:
# stratis filesystem create --size number-and-unit my-pool my-fsnumber-and-unit- 指定文件系统的大小。规格格式必须遵循标准大小规格格式进行输入,即 B、KiB、MiB、GiB、TiB 或 PiB。
my-pool- 指定 Stratis 池的名称。
my-fs为文件系统指定一个任意名称。
例如:
例 21.1. 创建 Stratis 文件系统
# stratis filesystem create --size 10GiB pool1 filesystem1
设置文件系统的大小限制:
# stratis filesystem create --size number-and-unit --size-limit number-and-unit my-pool my-fs注意从 Stratis 3.6.0 开始提供这个选项。
如果需要,您还可以稍后删除大小限制:
# stratis filesystem unset-size-limit my-pool my-fs
验证
列出池中的文件系统,以检查 Stratis 文件系统是否已创建:
# stratis fs list my-pool
21.18. 使用 Web 控制台在 Stratis 池上创建文件系统 复制链接链接已复制到粘贴板!
您可以使用 Web 控制台在现有 Stratis 池中创建一个文件系统。
先决条件
您已安装了 RHEL 10 web 控制台。
具体说明请参阅安装并启用 Web 控制台。
-
stratisd服务在运行。 - 一个 Stratis 池已创建。
流程
- 登录到 RHEL 10 web 控制台。
- 点 。
- 点击您要在其上创建文件系统的 Stratis 池。
- 在 Stratis pool 页面中,滚动到 Stratis filesystems 部分,然后单击 。
- 输入文件系统的名称。
- 输入文件系统的挂载点。
- 选择挂载选项。
- 在 At boot 下拉菜单中选择您要何时挂载文件系统。
创建文件系统:
- 如果要创建并挂载文件系统,点 。
- 如果您只想创建文件系统,请单击 。
验证
- 新文件系统在 Stratis filesystems 选项卡下的 Stratis pool 页面中可见。
21.19. 挂载 Stratis 文件系统 复制链接链接已复制到粘贴板!
挂载现有的 Stratis 文件系统以访问其内容。
先决条件
-
Stratis 已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 一个 Stratis 文件系统已创建。如需更多信息,请参阅 创建 Stratis 文件系统。
流程
要挂载文件系统,请使用 Stratis 在
/dev/stratis/目录中维护的条目:# mount /dev/stratis/my-pool/my-fs mount-point
现在该文件系统被挂载到 mount-point 目录中并可使用。
在停止池之前,卸载属于池的所有文件系统。如果仍然挂载了任何文件系统,则池不会停止。
21.20. 使用 systemd 服务在 /etc/fstab 中设置非 root Stratis 文件系统 复制链接链接已复制到粘贴板!
您可以使用 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
从加密的 Stratis 池永久挂载 Stratis 文件系统可能会导致引导进程停止,直到提供密码为止。如果池是使用任何无人值守机制(例如 NBDE 或 TPM2)加密的,则 Stratis 池将被自动解锁。如果不是,用户需要在控制台中输入密码。
第 22 章 使用附加的块设备扩展 Stratis 池 复制链接链接已复制到粘贴板!
您可以在 Stratis 池中添加附加块设备以便为 Stratis 文件系统提供更多存储容量。您可以手动或使用 Web 控制台进行此操作。
22.1. 在 Stratis 池中添加块设备 复制链接链接已复制到粘贴板!
您可以在 Stratis 池中添加一个或多个块设备。
先决条件
-
Stratis 已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 您在其上创建 Stratis 池的块设备没有被使用、卸载,且至少有 1 GB 空间。
流程
要在池中添加一个或多个块设备,请使用:
# stratis pool add-data my-pool device-1 device-2 device-n
22.2. 使用 Web 控制台向 Stratis 池中添加块设备 复制链接链接已复制到粘贴板!
您可以使用 Web 控制台向现有 Stratis 池中添加块设备。您还可以将缓存添加为块设备。
先决条件
您已安装了 RHEL 10 web 控制台。
具体说明请参阅安装并启用 Web 控制台。
-
stratisd服务在运行。 - 一个 Stratis 池已创建。
- 您在其上创建 Stratis 池的块设备没有被使用、卸载,且至少有 1 GB 空间。
流程
- 登录到 RHEL 10 web 控制台。
- 点 。
- 在 Storage 表中,点您要向其添加块设备的 Stratis 池。
- 在 Stratis pool 页面中,点 ,并选择要将块设备添加为数据或缓存的 Tier。
- 如果您要将块设备添加到使用密码短语加密的 Stratis 池中,请输入密码短语。
- 在 Block devices 下,选择要添加到池中的设备。
- 点。
第 23 章 监控 Stratis 文件系统 复制链接链接已复制到粘贴板!
作为 Stratis 用户,您可以查看系统上有关 Stratis 文件系统的信息,以监控其状态和可用空间。
23.1. 显示有关 Stratis 文件系统的信息 复制链接链接已复制到粘贴板!
您可以使用 stratis 工具列出有关 Stratis 文件系统的统计信息,如 total、used 以及 free size 或属于池的文件系统和块设备。
XFS 文件系统的大小是它可以管理的用户数据总量。在精简配置的 Stratis 池中,Stratis 文件系统的大小可能看起来比分配给它的空间大。XFS 文件系统的大小与这个表观大小相匹配,这意味着它通常大于所分配的空间。标准 Linux 工具(如 df )报告 XFS 文件系统的大小。这个值通常高估了 XFS 文件系统所需的空间,因此也高估了 Stratis 为其分配的空间。
定期监控过度置备的 Stratis 池的使用情况。如果文件系统使用情况接近分配的空间,Stratis 会自动使用池中的可用空间增加分配。但是,如果所有可用空间都已分配了,并且池已满,则不会分配额外的空间,从而导致文件系统耗尽空间。这可能导致使用 Stratis 文件系统的应用程序中的数据丢失的风险。
先决条件
-
Stratis 已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。
流程
要显示系统中用于 Stratis 的所有块设备的信息:
# stratis blockdev Pool Name Device Node Physical Size Tier UUID my-pool /dev/sdb 9.10 TiB Data ec9fb718-f83c-11ef-861e-7446a09dccfb显示系统中所有 Stratis 池的信息:
# stratis pool Name Total/Used/Free Properties UUID Alerts my-pool 8.00 GiB / 800.99 MiB / 7.22 GiB -Ca,-Cr,Op e22772c2-afe9-446c-9be5-2f78f682284e WS001显示系统中所有 Stratis 文件系统的信息:
# stratis filesystem Pool Filesystem Total/Used/Free/Limit Device UUID Spool1 sfs1 1 TiB / 546 MiB / 1023.47 GiB / None /dev/stratis/spool1/sfs1 223265f5-8f17-4cc2-bf12-c3e9e71ff7bf
您还可以通过指定文件系统名称或 UUID 显示有关系统上 Stratis 文件系统的详细信息:
# stratis filesystem list my-pool --name my-fs
UUID: 47255008-9bc7-4bd2-8294-e9d25cd9e7ba
Name: my-fs
Pool: my-pool
Device: /dev/stratis/my-pool/my-fs
Created: Nov 08 2018 08:03
Snapshot origin: None
Sizes:
Logical size of thin device: 1 TiB
Total used (including XFS metadata): 546 MiB
Free: 1023.47 GiB
Size Limit: None
23.2. 使用 Web 控制台查看 Stratis 池 复制链接链接已复制到粘贴板!
您可以使用 Web 控制台查看现有的 Stratis 池,以及其包含的文件系统。
先决条件
您已安装了 RHEL 10 web 控制台。
具体说明请参阅安装并启用 Web 控制台。
-
stratisd服务在运行。 - 您有一个现有的 Stratis 池。
流程
- 登录到 RHEL 10 web 控制台。
- 点 。
在 Storage 表中,点您要查看的 Stratis 池。
Stratis 池页面显示有关池以及您在池中创建的文件系统的所有信息。
第 24 章 在 Stratis 文件系统中使用快照 复制链接链接已复制到粘贴板!
您可以使用 Stratis 文件系统的快照任意时间捕获文件系统状态,并在以后恢复它。
24.1. Stratis 快照的特性 复制链接链接已复制到粘贴板!
在 Stratis 中,快照是作为另一个 Stratis 文件系统的副本创建的常规 Stratis 文件系统。
Stratis 中的当前快照实现的特征如下:
- 文件系统快照是另一个文件系统。
- 快照及其原始卷在生命周期中不会被链接。快照的文件系统可以比它从中创建的文件系统更长。
- 文件系统不一定被挂载来生成快照。
- 每个快照使用大约一半的实际后备存储,这是 XFS 日志所需要的。
24.2. 创建 Stratis 快照 复制链接链接已复制到粘贴板!
您可以创建一个 Stratis 文件系统作为现有 Stratis 文件系统的一个快照。
先决条件
-
Stratis 已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 您已创建了 Stratis 文件系统。如需更多信息,请参阅 创建 Stratis 文件系统。
流程
创建一个 Stratis 快照:
# stratis fs snapshot my-pool my-fs my-fs-snapshot
快照是一流的 Stratis 文件系统。您可以创建多个 Stratis 快照。这包括单个原始文件系统或者另一个快照文件系统的快照。如果文件系统是一个快照,则其 origin 字段将在详细的文件系统列表中显示其原始文件系统的 UUID。
24.3. 访问 Stratis 快照的内容 复制链接链接已复制到粘贴板!
您可以挂载 Stratis 文件系统的快照,使其可被读写。
先决条件
-
Stratis 已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 您已创建了 Stratis 快照。如需更多信息,请参阅 创建 Stratis 快照。
流程
要访问快照,请将其作为常规文件系统挂载到
/dev/stratis/my-pool/目录:# mount /dev/stratis/my-pool/my-fs-snapshot mount-point
24.4. 将 Stratis 文件系统恢复到以前的快照 复制链接链接已复制到粘贴板!
您可以将 Stratis 文件系统的内容恢复回 Stratis 快照中捕获的状态。
先决条件
-
Stratis 已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 您已创建了 Stratis 快照。如需更多信息,请参阅 创建 Stratis 快照。
流程
可选:备份文件系统的当前状态,以便以后可以访问它:
# stratis filesystem snapshot my-pool my-fs my-fs-backup计划将文件系统的恢复回之前创建的快照:
# stratis filesystem schedule-revert my-pool my-fs-snapshot可选:运行以下命令检查恢复是否被成功安排:
# stratis filesystem list my-pool --name my-fs-snapshot UUID: b14987eb-b735-4c68-8962-f53f6b644cbc Name: my-fs-snapshot Pool: my-pool Device: /dev/stratis/p1/my-fs-snapshot Created: Mar 18 2025 12:29 Snapshot origin: f5a881b1-299d-4147-8ead-b4a56c623692 Revert scheduled: Yes Sizes: Logical size of thin device: 1 TiB Total used (including XFS metadata): 5.42 GiB Free: 1018.58 GiB注意无法将多个恢复操作安排给同一原始文件系统。另外,如果您尝试销毁原始文件系统,或者安排了恢复的快照,则销毁操作会失败。
您也可以在重启池之前随时取消恢复操作:
# stratis filesystem cancel-revert my-pool my-fs-snapshot您可以运行以下命令来检查取消是否被成功安排:
# stratis filesystem list my-pool --name my-fs-snapshot UUID: b14987eb-b735-4c68-8962-f53f6b644cbc Name: my-fs-snapshot Pool: my-pool Device: /dev/stratis/p1/my-fs-snapshot Created: Mar 18 2025 12:29 Snapshot origin: f5a881b1-299d-4147-8ead-b4a56c623692 Revert scheduled: No Sizes: Logical size of thin device: 1 TiB Total used (including XFS metadata): 5.42 GiB Free: 1018.58 GiB Size Limit: None如果没有取消,则安排的恢复将在重启池时继续执行:
# stratis pool stop --name my-pool # stratis pool start --name my-pool
验证
列出属于池的文件系统:
# stratis filesystem list my-pool
my-fs-snapshot 现在不会出现在池中的文件系统的列表中,因为它被恢复为之前复制的 my-fs-snapshot 状态。名为 my-fs 的文件系统的内容现在与快照 my-fs-snapshot 相同。
24.5. 删除 Stratis 快照 复制链接链接已复制到粘贴板!
您可以从池中删除 Stratis 快照。快照中的数据会丢失。
先决条件
-
Stratis 已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 您已创建了 Stratis 快照。如需更多信息,请参阅 创建 Stratis 快照。
流程
卸载快照:
# umount /dev/stratis/my-pool/my-fs-snapshot销毁快照:
# stratis filesystem destroy my-pool my-fs-snapshot
第 25 章 删除 Stratis 文件系统 复制链接链接已复制到粘贴板!
您可以删除现有的 Stratis 文件系统或池。删除 Stratis 文件系统或池后,无法恢复它们。
25.1. 删除 Stratis 文件系统 复制链接链接已复制到粘贴板!
您可以删除现有的 Stratis 文件系统。保存的数据会丢失。
先决条件
-
Stratis 已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 - 您已创建了 Stratis 文件系统。如需更多信息,请参阅 创建 Stratis 文件系统。
流程
卸载文件系统:
# umount /dev/stratis/my-pool/my-fs销毁文件系统:
# stratis filesystem destroy my-pool my-fs
验证
验证文件系统不再存在:
# stratis filesystem list my-pool
25.2. 使用 Web 控制台从 Stratis 池中删除文件系统 复制链接链接已复制到粘贴板!
您可以使用 Web 控制台从现有 Stratis 池中删除一个文件系统。
删除 Stratis 池文件系统会删除其包含的所有数据。
先决条件
您已安装了 RHEL 10 web 控制台。
具体说明请参阅安装并启用 Web 控制台。
Stratis 已安装,
stratisd服务正在运行。默认情况下,web 控制台会检测并安装 Stratis。但是,要手动安装 Stratis,请参阅 安装 Stratis。
- 您有一个现有的 Stratis 池,且已在 Stratis 池上创建了一个文件系统。
流程
- 登录到 RHEL 10 web 控制台。
- 点 。
- 在 Storage 表中,点击您要从中删除文件系统的 Stratis 池。
- 在 Stratis pool 页面中,滚动到 Stratis filesystems 部分,然后点击您要删除的文件系统的菜单按钮 。
- 从下拉菜单中选择 。
- 在 Confirm deletion 对话框中,单击 。
25.3. 删除 Stratis 池 复制链接链接已复制到粘贴板!
您可以删除现有的 Stratis 池。保存的数据会丢失。
先决条件
-
Stratis 已安装,
stratisd服务正在运行。如需更多信息,请参阅 安装 Stratis。 您已创建了 Stratis 池:
- 要创建未加密的池,请参阅 创建未加密的 Stratis 池。
- 要创建加密的池,请参阅 使用内核 keyring 中的密钥创建加密的 Stratis 池。
流程
列出池中的文件系统:
# stratis filesystem list my-pool卸载池中的所有文件系统:
# umount /dev/stratis/my-pool/my-fs-1 \ /dev/stratis/my-pool/my-fs-2 \ /dev/stratis/my-pool/my-fs-n销毁文件系统:
# stratis filesystem destroy my-pool my-fs-1 my-fs-2销毁池:
# stratis pool destroy my-pool
验证
验证池不再存在:
# stratis pool list
25.4. 使用 Web 控制台删除 Stratis 池 复制链接链接已复制到粘贴板!
您可以使用 Web 控制台删除现有的 Stratis 池。
删除 Stratis 池会删除其包含的所有数据。
先决条件
您已安装了 RHEL 10 web 控制台。
具体说明请参阅安装并启用 Web 控制台。
-
stratisd服务在运行。 - 您有一个现有的 Stratis 池。
流程
- 登录到 RHEL 10 web 控制台。
- 点 。
- 在 Storage 表中,点您要删除的 Stratis 池的菜单按钮 。
- 从下拉菜单中选择 。
- 在 Permanently delete pool 对话框中,单击 。