Menu Close

管理存储设备

Red Hat Enterprise Linux 9

在 Red Hat Enterprise Linux 9 中部署和配置单节点存储

摘要

本文档提供了有关如何在 Red Hat Enterprise Linux 9 中有效管理存储设备的说明。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息

对红帽文档提供反馈

我们感谢您对文档提供反馈信息。请让我们了解如何改进文档。

  • 关于特定内容的简单评论:

    1. 请确定您使用 Multi-page HTML 格式查看文档。另外,确定 Feedback 按钮出现在文档页的右上方。
    2. 用鼠标指针高亮显示您想评论的文本部分。
    3. 点在高亮文本上弹出的 Add Feedback
    4. 按照显示的步骤操作。
  • 要通过 Bugzilla 提交反馈,请创建一个新的 ticket:

    1. 进入 Bugzilla 网站。
    2. 在 Component 中选择 Documentation
    3. Description 中输入您要提供的信息。包括文档相关部分的链接。
    4. Submit Bug

第 1 章 可用存储选项概述

Red Hat Enterprise Linux 8 中提供了几个本地、远程和基于集群的存储选项。

本地存储意味着存储设备安装在系统上,或者直接附加到系统。

使用远程存储时,设备可以通过 LAN、互联网或使用光纤通道网络进行访问。以下高级别 Red Hat Enterprise Linux 存储图描述了不同的存储选项。

图 1.1. Red Hat Enterprise Linux 存储图

高级别 RHEL 存储图

1.1. 本地存储概述

Red Hat Enterprise Linux 9 提供多个本地存储选项。

基本磁盘管理

使用 partedfdisk,您可以创建、修改、删除和查看磁盘分区。以下是分区布局标准:

主引导记录(MBR)
它用于基于 BIOS 的计算机。您可以创建主分区、扩展分区及逻辑分区。
GUID 分区表(GPT)
它使用全局唯一标识符(GUID)并提供唯一的磁盘和分区 GUID。

要加密分区,您可以使用 Linux Unified Key Setup-on-disk-format(LUKS)。要加密分区,选择安装过程中的选项,系统会显示输入密码短语的提示。这个密码短语用于解锁加密密钥。

存储消耗选项
Non-Volatile Dual In-line Memory Modules(NVDIMM)管理
它是内存和存储的组合。您可以在连接到您的系统的 NVDIMM 设备中启用和管理各种存储类型。
块存储管理
数据以块形式存储,每个块都有唯一的标识符。
文件存储
数据存储在本地系统中的文件级别。这些数据可使用 XFS(默认)或者 ext4 本地访问,并使用 NFS 和 SMB 通过网络访问。
逻辑卷
逻辑卷管理器(LVM)

它从物理设备中创建逻辑设备。逻辑卷(LV)是物理卷(PV)和卷组(VG)的组合。配置 LVM 包括:

  • 从硬盘创建 PV。
  • 从 PV 创建 VG。
  • 从 VG 创建 LV,分配挂载点到 LV。
Virtual Data Optimizer(VDO)

它被用来通过重复数据删除(deduplication)、压缩和精简置备来减少数据。在 LV 下使用 VDO 可以帮助:

  • 扩展 VDO 卷
  • 通过多个设备生成 VDO 卷
本地文件系统
XFS
默认 RHEL 文件系统。
ext4
传统的文件系统。
Stratis
它只是一个技术预览。Stratis 是一个支持高级存储功能的混合用户和内核本地存储管理系统。

1.2. 远程存储概述

以下是 Red Hat Enterprise Linux 8 中的远程存储选项:

存储连接选项
iSCSI
RHEL 9 使用 targetcli 工具来添加、删除、查看和监控 iSCSI 存储间的连接。
光纤频道(FC)

RHEL 9 提供以下原生 Fibre Channel 驱动程序:

  • lpfc
  • qla2xxx
  • Zfcp
Non-volatile Memory Express(NVMe)

允许主机软件实用程序与固态驱动器进行通信的接口。使用以下类型的光纤传输来通过光纤配置 NVMe:

  • 使用 Remote Direct Memory Access(RDMA)的 NVMe over fabrics。
  • 使用光纤通道(FC)的 NVMe over fabrics
设备映射器多路径(DM 多路径)
允许您将服务器节点和存储阵列间的多个 I/O 路径配置为单一设备。这些 I/O 路径是可包含独立电缆、交换机和控制器的物理 SAN 连接。
网络文件系统
  • NFS
  • SMB

1.3. GFS2 文件系统概述

Red Hat Global File System 2 (GFS2) 是一个 64 位对称集群文件系统,它提供了一个共享名称空间,并管理共享一个常见块设备的多个节点间的一致性。GFS2 文件系统旨在提供尽量与本地文件系统类似的功能,同时在节点间强制实施完整集群一致性。为达到此目的,节点在文件系统资源中使用集群范围的锁定方案。这个锁定方案使用 TCP/IP 等通讯协议来交换锁定信息。

在某些情况下,Linux 文件系统 API 不允许具有集群特性的 GFS2 完全透明。例如,在 GFS2 中使用 POSIX 锁定的程序应该避免使用 GETLK 功能,因为在集群的环境中,该进程 ID 可能用于集群中的不同节点。然而,多数情况下 GFS2 文件系统的功能和本地文件系统的功能是一样的。

Red Hat Enterprise Linux Resilient Storage Add-On 提供 GFS2,它依赖于 Red Hat Enterprise Linux High Availability 附加组件来提供 GFS2 所需的集群管理。

gfs2.ko 内核模块实现 GFS2 文件系统,并加载在 GFS2 集群节点上。

要获得最佳 GFS2 性能,请务必考虑基础设计中给出的性能注意事项。和本地文件系统一样,GFS2 依赖于页面缓存以便通过本地缓存来提高经常使用数据的性能。为了在集群中的节点间保持一致性,缓存控制由 glock 状态机器提供。

1.4. Gluster Storage 概述

Red Hat Gluster Storage(RHGS)是一个软件定义的存储平台,可在集群中部署。它将多个服务器的磁盘存储资源整合到单一全局命名空间中。GlusterFS 是一个开源分布式文件系统,适用于云和混合解决方案。

卷构成 GlusterFS 的基础,并提供不同的要求。每个卷是 brick 的集合,它们是存储的基本单元,由受信存储池中的导出目录代表。

可用的 GlusterFS 卷类型如下:

  • 分布式 GlusterFS 卷 是默认卷,其中每个文件存储在一个 brick 中,且文件无法在不同的 brick 之间共享。
  • 复制的 GlusterFS 卷类型 复制用户数据,以便在一个 brick 失败时,仍可以访问这些数据。
  • 分布式复制 GlusterFS 卷 是一个混合卷,可将副本分布到大量系统中。它适用于存储可扩展性和高可靠性至关重要的环境。

1.5. Ceph Storage 概述

Red Hat Ceph Storage (RHCS) 是一个可扩展、开放、软件定义的存储平台,它将最稳定版本的 Ceph 存储系统与 Ceph 管理平台、部署实用程序和支持服务相结合。

Red Hat Ceph Storage 专为云基础架构和 Web 规模对象存储而设计。Red Hat Ceph Storage 集群由以下类型的节点组成:

Red Hat Ceph Storage Ansible 管理节点

此类节点充当之前版本的 Red Hat Ceph Storage 的传统 Ceph 管理节点。这种类型的节点提供以下功能:

  • 集中存储集群管理
  • Ceph 配置文件和密钥
  • (可选)用于在因安全原因无法访问互联网的节点上安装 Ceph 的本地存储库。
监控节点

每个监控节点运行 monitor 守护进程(ceph-mon),后者维护 cluster map 的副本。集群映射包含集群拓扑。连接 Ceph 集群的客户端从 monitor 中检索 cluster map 的当前副本,使客户端能够从集群读取和写入数据。

重要

Ceph 可以使用一个监控器运行;但是,为了保证生产环境集群中的高可用性,红帽将仅支持具有至少三个 monitor 节点的部署。红帽建议为超过 750 OSD 的存储集群部署总计 5 个 Ceph Monitor。

OSD 节点

每个对象存储设备(OSD)节点运行 Ceph OSD 守护进程(ceph-osd),它与附加到节点的逻辑卷交互。Ceph 在这些 OSD 节点上存储数据。

Ceph 可在只有很少 OSD 节点的环境中运行,默认为三个。但对于生产环境,自中等范围环境开始(例如,在一个存储集群中包括 50 个 OSD)才可能看到其在性能方面的优势。理想情况下,Ceph 集群具有多个 OSD 节点,通过创建 CRUSH map 来允许隔离的故障域。

MDS 节点
每个元数据服务器(MDS)节点运行 MDS 守护进程(ceph-mds),后者管理与 Ceph 文件系统(CephFS)中存储的文件相关的元数据。MDS 守护进程也协调对共享集群的访问。
对象网关节点
Ceph 对象网关节点运行 Ceph RADOS 网关守护进程(ceph-radosgw),它是构建于 librados 上的对象存储接口,为应用提供 Ceph 存储群集的 RESTful 网关。Ceph 对象网关支持两个接口:
S3
通过与 Amazon S3 RESTful API 的大子集兼容的接口提供对象存储功能。
Swift
通过与 OpenStack Swift API 的大集兼容的接口提供对象存储功能。

其他资源

第 2 章 磁盘分区

要将磁盘分成一个或多个逻辑区域,请使用磁盘分区实用程序。这可以对每个分区进行独立的管理。

2.1. 分区概述

硬盘在分区表中保存每个磁盘分区的位置和大小信息。使用分区表中的信息,操作系统会将每个分区视为一个逻辑磁盘。磁盘分区的一些优点包括:

  • 减少对物理卷的管理
  • 保证有足够的备份
  • 提供有效的磁盘管理

2.2. 修改磁盘分区前的注意事项

在创建、删除或调整任何磁盘分区的大小之前,请考虑以下方面:

在设备中,分区表的类型决定单个分区的最大数目和大小。

最大分区数:

  • 在使用主引导记录(MBR) 分区表格式化的设备上,您可以有:

    • 最多四个主分区。
    • 最多三个主分区,再加上一个扩展分区

      • 扩展分区中可以有多个逻辑分区
  • 在使用 GUID 分区表(GPT) 格式化的设备中,您可以:

    • 使用 parted 实用程序,最多 128 个分区。

      • 虽然 GPT 规格可以通过增加分区表的保留大小来带有更多分区,当 parted 会限制 128 分区所需的区域。

最大分区大小:

  • 在使用主引导记录(MBR) 分区表格式化的设备中,最大值为 2 TiB。
  • 在使用 GUID 分区表(GPT) 格式化的设备上,最大大小为 8 ZiB。

通过使用 parted 工具,您可以使用多个不同的后缀指定分区大小:

  • MiB、GiB 或 TiB

    • 大小为 2 的指数代表。
    • 分区的起点与根据大小指定的扇区一致。
    • 结束点与指定大小减 1 扇区一致。
  • MB、GB 或 TB

    • 以 10 的指数表示容量。
    • 起点和结束点在指定大小单元的一半内一致。例如,如果后缀是 MB 时为 ±500KB。
注意

本节不涵盖 DASD 分区表,它特定于 IBM Z 构架。

2.3. 分区表类型比较

要在设备中启用分区,使用不同类型的分区表格式化块设备。下表比较您可以在块设备中创建的不同类型的分区表的属性。

表 2.1. 分区表类型

分区表最多分区数最大分区大小

主引导记录(MBR)

4 个主分区,或 3 个主分区和 1 个扩展分区(带有 12 个逻辑分区)

2TiB

GUID 分区表(GPT)

128

8ZiB

2.4. MBR 磁盘分区

分区表保存在磁盘的最开始,任何文件系统或用户数据都会保存在它的后面。为了更明确的显示,下图中的不同分区表分开显示。

图 2.1. 有 MBR 分区表的磁盘

未使用的分区驱动器

如上图所示,分区表被分为四个未使用主分区的四个部分。主分区是在硬盘中只能包含一个逻辑驱动器(或部分)的分区。每个逻辑驱动器都有定义单个分区所需的信息,这意味着分区表可以定义不超过四个主分区。

每个分区表条目都包含分区的重要特性:

  • 磁盘上分区启动和结束的点
  • 分区的状态,因为只有一个分区可以被标记为 活跃分区
  • 分区的类型

起点和结束点定义了磁盘上分区的大小和位置。有些操作系统引导装载程序使用 active 标记。这意味着,在标记为"活跃"的分区中的操作系统被引导。

类型由一个数字代表,用于识别分区预定的使用情况。有些操作系统使用分区类型来:

  • 表示特定的文件系统类型
  • 将分区标记为与特定操作系统关联的
  • 指明分区包含可引导操作系统

下图显示了含有单一分区的驱动器示例:在这个示例中,第一个分区被标记为 DOS 分区类型:

图 2.2. 只有一个分区的磁盘

dos 单个分区

其他资源

2.5. 扩展 MBR 分区

要创建额外分区(如果需要),请将类型设置为 extended

扩展分区类似于磁盘驱动器。它有自己的分区表,指向一个或多个逻辑分区,完全包含在扩展分区中。下图显示了一个磁盘驱动器,它有两个主分区和一个包含两个逻辑分区(以及一些未分区的可用空间)的扩展分区:

图 2.3. 带两个主分区和扩展的 MBR 分区的磁盘

扩展分区

最多只能有 4 个主分区和扩展分区,但逻辑分区的数量没有固定限制。作为 Linux 中的限制访问分区,单一磁盘驱动器允许最多 15 个逻辑分区。

2.6. MBR 分区类型

下表显示了一些最常用的 MBR 分区类型和用于代表它们的十六进制数字。

表 2.2. MBR 分区类型

MBR 分区类型

MBR 分区类型

00

Novell Netware 386

65

DOS 12-bit FAT

01

PIC/IX

75

XENIX root

O2

Old MINIX

80

XENIX usr

O3

Linux/MINUX

81

DOS 16-bit ⇐32M

04

Linux swap

82

Extended

05

Linux native

83

DOS 16-bit >=32

06

Linux extended

85

OS/2 HPFS

07

Amoeba

93

AIX

08

Amoeba BBT

94

AIX bootable

09

BSD/386

a5

OS/2 Boot Manager

0a

OpenBSD

a6

Win95 FAT32

0b

NEXTSTEP

a7

Win95 FAT32(LBA)

0c

BSDI fs

b7

Win95 FAT16(LBA)

0e

BSDI swap

b8

Win95 Extended (LBA)

0f

Syrinx

c7

Venix 80286

40

CP/M

db

Novell

51

DOS access

e1

PRep Boot

41

DOS R/O

e3

GNU HURD

63

DOS secondary

f2

Novell Netware 286

64

BBT

ff

2.7. GUID 分区表

GUID 分区表(GPT)是基于全局唯一标识符(GUID)的分区方案。

GPT 涉及 MBR 分区表的限制。MBR 分区表无法解决大于 2 TiB 的存储,相当于大约 2.2 TB。相反,GPT 支持容量较大的硬盘。默认情况下,可寻址的最大磁盘大小为 2.2 ZiB,默认情况下,GPT 支持创建最多 128 个主分区。这个数字可以通过为分区表分配更多空间来扩展。

注意

GPT 有基于 GUID 的分区类型。某些分区需要特定的 GUID。例如,EFI 引导加载程序的系统分区需要 GUID C12A7328-F81F-11D2-BA4B-00A0C93EC93B

GPT 磁盘使用逻辑块寻址(LBA)和分区布局,如下所示:

  • 为了保持与 MBR 磁盘的向后兼容性,GPT 的第一个扇区(LBA 0)被保留给 MBR 数据,它称为"保护的 MBR"。
  • 主 GPT

    • 标头从设备的第二个逻辑块(LBA 1)开始。标头中包含磁盘 GUID、主分区表的位置、从属 GPT 标头的位置、自身的 CRC32 checksum 以及主分区表。它还指定表上的分区条目数目。
    • 默认情况下,主 GPT 包含 128 个分区条目。每个分区的条目大小为 128 字节、分区类型 GUID 和唯一的分区 GUID。
  • 二级 GPT

    • 对于恢复,当主分区表格损坏时,备份表非常有用。
    • 二级 GPT 头位于磁盘的最后一个逻辑扇区,在主头损坏时可用于恢复 GPT 信息。
    • 它包含:

      • 磁盘 GUID
      • 二级分区表和主 GPT 标头的位置
      • 自身的 CRC32 checksums
      • 二级分区表
      • 可能的分区条目数

图 2.4. 带有 GUID 分区表的磁盘

GPT 分区
重要

对于在 GPT 磁盘上成功安装引导装载程序,必须存在 BIOS 引导分区。如果磁盘已经包含 BIOS 引导分区,则它可以被重复使用。这包括 Anaconda 安装程序初始化的磁盘。

2.8. 分区类型

管理分区类型的方法有多种:

  • fdisk 工具通过指定十六进制代码来支持所有的分区类型。
  • systemd-gpt-auto-generator (单位生成器程序程序)使用分区类型自动识别和挂载设备。
  • parted 实用程序使用 flags 对分区类型进行映射。parted 实用程序处理 onlyceratin 分区类型,如 LVM、swap 或 RAID。

    parted 实用程序支持设置以下标记:

    • boot
    • root
    • swap
    • hidden
    • raid
    • lvm
    • lba
    • legacy_boot
    • irst
    • esp
    • palo

在带有 parted 3.5 的 Red Hat Enterprise Linux 9 中,您可以使用额外的标记 chromeos_kernelbls_boot

parted 工具在创建分区时接受文件系统类型参数。如需所需条件的列表,请参阅使用 parted 创建分区。使用值来:

  • 在 MBR 中设置分区标记。
  • 在 GPT 中设定分区 UUID 类型。例如,swapfathfs 文件系统类型设置不同的 GUID。默认值为 Linux Data GUID。

参数不会修改分区中的文件系统。它只会区分受支持的标志和 GUID。

支持以下文件系统类型:

  • xfs
  • ext2
  • ext3
  • ext4
  • fat16
  • fat32
  • hfs
  • hfs+
  • linux-swap
  • ntfs
  • reiserfs

2.9. 分区命名方案

Red Hat Enterprise Linux 使用基于文件的命名方案,其文件名采用 /dev/xxyN 的形式。

设备和分区名称由以下结构组成:

/dev/
包含所有设备文件的目录的名称。硬盘包含分区,因此代表所有可能分区的文件位于 /dev 中。
xx
分区名的前两个字母标明包含该分区的设备类型。
y
这个字母标明包含分区的特定设备。例如: /dev/sda 用于第一个硬盘,第二个硬盘为 /dev/sdb。您可以在超过 26 个驱动器的系统中使用更多字母,例如 /dev/sdaa1
N
最后的字母代表分区的数字。前四个(主或扩展)分区编号为 14。逻辑分区从 5 开始。例如,/dev/sda3 是第一个硬盘上的第三个主分区或扩展分区,/dev/sdb6 是第二个硬盘上的第二个逻辑分区。驱动器分区编号只适用于 MBR 分区表。请注意,N 并不总是意味着分区。
注意

即使 Red Hat Enterprise Linux 可以识别和引用 所有类型的磁盘分区,它可能无法读取文件系统,因此无法访问分区类型中保存的数据。然而,在很多情况下,成功访问专用于另一个操作系统的分区中的数据是可能的。

2.10. 挂载点和磁盘分区

在 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 分区。

第 3 章 分区入门

使用磁盘分区将磁盘分成一个或多个逻辑区域,这些区域可以单独在每个分区上工作。硬盘在分区表中保存每个磁盘分区的位置和大小信息。使用表,每个分区然后显示为操作系统的逻辑磁盘。然后您可以在这些独立磁盘中进行读取和写入。

有关在块设备中使用分区的优点和缺点的概述,请参阅在 LUN 上使用分区(可以在两者间直接或通过 LVM)使用哪些优点和缺陷?

3.1. 使用 parted 在磁盘中创建分区表

使用 parted 实用程序更轻松地使用分区表格式化块设备。

警告

使用分区表格式化块设备会删除该设备中所有存储的数据。

步骤

  1. 启动交互式 parted shell:

    # parted block-device
  2. 确定该设备中是否已有一个分区表:

    # (parted) print

    如果设备已经包含分区,则后续步骤中将删除它们。

  3. 创建新分区表:

    # (parted) mklabel table-type
    • 使用预期的分区表类型替换 table-type

      • 用于的 MBR 的 msdos
      • 用于 GPT 的 gpt

    例 3.1. 创建 GUID 分区表(GPT)表

    要在磁盘上创建 GPT 表,请使用:

    # (parted) mklabel gpt

    在输入以下命令后,这些更改将开始应用。

  4. 查看分区表以确认其已创建:

    # (parted) print
  5. 退出 parted shell:

    # (parted) quit

其他资源

  • parted(8) 手册页。

3.2. 查看使用 parted 的分区表

显示块设备的分区表,以查看分区布局和单个分区的详情。您可以使用 parted 实用程序查看块设备上的分区表。

步骤

  1. 启动 parted 工具。例如:以下输出列出了设备 /dev/sda

    # parted /dev/sda
  2. 查看分区表:

    # (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
  3. 可选:切换到您要检查的下一个设备:

    # (parted) select block-device

有关打印命令输出的详细描述,请查看以下信息:

Model:ATA SAMSUNG MZNLN256(scsi)
磁盘类型、制造商、型号号和接口。
磁盘 /dev/sda:256GB
块设备的文件路径和存储容量。
分区表:msdos
磁盘标签类型。
Number
分区号。例如,次号 1 的分区对应于 /dev/sda1
StartEnd
在分区启动和结束的设备中的位置。
Type
有效类型为 metadata、free、primary、extended 或 logical。
File system
文件系统类型。如果设备的 File system 字段未显示值,这意味着其文件系统类型为未知。parted 工具无法识别加密设备上的文件系统。
标记
列出为分区设置的标记。可用的标志有 bootrootswaphiddenraidlvmlba

其他资源

  • parted(8) 手册页。

3.3. 使用 parted 创建分区

作为系统管理员,您可以使用 parted 实用程序在磁盘上创建新分区。

注意

所需分区是 swap/boot//(root)

先决条件

  • 磁盘上的分区表。
  • 如果要创建的分区大于 2TiB,使用 GUID 分区表(GPT) 格式化磁盘。

步骤

  1. 启动 parted 工具:

    # parted block-device
  2. 查看当前的分区表来确定是否有足够空闲空间:

    # (parted) print
    • 如果分区没有足够的可用空间,则调整分区大小。
    • 从分区表中决定:

      • 新分区的开始和结束点。
      • 在 MBR 上,应该是什么分区类型。
  3. 创建新分区:

    # (parted) mkpart part-type name fs-type start end
    • part-type 替换为 primary, logical, 或 extended。这只适用于 MBR 分区表。
    • 使用任意分区名称替换 name。对于 GPT 分区表,这是必需的。
    • fs-type 替换为 xfs, ext2, ext3, ext4, fat16, fat32, hfs, hfs+, linux-swap, ntfs, 或 reiserfsfs-type 参数是可选的。请注意,parted 实用程序不会在分区中创建文件系统。
    • 使用从磁盘开头计算分区开始和结束点的大小替换 startend。您可以使用大小后缀,如 512MiB20GiB1.5TiB。默认的大小是 MB。

    例 3.2. 创建小的主分区

    要从 1024MiB 创建主分区,直到 MBR 表中的 2048MiB,请使用:

    # (parted) mkpart primary 1024MiB 2048MiB

    在输入以下命令后,这些更改开始应用。

  4. 查看分区表以确认创建的分区位于分区表中,并具有正确的分区类型、文件系统类型和大小:

    # (parted) print
  5. 退出 parted shell:

    # (parted) quit
  6. 注册新设备节点:

    # udevadm settle
  7. 验证内核是否识别了新的分区:

    # cat /proc/partitions

3.4. 使用 fdisk 设置分区类型

您可以使用 fdisk 实用程序设置分区类型或标志。

先决条件

  • 磁盘上的一个分区。

步骤

  1. 启动交互式 fdisk shell:

    # fdisk block-device
  2. 查看当前的分区表以确定副分区号码:

    Command (m for help): print

    您可以在 Type 列中看到当前的分区类型,在 Id 列中看到相应的类型 ID 。

  3. 输入分区类型命令并使用它的副号码选择分区:

    Command (m for help): type
    Partition number (1,2,3 default 3): 2
  4. 可选:查看十六进制代码列表:

    Hex code (type L to list all codes): L
  5. 设置分区类型:

    Hex code (type L to list all codes): 8e
  6. 写入更改并退出 fdisk shell:

    Command (m for help): write
    The partition table has been altered.
    Syncing disks.
  7. 验证您的更改:

    # fdisk --list block-device

3.5. 使用 parted 重新定义分区大小

使用 parted 程序,扩展分区以使用未使用的磁盘空间,或缩小分区以达到不同的目的。

先决条件

  • 在缩小分区前备份数据。
  • 如果要创建的分区大于 2TiB,使用 GUID 分区表(GPT) 格式化磁盘。
  • 如果您想缩小分区,首先缩小文件系统,使其不大于重新定义大小的分区。
注意

XFS 不支持缩小。

步骤

  1. 启动 parted 工具:

    # parted block-device
  2. 查看当前的分区表:

    # (parted) print

    从分区表中决定:

    • 分区的副号码。
    • 调整大小后现有分区的位置和新结束点。
  3. 重新定义分区大小:

    # (parted) resizepart 1 2GiB
    • 使用您要重新定义分区的副号码替换 1
    • 2 替换为确定重新定义重新定义分区大小的新结束点的大小,从磁盘开始计算。您可以使用大小后缀,如 512MiB20GiB1.5TiB。默认的大小是 MB。
  4. 查看分区表以确认调整了大小的分区位于分区表中,且大小正确:

    # (parted) print
  5. 退出 parted shell:

    # (parted) quit
  6. 验证内核是否注册了新分区:

    # cat /proc/partitions
  7. 可选:如果您扩展了分区,也扩展了它上面的文件系统。

3.6. 使用 parted 删除分区

使用 parted 实用程序,您可以删除磁盘分区以释放磁盘空间。

警告

删除分区将删除保存在分区中的所有数据。

步骤

  1. 启动交互式 parted shell:

    # parted block-device
  2. 查看当前的分区表以确定要删除的分区的次号:

    # (parted) print
  3. 删除分区:

    # (parted) rm minor-number
    • 使用您要删除的分区的副号码替换 minor-number

    输入此命令后,这些更改会立即应用。

  4. 验证您是否已从分区表中删除了分区:

    # (parted) print
  5. 退出 parted shell:

    # (parted) quit
  6. 验证内核是否注册分区是否已删除:

    # cat /proc/partitions
  7. 如果分区存在,从 /etc/fstab 文件中删除分区。找到声明删除的分区的行,并将其从文件中删除。
  8. 重新生成挂载单元,以便您的系统注册新的 /etc/fstab 配置:

    # systemctl daemon-reload
  9. 如果您删除了交换分区或删除 LVM 的部分,请从 /etc/default/grub 文件中内核命令行中删除分区的所有引用,并重新生成 GRUB 配置:

    • 在基于 BIOS 的系统中:

      # grub2-mkconfig --output=/etc/grub2.cfg
    • 在基于 UEFI 的系统中:

      # grub2-mkconfig --output=/etc/grub2-efi.cfg
  10. 要在早期引导系统中注册更改,请重建 initramfs 文件系统:

    # dracut --force --verbose

其他资源

  • parted(8) 手册页

第 4 章 重新分区磁盘策略

重新分区磁盘的方法有多种。包括:

  • 有可用的未分区的空闲空间。
  • 一个未使用的分区可用。
  • 在一个活跃使用的分区中的空闲空间是可用。
注意

为清晰起见,以下示例没有反映在实际安装 Red Hat Enterprise Linux 时的确切分区布局。

4.1. 使用未分区的空闲空间

已定义且没有跨越整个硬盘的分区,保留不属于任何定义的分区的未分配空间。下图显示了这种情况。

图 4.1. 有未分区的可用空间的磁盘

未分区空间

第一个图代表一个带有一个主分区的磁盘以及带有未分配空间的未定义分区。第二个图代表有两个已分配空间的分区的磁盘。

未使用的硬盘也属于这一类别。唯一的区别是,所有 空间并不是任何定义的分区的一部分。

在新磁盘上,您可以从未使用的空间创建必要的分区。大部分预安装的操作系统都被配置为占据磁盘驱动器上所有可用空间。

4.2. 使用未使用分区中的空间

在以下示例中,第一个图代表有未使用分区的磁盘。第二个图代表为 Linux 分配未使用的分区。

图 4.2. 有未使用分区的磁盘

未使用的分区

要使用分配给未使用分区的空间,请删除分区,然后创建适当的 Linux 分区。或者,在安装过程中,删除未使用的分区并手动创建新分区。

4.3. 使用活跃分区中的空闲空间

因为已经使用的一个活跃分区包含所需的可用空间,所以此过程可能很难管理。在大多数情况下,预安装软件的计算机的硬盘包含一个大型分区,存放操作系统和数据。

警告

如果要在活跃分区中使用操作系统(OS),您必须重新安装操作系统。请注意,一些计算机可能会包含预安装的软件,不没有提供用于重新安装操作系统的安装介质。在销毁原始分区和操作系统安装前,请检查是否适用于您的操作系统。

要选择使用可用空间,您可以使用破坏性或非破坏性重新分区的方法。

4.3.1. 破坏性重新分区

破坏性重新分区破坏硬盘中的分区并创建几个较小的分区。从原始分区备份所有需要的数据,因为此方法会删除完整内容。

为现有操作系统创建一个较小的分区后,您可以:

  • 重新安装软件。
  • 恢复您的数据。
  • 开始您的 Red Hat Enterprise Linux 安装。

下图显示了使用破坏性重新分区方法的简化形式。

图 4.3. 在磁盘上进行破坏性重新分区动作

dstrct reprt
警告

这个方法会删除之前存储在原始分区中的所有数据。

4.3.2. 非破坏性重新分区

非破坏性重新分区分区大小,没有任何数据丢失。这个方法是可靠的,但在大型驱动器上需要更长的处理时间。

以下是帮助启动非破坏性重新分区的方法列表。

  • 压缩现有数据

无法更改部分数据的存储位置。这可以防止分区大小到所需大小,最终导致破坏性重新分区过程。压缩现有分区中的数据可帮助您调整分区的大小。它还有助于最大程度提高可用空间。

下图显示了此过程的简化形式。

图 4.4. 磁盘中的数据压缩

compression

为了避免任何可能的数据丢失,请在继续压缩过程前创建备份。

  • 重新划分现存分区的大小

通过重新定义已存在的分区的大小,您可以释放更多空间。根据您的软件重新定义大小,结果可能会有所不同。在大多数情况下,您可以创建同一类型的新未格式化的分区,与原始分区不同。

调整大小后采取的步骤可以取决于您所使用的软件。在以下示例中,最佳实践是删除新的 DOS(Disk Operating System)分区,而是创建一个 Linux 分区。在启动重新定义大小过程前,验证最适合您的磁盘。

图 4.5. 在磁盘上重新定义分区大小

部分调整大小
  • 可选:创建新分区

一些可以实现重新调整大小的软件会支持基于 Linux 的系统。在这种情况下,在调整大小后不需要删除新创建的分区。之后创建新分区取决于您使用的软件。

下图显示了创建新分区前和之后的磁盘状态。

图 4.6. 带有最终分区配置的磁盘

nondestruct fin

第 5 章 配置 iSCSI 目标

Red Hat Enterprise Linux 使用 targetcli shell 作为命令行界面执行以下操作:

  • 添加、删除、查看和监控 iSCSI 存储间的连接来利用 iSCSI 硬件。
  • 将由文件、卷、本地 SCSI 设备或者 RAM 磁盘支持的本地存储资源导出到远程系统。

targetcli 工具带有一个基于树形的布局,包括内置的 tab 完成 、自动完成支持和在线文档。

5.1. 安装 targetcli

安装 targetcli 工具来添加、监控和删除 iSCSI 存储间的连接。

步骤

  1. 安装 targetcli 工具:

    # dnf install targetcli
  2. 启动目标服务:

    # systemctl start target
  3. 将目标配置为在引导时启动:

    # systemctl enable target
  4. 在防火墙中打开端口 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]

其他资源

  • targetcli(8) 手册页

5.2. 创建 iSCSI 目标

创建 iSCSI 目标可让客户端的 iSCSI 发起程序访问服务器中的存储设备。目标和发起方都有唯一的标识名称。

先决条件

  • 已安装并运行 targetcli。如需更多信息,请参阅安装 targetcli

步骤

  1. 进入 iSCSI 目录:

    /> iscsi/
    注意

    cd 命令用于更改目录以及列出要移动到的路径。

  2. 使用以下选项之一创建 iSCSI 对象:

    1. 使用默认目标名称创建 iSCSI 对象:

      /iscsi> create
      
      Created target
      iqn.2003-01.org.linux-iscsi.hostname.x8664:sn.78b473f296ff
      Created TPG1
    2. 使用特定名称创建 iSCSI 对象:

      /iscsi> create iqn.2006-04.com.example:444
      
      Created target iqn.2006-04.com.example:444
      Created TPG1
      Here iqn.2006-04.com.example:444 is target_iqn_name

      iqn.2006-04.com.example:444 替换为特定目标名称。

  3. 验证新创建的目标:

    /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]

其他资源

  • targetcli(8) 手册页

5.3. iSCSI Backstore

iSCSI 后端存储支持支持在本地计算机上存储导出的 LUN 数据的不同方法。创建存储对象定义了后端存储使用的资源。

管理员可以选择 Linux-IO(LIO)支持的任何后端存储设备:

fileio 后端存储
如果您将本地文件系统中的常规文件用作磁盘镜像,请创建一个 fileio 存储对象。有关创建 fileio 后端存储的信息,请参阅创建 fileio 存储对象
Block backstore
如果您使用任何本地块设备和逻辑设备,请创建一个 块存储 对象。有关创建后备存储的信息,请参阅 创建块存储对象
pscsi 后端存储
如果您的存储对象支持直接通过 SCSI 命令,请创建一个 pscsi 存储对象。有关创建 pscsi 后端存储的信息,请参阅创建 pscsi 存储对象
ramdisk 后端存储
如果要创建临时 RAM 支持的设备,请创建一个 ramdisk 存储对象。有关创建 ramdisk 后端存储,请参阅创建内存复制 RAM 磁盘存储对象

其他资源

  • targetcli(8) 手册页

5.4. 创建 fileio 存储对象

fileio 存储对象可以支持 write_backwrite_thru 操作。write_back 操作启用本地文件系统缓存。这提高了性能,但会增加数据丢失的风险。

建议使用 write_back=false 禁用 write_back 操作来使用 write_thru 操作。

先决条件

  • 已安装并运行 targetcli。如需更多信息,请参阅安装 targetcli

步骤

  1. backstores/ 目录中进入 fileio/:

    /> backstores/fileio
  2. 创建 fileio 存储对象:

    /backstores/fileio> create file1 /tmp/disk1.img 200M write_back=false
    
    Created fileio file1 with size 209715200

验证

  • 验证创建的 fileio 存储对象:

    /backstores/fileio> ls

其他资源

  • targetcli(8) 手册页

5.5. 创建块存储对象

块驱动程序允许使用 /sys/block/ 目录中出现的任何块设备来与 Linux-IO(LIO)一起使用。这包括物理设备,如 HDD、SSD、CD 和 DVD,以及逻辑设备,如软件或硬件 RAID 卷、LVM 卷。

先决条件

  • 已安装并运行 targetcli。如需更多信息,请参阅安装 targetcli

步骤

  1. backstores/ 目录中进入 block/:

    /> backstores/block/
  2. 创建 后备存储:

    /backstores/block> create name=block_backend dev=/dev/sdb
    
    Generating a wwn serial.
    Created block storage object block_backend using /dev/vdb.

验证

  • 验证创建的存储对象:

    /backstores/block> ls
    注意

    您还可以在逻辑卷中创建 后备存储。

其他资源

  • targetcli(8) 手册页

5.6. 创建 pscsi 存储对象

您可以将任何支持直接传递 SCSI 命令的存储对象配置为没有 SCSI 模拟的后端存储,并带有一个底层 SCSI 设备,它在 /proc/scsi/scsi 中显示带有 lsscsi(如一个 SAS 硬盘)。这个子系统支持 SCSI-3 及更高系统。

警告

pscsi 应该仅由高级用户使用。高级 SCSI 命令(如 Asymmetric Logical Unit Assignment (ALUAs) 或 Persistent Reservations(例如被 VMware ESX, 和 vSphere 使用))通常不会在设备固件中实施,并可能导致出现故障或崩溃。如果有疑问,请在生产环境中改为使用 block 后端存储。

先决条件

  • 已安装并运行 targetcli。如需更多信息,请参阅安装 targetcli

步骤

  1. backstores/ 目录中进入到 pscsi/

    /> backstores/pscsi/
  2. 为物理 SCSI 设备创建 pscsi 后端存储,本示例中是使用 /dev/sr0 的 TYPE_ROM 设备:

    /backstores/pscsi> create name=pscsi_backend dev=/dev/sr0
    
    Generating a wwn serial.
    Created pscsi storage object pscsi_backend using /dev/sr0

验证

  • 验证创建的 pscsi 存储对象:

    /backstores/pscsi> ls

其他资源

  • targetcli(8) 手册页

5.7. 创建内存副本 RAM 磁盘存储对象

Memory Copy RAM 磁盘(ramdisk)为 RAM 磁盘提供完整的 SCSI 模拟,并使用启动器的内存副本来分隔内存映射。这为多会话提供了功能,在用于生产目的的快速和可变量存储中特别有用。

先决条件

  • 已安装并运行 targetcli。如需更多信息,请参阅安装 targetcli

步骤

  1. backstores/ 目录进入到 ramdisk/

    /> backstores/ramdisk/
  2. 创建 1GB RAM 磁盘后备存储:

    /backstores/ramdisk> create name=rd_backend size=1GB
    
    Generating a wwn serial.
    Created rd_mcp ramdisk rd_backend with size 1GB.

验证

  • 验证创建的 ramdisk 存储对象:

    /backstores/ramdisk> ls

其他资源

  • targetcli(8) 手册页

5.8. 创建 iSCSI 门户

创建 iSCSI 门户,为目标添加一个 IP 地址和端口来启用目标。

先决条件

  • 已安装并运行 targetcli。如需更多信息,请参阅安装 targetcli
  • 与目标门户组(TPG)关联的 iSCSI 目标。如需更多信息,请参阅创建 iSCSI 目标

步骤

  1. 进入 TPG 目录:

    /iscsi> iqn.2006-04.example:444/tpg1/
  2. 使用以下选项之一创建 iSCSI 门户:

    1. 创建默认门户使用默认 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
      注意

      当创建 iSCSI 目标时,也会创建一个默认门户网站。这个门户设置为使用默认端口号侦听所有 IP 地址:0.0.0.0:3260.

      要删除默认门户网站,请使用以下命令:

      /iscsi/iqn-name/tpg1/portals delete ip_address=0.0.0.0 ip_port=3260
    2. 使用特定 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.................................. [enambled, auth]
        o- acls ......................................[0 ACL]
        o- luns ......................................[0 LUN]
        o- portals ................................[1 Portal]
           o- 192.168.122.137:3260......................[OK]

其他资源

  • targetcli(8) 手册页

5.9. 创建 iSCSI LUN

逻辑单元号(LUN)是一个由 iSCSI 后端存储支持的物理设备。每个 LUN 都有唯一的数字。

先决条件

  • 已安装并运行 targetcli。如需更多信息,请参阅安装 targetcli
  • 与目标门户组(TPG)关联的 iSCSI 目标。如需更多信息,请参阅创建 iSCSI 目标
  • 已创建存储对象。如需更多信息,请参阅 iSCSI Backstore

步骤

  1. 创建已创建的存储对象的 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.
  2. 验证创建的 LUN:

    /iscsi/iqn.20...mple:444/tpg1> ls
    
    o- tpg.................................. [enambled, 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

  3. 配置 ACL。如需更多信息,请参阅创建 iSCSI ACL

其他资源

  • targetcli(8) 手册页

5.10. 创建只读 iSCSI LUN

默认情况下,使用读写权限创建 LUN。这个步骤描述了如何创建只读 LUN。

先决条件

  • 已安装并运行 targetcli。如需更多信息,请参阅安装 targetcli
  • 与目标门户组(TPG)关联的 iSCSI 目标。如需更多信息,请参阅创建 iSCSI 目标
  • 已创建存储对象。如需更多信息,请参阅 iSCSI Backstore

步骤

  1. 设置只读权限:

    /> set global auto_add_mapped_luns=false
    
    Parameter auto_add_mapped_luns is now 'false'.

    这样可防止 LUN 自动映射到现有 ACL,从而允许手动映射 LUN。

  2. 进入 initiator_iqn_name 目录:

    /> iscsi/target_iqn_name/tpg1/acls/initiator_iqn_name/
  3. 创建 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.foo:888> create mapped_lun=1 tpg_lun_or_backstore=/backstores/block/block2 write_protect=1
    
    Created LUN 1.
    Created Mapped LUN 1.
  4. 验证所创建的 LUN:

    /iscsi/target_iqn_name/tpg1/acls/2006-04.com.example.foo:888> ls
     o- 2006-04.com.example.foo:888 .. [Mapped LUNs: 2]
     | o- mapped_lun0 .............. [lun0 block/disk1 (rw)]
     | o- mapped_lun1 .............. [lun1 block/disk2 (ro)]

    mapping_lun1 行现在在结尾带有(ro)(不像 mapping_lun0 为 (rw)),这表示它是只读的。

  5. 配置 ACL。如需更多信息,请参阅创建 iSCSI ACL

其他资源

  • targetcli(8) 手册页

5.11. 创建 iSCSI ACL

targetcli 中,访问控制列表(ACL)用于定义访问规则,每个启动器都具有对 LUN 独占访问权限。

目标和发起方都有唯一的标识名称。您必须知道配置 ACL 的发起方的唯一名称。iSCSI 启动器可以在 /etc/iscsi/initiatorname.iscsi 文件中找到。

先决条件

  • 已安装并运行 targetcli。如需更多信息,请参阅安装 targetcli
  • 与目标门户组(TPG)关联的 iSCSI 目标。如需更多信息,请参阅创建 iSCSI 目标

步骤

  1. 进入 acls 目录

    /iscsi/iqn.20...mple:444/tpg1> acls/
  2. 使用以下选项之一创建 ACL:

    1. 在启动器上使用来自 /etc/iscsi/initiatorname.iscsi 文件中的 initiator 名称。
    2. 使用更易于记住的名称,请参阅创建 iSCSI 启动器以确保与启动器匹配的 ACL。

      /iscsi/iqn.20...444/tpg1/acls> create iqn.2006-04.com.example.foo:888
      
      Created Node ACL for iqn.2006-04.com.example.foo:888
      Created mapped LUN 2.
      Created mapped LUN 1.
      Created mapped LUN 0.
      注意

      上一示例中使用的全局设置 auto_add_mapped_lun 会自动将 LUN 映射到任何创建的 ACL。

      您可以在目标服务器上的 TPG 节点中设置用户创建的 ACL:

      /iscsi/iqn.20...scsi:444/tpg1> set attribute generate_node_acls=1

验证

  • 验证创建的 ACL:

    /iscsi/iqn.20...444/tpg1/acls> ls
    
    o- acls .................................................[1 ACL]
        o- iqn.2006-04.com.example.foo:888 ....[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)]

其他资源

  • targetcli(8) 手册页

5.12. 为目标设置 Challenge-Handshake 验证协议

通过使用 Challenge-Handshake Authentication Protocol(CHAP),用户可以使用密码保护目标。发起方必须了解这个密码才能连接到目标。

先决条件

步骤

  1. 设置属性身份验证:

    /iscsi/iqn.20...mple:444/tpg1> set attribute authentication=1
    
    Parameter authentication is now '1'.
  2. 设置 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'.

其他资源

  • targetcli(8) 手册页

5.13. 使用 targetcli 工具删除 iSCSI 对象

这个步骤描述了如何使用 targetcli 工具删除 iSCSI 对象。

步骤

  1. 从目标登出:

    # iscsiadm -m node -T iqn.2006-04.example:444 -u

    有关如何登录到目标的更多信息,请参阅创建 iSCSI 启动器

  2. 删除整个目标,包括所有 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
      • 使用 fileioblockpscsiramdisk 替换 backstore-type
      • 使用您要删除的 backstore-name 替换 block_backend
    • 要删除 iSCSI 目标的部分,如 ACL:

      /> /iscsi/iqn-name/tpg/acls/ delete iqn.2006-04.com.example:444

验证

  • 查看更改:

    /> iscsi/ ls

其他资源

  • targetcli(8) 手册页

第 6 章 配置 iSCSI initiator

iSCSI 启动程序形成连接 iSCSI 目标的会话。默认情况下,iSCSI 服务是“懒启动” ,服务只在运行 iscsiadm 命令后才启动。如果 root 没有位于 iSCSI 设备,或者没有标记为 node.startup = automatic 的节点,则 iSCSI 服务将不会启动,直到执行 iscsiadm 命令后,需要 iscsidiscsi 内核模块启动。

以 root 用户身份执行 systemctl start iscsid.service 命令,以强制 iscsid 守护进程运行和 iSCSI 内核模块来加载。

6.1. 创建 iSCSI 启动程序

这部分论述了如何创建 iSCSI initiator。

先决条件

  • 在服务器计算机上安装并运行 targetcli。如需更多信息,请参阅安装 targetcli
  • 与服务器机器上目标组(TPG)关联的 iSCSI 目标。如需更多信息,请参阅创建 iSCSI 目标
  • 创建 iSCSI ACL。如需更多信息,请参阅创建 iSCSI ACL

步骤

  1. 在客户端机器上安装 iscsi-initiator-utils:

    # dnf install iscsi-initiator-utils
  2. 检查 initiator 名称:

    # cat /etc/iscsi/initiatorname.iscsi
    
    InitiatorName=2006-04.com.example.foo:888
  3. 如果在创建 iSCSI ACL 时 ACL 被指定了一个自定义名称,请相应地修改 /etc/iscsi/initiatorname.iscsi 文件。

    # vi /etc/iscsi/initiatorname.iscsi
  4. 发现目标并使用显示的目标 IQN 登录到目标:

    # iscsiadm -m discovery -t st -p 10.64.24.179
        10.64.24.179:3260,1 iqn.2006-04.example:444
    
    # iscsiadm -m node -T iqn.2006-04.example:444 -l
        Logging in to [iface: default, target: iqn.2006-04.example:444, portal: 10.64.24.179,3260] (multiple)
        Login to [iface: default, target: iqn.2006-04.example:444, portal: 10.64.24.179,3260] successful.

    10.64.24.179 替换为 target-ip-address。

    如果将相应的启动器名称添加到 ACL 中,您可以将这个步骤用于连接到同一目标的任意启动器名称,如创建 iSCSI ACL 所述。

  5. 找到 iSCSI 磁盘名称并在这个 iSCSI 磁盘中创建文件系统:

    # grep "Attached SCSI" /var/log/messages
    
    # mkfs.ext4 /dev/disk_name

    使用 /var/log/messages 文件中显示的 iSCSI 磁盘名称替换 disk_name

  6. 挂载文件系统:

    # mkdir /mount/point
    
    # mount /dev/disk_name /mount/point

    使用分区的挂载点替换 /mount/point

  7. 编辑 /etc/fstab 文件,以便在系统引导时自动挂载文件系统:

    # vi /etc/fstab
    
    /dev/disk_name /mount/point ext4 _netdev 0 0

    使用 iSCSI 磁盘名称替换 disk_name,使用分区的挂载点替换 /mount/point

其他资源

  • targetcli(8)iscsiadm(8) man page

6.2. 为发起方设置 Challenge-Handshake Authentication Protocol

通过使用 Challenge-Handshake Authentication Protocol(CHAP),用户可以使用密码保护目标。发起方必须了解这个密码才能连接到目标。

先决条件

步骤

  1. iscsid.conf 文件中启用 CHAP 验证:

    # vi /etc/iscsi/iscsid.conf
    
    node.session.auth.authmethod = CHAP

    默认情况下,node.session.auth.authmethod 设置为 None

  2. iscsid.conf 文件中添加目标用户名密码

    node.session.auth.username = redhat
    node.session.auth.password = redhat_passwd
  3. 启动 iscsid 守护进程:

    # systemctl start iscsid.service

其他资源

  • iscsiadm(8) man page

6.3. 使用 iscsiadm 程序监控 iSCSI 会话

这个步骤描述了如何使用 iscsiadm 程序监控 iscsi 会话。

默认情况下,iSCSI 服务是启动,服务只在运行 iscsiadm 命令后才启动。如果 root 没有位于 iSCSI 设备,或者没有标记为 node.startup = automatic 的节点,则 iSCSI 服务将不会启动,直到执行 iscsiadm 命令后,需要 iscsidiscsi 内核模块启动。

以 root 用户身份执行 systemctl start iscsid.service 命令,以强制 iscsid 守护进程运行和 iSCSI 内核模块来加载。

步骤

  1. 在客户端机器上安装 iscsi-initiator-utils:

    # dnf install iscsi-initiator-utils
  2. 查找正在运行的会话的信息:

    # 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

其他资源

  • /usr/share/doc/iscsi-initiator-utils-version/README 文件
  • iscsiadm(8) man page

6.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。红帽不推荐使用 replacement_timeout 覆盖由 DM 多路径管理的设备中的 recovery_tmo,因为在 multipathd 服务重新载入时 DM 多路径总是重置 recovery_tmo

第 7 章 使用光纤通道设备

Red Hat Enterprise Linux 9 提供以下原生光纤频道驱动程序:

  • lpfc
  • qla2xxx
  • zfcp

7.1. 重新调整光纤通道逻辑单元的大小

作为系统管理员,您可以重新定义光纤通道逻辑单元大小。

步骤

  1. 确定哪些设备是 多路径 逻辑单元的路径:

    multipath -ll
  2. 在使用多路径的系统中重新扫描光纤通道逻辑单元:

    $ echo 1 > /sys/block/sdX/device/rescan

其他资源

  • multipath(8) 手册页

7.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 9 中,如果您没有设置 fast_io_fail_tmo 选项,dev_loss_tmo 的上限将为 600 秒。默认情况下,在 Red Hat Enterprise Linux 9 中, 如果 multipathd 服务正在运行,fast_io_fail_tmo 会被设置为 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

    指示驱动重新发现远程端口。

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。红帽不推荐使用 replacement_timeout 覆盖由 DM 多路径管理的设备中的 recovery_tmo,因为在 multipathd 服务重新载入时 DM 多路径总是重置 recovery_tmo

第 8 章 使用 RDMA 的 NVMe over fabrics

在 NVMe over RDMA(NVMe/RDMA)设置中,您配置 NVMe 目标和 NVMe initiator。

作为系统管理员,完成以下任务来部署 NVMe/RDMA 设置:

8.1. NVMe over fabric 设备概述

Non-volatile Memory Express(NVMe)是一个接口,它允许主机软件实用程序与固态驱动器通信。

使用以下类型的光纤传输来通过光纤设备配置 NVMe:

NVMe over Remote Direct Memory Access(NVMe/RDMA)
有关如何配置 NVMe/RDMA 的详情,请参考使用 RDMA 的 NVMe over fabrics
NVMe over Fibre Channel(FC-NVMe)
有关如何配置 FC-NVMe 的详情,请参考使用 FC 的 NVMe over fabrics

当使用 Fibre Channel(FC)和 Remote Direct Memory Access(RDMA)时,固态驱动器不必对您的系统进行本地设置;可以通过 FC 或 RDMA 控制器远程配置。

8.2. 使用 configfs 设置 NVMe/RDMA 目标

使用这个步骤使用 configfs 配置 NVMe/RDMA 目标。

先决条件

  • 验证您有一个要分配给 nvmet 子系统的块设备。

步骤

  1. 创建 nvmet-rdma 子系统:

    # modprobe nvmet-rdma
    
    # mkdir /sys/kernel/config/nvmet/subsystems/testnqn
    
    # cd /sys/kernel/config/nvmet/subsystems/testnqn

    使用子系统名称替换 testnqn

  2. 允许任何主机连接到这个目标:

    # echo 1 > attr_allow_any_host
  3. 配置命名空间:

    # mkdir namespaces/10
    
    # cd namespaces/10

    使用命名空间号替换 10

  4. 设置 NVMe 设备的路径:

    # echo -n /dev/nvme0n1 > device_path
  5. 启用命名空间:

    # echo 1 > enable
  6. 创建带有 NVMe 端口的目录:

    # mkdir /sys/kernel/config/nvmet/ports/1
    
    # cd /sys/kernel/config/nvmet/ports/1
  7. 显示 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
  8. 为目标设置传输地址:

    # echo -n 172.31.0.202 > addr_traddr
  9. 将 RDMA 设置为传输类型:

    # echo rdma > addr_trtype
    
    # echo 4420 > addr_trsvcid
  10. 为端口设置地址系列:

    # echo ipv4 > addr_adrfam
  11. 创建软链接:

    # 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)

其他资源

  • nvme(1) man page

8.3. 使用 nvmetcli 设置 NVMe/RDMA 目标

使用 nvmetcli 实用程序编辑、查看和启动 NVMe 目标。nvmetcli 实用程序提供命令行和交互式 shell 选项。使用这个步骤为 nvmetcli 配置 NVMe/RDMA 目标。

先决条件

  • 验证您有一个要分配给 nvmet 子系统的块设备。
  • 以 root 用户身份执行以下 nvmetcli 操作。

步骤

  1. 安装 nvmetcli 软件包:

    # dnf install nvmetcli
  2. 下载 rdma.json 文件:

    # wget http://git.infradead.org/users/hch/nvmetcli.git/blob_plain/0a6b088db2dc2e5de11e6f23f1e890e4b54fee64:/rdma.json
  3. 编辑 rdma.json 文件,并将 traddr 值更改为 172.31.0.202
  4. 通过载入 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

其他资源

  • nvmetclinvme(1) man page

8.4. 配置 NVMe/RDMA 客户端

使用这个步骤使用 NVMe 管理命令行界面(nvme-cli)工具配置 NVMe/RDMA 客户端。

步骤

  1. 安装 nvme-cli 工具:

    # dnf install nvme-cli
  2. 如果没有加载,则加载 nvme-rdma 模块:

    # modprobe nvme-rdma
  3. 在 NVMe 目标中发现可用子系统:

    # nvme discover -t rdma -a 172.31.0.202 -s 4420
    
    Discovery Log Number of Records 1, Generation counter 2
    =====Discovery Log Entry 0======
    trtype:  rdma
    adrfam:  ipv4
    subtype: nvme subsystem
    treq:    not specified, sq flow control disable supported
    portid:  1
    trsvcid: 4420
    subnqn:  testnqn
    traddr:  172.31.0.202
    rdma_prtype: not specified
    rdma_qptype: connected
    rdma_cms:    rdma-cm
    rdma_pkey: 0x0000
  4. 连接到发现的子系统:

    # nvme connect -t rdma -n testnqn -a 172.31.0.202 -s 4420
    
    # 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

其他资源

第 9 章 使用 FC 的光纤的 NVMe over fabrics

当与特定 Broadcom Emulex 和 Marvell Qlogic Fibre Channel 适配器一起使用时,在 initiator 模式中完全支持 NVMe over Fibre Channel(FC-NVMe)。作为系统管理员,在以下部分中完成任务来部署 FC-NVMe 设置:

9.1. NVMe over fabric 设备概述

Non-volatile Memory Express(NVMe)是一个接口,它允许主机软件实用程序与固态驱动器通信。

使用以下类型的光纤传输来通过光纤设备配置 NVMe:

NVMe over Remote Direct Memory Access(NVMe/RDMA)
有关如何配置 NVMe/RDMA 的详情,请参考使用 RDMA 的 NVMe over fabrics
NVMe over Fibre Channel(FC-NVMe)
有关如何配置 FC-NVMe 的详情,请参考使用 FC 的 NVMe over fabrics

当使用 Fibre Channel(FC)和 Remote Direct Memory Access(RDMA)时,固态驱动器不必对您的系统进行本地设置;可以通过 FC 或 RDMA 控制器远程配置。

9.2. 为广播适配器配置 NVMe initiator

使用这个流程,使用 NVMe 管理命令行界面(nvme-cli)工具为 Broadcom 适配器客户端配置 NVMe initiator。

步骤

  1. 安装 nvme-cli 工具:

    # dnf install nvme-cli

    这会在 /etc/nvme/ 目录中创建 hostnqn 文件。hostn 文件标识 NVMe 主机。

    要生成新的 hostnqn,请使用以下命令:

    # nvme gen-hostnqn
  2. 找到本地和远程端口的 WWNN 和 WWPN 标识符,并使用输出查找子系统 NQN:

    # cat /sys/class/scsi_host/host*/nvme_info
    
    NVME Initiator 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
    # 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

  3. 使用 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

    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

验证

  • 列出当前连接的 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

其他资源

9.3. 为 QLogic 适配器配置 NVMe initiator

使用这个流程,使用 NVMe 管理命令行界面(nvme-cli)工具为 Qlogic 适配器客户端配置 NVMe initiator。

步骤

  1. 安装 nvme-cli 工具:

    # dnf install nvme-cli

    这会在 /etc/nvme/ 目录中创建 hostnqn 文件。hostn 文件标识 NVMe 主机。

    要生成新的 hostnqn,请使用以下命令:

    # nvme gen-hostnqn
  2. 重新载入 qla2xxx 模块:

    # rmmod qla2xxx
    # modprobe qla2xxx
  3. 查找本地和远程端口的 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-traddrtraddr 值,查找子系统 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

  4. 使用 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

    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

验证

  • 列出当前连接的 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

其他资源

第 10 章 在 NVMe 设备中启用多路径

您可以通过光纤传输(如光纤通道(FC))连接到您的系统的多路径 NVMe 设备。您可以在多个多路径解决方案之间进行选择。

10.1. 本地 NVMe 多路径和 DM 多路径

NVMe 设备支持原生多路径功能。当在 NVMe 中配置多路径时,您可以在标准 DM 多路径和原生 NVMe 多路径之间进行选择。

DM 多路径和原生 NVMe 多路径都支持 NVMe 设备的 Asymmetric Namespace Access(ANA)多路径方案。ANA 识别目标与发起方之间的优化路径并提高性能。

当启用原生 NVMe 多路径时,它会全局地应用于所有 NVMe 设备。它可以提供更高的性能,但不包含 DM 多路径提供的所有功能。例如,原生 NVMe 多路径只支持 故障切换(failover)循环(round-robin)路径选择方法。

默认情况下,Red Hat Enterprise Linux 9 中启用了 NVMe 多路径,也是推荐的多路径解决方案。

10.2. 启用原生 NVMe 多路径

此流程使用原生 NVMe 多路径解决方案在连接的 NVMe 设备中启用多路径。

先决条件

步骤

  1. 检查内核中是否启用了原生 NVMe 多路径:

    # cat /sys/module/nvme_core/parameters/multipath

    这个命令显示以下之一:

    N
    禁用原生 NVMe 多路径。
    Y
    启用原生 NVMe 多路径。
  2. 如果禁用原生 NVMe 多路径,使用以下方法之一启用它:

    • 使用内核选项:

      1. 在内核命令行中添加 nvme_core.multipath=Y 选项:

        # grubby --update-kernel=ALL --args="nvme_core.multipath=Y"
      2. 在 64 位 IBM Z 构架中更新引导菜单:

        # zipl
      3. 重启系统。
    • 使用内核模块配置文件:

      1. 使用以下内容创建 /etc/modprobe.d/nvme_core.conf 配置文件:

        options nvme_core multipath=Y
      2. 备份 initramfs 文件系统:

        # cp /boot/initramfs-$(uname -r).img \
             /boot/initramfs-$(uname -r).bak.$(date +%m-%d-%H%M%S).img
      3. 重建 initramfs 文件系统:

        # dracut --force --verbose
      4. 重启系统。
  3. 可选:在运行的系统中,更改 NVMe 设备中的 I/O 策略,以便在所有可用路径中分发 I/O:

    # echo "round-robin" > /sys/class/nvme-subsystem/nvme-subsys0/iopolicy
  4. 可选:使用 udev 规则永久设置 I/O 策略。使用以下内容创建 /etc/udev/rules.d/71-nvme-io-policy.rules 文件:

    ACTION=="add|change", SUBSYSTEM=="nvme-subsystem", ATTR{iopolicy}="round-robin"

验证

  1. 检查您的系统是否识别 NVMe 设备:

    # nvme list
    
    Node             SN                   Model                                    Namespace Usage                      Format           FW Rev
    ---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
    /dev/nvme0n1     a34c4f3a0d6f5cec     Linux                                    1         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
    /dev/nvme0n2     a34c4f3a0d6f5cec     Linux                                    2         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
  2. 列出所有连接的 NVMe 子系统:

    # nvme list-subsys
    
    nvme-subsys0 - NQN=testnqn
    \
     +- nvme0 fc traddr=nn-0x20000090fadd597a:pn-0x10000090fadd597a host_traddr=nn-0x20000090fac7e1dd:pn-0x10000090fac7e1dd live
     +- nvme1 fc traddr=nn-0x20000090fadd5979:pn-0x10000090fadd5979 host_traddr=nn-0x20000090fac7e1dd:pn-0x10000090fac7e1dd live
     +- nvme2 fc traddr=nn-0x20000090fadd5979:pn-0x10000090fadd5979 host_traddr=nn-0x20000090fac7e1de:pn-0x10000090fac7e1de live
     +- nvme3 fc traddr=nn-0x20000090fadd597a:pn-0x10000090fadd597a host_traddr=nn-0x20000090fac7e1de:pn-0x10000090fac7e1de live

    检查活动传输类型。例如,nvme0 fc 表示设备通过光纤通道传输连接,nvme tcp 则表示设备通过 TCP 连接。

  3. 如果您编辑了内核选项,请检查内核命令行中是否启用了原生 NVMe 多路径:

    # cat /proc/cmdline
    
    BOOT_IMAGE=[...] nvme_core.multipath=Y
  4. 检查 DM 多路径报告了 NVMe 命名空间为,例如:nvme0c0c0n1nvme0c3n1,而不是,例如: nvme0n1nvme3n1

    # multipath -e -ll | grep -i nvme
    
    uuid.8ef20f70-f7d3-4f67-8d84-1bb16b2bfe03 [nvme]:nvme0n1 NVMe,Linux,4.18.0-2
    | `- 0:0:1    nvme0c0n1 0:0     n/a   optimized live
    | `- 0:1:1    nvme0c1n1 0:0     n/a   optimized live
    | `- 0:2:1    nvme0c2n1 0:0     n/a   optimized live
      `- 0:3:1    nvme0c3n1 0:0     n/a   optimized live
    
    uuid.44c782b4-4e72-4d9e-bc39-c7be0a409f22 [nvme]:nvme0n2 NVMe,Linux,4.18.0-2
    | `- 0:0:1    nvme0c0n1 0:0     n/a   optimized live
    | `- 0:1:1    nvme0c1n1 0:0     n/a   optimized live
    | `- 0:2:1    nvme0c2n1 0:0     n/a   optimized live
      `- 0:3:1    nvme0c3n1 0:0     n/a   optimized live
  5. 如果您更改了 I/O 策略,请检查 round-robin 是 NVMe 设备中的活跃 I/O 策略:

    # cat /sys/class/nvme-subsystem/nvme-subsys0/iopolicy
    
    round-robin

10.3. 在 NVMe 设备中启用 DM 多路径

这个过程使用 DM 多路径解决方案在连接的 NVMe 设备中启用多路径。

先决条件

步骤

  1. 检查是否禁用了原生 NVMe 多路径:

    # cat /sys/module/nvme_core/parameters/multipath

    这个命令显示以下之一:

    N
    禁用原生 NVMe 多路径。
    Y
    启用原生 NVMe 多路径。
  2. 如果启用了原生 NVMe 多路径,请禁用它:

    1. 在内核命令行中删除 nvme_core.multipath=Y 选项:

      # grubby --update-kernel=ALL --remove-args="nvme_core.multipath=Y"
    2. 在 64 位 IBM Z 构架中更新引导菜单:

      # zipl
    3. 如果存在,从 /etc/modprobe.d/nvme_core.conf 文件中删除 options nvme_core multipath=Y 行。
    4. 重启系统。
  3. 确保启用了 DM 多路径:

    # systemctl enable --now multipathd.service
  4. 在所有可用路径中分发 I/O。在 /etc/multipath.conf 文件中添加以下内容:

    device {
      vendor "NVME"
      product ".*"
      path_grouping_policy    group_by_prio
    }
    注意

    当 DM 多路径管理 NVMe 设备时,/sys/class/nvme-subsys0/iopolicy 配置文件不会影响 I/O 分发。

  5. 重新载入 multipathd 服务以应用配置更改:

    # multipath -r
  6. 备份 initramfs 文件系统:

    # cp /boot/initramfs-$(uname -r).img \
         /boot/initramfs-$(uname -r).bak.$(date +%m-%d-%H%M%S).img
  7. 重建 initramfs 文件系统:

    # dracut --force --verbose

验证

  1. 检查您的系统是否识别 NVMe 设备:

    # nvme list
    
    Node             SN                   Model                                    Namespace Usage                      Format           FW Rev
    ---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
    /dev/nvme0n1     a34c4f3a0d6f5cec     Linux                                    1         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
    /dev/nvme0n2     a34c4f3a0d6f5cec     Linux                                    2         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
    /dev/nvme1n1     a34c4f3a0d6f5cec     Linux                                    1         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
    /dev/nvme1n2     a34c4f3a0d6f5cec     Linux                                    2         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
    /dev/nvme2n1     a34c4f3a0d6f5cec     Linux                                    1         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
    /dev/nvme2n2     a34c4f3a0d6f5cec     Linux                                    2         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
    /dev/nvme3n1     a34c4f3a0d6f5cec     Linux                                    1         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
    /dev/nvme3n2     a34c4f3a0d6f5cec     Linux                                    2         250.06  GB / 250.06  GB    512   B +  0 B   4.18.0-2
  2. 列出所有连接的 NVMe 子系统。检查命令报告为 nvme0n1nvme3n2,而不是,例如: nvme0c0c0n1nvme0c3n1

    # nvme list-subsys
    
    nvme-subsys0 - NQN=testnqn
    \
     +- nvme0 fc traddr=nn-0x20000090fadd5979:pn-0x10000090fadd5979 host_traddr=nn-0x20000090fac7e1dd:pn-0x10000090fac7e1dd live
     +- nvme1 fc traddr=nn-0x20000090fadd597a:pn-0x10000090fadd597a host_traddr=nn-0x20000090fac7e1dd:pn-0x10000090fac7e1dd live
     +- nvme2 fc traddr=nn-0x20000090fadd5979:pn-0x10000090fadd5979 host_traddr=nn-0x20000090fac7e1de:pn-0x10000090fac7e1de live
     +- nvme3 fc traddr=nn-0x20000090fadd597a:pn-0x10000090fadd597a host_traddr=nn-0x20000090fac7e1de:pn-0x10000090fac7e1de live
    # multipath -ll
    
    mpathae (uuid.8ef20f70-f7d3-4f67-8d84-1bb16b2bfe03) dm-36 NVME,Linux
    size=233G features='1 queue_if_no_path' hwhandler='0' wp=rw
    `-+- policy='service-time 0' prio=50 status=active
      |- 0:1:1:1  nvme0n1 259:0   active ready running
      |- 1:2:1:1  nvme1n1 259:2   active ready running
      |- 2:3:1:1  nvme2n1 259:4   active ready running
      `- 3:4:1:1  nvme3n1 259:6   active ready running
    
    mpathaf (uuid.44c782b4-4e72-4d9e-bc39-c7be0a409f22) dm-39 NVME,Linux
    size=233G features='1 queue_if_no_path' hwhandler='0' wp=rw
    `-+- policy='service-time 0' prio=50 status=active
      |- 0:1:2:2  nvme0n2 259:1   active ready running
      |- 1:2:2:2  nvme1n2 259:3   active ready running
      |- 2:3:2:2  nvme2n2 259:5   active ready running
      `- 3:4:2:2  nvme3n2 259:7   active ready running

第 11 章 swap 入门

这部分论述了 swap 空间以及如何添加和删除它。

11.1. swap 空间概述

当物理内存(RAM)已满时,将使用 Linux 中的 交换空间。如果系统需要更多的内存资源并且 RAM 已满,内存中的不活动页面将移到交换空间。虽然交换空间可以帮助具有少量 RAM 的计算机,但不应将其视为更多 RAM 的替代品。

交换空间位于硬盘驱动器上,其访问时间比物理内存要慢。交换空间可以是专用的交换分区(推荐)、交换文件,或者交换分区和交换文件的组合。

过去数年,推荐的 swap 空间会随系统中的 RAM 量增加而线性增大。然而,现代系统通常包含了成百 GB 内存。因此,推荐的交换空间被视为系统内存工作负载的功能,而不是系统内存的功能。

添加 swap 空间

以下是添加 swap 空间的不同方法:

删除 swap 空间

以下是删除 swap 空间的不同方法:

11.3. 在 LVM2 逻辑卷中扩展 swap

这个步骤描述了如何在现有 LVM2 逻辑卷中扩展 swap 空间。假设 /dev/VolGroup00/LogVol01 是您要将其扩展为 2 GB 的卷。

先决条件

  • 您有足够的磁盘空间。

步骤

  1. 为关联的逻辑卷禁用交换:

    # swapoff -v /dev/VolGroup00/LogVol01
  2. 将 LVM2 逻辑卷调整为 2 GB

    # lvresize /dev/VolGroup00/LogVol01 -L +2G
  3. 格式化新 swap 空间:

    # mkswap /dev/VolGroup00/LogVol01
  4. 启用扩展的逻辑卷:

    # swapon -v /dev/VolGroup00/LogVol01

验证

  • 要测试是否成功扩展和激活 swap 逻辑卷,请使用以下命令检查活跃 swap 空间:

    $ cat /proc/swaps
    $ free -h

11.4. 为 swap 创建 LVM2 逻辑卷

这个步骤描述了如何为 swap 创建 LVM2 逻辑卷。假设 /dev/VolGroup00/LogVol02 是您要添加的交换卷。

先决条件

  • 您有足够的磁盘空间。

步骤

  1. 创建大小为 2 GB 的 LVM2 逻辑卷:

    # lvcreate VolGroup00 -n LogVol02 -L 2G
  2. 格式化新 swap 空间:

    # mkswap /dev/VolGroup00/LogVol02
  3. /etc/fstab 文件中添加以下条目:

    /dev/VolGroup00/LogVol02 swap swap defaults 0 0
  4. 重新生成挂载单元以便您的系统注册新配置:

    # systemctl daemon-reload
  5. 在逻辑卷中激活 swap:

    # swapon -v /dev/VolGroup00/LogVol02

验证

  • 要测试是否成功创建并激活 swap 逻辑卷,请使用以下命令检查活跃 swap 空间:

    $ cat /proc/swaps
    $ free -h

11.5. 创建交换文件

这个步骤描述了如何创建交换文件。

先决条件

  • 您有足够的磁盘空间。

步骤

  1. 以 MB 为单位确定新交换文件的大小,再乘以 1024 来确定块的数量。例如: 64MB swap 文件的块大小为 65536。
  2. 创建一个空文件:

    # dd if=/dev/zero of=/swapfile bs=1024 count=65536

    使用与所需块大小相等的值替换 65536

  3. 使用以下命令设定 swap 文件:

    # mkswap /swapfile
  4. 更改交换文件的安全性,使其不可读。

    # chmod 0600 /swapfile
  5. 使用以下条目编辑 /etc/fstab 文件,以在引导时启用交换文件:

    /swapfile swap swap defaults 0 0

    下次系统引导时,它会激活新的 swap 文件。

  6. 重新生成挂载单元,以便您的系统注册新的 /etc/fstab 配置:

    # systemctl daemon-reload
  7. 立即激活 swap 文件:

    # swapon /swapfile

验证

  • 要测试新 swap 文件是否已成功创建并激活,请使用以下命令检查活跃 swap 空间:

    $ cat /proc/swaps
    $ free -h

11.6. 在 LVM2 逻辑卷中减少 swap

这个步骤描述了如何在 LVM2 逻辑卷中减少交换。假设 /dev/VolGroup00/LogVol01 是您要缩小的卷。

步骤

  1. 为关联的逻辑卷禁用交换:

    # swapoff -v /dev/VolGroup00/LogVol01
  2. 将 LVM2 逻辑卷减少 512 MB:

    # lvreduce /dev/VolGroup00/LogVol01 -L -512M
  3. 格式化新 swap 空间:

    # mkswap /dev/VolGroup00/LogVol01
  4. 在逻辑卷中激活 swap:

    # swapon -v /dev/VolGroup00/LogVol01

验证

  • 要测试是否成功缩小 swap 逻辑卷,请使用以下命令检查活跃 swap 空间:

    $ cat /proc/swaps
    $ free -h

11.7. 为 swap 删除 LVM2 逻辑卷

这个步骤描述了如何为 swap 删除 LVM2 逻辑卷。假设 /dev/VolGroup00/LogVol02 是您要删除的交换卷。

步骤

  1. 为关联的逻辑卷禁用交换:

    # swapoff -v /dev/VolGroup00/LogVol02
  2. 删除 LVM2 逻辑卷:

    # lvremove /dev/VolGroup00/LogVol02
  3. /etc/fstab 文件中删除以下关联的条目:

    /dev/VolGroup00/LogVol02 swap swap defaults 0 0
  4. 重新生成挂载单元以便您的系统注册新配置:

    # systemctl daemon-reload

验证

  • 要测试逻辑卷是否已成功删除,请使用以下命令检查活跃 swap 空间:

    $ cat /proc/swaps
    $ free -h

11.8. 删除交换文件

这个步骤描述了如何删除交换文件。

步骤

  1. 在 shell 提示下,执行以下命令禁用交换文件,其中 /swapfile 是交换文件:

    # swapoff -v /swapfile
  2. 相应地从 /etc/fstab 文件中删除其条目。
  3. 重新生成挂载单元以便您的系统注册新配置:

    # systemctl daemon-reload
  4. 删除实际的文件:

    # rm /swapfile

第 12 章 使用以太网配置光纤

根据 IEEE T11 FC-BB-5 标准,使用以太网(FCoE)的光纤通道是通过以太网传输光纤通道帧的协议。通常数据中心有一个专用的 LAN 和 Storage Area Network(SAN),它和它们自己的配置是相互分开的。FCoE 将这些网络合并为一个整合的网络结构。例如 FCoE 的优点是降低硬件和能源成本。

12.1. 在 RHEL 中使用硬件 FCoE HBA

在 RHEL 中,您可以使用以太网的硬件光纤通道(FCoE)主机总线适配器(HBA),这些驱动程序支持以下驱动程序:

  • qedf
  • bnx2fc
  • fnic

如果您使用这样的 HBA,在 HBA 设置中配置 FCoE 设置。如需更多信息,请参阅适配器文档。

配置 HBA 后,从 Storage Area Network(SAN)中导出的逻辑单元号(LUN)将自动用于 RHEL 作为 /dev/sd* 设备。您可以使用类似本地存储设备的设备。

12.2. 设置软件 FCoE 设备

使用软件 FCoE 设备通过 FCoE 访问逻辑单元号(LUN),它使用部分支持 FCoE 卸载的以太网适配器。

重要

RHEL 不支持需要 fcoe.ko 内核模块的软件 FCoE 设备。

完成此步骤后,RHEL 会自动从 Storage Area Network(SAN)导出的 LUN 作为 /dev/sd* 设备。您可以使用类似本地存储设备的方法使用这些设备。

先决条件

  • 您已将网络交换机配置为支持 VLAN。
  • SAN 使用 VLAN 来将存储流量与普通以太网流量分开。
  • 您已在其 BIOS 中配置了服务器的 HBA。
  • HBA 连接至网络,连接是在线的。如需更多信息,请参阅您的 HBA 文档。

步骤

  1. 安装 fcoe-utils 软件包:

    # dnf install fcoe-utils
  2. /etc/fcoe/cfg-ethx 模板文件复制到 /etc/fcoe/cfg-interface_name。例如,如果要将 enp1s0 接口配置为使用 FCoE,请输入以下命令:

    # cp /etc/fcoe/cfg-ethx /etc/fcoe/cfg-enp1s0
  3. 启用并启动 fcoe 服务:

    # systemctl enable --now fcoe
  4. 在接口 enp1s0 中发现 FCoE VLAN,为发现的 VLAN 创建网络设备,并启动启动器:

    # fipvlan -s -c enp1s0
    Created VLAN device enp1s0.200
    Starting FCoE on interface enp1s0.200
    Fibre Channel Forwarders Discovered
    interface       | VLAN | FCF MAC
    ------------------------------------------
    enp1s0          | 200  | 00:53:00:a7:e7:1b
  5. 可选:显示发现的目标、LUN 和与 LUN 关联的设备详情:

    # fcoeadm -t
    Interface:        enp1s0.200
    Roles:            FCP Target
    Node Name:        0x500a0980824acd15
    Port Name:        0x500a0982824acd15
    Target ID:        0
    MaxFrameSize:     2048 bytes
    OS Device Name:   rport-11:0-1
    FC-ID (Port ID):  0xba00a0
    State:            Online
    
    LUN ID  Device Name   Capacity   Block Size  Description
    ------  -----------  ----------  ----------  ---------------------
         0  sdb           28.38 GiB      512     NETAPP LUN (rev 820a)
         ...

    本例显示 SAN 中的 LUN 0 已作为 /dev/sdb 设备附加到主机中。

验证

  • 显示所有活跃 FCoE 接口的信息:

    # fcoeadm -i
    Description:      BCM57840 NetXtreme II 10 Gigabit Ethernet
    Revision:         11
    Manufacturer:     Broadcom Inc. and subsidiaries
    Serial Number:    000AG703A9B7
    
    Driver:           bnx2x Unknown
    Number of Ports:  1
    
        Symbolic Name:     bnx2fc (QLogic BCM57840) v2.12.13 over enp1s0.200
        OS Device Name:    host11
        Node Name:         0x2000000af70ae935
        Port Name:         0x2001000af70ae935
        Fabric Name:       0x20c8002a6aa7e701
        Speed:             10 Gbit
        Supported Speed:   1 Gbit, 10 Gbit
        MaxFrameSize:      2048 bytes
        FC-ID (Port ID):   0xba02c0
        State:             Online

其他资源

第 13 章 管理磁带设备

磁带设备是保存数据并按顺序访问的磁带。使用磁带驱动器将数据写入此磁带设备。不需要创建文件系统来存储磁带设备中的数据。可以使用各种接口(如 SCSI、FC、USB、SATA 和其他接口)连接到主机计算机。

13.1. 磁带设备的类型

以下是不同类型的磁带设备列表:

  • /dev/st0 是一个回卷磁带设备。
  • /dev/nst0 是一个非回卷磁带设备。使用非缓解设备进行日常备份。

使用磁带设备有几个优点。它们成本效益高且稳定。磁带设备也对数据崩溃具有弹性,并适合长久保存数据。

13.2. 安装磁带驱动器管理工具

使用 mt 命令返回数据。mt 实用程序控制 magnetic 磁带驱动器操作,而 st 程序则用于 SCSI 磁带驱动程序。这个步骤描述了如何为磁带驱动器操作安装 mt-st 软件包。

步骤

  • 安装 mt-st 软件包:

    # dnf install mt-st

其他资源

  • mt(1)st(4) man pages

13.3. 写入如回卷磁带设备

在每次操作后,回卷磁带设备会进行回卷。要备份数据,您可以使用 tar 命令。默认情况下,在磁带设备中,块大小为 10KB(bs=10k)。您可以使用 export TAPE =/dev/st0 属性来设置 TAPE 环境变量。使用 -f 设备选项指定磁带设备文件。当您使用多个磁带设备时,这个选项很有用。

先决条件

  1. 已安装 mt-st 软件包。如需更多信息,请参阅安装磁带驱动器管理工具
  2. 加载磁带驱动器:

    # mt -f /dev/st0 load

步骤

  1. 检查磁带头:

    # 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 是即时报告模式。
  2. 如果磁带设备不是空的,覆盖它:

    # tar -czf /dev/st0 _/source/directory

    该命令使用 /source/directory 目录的内容覆盖 tape 设备中的数据

  3. /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
    [...]
  4. 查看磁带设备的状态:

    # mt -f /dev/st0  status

验证步骤

  • 查看磁带设备上的所有文件列表:

    # tar -tzf /dev/st0
    /source/directory/
    /source/directory/man_db.conf
    /source/directory/DIR_COLORS
    /source/directory/rsyslog.conf
    [...]

13.4. 写入非回卷解磁带设备

在完成特定命令后,非回卷磁带设备会将磁带保持在当前位置。例如,备份后,您可以将更多数据附加到非回卷的磁带设备中。您还可以使用它来避免任何意外的回卷。

先决条件

  1. 已安装 mt-st 软件包。如需更多信息,请参阅安装磁带驱动器管理工具
  2. 加载磁带驱动器:

    # mt -f /dev/nst0 load

步骤

  1. 检查非回卷磁带设备 /dev/nst0 的磁带头:

    # mt -f /dev/nst0 status
  2. 指定位于头或磁带末尾的指针:

    # mt -f /dev/nst0 rewind
  3. 附加磁带设备中的数据:

    # mt -f /dev/nst0 eod
    # tar -czf /dev/nst0 /source/directory/
  4. /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
    [...]
  5. 查看磁带设备的状态:

    # mt -f /dev/nst0  status

验证步骤

  • 查看磁带设备上的所有文件列表:

    # tar -tzf /dev/nst0
    /source/directory/
    /source/directory/man_db.conf
    /source/directory/DIR_COLORS
    /source/directory/rsyslog.conf
    [...]

13.5. 在磁带设备中切换磁带头

使用以下步骤切换磁带设备中的磁带头。

先决条件

  1. 已安装 mt-st 软件包。如需更多信息,请参阅安装磁带驱动器管理工具
  2. 数据被写入磁带设备。如需更多信息,请参阅写入回卷磁带设备,或写入非回卷磁带设备

步骤

  • 查看磁带指针的当前位置:

    # mt -f /dev/nst0 tell
  • 在将数据附加到磁带设备时切换磁带头:

    # mt -f /dev/nst0 eod
  • 使用之前的记录:

    # mt -f /dev/nst0 bsfm 1
  • 转至正向记录:

    # mt -f /dev/nst0 fsf 1

其他资源

  • mt(1) man page

13.6. 从磁带设备中恢复数据

要从磁带设备中恢复数据,请使用 tar 命令。

先决条件

  1. 已安装 mt-st 软件包。如需更多信息,请参阅安装磁带驱动器管理工具
  2. 数据被写入磁带设备。如需更多信息,请参阅写入回卷磁带设备,或写入非回卷磁带设备

步骤

  • 对于回卷磁带设备 /dev/st0

    • 恢复 /source/directory/

      # tar -xzf /dev/st0 /source/directory/
  • 对于非回卷磁带设备 /dev/nst0

    • 重新构建磁带设备:

      # mt -f /dev/nst0 rewind
    • 恢复 etc 目录:

      # tar -xzf /dev/nst0 /source/directory/

其他资源

  • mt(1)tar(1) man pages

13.7. 从磁带设备中删除数据

要从磁带设备中删除数据,使用 erase 选项。

先决条件

  1. 已安装 mt-st 软件包。如需更多信息,请参阅安装磁带驱动器管理工具
  2. 数据被写入磁带设备。如需更多信息,请参阅写入回卷磁带设备,或写入非回卷磁带设备

步骤

  1. 从磁带设备中删除数据:

    # mt -f /dev/st0 erase
  2. 卸载磁带设备:

    mt -f /dev/st0 offline

其他资源

  • mt(1) man page

13.8. 磁带命令

以下是常见的 mt 命令:

表 13.1. mt 命令

命令描述

mt -f /dev/st0 status

显示磁带设备的状态。

mt -f /dev/st0 erase

擦除整个磁带。

mt -f /dev/nst0 rewind

插入磁带设备。

mt -f /dev/nst0 fsf n

将磁带头切换到转发记录。在这里,n 是一个可选的文件数。如果指定了文件计数,磁带头将跳过 n 个记录。

mt -f /dev/nst0 bsfm n

将磁头切换到之前的记录。

mt -f /dev/nst0 eod

将磁带头切换到数据的末尾。