Red Hat Training

A Red Hat training course is available for RHEL 8

第 21 章 使用 Stratis 管理分层本地存储

您可以轻松设置和管理由 Stratis 高级系统集成的复杂存储配置。

重要

Stratis 只是一个技术预览功能。技术预览功能不被红帽产品服务等级协议(SLA)支持,且可能无法完成功能。红帽不建议在生产环境中使用它们。这些功能使用户能够早期访问即将推出的产品功能,让客户能够在开发过程中测试并提供反馈。有关红帽技术预览功能支持范围的更多信息,请参阅 https://access.redhat.com/support/offerings/techpreview

21.1. 设置 Stratis 文件系统

Stratis 作为服务运行,以管理物理存储设备池,通过易于使用简化本地存储管理,同时帮助您设置和管理复杂存储配置。

21.1.1. 什么是 Stratis

Stratis 是 Linux 的本地存储管理解决方案。它着重说明简单性和易用性,并可让您访问高级存储功能。

Stratis 使以下操作更为容易:

  • 存储的初始配置
  • 稍后进行修改
  • 使用高级存储功能

Stratis 是一个支持高级存储功能的混合用户和内核本地存储管理系统。Stratis 的核心概念是一个存储。这个池是从一个或多个本地磁盘或分区创建,卷是从池中创建的。

池启用了许多有用的功能,例如:

  • 文件系统快照
  • 精简置备
  • 等级

其它资源

21.1.2. Stratis 卷的组件

了解组成 Stratis 卷的组件。

另外,Stratis 在命令行界面和 API 中显示以下卷组件:

blockdev
块设备,如磁盘或者磁盘分区。
pool

由一个或多个块设备组成。

池有固定大小,与块设备的大小相等。

该池包含大多数 Stratis 层,如使用 dm-cache 目标的非易失性数据缓存。

Stratis 为每个池创建一个 /dev/stratis/my-pool/ 目录。这个目录包含了到代表池里 Stratis 文件系统的设备的链接。

filesystem

每个池可以包含一个或多个文件系统来存储文件。

文件系统会被精简置备,且没有固定的总大小。文件系统的实际大小随着保存着文件系统中的数据而增长。如果数据的大小接近文件系统的虚拟大小,Sratis 将自动增大精简卷和文件系统。

文件系统使用 XFS 格式化。

重要

Stratis 跟踪关于使用 Stratis 创建的文件系统的信息,但 XFS 不了解,并且使用 XFS 进行的更改不会在 Stratis 中自动创建更新。用户不得重新格式化或重新配置由 Stratis 管理的 XFS 文件系统。

Stratis 在 /dev/stratis/my-pool/my-fs 路径创建到文件系统的链接。

注意

Stratis 使用很多设备映射器设备,可在 dmsetup 列表和 /proc/partitions 文件中显示。同样,lsblk 命令输出反映了 Stratis 的内部工作和层。

21.1.3. 可用于 Stratis 的块设备

可与 Stratis 一起使用的存储设备.

支持的设备

Stratis 池已被测试以可用于这些块设备:

  • LUKS
  • LVM 逻辑卷
  • MD RAID
  • DM Multipath
  • iSCSI
  • HDD 和 SSD
  • NVMe 设备
不支持的设备

因为 Stratis 包含精简置备层,因此红帽不推荐将 Stratis 池放在已经精简置备的块设备中。

21.1.4. 安装 Stratis

安装 Stratis 所需的软件包。

流程

  1. 安装提供 Stratis 服务和命令行工具的软件包:

    # yum install stratisd stratis-cli
  2. 确保启用了 stratisd 服务:

    # systemctl enable --now stratisd

21.1.5. 创建未加密的 Stratis 池

您可以从一个或多个块设备创建未加密的 Stratis 池。

先决条件

  • 已安装 Stratis。如需更多信息,请参阅安装 Stratis
  • stratisd 服务正在运行。
  • 创建 Stratis 池的块设备没有被使用,且没有被挂载。
  • 创建 Stratis 池的每个块设备至少为 1 GB。
  • 在 IBM Z 构架中,/dev/dasd* 块设备必须被分区。使用 Stratis 池中的分区。

有关分区 DASD 设备的详情,请参考在 IBM Z 中配置 Linux 实例

注意

您无法加密未加密的 Stratis 池。

流程

  1. 删除您要在 Stratis 池中使用的每个块设备上存在的任何文件系统、分区表或 RAID 签名:

    # wipefs --all block-device

    其中 block-device 是块设备的路径,例如: /dev/sdb

  2. 在所选块设备中创建新的未加密 Stratis 池:

    # stratis pool create my-pool block-device

    其中 block-device 是到空或有线块设备的路径。

    注意

    在一行中指定多个块设备:

    # stratis pool create my-pool block-device-1 block-device-2
  3. 确认创建了新的 Stratis 池:

    # stratis pool list

21.1.6. 创建加密的 Stratis 池

要保护您的数据,您可以从一个或多个块设备创建一个加密的 Stratis 池。

当您创建加密的 Stratis 池时,内核密钥环将用作主加密机制。后续系统重启此内核密钥环后,用于解锁加密的 Stratis 池。

在从一个或多个块设备创建加密的 Stratis 池时,请注意以下几点:

  • 每个块设备都使用 cryptsetup 库加密,并实施 LUKS2 格式。
  • 每个 Stratis 池都可以具有唯一密钥,或者与其他池共享相同的密钥。这些密钥保存在内核密钥环中。
  • 组成 Stratis 池的块设备必须全部加密或者全部未加密。不可能同时在同一个 Stratis 池中加密和未加密块设备。
  • 添加到加密 Stratis 池的数据层中的块设备会自动加密。

先决条件

  • 已安装 Stratis v2.1.0 或更高版本。如需更多信息,请参阅安装 Stratis
  • stratisd 服务正在运行。
  • 创建 Stratis 池的块设备没有被使用,且没有被挂载。
  • 创建 Stratis 池的块设备至少为 1GB。
  • 在 IBM Z 构架中,/dev/dasd* 块设备必须被分区。使用 Stratis 池中的分区。

有关分区 DASD 设备的详情,请参考在 IBM Z 中配置 Linux 实例

流程

  1. 删除您要在 Stratis 池中使用的每个块设备上存在的任何文件系统、分区表或 RAID 签名:

    # wipefs --all block-device

    其中 block-device 是块设备的路径,例如: /dev/sdb

  2. 如果您还没有创建密钥集,请运行以下命令并按照提示创建用于加密的密钥集。

    # stratis key set --capture-key key-description

    其中 key-description 是内核密钥环中创建的密钥的引用。

  3. 创建加密的 Stratis 池并指定用于加密的密钥描述。您还可以使用 --keyfile-path 选项指定密钥路径,而不是使用 key-description 选项。

    # stratis pool create --key-desc key-description my-pool block-device

    其中

    key-description
    引用您在上一步中创建的内核密钥环中存在的密钥。
    my-pool
    指定新的 Stratis 池的名称。
    block-device

    指定到空或者有线块设备的路径。

    注意

    在一行中指定多个块设备:

    # stratis pool create --key-desc key-description my-pool block-device-1 block-device-2
  4. 确认创建了新的 Stratis 池:

    # stratis pool list

21.1.7. 将 Stratis 池绑定到 NBDE

将加密的 Stratis 池绑定到网络绑定磁盘加密(NBDE)需要 Tang 服务器。当包含 Stratis 池的系统重启时,它与 Tang 服务器连接,以自动解锁加密的池,而无需提供内核密钥环描述。

注意

将 Stratis 池绑定到补充 Clevis 加密机制不会删除主内核密钥环加密。

先决条件

流程

  • 将加密的 Stratis 池绑定到 NBDE:

    # stratis pool bind nbde my-pool key-description tang-server

    其中

    my-pool
    指定加密的 Stratis 池的名称。
    key-description
    引用内核密钥环中存在的密钥,该密钥是在您创建加密的 Stratis 池时生成的。
    tang-server
    指定 Tang 服务器的 IP 地址或 URL。

21.1.8. 将 Stratis 池绑定到 TPM

当您将加密的 Stratis 池绑定到 Trusted Platform 模块(TPM) 2.0 时,当包含池的系统重启时,池会自动解锁,而无需提供内核密钥环描述。

先决条件

流程

  • 将加密的 Stratis 池绑定到 TPM:

    # stratis pool bind tpm my-pool key-description

    其中

    my-pool
    指定加密的 Stratis 池的名称。
    key-description
    引用内核密钥环中存在的密钥,该密钥是在您创建加密的 Stratis 池时生成的。

21.1.9. 使用内核密钥环解加密的 Stratis 池

系统重启后,您的加密 Stratis 池或组成它的块设备可能无法看到。您可以使用用于加密池的内核密钥环来解锁池。

先决条件

流程

  1. 使用之前使用的相同密钥描述重新创建密钥集:

    # stratis key set --capture-key key-description

    其中key-description 引用内核密钥环中存在的密钥,该密钥是在创建加密的 Stratis 池时生成的。

  2. 解锁 Stratis 池以及组成它的块设备:

    # stratis pool unlock keyring
  3. 验证 Stratis 池是可见的:

    # stratis pool list

21.1.10. 使用 Clevis 解锁加密的 Stratis 池

系统重启后,您的加密 Stratis 池或组成它的块设备可能无法看到。您可以使用池绑定到的附加加密机制解锁加密的 Stratis 池。

先决条件

流程

  1. 解锁 Stratis 池以及组成它的块设备:

    # stratis pool unlock clevis
  2. 验证 Stratis 池是可见的:

    # stratis pool list

21.1.11. 从补充加密中取消绑定 Stratis 池

当您从支持的附加加密机制中取消加密的 Stratis 池时,主内核密钥环加密仍会生效。

先决条件

流程

  • 从补充加密机制中取消分离加密的 Stratis 池:

    # stratis pool unbind clevis my-pool

    其中

    my-pool 指定您要取消bind 的 Stratis 池的名称。

21.1.12. 创建 Stratis 文件系统

在现有 Stratis 池中创建 Stratis 文件系统。

先决条件

流程

  1. 要在池中创建 Stratis 文件系统,请使用:

    # stratis fs create my-pool my-fs

    其中

    my-pool
    指定 Stratis 池的名称。
    my-fs
    为文件系统指定一个任意名称。
  2. 要验证,列出池中的文件系统:

    # stratis fs list my-pool

21.1.13. 挂载 Stratis 文件系统

挂载现有的 Stratis 文件系统以访问其内容。

先决条件

流程

  • 要挂载文件系统,使用 Stratis 在 /dev/stratis/ 目录中维护的条目:

    # mount /dev/stratis/my-pool/my-fs mount-point

现在该文件系统被挂载到 mount-point 目录中并可使用。

21.1.14. 永久挂载 Stratis 文件系统

这个过程永久挂载 Stratis 文件系统,以便在引导系统后自动可用。

先决条件

流程

  1. 确定文件系统的 UUID 属性:

    $ lsblk --output=UUID /stratis/my-pool/my-fs

    例如:

    例 21.1. 查看 Stratis 文件系统的 UUID

    $ lsblk --output=UUID /stratis/my-pool/fs1
    
    UUID
    a1f0b64a-4ebb-4d4e-9543-b1d79f600283
  2. 如果挂载点目录不存在,请创建它:

    # mkdir --parents mount-point
  3. 以 root 用户身份,编辑 /etc/fstab 文件并为文件系统添加一行,由 UUID 标识。使用 xfs 作为文件系统类型并添加 x-systemd.requires=stratisd.service 选项。

    例如:

    例 21.2. /etc/fstab 中的 /fs1 挂载点

    UUID=a1f0b64a-4ebb-4d4e-9543-b1d79f600283 /fs1 xfs defaults,x-systemd.requires=stratisd.service 0 0
  4. 重新生成挂载单元以便您的系统注册新配置:

    # systemctl daemon-reload
  5. 尝试挂载文件系统来验证配置是否正常工作:

    # mount mount-point

21.2. 使用额外块设备扩展 Stratis 卷

您可以在 Stratis 池中添加附加块设备以便为 Stratis 文件系统提供更多存储容量。

21.2.1. Stratis 卷的组件

了解组成 Stratis 卷的组件。

另外,Stratis 在命令行界面和 API 中显示以下卷组件:

blockdev
块设备,如磁盘或者磁盘分区。
pool

由一个或多个块设备组成。

池有固定大小,与块设备的大小相等。

该池包含大多数 Stratis 层,如使用 dm-cache 目标的非易失性数据缓存。

Stratis 为每个池创建一个 /dev/stratis/my-pool/ 目录。这个目录包含了到代表池里 Stratis 文件系统的设备的链接。

filesystem

每个池可以包含一个或多个文件系统来存储文件。

文件系统会被精简置备,且没有固定的总大小。文件系统的实际大小随着保存着文件系统中的数据而增长。如果数据的大小接近文件系统的虚拟大小,Sratis 将自动增大精简卷和文件系统。

文件系统使用 XFS 格式化。

重要

Stratis 跟踪关于使用 Stratis 创建的文件系统的信息,但 XFS 不了解,并且使用 XFS 进行的更改不会在 Stratis 中自动创建更新。用户不得重新格式化或重新配置由 Stratis 管理的 XFS 文件系统。

Stratis 在 /dev/stratis/my-pool/my-fs 路径创建到文件系统的链接。

注意

Stratis 使用很多设备映射器设备,可在 dmsetup 列表和 /proc/partitions 文件中显示。同样,lsblk 命令输出反映了 Stratis 的内部工作和层。

21.2.2. 在 Stratis 池中添加块设备

此流程在 Stratis 池中添加一个或多个块设备,供 Stratis 文件系统使用。

先决条件

  • 已安装 Stratis。请参阅 第 21.1.4 节 “安装 Stratis”
  • stratisd 服务正在运行。
  • 要添加到 Stratis 池中的块设备不会被使用且没有挂载。
  • 要添加到 Stratis 池中的块设备的大小至少为 1 GiB。

流程

  • 要在池中添加一个或多个块设备,请使用:

    # stratis pool add-data my-pool device-1 device-2 device-n

其它资源

  • stratis(8) man page

21.3. 监控 Stratis 文件系统

作为 Stratis 用户,您可以查看系统中 Stratis 卷的信息,以监控其状态和剩余空间。

21.3.1. 不同工具报告的 Stratis 大小

本节解释了标准工具(如 dfstratis 实用程序)报告的 Stratis 大小之间的差别。

标准 Linux 工具(如 df )报告 Stratis 中的 XFS 文件系统层大小,即 1 TiB。这不是有用的信息,因为 Stratis 的实际存储使用较少,因为精简配置也会导致 Stratis 在 XFS 层接近满时自动增大文件系统。

重要

定期监控写入 Stratis 文件系统的数据量,它报告为物理使用总数。请确定没有超过总计物理大小值。

其它资源

  • stratis(8) man page

21.3.2. 显示关于 Stratis 卷的信息

此流程列出了您的 Stratis 卷的统计信息,如总数、使用量、可用大小、文件系统以及属于池中的块设备。

先决条件

流程

  • 要显示系统中用于 Stratis 的所有块设备的信息:

    # stratis blockdev
    
    Pool Name  Device Node    Physical Size   State  Tier
    my-pool    /dev/sdb            9.10 TiB  In-use  Data
  • 显示系统中所有 Stratis 的信息:

    # stratis pool
    
    Name    Total Physical Size  Total Physical Used
    my-pool            9.10 TiB              598 MiB
  • 显示系统中所有 Stratis 文件系统的信息:

    # stratis filesystem
    
    Pool Name  Name  Used     Created            Device
    my-pool    my-fs 546 MiB  Nov 08 2018 08:03  /dev/stratis/my-pool/my-fs

其它资源

  • stratis(8) man page

21.4. 在 Stratis 文件系统中使用快照

您可以使用 Stratis 文件系统的快照任意时间捕获文件系统状态,并在以后恢复它。

21.4.1. Stratis 快照的特性

这部分论述了 Stratis 中文件系统快照的属性和局限性。

在 Stratis 中,快照是作为另一个 Stratis 文件系统的副本创建的常规 Stratis 文件系统。快照最初包含的文件内容与原始文件系统相同,但可能会随着快照的修改而更改。您对快照所做的任何修改都不会反映在原始文件系统中。

Stratis 中的当前快照实现的特征如下:

  • 文件系统快照是另一个文件系统。
  • 快照及其原始卷在生命周期中不会被链接。快照的文件系统可以比它从中创建的文件系统更长。
  • 文件系统不一定被挂载来生成快照。
  • 每个快照使用大约一半的实际后备存储,这是 XFS 日志所需要的。

21.4.2. 创建 Stratis 快照

这个过程会创建一个 Stratis 文件系统作为现有 Stratis 文件系统的快照。

先决条件

流程

  • 要创建 Stratis 快照,请使用:

    # stratis fs snapshot my-pool my-fs my-fs-snapshot

其它资源

  • stratis(8) man page

21.4.3. 访问 Stratis 快照的内容

这个过程挂载 Stratis 文件系统的快照,使其可在读写操作中访问。

先决条件

流程

  • 要访问快照,请将其作为常规文件系统挂载到 /dev/stratis/my-pool/ 目录中:

    # mount /dev/stratis/my-pool/my-fs-snapshot mount-point

21.4.4. 将 Stratis 文件系统恢复到以前的快照

这个过程将 Stratis 文件系统的内容恢复到 Stratis 快照中捕获的状态。

先决条件

流程

  1. 另外,还可备份文件系统的当前状态以便在以后访问它:

    # stratis filesystem snapshot my-pool my-fs my-fs-backup
  2. 卸载并删除原始文件系统:

    # umount /dev/stratis/my-pool/my-fs
    # stratis filesystem destroy my-pool my-fs
  3. 在原始文件系统名称下创建快照副本:

    # stratis filesystem snapshot my-pool my-fs-snapshot my-fs
  4. 挂载快照,它现在可以和原始文件系统的名称相同:

    # mount /dev/stratis/my-pool/my-fs mount-point

名为 my-fs 的文件系统的内容与快照 my-fs-snapshot 一致。

其它资源

  • stratis(8) man page

21.4.5. 删除 Stratis 快照

这个过程从池中删除 Stratis 快照。快照中的数据会丢失。

先决条件

流程

  1. 卸载快照:

    # umount /dev/stratis/my-pool/my-fs-snapshot
  2. 销毁快照:

    # stratis filesystem destroy my-pool my-fs-snapshot

其它资源

  • stratis(8) man page

21.5. 删除 Stratis 文件系统

您可以删除现有 Stratis 文件系统或 Stratis 池,销毁其中的数据。

21.5.1. Stratis 卷的组件

了解组成 Stratis 卷的组件。

另外,Stratis 在命令行界面和 API 中显示以下卷组件:

blockdev
块设备,如磁盘或者磁盘分区。
pool

由一个或多个块设备组成。

池有固定大小,与块设备的大小相等。

该池包含大多数 Stratis 层,如使用 dm-cache 目标的非易失性数据缓存。

Stratis 为每个池创建一个 /dev/stratis/my-pool/ 目录。这个目录包含了到代表池里 Stratis 文件系统的设备的链接。

filesystem

每个池可以包含一个或多个文件系统来存储文件。

文件系统会被精简置备,且没有固定的总大小。文件系统的实际大小随着保存着文件系统中的数据而增长。如果数据的大小接近文件系统的虚拟大小,Sratis 将自动增大精简卷和文件系统。

文件系统使用 XFS 格式化。

重要

Stratis 跟踪关于使用 Stratis 创建的文件系统的信息,但 XFS 不了解,并且使用 XFS 进行的更改不会在 Stratis 中自动创建更新。用户不得重新格式化或重新配置由 Stratis 管理的 XFS 文件系统。

Stratis 在 /dev/stratis/my-pool/my-fs 路径创建到文件系统的链接。

注意

Stratis 使用很多设备映射器设备,可在 dmsetup 列表和 /proc/partitions 文件中显示。同样,lsblk 命令输出反映了 Stratis 的内部工作和层。

21.5.2. 删除 Stratis 文件系统

这个过程删除现有的 Stratis 文件系统。保存的数据会丢失。

先决条件

流程

  1. 卸载文件系统:

    # umount /dev/stratis/my-pool/my-fs
  2. 销毁文件系统:

    # stratis filesystem destroy my-pool my-fs
  3. 验证文件系统不再存在:

    # stratis filesystem list my-pool

其它资源

  • stratis(8) man page

21.5.3. 删除 Stratis 池

此流程删除现有的 Stratis 池。保存的数据会丢失。

先决条件

流程

  1. 列出池中的文件系统:

    # stratis filesystem list my-pool
  2. 卸载池中的所有文件系统:

    # umount /dev/stratis/my-pool/my-fs-1 \
             /dev/stratis/my-pool/my-fs-2 \
             /dev/stratis/my-pool/my-fs-n
  3. 销毁文件系统:

    # stratis filesystem destroy my-pool my-fs-1 my-fs-2
  4. 销毁池:

    # stratis pool destroy my-pool
  5. 验证池不再存在:

    # stratis pool list

其它资源

  • stratis(8) man page