跳到内容
documentation.suse.com / 储存管理指南
SUSE Linux Enterprise Server 12 SP5

储存管理指南

提供有关如何在 SUSE Linux Enterprise Server 上管理储存设备的信息。

出版日期: 2024 年 12 月 12 日

版权所有 © 2006– 2024 SUSE LLC 和贡献者。保留所有权利。

根据 GNU 自由文档许可证 (GNU Free Documentation License) 版本 1.2 或(根据您的选择)版本 1.3 中的条款,在此授予您复制、分发和/或修改本文档的许可权限;本版权声明和许可证附带不可变部分。许可证版本 1.2 的副本包含在题为GNU 自由文档许可证的部分。

有关 SUSE 商标,请参见 http://www.suse.com/company/legal/。所有其它第三方商标是其各自所有者的财产。商标符号(®、™ 等)代表 SUSE 及其附属公司的商标。星号 (*) 代表第三方商标。

本指南力求涵盖所有详细信息。但这并不确保本指南准确无误。SUSE LLC 及其附属公司、作者和译者对于可能出现的错误或由此造成的后果皆不承担责任。

关于本指南

本指南提供关于如何管理 SUSE Linux Enterprise Server 12 SP5 上的储存设备的信息。有关分区和管理设备的信息,请参见Book “部署指南”, Chapter 12 “高级磁盘设置”。本指南适用于系统管理员。

1 可用文档

注意
注意:在线文档和最新更新

我们的产品文档可从 https://documentation.suse.com/ 获取,您也可以在此处找到最新更新,以及浏览或下载各种格式的文档。

此外,您安装的系统的 /usr/share/doc/manual 下通常会提供产品文档。

针对本产品提供的文档如下:

Article “安装快速入门

列出系统要求,并指导您从 DVD 或 ISO 映像逐步安装 SUSE Linux Enterprise Server

Book “部署指南

显示如何安装单个或多个系统,以及如何利用产品继承功能建立部署基础结构。有各种方法可供选择,可以选择使用本地安装或网络安装服务器,也可以选择使用远程控制、高度自定义的自动安装技术进行大规模部署。

Book “管理指南

讲述系统管理任务,如维护、监视和自定义初始安装的系统。

Book “Virtualization Guide”

概述虚拟化技术,并介绍虚拟化的统一接口 libvirt,以及有关特定超级管理程序的详细信息。

Book “储存管理指南

提供有关如何在 SUSE Linux Enterprise Server 上管理储存设备的信息。

Book “AutoYaST”

AutoYaST 系统使用包含安装和配置数据的 AutoYaST 配置文件,让您以无人照管方式批量部署 SUSE Linux Enterprise Server 系统。该手册将引导您完成自动安装的基本步骤,包括准备、安装和配置。

Book “Security and Hardening Guide”

介绍系统安全的基本概念,包括本地安全方面和网络安全方面。说明如何使用产品固有的安全软件(例如 AppArmor),或者能够可靠收集有关任何安全相关事件的信息的审核系统。

Book “Hardening Guide”

处理安装和设置安全 SUSE Linux Enterprise Server 的特定事项以及进一步确保和强化安装所需的额外安装后步骤。支持管理员选择与安全相关的选项并做出决策。

Book “System Analysis and Tuning Guide”

关于问题检测、解决和优化的管理员指南。了解如何使用监视工具检查和优化系统以及如何有效管理资源。还包含常见问题和解决方法的概述以及其他帮助和文档资源。

Book “Subscription Management Tool Guide”

订阅管理工具管理员指南。订阅管理工具是用于 SUSE Customer Center 并包含储存库和注册目标的代理系统。了解如何安装和配置本地 SMT 服务器、镜像和管理储存库、管理客户端计算机,以及配置客户端以使用 SMT。

Book “GNOME 用户指南

介绍 SUSE Linux Enterprise Server 的 GNOME 桌面。指导您使用和配置桌面并帮助您执行关键任务。它主要面向想要有效使用 GNOME 作为其默认桌面的最终用户。

2 反馈

提供了多种反馈渠道:

错误和增强请求

有关产品可用的服务和支持选项,请参见 http://www.suse.com/support/

有关 openSUSE 的帮助由社区提供。有关更多信息,请参考https://en.opensuse.org/Portal:Support

要报告产品组件的 Bug,请访问 https://scc.suse.com/support/requests 并登录,然后单击新建

用户意见

我们希望收到您对本手册和本产品中包含的其他文档的意见和建议。请使用每个标题旁的报告问题链接通过 SUSE Bugzilla 提供反馈。

邮件

如有对本产品文档的反馈,也可以发送邮件至 doc-team@suse.com。请确保反馈中含有文档标题、产品版本和文档发布日期。要报告错误或给出增强建议,请提供问题的简要说明并指出相应章节编号和页码(或 URL)。

3 文档约定

本文档中使用了以下通知和排版约定:

  • /etc/passwd:目录名称和文件名

  • PLACEHOLDERPLACEHOLDER 将会替换为实际的值

  • PATH:环境变量 PATH

  • ls--help:命令、选项和参数

  • user:用户和组

  • package name :包名称

  • AltAltF1:按键或组合键;这些键以大写形式显示,如在键盘上一样

  • 文件文件 › 另存为:菜单项,按钮

  • AMD/Intel 本段内容仅与 AMD64/Intel 64 体系结构相关。箭头标记文本块的开始位置和结束位置。

    IBM Z, POWER 本段内容仅与 IBM 体系结构 ZPOWER 相关。箭头标记文本块的开始位置和结束位置。

  • 跳舞的企鹅企鹅一章,↑其他手册):此内容参见自其他手册中的一章。

  • 必须使用 root 特权运行的命令。您往往还可以在这些命令前加上 sudo 命令,以非特权用户身份来运行它们。

    root # command
    tux > sudo command
  • 可以由非特权用户运行的命令。

    tux > command
  • 注意

    警告
    警告:警告通知

    在继续操作之前,您必须了解的不可或缺的信息。向您指出有关安全问题、潜在数据丢失、硬件损害或物理危害的警告。

    重要
    重要:重要通知

    在继续操作之前,您必须了解的重要信息。

    注意
    注意:注意通知

    额外信息,例如有关软件版本差异的信息。

    提示
    提示:提示通知

    有用信息,例如指导方针或实用性建议。

第 I 部分 文件系统与装入

  • 1 Linux 中的文件系统的概述
  • SUSE Linux Enterprise Server 随附了不同的文件系统供您选择,包括 Btrfs、Ext4、Ext3、Ext2、ReiserFS 和 XFS。每个文件系统都有各自的优点和缺点。有关 SUSE Linux Enterprise Server 中主要文件系统的并排功能比较,请参见 http://www.suse.com/products/server/technical-information/#FileSystem(文件系统支持和大小)。本章概述了这些文件系统的工作原理以及它们的优点。

  • 2 调整文件系统大小
  • 调整文件系统大小(不要与调整分区或卷大小混淆)可用于将物理卷上的空间变为可用状态,或使用物理卷上可用的其他空间。

  • 3 使用 UUID 装入设备
  • 本章介绍使用 UUIDs(全局唯一标识符)而不是设备名称(例如 /dev/sda1)来识别文件系统设备。从 SUSE Linux Enterprise Server 12 开始,默认在引导加载程序文件和 /etc/fstab 文件中使用 UUID。

  • 4 用于块设备操作的多层超速缓存
  • 多层超速缓存是一种复制的/分布式超速缓存,它至少包括两个层:一个层由速度较慢但较为廉价的旋转块设备(硬盘)表示,另一个层成本更高,但执行数据操作的速度更快(例如,SSD 闪存盘)。

1 Linux 中的文件系统的概述

SUSE Linux Enterprise Server 随附了不同的文件系统供您选择,包括 Btrfs、Ext4、Ext3、Ext2、ReiserFS 和 XFS。每个文件系统都有各自的优点和缺点。有关 SUSE Linux Enterprise Server 中主要文件系统的并排功能比较,请参见 http://www.suse.com/products/server/technical-information/#FileSystem(文件系统支持和大小)。本章概述了这些文件系统的工作原理以及它们的优点。

在 SUSE Linux Enterprise 12 中,Btrfs 是操作系统的默认文件系统,XFS 是所有其他使用案例的默认文件系统。此外,SUSE 仍继续支持 Ext 系列的文件系统、ReiserFS 和 OCFS2。根据默认设置,Btrfs 文件系统将设置为使用子卷。对于使用 snapper 基础结构的根文件系统,将会自动启用快照。有关 snapper 的详细信息,请参见Book “管理指南”, Chapter 7 “通过 Snapper 进行系统恢复和快照管理”

专业的高性能设置可能需要高可用性的储存系统。为符合高性能群集案例的要求,SUSE Linux Enterprise Server 在 High Availability Extension 附加产品中加入了 OCFS2(Oracle Cluster File System 2) 与 Distributed Replicated Block Device (DRBD)。本指南中不涉及这些高级储存系统的内容。有关详细信息,请参见《SUSE Linux Enterprise High Availability Extension 管理指南》,网址为:http://www.suse.com/doc

记住一点很重要:没有任何一种文件系统适合所有种类的应用。每个文件系统都有各自的特定优点和缺点,必须将这些因素考虑在内。此外,即使是最复杂的文件系统也不能替代合理的备份策略。

本节中使用的术语数据完整性数据一致性并不是指用户空间数据(您的应用程序写入其文件的数据)的一致性。此数据是否一致必须由应用程序本身控制。

除非本节特别指明,否则设置或更改分区以及文件系统所需的一切步骤,都可以使用 YaST 分区程序(强烈推荐使用)来执行。有关信息,请参见Book “部署指南”, Chapter 12 “高级磁盘设置”

1.1 术语

元数据

文件系统内部的一种数据结构。它可确保磁盘上的所有数据都有条不紊,并且可供访问。从本质上讲,它是有关数据的数据。几乎每一种文件系统都有自己的元数据结构,这也是文件系统展现出不同性能特性的原因所在。维护元数据的完整性非常重要,因为如果不这样,则可能无法访问文件系统中的所有数据。

inode

文件系统的数据结构包含文件的各种信息,包括大小、链接数量、实际储存文件内容的磁盘块的指针、创建、修改和访问的日期与时间。

日记

在提及文件系统时,日记是包含某种日志的磁盘上结构,文件系统将要对文件系统的元数据进行的更改储存在此日志中。日记可大大降低文件系统的恢复时间,因为有了它就不需要在系统启动时执行文件系统全面检查这一冗长的搜索程序。而只是重放日记。

1.2 Btrfs

Brtfs 是由 Chris Mason 开发的一种写时复制 (COW) 文件系统。它基于 Ohad Rodeh 开发的适用于 COW 的 B 树。Btrfs 是日志记录样式的文件系统。它不记录块更改,而是将块更改写入新位置,然后链接上更改。新更改在上一次写后才提交。

1.2.1 主要特征

Btrfs 提供容错、修复和易于管理的功能,比如:

  • 可写快照,允许应用更新后按需轻松回滚系统或允许备份文件。

  • 子卷支持:Btrfs 会在为其指派的空间池中创建默认子卷。它允许您在相同空间池中创建更多的子卷,作为不同的文件系统。子卷的数目仅受分配给池的空间所限。

  • Btrfs 命令行工具中提供了在线检查和修复功能 scrub。它会在假设树状结构没有问题的前提下,验证数据和元数据的完整性。您可以在安装的文件系统上定期运行 scrub;正常操作期间,它将在后台运行。

  • 不同 RAID 级别,适用于元数据和用户数据。

  • 用于元数据和用户数据的不同校验和,可改进错误检测。

  • 与 Linux 逻辑卷管理器 (LVM) 储存对象集成。

  • SUSE Linux Enterprise Server 上的 YaST 分区程序及 AutoYaST 整合。这还包括在多个设备 (MD) 和设备映射程序 (DM) 储存配置上创建 Btrfs 文件系统。

  • 从现有的 Ext2、Ext3 以及 Ext4 文件系统进行脱机迁移。

  • /boot 的引导加载程序支持,允许从 Btrfs 分区引导。

  • SUSE Linux Enterprise Server }12 SP5 中的 RAID0、RAID1 和 RAID10 配置文件支持多卷 Btrfs。更高的 RAID 级别尚不受支持,但安装将来发布的服务包后可能会支持。

  • 使用 Btrfs 命令设置透明压缩。

1.2.2 SUSE Linux Enterprise Server 上的根文件系统设置

SUSE Linux Enterprise Server 默认设置为对根分区使用 Btrfs 和快照。快照可让您在应用更新之后有需要时轻松地回滚系统,也可让您备份文件。快照可通过 SUSE Snapper 基础结构轻松管理,如Book “管理指南”, Chapter 7 “通过 Snapper 进行系统恢复和快照管理”所述。有关 SUSE Snapper 项目的一般信息,请参见 OpenSUSE.org (http://snapper.io) 上的 Snapper 门户网站 Wiki。

使用快照回滚系统时,必须确保在回滚期间,数据(例如用户的主目录、Web 和 FTP 服务器内容或日志文件)不会遗失或被重写。这一点通过使用根文件系统上的 Btrfs 子卷实现。子卷可从快照中排除。安装期间,根据 YaST 建议,SUSE Linux Enterprise Server 上的默认根文件系统设置包含下列子卷。由于以下原因,它们会从快照中排除。

/boot/grub2/i386-pc/boot/grub2/x86_64-efi/boot/grub2/powerpc-ieee1275/boot/grub2/s390x-emu

不能回滚引导加载程序配置。上面列出的目录是架构专属目录。前两个目录位于 AMD64/Intel 64 计算机上,后两个目录分别位于 IBM POWER 和 IBM Z 上。

/home

如果独立的分区中没有 /home,便会将该目录排除以免在回滚时发生数据丢失。

/opt/var/opt

第三方产品通常安装到 /opt 下。排除此目录是为了防止在回滚时卸装这些应用程序。

/srv

包含 Web 和 FTP 服务器的数据。排除此目录是为了防止在回滚时发生数据丢失。

/tmp/var/tmp/var/cache/var/crash

包含临时文件和超速缓存的所有目录都会排除在快照范围之外。

/usr/local

在手动安装软件时会用到此目录。系统会将该目录排除以免在回滚时卸载这些安装的软件。

/var/lib/libvirt/images

使用 libvirt 管理的虚拟机映像的默认位置。为确保回滚期间虚拟机映像不会替换为旧版本而被排除。默认情况下,此子卷是使用写入时不复制选项创建的。

/var/lib/mailman/var/spool

包含邮件或邮件队列的目录会排除,以免在回滚后造成邮件丢失。

/var/lib/bind

包含 DNS 服务器的区域数据。排除该目录是为了确保回滚后名称服务器仍能运作。

/var/lib/mariadb/var/lib/mysql/var/lib/pgqsl

这些目录包含数据库数据。默认情况下,这些子卷是使用写入时不复制选项创建的。

/var/log

日志文件所在的位置。排除该目录是为了在对受损的系统进行回滚后能够对日志文件进行分析。/var/log 默认会设置 NoCOW 属性,禁止写入时复制,从而改进了性能并减少了重复的块数量。使用 lsattr 进行校验:

tux > lsattr -l /var/
/var/log      No_COW
警告
警告:回滚支持

仅当您未去除任何预先设置的子卷时,SUSE 支持才支持回滚。不过,您可以使用 YaST 分区程序添加其他子卷。

1.2.2.1 装入压缩的 Btrfs 文件系统

注意
注意:GRUB 2 和 LZO 压缩根目录

GRUB 2 无法读取 lzo 压缩根目录。如果要使用压缩,您需要创建单独的 /boot 分区。

从 SLE12 SP1 开始,支持压缩 Btrfs 文件系统。使用 compresscompress-force 选项,并选择压缩算法 lzozlib(默认)。zlib 压缩的压缩率更高,而 lzo 的压缩速度更快,并且所需的 CPU 负载更小。

例如:

root # mount -o compress /dev/sdx /mnt

如果您创建了一个文件并在其中写入数据,而压缩后的结果大于或等于未压缩时的大小,则将来针对此文件执行写入操作后,Btrfs 会始终跳过压缩。如果您不希望有这种行为,请使用 compress-force 选项。对于包含一些初始未压缩数据的文件而言,此选项可能很有用。

请注意,压缩只会作用于新文件。如果使用 compresscompress-force 选项装入文件系统,则在未压缩的情况下写入的文件将不会压缩。此外,包含 nodatacow 属性的文件的内容永远不会压缩:

root # chattr +C FILE
root # mount -o nodatacow  /dev/sdx /mnt

加密与任何压缩操作均无关。在此分区中写入一些数据后,请打印细节:

root # btrfs filesystem show /mnt
btrfs filesystem show /mnt
Label: 'Test-Btrfs'  uuid: 62f0c378-e93e-4aa1-9532-93c6b780749d
        Total devices 1 FS bytes used 3.22MiB
      devid    1 size 2.00GiB used 240.62MiB path /dev/sdb1

如果您希望此设置是永久性的,请在 /etc/fstab 配置文件中添加 compresscompress-force 选项。例如:

UUID=1a2b3c4d /home btrfs subvol=@/home,compress 0 0

1.2.2.2 装入子卷

SUSE Linux Enterprise Server 上,从快照进行系统回滚的程序通过先从快照引导来执行。这样一来,您便可以在运行回滚之前,在运行的同时检查快照。只要装入子卷,就可以实现从快照引导(通常没必要)。

除了第 1.2.2 节 “SUSE Linux Enterprise Server 上的根文件系统设置”中列出的子卷之外,系统中还存在一个名为 @ 的卷。这是默认的子卷,将作为根分区 (/) 装入。其他子卷将装入到此卷中。

从快照引导时,使用的不是 @ 子卷,而是快照。快照中包括的文件系统部分将以只读方式装入为 /。其他子卷将以可写入方式装入到快照中。此状态默认为临时状态,下次重引导时将还原先前的配置。若要使它成为永久状态,请执行 snapper rollback 命令。这将使目前引导的快照成为新的默认子卷,在重引导之后将会使用它。

1.2.2.3 检查可用空间

通常可通过运行 df 命令来检查文件系统的用量。在 Btrfs 文件系统上,df 的输出可能有误导性,因为除了原始数据分配的空间以外,Btrfs 文件系统还会为元数据分配并使用空间。

因此,即使看上去仍有大量的可用空间,Btrfs 文件系统也可能会报告空间不足。发生这种情况时,为元数据分配的全部空间都已用尽。使用以下命令可检查 Btrfs 文件系统上已用和可用的空间:

btrfs filesystem show
tux > sudo btrfs filesystem show /
Label: 'ROOT'  uuid: 52011c5e-5711-42d8-8c50-718a005ec4b3
        Total devices 1 FS bytes used 10.02GiB
        devid    1 size 20.02GiB used 13.78GiB path /dev/sda3

显示文件系统的总大小及其用量。如果最后一行中的这两个值匹配,则表示文件系统上的全部空间都已分配出去。

btrfs filesystem df
tux > sudo btrfs filesystem df /
Data, single: total=13.00GiB, used=9.61GiB
System, single: total=32.00MiB, used=16.00KiB
Metadata, single: total=768.00MiB, used=421.36MiB
GlobalReserve, single: total=144.00MiB, used=0.00B

显示文件系统的已分配 (total) 空间和已用空间值。如果元数据的 totalused 值基本上相等,则表示元数据的全部空间都已分配出去。

btrfs filesystem usage
tux > sudo btrfs filesystem usage /
Overall:
    Device size:                  20.02GiB
    Device allocated:             13.78GiB
    Device unallocated:            6.24GiB
    Device missing:                  0.00B
    Used:                         10.02GiB
    Free (estimated):              9.63GiB      (min: 9.63GiB)
    Data ratio:                       1.00
    Metadata ratio:                   1.00
    Global reserve:              144.00MiB      (used: 0.00B)

             Data     Metadata  System
Id Path      single   single    single   Unallocated
-- --------- -------- --------- -------- -----------
 1 /dev/sda3 13.00GiB 768.00MiB 32.00MiB     6.24GiB
-- --------- -------- --------- -------- -----------
   Total     13.00GiB 768.00MiB 32.00MiB     6.24GiB
   Used       9.61GiB 421.36MiB 16.00KiB

显示类似于前两个命令输出合并所得的数据。

有关详细信息,请参见 man 8 btrfs-filesystemhttps://btrfs.wiki.kernel.org/index.php/FAQ

1.2.3 从 Ext 和 ReiserFS 文件系统迁移至 Btrfs

您可以将数据卷从现有 Ext(Ext2、Ext3 或 Ext4)或 ReiserFS 文件系统迁移至 Btrfs 文件系统。转换过程将在该设备的适当位置以脱机方式进行。文件系统至少需要使用设备上 15% 的可用空间。

要将 文件系统转换为 Btrfs 文件系统,请将文件系统脱机,然后输入:

sudo btrfs-convert DEVICE

要将迁移回滚到原先的 文件系统,请将文件系统脱机,然后输入:

sudo btrfs-convert -r DEVICE
警告
警告:不支持根文件系统转换

不支持将根文件系统转换为 Btrfs。请保留现有的文件系统,或者从头开始重新安装整个系统。

重要
重要:可能的数据丢失

回滚到原先的 文件系统时,将丢失所有在转换为 Btrfs 文件系统后添加的数据。也就是说,只有原始数据会重新转换为先前的文件系统。

1.2.4 Btrfs 管理

Btrfs 与 YaST 分区程序和 AutoYaST 集成。您可以在安装期间使用它来为根文件系统建立解决方案。安装之后,您可以使用 YaST 分区程序来查看和管理 Btrfs 卷。

btrfsprogs 包中提供了 Btrfs 管理工具。有关使用 Btrfs 命令的信息,请参见 man 8 btrfsman 8 btrfsckman 8 mkfs.btrfs 命令。有关 Btrfs 功能的信息,请参见 Btrfs Wiki,网址为 http://btrfs.wiki.kernel.org

1.2.5 Btrfs 子卷定额支持

Btrfs 根文件系统子卷 /var/log/var/crash/var/cache 在正常运作情况下可能会使用所有可用的磁盘空间,此时将导致系统故障。为避免出现此状况,SUSE Linux Enterprise Server 现在提供了 Btrfs 子卷配额支持。如果您按照相应的 YaST 建议设置根文件系统,系统会为根文件系统进行相应的准备:所有子卷的配额组 (qgroup) 均已设置。若要设置根文件系统中子卷的配额,请执行下列步骤:

  1. 启用配额支持:

    sudo btrfs quota enable /
  2. 取得子卷列表:

    sudo btrfs subvolume list /

    只能为现有子卷设置配额。

  3. 为上一步中所列的其中一个子卷设置配额。子卷可以用路径识别(例如 /var/tmp),也可以用 0/子卷 ID 识别(例如 0/272)。下面的范围为 /var/tmp 设置了 5 GB 的配额。

    sudo btrfs qgroup limit 5G /var/tmp

    大小单位可以是字节 (5000000000)、KB (5000000K)、MB (5000M) 或 GB (5G)。以字节为单位产生的值略有不同,因为 1024 字节 = 1 KB,1024 KB = 1 MB 等。

  4. 若要列出现有配额,请使用以下命令。max_rfer 列以字节为单位显示配额。

    sudo btrfs qgroup show -r /
提示
提示:取消配额

如果您要取消现有定额,请将定额大小设置为 none

sudo btrfs qgroup limit none /var/tmp

若要禁用某个分区及其所有子卷的配额支持,请使用 btrfs quota disable

sudo btrfs quota disable /

有关细节,请参见 man 8 btrfs-qgroupman 8 btrfs-quota。Btrfs Wiki (https://btrfs.wiki.kernel.org/index.php/UseCases) 上的 UseCases 页面也提供了更多信息。

1.2.6 Btrfs 发送/接收

Btrfs 允许生成快照来捕获文件系统的状态。例如,Snapper 可使用此功能在系统更改之前及之后创建快照,以便允许回滚。不过,将快照与发送/接收功能结合使用还可以在远程位置创建和维护文件系统的副本。例如,此功能可用于执行增量备份。

btrfs send 操作可计算同一子卷中两个只读快照之间的差异,并将差异发送到某个文件或 STDOUT。Btrfs receive 操作接收发送命令的结果,并将其应用到快照。

1.2.6.1 先决条件

要使用 Btrfs 的发送/接收功能,需要满足以下要求:

  • 源端(发送)和目标端(接收)各有一个 Btrfs 文件系统。

  • Btrfs 发送/接收是对快照执行的,因此,相应的数据需要驻留在 Btrfs 子卷中。

  • 源端中的快照必须为只读模式。

  • SUSE Linux Enterprise 12 SP2 或更高版本。早期版本的 SUSE Linux Enterprise 不支持发送/接收。

1.2.6.2 增量备份

以下过程展示了 Btrfs 发送/接收操作的基本用法,其中示范了如何在 /backup/data(目标端)中创建 /data(源端)的增量备份。/data 必须是一个子卷。

过程 1.1︰ 初始设置
  1. 在源端创建初始快照(在本示例中名为 snapshot_0),并确保将它写入该磁盘:

    sudo btrfs subvolume snapshot -r /data /data/bkp_data
    sync

    即会创建一个新子卷 /data/bkp_data。该子卷将用作后续增量备份的基础,应将它保留为参照。

  2. 将初始快照发送到目标端。由于这是初始的发送/接收操作,因此需要发送整个快照:

    sudo bash -c 'btrfs send /data/bkp_data | btrfs receive /backup'

    目标端上即会创建一个新子卷 /backup/bkp_data

完成初始设置后,可以创建增量备份,并将当前快照与先前快照之间的差异发送到目标端。操作过程始终是相同的:

  1. 在源端创建新快照。

  2. 将差异发送到目标端。

  3. 可选:重命名和/或清理两端中的快照。

过程 1.2︰ 执行增量备份
  1. 在源端创建新快照,并确保将它写入该磁盘。在下面的示例中,快照命名为 bkp_data_当前日期

    sudo btrfs subvolume snapshot -r /data /data/bkp_data_$(date +%F)
    sync

    创建新子卷,例如 /data/bkp_data_2016-07-07

  2. 将先前快照与您创建的快照之间的差异发送到目标端。为此,可以使用选项 -p SNAPSHOT 指定先前的快照。

    sudo bash -c 'btrfs send -p /data/bkp_data /data/bkp_data_2016-07-07 \
    | btrfs receive /backup'

    即会创建一个新子卷 /backup/bkp_data_2016-07-07

  3. 如此我们有了四个快照,每端各有两个:

    /data/bkp_data
    /data/bkp_data_2016-07-07
    /backup/bkp_data
    /backup/bkp_data_2016-07-07

    现在,关于如何继续,您有三种选择:

    • 保留两端中的所有快照。如果采用这种选择,您可以回滚到两端中的任一快照,同时会复制所有数据。不需要执行额外操作。执行后续增量备份时,请记得使用倒数第二个快照作为发送操作的父项。

    • 仅保留源端中的最后一个快照,保留目标端中的所有快照。此外,允许回滚到两端中的任一快照 - 要回滚到源端中的特定快照,请对整个快照执行从目标端到源端的发送/接收操作。在源端执行删除/移动操作。

    • 仅保留两端中的最后一个快照。采用这种方法,您会在目标端创建一个备份,该备份代表源端中生成的最后一个快照的状态。系统无法回滚到其他快照。在源端和目标端执行删除/移动操作。

    1. 如果只想保留源端中的最后一个快照,请执行以下命令:

      sudo btrfs subvolume delete /data/bkp_data
      sudo mv /data/bkp_data_2016-07-07 /data/bkp_data

      第一条命令将删除先前的快照,第二条命令将当前快照重命名为 /data/bkp_data。这可确保备份的最后一个快照始终命名为 /data/bkp_data。因此,您也可以始终使用此子卷名称作为增量发送操作的父项。

    2. 如果只想保留目标端中的最后一个快照,请执行以下命令:

      sudo btrfs subvolume delete /backup/bkp_data
      sudo mv /backup/bkp_data_2016-07-07 /backup/bkp_data

      第一条命令将删除先前的备份快照,第二条命令将当前备份快照重命名为 /backup/bkp_data。这可确保最新的备份快照始终命名为 /backup/bkp_data

提示
提示:发送到远程目标端

要将快照发送到远程计算机,请使用 SSH:

btrfs send /data/bkp_data | ssh root@jupiter.example.com 'btrfs receive /backup'

1.2.7 重复数据删除支持

Btrfs 支持重复数据删除功能,具体办法是以指向通用储存位置中的块单一副本的逻辑链接替换文件系统中完全相同的块。SUSE Linux Enterprise Server 提供 duperemove 工具来扫描文件系统中有没有完全相同的块。在 Btrfs 文件系统上使用时,它也可以用来对这些块执行重复数据删除。系统上默认不会安装 duperemove。要使此功能可用,请安装包 duperemove

注意
注意:使用案例

SUSE Linux Enterprise Server 12 SP5 开始,duperemove 不再适用于对整个文件系统执行重复数据删除。它主要用于对 10 到 50 个为一组的大型文件执行重复数据删除操作(这些文件可能具有许多通用块,例如虚拟机映像)。

duperemove 可以针对一系列文件操作,也可以以递归方式扫描某个目录:

sudo duperemove OPTIONS file1 file2 file3
sudo duperemove -r OPTIONS directory

它有两种操作模式:只读和重复数据删除。以只读模式运行时(即不使用 -d 开关),它会扫描给定文件或目录中的重复块,并将其打印出来。此模式适用于所有文件系统。

以重复数据删除模式执行 duperemove 仅在 Btrfs 文件系统上受支持。扫描给定文件或目录之后,将会提交重复的块以进行重复数据删除。

有关详细信息,请参见 man 8 duperemove

1.3 XFS

SGI 在 20 世纪 90 年代初开始开发 XFS,最初计划将 XFS 作为 IRIX OS 的文件系统。开发 XFS 的目的是创建一个高性能的 64 位日记文件系统来满足对计算能力的极高要求。XFS 适合操纵大型文件,在高端硬件上表现优异。XFS 是 SUSE Linux Enterprise Server 中数据分区的默认文件系统。

快速回顾 XFS 的关键功能可解释为什么此文件系统经证明在高端计算方面是其他日记文件系统的强大竞争对手。

1.3.1 使用分配组实现高可伸缩性

在创建 XFS 文件系统时,文件系统底层的块设备被分成 8 个或 8 个以上相同大小的线性区域。这些区域称为分配组。每个分配组管理自己的 inode 和可用空间。实际上,可以将分配组看作文件系统中的文件系统。因为分配组相互独立,所以内核可同时对多个分配组进行寻址。此功能是 XFS 优异的可伸缩性关键之所在。独立分配组的概念自然适合多处理器系统的需要。

1.3.2 通过有效管理磁盘空间获得高性能

可用空间和 inode 是由分配组内的 B+ 树处理的。使用 B+ 树将大大增强 XFS 的性能和可伸缩性。XFS 使用延迟分配,它可以通过将进程分为两部分而处理分配。将挂起事务储存在 RAM 中并保留适当数量的空间。XFS 仍不决定应储存数据的准确位置(即不指出文件系统块)。此决定将被延迟到最后的时刻。某些生存期很短的临时数据可能永远不会被储存到磁盘上,这是因为在 XFS 决定保存它们的实际位置时,这些数据可能已经过时了。以这种方式,XFS 增强了写性能并减少了文件系统分段。因为延迟分配引起写事件的频率比其他文件系统引起写事件的频率要低,所以如果写操作期间发生系统崩溃,则数据丢失可能会更加严重。

1.3.3 进行预分配以避免文件系统碎片

在将数据写入文件系统前,XFS 保留(预分配)文件所需的可用空间。这样会大大减少文件系统碎片的数目。因为文件的内容不会分散在整个文件系统中,所以性能得以提高。

注意
注意:新的 XFS 磁盘格式

从 12 版开始,SUSE Linux Enterprise Server 支持 XFS 文件系统的新磁盘格式 (v5)。由 YaST 创建的 XFS 文件系统将使用这种新格式。这种格式的主要优点包括,所有 XFS 元数据的自动检查总数、文件类型支持以及支持文件更多数量的访问控制列表。

请注意,低于 3.12 版的 SUSE Linux Enterprise 内核、低于 3.2.0 版的 xfsprogs,以及在 SUSE Linux Enterprise 12 之前发布的 GRUB 2 版本均支持这种格式。如果同时还要从不符合上述先决条件的系统中使用该文件系统,就会出现问题。

如果您需要在较旧 SUSE 系统或其他 Linux 发行套件与 XFS 文件系统之间实现互操作性,请使用 mkfs.xfs 命令手动格式化文件系统。这将创建一个采用旧格式的 XFS 文件系统(除非您使用 -m crc=1 选项)。

1.4 Ext2

Ext2 的原身可以追溯到 Linux 历史的早期。其前身是“扩展文件系统”,于 1992 年 4 月实施,集成在 Linux 0.96c 中。扩展文件系统经历了数次修改,后来才称为 Ext2,曾经是多年来最受欢迎的 Linux 文件系统。但随着日记文件系统的创建以及其恢复时间的缩短,Ext2 的重要性逐渐降低。

简要总结 Ext2 的优点有助于您了解为什么它以前是(在某些领域现在仍是)许多 Linux 用户最喜欢使用的 Linux 文件系统。

可靠性和速度

Ext2 是一个老古董,它经历了许多改进和频繁的测试。这可能是人们经常称之为坚如磐石的文件系统的原因。在系统中断后,如果无法彻底卸装文件系统,则 e2fsck 将开始分析文件系统数据。系统使元数据恢复一致的状态,并将挂起的文件或数据块写入指定的目录(名为 lost+found)。与日记文件系统相比,e2fsck 会分析整个文件系统,而不仅仅是元数据中最近修改的位。这种操作所花的时间要远远超过检查日记文件系统的日志数据所花的时间。根据文件系统的大小,此过程可能需要半小时或更长时间。因此,对于任何要求高可用性的服务器,不要选择 Ext2。但是,因为 Ext2 不维护日记且使用的内存也更少,所以其速度往往快于其他文件系统。

可方便地升级

因为 Ext3 以 Ext2 代码为基础并且共享 Ext2 的磁盘上格式和元数据格式,所以从 Ext2 升级到 Ext3 非常容易。

1.5 Ext3

Ext3 由 Stephen Tweedie 设计。与所有其他下一代文件系统不同,Ext3 并没有采用全新的设计原则。它是在 Ext2 的基础上设计的。这两个文件系统密切关联。可以方便地在 Ext2 文件系统上建立 Ext3 文件系统。Ext2 和 Ext3 最重要的区别是 Ext3 支持日记。总之,Ext3 有三个主要优点:

1.5.1 方便并高度可靠地从 Ext2 升级

Ext2 的代码为 Ext3 奠定了坚实的基础,使后者成为受到高度评价的下一代文件系统。在 Ext3 中,它的可靠性和稳定性与日记文件系统的优点完美地结合在一起。不像转换至其他日记文件系统(例如 ReiserFS 或 XFS)那么冗长乏味(备份整个文件系统,然后从头开始重新创建),转换至 Ext3 只是数分钟的事。升级到 Ext3 还很安全,因为从头重新创建整个文件系统可能会出现问题。考虑到等待升级到日记文件系统的现有 Ext2 系统的数量,就很容易明白为什么 Ext3 对许多系统管理员来说如此重要。从 Ext3 降级到 Ext2 与升级一样简单。将 Ext3 文件系统完全卸载,然后重新装入成 Ext2 文件系统即可。

1.5.2 可靠性和性能

某些其他日记文件系统采用仅元数据的日记方法。这意味着元数据始终保持一致的状态,但无法自动保证文件系统数据本身一致。Ext3 的设计既可以照顾到元数据,又可以照顾到数据。照顾的程度可以自定义。在 data=journal 方式中启用 Ext3 可以提供最大的安全性(数据完整性),但因为要将元数据和数据都记入日记,所以可能会降低系统的速度。一个相对较新的方法是采用 data=ordered 方式,这种方式确保了数据和元数据的完整性,但只对元数据使用日记。文件系统驱动程序收集与一次元数据更新对应的所有数据块。这些数据块在更新元数据之前被写入磁盘中。这样,在不牺牲性能的情况下,元数据和数据的一致性得以实现。第三个要使用的选项是 data=writeback,允许数据在其元数据已经提交至日记后再写入主要文件系统。在性能方面,此选项常被认为是最佳选项。但它在维护内部文件系统完整性的同时,允许以前的数据在系统崩溃并恢复后再次出现在文件中。Ext3 使用 data=ordered 选项作为默认值。

1.5.3 将 Ext2 文件系统转换为 Ext3

要将 Ext2 文件系统转换为 Ext3:

  1. 作为 root 用户运行 tune2fs -j 来创建 Ext3 日记。

    此命令将用默认参数创建 Ext3 日记。

    要指定日记的大小和所驻留的设备,请改为运行 tune2fs -J,同时使用所需的日记选项 size=device=tune2fs 手册页中有关于 tune2fs 程序的更多信息。

  2. 作为 root 用户编辑文件 /etc/fstab,以将为相应分区指定的文件系统类型从 ext2 更改为 ext3,然后保存更改。

    这确保可以正确识别出 Ext3 文件系统。此更改将在下次重引导后生效。

  3. 若引导已设置为 Ext3 分区的根文件系统,请在 initrd 中添加模块 ext3jbd。操作步骤如下:

    1. 打开或创建 /etc/dracut.conf.d/10-filesystem.conf 并添加以下行(请注意前导空格):

      force_drivers+=" ext3 jbd"
    2. 然后运行 dracut -f 命令。

  4. 重引导系统。

1.5.4 Ext3 文件系统 inode 大小及 inode 数量

inode 用于存储文件的相关信息及其在文件系统中的块位置。为了让 inode 有空间可以容纳扩展属性以及 ACL,Ext3 的默认 inode 大小从 SLES 10 上的 128 字节增加到了 SLES 11 上的 256 字节。与 SLES 10 相比,当您在 SLES 11 上创建新的 Ext3 文件系统时,为相同数量的 Inode 预先分配的默认空间容量会增加一倍,文件系统中文件的可用空间则会减少相应的容量。因此,要容纳与 SLES 10 上的 Ext3 文件系统中数量相同的 inode 和文件,您必须使用更大的分区。

当您创建新的 Ext3 文件系统时,系统将根据可创建的 Inode 总数预先分配 Inode 表格中的空间。每 inode 的字节数比率以及文件系统的大小决定了可以创建的 inode 数量。建立文件系统时,将根据每 inode 字节数的单位空间创建 inode:

number of inodes = total size of the file system divided by the number of bytes per inode

inode 的数量控制着文件系统中可容纳的文件数:一个文件对应一个 inode。为解决 inode 大小增加而使可用空间变少的问题,每 inode 的字节数比率的默认值由 SLES 10 上的 8192 字节增加到了 SLES 11 上的 16384 字节。比率翻倍意味着可以创建的文件数量将只有 SLES 10 上 Ext3 文件系统中可容纳文件数量的一半。

重要
重要:更改现有 Ext3 文件系统的 Inode 大小。

inode 分配完毕后,将无法更改 inode 大小的设置或每 inode 的字节数比率。如果不使用其他设置重新创建文件系统,或不扩展文件系统,则无法添加 Inode。超过 inode 最大数量时,只有删除部分文件才能在文件系统上创建新文件。

新建 Ext3 文件系统时,您可以指定 inode 大小和每 inode 的字节数比率,以控制文件系统上可容纳 inode 空间占用量以及文件数量。如果未指定块大小、inode 大小以及每 inode 的字节数比率值,则将应用 /etc/mked2fs.conf 中的默认值。有关信息,请参见 mke2fs.conf(5) 手册页。

使用以下指标:

  • inode 大小:: 默认的 inode 大小为 256 字节。指定字节值,即介于 128 字节(含)到块大小(含)之间的 2 的乘方值,如 128、256、512,以此类推。只有当 Ext3 文件系统上不使用扩展属性或 ACL 时才可使用 128 字节。

  • 每 inode 的字节数比率:: 默认的每 inode 的字节数比率为 16384 字节。有效的每 inode 的字节数比率值必须是大于等于 1024 字节的 2 的乘方值,如 1024、2048、4096、8192、16384、32768,以此类推。该值不应小于文件系统的块大小,因为块大小是用于存储数据的最小空间大块。Ext3 文件系统默认的块大小为 4 KB。

    此外,您还应考虑文件的数量以及需要存储的文件大小。例如,如果您的文件系统上将会有许多小文件,则可以指定一个较小的每 inode 的字节数比率,这样会增加 inode 的数量。如果文件系统将储存超大型文件,您可以指定一个较大的每 Inode 的字节数比率,这样可减少可能的 Inode 数。

    通常情况下,最好要保证有足够多的 inode 可供使用。如果 inode 数量过少且文件很小,则可能当磁盘上的文件数量已达最大值时实际上磁盘却还很空。如果 inode 过多且文件很大,则可能虽然报告仍有可用空间,但却无法使用,这是因为您无法在为 inode 预留的空间中新建文件。

如果您在 Ext3 文件系统上不使用扩展属性或 ACL,则在创建文件系统时可通过将 inode 大小指定为 128 字节,并将每 inode 的字节数比率指定为 8192 字节,来恢复到 SLES 10 行为。使用以下任何一种方法设置 inode 大小以及每 inode 的字节数比率:

  • 更改所有新的 Ext3 文件的默认设置:: 在文本编辑器中,修改 /etc/mke2fs.conf 文件的 defaults 部分,以为 inode_sizeinode_ratio 设置所需的默认值。这些值将应用到所有新的 Ext3 文件系统。例如:

    blocksize = 4096
    inode_size = 128
    inode_ratio = 8192
  • 在命令行处:: 新建 Ext3 文件系统时,将 inode 大小 (-I 128) 以及每 inode 的字节数比率 (-i 8192) 传递给 mkfs.ext3(8) 命令或 mke2fs(8) 命令。例如,使用以下任一命令:

    sudo mkfs.ext3 -b 4096 -i 8092 -I 128 /dev/sda2
    sudo mke2fs -t ext3 -b 4096 -i 8192 -I 128 /dev/sda2
  • 在使用 YaST 安装期间:: 在安装期间,新建 Ext3 文件系统时要传递 inode 大小和每 inode 的字节数比率值。在格式化选项下的编辑分区页面的 YaST 分区程序中,选择格式化分区Ext3,然后单击选项。从文件系统选项对话框中的块大小 (B)每 inode 的字节数以及 Inode 大小下拉框中,选择所需的值。

    例如,在块大小 (B) 下拉框中选择 4096、在每 inode 的字节数下拉框中选择 8192、在 Inode 大小下拉框中选择 128,然后单击确定

    Image
  • 在使用 AutoYaST 安装期间:: 在 AutoYaST 配置文件中,您可以使用 fs_options 标记来设置 opt_bytes_per_inode 比率值(-i 为 8192)以及 opt_inode_density 值(-I 为 128):

    <partitioning config:type="list">
      <drive>
        <device>/dev/sda</device>
        <initialize config:type="boolean">true</initialize>
        <partitions config:type="list">
          <partition>
            <filesystem config:type="symbol">ext3</filesystem>
            <format config:type="boolean">true</format>
            <fs_options>
              <opt_bytes_per_inode>
                <option_str>-i</option_str>
                <option_value>8192</option_value>
              </opt_bytes_per_inode>
              <opt_inode_density>
                <option_str>-I</option_str>
                <option_value>128</option_value>
              </opt_inode_density>
            </fs_options>
            <mount>/</mount>
            <partition_id config:type="integer">131</partition_id>
            <partition_type>primary</partition_type>
            <size>25G</size>
          </partition>
        </partitions>
      </drive>
    <partitioning>

有关相关信息,请参见 http://www.suse.com/support/kb/doc.php?id=7009075SLES11 ext3 分区只能储存 SLES10 上可储存的文件数的 50% [技术信息文档 7009075])。

1.6 Ext4

2006 年,Ext4 做为 Ext3 的传承面市。它支持最大大小为 1 EiB 的卷、最大大小为 16 TiB 的文件和无限个子目录,消除了 Ext3 在储存上的一些局限。它还引入了多项性能增强功能,例如延迟块分配和速度大幅加快的文件系统检查例程。Ext4 还支持日记校验和,并可提供以纳秒度量的时间戳,因而更加可靠。Ext4 完全反向兼容于 Ext2 和 Ext3,后两个文件系统都可以作为 Ext4 装入。

1.7 ReiserFS

作为 2.4 内核版本的正式的重要功能之一,ReiserFS 作为 2.2.x SUSE 内核的内核增补程序提供,因为版本 6.4 的 ReiserFS 是由 Hans Reiser 和 Namesys 开发团队设计的。ReiserFS 已证明它自己是 Ext2 功能强大的替代系统。其重要优点是通过数据日记实现的更合理的磁盘空间使用、更佳的磁盘访问性能、更快的崩溃恢复能力以及可靠性。

重要
重要:SUSE Linux Enterprise Server 12 中支持的 ReiserFS

现有 ReiserFS 分区在 SUSE Linux Enterprise Server 12 的有效期间均受支持,专用于迁移。从 SUSE Linux Enterprise Server 12 开始,去除了创建新 ReiserFS 文件系统的支持。

1.8 支持的其他文件系统

表 1.1 “Linux 中的文件系统类型”对 linux 支持的其他一些文件系统进行了总结。支持这些文件系统主要是为了确保与不同类型的媒体或异操作系统实现兼容和数据交换。

表 1.1︰ Linux 中的文件系统类型

文件系统类型

描述

cramfs

压缩的 ROM 文件系统:一种经压缩的只读 ROM 文件系统。

hpfs

高性能文件系统:IBM OS/2 标准文件系统。只在只读模式下支持。

iso9660

CD-ROM 上的标准文件系统。

minix

此文件系统源自有关操作系统的学术项目,是在 Linux 中使用的第一个文件系统。目前,它被用作软盘的文件系统。

msdos

fat(最初由 DOS 使用的文件系统)现在已被多种操作系统采用。

nfs

网络文件系统:在此文件系统中,可以将数据储存在网络中的任何计算机上,并可以通过网络授予访问权限。

ntfs

Windows NT 文件系统;只读。

smbfs

Windows 等产品使用服务器消息块来支持通过网络启用文件访问。

sysv

在 SCO Unix、Xenix 和 Coherent(用于 PC 的商用 Unix 系统)上使用。

ufs

供 BSD、SunOS 和 NextStep 使用。只在只读方式下支持此文件系统。

umsdos

MS-DOS 上的 Unix:在标准 fat 文件系统之上应用,通过创建特殊文件获得 Unix 功能(权限、链接和长文件名)。

vfat

虚拟 FAT:fat 文件系统的扩展(支持长文件名)。

1.9 Linux 中对大型文件的支持

最初,Linux 支持的最大文件大小为 2 GiB(231 字节)。除非文件系统支持大型文件,否则 32 位系统上的最大文件大小为 2 GiB。

目前,所有标准文件系统都具有 LFS(大型文件支持)功能,理论上可支持的最大文件大小为 263 字节。表 1.2 “文件和文件系统的最大大小(磁盘格式,4 KiB 块大小)”概述了 Linux 文件和文件系统的当前磁盘上格式的限制。表中的数字基于文件系统使用 4 KiB 块大小的假设得出,这是通用的标准。使用不同的块大小,结果也就不同。使用较稀疏的块时,表 1.2 “文件和文件系统的最大大小(磁盘格式,4 KiB 块大小)”中的最大文件大小可能会大于文件系统的实际大小。

注意
注意:二进制倍数

在此文档中:1024 字节 = 1 KiB;1024 KiB = 1 MiB;1024 MiB = 1 GiB;1024 GiB = 1 TiB;1024 TiB = 1 PiB;1024 PiB = 1 EiB(另请参见 NIST:二进制倍数的前缀)。

表 1.2︰ 文件和文件系统的最大大小(磁盘格式,4 KiB 块大小)

文件系统(4 KiB 块大小)

最大文件系统大小

最大文件大小

Btrfs

16 EiB

16 EiB

Ext3

16 TiB

2 TiB

Ext4

1 EiB

16 TiB

OCFS2(高可用性扩展中可使用的集群感知文件系统)

16 TiB

1 EiB

ReiserFS v3.6

16 TiB

1 EiB

XFS

8 EiB

8 EiB

NFSv2(客户端)

8 EiB

2 GiB

NFSv3/NFSv4(客户端)

8 EiB

8 EiB

重要
重要:限制

表 1.2 “文件和文件系统的最大大小(磁盘格式,4 KiB 块大小)”介绍了有关磁盘上格式的限制。 Linux 内核自身的大小限制同样适用于其处理的文件和文件系统大小。下面介绍了这些限制:

文件大小

在 32 位系统上,文件不能超过 2 TiB(241 字节)。

文件系统大小

文件系统最大可以为 273 个字节。但是,目前可用的硬件尚不会超出这一限制。

1.10 Linux 内核储存的限制

表 1.3 “储存限制” 总结了与 SUSE Linux Enterprise Server 相关联的储存的内核限制。

表 1.3︰ 储存限制

储存功能

限制

支持的 LUN 最大数量

每个目标 16384 个 LUN。

每一个单独 LUN 的最大路径数量

默认情况下没有限制。每个路径视作一个常规 LUN。

每个目标的 LUN 数量以及每个 HBA 的目标数量决定了实际的限制(光纤通道 HBA 为 16777215)。

HBA 的最大数量

不限。实际限制取决于系统的 PCI 槽的数量。

每个操作系统使用 device-mapper-multipath 的最大路径数量(总计)

大约为 1024。实际数量取决于每个多路径设备的设备号字符串长度。它是 multipath-tools 中的一个编译时间变量,如果此限制会导致问题,则可提高其值。

每一个块设备的最大大小

最多 8 EiB。

1.11 文件系统疑难解答

本节说明文件系统的一些已知问题和可能的解决方案。

1.11.1 Btrfs 错误:设备上没有剩余空间

使用 Btrfs 文件系统的根 (/) 分区停止接受数据。您收到错误设备上没有剩余空间

请参见下列各部分,了解有关此问题的可能原因和预防措施的信息。

1.11.1.1 Snapper 快照使用的磁盘空间

如果 Snapper 是针对 Btrfs 文件系统运行的,则设备上没有剩余空间问题通常是由于系统上做为快照储存的数据过多所致。

您可以从 Snapper 中去除一些快照,不过,快照不会立即删除,可能不能释放您需要的空间容量。

若要从 Snapper 中删除文件:

  1. 打开一个终端控制台。

  2. 在命令提示符处,输入 btrfs filesystem show,例如:

    tux > sudo btrfs filesystem show
    Label: none uuid: 40123456-cb2c-4678-8b3d-d014d1c78c78
     Total devices 1 FS bytes used 20.00GB
     devid 1 size 20.00GB used 20.00GB path /dev/sda3
  3. 输入

    sudo btrfs fi balance start MOUNTPOINT -dusage=5

    此命令会尝试将数据重新放置在空的或接近空的数据块中,从而允许收回空间并将其重新指派给元数据。此操作可能需要一些时间(1 TB 数据可能需要很多小时),不过,在此期间系统仍可以使用。

  4. 列出 Snapper 中的快照。输入

    sudo snapper -c root list
  5. 从 Snapper 中删除一或多个快照。输入

    sudo snapper -c root delete SNAPSHOT_NUMBER(S)

    务必先删除最旧的快照。快照生成的时间越长,其占用的空间就越大。

为了避免此问题发生,您可以更改 Snapper 清理算法。有关细节,请参见Book “管理指南”, Chapter 7 “通过 Snapper 进行系统恢复和快照管理”, Section 7.6.1.2 “清理算法”。控制快照清理的配置值为 EMPTY_*NUMBER_*TIMELINE_*

如果在文件系统磁盘上搭配使用 Snapper 和 Btrfs,建议您保留两倍于标准储存建议的磁盘空间容量。YaST 分区程序会自动在 Btrfs 储存建议中为根文件系统建议标准磁盘空间的两倍容量。

1.11.1.2 日志、崩溃和缓存文件使用的磁盘空间

如果系统磁盘填满了数据,您可以尝试从 /var/log/var/crash/var/lib/systemd/coredump/var/cache 中删除文件。

Btrfs 文件系统子卷 /var/log/var/crash/var/cache 在正常运作情况下可能会使用所有可用的磁盘空间,此时将导致系统故障。为避免出现此状况,SUSE Linux Enterprise Server 提供了 Btrfs 子卷配额支持。有关详细信息,请参见第 1.2.5 节 “Btrfs 子卷定额支持”

在测试和开发计算机上,尤其是当应用程序频繁崩溃时,您也可能想查看 /var/lib/systemd/coredump,内核转储就储存在其中。

1.11.2 释放未使用的文件系统块

在固态硬盘 (SSD) 和精简配置的卷中,释放未被文件系统使用的块会很有用。SUSE Linux Enterprise Server 完全支持在支持取消映射释放方法的所有文件系统上执行这些操作。

建议通过运行 /sbin/wiper.sh,来释放 SUSE Linux Enterprise Server 上支持的文件系统(Btrfs 除外)。在运行此脚本之前,请务必阅读 /usr/share/doc/packages/hdparm/README.wiper。对于大多数桌面和服务器系统,每周释放一次便已足够。使用 -o discard 装入文件系统会降低性能,并可能对 SSD 的寿命造成负面影响,因此不建议使用此选项。

警告
警告:不要在 Btrfs 上使用 wiper.sh

wiper.sh 脚本会释放装入的读写 ext4 或 XFS 文件系统以及装入/未装入的只读 ext2、ext3、ext4 和 XFS 文件系统的数据块。请在 Btrfs 文件系统上使用 wiper.sh,否则可能会损坏数据。应该使用 btrfsmaintenance 包中的 /usr/share/btrfsmaintenance/btrfs-trim.sh

1.12 其他信息

上面介绍的每个文件系统项目都有自己的主页,可以在其中找到邮件列表信息、更多文档和常见问题:

有关 Linux 文件系统的多部份全面教学课程,请参见 IBM developerWork 中的《Advanced File System Implementor’s Guide》(高级文件系统实施指南,网址:https://www.ibm.com/developerworks/linux/library/l-fs/)。

Wikipedia 项目上的“Comparison of File Systems”(文件系统比较,网址:http://en.wikipedia.org/wiki/Comparison_of_file_systems#Comparison)中提供了对各种文件系统(不仅仅是 Linux 文件系统)更深入的比较。

2 调整文件系统大小

调整文件系统大小(不要与调整分区或卷大小混淆)可用于将物理卷上的空间变为可用状态,或使用物理卷上可用的其他空间。

2.1 使用案例

强烈建议您使用 YaST 分区程序来调整分区或逻辑卷的大小。这样一来,文件系统将自动调整为分区或卷的新大小。不过,在某些情况下,您需要手动调整文件系统的大小,因为 YaST 不支持它们:

  • 调整虚拟机 Guest 的虚拟磁盘大小之后。

  • 调整网络附加储存中的卷大小之后。

  • 手动调整分区(例如通过使用 fdiskparted)或逻辑卷(例如通过使用 lvresize)的大小之后。

  • 要缩小 Btrfs 文件系统的大小时(从 SUSE Linux Enterprise Server 12 开始,YaST 仅支持增大 Btrfs 文件系统)。

2.2 调整大小指导原则

调整任何文件系统的大小都存在一定的风险,可能会造成数据遗失。

警告
警告:备份数据

为了避免数据丢失,请确保在开始任何调整大小任务之前备份您的数据。

计划调整文件系统大小时,请考虑以下指导原则。

2.2.1 支持调整大小的文件系统

文件系统必须支持调整大小才能利用卷可用空间增加功能。SUSE Linux Enterprise Server 中提供了适用于文件系统 Ext2、Ext3、Ext4 及 ReiserFS 的文件系统重设置大小实用程序。这些实用程序支持如下增加和减小大小:

表 2.1︰ 文件系统对调整大小的支持

文件系统

实用程序

增大大小(增大)

减小大小(收缩)

Btrfs

btrfs filesystem resize

联机

联机

XFS

xfs_growfs

联机

不支持

Ext2

resize2fs

联机或脱机

仅限脱机

Ext3

resize2fs

联机或脱机

仅限脱机

Ext4

resize2fs

联机或脱机

仅限脱机

ReiserFS

resize_reiserfs

联机或脱机

仅限脱机

2.2.2 增加文件系统的大小

您可以将文件系统增大到设备上的最大可用空间,或指定一个准确大小。请确保在尝试增加文件系统的大小之前先增加设备或逻辑卷的大小。

为文件系统指定精确大小时,请确保新大小满足以下条件:

  • 新大小必须大于现有数据的大小;否则会发生数据丢失。

  • 新大小必须等于或小于当前设备大小,因为文件系统大小不能超出可用空间。

2.2.3 减小文件系统的大小

当减小设备上的文件系统的大小时,请确保新的大小满足以下条件:

  • 新大小必须大于现有数据的大小;否则会发生数据丢失。

  • 新大小必须等于或小于当前设备大小,因为文件系统大小不能超出可用空间。

如果还计划减小用于保存文件系统的逻辑卷的大小,请确保在尝试减小设备或逻辑卷的大小之前先减小文件系统的大小。

重要
重要:XFS

XFS 格式文件系统的大小无法减少,因为 XFS 不支持此功能。

2.3 更改 Btrfs 文件系统的大小

装入 Btrfs 文件系统后,您可以使用 btrfs filesystem resize 命令来更改该文件系统的大小。装入了文件系统时,增加和缩小大小均受支持。

  1. 打开一个终端控制台。

  2. 确定您要更改的文件系统已装入。

  3. 使用 btrfs filesystem resize 命令通过下列其中一种方法更改文件系统的大小:

    • 要将文件系统大小扩展为设备的最大可用大小,请输入

      sudo btrfs filesystem resize max /mnt
    • 要将文件系统扩展为指定大小,请输入

      sudo btrfs filesystem resize SIZE /mnt

      SIZE 替换为所需大小(以字节为单位)。您还可以为值指定单位,例如 50000K (KB)、250M (MB) 或 2G (GB)。您也可以在值前面加上加号 (+) 或减号 (-),分别指定增加或缩小至目前的大小:

      sudo btrfs filesystem resize +SIZE /mnt
      sudo btrfs filesystem resize -SIZE /mnt
  4. 通过输入以下命令,检查已装入文件系统的调整大小的结果

    df -h

    磁盘可用 (df) 命令显示磁盘的总大小、使用的块数以及文件系统上可用的块数。-h 选项会以可辨识的格式列印大小,如 1K、234M 或 2G。

2.4 更改 XFS 文件系统的大小

装入 XFS 文件系统后,您可以使用 xfs_growfs 命令来增加该文件系统的大小。XFS 文件系统的大小无法减少。

  1. 打开一个终端控制台。

  2. 确定您要更改的文件系统已装入。

  3. 使用 xfs_growfs 命令增加文件系统的大小。下面的示例会将文件系统的大小扩充为最大可用值。请参见 man 8 xfs_growfs 了解更多选项。

    sudo xfs_growfs -d /mnt
  4. 通过输入以下命令,检查已装入文件系统的调整大小的结果

    df -h

    磁盘可用 (df) 命令显示磁盘的总大小、使用的块数以及文件系统上可用的块数。-h 选项会以可辨识的格式列印大小,如 1K、234M 或 2G。

2.5 更改 Ext2、Ext3 或 Ext4 文件系统的大小

不管是否装入了相应的分区,都可以使用 resize2fs 命令增加 Ext2、Ext3 和 Ext4 文件系统的大小。若要减少 Ext 文件系统的大小,需要将其卸载。

  1. 打开一个终端控制台。

  2. 如果应减少文件系统的大小,请将它卸载。

  3. 使用下列方法之一更改文件系统的大小:

    • 要将文件系统大小扩展为名为 /dev/sda1 的设备的最大可用大小,请输入

      sudo resize2fs /dev/sda1

      如果未指定大小参数,大小将默认为该分区的大小。

    • 若要将文件系统更改为特定大小,请输入

      sudo resize2fs /dev/sda1 SIZE

      SIZE 参数指定为文件系统请求的新大小。如果不指定任何单位,则大小参数的单位是文件系统的块大小。也可以选择在大小参数后面加上下列其中一种单位指示项:s 表示 512 字节扇区;K 表示 KB(1 KB 为 1024 字节);M 表示 MB;G 表示 GB。

    等到调整大小完成再继续。

  4. 如果未装入该文件系统,则现在装入它。

  5. 通过输入以下命令,检查已装入文件系统的调整大小的结果

    df -h

    磁盘可用 (df) 命令显示磁盘的总大小、使用的块数以及文件系统上可用的块数。-h 选项会以可辨识的格式列印大小,如 1K、234M 或 2G。

2.6 更改 Reiser 文件系统的大小

ReiserFS 文件系统在装入或卸载时可增加大小。若要减少其大小,则需要将其卸载。

  1. 打开一个终端控制台。

  2. 如果您要减少文件系统的大小,而文件系统已装入,请将其卸除。

  3. 使用以下其中一种方法,更改名为 /dev/sda2 的设备上文件系统的大小:

    • 要将文件系统大小扩展为设备的最大可用大小,请输入

      sudo resize_reiserfs /dev/sda2

      不指定大小时,这会将卷增加到分区的完整大小。

    • 要将文件系统扩展为指定大小,请输入

      sudo resize_reiserfs -s SIZE /dev/sda2

      SIZE 替换为所需大小(以字节为单位)。您还可以为值指定单位,例如 50000K (KB)、250M (MB) 或 2G (GB)。您也可以在值前面加上加号 (+) 或减号 (-),分别指定增加或缩小至目前的大小:

      sudo resize_reiserfs -s +SIZE /dev/sda2
      sudo resize_reiserfs -s -SIZE /dev/sda2

    等到调整大小完成再继续。

  4. 如果未装入该文件系统,则现在装入它。

  5. 通过输入以下命令,检查已装入文件系统的调整大小的结果

    df -h

    磁盘可用 (df) 命令显示磁盘的总大小、使用的块数以及文件系统上可用的块数。-h 选项会以可辨识的格式列印大小,如 1K、234M 或 2G。

3 使用 UUID 装入设备

本章介绍使用 UUIDs(全局唯一标识符)而不是设备名称(例如 /dev/sda1)来识别文件系统设备。从 SUSE Linux Enterprise Server 12 开始,默认在引导加载程序文件和 /etc/fstab 文件中使用 UUID。

3.1 具有 udev 的永久性设备名称

从 Linux 内核 2.6 开始,udev 使用永久性设备命名方式,为动态的 /dev 目录提供了一种用户空间解决方案。作为热插拔系统的一部分,在系统中添加或删除设备时会执行 udev

使用一个规则列表来针对特定设备属性进行匹配。udev 规则基础设施(在 /etc/udev/rules.d 目录中定义)为所有磁盘设备提供了稳定的名称,无论它们的识别顺序或该设备使用的连接如何。udev 工具检查内核创建的用来根据特定总线、驱动器类型或文件系统应用命名规则的每个相应块设备。有关如何为 udev 定义您自己的规则的信息,请参见 Writing udev Rules(编写 udev 规则)。

和动态的内核提供的设备节点名一起,udev 还在 /dev/disk 目录中维护有指向该设备的永久符号链接的类,该目录进一步按 by-idby-labelby-pathby-uuid 子目录分类。

注意
注意:UUID 生成器

除了 udev 之外的其他程序(如 LVM 或 md)也可生成 UUID,但它们不在 /dev/disk 中列出。

3.2 了解 UUID

UUID(全球唯一标识符)是表示文件系统的 128 位数字,在本地系统和其他系统中都是唯一的。它根据系统硬件信息和时戳(做为其种子的一部分)随机生成。UUID 通常用于唯一性标记设备。

使用非永久性的传统设备名称(例如 /dev/sda1)可能在添加储存时导致系统出现无法引导的情况。例如,如果将根 (/) 指派给 /dev/sda1,则在挂接 SAN 或将其他硬盘加入系统后,系统可能会将它重新指派给 /dev/sdg1。在此情况下,需要调整启动加载程序配置和 /etc/fstab 文件,否则系统将无法引导。

避免此问题的一个方法是在引导加载程序和引导设备的 /etc/fstab 文件中使用 UUID。这是自第 12 版以来 SUSE Linux Enterprise 中的默认设置。UUID 是文件系统的一个属性,如果重新格式化驱动器,UUID 会更改。如果不想使用设备名称的 UUID,另一种替代方法是使用 ID 或标签识别设备。

您还可以将 UUID 用做组装与激活软件 RAID 设备的准则。当创建 RAID 时,md 驱动程序会为该设备生成一个 UUID,并将该值储存在 md 超块中。

您可以在 /dev/disk/by-uuid 目录中找到任何块设备的 UUID。UUID 项目示例如下所示:

tux > ls -og /dev/disk/by-uuid/
lrwxrwxrwx 1 10 Dec  5 07:48 e014e482-1c2d-4d09-84ec-61b3aefde77a -> ../../sda1

3.3 其他信息

有关使用 udev 来管理设备的详细信息,请参见Book “管理指南”, Chapter 21 “使用 udev 进行动态内核设备管理”

有关 udev 命令的详细信息,请参见 man 7 udev

4 用于块设备操作的多层超速缓存

多层超速缓存是一种复制的/分布式超速缓存,它至少包括两个层:一个层由速度较慢但较为廉价的旋转块设备(硬盘)表示,另一个层成本更高,但执行数据操作的速度更快(例如,SSD 闪存盘)。

SUSE Linux Enterprise Server 为闪存设备与旋转设备的超速缓存实施两种不同的解决方案:bcachelvmcache

4.1 一般术语

本节对在介绍超速缓存相关功能时经常用到的几个术语进行了解释:

迁移

将逻辑块的主副本从一个设备移到另一个设备。

升级

从慢速设备迁移到快速设备。

降级

从快速设备迁移到慢速设备。

源设备

大型慢速块设备。它始终包含逻辑块的副本,该副本可能已过时或者与超速缓存设备上的副本保持同步(取决于策略)。

超速缓存设备

小型高速块设备。

元数据设备

一个小型设备,用于记录哪些块在超速缓存中、哪些块是脏的,以及供策略对象使用的附加提示。此信息可放在超速缓存设备上,但将它隔离可让卷管理器对它进行不同的配置,例如,配置为镜像以提高稳定性。元数据设备只能由单个超速缓存设备使用。

脏块

如果某个进程将信息写入超速缓存中的某个数据块,则该超速缓存的块将被标记为块,因为该块在超速缓存中已被覆盖,需要写回到原始设备。

超速缓存未命中

I/O 操作请求会先指向已超速缓存设备的超速缓存。如果找不到请求的值,则会在设备本身中查找,因此速度会变慢。这称为超速缓存未命中

超速缓存命中

如果在已超速缓存设备的超速缓存中找到请求的值,则可以快速提供该值。这称为超速缓存命中

冷超速缓存

不保存任何值(为空)且导致超速缓存未命中的超速缓存。在执行已超速缓存块设备的操作过程中,冷超速缓存中会填充数据,从而变为超速缓存。

暖超速缓存

已保存了一些值并且可能会导致超速缓存命中的超速缓存。

4.2 超速缓存模式

下面是多层超速缓存使用的基本超速缓存模式:写回直写绕写直通

写回

写入已超速缓存块的数据只会存入超速缓存,并且该块将标记为脏块。这是默认的超速缓存模式。

直写

只有在同时命中源设备和超速缓存设备之后,向已超速缓存块的写入才会完成。在直写超速缓存中,干净块将保持干净状态。

绕写

类似于直写超速缓存的一种技术,不过,写 I/O 将直接写入永久性储存,并绕过超速缓存。这可以防止超速缓存因写 I/O 而填满,导致以后不可重新读取,不过,缺点是对最近写入数据的读取请求会造成“超速缓存未命中”,因而需要从慢速大容量储存中读取这些数据,致使发生较高延迟。

直通

要启用直通模式,超速缓存必须是干净的。将绕过超速缓存,从源设备为读取请求提供服务。写请求将转到源设备,使超速缓存块“失效”。直通允许您激活超速缓存设备时不必考虑数据一致性,而这是可以维护的。随着写操作的不断进行,超速缓存将逐渐变为冷状态。如果您以后可以校验超速缓存的一致性,或者可以使用 invalidate_cblocks 讯息来建立这种一致性,则可以在超速缓存设备仍处于暖状态时,将它切换到直写写回模式。或者,可以在切换到所需的超速缓存模式之前,先丢弃超速缓存内容。

4.3 bcache

bcache 是一个 Linux 内核块层超速缓存。它允许使用一个或多个高速磁盘驱动器(例如 SSD)作为一个或多个速度低得多的硬盘的超速缓存。bcache 支持直写和写回,不受所用文件系统的约束。默认情况下,它只超速缓存随机读取和写入,这也是 SSD 的强项。它还适合用于台式机、服务器和高端储存阵列。

4.3.1 主要功能

  • 可以使用单个超速缓存设备来超速缓存任意数量的后备设备。在运行时可以挂接和分离已装入及使用中的后备设备。

  • 在非正常关机后恢复 - 只有在超速缓存与后备设备一致后才完成写入。

  • SSD 拥塞时限制传至 SSD 的流量。

  • 高效的写回实施方案。脏数据始终按排序顺序写出。

  • 稳定可靠,可在生产环境中使用。

4.3.2 设置 bcache 设备

本节介绍设置和管理 bcache 设备的步骤。

  1. 安装 bcache-tools 包:

    sudo zypper in bcache-tools
  2. 创建后备设备(通常是一个机械驱动器)。后备设备可以是整个设备、一个分区或任何其他标准块设备。

    sudo make-bcache -B /dev/sdb
  3. 创建超速缓存设备(通常是一个 SSD 磁盘)。

    sudo make-bcache -C /dev/sdc

    本示例使用了默认的块大小和储存桶大小,分别为 512 B 和 128 KB。块大小应与后备设备的扇区大小(通常为 512 或 4k)匹配。储存桶大小应与超速缓存设备的擦除块大小匹配,以便减少写入放大现象。例如,如果使用具有 4k 扇区的硬盘和具有 2 MB 擦除块大小的 SSD,则此命令将如下所示:

    sudo make-bcache --block 4k --bucket 2M -C /dev/sdc
    提示
    提示:多设备支持

    make-bcache 可同时准备和注册多个后备设备与一个超速缓存设备。在这种情况下,以后您不需要将超速缓存设备手动挂接到后备设备:

    sudo make-bcache -B /dev/sda /dev/sdb -C /dev/sdc
  4. bcache 设备将显示为

    /dev/bcacheN

    /dev/bcache/by-uuid/UUID
    /dev/bcache/by-label/LABEL

    您可以像平时一样正常格式化和装入 bcache 设备:

    mkfs.ext4 /dev/bcache0
    mount /dev/bcache0 /mnt

    您可以在 /sys/block/bcacheN/bcache 中通过 sysfs 控制 bcache 设备。

  5. 注册超速缓存设备和后备设备后,需要将后备设备挂接到相关的超速缓存集才能启用超速缓存:

    echo CACHE_SET_UUID > /sys/block/bcache0/bcache/attach

    其中,CACHE_SET_UUID 可在 /sys/fs/bcache 中找到。

  6. 默认情况下,bcache 使用直通超速缓存模式。要更改模式,例如,更改为写回模式,请运行

    echo writeback > /sys/block/bcache0/bcache/cache_mode

4.3.3 使用 sysfsbcache 配置

bcache 设备使用 sysfs 接口来储存其运行时配置值。这样,您便可以更改 bcache 后备设备和超速缓存磁盘的行为,或查看其使用统计数字。

有关 bcache sysfs 参数的完整列表,请查看 /usr/src/linux/Documentation/bcache.txt 文件的内容,主要查看 SYSFS - BACKING DEVICESYSFS - BACKING DEVICE STATSSYSFS - CACHE DEVICE 部分。

4.4 lvmcache

lvmcache 是由逻辑卷 (LV) 组成的超速缓存机制。它使用 dm-cache 内核驱动程序,支持直写(默认)和写回超速缓存模式。lvmcache 可将大型慢速 LV 的部分数据动态迁移到更快、更小的 LV,从而提高其性能。有关 LVM 的详细信息,请参见第 II 部分 “逻辑卷 (LVM)”

LVM 将小型快速 LV 称为超速缓存池 LV。大型慢速 LV 称为源 LV。由于 dm-cache 的要求,LVM 进一步将超速缓存池 LV 分割成两个设备:超速缓存数据 LV超速缓存元数据 LV。来自源 LV 的数据块副本保存在超速缓存数据 LV 中,以提高速度。超速缓存元数据 LV 保存记帐信息,这些信息指定数据块的储存位置。

4.4.1 配置 lvmcache

本节介绍创建和配置基于 LVM 的超速缓存的步骤。

  1. 创建源 LV。创建新 LV,或使用现有 LV 作为源 LV:

    lvcreate -n ORIGIN_LV -L 100G vg /dev/SLOW_DEV
  2. 创建超速缓存数据 LV。此 LV 将保存来自源 LV 的数据块。此 LV 的大小是超速缓存的大小,将报告为超速缓存池 LV 的大小。

    lvcreate -n CACHE_DATA_LV -L 10G vg /dev/FAST
  3. 创建超速缓存元数据 LV。此 LV 将保存超速缓存池元数据。此 LV 的大小应该比超速缓存数据 LV 大约小 1000 倍,其最小大小为 8MB。

    lvcreate -n CACHE_METADATA_LV -L 12M vg /dev/FAST

    列出您目前为止所创建的卷:

    lvs -a vg
    LV                VG   Attr        LSize   Pool Origin
    cache_data_lv     vg   -wi-a-----  10.00g
    cache_metadata_lv vg   -wi-a-----  12.00m
    origin_lv         vg   -wi-a----- 100.00g
  4. 创建超速缓存池 LV。将数据 LV 和元数据 LV 组合成一个超速缓存池 LV。同时还可以设置超速缓存池 LV 的行为。

    CACHE_POOL_LVCACHE_DATA_LV 同名。

    CACHE_DATA_LV 重命名为 CACHE_DATA_LV_cdata,并且会隐藏起来。

    CACHE_META_LV 重命名为 CACHE_DATA_LV_cmeta,并且会隐藏起来。

    lvconvert --type cache-pool \
     --poolmetadata vg/cache_metadata_lv vg/cache_data_lv
    lvs -a vg
    LV                     VG   Attr       LSize   Pool Origin
    cache_data_lv          vg   Cwi---C---  10.00g
    [cache_data_lv_cdata]  vg   Cwi-------  10.00g
    [cache_data_lv_cmeta]  vg   ewi-------  12.00m
    origin_lv              vg   -wi-a----- 100.00g
  5. 创建超速缓存 LV。通过将超速缓存池 LV 链接到源 LV 来创建超速缓存 LV。

    用户可访问的超速缓存 LV 与源 LV 同名,源 LV 将变成重命名为 ORIGIN_LV_corig 的隐藏 LV。

    CacheLV 与 ORIGIN_LV 同名。

    ORIGIN_LV 重命名为 ORIGIN_LV_corig,并且会隐藏起来。

    lvconvert --type cache --cachepool vg/cache_data_lv vg/origin_lv
    lvs -a vg
    LV              VG   Attr       LSize   Pool   Origin
    cache_data_lv          vg   Cwi---C---  10.00g
    [cache_data_lv_cdata]  vg   Cwi-ao----  10.00g
    [cache_data_lv_cmeta]  vg   ewi-ao----  12.00m
    origin_lv              vg   Cwi-a-C--- 100.00g cache_data_lv [origin_lv_corig]
    [origin_lv_corig]      vg   -wi-ao---- 100.00g

4.4.2 去除超速缓存池

可通过多种方法关闭 LV 超速缓存。

4.4.2.1 从超速缓存 LV 分离超速缓存池 LV

您可以从超速缓存 LV 断开与超速缓存池 LV 的连接,留下一个未使用的超速缓存池 LV 和一个未超速缓存的源 LV。数据将根据需要从超速缓存池写回到源 LV。

lvconvert --splitcache vg/origin_lv

4.4.2.2 去除超速缓存池 LV 但不去除其源 LV

以下命令会根据需要将数据从超速缓存池写回到源 LV,然后去除超速缓存池 LV,留下未超速缓存的源 LV。

lvremove vg/cache_data_lv

也可以使用以下替代命令从超速缓存 LV 断开与超速缓存池的连接,并删除超速缓存池:

lvconvert --uncache vg/origin_lv

4.4.2.3 去除源 LV 和超速缓存池 LV

去除超速缓存 LV 会同时去除源 LV 和链接的超速缓存池 LV。

lvremove vg/origin_lv

4.4.2.4 更多信息

可以在 lvmcache 手册页 (man 7 lvmcache) 中找到有关 lvmcache 的更多主题,例如支持的超速缓存模式、冗余的子逻辑卷、超速缓存策略,或者将现有 LV 转换为超速缓存类型。

第 II 部分 逻辑卷 (LVM)

  • 5 LVM 配置
  • 本章介绍逻辑卷管理器 (LVM) 的原理,以及令其在许多情况下都能发挥效用的基本功能。YaST LVM 配置可以通过 YaST 专家分区程序完成。此分区工具用于编辑和删除现有分区并创建用于 LVM 的新分区。

  • 6 LVM 卷快照
  • 逻辑卷管理器 (LVM) 逻辑卷快照是一种写入时复制技术,它会监控现有卷数据块的更改,以便在对其中一个块执行写入操作时,将进行快照时块的值复制到快照卷。这样,便可保留数据的时间点副本,直到快照卷删除为止。

5 LVM 配置

本章介绍逻辑卷管理器 (LVM) 的原理,以及令其在许多情况下都能发挥效用的基本功能。YaST LVM 配置可以通过 YaST 专家分区程序完成。此分区工具用于编辑和删除现有分区并创建用于 LVM 的新分区。

警告
警告:风险

使用 LVM 可能会增加一些风险,例如数据丢失。这些风险还包括应用程序崩溃、电源故障及有问题的命令。在实施 LVM 或重配置卷前,请保存数据。决不要在没有备份的情况下工作。

5.1 了解逻辑卷管理器

LVM 支持在多个物理卷(硬盘、分区、LUN)之间弹性分配硬盘空间。开发逻辑卷管理器是因为可能只有在安装期间初始分区完成后才需要更改硬盘空间的分段。因为在正在运行的系统中修改分区比较困难,LVM 提供了储存空间的虚拟池(卷组或 VG),如果需要,可以从中生成逻辑卷 (LV)。操作系统访问这些逻辑卷而不是物理分区。卷组可以跨多个磁盘,这样多个磁盘或部分磁盘可以构成一个 VG。LVM 以这种方式提供了一种对物理磁盘空间的抽象,从而能够以比物理分区更方便、更安全的方式更改硬盘空间的分段。

图 5.1 “物理分区与 LVM”比较物理分区(左)和 lvm 分段(右)。在左侧,将一个磁盘分成 3 个物理分区 (PART),每个分区指派了一个安装点 (MP),以便操作系统可以访问它们。在右侧,有两个磁盘,一个磁盘分为 2 个物理分区,另一个磁盘分为 3 个物理分区。定义了两个 LVM 卷组(VG1 和 VG2)。VG 1 包含 DISK 1 中的两个分区和 DISK 2 中的一个分区。VG 2 包含 DISK 2 中的其余两个分区。

物理分区与 LVM
图 5.1︰ 物理分区与 LVM

在 LVM 中,合并到卷组的物理磁盘分区称为物理卷 (PV)。在图 5.1 “物理分区与 LVM”的卷组中,定义了四个逻辑卷(LV 1 至 LV 4),操作系统可以通过关联的安装点 (MP) 来使用这些逻辑卷。不同逻辑卷之间的边界不一定是任何分区边界。请参见本示例中 LV 1 和 LV 2 之间的边界。

LVM 功能:

  • 可以将多块硬盘或多个分区合并为一个较大的逻辑卷。

  • 如果配置合适,当可用空间用完后,可以扩大 LV(例如 /usr)。

  • 通过使用 LVM,可以在正在运行的系统中添加硬盘或 LV。但这需要支持此类操作的可热插拔的硬件。

  • 可激活分段方式,此方式将通过若干物理卷来分发逻辑卷的数据流。如果这些物理卷位于不同的磁盘上,则可提高读写性能(类似于 RAID 0)。

  • 使用快照功能可以在正在运行的系统中执行一致的备份(尤其适合服务器)。

注意
注意:LVM 和 RAID

尽管 LVM 也支持 0/1/4/5/6 级别的 RAID,但建议使用 MD RAID(请参见第 7 章 “软件 RAID 配置)。不过,LVM 可以与 RAID 0 和 1 搭配使用,因为 RAID 0 类似于通用逻辑卷管理(各个逻辑块将映射到物理设备上的块)。在 RAID 1 基础上使用的 LVM 可以跟踪镜像同步,并完全能够管理同步过程。使用更高的 RAID 级别时,需要借助一个管理守护程序来监视挂接的磁盘的状态,并在磁盘阵列出现问题时通知管理员。LVM 包含这种守护程序,但在异常情况下(例如设备故障),该守护程序无法正常工作。

警告
警告:IBM Z:LVM 根文件系统

如果您将系统的根文件系统配置在 LVM 或软件 RAID 阵列中,则必须将 /boot 置于单独的非 LVM 或非 RAID 分区上,否则系统将无法引导。此类分区的建议大小为 500 MB,建议的文件系统为 Ext4。

通过这些功能,使用 LVM 还对频繁使用的家用 PC 或小型服务器有用。如果您的数据储存量(如数据库、音乐存档或用户目录)不断增长,则 LVM 尤其有用。它支持您使用大于物理硬盘的文件系统。但是,请记住,使用 LVM 与使用传统的分区截然不同。

您可以使用 YaST 分区程序管理新的或现有的 LVM 储存对象。有关配置 LVM 的指示及详细信息,请参见官方的 LVM HOWTO

5.2 创建卷组

LVM 卷组 (VG) 会将 Linux LVM 分区组织到一个逻辑空间池中。您可以从组的可用空间中划分出逻辑卷。组中的 Linux LVM 分区可以在相同或不同磁盘上。您可以添加分区或整个磁盘来扩大组的大小。

要使用整个磁盘,该磁盘不得包含任何分区。使用分区时,不得装入分区。在将分区添加到 VG 时,YaST 会自动将它们的分区类型更改为 0x8E Linux LVM

  1. 起动 YaST 并打开分区程序

  2. 如果您需要重新配置现有分区设置,请执行下面操作。有关细节,请参见Book “部署指南”, Chapter 12 “高级磁盘设置”, Section 12.1 “使用 YaST 分区程序”。如果您只想使用未使用的磁盘或已存在的分区,请跳过此步骤。

    警告
    警告:未分区磁盘上的物理卷

    可以使用某个未分区的磁盘作为物理卷 (PV),前提是该磁盘是安装操作系统的磁盘,也不是操作系统从中引导的磁盘。

    由于未分区的磁盘在系统级别显示为未使用,因此很容易被覆盖或被不正确地访问。

    1. 要使用已包含分区的整个硬盘,请删除该磁盘上的所有分区。

    2. 要使用当前已装入的分区,请将其卸载。

  3. 在左侧面板中,选择卷管理

    右侧面板中即会打开现有卷组的列表。

  4. 在“卷管理”页面左下方,单击添加 › 卷组

    Image
  5. 按如下所示定义卷组︰

    1. 指定卷组名称

      如果在安装时创建卷组,建议对将包含 SUSE Linux Enterprise Server 文件系统的卷组采用名称 system

    2. 指定物理区域大小

      物理区域大小定义卷组中物理块的大小。卷组中的所有磁盘空间都是按此大小的区块来处理的。值可以是 1 KB 到 16 GB(2 的幂数形式)。通常将此值设置为 4 MB。

      在 LVM1 中,4 MB 物理区域允许的最大 LV 大小为 256 GB,因为它仅支持每个 LV 最多 65534 个区域。SUSE Linux Enterprise Server 上使用的 LVM2 不会限制物理区域的数量。区域数过多不会影响逻辑卷的 I/O 性能,但会降低 LVM 工具的速度。

      重要
      重要:物理区域大小

      单个 VG 中不应混合有不同的物理区域大小。区域在初始设置后不应修改。

    3. 可用物理卷列表中,选择要成为此卷组一部分的 Linux LVM 分区,然后单击添加将它们移动到所选物理卷列表。

    4. 单击完成

      新组将出现在卷组列表中。

  6. 在“卷管理”页上,单击下一步,验证是否列出了新卷组,然后单击完成

  7. 要检查哪些物理设备属于卷组的一部分,可随时在运行的系统中打开 YaST 分区程序,然后单击卷管理 › 编辑 › 物理设备。单击中止离开此屏幕。

    名为 DATA 的卷组中的物理卷
    图 5.2︰ 名为 DATA 的卷组中的物理卷

5.3 创建逻辑卷

逻辑卷提供一个空间池,此空间池与硬盘提供的空间池类似。要让此空间可用,需要定义逻辑卷。逻辑卷类似于一个普通分区 - 您可以进行格式化并将其装入系统。

使用 YaST 分区程序从现有卷组创建逻辑卷。请为每个卷组至少指派一个逻辑卷。您可以根据需要创建新的逻辑卷,直到卷组中的所有可用空间都用完为止。可以选择性地精简配置一个 LVM 逻辑卷,以便创建大小超出可用空间的逻辑卷(有关详细信息,请参见第 5.3.1 节 “精简配置的逻辑卷”)。

  • 普通卷: (默认)系统会立即分配卷的空间。

  • 瘦池: 逻辑卷是预留供瘦卷使用的空间池。瘦卷可以按需从瘦池分配它们所需的空间。

  • 瘦卷: 该卷会被创建为稀疏卷。瘦卷会按需从瘦池分配所需的空间。

  • 镜像卷: 创建的卷中包含定义数目的镜像。

过程 5.1︰ 设置逻辑卷
  1. 起动 YaST 并打开分区程序

  2. 在左侧面板中,选择卷管理。右侧面板中即会打开现有卷组的列表。

  3. 选择要在其中创建卷的卷组,然后选择添加 › 逻辑卷

  4. 提供卷的名称,然后选择普通卷(有关设置精简配置卷的相关信息,请参见第 5.3.1 节 “精简配置的逻辑卷”)。单击下一步继续。

    Image
  5. 指定卷的大小和是否使用多个分段。

    使用带区卷时,将在多个物理卷之间分配数据。如果这些物理卷驻留在不同的硬盘上,则通常会提高读写性能(与 RAID 0 类似)。可用带区卷的最大数量为物理卷的数量。默认值 (1) 表示不使用多个带区卷。

    Image
  6. 选择卷的角色。您在此处所做选择只会影响将要打开的对话框的默认值。这些值可在下一个步骤中更改。如果不确定,请选择原始卷(未格式化)

    Image
  7. 格式化选项下,选择格式化分区,然后选择文件系统选项菜单的内容取决于文件系统。通常不需要更改默认值。

    装入选项下,选择装入分区,然后选择安装点。单击 Fstab 选项,为卷添加特殊装入选项。

  8. 单击完成

  9. 单击下一步,验证是否列出了所做的更改,然后单击完成

5.3.1 精简配置的逻辑卷

LVM 逻辑卷可选择进行精简配置。精简配置可让您创建大小超出可用空间的逻辑卷。您创建包含未使用空间(预留供任意数目的瘦卷使用)的瘦池。瘦卷会被创建为稀疏卷,并会根据需要从瘦池分配空间。瘦池可以根据需要动态扩大,以实现储存空间的高效分配。精简配置的卷还支持快照(可以使用 Snapper 进行管理)— 有关详细信息,请参见Book “管理指南”, Chapter 7 “通过 Snapper 进行系统恢复和快照管理”

要设置精简配置的逻辑卷,请按过程 5.1 “设置逻辑卷”中所述步骤操作。选择卷类型时,不要选择普通卷,而要选择瘦卷瘦池

瘦池

逻辑卷是预留供瘦卷使用的空间池。瘦卷可以按需从瘦池分配它们所需的空间。

瘦卷

该卷会被创建为稀疏卷。瘦卷会按需从瘦池分配所需的空间。

重要
重要:群集中瘦配置的卷

要使用群集中的精简配置卷,使用它的瘦池和瘦卷必须在单个群集资源中管理。如此可使瘦卷和瘦池始终在同一个节点上以独占方式装入。

5.3.2 创建镜像卷

可以创建包含多个镜像的逻辑卷。LVM 会确保将写入底层物理卷的数据镜像到不同的物理卷。因此,即使某个物理卷崩溃,您仍可访问逻辑卷上的数据。LVM 还会保留一个日志文件用于管理同步过程。日志中包含有关哪些卷区域当前正在与镜像同步的信息。默认情况下,日志储存在磁盘上,当情况允许时,会储存在与镜像不同的磁盘上。不过,您可以为日志指定一个不同的位置,例如,指定易失性内存。

目前可以使用两种类型的镜像实施:“正常”的(非 raid)镜像逻辑卷和 raid1 逻辑卷。

创建镜像逻辑卷后,可对这些卷执行标准操作,例如激活、扩展和去除。

5.3.2.1 设置镜像非 raid 逻辑卷

要创建镜像卷,请使用 lvcreate 命令。下面的示例将创建一个 500 GB 大小使用卷组 vg1 的逻辑卷,其中包含两个名为 lv1 的镜像。

lvcreate -L 500G -m 2 -n lv1 vg1

此类逻辑卷是一种线性卷(无分段),可提供文件系统的三个副本。m 选项指定镜像的计数。L 选项指定逻辑卷的大小。

逻辑卷会划分为几个默认大小为 512 KB 的区域。如果需要不同大小的区域,请使用 -R 选项并后接所需的区域大小(以 MB 为单位)。或者,可以在 lvm.conf 文件中编辑 mirror_region_size 选项来配置首选的区域大小。

5.3.2.2 设置 raid1 逻辑卷

由于 LVM 支持 RAID,您可以使用 RAID1 来实施镜像。与非 raid 镜像相比,这种实施具有以下优点:

  • LVM 会为每个镜像映像维护一个完全冗余的位图区,从而提高了其故障处理能力。

  • 可以暂时从阵列中分割出镜像映像,然后将它们重新合并。

  • 阵列可以处理暂时性故障。

  • LVM RAID 1 实施支持快照。

但在另一方面,这种类型的镜像实施不允许在群集卷组中创建逻辑卷。

要使用 RAID 创建镜像卷,请发出以下命令:

lvcreate --type raid1 -m 1 -L 1G -n lv1 vg1

其中的各选项/参数的含义如下:

  • --type - 需要指定 raid1,否则该命令将使用隐式分段类型 mirror 并创建非 raid 镜像。

  • -m - 指定镜像的计数。

  • -L - 指定逻辑卷的大小。

  • -n - 使用此选项指定逻辑卷的名称。

  • vg1 - 逻辑卷使用的卷组的名称。

LVM 将为阵列中的每个数据卷创建一个区域大小的逻辑卷。如果您有两个镜像卷,LVM 将另外创建两个卷用于储存元数据。

创建 RAID 逻辑卷后,您可以像使用普通的逻辑卷一样使用该卷。您可以将它激活、扩展,等等。

5.4 自动激活非 root LVM 卷组

非根 LVM 卷组的激活行为由 /etc/lvm/lvm.conf 文件中的 auto_activation_volume_list 参数控制。默认情况下,该参数为空,也就是说,会激活所有卷。如果只想激活某些卷组,请将名称括在引号中,并用逗号分隔各名称,例如:

auto_activation_volume_list = [ "vg1", "vg2/lvol1", "@tag1", "@*" ]

如果在 auto_activation_volume_list 参数中定义了列表,将发生以下情况:

  1. 首先会根据此列表检查每个逻辑卷。

  2. 如果两者不匹配,则不激活该逻辑卷。

默认情况下,在 Dracut 重启动系统时,非根 LVM 卷组会自动激活。您可以使用此参数在系统重启时激活所有卷组,或仅激活指定的非根 LVM 卷组。

5.5 调整现有卷组的大小

在运行的系统中卷组提供的空间可随时扩大,而不需要添加更多物理卷导致服务中断。这可让您将逻辑卷添加到组中,或如第 5.6 节 “调整逻辑卷的大小”中所述扩大现有卷的大小。

还可以通过删除物理卷来缩小卷组的大小。YaST 只允许删除当前未使用的物理卷。要了解哪些物理卷当前正在使用,请运行下列命令。PE Ranges 列中列出的分区(物理卷)即是使用中的分区︰

tux > sudo pvs -o vg_name,lv_name,pv_name,seg_pe_ranges
root's password:
  VG   LV    PV         PE Ranges
             /dev/sda1
  DATA DEVEL /dev/sda5  /dev/sda5:0-3839
  DATA       /dev/sda5
  DATA LOCAL /dev/sda6  /dev/sda6:0-2559
  DATA       /dev/sda7
  DATA       /dev/sdb1
  DATA       /dev/sdc1
  1. 起动 YaST 并打开分区程序

  2. 在左侧面板中,选择卷管理。右侧面板中即会打开现有卷组的列表。

  3. 选择要更改的卷组,然后单击调整大小

    Image
  4. 执行以下步骤之一:

    • 添加:: 要扩展卷组大小,请将一个或多个物理卷(LVM 分区)从可用物理卷列表移动到所选物理卷列表。

    • 去除:: 要缩小卷组的大小,可将一个或多个物理卷(LVM 分区)从所选物理卷列表移到可用物理卷列表。

  5. 单击完成

  6. 单击下一步,验证是否列出了所做的更改,然后单击完成

5.6 调整逻辑卷的大小

如果卷组中有未使用的可用空间,则您可以增大逻辑卷以提供更多可用空间。您还可以将卷的大小减少为其他逻辑卷可使用的卷组的可用空间。

注意
注意:联机调整大小

减少卷的大小时,YaST 会同时自动调整其文件系统的大小。当前已装入的卷是否可以联机(即保持已装入状态)调整大小取决于其文件系统。Btrfs、XFS、Ext3 和 ReiserFS 支持联机增大文件系统。

仅 Btrfs 支持联机缩小文件系统。要缩小 XFS、Ext2/3/4 和 ReiserFS 卷,您需要将它们卸载。无法缩小以 XFS 格式化的卷,因为 XFS 不支持文件系统缩小。

  1. 起动 YaST 并打开分区程序

  2. 在左侧面板中,选择卷管理。右侧面板中即会打开现有卷组的列表。

  3. 选择要更改的逻辑卷,然后单击调整大小

    Image
  4. 使用下列选项之一设置所需大小︰

    • 最大大小: 扩大逻辑卷的大小以使用卷组中的所有剩余空间。

    • 最小大小: 将逻辑卷的大小减少到数据和文件系统元数据所占用的大小。

    • 自定义大小: 指定卷的新大小。此值必须介于上面列出的最小值和最大值之间。使用 K、M、G、T 表示 KB、MB、GB 和 TB(例如 20G)。

  5. 单击确定

  6. 单击下一步,校验是否列出了更改,然后单击完成

5.7 删除卷组或逻辑卷

警告
警告:数据丢失

删除卷组会清空其每个成员分区中的所有数据。删除逻辑卷会损坏该卷上储存的所有数据。

  1. 起动 YaST 并打开分区程序

  2. 在左侧面板中,选择卷管理。右侧面板中即会打开现有卷组的列表。

  3. 选择要删除的卷组或逻辑卷,然后单击删除

  4. 根据您的选择,系统会显示警告对话框。单击以确认对话框。

  5. 单击下一步,校验是否列出了删除的卷组(用红色字体表示删除),然后单击完成

5.8 使用 LVM 命令

有关使用 LVM 命令的信息,请参见下表中所述的命令的手册页。所有命令都需要拥有 root 权限才能执行。请使用 sudo COMMAND(建议采用此方式),或者直接以 root 身份执行这些命令。

LVM 命令
pvcreate 设备

初始化设备(例如 /dev/sdb1)以作为物理卷供 LVLM 使用。如果指定的设备上有任何文件系统,将出现警告。请记住,仅当已安装 blkid 时(默认已安装),pvcreate 才会检查现有文件系统。如果 blkid 不可用,pvcreate 不会生成任何警告,因此您可能会丢失文件系统却看不到任何警告。

pvdisplay 设备

显示 LVM 物理卷的相关信息,例如当前它是否正在逻辑卷中使用。

vgcreate -c y VG_NAME DEV1 [DEV2...]

使用一个或多个指定的设备创建群集卷组。

vgcreate --activationmode ACTIVATION_MODE VG_NAME

配置卷组激活模式。可以指定下列值之一:

  • complete - 只能激活不受缺失物理卷影响的逻辑卷,即使特定的逻辑卷能够容许这种故障也如此。

  • degraded - 默认的激活模式。如果有足够的冗余级别来激活某个逻辑卷,则即使缺少某些物理卷,也能激活该逻辑卷。

  • partial - 即使缺少某些物理卷,LVM 也会尝试激活卷组。如果某个非冗余逻辑卷缺少重要的物理卷,则通常无法激活该逻辑卷,并会将它作为错误目标进行处理。

vgchange -a [ey|n] 卷组名称

激活 (-a ey) 或停用 (-a n) 卷组及其逻辑卷的输入/输出。

激活群集中的某个卷时,请务必使用 ey 选项。此选项默认在装载脚本中使用。

vgremove 卷组名称

删除卷组。请在使用此命令之前删除逻辑卷,然后停用卷组。

vgdisplay 卷组名称

显示指定卷组的相关信息。

要了解卷组的物理区域总大小,请输入

vgdisplay VG_NAME | grep "Total PE"
lvcreate -L SIZE -n LV_NAME VG_NAME

创建具有指定大小的逻辑卷。

lvcreate -L SIZE --thinpool POOL_NAME VG_NAME

基于卷组 VG_NAME 创建具有指定大小的瘦池 myPool

下面的示例会从卷组 LOCAL 创建大小为 5 GB 的瘦池:

lvcreate -L 5G --thinpool myPool LOCAL
lvcreate -T VG_NAME/POOL_NAME -V SIZE -n LV_NAME

在池 POOL_NAME 中创建瘦逻辑卷。下面的示例会从卷组 LOCAL 上的池 myPool 创建名为 myThin1 的 1GB 瘦卷:

lvcreate -T LOCAL/myPool -V 1G -n myThin1
lvcreate -T VG_NAME/POOL_NAME -V SIZE -L SIZE -n LV_NAME

还可以通过一条命令同时创建瘦池和瘦逻辑卷:

lvcreate -T LOCAL/myPool -V 1G -L 5G -n myThin1
lvcreate --activationmode ACTIVATION_MODE LV_NAME

配置逻辑卷激活模式。可以指定下列值之一:

  • complete - 仅当逻辑卷的所有物理卷都处于活动状态时才能激活该逻辑卷。

  • degraded - 默认的激活模式。如果有足够的冗余级别来激活某个逻辑卷,则即使缺少某些物理卷,也能激活该逻辑卷。

  • partial - 即使缺少某些物理卷,LVM 也会尝试激活卷。如果逻辑卷有一部分不可用,使用此选项可能会导致数据丢失。通常不使用此选项,但在恢复数据时,它可能会有用。

您可以通过在 /etc/lvm/lvm.conf 中指定 activation_mode 配置选项的上述值之一,来指定激活模式。

lvcreate -s [-L SIZE] -n SNAP_VOLUME SOURCE_VOLUME_PATH VG_NAME

创建指定逻辑卷的快照卷。如果未包含大小选项(-L--size),则快照会被创建为瘦快照。

lvremove /dev/VG_NAME/LV_NAME

删除逻辑卷。

使用此命令之前,请先使用 umount 命令卸载逻辑卷以将其关闭。

lvremove SNAP_VOLUME_PATH

删除快照卷。

lvconvert --merge SNAP_VOLUME_PATH

将逻辑卷还原为快照的版本。

vgextend VG_NAME DEVICE

将指定的设备(物理卷)添加到现有卷组。

vgreduce VG_NAME DEVICE

从现有卷组中删除指定的物理卷。

确保物理卷当前未被逻辑卷使用。如果正在使用中,则必须使用 pvmove 命令将数据移至另一个物理卷。

lvextend -L SIZE /dev/VG_NAME/LV_NAME

扩大指定逻辑卷的大小。随后,您还必须相应地扩大文件系统以充分利用新扩充的空间。有关详细信息,请参见第 2 章 “调整文件系统大小

lvreduce -L SIZE /dev/VG_NAME/LV_NAME

减少指定逻辑卷的大小。

在缩小卷之前,请确保先减少文件系统的大小,否则可能会丢失数据。有关详细信息,请参见第 2 章 “调整文件系统大小

lvrename /dev/VG_NAME/LV_NAME /dev/VG_NAME/NEW_LV_NAME

重命名现有 LVM 逻辑卷。此操作不会更改卷组名。

提示
提示:创建卷时绕过 udev

如果您想使用 LVM 而不是 udev 规则来管理 LV 设备节点和符号链接,可以使用下列方法之一来禁止 udev 发出通知:

  • /etc/lvm/lvm.conf 中配置 activation/udev_rules = 0activation/udev_sync = 0

    请注意,结合 lvcreate 命令指定 --nodevsync 的效果与设置 activation/udev_sync = 0 相同;仍需设置 activation/udev_rules = 0

  • 设置环境变量 DM_DISABLE_UDEV

    export DM_DISABLE_UDEV=1

    这样也会禁止 udev 发出通知。此外,/etc/lvm/lvm.conf 中所有 udev 相关设置将被忽略。

5.8.1 用命令调整逻辑卷大小

lvresizelvextendlvreduce 命令用于调整逻辑卷大小。有关语法和选项信息,请参见每个命令的手册页。要扩展 LV,VG 上必须有足够的可用未分配空间。

建议使用 YaST 分区程序来增大或缩小逻辑卷。使用 YaST 时,卷中文件系统的大小也会相应进行自动调整。

LV 可以在使用中状态下进行手动增大或缩小,但是其上的文件系统无法随之调整。扩展或收缩 LV 不会自动修改卷中文件系统的大小。随后必须使用其他命令增大文件系统。有关调整文件系统大小的信息,请参见第 2 章 “调整文件系统大小

手动调整 LV 大小时,请确保使用正确的顺序︰

  • 如果扩展逻辑卷,则必须在试图增大文件系统之前扩展逻辑卷。

  • 如果缩小逻辑卷,则必须在试图缩小逻辑卷之前缩小文件系统。

扩展逻辑卷的大小:

  1. 打开一个终端控制台。

  2. 如果逻辑卷包含 Ext2 或 Ext4 文件系统,则不支持联机增大,请将其卸下。如果它包含为虚拟机(例如 Xen VM)托管的文件系统,请先关闭该 VM。

  3. 在终端控制台提示时,输入以下命令以增加逻辑卷大小:

    sudo lvextend -L +SIZE /dev/VG_NAME/LV_NAME

    对于 SIZE,请指定要添加到逻辑卷的空间容量,例如 10 GB。将 /dev/VG_NAME/LV_NAME 替换为逻辑卷的 Linux 路径,例如 /dev/LOCAL/DATA。例如:

    sudo lvextend -L +10GB /dev/vg1/v1
  4. 调整文件系统的大小。有关详细信息,请参见第 2 章 “调整文件系统大小

  5. 如果卸下了文件系统,请将其重新装入。

例如,将带有(已装入并激活)Btrfs 的 LV 扩大 10GB:

sudo lvextend −L +10G /dev/LOCAL/DATA
sudo btrfs filesystem resize +10G /dev/LOCAL/DATA

要缩小逻辑卷的大小,请执行以下操作:

  1. 打开一个终端控制台。

  2. 如果逻辑卷不包含 Btrfs 文件系统,请将其卸下。如果它包含为虚拟机(例如 Xen VM)托管的文件系统,请先关闭该 VM。请注意,带有 XFS 文件系统的卷不能减少大小。

  3. 调整文件系统的大小。有关详细信息,请参见第 2 章 “调整文件系统大小

  4. 在终端控制台提示符中,输入下列命令以将逻辑卷的大小缩小为文件系统的大小︰

    sudo lvreduce /dev/VG_NAME/LV_NAME
  5. 如果卸载了文件系统,请将其重新装入。

例如,将带有 Btrfs 的 LV 缩减 5GB:

sudo btrfs filesystem resize -size 5G /dev/LOCAL/DATA
sudo lvreduce /dev/LOCAL/DATA
提示
提示: 使用一条命令调整卷和文件系统的大小

SUSE Linux Enterprise Server 12 SP1 开始,lvextendlvresizelvreduce 支持 --resizefs 选项,该选项不仅可以更改卷的大小,而且还能调整文件系统的大小。因此,上面所示的 lvextendlvreduce 示例也可以改编为:

sudo lvextend --resizefs −L +10G /dev/LOCAL/DATA
sudo lvreduce  --resizefs -L -5G /dev/LOCAL/DATA

请注意,以下文件系统支持 --resizefs:ext2/3/4、reiserfs、Btrfs 和 XFS。目前只能在 SUSE Linux Enterprise Server 上使用此选项调整 Btrfs 的大小,因为上游尚未接受此选项。

5.8.2 通过 lvmetad 动态汇总 LVM 元数据

大部分 LVM 命令都需要准确查看储存在系统的磁盘设备上的 LVM 元数据。对于当前的 LVM 设计,如果此信息不可用,则 LVM 必须扫描系统中的所有物理磁盘设备。在具有许多磁盘的系统中,这需要大量的 I/O 操作。如果磁盘无法响应,LVM 命令可能是在等待磁盘时发生超时。

通过 lvmetad 动态汇总 LVM 元数据可解决此问题。lvmetad 守护程序通过在每次设备状态更改时动态汇总元数据信息,来减少此扫描的需要。这些事件通过 udev 规则向 lvmetad 发出信号。如果守护程序未运行,则 LVM 会如常执行扫描。

默认情况下会启用此选项。如果该选项已在您的系统上已禁用,可执行以下操作来启用它:

  1. 打开一个终端控制台。

  2. 停止 lvmetad 守护程序︰

    sudo systemctl stop lvm2-lvmetad
  3. 编辑 /etc/lvm/lvm.conf 并将 use_lvmetad 设置为 1

    use_lvmetad = 1
  4. 重启动 lvmetad 守护程序︰

    sudo systemctl start lvm2-lvmetad

5.8.3 使用 LVM 超速缓存卷

LVM 支持使用高速块设备(例如 SSD 设备)作为较低速大型块设备的写回或直写超速缓存。该超速缓存逻辑卷类型使用小型高速 LV 来提高大型慢速 LV 的性能。

要设置 LVM 超速缓存,需在超速缓存设备上创建两个逻辑卷。较大的卷用于超速缓存本身,较小的卷用于储存超速缓存元数据。这两个卷需属于原始卷所在的同一个卷组。创建这些卷后,需要将其转换为超速缓存池,并将该池挂接到原始卷:

过程 5.2︰ 设置超速缓存的逻辑卷
  1. 在慢速设备上创建原始卷(如果尚不存在)。

  2. 将物理卷(从快速设备)添加到原始卷所属的同一个卷组,然后在物理卷上创建超速缓存数据卷。

  3. 创建超速缓存元数据卷。该卷的大小应为超速缓存数据卷大小的 1/1000,最小大小为 8 MB。

  4. 将超速缓存数据卷和元数据卷组合成一个超速缓存池卷:

    lvconvert --type cache-pool --poolmetadata VOLUME_GROUP/METADATA_VOLUME VOLUME_GROUP/CACHING_VOLUME
  5. 将超速缓存池挂接到原始卷:

    lvconvert --type cache --cachepool VOLUME_GROUP/CACHING_VOLUME VOLUME_GROUP/ORIGINAL_VOLUME

有关 LVM 超速缓存的详细信息,请参见 lvmcache(7) 手册页。

5.9 标记 LVM2 储存对象

标记是无序的关键字或指派给储存对象元数据的术语。使用标记功能可以采用您认为有用的方式将无序的标记列表附加到 LVM 储存对象元数据,从而对储存对象集合进行分类。

5.9.1 使用 LVM2 标记

标记 LVM2 储存对象后,可以在命令中使用标记来完成以下任务:

  • 根据有或无特定标记选择要处理的 LVM 对象。

  • 使用配置文件中的标记,控制在服务器上激活哪些卷组和逻辑卷。

  • 通过在命令中指定标记,覆盖全局配置中的设置。

可以使用标记代替接受以下项的任何命令行 LVM 对象参考:

  • 对象列表

  • 单个对象,只要标记扩展到单个对象

目前,在任何位置都不支持将对象名称替换为标记。扩展自变量后,列表中的重复自变量将通过删除重复自变量而保留每个自变量的第一个实例来解决。

只要是自变量类型可能不明确的位置,都必须在标记前面加上商业性 (@) 字符,比如 @mytag。在其他位置是否使用 @ 前缀是可选的。

5.9.2 创建 LVM2 标记的要求

对 LVM 使用标记时,请注意以下要求:

支持的字符

LVM 标记单词可以包含 ASCII 大写字符 A 到 Z、小写字符 a 到 z、数字 0 到 9、下划线 (_)、加号 (+)、连字符 (-) 和句点 (.)。单词不能以连字符开头。最大长度为 128 个字符。

支持的储存对象

可以标记 LVM2 物理卷、卷组、逻辑卷和逻辑卷分段。PV 标记将储存在其卷组的元数据中。删除卷组时也删除孤立的物理卷中的标记。快照不能标记,但快照源可以标记。

LVM1 对象不能标记,因为磁盘格式不支持此功能。

5.9.3 命令行标记语法

--addtag标记信息

将标记添加到(或标记)LVM2 储存对象。示例:

sudo vgchange --addtag @db1 vg1
--deltag标记信息

删除(或取消标记)LVM2 储存对象中的标记。示例:

sudo vgchange --deltag @db1 vg1
--tag标记信息

指定用于缩小要激活或停用的卷组列表或逻辑卷的标记。

如果卷的标记与提供的标记匹配,则输入以下命令将其激活(示例):

sudo lvchange -ay --tag @db1 vg1/vol2

5.9.4 配置文件语法

以下几节显示了特定用例的示例配置。

5.9.4.1 lvm.conf 文件中启用主机名标记

将下面的代码添加到 /etc/lvm/lvm.conf 文件中,以启用主机上 /etc/lvm/lvm_<HOSTNAME>.conf 文件中单独定义的主机标记。

tags {
   # Enable hostname tags
   hosttags = 1
}

您将激活代码置于主机上的 /etc/lvm/lvm_<HOSTNAME>.conf 文件中。请参见 第 5.9.4.3 节 “定义激活”

5.9.4.2 在 lvm.conf 文件中为主机名定义标记

tags {

   tag1 { }
      # Tag does not require a match to be set.

   tag2 {
      # If no exact match, tag is not set.
      host_list = [ "hostname1", "hostname2" ]
   }
}

5.9.4.3 定义激活

您可以修改 /etc/lvm/lvm.conf 文件,以根据标记激活 LVM 逻辑卷。

在文本编辑器中,将以下代码添加到文件中:

  activation {
      volume_list = [ "vg1/lvol0", "@database" ]
  }

用您的标记替换 @database。使用 "@*" 根据主机上设置的任何标记匹配此标记。

激活命令会匹配卷组和逻辑卷的元数据中设置的 VGNAMEVGNAME/LVNAME 或 @TAG。只有元数据标记匹配时,才激活卷组或逻辑卷。默认情况下,如果不匹配则不会激活。

如果 volume_list 不存在,且主机上已定义标记,则只有主机标记与元数据标记匹配时,才会激活卷组或逻辑卷。

如果 volume_list 已定义但为空,并且主机上未定义任何标记,则不会激活。

如果未定义 volume_list,则不会施加任何 LV 激活限制(允许所有情况)。

5.9.4.4 在多个主机名配置文件中定义激活

lvm.conf 文件中启用主机标记后,便可在主机配置文件 (/etc/lvm/lvm_<HOST_TAG>.conf) 中使用激活代码。例如,一个服务器在 /etc/lvm/ 目录中有两个配置文件:

lvm.conf
lvm_<HOST_TAG>.conf

启动时,会装载 /etc/lvm/lvm.conf 文件,并处理该文件中的任何标记设置。如果定义了任何主机标记,它会装载相关的 /etc/lvm/lvm_<HOST_TAG>.conf 文件。搜索特定配置文件项目时,将会先搜索主机标记文件,然后搜索 lvm.conf 文件,并在找到第一个匹配项时停止搜索。在 lvm_<HOST_TAG>.conf 文件中,使用与所设标记顺序相反的顺序。这样就可以先搜索最后设置标记的文件。主机标记文件中设置的新标记将会触发额外的配置文件装载。

5.9.5 将标记用于群集中的简单激活控制

您可以通过在 /etc/lvm/lvm.conf 文件中启用 hostname_tags 选项来设置简单主机名激活控制。将相同文件用于群集中的每一台计算机上,以便建立全局设置。

  1. 在文本编辑器中,将以下代码添加到 /etc/lvm/lvm.conf 文件中:

    tags {
       hostname_tags = 1
    }
  2. 将文件复制到群集中的所有主机上。

  3. 从群集中的任何计算机上,将 db1 添加到将激活 vg1/lvol2 的计算机列表中:

    sudo lvchange --addtag @db1 vg1/lvol2
  4. db1 服务器上,输入以下内容以激活它:

    sudo lvchange -ay vg1/vol2

5.9.6 使用标记激活群集中首选主机上的卷组

本部分中的示例展示了完成以下任务的两种方法:

  • 仅激活数据库主机 db1db2 上的卷组 vg1

  • 仅激活文件服务器主机 fs1 上的卷组 vg2

  • 最初在文件服务器备份主机 fsb1 上不激活任何卷组,但对其进行准备以从文件服务器主机 fs1 接管卷组。

5.9.6.1 选项 1:集中化管理和主机间静态配置复制

在以下解决方案中,单个配置文件复制到多台主机中。

  1. @database 标记添加到卷组 vg1 的元数据中。在终端控制台上,输入

    sudo vgchange --addtag @database vg1
  2. @fileserver 标记添加到卷组 vg2 的元数据中。在终端控制台上,输入

    sudo vgchange --addtag @fileserver vg2
  3. 在文本编辑器中,用以下代码修改 /etc/lvm/lvm.conf 文件,以定义 @database@fileserver@fileserverbackup 标记。

    tags {
       database {
          host_list = [ "db1", "db2" ]
       }
       fileserver {
          host_list = [ "fs1" ]
       }
       fileserverbackup {
          host_list = [ "fsb1" ]
       }
    }
    
    activation {
       # Activate only if host has a tag that matches a metadata tag
       volume_list = [ "@*" ]
    }
  4. 将修改后的 /etc/lvm/lvm.conf 文件复制到四台主机中:db1db2fs1fsb1

  5. 如果文件服务器主机出现故障,则在终端控制台的任何节点上输入以下命令即可在 fsb1 上启动 vg2

    sudo vgchange --addtag @fileserverbackup vg2
    sudo vgchange -ay vg2

5.9.6.2 选项 2: 本地化管理和配置

在以下解决方案中,每台主机在本地保存有关激活哪些类别的卷的信息。

  1. @database 标记添加到卷组 vg1 的元数据中。在终端控制台上,输入

    sudo vgchange --addtag @database vg1
  2. @fileserver 标记添加到卷组 vg2 的元数据中。在终端控制台上,输入

    sudo vgchange --addtag @fileserver vg2
  3. /etc/lvm/lvm.conf 文件中启用主机标记:

    1. 在文本编辑器中,用以下代码修改 /etc/lvm/lvm.conf 文件,以启用主机标记配置文件。

      tags {
         hosttags = 1
      }
    2. 将修改后的 /etc/lvm/lvm.conf 文件复制到四台主机上:db1db2fs1fsb1

  4. 在主机 db1 上,创建数据库主机 db1 的激活配置文件。在文本编辑器中,创建 /etc/lvm/lvm_db1.conf 文件并添加以下代码:

    activation {
       volume_list = [ "@database" ]
    }
  5. 在主机 db2 上,创建数据库主机 db2 的激活配置文件。在文本编辑器中,创建 /etc/lvm/lvm_db2.conf 文件并添加以下代码:

    activation {
       volume_list = [ "@database" ]
    }
  6. 在主机 fs1 上,创建文件服务器主机 fs1 的激活配置文件。在文本编辑器中,创建 /etc/lvm/lvm_fs1.conf 文件并添加以下代码:

    activation {
       volume_list = [ "@fileserver" ]
    }
  7. 如果文件服务器主机 fs1 出现故障,要启动备用文件服务器主机 fsb1 作为文件服务器:

    1. 在主机 fsb1 上,创建主机 fsb1 的激活配置文件。在文本编辑器中,创建 /etc/lvm/lvm_fsb1.conf 文件并添加以下代码:

      activation {
         volume_list = [ "@fileserver" ]
      }
    2. 在终端控制台上,输入以下命令之一:

      sudo vgchange -ay vg2
      sudo vgchange -ay @fileserver

6 LVM 卷快照

逻辑卷管理器 (LVM) 逻辑卷快照是一种写入时复制技术,它会监控现有卷数据块的更改,以便在对其中一个块执行写入操作时,将进行快照时块的值复制到快照卷。这样,便可保留数据的时间点副本,直到快照卷删除为止。

6.1 了解卷快照

文件系统快照包含有关自身的元数据以及在生成快照后更改过的源逻辑卷的数据块。通过快照访问数据时,您会看到复制来源逻辑卷的时间点。不需要从备份媒体恢复数据或重写更改过的数据。

重要
重要:使用快照装入的卷

在快照有效期内,必须先装入快照,然后才能装入其来源逻辑卷。

LVM 卷快照可用于从文件系统的时间点视图创建备份。快照是即时创建并永久保留的,直到您将其删除为止。您可以从快照备份文件系统,而卷本身仍可继续供用户使用。快照最初包含自身相关的一些元数据,但不包含来源逻辑卷的实际数据。快照使用写时复制技术在原始数据块中的数据发生更改时进行检测。当对快照卷中的块捕获快照时,它会复制所包含的值,然后允许在来源块中储存新的数据。随着来源逻辑卷上有更多块更改其原始值,快照大小将会增大。

调整快照大小时,请考虑来源逻辑卷中要更改的数据量,以及要保留快照的时间。您为快照卷分配的空间量因以下因素而异:来源逻辑卷的大小、计划保留快照的时间,以及在快照有效期中预期会更改的数据块数。快照卷创建后不能调整大小。从原则上说,应创建一个约占原始逻辑卷大小 10% 的快照卷。如果您预测在删除快照前,来源逻辑卷中的每个块都会至少更改一次,则快照的容量至少应相当于来源逻辑卷的容量加上部份额外空间,其中后者用于储存快照卷的相关元数据。如果数据更改不那么频繁或如果预期的有效期足够短,则需要的空间较少。

在 LVM2 中,快照默认为读/写。直接将数据写入快照时,该块在例外表格中标示为使用,不会从来源逻辑卷中复制。您可以装载快照卷,并通过直接将数据写入快照卷来测试应用更改。您可以通过卸载快照、去除快照,然后重新装载来源逻辑卷,轻松丢弃更改。

在虚拟 Guest 环境中,您可以使用快照功能用于在服务器的磁盘上创建的 LVM 逻辑卷,就如在物理服务器上一样。

在虚拟主机环境中,您可以使用快照功能来备份虚拟机的储存后端,或测试对虚拟机映像(例如用于修补程序或升级)进行的更改,而不必修改来源逻辑卷。虚拟机必须将 LVM 逻辑卷用做其储存后端,以免使用虚拟磁盘文件。您可以装载 LVM 逻辑卷,并将它用做文件型磁盘来储存虚拟机映像;也可以指派 LVM 逻辑卷做为物理磁盘,以便将其视为块设备进行写入操作。

从 SLES 11 SP3 开始,LVM 逻辑卷快照可以瘦配置。如果您创建没有指定大小的快照,则会使用瘦配置。创建为瘦卷的快照在需要时使用瘦池中的空间。快照瘦卷的特性与任何其他瘦卷相同。您可以独立地激活卷、扩展卷、重命名卷、去除卷,甚至可以创建卷的快照。

重要
重要:群集中瘦配置的卷

若要使用群集中瘦配置的快照,来源逻辑卷及其快照必须在单个群集资源中管理。这允许卷及其快照在同一个节点上始终独占性地装载。

当用完快照后,一定要将其从系统中删除。随着来源逻辑卷上数据块的不断更改,快照终将完全填满。填满时就会处于禁用状态,导致您无法重新装载来源逻辑卷。

如果您为一个来源逻辑卷创建多个快照,在去除最后创建快照之前,请先删除较旧的快照。

6.2 使用 LVM 创建 Linux 快照

可以使用逻辑卷管理器 (LVM) 创建文件系统的快照。

打开终端控制台,然后输入

sudo lvcreate -s [-L <size>] -n SNAP_VOLUME SOURCE_VOLUME_PATH

如果不指定大小,快照会创建为瘦快照。

例如:

sudo lvcreate -s -L 1G -n linux01-snap /dev/lvm/linux01

快照将被创建为 /dev/lvm/linux01-snap 卷。

6.3 监视快照

打开终端控制台,然后输入

sudo lvdisplay SNAP_VOLUME

例如:

tux > sudo lvdisplay /dev/vg01/linux01-snap

--- Logical volume ---
  LV Name                /dev/lvm/linux01
  VG Name                vg01
  LV UUID                QHVJYh-PR3s-A4SG-s4Aa-MyWN-Ra7a-HL47KL
  LV Write Access        read/write
  LV snapshot status     active destination for /dev/lvm/linux01
  LV Status              available
  # open                 0
  LV Size                80.00 GB
  Current LE             1024
  COW-table size         8.00 GB
  COW-table LE           512
  Allocated to snapshot  30%
  Snapshot chunk size    8.00 KB
  Segments               1
  Allocation             inherit
  Read ahead sectors     0
  Block device           254:5

6.4 删除 Linux 快照

打开终端控制台,然后输入

sudo lvremove SNAP_VOLUME_PATH

例如:

sudo lvremove /dev/lvmvg/linux01-snap

6.5 在虚拟主机上使用虚拟机的快照

如果将 LVM 逻辑卷用做虚拟机的后端储存,可以让系统灵活地管理基础设备,例如更轻松地移动储存对象、创建快照和备份数据。您可以装载 LVM 逻辑卷,并将它用做文件型磁盘来储存虚拟机映像;也可以指派 LVM 逻辑卷做为物理磁盘,以便将其视为块设备进行写入操作。您可以在 LVM 逻辑卷上创建虚拟磁盘映像,然后创建 LVM 快照。

您可以利用快照的读/写功能创建虚拟机的不同实例,并在这些实例中更改特定虚拟机实例的快照。您也可以在 LVM 逻辑卷上创建虚拟磁盘映像、创建来源逻辑卷的快照以及修改特定虚拟机实例的快照。您还可以创建来源逻辑卷的另一个快照,并修改该快照以取得不同虚拟机实例。不同虚拟机实例的大部分数据与映像一起储存在来源逻辑卷上。

在 Guest 环境中,您还可以利用快照的读/写功能保留虚拟磁盘映像,同时测试修补程序或升级。您创建包含映像的 LVM 卷的快照,然后在快照位置运行虚拟机。来源逻辑卷保持不变,对机器的所有更改均写入快照。为了恢复到虚拟机映像的来源逻辑卷,您需要关闭虚拟机,然后从来源逻辑卷中去除快照。若要重新开始,请重新创建快照、装载快照,然后在快照映像上重启动虚拟机。

下列程序使用文件型虚拟磁盘映像和 Xen 超级管理程序。对于在 SUSE Linux Enterprise 平台上运行的其他超级管理程序(例如 KVM),您可以调整本节中的过程。若要从快照卷中运行文件型虚拟机映像,请运行下列步骤:

  1. 确保已装入包含文件型虚拟机映像的来源逻辑卷,例如在安装点 /var/lib/xen/images/<IMAGE_NAME> 装入。

  2. 创建具有足够空间来储存预期差别的 LVM 逻辑卷快照。

    sudo lvcreate -s -L 20G -n myvm-snap /dev/lvmvg/myvm

    如果不指定大小,快照会创建为瘦快照。

  3. 创建安装点,用于装入快照卷。

    sudo mkdir -p /mnt/xen/vm/myvm-snap
  4. 在所创建的安装点装入快照卷。

    sudo mount -t auto /dev/lvmvg/myvm-snap /mnt/xen/vm/myvm-snap
  5. 在文本编辑器中,复制来源虚拟机的配置文件,修改指向装入快照卷上的文件型图像文件的路径,然后储存文件,例如 /etc/xen/myvm-snap.cfg

  6. 使用虚拟机的已装入快照卷启动虚拟机。

    sudo xm create -c /etc/xen/myvm-snap.cfg
  7. (可选)去除快照,然后在来源逻辑卷使用未更改的虚拟机映像。

    sudo unmount /mnt/xenvms/myvm-snap
    sudo lvremove -f /dev/lvmvg/mylvm-snap
  8. (可选)根据需要重复此程序。

6.6 将快照与来源逻辑卷合并以还原更改或回滚至先前的状态

如果您需要将卷上的数据回滚或还原至先前的状态,快照可能非常有用。例如,如果因管理员失误,或是因包安装或升级出故障或没必要,导致数据出现更改,您可能需要予以还原。

您可以使用 lvconvert --merge 命令还原对 LVM 逻辑卷的更改。合并按如下所示开始:

  • 如果来源逻辑卷和快照卷均未打开,合并将立即开始。

  • 如果来源逻辑卷或快照卷已打开,合并将在来源逻辑卷或快照卷第一次启动和同时关闭时开始。

  • 如果来源逻辑卷不能关闭(例如根文件系统),系统会推迟到下一次服务器重引导并激活来源逻辑卷的时候再合并。

  • 如果来源逻辑卷包含虚拟机映像,您必须关闭虚拟机,停用来源逻辑卷和快照卷(也就是依次卸下这些卷),然后发出合并命令。因为来源逻辑卷会自动重新装入,而且合并完成时会删除快照卷,所以在合并完成之前请勿重启动虚拟机。合并完成之后,您可以将生成的逻辑卷用于虚拟机。

合并开始之后,系统将在服务器重启动之后继续合并,直到合并完成。在合并期间,无法为来源逻辑卷创建新快照。

合并期间,系统对来源逻辑卷的读取或写入操作会透明地重定向到正在合并的快照,因此用户能够立即查看和访问数据,就像当时创建快照时一样,不必等到合并完成。

合并完成后,来源逻辑卷会包含与创建快照时相同的数据,加上合并开始后对数据的任何更改。生成的逻辑卷沿用了来源逻辑卷的名称、次要编号和 UUID。系统会自动重新装入来源逻辑卷,并去除快照卷。

  1. 打开终端控制台,然后输入

    sudo lvconvert --merge  [-b] [-i SECONDS] [SNAP_VOLUME_PATH[...snapN]|@VOLUME_TAG]

    您可以在命令行上指定一或多个快照;也可以使用相同卷标记来标记多个来源逻辑卷,然后在命令行上指定 @<VOLUME_TAG>。标记过的卷的快照会合并到其各自的来源逻辑卷中。有关标记逻辑卷的的相关信息,请参见第 5.9 节 “标记 LVM2 储存对象”

    选项包括:

    -b, --background

    在背景中执行守护程序,这样可以并行合并多个指定的快照。

    -i, --interval <SECONDS>

    以固定的间隔以百分比形式报告进度。指定的间隔以秒为单位。

    有关此命令的详细信息,请参见 lvconvert(8) man 页面。

    例如:

    sudo lvconvert --merge /dev/lvmvg/linux01-snap

    此命令将 /dev/lvmvg/linux01-snap 合并到其来源逻辑卷中。

    sudo lvconvert --merge @mytag

    如果 lvol1lvol2lvol3 全都以 mytag 标记,每个快照卷将依序与其各自的来源逻辑卷合并;即先 lvol1,再 lvol2,然后 lvol3。如果指定了 --background 选项,相应标记过的逻辑卷的快照将并行同时合并。

  2. (可选)如果来源逻辑卷和快照卷均已打开且可以关闭,则您可以手动停用然后激活来源逻辑卷,以便让合并立即开始。

    sudo umount ORIGINAL_VOLUME
    sudo lvchange -an ORIGINAL_VOLUME
    sudo lvchange -ay ORIGINAL_VOLUME
    sudo mount ORIGINAL_VOLUME MOUNT_POINT

    例如:

    sudo umount /dev/lvmvg/lvol01
    sudo lvchange -an /dev/lvmvg/lvol01
    sudo lvchange -ay /dev/lvmvg/lvol01
    sudo mount /dev/lvmvg/lvol01 /mnt/lvol01
  3. (可选)如果来源逻辑卷和快照卷均已打开且来源逻辑卷不能关闭(例如文件系统),则您可以重启动服务器并装入来源逻辑卷,以让合并在重启动之后立即开始。

第 III 部分 软件 RAID

  • 7 软件 RAID 配置
  • RAID(独立磁盘冗余阵列)的用途是将多个硬盘分区合并成一个大的虚拟硬盘,以便优化性能和/或数据安全性。大多数 RAID 控制器使用 SCSI 协议,因为对大量硬盘,它可用比 IDE 协议更高效的方式寻址,更适于命令的并行处理。还有一些支持 IDE 或 SATA 硬盘的 RAID 控制器。软件 RAID 具有 RAID 系统的优势,同时没有硬件 RAID 控制器的额外成本。但是这需要一些 CPU 时间以及内存,所以不适用于真正高性能的计算机。

  • 8 为根分区配置软件 RAID
  • SUSE Linux Enterprise Server 中,设备映射程序 RAID 工具已集成到 YaST 分区程序中。安装时可以使用此分区程序为包含根 (/) 分区的系统设备创建软件 RAID。不能将 /boot 分区储存在除 RAID 1 以外的 RAID 分区上。

  • 9 创建软件 RAID 10 设备
  • 本章说明如何设置嵌套和复杂 RAID 10 设备。RAID 10 设备包含嵌套 RAID 1(镜像)和 RAID 0(分段)阵列。嵌套 RAID 可以设置为条带化镜像 (RAID 1+0) 或镜像化条带 (RAID 0+1)。复杂 RAID 10 设置支持更高的数据冗余级别,因此镜像与分段兼得,并且拥有更多的数据安全措施。

  • 10 创建降级 RAID 阵列
  • 降级阵列是缺少某些设备的阵列。仅对 RAID 1、RAID 4、RAID 5 和 RAID 6 支持降级阵列。这些 RAID 类型被设计为作为容错功能的一部分,容忍缺少一些设备。通常,当一个设备失败时,会发生降级阵列。可以故意创建一个降级阵列。

  • 11 使用 mdadm 调整软件 RAID 阵列的大小
  • 本章描述如何使用多设备管理 (mdadm(8)) 工具增加或减小软件 RAID 1、4、5 或 6 设备的大小。

  • 12 适用于 MD 软件 RAID 的储存机箱 LED 实用程序
  • 储存机箱 LED 监视实用程序 (ledmon) 和 LED 控件 (ledctl) 实用程序属于 Linux 用户空间应用程序,它们使用多种接口和协议来控制储存机箱 LED。主要用途是视觉化显示使用 mdadm 实用程序创建的 Linux MD 软件 RAID 设备的状态。ledmon 守护程序会监视驱动器阵列的状态,然后相应更新驱动器 LED 的状态。您可以使用 ledctl 实用程序为指定的设备设置 LED 模式。

7 软件 RAID 配置

RAID(独立磁盘冗余阵列)的用途是将多个硬盘分区合并成一个大的虚拟硬盘,以便优化性能和/或数据安全性。大多数 RAID 控制器使用 SCSI 协议,因为对大量硬盘,它可用比 IDE 协议更高效的方式寻址,更适于命令的并行处理。还有一些支持 IDE 或 SATA 硬盘的 RAID 控制器。软件 RAID 具有 RAID 系统的优势,同时没有硬件 RAID 控制器的额外成本。但是这需要一些 CPU 时间以及内存,所以不适用于真正高性能的计算机。

重要
重要:群集文件系统上的 RAID

需要使用群集多设备(群集 MD)来设置群集文件系统下的软件 RAID。请参考 https://documentation.suse.com/sle-ha-12/html/SLE-HA-all/cha-ha-cluster-md.html 上的 High Availability Extension 文档。

SUSE Linux Enterprise 提供了将若干硬盘组合为一个软 RAID 系统的选项。RAID 暗示将多块硬盘合成一个 RAID 系统的多种策略,这些策略的目标、优点及特点各不相同。这些变化形式通常称作 RAID 级别

7.1 了解 RAID 级别

本节描述常见的 RAID 级别 0、1、2、3、4、5 和嵌套的 RAID 级别。

7.1.1 RAID 0

此级别通过将每个文件按块分放到多个磁盘上,提高了数据访问性能。这实际上并不是真正的 RAID,因为它未提供数据备份,但 RAID  0 已成为这种类型的系统的标准名称。使用 RAID 0,可以将两块或多块硬盘组合在一起。这样性能固然很好,但如果有任何一块硬盘出现故障,都将损坏 RAID 系统并丢失数据。

7.1.2 RAID 1

此级别为数据提供了充分的安全性,因为它将数据按 1:1 复制到另一块硬盘上。这种方法称为硬盘镜像。如果一块磁盘损坏,则可以使用另一块镜像磁盘上的内容副本。在所有这些硬盘中,只要有一块硬盘没有损坏,您的数据就不会丢失。但是,如果没有检测到损坏,损坏的数据可能会镜像到正确的磁盘,并以这种方式损坏其数据。与使用单个磁盘访问时相比,写性能在复制过程中稍有损失(慢 10% 到 20%),但读访问的速度要大大快于任何一块普通物理硬盘,原因是对数据进行了复制,从而可以并行扫描它们。RAID 1 通常提供几乎为单个磁盘读事务速率两倍的速率,写事务速率与单个磁盘几乎相同。

7.1.3 RAID 2 和 RAID 3

这些不是典型的 RAID 实现。级别 2 在位一级而不是块一级对数据进行分段。级别 3 则利用专用的校验磁盘在字节一级进行分段,但不能同时处理多个请求。这两种级别都极少使用。

7.1.4 RAID 4

级别 4 与级别 0 一样,也是在块一级进行分段,但结合使用了专用的校验磁盘。如果一块数据磁盘失败,将使用奇偶校验数据创建替换磁盘。不过,这块奇偶校验磁盘可能造成写访问的瓶颈。尽管如此,有时仍使用级别 4。

7.1.5 RAID 5

RAID 5 是级别 0 和级别 1 在性能和冗余方面经优化后的折衷方案。硬盘空间等于使用的磁盘数减 1。数据分布在这些硬盘上,这一点与 RAID  0 相同。但出于安全原因,在其中一个分区上创建了奇偶校验块。这些块通过 XOR 互相链接,并在系统出现故障时,通过启用相应的校验块重构建内容。对于 RAID 5,在同一时间只能有一块硬盘出现故障。如果一块硬盘出现故障,则必须在情况允许时将其更换,以防止丢失数据。

7.1.6 RAID 6

RAID 6 实际上是 RAID 5 的扩展,通过允许第二种独立分布式奇偶校验模式(双重奇偶校验),允许更多容错功能。即使在数据恢复过程中两个硬盘出现故障,系统仍将继续运行,数据不会丢失。

RAID 6 可承受多个并行驱动器故障,从而提供非常高的数据容错性能。它处理任何两个设备的丢失而不会丢失数据。此外,它还需要 N+2 个驱动器来储存相当于 N 个驱动器的数据。它至少需要四个设备。

RAID 6 的性能稍微低一些,但在正常模式和单磁盘故障模式下可以与 RAID 5 媲美。它在双磁盘故障模式下非常慢。RAID 6 配置需要占用相当多的 CPU 时间和内存,用于写入操作。

表 7.1︰ RAID 5 和 RAID 6 的比较

功能

RAID 5

RAID 6

设备数

N+1,至少 3 个

N+2,至少 4 个

奇偶校验

分布式,单

分布式,双

性能

在写和重构建方面有中度影响

比 RAID 5 在串行写方面影响大

容错

一个组件设备的故障

两个组件设备的故障

7.1.7 嵌套和复杂 RAID 级别

现在已开发出了其他 RAID 级别,例如 RAIDn、RAID 10、RAID 0+1、RAID 30 和 RAID 50。有些是硬件供应商创建的专用实施。创建 RAID 10 配置的示例可在第 9 章 “创建软件 RAID 10 设备中找到。

7.2 使用 YaST 配置软 RAID

可以通过 YaST 专家分区程序访问 YaST 软 RAID 配置。此分区工具还用于编辑和删除现有分区,并创建用于软 RAID 的新分区。下列说明在设置 RAID 级别 0、1、5 和 6 时适用。设置 RAID 10 配置的方法如第 9 章 “创建软件 RAID 10 设备所述。

  1. 起动 YaST 并打开分区程序

  2. 如果需要,请创建应该与 RAID 配置搭配使用的分区。请勿将它们格式化,并将分区类型设置为 0xFD Linux RAID。使用现有分区时,不需要更改它们的分区类型 — YaST 会自动更改。有关详细信息,请参见Book “部署指南”, Chapter 12 “高级磁盘设置”, Section 12.1 “使用 YaST 分区程序”

    强烈建议您使用储存在其他硬盘上的分区,以便降低当其中一个硬盘损坏时(RAID 1 和 5)遗失数据的风险,并优化 RAID 0 的性能。

    对于 RAID 0,至少需要两个分区。RAID 1 只需要两个分区,而 RAID 5 至少需要三个分区。RAID 6 设置至少需要四个分区。建议仅使用大小相同的分区,因为每个段仅可将相同的空间量作为最小大小的分区。

  3. 在左侧面板中,选择 RAID

    右侧面板中即会打开现有 RAID 配置的列表。

  4. 在 RAID 页面的左下方,单击 添加 RAID

    Image
  5. 选择RAID 类型并从可用设备对话框中添加适当数目的分区。

    您可以选择性地为 RAID 指派一个 RAID 名称。这样,RAID 的名称将是 /dev/md/NAME。有关详细信息,请参见第 7.2.1 节 “RAID 名称”

    RAID 5 配置示例
    图 7.1︰ RAID 5 配置示例

    单击下一步继续。

  6. 选择大块大小,如果适用,同时选择奇偶校验算法。最佳的大块大小视数据的类型和 RAID 的类型而定。有关详细信息,请参见 https://raid.wiki.kernel.org/index.php/RAID_setup#Chunk_sizes。有关奇偶校验算法的详细信息,请在搜索 --layout 选项时加上 man 8 mdadm。如果不确定,请接受默认值。

  7. 选择卷的角色。您在此处所做选择只会影响将要打开的对话框的默认值。这些值可在下一个步骤中更改。如果不确定,请选择原始卷(未格式化)

  8. 格式化选项下,选择格式化分区,然后选择文件系统选项菜单的内容取决于文件系统。通常不需要更改默认值。

    装入选项下,选择装入分区,然后选择安装点。单击 Fstab 选项,为卷添加特殊装入选项。

  9. 单击完成

  10. 单击下一步,验证是否列出了所做的更改,然后单击完成

7.2.1 RAID 名称

软件 RAID 设备默认带有 mdN 模式的数值名称,其中 N 是数字。因此,以 md127 为例,它可以按 /dev/md127 这样的方式进行访问,并且在 /proc/mdstat/proc/partitions 中会列出为 md127。但这些名称不方便使用,为此,SUSE Linux Enterprise Server 提供了两种解决方法:

提供指向设备的具名链接

当您使用 YaST 或在命令行上使用 mdadm --create '/dev/md/ NAME' 创建 RAID 设备时,可以选择为 RAID 设备指定一个名称。设备名称仍然是 mdN,但系统会创建一个链接 /dev/md/NAME

tux > ls -og /dev/md
total 0
lrwxrwxrwx 1 8 Dec  9 15:11 myRAID -> ../md127

设备在 /proc 下仍显示为 md127

提供具名设备

在设置时,如果指向设备的具名链接仍然不够方便,请运行下列命令将 CREATE names=yes 行添加至 /etc/mdadm.conf

sudo echo "CREATE names=yes" >> /etc/mdadm.conf

它会让系统将 myRAID 之类的名称用做真实的设备名称。设备不但可以在 /dev/myRAID 中访问,而且也会在 /proc 下列为 myRAID。请注意,只有在更改配置文件之后,此项才适用于 RAID。工作中的 RAID 将继续使用 mdN 名称,直到这些 RAID 停止并重新组装为止。

警告
警告:不兼容的工具

不是所有工具都可以支持具名 RAID 设备。如果工具认为一个 RAID 设备是命名为 mdN,它将无法识别该设备。

7.3 软件 RAID 疑难解答

查看 /proc/mdstats 文件以确定 RAID 分区是否受损。如果磁盘出现故障,请关闭 Linux 系统并用以同样方式分区的新硬盘替换出现问题的硬盘。然后重启动您的系统并输入命令 mdadm /dev/mdX --add /dev/sdX。将 X 替换为您的特定设备标识符。这会自动将硬盘整合到 RAID 系统中并完全重新构造(适用于除 RAID 0 以外的所有 RAID 级别)。

尽管可以在重构建期间访问所有数据,但在 RAID 完全重构建之前,仍然可能遇到一些性能问题。

7.3.1 修复故障磁盘之后进行恢复

RAID 阵列中的磁盘可能会出于多种原因而发生故障。下面列出了最常见的原因:

  • 磁盘媒体出现问题。

  • 磁盘驱动器控制器发生故障。

  • 与磁盘的连接断开。

在发生磁盘媒体或控制器故障时,需要更换或修复设备。如果未在 RAID 中配置热备件,则需要手动干预。

对于后一种情况,可以在修复连接(可能会自动修复)之后,使用 mdadm 命令自动重新添加发生故障的设备。

由于 md/mdadm 不能可靠地判断磁盘发生故障的原因,因此会臆测发生了严重的磁盘错误,并一直将任何发生操作失败的设备视为有故障,直到明确被告知该设备可靠为止。

在某些情况下(例如,储存设备包含内部 RAID 阵列),连接问题往往是设备发生故障的原因。在这种情况下,您可以告知 mdadm,在设备出现后,可以放心地使用 --re-add 自动重新添加该设备。为此,您可以将下面一行添加到 /etc/mdadm.conf 中:

POLICY action=re-add

请注意,仅当 udev 规则导致 mdadm -I DISK_DEVICE_NAME 在自发出现的任何设备上运行(默认行为),并且已配置 write-intent 位图(默认会配置)时,才会在设备重新出现之后自动重新添加该设备。

如果您希望此策略仅应用到某些设备而不应用到其余设备,可以将 path= 选项添加到 /etc/mdadm.conf 中的 POLICY 一行,以将非默认操作限制为只对选定的设备执行。可以使用通配符来识别设备组。有关详细信息,请参见 man 5 mdadm.conf

7.4 更多信息

位于下列位置的操作指南中提供了软 RAID 的配置说明和更多细节:

此外还提供了 Linux RAID 邮件列表,例如 linux-raid (http://marc.info/?l=linux-raid)。

8 为根分区配置软件 RAID

SUSE Linux Enterprise Server 中,设备映射程序 RAID 工具已集成到 YaST 分区程序中。安装时可以使用此分区程序为包含根 (/) 分区的系统设备创建软件 RAID。不能将 /boot 分区储存在除 RAID 1 以外的 RAID 分区上。

8.1 针对根分区使用软件 RAID 设备的先决条件

请确保配置满足以下要求:

  • 创建 RAID 1 镜像设备需要有两块硬盘。这两块硬盘的大小应相近。RAID 使用较小驱动器大小。块储存设备可以是本地设备(计算机中或直接挂接到计算机)、光纤通道储存子系统或 iSCSI 储存子系统的任意组合。

  • 如果在 MBR 中安装引导加载程序,则不需要为 /boot 创建独立分区。如果无法在 MBR 中安装引导加载程序,则 /boot 需要驻留在单独的分区上。

  • 对于 UEFI 计算机,需要设置专用的 /boot/efi 分区。该分区需要格式化为 VFAT,可以驻留在 RAID 1 设备上,以防包含 /boot/efi 的物理磁盘发生故障时出现引导问题。

  • 如果要使用硬件 RAID 设备,请不要在其上尝试运行软件 RAID。

  • 如果要使用 iSCSI 目标设备,需要在创建 RAID 设备之前启用对 iSCSI 发起端的支持。

  • 如果储存子系统在服务器和其直接挂接的本地设备、光纤通道设备或要在软件 RAID 中使用的 iSCSI 设备之间提供多个 I/O 路径,则在创建 RAID 设备之前需要启用多路径支持。

8.2 为根 (/) 分区设置具有软件 RAID 设备的系统

  1. 使用 YaST 启动安装,并按照Book “部署指南”, Chapter 6 “使用 YaST 进行安装”中的说明继续操作,直到达到建议的分区步骤为止。

  2. 单击专家分区程序以打开自定义分区程序。

  3. (可选)如果有要使用的 iSCSI 目标设备,则需要从屏幕右下方的部分中选择设置 › 配置 iSCSI,启用 iSCSI 发起端软件。有关更多细节,请参见第 14 章 “经由 IP 网络的大容量储存:iSCSI

  4. (可选)如果要对设备使用多个 I/O 路径,则需要通过从屏幕右下方的部分中选择设置 › 配置多路径 ›  ,启用多路径支持。

  5. (可选)如果您既未配置 iSCSI 又未设置多路径,则会显示默认的建议设置。单击重扫描设备以删除它们。

  6. 为要用于软件 RAID 的每个设备设置 0xFD Linux RAID 格式。应该为 //boot/efi 或交换分区使用 RAID。

    1. 在左侧面板中,选择硬盘 并选择要使用的设备,然后单击添加分区

    2. 新分区类型下,选择主分区,然后单击下一步

    3. 新分区大小下,指定要使用的大小,然后单击下一步

    4. 角色下,选择原始磁盘(未格式化)

    5. 选择不格式化,并将文件系统 ID设置为 0xFD Linux RAID

    6. 单击完成,并对第二个分区重复这些步骤。

      Image
  7. / 分区创建 RAID 设备。

    1. 在左侧面板中,选择RAID,然后选择添加 RAID

    2. / 分区设置所需的 RAID 类型,并将 RAID 名称设置为 system

    3. 可用的设备部分中选择您在上一步中准备好的两个 RAID 设备并添加它们。

      Image

      单击下一步继续。

    4. RAID 选项下,从下拉框中选择大块大小。保留默认设置是安全的做法。

    5. 角色下选择操作系统,然后单击完成继续。

    6. 选择文件系统并将安装点设置为 /。单击完成退出该对话框。

  8. 软件 RAID 设备便会受设备映射程序的管理,并会在 /dev/md/system 路径下创建一个设备。

  9. (可选)对于 UEFI 计算机,使用类似的步骤来创建 /boot/efi 装入分区。请记住,/boot/efi 仅支持 RAID 1,需要使用 FAT 文件系统来格式化该分区。

    RAID 上的 /、/boot/efi 和交换分区
    图 8.1︰ RAID 上的 //boot/efi 和交换分区
  10. 单击接受结束分区程序。

    建议的分区页面上会显示新的建议。

  11. 继续安装。对于包含独立 /boot/efi 分区的 UEFI 计算机,请在安装设置屏幕上单击引导,然后将引导加载程序设置为 GRUB2 for EFI。检查启用安全引导支持选项是否已激活。

    只要重引导服务器,设备映射程序就会在引导时启动,以便自动识别软件 RAID,并可在根 (/) 分区上启动操作系统。

9 创建软件 RAID 10 设备

本章说明如何设置嵌套和复杂 RAID 10 设备。RAID 10 设备包含嵌套 RAID 1(镜像)和 RAID 0(分段)阵列。嵌套 RAID 可以设置为条带化镜像 (RAID 1+0) 或镜像化条带 (RAID 0+1)。复杂 RAID 10 设置支持更高的数据冗余级别,因此镜像与分段兼得,并且拥有更多的数据安全措施。

9.1 使用 mdadm 创建嵌套 RAID 10 设备

嵌套的 RAID 设备由使用另一个 RAID 阵列(而不是物理磁盘)作为其基本元素的 RAID 阵列组成。此配置的目标是提高 RAID 的性能和容错能力。YaST 不支持设置嵌套 RAID 级别,但可以通过 mdadm 命令行工具实现。

根据嵌套的顺序,可以设置两个不同的嵌套 RAID。本文使用了下列术语:

  • RAID 1+0:: 先构建 RAID 1(镜像)阵列,然后组合形成 RAID 0(条带化)阵列。

  • RAID 0+1:: 先构建 RAID 0(条带化)阵列,然后组合形成 RAID 1(镜像)阵列。

下表描述嵌套为 1+0 和 0+1 的 RAID 10 的优点和缺点。假定您使用的储存对象驻留在不同的磁盘上,每个都有专用的 I/O 功能。

表 9.1︰ 嵌套的 RAID 级别

RAID 级别

描述

性能和容错

10 (1+0)

使用 RAID 1(镜像)阵列构建的 RAID 0(条带化)

RAID 1+0 提供高级别的 I/O 性能、数据冗余、和磁盘容错。因为 RAID 0 中的每个成员设备都分别镜像,因此可以容忍多个磁盘故障,并且只要失败的磁盘在不同的镜像中,数据仍然可用。

您可以选择为每个底层的镜像阵列配置一个备用设备,或配置一个备用设备充当服务于所有镜像的备用组。

10 (0+1)

使用 RAID 0(条带化)阵列构建的 RAID 1(镜像)

RAID 0+1 提供高级别的 I/O 性能和数据冗余,但比 1+0 的容错稍差。如果在镜像的一端多个磁盘失败,则另一个镜像可用。但是,如果在镜像的两端同时丢失磁盘,则所有数据会丢失。

这种解决方案比 1+0 解决方案磁盘容错差,但是如果需要在不同的站点执行维护或维护镜像,则可以使镜像的整个一端脱机,并仍可以有完全正常的储存设备。同时,如果丢失两个站点之间的连接,每个站点会彼此独立地运行。如果条带化镜像分段,则不是这种情况,因为这些镜像在较低级别进行管理。

如果一个设备失败,该端的镜像则会失败,因为 RAID 1 不容错。创建新的 RAID 0 以替换失败的一端,然后重新同步这两个镜像。

9.1.1 使用 mdadm 创建嵌套的 RAID 10 (1+0)

嵌套的 RAID 1+0 的构建方法是,创建两个或更多 RAID 1(镜像),然后使用它们作为 RAID 0 中的组件设备。

重要
重要:多路径

如果需要管理到这些设备的多个连接,则在配置这些 RAID 设备之前,必须配置多路径 I/O。有关信息,请参见第 17 章 “管理设备的多路径 I/O

本节中的过程使用下表中显示的设备名。确保使用您自己的设备名称修改这些设备名称。

表 9.2︰ 通过嵌套创建 RAID 10 (1+0) 的情形

原始设备

RAID 1(镜像)

RAID 1+0(条带化镜像)

/dev/sdb1
/dev/sdc1

/dev/md0

/dev/md2

/dev/sdd1
/dev/sde1

/dev/md1

  1. 打开一个终端控制台。

  2. 如果需要,使用 parted 等磁盘分区程序创建四个大小相同的 0xFD Linux RAID 分区。

  3. 创建两个软件 RAID 1 设备,为每个 RAID 设备使用两个不同的设备。在命令提示符处,输入以下两个命令:

    sudo mdadm --create /dev/md0 --run --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
    sudo mdadm --create /dev/md1 --run --level=1 --raid-devices=2 /dev/sdd1 /dev/sde1
  4. 创建嵌套的 RAID 1+0 设备。在命令提示符处,使用您在上一步中创建的软件 RAID 1 设备输入以下命令:

    sudo mdadm --create /dev/md2 --run --level=0 --chunk=64 \
    --raid-devices=2 /dev/md0 /dev/md1

    默认大块大小为 64 KB。

  5. 在 RAID 1+0 设备 /dev/md2 上创建文件系统,例如 XFS 文件系统:

    sudo mkfs.xfs /dev/md2

    要使用其他文件系统,请修改该命令。

  6. 编辑 /etc/mdadm.conf 文件,如果它不存在,则创建该文件(例如通过运行 sudo vi /etc/mdadm.conf)。添加下列行(如果该文件存在,则第一行很可能也已经存在)。

    DEVICE containers partitions
    ARRAY /dev/md0 UUID=UUID
    ARRAY /dev/md1 UUID=UUID
    ARRAY /dev/md2 UUID=UUID

    每个设备的 UUID 可以使用以下命令检索:

    sudo mdadm -D /dev/DEVICE | grep UUID
  7. 编辑 /etc/fstab 文件以添加 RAID 1+0 设备 /dev/md2 的项。下列示例显示了采用 XFS 文件系统并以 /data 做为安装点的 RAID 设备的项。

    /dev/md2 /data xfs defaults 1 2
  8. 装入 RAID 设备:

    sudo mount /data

9.1.2 使用 mdadm 创建嵌套的 RAID 10 (0+1)

嵌套的 RAID 0+1 的构建方法是,创建两个到四个 RAID 0(分段)设备,然后将它们镜像为 RAID 1 中的组件设备。

重要
重要:多路径

如果需要管理到这些设备的多个连接,则在配置这些 RAID 设备之前,必须配置多路径 I/O。有关信息,请参见第 17 章 “管理设备的多路径 I/O

在此配置中,不能为底层的 RAID 0 设备指定备用设备,因为 RAID 0 不能容忍设备丢失。如果在镜像的一端一个设备失败,则必须创建一个替换 RAID 0 设备,然后将其添加到镜像。

本节中的过程使用下表中显示的设备名。确保使用您自己的设备名称修改这些设备名称。

表 9.3︰ 通过嵌套创建 RAID 10 (0+1) 的情形

原始设备

RAID 0(条带化)

RAID 0+1(镜像条带化)

/dev/sdb1
/dev/sdc1

/dev/md0

/dev/md2

/dev/sdd1
/dev/sde1

/dev/md1

  1. 打开一个终端控制台。

  2. 如果需要,使用 parted 等磁盘分区程序创建四个大小相同的 0xFD Linux RAID 分区。

  3. 创建两个软件 RAID 0 设备,为每个 RAID 0 设备使用两个不同的设备。在命令提示符处,输入以下两个命令:

    sudo mdadm --create /dev/md0 --run --level=0 --chunk=64 \
    --raid-devices=2 /dev/sdb1 /dev/sdc1
    sudo mdadm --create /dev/md1 --run --level=0 --chunk=64 \
    --raid-devices=2 /dev/sdd1 /dev/sde1

    默认大块大小为 64 KB。

  4. 创建嵌套的 RAID 0+1 设备。在命令提示符处,使用您在上一步中创建的软件 RAID 0 设备输入以下命令:

    sudo mdadm --create /dev/md2 --run --level=1 --raid-devices=2 /dev/md0 /dev/md1
  5. 在 RAID 1+0 设备 /dev/md2 上创建文件系统,例如 XFS 文件系统:

    sudo mkfs.xfs /dev/md2

    要使用其他文件系统,请修改该命令。

  6. 编辑 /etc/mdadm.conf 文件,如果它不存在,则创建该文件(例如通过运行 sudo vi /etc/mdadm.conf)。添加下列行(如果该文件存在,第一行很可能也已经存在)。

    DEVICE containers partitions
    ARRAY /dev/md0 UUID=UUID
    ARRAY /dev/md1 UUID=UUID
    ARRAY /dev/md2 UUID=UUID

    每个设备的 UUID 可以使用以下命令检索:

    sudo mdadm -D /dev/DEVICE | grep UUID
  7. 编辑 /etc/fstab 文件以添加 RAID 1+0 设备 /dev/md2 的项。下列示例显示了采用 XFS 文件系统并以 /data 做为安装点的 RAID 设备的项。

    /dev/md2 /data xfs defaults 1 2
  8. 装入 RAID 设备:

    sudo mount /data

9.2 创建复杂 RAID 10

YaST(以及带 --level=10 选项的 mdadm)可创建单一复杂软件 RAID 10,它结合了 RAID 0(分段)与 RAID 1(镜像)的功能。所有数据块的多个副本遵循一个分段准则在多个驱动器上排列。组件设备应大小相同。

复杂 RAID 10 与嵌套 RAID 10 (1+0) 的目的类似,但在以下方面不同:

表 9.4︰ 复杂 RAID 10 与嵌套 RAID 10 的比较

特性

复杂 RAID 10

嵌套 RAID 10 (1+0)

设备数

允许组件设备数为奇数或偶数

要求组件设备数为偶数

组件设备

作为单个 RAID 设备管理

作为嵌套 RAID 设备管理

分段

在组件设备的近布局或远布局中发生分段。

远布局提供根据驱动器数(而不是 RAID 1 对数)缩放的串行读吞吐量。

在组件设备之间连续发生分段

数据的多个副本

两个或更多副本,最多为阵列中的设备数

每个镜像段上的副本

热备用设备

单个备用设备可以服务于所有组件设备

为每个底层的镜像阵列配置一个备用设备,或配置一个备用设备充当服务于所有镜像的备用组。

9.2.1 复杂 RAID 10 中的设备和复本数

配置复杂 RAID 10 阵列时,必须指定需要的每个数据块的复本数。默认复本数是 2,但该值可以是 2 到阵列中设备数之间的任何数字。

必须至少使用指定的复本数的组件设备。但是,RAID 10 阵列中的组件设备数不必是每个数据块的复本数的倍数。有效储存大小是设备数除以复本数。

例如,如果为使用 5 个组件设备创建的阵列指定 2 个复本,则每个块的副本储存在两个不同的设备上。所有数据的一个副本的有效储存大小是 5/2 或 2.5 乘以组件设备的大小。

9.2.2 布局

复杂 RAID 10 设置支持 3 种不同的布局,这些布局定义了在磁盘上排列数据块的方式。可用布局有近(默认值)、远和偏移。它们的性能特性各不相同,因此您必须选择适合自己工作负载的布局。

9.2.2.1 近布局

使用近布局,数据块的副本会在不同的组件设备上彼此邻近地条带化。即,一个数据块的多个副本在不同设备中的偏移类似。近布局是 RAID 10 的默认布局。例如,如果使用奇数个组件设备以及数据的两个副本,则一些副本可能在设备的一个大块中。

在半数的驱动器上,复杂 RAID 10 的近布局在读写性能上与 RAID 0 类似。

具有偶数个磁盘和两个复本的近布局:

sda1 sdb1 sdc1 sde1
  0    0    1    1
  2    2    3    3
  4    4    5    5
  6    6    7    7
  8    8    9    9

具有奇数个磁盘和两个复本的近布局:

sda1 sdb1 sdc1 sde1 sdf1
  0    0    1    1    2
  2    3    3    4    4
  5    5    6    6    7
  7    8    8    9    9
  10   10   11   11   12

9.2.2.2 远布局

远布局在所有驱动器的前面部分条带化数据,然后在所有驱动器的后面部分条带化数据的另一份副本,以确保块的所有副本在不同的驱动器上。第二个值集合在组件驱动器的中间开始。

使用远布局,复杂 RAID 10 的读取性能类似于所有驱动器上的 RAID 0,但写入速度比 RAID 0 慢得多,因为前者需要更多地搜寻驱动器头。适用于读密集性操作,例如只读文件服务器。

RAID 10 的写入速度类似于其他镜像 RAID 类型(例如使用近布局的 RAID 1 和 RAID 10),因为该文件系统的电梯式操作会以最佳方式而不是原始写入方式调度写入。使用远布局的 RAID 10 最适合镜像写入应用程序。

具有偶数个磁盘和两个复本的远布局:

sda1 sdb1 sdc1 sde1
  0    1    2    3
  4    5    6    7
  . . .
  3    0    1    2
  7    4    5    6

具有奇数个磁盘和两个复本的远布局:

sda1 sdb1 sdc1 sde1 sdf1
  0    1    2    3    4
  5    6    7    8    9
  . . .
  4    0    1    2    3
  9    5    6    7    8

9.2.2.3 偏移布局

偏移布局会复制分段,从而使指定大块的多个副本在连续的驱动器上以连续偏移进行布局。事实上,会复制每个分段且副本会按每个设备进行偏移。如果使用适当较大的大块大小且不超过写入的寻道大小,则此方式会赋予远布局类似的读特征。

具有偶数个磁盘和两个复本的偏移布局:

sda1 sdb1 sdc1 sde1
  0    1    2    3
  3    0    1    2
  4    5    6    7
  7    4    5    6
  8    9   10   11
 11    8    9   10

具有奇数个磁盘和两个复本的偏移布局:

sda1 sdb1 sdc1 sde1 sdf1
  0    1    2    3    4
  4    0    1    2    3
  5    6    7    8    9
  9    5    6    7    8
 10   11   12   13   14
 14   10   11   12   13

9.2.2.4 使用 YaST 和 mdadm 指定复本数和布局

复本数和布局在 YaST 中或使用 mdadm 的 --layout 参数指定为奇偶校验算法。接受的值如下:

nN

对近布局指定 n,并用复本数替换 Nn2 是默认值,在未设置布局和复本数时使用。

fN

对远布局指定 f,并用复本数替换 N

oN

对偏移布局指定 o,并用复本数替换 N

注意
注意:复本数

YaST 自动为奇偶校验算法参数的所有可能的值提供了选择。

9.2.3 使用 YaST 分区程序创建复杂 RAID 10

  1. 起动 YaST 并打开分区程序。

  2. 如果需要,请创建应该与 RAID 配置搭配使用的分区。请勿将它们格式化,并将分区类型设置为 0xFD Linux RAID。使用现有分区时,不需要更改它们的分区类型 — YaST 会自动更改。有关详细信息,请参见Book “部署指南”, Chapter 12 “高级磁盘设置”, Section 12.1 “使用 YaST 分区程序”

    对于 RAID 10,至少需要四个分区。强烈建议您使用储存在不同硬盘上的分区,以降低当其中一个损坏时遗失数据的风险。建议仅使用大小相同的分区,因为每个段仅可将相同的空间量作为最小大小的分区。

  3. 在左侧面板中,选择 RAID

    右侧面板中即会打开现有 RAID 配置的列表。

  4. 在 RAID 页面的左下方,单击 添加 RAID

  5. RAID 类型下,选择 RAID 10(镜像和分段)

    您可以选择性地为 RAID 指派一个 RAID 名称。这样,RAID 的名称将是 /dev/md/NAME。有关详细信息,请参见第 7.2.1 节 “RAID 名称”

  6. 可用设备列表中选择所需的 分区,然后单击添加,将其移到所选设备列表中。

    Image
  7. (可选)单击分类,指定各磁盘在 RAID 阵列中的首选顺序。

    对于容易受到磁盘添加顺序影响的 RAID 类型(例如 RAID 10),您可以指定以何种顺序使用设备。这将确保一半的阵列在一个磁盘子系统上,另一半阵列在另一个磁盘子系统上。例如,如果一个磁盘子系统出现故障,则系统仍可以通过第二个磁盘子系统继续运行。

    1. 依次选择每个磁盘,并单击其中一个 X 类按钮,其中 X 表示要指派给磁盘的字母。可用的类有 A、B、C、D 和 E,但很多情况下需要的类会比较少(例如,仅需要 A 和 B)。以此方式指派所有可用的 RAID 磁盘。

      可以按 CtrlShift 键选择多个设备。也可以右键单击所选设备并从环境菜单中选择合适的类。

    2. 选择以下其中一个排序选项指定设备的顺序:

      排序:: 将所有 A 类设备排序在所有 B 类设备之前,并以此类推。例如:AABBCC

      交错:: 按照先是 A 类的第一个设备,然后是 B 类的第一个设备,以此类推直到排完所有指派了后面类的设备。再然后是 A 类的第二个设备,B 类的第二个设备,以此类推。没有类的所有设备将排在设备列表的末尾。例如:ABCABC

      模式文件:: 选择一个包含多行的现有文件,其中的每一行都是一个正则表达式以及一个类名称 ("sda.* A")。所有与该正则表达式匹配的设备都将被指派给该行指定的类。正则表达式会依次与内核名称 (/dev/sda1)、udev 路径名称 (/dev/disk/by-path/pci-0000:00:1f.2-scsi-0:0:0:0-part1) 和 udev ID (dev/disk/by-id/ata-ST3500418AS_9VMN8X8L-part1) 进行比对。如果设备名称与多个正则表达式匹配,则会使用首个匹配项来决定类。

    3. 在对话框的底部,单击确定,以确认顺序。

      Image
  8. 单击下一步

  9. RAID 选项下,指定大块大小奇偶校验算法,然后单击下一步

    对于 RAID 10,奇偶校验选项包括 n(近)、f(远)和 o(偏移)。数字表示所需的每个数据块的复本数。默认值为 2。有关信息,请参阅第 9.2.2 节 “布局”

  10. 将文件系统和装入选项添加至 RAID 设备,然后单击完成

  11. 单击下一步

  12. 确认要进行的更改,然后单击完成以创建 RAID。

9.2.4 使用 mdadm 创建复杂 RAID 10

本节中的过程使用下表中显示的设备名。确保使用您自己的设备名称修改这些设备名称。

表 9.5︰ 使用 mdadm 创建 RAID 10 的情况

原始设备

RAID 10

/dev/sdf1

/dev/sdg1

/dev/sdh1

/dev/sdi1

/dev/md3

  1. 打开一个终端控制台。

  2. 如果需要,使用 parted 等磁盘分区程序创建至少四个大小相同的 0xFD Linux RAID 分区。

  3. 输入以下命令创建 RAID 10。

    mdadm --create /dev/md3 --run --level=10 --chunk=32 --raid-devices=4 \
    /dev/sdf1 /dev/sdg1 /dev/sdh1 /dev/sdi1

    请务必根据您的设置调整 --raid-devices 的值和分区列表。

    该命令会创建采用近布局并有两个复本的阵列。要更改这两个值中的任何一个,请按第 9.2.2.4 节 “使用 YaST 和 mdadm 指定复本数和布局”中所述使用 --layout

  4. 在 RAID 10 设备 /dev/md3 上创建文件系统,例如 XFS 文件系统:

    sudo mkfs.xfs /dev/md3

    要使用其他文件系统,请修改该命令。

  5. 编辑 /etc/mdadm.conf 文件,如果它不存在,则创建该文件(例如通过运行 sudo vi /etc/mdadm.conf)。添加下列行(如果该文件存在,第一行很可能也已经存在)。

    DEVICE containers partitions
    ARRAY /dev/md3 UUID=UUID

    设备的 UUID 可以使用以下命令检索:

    sudo mdadm -D /dev/md3 | grep UUID
  6. 编辑 /etc/fstab 文件以添加 RAID 10 设备 /dev/md3 的项目。下列示例显示了采用 XFS 文件系统并以 /data 做为安装点的 RAID 设备的项。

    /dev/md3 /data xfs defaults 1 2
  7. 装入 RAID 设备:

    sudo mount /data

10 创建降级 RAID 阵列

降级阵列是缺少某些设备的阵列。仅对 RAID 1、RAID 4、RAID 5 和 RAID 6 支持降级阵列。这些 RAID 类型被设计为作为容错功能的一部分,容忍缺少一些设备。通常,当一个设备失败时,会发生降级阵列。可以故意创建一个降级阵列。

RAID 类型

允许缺少的槽数

 

RAID 1

除一个设备外的所有设备

 

RAID 4

一个槽

 

RAID 5

一个槽

 

RAID 6

一个或两个槽

 

要创建缺少某些设备的降级阵列,只需使用单词 missing 替换设备名即可。这会导致 mdadm 将阵列中的相应槽保留为空。

当创建 RAID 5 阵列时,mdadm 会自动使用额外的备用驱动器创建降级阵列。这是因为将备用设备构建为降级阵列通常比在非降级但不清洁的阵列上重新同步奇偶校验要更快。您可以使用 --force 选项覆盖该功能。

在要创建 RAID,但要使用的一个设备上已经有数据时,创建降级阵列非常有用。在这种情况下,使用其他设备创建一个降级阵列,将使用中的设备上的数据复制到以降级模式运行的 RAID 上,将该设备添加到 RAID 中,然后等待 RAID 重构建以便该数据分散在所有设备中。以下过程是如此处理的一个示例:

  1. 若要使用单个驱动器 /dev/sd 1 创建降级的 RAID 1 设备 /dev/md0,请在命令提示符处输入以下命令:

    mdadm --create /dev/md0 -l 1 -n 2 /dev/sda1 missing

    该设备的大小应等于或大于计划添加到该设备的设备。

  2. 如果要添加到镜像的设备包含要移到 RAID 阵列中的数据,现在将其复制到处于降级模式的 RAID 阵列中。

  3. 将您从中复制数据的设备添加至镜像。例如,要向 RAID 中添加 /dev/sdb1,在命令提示符处输入以下命令:

    mdadm /dev/md0 -a /dev/sdb1

    您一次只能添加一个设备。必须等到内核构建镜像并将其完全联机,才能添加另一个镜像。

  4. 在命令提示符处输入以下命令,监视构建过程:

    cat /proc/mdstat

    要在每秒刷新重建进度时查看此进度,请输入

    watch -n 1 cat /proc/mdstat

11 使用 mdadm 调整软件 RAID 阵列的大小

本章描述如何使用多设备管理 (mdadm(8)) 工具增加或减小软件 RAID 1、4、5 或 6 设备的大小。

调整现有软件 RAID 设备的大小涉及增加或降低每个组件分区提供的空间。在 RAID 上驻留的文件系统也必须能够调整大小,以充分利用设备上可用空间的更改。在 SUSE Linux Enterprise Server 中,文件系统重设置大小实用程序可用于 Btrfs、Ext2、Ext3、Ext4、ReiserFS 和 XFS 文件系统(仅限增加大小)。有关更多信息,请参考第 2 章 “调整文件系统大小

mdadm 工具仅支持调整软件 RAID 级别 1、4、5 和 6 的大小。这些 RAID 级别提供磁盘容错,这样在调整大小时,可以一次卸下一个组件分区。基本上来说,可以对 RAID 分区执行热调整大小,但是这样做时,必须额外注意您的数据。

警告
警告:重设置大小之前请备份数据

调整任何分区或文件系统的大小涉及可能会导致数据丢失的风险。为了避免数据丢失,请确保在开始任何调整大小任务之前备份您的数据。

调整 RAID 大小涉及以下任务。执行这些任务的顺序取决于是增加还是减少大小。

表 11.1︰ 调整 RAID 大小中涉及的任务

任务

描述

增加大小的顺序

减小大小的顺序

调整每个组件分区的大小。

增加或减小每个组件分区的活动大小。一次仅可删除一个组件分区,修改其大小,然后将其返回到 RAID。

1

2

调整软件 RAID 本身的大小。

RAID 不会自动知道您对底层组件分区大小进行的增加或减小操作。您必须向其告知新的大小。

2

3

调整文件系统的大小。

必须调整驻留在 RAID 上的文件系统的大小。此操作只适用于提供了用于重设置大小工具的文件系统。

3

1

下列各部分中的程序使用在下表中所示的设备名称。确保使用您自己的设备名称修改这些名称。

表 11.2︰ 增加组件分区的大小的情形

RAID 设备

组件分区

/dev/md0

/dev/sda1

/dev/sdb1

/dev/sdc1

11.1 增加软件 RAID 的大小

增大软件 RAID 的大小涉及按给定顺序执行下列任务:增加所有组成 RAID 的所有分区的大小,增加 RAID 本身的大小,最后增加文件系统的大小。

警告
警告:潜在数据遗失

如果 RAID 没有磁盘容错,或只是不一致,则在删除其任何分区的情况下,将会导致数据丢失。删除分区时要非常小心,并确保有可用的数据备份。

11.1.1 增加组件分区的大小

应用本节中的过程以增加 RAID 1、4、5 或 6 的大小。对于 RAID 中的每个组件分区,从 RAID 中删除该分区,修改其大小,将其返回到 RAID,然后等待 RAID 稳定下来以继续。删除一个分区时,RAID 会以降级模式运行,没有磁盘容错或降低磁盘容错。即使对于可以容忍多个并行磁盘故障的 RAID,也不要一次删除多个组件分区。若要增加 RAID 组件分区的大小,请执行下列步骤:

  1. 打开一个终端控制台。

  2. 通过输入以下命令,确保 RAID 阵列一致并同步

    cat /proc/mdstat

    如果根据此命令的输出,RAID 阵列仍然正在同步,则必须等到同步完成,才能继续。

  3. 从 RAID 阵列中删除一个组件分区。例如,要删除 /dev/sda1,请输入

    sudo mdadm /dev/md0 --fail /dev/sda1 --remove /dev/sda1

    为确保操作成功,必须指定失败和去除操作。

  4. 执行下列操作之一,增加在上一步中去除的分区的大小:

    • 使用磁盘分区程序(例如 YaST 分区程序)或命令行工具 parted 增加分区的大小。该选项是通常的选项。

    • 将分区驻留的磁盘替换为高容量设备。仅当系统不访问原始磁盘上的任何其他文件系统时,该选项才可用。当将替换设备添加回 RAID 时,同步数据需要的时间长得多,因为原始设备上的所有数据都必须重构建。

  5. 将该分区重新添加到 RAID 阵列。例如,要添加 /dev/sda1,请输入

    sudo mdadm -a /dev/md0 /dev/sda1

    等到 RAID 同步并一致,然后再继续下一个分区。

  6. 对阵列中的每个剩余组件设备重复执行这些步骤。确保按照正确的组件分区修改命令。

  7. 如果得到一个消息,告知您内核不能重读 RAID 的分区表,则必须在调整所有分区大小后重引导计算机,以强制更新分区表。

  8. 继续第 11.1.2 节 “增加 RAID 阵列的大小”

11.1.2 增加 RAID 阵列的大小

调整 RAID 中的每个组件分区之后(请参见第 11.1.1 节 “增加组件分区的大小”),RAID 阵列配置将继续使用原始阵列大小,直到您强制其了解新的可用空间。您可以为 RAID 指定大小或使用最大可用空间。

本节中的过程对 RAID 设备使用设备名 /dev/md0。确保使用您自己的设备名称修改名称。

  1. 打开一个终端控制台。

  2. 通过输入以下命令,确保 RAID 阵列一致并同步

    cat /proc/mdstat

    如果根据此命令的输出,RAID 阵列仍然正在同步,则必须等到同步完成,才能继续。

  3. 通过输入以下命令,检查阵列了解到的阵列大小和设备大小

    sudo mdadm -D /dev/md0 | grep -e "Array Size" -e "Dev Size"
  4. 执行以下操作之一:

    • 通过输入以下命令,将阵列大小增加到最大可用大小

      sudo mdadm --grow /dev/md0 -z max
    • 通过输入以下命令,将阵列大小增加到最大可用大小

      sudo mdadm --grow /dev/md0 -z max --assume-clean

      阵列会使用已添加到设备中的任何空间,但不会同步此空间。建议对 RAID 1 使用此命令,因为该级别不需要同步。如果添加到成员设备中的空间已预先置零,则对其他 RAID 级别可能也有用。

    • 通过输入以下命令,将阵列大小增加到指定值

      sudo mdadm --grow /dev/md0 -z SIZE

      SIZE 替换为表示所需大小(KB,每 KB 等于 1024 字节)的整数值。

  5. 通过输入以下命令,重新检查阵列了解到的阵列大小和设备大小

    sudo mdadm -D /dev/md0 | grep -e "Array Size" -e "Dev Size"
  6. 执行以下操作之一:

11.1.3 增加文件系统的大小

增加阵列大小之后(请参见第 11.1.2 节 “增加 RAID 阵列的大小”),您就准备好调整文件系统大小了。

您可以将文件系统的大小增加到最大可用空间或指定精确大小。为文件系统指定精确大小时,请确保新大小满足以下条件:

  • 新大小必须大于现有数据的大小;否则会发生数据丢失。

  • 新大小必须等于或小于当前 RAID 大小,因为文件系统大小不能超出可用空间。

有关详细,请参见第 2 章 “调整文件系统大小

11.2 减小软件 RAID 的大小

减少软件 RAID 的大小涉及按顺序完成下列任务:减少文件系统的大小,减少所有组成分区 RAID 的大小,最后减少 RAID 本身的的大小。

警告
警告:潜在数据遗失

如果 RAID 没有磁盘容错,或只是不一致,则在删除其任何分区的情况下,将会导致数据丢失。删除分区时要非常小心,并确保有可用的数据备份。

重要
重要:XFS

XFS 格式文件系统的大小无法减少,因为 XFS 不支持此功能。因此,不能减少使用 XFS 文件系统的 RAID 的大小。

11.2.1 减小文件系统的大小

当减小 RAID 设备上的文件系统的大小时,请确保新的大小满足以下条件:

  • 新大小必须大于现有数据的大小;否则会发生数据丢失。

  • 新大小必须等于或小于当前 RAID 大小,因为文件系统大小不能超出可用空间。

有关详细,请参见第 2 章 “调整文件系统大小

11.2.2 减小 RAID 阵列的大小

调整文件系统的大小(请参见第 11.2.1 节 “减小文件系统的大小”)之后,RAID 阵列配置会继续使用其原始阵列大小,直到您强制它减少可用空间。使用 mdadm --grow 模式强制 RAID 使用较小的段大小。为此,您必须使用 -z 选项指定 RAID 中的每个设备上可使用的空间量(单位为 KB)。此大小必须是大块大小的倍数,且必须为将要写入设备的 RAID 超块预留大约 128KB 的空间。

本节中的过程对 RAID 设备使用设备名 /dev/md0。确保使用您自己的设备名称修改这些命令。

  1. 打开一个终端控制台。

  2. 通过输入以下命令,检查阵列了解到的阵列大小和设备大小

    sudo mdadm -D /dev/md0 | grep -e "Array Size" -e "Dev Size"
  3. 输入以下命令将阵列的设备大小减少至指定值

    sudo mdadm --grow /dev/md0 -z SIZE

    SIZE 替换为表示所需大小的整数值(单位为 KB)。(1 KB 是 1024 字节。)

    例如,以下命令将每个 RAID 设备的段大小设置为大约 40 GB,其中大块大小为 64 KB。还包含为 RAID 超块预留的 128 KB。

    sudo mdadm --grow /dev/md2 -z 41943168
  4. 通过输入以下命令,重新检查阵列了解到的阵列大小和设备大小

    sudo mdadm -D /dev/md0 | grep -e "Array Size" -e "Device Size"
  5. 执行以下操作之一:

11.2.3 减小组件分区的大小

减小 RAID 中每个设备使用的段的大小之后(请参见第 11.2.2 节 “减小 RAID 阵列的大小”),RAID 将不会使用每个组件分区的剩余空间。您可以让分区保持其当前大小,以为 RAID 将来的增长留出空间,或者也可以回收这些当前未使用的空间。

要回收空间,请逐个减少组件分区。对于每个组件分区执行以下步骤:从 RAID 中删除它,减小其分区大小,将该分区装回到 RAID,然后等到 RAID 稳定。要允许元数据,则应指定比您在第 11.2.2 节 “减小 RAID 阵列的大小”中为 RAID 指定的大小略大的大小值。

删除一个分区时,RAID 会以降级模式运行,没有磁盘容错或降低磁盘容错。即使对于可以容忍多个并行磁盘故障的 RAID,也不要一次删除多个组件分区。若要减小 RAID 组件分区的大小,请执行下列步骤:

  1. 打开一个终端控制台。

  2. 通过输入以下命令,确保 RAID 阵列一致并同步

    cat /proc/mdstat

    如果根据此命令的输出,RAID 阵列仍然正在同步,则必须等到同步完成,才能继续。

  3. 从 RAID 阵列中删除一个组件分区。例如,要删除 /dev/sda1,请输入

    sudo mdadm /dev/md0 --fail /dev/sda1 --remove /dev/sda1

    为确保操作成功,必须指定失败和去除操作。

  4. 减小在上一步中去除的分区的大小,让其值略大于为段设置的大小。该大小应是大块大小的倍数,并为 RAID 超块预留 128 KB 的空间。使用磁盘分区程序(例如 YaST 分区程序)或命令行工具 parted 减少分区的大小。

  5. 将该分区重新添加到 RAID 阵列。例如,要添加 /dev/sda1,请输入

    sudo mdadm -a /dev/md0 /dev/sda1

    等到 RAID 同步并一致,然后再继续下一个分区。

  6. 对阵列中的每个剩余组件设备重复执行这些步骤。确保按照正确的组件分区修改命令。

  7. 如果得到一个消息,告知您内核无法重读 RAID 的分区表,则您必须在重新调整其所有组件分区大小后重引导计算机。

  8. (可选)扩展 RAID 和文件系统的大小,以使用当前较小组件分区中的最大空间量,并在此后增加文件系统的大小。有关指导,请参见第 11.1.2 节 “增加 RAID 阵列的大小”

12 适用于 MD 软件 RAID 的储存机箱 LED 实用程序

储存机箱 LED 监视实用程序 (ledmon) 和 LED 控件 (ledctl) 实用程序属于 Linux 用户空间应用程序,它们使用多种接口和协议来控制储存机箱 LED。主要用途是视觉化显示使用 mdadm 实用程序创建的 Linux MD 软件 RAID 设备的状态。ledmon 守护程序会监视驱动器阵列的状态,然后相应更新驱动器 LED 的状态。您可以使用 ledctl 实用程序为指定的设备设置 LED 模式。

这些 LED 实用程序使用 SGPIO(通用串行输入/输出)规范(小型 (SFF) 8485)以及 SCSI 机箱服务 (SES) 2 协议控制 LED。它们实施 SGPIO 的 SFF-8489 规范中的国际闪烁模式解释 (IBPI) 模式。IBPI 定义了 SGPIO 标准将如何解释成驱动器以及底板上各插槽的状态,以及底板将如何通过 LED 视觉化显示状态。

有些储存机箱并未严格遵循 SFF-8489 规范。机箱处理器可能会接受 IBPI 模式,但不会按照 SFF-8489 规范闪烁 LED,或者处理器可能仅支持部分 IBPI 模式。

ledmon 以及 ledctl 实用程序不支持 LED 管理(AHCI) 和 SAF-TE 协议。

ledmonledctl 应用程序经验证可以用于 Intel AHCI 控制器以及 Intel SAS 控制器等 Intel 储存控制器。它们还支持使用 PCIe-SSD(固态硬盘)机箱 LED 来控制属于 MD 软件 RAID 卷一部分的 PCIe-SSD 设备的储存机箱状态(正常、故障、正在重建)LED。这些应用程序也可能可以用于其他供应商提供的符合 IBPI 的储存控制器(特别是 SAS/SCSI 控制器);不过其他供应商的控制器未经过测试。

ledmonledctl 都属于 ledmon 包,该包在默认状态下不予安装。执行 sudo zypper in ledmon 可安装它。

12.1 储存机箱 LED 监视服务

ledmon 应用程序是一个守护程序进程,它会持续监视 MD 软件 RAID 设备的状态或储存机箱或驱动器机架中块设备的状态。一次只能运行一个该守护程序的实例。ledmon 守护程序是 Intel 机箱 LED 实用程序的一部分。

状态通过与储存阵列机箱或驱动器机架中的每个槽对应的 LED 视觉化显示。应用程序会监视所有软件 RAID 设备并视觉化显示其状态。无法通过该应用程序仅监视选定的软件 RAID 卷。

ledmon 守护程序支持两类 LED 系统:双 LED 系统(活动 LED 和状态 LED)与三 LED 系统(活动 LED、查找 LED 和故障 LED)。此工具在访问 LED 时具有最高优先级。

若要启动 ledmon,请输入

sudo ledmon [options]

其中 [options] 是下列一或多项:

ledmon 的选项
-c 路径 , --confg=路径

配置从 ~/.ledctl/etc/ledcfg.conf(如果存在)中读取。使用此选项来指定替代的配置文件。

目前此选项无效,因为尚未实施对配置文件的支持。有关细节,请参见 man 5 ledctl.conf

-l 路径 , --log=路径

设置本地日志文件的路径。如果指定此用户定义的文件,则将不会使用全局日志文件 /var/log/ledmon.log

-t 秒数 , --interval=秒数

设置 sysfs 的扫描间隔时间。该值以秒为单位。最小值为 5 秒。不指定最大值。

--quiet--error--warning--info--debug--all

指定冗长级别。级别选项按从无信息到最详细信息的顺序指定。如果不记录日志,则使用 --quiet 选项。如果要记录所有内容,则使用 --all 选项。如果指定多个冗长选项,则会应用命令中的最后一个选项。

-h , --help

将命令信息打印至控制台,然后退出。

-v , --version

显示 ledmon 的版本以及许可证的相关信息,然后退出。

注意
注意:已知问题

ledmon 守护程序无法识别 SFF-8489 规范中的 PFA(故障预警分析)状态。因此无法视觉化显示 PFA 模式。

12.2 储存机箱 LED 控制应用程序

机箱 LED 应用程序 (ledctl) 是一款用户空间应用程序,用于控制与储存机箱或驱动器机架中每个槽相关联的 LED。ledctl 应用程序是 Intel 机箱 LED 实用程序的组成部分。

在您发出命令时,指定设备的 LED 将被设置为指定的模式,并且所有其他的 LED 都将关闭。运行此应用程序需要 root 权限。由于 ledmon 应用程序在访问 LED 时具有最高优先级,因此如果 ledmon 守护程序正在运行,则由 ledctl 设置的某些模式可能不起作用(“查找”模式除外)。

ledctl 应用程序支持两类 LED 系统:二 LED 系统(活动 LED 和状态 LED)以及三 LED 系统(活动 LED、故障 LED 和查找 LED)。

若要启动 ledctl,请输入

sudo [options] PATTERN_NAME=list_of_devices

其中 [options] 是下列一或多项:

-c 路径 , --confg=路径

设置本地配置文件的路径。如果指定此选项,则全局配置文件和用户配置文件都将失效。

-l 路径 , --log=路径

设置本地日志文件的路径。如果指定此用户定义的文件,则将不会使用全局日志文件 /var/log/ledmon.log

--quiet

关闭所有向 stdout 或从 stderr 发送的消息。但在本地文件和 syslog 功能中仍会记录这些消息。

-h , --help

将命令信息打印至控制台,然后退出。

-v , --version

显示 ledctl 的版本以及许可证的相关信息,然后退出。

12.2.1 模式名称

根据 SFF-8489 规范,ledctl 应用程序会接受以下 pattern_name 自变量的名称。

locate

打开与指定设备或空槽相关的查找 LED。此状态用于标识槽或驱动器。

locate_off

关闭与指定设备或空槽相关的查找 LED。

normal

关闭与指定设备相关的状态 LED、故障 LED 以及查找 LED。

off

仅关闭与指定设备相关的状态 LED 和故障 LED。

ica , degraded

可视化显示 In a Critical Array 模式。

rebuild , rebuild_p

可视化显示 Rebuild 模式。由于兼容性和旧版原因,支持两种重构建状态。

ifa , failed_array

可视化显示 In a Failed Array 模式。

hotspare

可视化显示 Hotspare 模式。

pfa

可视化显示 Predicted Failure Analysis 模式。

failure , disk_failed

可视化显示 Failure 模式。

ses_abort

SES-2 R/R ABORT

ses_rebuild

SES-2 REBUILD/REMAP

ses_ifa

SES-2 IN FAILED ARRAY

ses_ica

SES-2 IN CRITICAL ARRAY

ses_cons_check

SES-2 CONS CHECK

ses_hotspare

SES-2 HOTSPARE

ses_rsvd_dev

SES-2 RSVD DEVICE

ses_ok

SES-2 OK

ses_ident

SES-2 IDENT

ses_rm

SES-2 REMOVE

ses_insert

SES-2 INSERT

ses_missing

SES-2 MISSING

ses_dnr

SES-2 DO NOT REMOVE

ses_active

SES-2 ACTIVE

ses_enable_bb

SES-2 ENABLE BYP B

ses_enable_ba

SES-2 ENABLE BYP A

ses_devoff

SES-2 DEVICE OFF

ses_fault

SES-2 FAULT

将非 SES-2 模式发送至机箱中的设备时,该模式会自动转换为上面所示的 SCSI 机箱服务 (SES) 2 模式。

表 12.1︰ 非 SES-2 模式与 SES-2 模式之间的转换

非 SES-2 模式

SES-2 模式

locate

ses_ident

locate_off

ses_ident

normal

ses_ok

off

ses_ok

ica

ses_ica

degraded

ses_ica

rebuild

ses_rebuild

rebuild_p

ses_rebuild

ifa

ses_ifa

failed_array

ses_ifa

hotspare

ses_hotspare

pfa

ses_rsvd_dev

failure

ses_fault

disk_failed

ses_fault

12.2.2 设备列表

在您发出 ledctl 命令时,指定设备的 LED 将被设置为指定的模式,并且所有其他的 LED 都将关闭。设备列表可采用以下两种格式中的一种提供:

  • 以逗号分隔且无空格的设备列表

  • 以空格分隔且用花括号括住的设备列表

如果在同一个命令中指定多个模式,则每一个模式的设备列表可以使用相同格式也可以使用不同格式。有关显示两种列表格式的示例,请参见第 12.2.3 节 “示例”

设备就是指向 /dev 目录或 /sys/block 目录中文件的路径。该路径可以标识块设备、MD 软件 RAID 设备或容器设备。对于软件 RAID 设备或容器设备,会为所有关联的块设备设置所报告的 LED 状态。

list_of_devices 中列出设备的 LED 将被设置为指定模式 pattern_name 并且所有其他 LED 都将关闭。

12.2.3 示例

查找单个块设备:

sudo ledctl locate=/dev/sda

若要关闭单个块设备的“查找 LED”,请执行以下步骤:

sudo ledctl locate_off=/dev/sda

查找 MD 软件 RAID 设备的磁盘,并同时为两个块设备设置重构建模式:

sudo ledctl locate=/dev/md127 rebuild={ /sys/block/sd[a-b] }

关闭指定设备的“状态 LED”和“故障 LED”:

sudo ledctl off={ /dev/sda /dev/sdb }

若要找到三个块设备,请运行以下命令之一(两个命令的作用相同):

sudo ledctl locate=/dev/sda,/dev/sdb,/dev/sdc
sudo ledctl locate={ /dev/sda /dev/sdb /dev/sdc }

12.3 其他信息

有关 LED 模式以及监视工具的详细信息,请参见以下资源:

第 IV 部分 网络储存

  • 13 iSNS for Linux
  • 储存区域网络 (SAN) 可包含分布在复杂网络间的许多磁盘驱动器。这会使设备发现和设备所有权变得复杂。iSCSI 发起端必须能够识别 SAN 中的储存资源,并确定是否可对其进行访问。

  • 14 经由 IP 网络的大容量储存:iSCSI
  • 提供充足的磁盘容量是计算机中心或支持服务器的任何站点的主要任务之一。通常为此目的使用光纤通道。iSCSI(因特网 SCSI)解决方案提供了光纤通道的低成本备用方案,可以充分利用商品服务器和以太网联网设备。Linux iSCSI 提供 iSCSI 发起端和 iSCSI LIO 目标软件,用于将 Linux 服务器连接到中心储存系统。

  • 15 以太网光纤通道储存:FCoE
  • 许多企业数据中心的 LAN 和数据流量都依赖于以太网,而其储存基础设施则依赖于光纤通道网络。开放以太网光纤通道 (FCoE) 发起端软件允许配有以太网适配器的服务器经由以太网网络连接光纤通道储存子系统。而在以前,只允许配有光纤通道适配器的系统经由光纤通道架构进行连接。FCoE 技术通过支持网络融合降低了数据中心的复杂度。这有助于保护您在光纤通道储存基础设施方面的现有投资,并简化网络管理。

  • 16 NVMe over Fabric
  • 本章介绍如何设置 NVMe over Fabric 主机和目标。

  • 17 管理设备的多路径 I/O
  • 本章介绍如何使用多路径 I/O (MPIO) 来管理服务器和块储存设备间多路径的故障转移和路径负载平衡。

  • 18 管理 NFSv4 访问控制列表
  • 在 Linux 中,除了针对用户、组和其他人 (ugo) 的读取、写入、执行 (rwx) 这些简单标志之外,各访问控制列表 (ACL) 没有统一的标准。控制能力相对较好的一个选择是《Draft POSIX ACLs》(POSIX ACL 草稿),它尚未得到 POSIX 的正式标准化。另一个选择是 NFSv4 ACL,它是 NFSv4 网络文件系统的一部分,目的是为了在 Linux 上的 POSIX 系统与 Microsoft Windows 上的 WIN32 系统之间提供适当的兼容性。

13 iSNS for Linux

储存区域网络 (SAN) 可包含分布在复杂网络间的许多磁盘驱动器。这会使设备发现和设备所有权变得复杂。iSCSI 发起端必须能够识别 SAN 中的储存资源,并确定是否可对其进行访问。

因特网储存名称服务 (iSNS) 是一项基于标准的服务,使用它可简化 TCP/IP 网络上 iSCSI 设备的自动发现、管理和配置。与光纤通道网络中的服务相比,iSNS 可提供智能的储存发现和管理服务。

重要
重要:安全考虑因素

只有在安全的内部网络中,才应使用 iSNS。

13.1 iSNS 的工作原理

iSCSI 发起端要发现 iSCSI 目标,需要识别网络中的哪些设备是储存资源以及访问这些资源需要哪些 IP 地址。对 iSNS 服务器的查询会返回发起端有权访问的一个 iSCSI 目标和 IP 地址的列表。

通过使用 iSNS,您创建 iSNS 发现域,随后将 iSCSI 目标和发起端分组或组织到这些域中。通过将储存节点划分到域,您可以将每个主机的发现进程限制为在 iSNS 中注册的最合适的目标子集,这使得储存网络可通过降低不必要的发现数和限制每个主机在建立发现关系时花费的时间而按比例缩放。这使您可以控制和简化必须发现的目标和发起端的数目。

iSNS 发现域
图 13.1︰ iSNS 发现域

iSCSI 目标和 iSCSI 发起端都使用 iSNS 客户端启动通过 iSNS 协议与 iSNS 服务器的事务。然后,它们在公共发现域中注册设备属性信息、下载有关其他注册客户端的信息,以及接收出现在其发现域中的事件的异步通知。

iSNS 服务器响应由 iSNS 客户端使用 iSNS 协议作出的 iSNS 协议查询和请求。iSNS 服务器启动 iSNS 协议状态更改通知,并正确储存由 iSNS 数据库中的注册请求提交的身份验证信息。

适用于 Linux 的 iSNS 提供的优点包括:

  • 提供信息设备以供注册、发现和管理联网储存资产。

  • 与 DNS 基础结构集成。

  • 统一 iSCSI 储存的注册、发现和管理。

  • 简化储存管理实施。

  • 与其他发现方法相比,改进了可伸缩性。

以下情境可以帮助您更好地理解 iSNS 的优点:

假定您拥有一家配有 100 个 iSCSI 发起端和 100 个 iSCSI 目标的公司。根据您的配置,所有 iSCSI 发起端都可能尝试发现并连接到 100 个 iSCSI 目标的任一个。这将造成发现和连接出现问题。通过将发起端和目标分组到发现域,您可以阻止某个部门的 iSCSI 发起端发现其他部门的 iSCSI 目标。这会导致特定部门中的 iSCSI 发起端仅会发现属于该部门发现域的 iSCSI 目标。

13.2 安装 iSNS Server for Linux

iSNS Server for Linux 随附于 SUSE Linux Enterprise Server,但默认不会对其加以安装或设置。您需要安装包 open-isns 并设置 iSNS 服务。

注意
注意:iSNS 和 iSCSI 在同一服务器上

可以在安装了 iSCSI 目标或 iSCSI 发起端软件的同一服务器上安装 iSNS。不支持在同一服务器上同时安装 iSCSI 目标软件和 iSCSI 发起端软件。

安装 iSNS for Linux:

  1. 启动 YaST 并选择网络服务 › iSNS 服务器

  2. 如果尚未安装 open-isns,则系统现在会提示您进行安装。通过单击安装确认安装。

  3. “iSNS 服务”配置对话框会自动打开并显示服务选项卡。

    Image
  4. 启动服务中,选择以下选项之一:

    • 引导时:: iSNS 服务在服务器启动时自动启动。

    • 手动(默认):: 必须在用于安装 iSNS 服务的服务器的控制台中手动输入 sudo systemctl start isnsd 来启动 iSNS 服务。

  5. 指定以下防火墙设置:

    • 打开防火墙中的端口:: 选中该复选框以打开防火墙,并允许从远程计算机访问该服务。默认情况下,防火墙端口是关闭的。

    • 防火墙细节:: 如果打开防火墙端口,默认情况下会在所有网络接口上打开该端口。单击防火墙细节以选择要打开该端口的接口,选择要使用的网络接口,然后单击确定

  6. 单击确定可应用配置设置并完成安装。

  7. 继续第 13.3 节 “配置 iSNS 发现域”

13.3 配置 iSNS 发现域

要让 iSCSI 发起端和目标使用 iSNS 服务,它们必须属于某个发现域。

重要
重要:iSNS 服务必须处于使用中状态

必须已安装并运行 iSNS 服务,才能设置 iSNS 发现域。有关信息,请参见第 13.4 节 “启动 iSNS 服务”

13.3.1 创建 iSNS 发现域

安装 iSNS 服务时,将会自动创建一个名为默认 DD 的默认发现域。已配置为使用 iSNS 的现有 iSCSI 目标和发起端会自动添加到默认的发现域。

创建新的发现域:

  1. 启动 YaST,然后在网络服务下选择 iSNS 服务器

  2. 单击发现域选项卡。

    发现域区域列出了所有现有的发现域。您可以创建发现域,或删除现有的发现域。删除域会从域中去除成员,但不会删除iSCSI 节点成员。

    发现域成员区域列出指派给所选发现域的所有 iSCSI 节点。选择不同的发现域会使用该发现域的成员刷新该列表。您可以在所选发现域中添加和删除 iSCSI 节点。删除 iSCSI 节点会从域中删除该节点,但不会删除该 iSCSI 节点。

    创建 iSCSI 节点成员允许将尚未注册的节点添加为发现域成员。当 iSCSI 发起端或目标注册该节点时,它会成为该域的一部分。

    当 iSCSI 发起端执行发现请求时,iSNS 服务会返回作为同一发现域成员的所有 iSCSI 节点目标。

    Image
  3. 单击创建发现域按钮。

    还可以选择现有发现域,然后单击删除按钮删除该发现域。

  4. 指定创建的发现域的名称,然后单击确定

  5. 继续第 13.3.2 节 “向发现域添加 iSCSI 节点”

13.3.2 向发现域添加 iSCSI 节点

  1. 启动 YaST,然后在网络服务下选择 iSNS 服务器

  2. 单击 iSCSI 节点选项卡。

    Image
  3. 检查节点列表以确保列出了要使用 iSNS 服务的 iSCSI 目标和发起端。

    如果未列出 iSCSI 目标或发起端,可能需要在节点上重启动 iSCSI 服务。为此,您可以运行

    sudo systemctl restart iscsid.socket
    sudo systemctl restart iscsi

    重启动发起端,或运行

    sudo systemctl restart target-isns

    重启动目标。

    可以选择某 iSCSI 节点,然后单击删除按钮从 iSNS 数据库中删除该节点。如果不再使用某 iSCSI 节点或已对其重命名,这十分有用。

    除非删除或注释掉 iSCSI 配置文件的 iSNS 部分,否则,在重启动 iSCSI 服务或重引导服务器时,iSCSI 节点将再次自动添加到列表(iSNS 数据库)。

  4. 单击发现域选项卡并选择所需的发现域。

  5. 单击添加现有 iSCSI 节点,选择要添加到域中的节点,然后单击添加节点

  6. 为添加至发现域的节点重复上一步,当您完成添加节点时,再单击完成

    请注意,一个 iSCSI 节点可属于多个发现域。

13.4 启动 iSNS 服务

必须在安装 iSNS 的服务器上启动它。如果您未将它设置为在引导时启动(有关细节,请参见第 13.2 节 “安装 iSNS Server for Linux”),请在终端控制台中输入以下命令:

sudo systemctl start isnsd

您还可以对 iSNS 使用 stopstatusrestart 选项。

13.5 更多信息

相关信息请参见 Linux iSNS for iSCSI project(Linux iSNS for iSCSI 项目,网址:http://sourceforge.net/projects/linuxisns/)。此项目的电子邮件列表可在 http://sourceforge.net/mailarchive/forum.php?forum_name=linuxisns-discussion 中找到。

有关 iSNS 的一般信息,请参见 RFC 4171: Internet Storage Name Service(RFC 4171:因特网储存设备名称服务,网址:http://www.ietf.org/rfc/rfc4171)。

14 经由 IP 网络的大容量储存:iSCSI

提供充足的磁盘容量是计算机中心或支持服务器的任何站点的主要任务之一。通常为此目的使用光纤通道。iSCSI(因特网 SCSI)解决方案提供了光纤通道的低成本备用方案,可以充分利用商品服务器和以太网联网设备。Linux iSCSI 提供 iSCSI 发起端和 iSCSI LIO 目标软件,用于将 Linux 服务器连接到中心储存系统。

使用 iSNS 服务器的 iSCSI SAN
图 14.1︰ 使用 iSNS 服务器的 iSCSI SAN
注意
注意:LIO

LIO (http://linux-iscsi.org) 是 Linux 适用的标准开源多协议 SCSI 目标。LIO 以 Linux 内核 2.6.38 及更高版本替代 STGT(SCSI 目标)框架成为 Linux 中的标准统一储存目标。在 SUSE Linux Enterprise Server 12 中,iSCSI LIO 目标服务器替换了先前版本中的 iSCSI 目标服务器。

iSCSI 是一种储存联网协议,可简化在块储存设备和服务器之间通过 TCP/IP 网络进行的 SCSI 包数据传输。iSCSI 目标软件在目标服务器上运行,并将逻辑单元定义为 iSCSI 目标设备。iSCSI 发起端软件在不同服务器上运行并连接到目标设备,以使此服务器上的储存设备可用。

iSCSI LIO 目标服务器与 iSCSI 发起端服务器之间通过在 LAN 的 IP 级别上发送 SCSI 包来进行通讯。当在发起端服务器上运行的应用程序启动针对 iSCSI LIO 目标设备的查询时,操作系统会生成必要的 SCSI 命令。然后,SCSI 命令会嵌入到 IP 包中并在需要时由软件进行加密,此软件通常为 iSCSI 发起端。包经由内部 IP 网络传输到相应的 iSCSI 远程站,该站称为 iSCSI LIO 目标服务器(简称为 iSCSI 目标)。

许多储存解决方案允许通过 iSCSI 进行访问,但是也可以运行提供 iSCSI 目标的 Linux 服务器。在此情况下,对已针对文件系统服务优化过的 Linux 服务器进行设置是很重要的。iSCSI 目标会访问 Linux 中的块设备。因此,可以使用 RAID 解决方案增加磁盘空间及大量内存,从而改进数据超速缓存。有关 RAID 的更多信息,请参见第 7 章 “软件 RAID 配置

14.1 安装 iSCSI LIO 目标服务器和 iSCSI 发起端

系统会默认安装 iSCSI 发起端(包 open-iscsiyast2-iscsi-client),iSCSI LIO 目标包则需要手动安装。

重要
重要:发起端和目标不能在同一台服务器上运行

不支持在生产环境中的同一服务器上运行 iSCSI 目标软件和 iSCSI 发起端软件。

要安装 iSCSI LIO 目标服务器,请在终端控制台中运行以下命令︰

sudo zypper in yast2-iscsi-lio-server

如果您需要安装 iSCSI 发起端或任何依赖项,请运行命令 sudo zypper in yast2-iscsi-client

也可以使用 YaST 软件管理模块来进行安装。

除了上述包之外,任何额外需要的包将由安装程序自动提取,或者在您第一次运行相应的 YaST 模块时安装。

14.2 设置 iSCSI LIO 目标服务器

本章说明如何使用 YaST 配置 iSCSI LIO 目标服务器以及如何设置 iSCSI LIO 目标设备。您可以使用任何 iSCSI 发起端访问目标设备。

14.2.1 iSCSI LIO 目标服务启动和防火墙设置

iSCSI LIO 目标服务默认配置为手动启动。您可以将该服务配置为在引导时自动启动。如果服务器上使用防火墙,并且您想让 iSCSI LIO 目标对其他计算机可用,则必须为想要用于目标访问的每一个适配器打开防火墙中的端口。TCP 端口 3260 是 IANA(因特网号码分配机构)所定义的 iSCSI 协议的端口号。

  1. 启动 YaST,然后起动网络服务 ›  iSCSI LIO 目标

  2. 切换到服务选项卡。

    Image
  3. 服务启动下,指定 iSCSI LIO 目标服务的启动方式:

    • 引导时:: 服务器重启动时自动启动服务。

    • 手动:: (默认)服务器重启动之后,您必须运行 sudo systemctl start target 命令来手动启动该服务。只有启动服务后才可以使用目标设备。

  4. 如果在服务器上使用防火墙,并且希望 iSCSI LIO 目标对其他计算机可用,请为要用于目标访问的每个适配器接口打开防火墙中的端口 3260。如果端口对于所有网络接口均为关闭,则其他计算机将无法使用 iSCSI LIO 目标。

    如果您未在服务器上使用防火墙,则防火墙设置会被禁用。在此情况下,请跳过下面的步骤,并单击完成离开配置对话框,或切换到另一个选项卡继续配置。

    1. 服务选项卡上,选中打开防火墙中的端口复选框,以启用防火墙设置。

    2. 单击防火墙细节,查看或配置要使用的网络接口。列出所有可用的网络接口,并且默认全部选中。取消选择应打开的端口上的所有接口。单击确定保存您的设置。

  5. 单击完成,以保存和应用 iSCSI LIO 目标服务设置。

14.2.2 配置 iSCSI LIO 目标和发起端发现的身份验证

iSCSI LIO 目标服务器软件支持 PPP-CHAP(点对点协议-质询握手身份验证协议),该协议是 Internet 工程任务组 (IETF) RFC 1994 (http://www.ietf.org/rfc/rfc1994.txt) 中定义的一种三向身份验证方法。服务器使用此身份验证方法来发现 iSCSI LIO 目标与发起端,并不用于访问目标上的文件。如果不希望限制对发现的访问,则使用无身份验证不进行发现身份验证选项默认处于启用状态。不需要经过身份验证,此服务器上的所有 iSCSI LIO 目标都可由同一网络上的任何 iSCSI 发起端发现。

如果是为了更为安全的配置而需要身份验证,则可以使用传入身份验证、传出身份验证,或二者皆使用。按发起端进行身份验证要求 iSCSI 发起端证明它有权针对 iSCSI LIO 目标运行发现。发起端必须提供传入用户名和口令。按目标进行身份验证要求 iSCSI LIO 目标向发起端证明它是预期的目标。iSCSI LIO 目标必须向 iSCSI 发起端提供传出用户名和口令。用于传入和传出发现的口令必须不同。如果启用发现身份验证,则其设置将应用到所有 iSCSI LIO 目标组。

重要
重要:安全性

为安全起见,建议您对生产环境中的目标与发起端发现使用身份验证。

配置 iSCSI LIO 目标的身份验证自选设置:

  1. 启动 YaST,然后起动网络服务 ›  iSCSI LIO 目标

  2. 切换到全局选项卡。

    Image
  3. 身份验证默认处于禁用状态(不进行发现身份验证)。要启用身份验证,请选择按发起端进行身份验证和/或传出身份验证

  4. 提供所选身份验证方法的身份凭证。传入和传出发现的用户名和口令对必须不同。

  5. 单击完成保存并应用设置。

14.2.3 准备储存空间

在为 iSCSI 目标服务器配置 LUN 之前,必须准备好要使用的储存空间。可以将整个未格式化的块设备用作单个 LUN,也可以将一台设备划分为数个未格式化的分区,并将每个分区用作单独的 LUN。iSCSI 目标配置会将 LUN 导出到 iSCSI 发起端。

您可以使用 YaST 中的分区程序或命令行来设置分区。有关细节,请参见Book “部署指南”, Chapter 12 “高级磁盘设置”, Section 12.1 “使用 YaST 分区程序”。iSCSI LIO 目标可将未格式化的分区用于 Linux、Linux LVM 或 Linux RAID 文件系统 ID。

重要
重要:不要装入 iSCSI 目标设备

设置完用作 iSCSI 目标的设备或分区后,切勿通过其本地路径直接对其进行访问。不要在目标服务器上装入分区。

14.2.3.1 在虚拟环境中对设备分区

您可以将虚拟机 guest 服务器作为 iSCSI LIO 目标服务器使用。本节说明如何给 Xen 虚拟机指派分区。您还可以使用 SUSE Linux Enterprise Server 支持的其他虚拟环境。

在 Xen 虚拟环境中,必须将要用于 iSCSI LIO 目标设备的储存空间指派给 guest 虚拟机,然后作为 guest 环境中的虚拟磁盘访问该空间。每个虚拟磁盘都可以是一个物理块设备,如整个磁盘、分区或卷,或者可以是一个基于文件的磁盘映像,其中虚拟磁盘是 Xen 主机服务器上较大物理磁盘上的单个映像文件。为了获得最佳性能,请从物理磁盘或分区创建每个虚拟磁盘。为 guest 虚拟机设置完虚拟磁盘后,请启动 guest 服务器,然后按照物理服务器所用的同一过程将新的空虚拟磁盘配置为 iSCSI 目标设备。

在 Xen 主机服务器上创建基于文件的磁盘映像,然后将其指派给 Xen guest 服务器。默认情况下,Xen 将基于文件的磁盘映像储存在 /var/lib/xen/images/VM_NAME 目录中,其中 VM_NAME 是虚拟机的名称。

14.2.4 设置 iSCSI LIO 目标组

您可以使用 YaST 配置 iSCSI LIO 目标设备。YaST 使用 lio-utils 软件提供的 API。iSCSI LIO 目标可将未格式化的分区用于 Linux、Linux LVM 或 Linux RAID 文件系统 ID。

重要
重要:分区

开始之前,请按照第 14.2.3 节 “准备储存空间”中所述创建想要用作 iSCSI LIO 目标的未格式化分区。

  1. 启动 YaST,然后起动网络服务 ›  iSCSI LIO 目标

  2. 切换到目标选项卡。

    Image
  3. 单击添加,然后定义新的 iSCSI LIO 目标组以及设备:

    iSCSI LIO 目标软件将自动填写 目标标识符门户组IP 地址以及端口号字段。默认会选择使用身份验证

    1. 如果您有多个网络接口,请使用 IP 地址下拉框选择要用于此目标组的网络接口的 IP 地址。要使服务器在所有地址下都可访问,请选择绑定所有 IP 地址

    2. 如果您不想对此目标组进行发起端身份验证,请取消选择使用身份验证(不建议此做法)。

    3. 单击添加。输入设备或分区的路径,或单击浏览添加该路径。也可以指定名称,然后单击确定。系统将自动生成 LUN 号(从 0 开始)。如果将该字段保留为空,则会自动生成名称。

    4. (可选)重复前面的步骤将更多目标添加至此目标组。

    5. 将所有所需的目标添加到该组后,单击下一步

  4. 修改 iSCSI 目标发起端设置页面上,配置允许访问目标组中 LUN 的发起端的信息:

    Image

    在为目标组指定了至少一个发起端后,编辑 LUN编辑身份验证删除复制按钮才会启用。您可以使用添加复制来为目标组添加更多发起端:

    修改 iSCSI 目标︰选项
    • 添加:: 为选中的 iSCSI LIO 目标组添加新的发起端项。

    • 编辑 LUN:: 配置将 iSCSI LIO 目标组中的哪些 LUN 映射到选定发起端。您可以将分配的每一个目标都映射到某个首选的发起端。

    • 编辑身份验证:: 为选定发起端配置首选身份验证方法。您可以指定无身份验证,也可以配置传入身份验证、传出身份验证或二者皆配置。

    • 删除:: 将选定发起端项从分配给目标组的发起端列表中去除。

    • 复制:: 添加具有与选定发起端项相同 LUN 映射和身份验证设置的新发起端项。如此,您便可以轻松地将相同的共享 LUN 逐一分配给群集中的每一个节点。

    1. 单击添加,指定发起端名称,选中或取消选中从 TPG 中导入 LUN 复选框,然后单击确定保存设置。

    2. 选择发起端项,单击编辑 LUN,修改 LUN 映射,以指定将 iSCSI LIO 目标组中的哪些 LUN 分配给选定发起端,然后单击确定保存更改。

      如果 iSCSI LIO 目标组由多个 LUN 组成,您可以将一个或多个 LUN 分配给选定发起端。默认情况下,会将该组中的每个可用 LUN 都指派给某个发起端 LUN。

      要修改 LUN 分配,请完成以下一项或多项操作:

      • 添加:: 单击添加创建新的发起端 LUN 项,然后使用更改下拉框将一个目标 LUN 映射到该项。

      • 删除:: 选择发起端 LUN 项,然后单击删除去除目标 LUN 映射。

      • 更改:: 选择发起端 LUN 项,然后使用更改下拉框选择要与之映射的目标 LUN。

      典型的分配计划包括:

      • 单个服务器列为一个发起端。将目标组中的所有 LUN 分配给它。

        您可以使用此分组策略,为指定服务器逻辑分组 iSCSI SAN 储存。

      • 多个独立服务器列为多个发起端。将一个或多个目标 LUN 分配给每一个服务器。将每个 LUN 只分配给一个服务器。

        您可以使用此分组策略,为数据中心中的指定部门或服务类别逻辑分组 iSCSI SAN 储存。

      • 群集的每个节点列为一个发起端。将所有共享的目标 LUN 分配给每一个节点。所有节点都将连接到设备,但对于大多数文件系统,群集软件会锁定设备不让它们访问,并且一次只在一个节点上装入该设备。共享的文件系统(例如 OCFS2)可让多个节点同时装入相同的文件结构,并以读写访问权打开相同文件。

        您可以使用此分组策略,为指定服务器群集逻辑分组 iSCSI SAN 储存。

    3. 选择发起端项,单击编辑身份验证,指定发起端的身份验证设置,然后单击确定保存设置。

      您可以要求不进行发现身份验证,也可以配置按发起端进行身份验证和/或传出身份验证。您仅可为每个发起端指定一对用户名和口令。对于发起端的传入和传出身份验证,身份凭证可以有所不同。每个发起端的身份凭证均可不同。

    4. 对每个可以访问此目标组的 iSCSI 发起端重复上述步骤。

    5. 配置完发起端指派后,单击下一步

  5. 单击完成保存并应用设置。

14.2.5 修改 iSCSI LIO 目标组

您可以按照如下方式修改现有 iSCSI LIO 目标组:

  • 在目标组中添加或删除目标 LUN 设备

  • 为目标组添加或去除发起端

  • 为目标组的发起端修改发起端 LUN 到目标 LUN 的映射

  • 修改发起端身份验证(传入、传出或二者)的用户名和口令身份凭证。

查看或修改 iSCSI LIO 目标组的设置:

  1. 启动 YaST,然后起动网络服务 ›  iSCSI LIO 目标

  2. 切换到目标选项卡。

  3. 选择要修改的 iSCSI LIO 目标组,然后单击编辑

  4. 在“修改 iSCSI 目标 LUN 设置”页面上,将 LUN 添加到目标组,编辑 LUN 指派或从组中删除目标 LUN。在对组完成所有想要的更改后,单击下一步

    有关选项信息,请参见修改 iSCSI 目标︰选项

  5. 在“修改 iSCSI 目标发起端设置”页面上,配置允许访问目标组中 LUN 的发起端的信息。在对组完成所有想要的更改后,单击下一步

  6. 单击完成保存并应用设置。

14.2.6 删除 iSCSI LIO 目标组

删除 iSCSI LIO 目标组会去除组的定义以及发起端的相关设置,包括 LUN 映射和身份验证凭证。该操作不会销毁分区上的数据。要再次赋予发起端访问权限,您可以将目标 LUN 分配给不同的或新的目标组,并为其配置发起端访问权限。

  1. 启动 YaST,然后起动网络服务 ›  iSCSI LIO 目标

  2. 切换到目标选项卡。

  3. 选择要删除的 iSCSI LIO 目标组,然后单击删除

  4. 系统提示时,单击继续确认删除,或单击取消予以取消。

  5. 单击完成保存并应用设置。

14.3 配置 iSCSI 发起端

iSCSI 发起端可用于连接到任意 iSCSI 目标。连接不限于第 14.2 节 “设置 iSCSI LIO 目标服务器”说明的 iSCSI 目标解决方案。iSCSI 发起端配置包括两个主要步骤 - 发现可用 iSCSI 目标和设置 iSCSI 会话。这两个步骤都可通过 YaST 完成。

14.3.1 使用 YaST 执行 iSCSI 发起端配置

在 YaST 中,“iSCSI 发起端概述”包括三个选项卡:

服务:

可使用服务选项卡来在引导时启用 iSCSI 发起端。它还允许设置唯一的发起端名称和 iSNS 服务器以用于发现。

已连接目标:

已连接目标选项卡概述了当前已连接的 iSCSI 目标。与已发现目标选项卡类似,它还提供用于向系统添加新目标的选项。

已发现目标:

已发现目标选项卡使您能够手动发现网络中的 iSCSI 目标。

14.3.1.1 配置 iSCSI 发起端

  1. 启动 YaST,然后起动网络服务 ›  iSCSI 发起端

  2. 切换到服务选项卡。

    Image
  3. 启动服务下,指定 iSCSI 发起端服务的启动方式︰

    • 引导时:: 服务器重启动时自动启动服务。

    • 手动:: (默认)服务器重启动之后,您必须运行 sudo systemctl start iscsi iscsid 命令来手动启动该服务。

  4. 指定或校验发起端名称

    为此服务器上的 iSCSI 发起端指定格式正确的 iSCSI 限定名称 (IQN)。此发起端名称在网络上必须具有全局唯一性。IQN 使用以下常规格式:

    iqn.yyyy-mm.com.mycompany:n1:n2

    其中,n1 和 n2 是字母数字字符。例如:

    iqn.1996-04.de.suse:01:a5dfcea717a

    发起端名称将用服务器上文件 /etc/iscsi/initiatorname.iscsi 中的相应值自动填充。

    如果服务器提供 iBFT (iSCSI Boot Firmware Table) 支持,则发起端名称将用 IBFT 中的相应值填充,并且您不能在此界面中更改发起端名称。不过,您可以使用 BIOS 设置来进行修改。iBFT 是指包含各种对 iSCSI 引导进程有用的参数的信息块,包括针对服务器的 iSCSI 目标与发起端描述。

  5. 使用以下方法之一发现网络上的 iSCSI 目标。

14.3.1.2 使用 iSNS 发现 iSCSI 目标

必须在环境中已安装并配置 iSNS 服务器后,才能使用此选项。有关信息,请参见第 13 章 “iSNS for Linux

  1. 在 YaST 中,选择 iSCSI 发起端,然后选择服务选项卡。

  2. 指定 iSNS 服务器的 IP 地址和端口。默认端口为 3205。

  3. 单击确定保存并应用更改。

14.3.1.3 手动发现 iSCSI 目标

对要从已设置 iSCSI 发起端的服务器访问的每个 iSCSI 目标服务器重复以下过程。

  1. 在 YaST 中,选择 iSCSI 发起端,然后选择已发现目标选项卡。

  2. 单击发现打开 iSCSI 发起端发现对话框。

  3. 输入 IP 地址并根据需要更改端口。默认端口为 3260。

  4. 如果要求进行身份验证,请取消选择不进行发现身份验证,然后为按发起端进行身份验证按目标进行身份验证指定身份凭证。

  5. 单击下一步启动发现并连接到 iSCSI 目标服务器。

  6. 如果要求提供身份凭证,在成功发现后,请使用连接激活目标。

    系统会提示您输入身份验证凭证以使用所选 iSCSI 目标。

  7. 单击下一步完成配置。

    该目标会立即出现在已连接目标中,现在便可使用虚拟 iSCSI 设备了。

  8. 单击确定保存并应用更改。

  9. 您可以使用 lsscsi 命令查找 iSCSI 目标设备的本地设备路径。

14.3.1.4 为 iSCSI 目标设备设置启动自选设置

  1. 在 YaST 中,选择 iSCSI 发起端,然后选择已连接目标选项卡以查看当前连接到服务器的 iSCSI 目标设备的列表。

  2. 选择要管理的 iSCSI 目标设备。

  3. 单击切换启动修改设置:

    自动:: 此选项用于 iSCSI 服务本身启动时要连接的 iSCSI 目标。这是典型配置。

    引导时:: 此选项用于引导期间要连接的 iSCSI 目标;即,当根目录 (/) 位于 iSCSI 上时。这样,iSCSI 目标设备在服务器引导时将从 initrd 进行评估。在无法从 iSCSI 引导的平台(例如 IBM Z)上会忽略此选项。因此,在这些平台上不应使用该选项,而应使用自动

  4. 单击确定保存并应用更改。

14.3.2 手动设置 iSCSI 发起端

发现和配置 iSCSI 连接都要求 iscsid 正在运行。首次运行发现时,将在 /etc/iscsi/ 目录中创建 iSCSI 发起端的内部数据库。

如果发现受口令保护,则向 iscsid 提供身份验证信息。由于首次执行发现时内部数据库并不存在,因此此时无法使用内部数据库。相反,必须编辑配置文件 /etc/iscsid.conf 以提供信息。要为发现添加口令信息,请在 /etc/iscsid.conf 末尾添加以下行:

discovery.sendtargets.auth.authmethod = CHAP
discovery.sendtargets.auth.username = USERNAME
discovery.sendtargets.auth.password = PASSWORD

发现会将所有接收到的值储存在一个内部持久数据库中。此外,它会显示所有检测到的目标。使用以下命令运行此发现:

sudo iscsiadm -m discovery --type=st --portal=TARGET_IP

输出如下所示:

10.44.171.99:3260,1 iqn.2006-02.com.example.iserv:systems

要发现 iSNS 服务器上的可用目标,请使用以下命令︰

sudo iscsiadm --mode discovery --type isns --portal TARGET_IP

对于 iSCSI 目标上定义的每个目标,将显示一行。有关储存数据的更多信息,请参见第 14.3.3 节 “iSCSI 发起端数据库”

iscsiadm 的特殊 --login 选项会创建所有需要的设备:

sudo iscsiadm -m node -n iqn.2006-02.com.example.iserv:systems --login

新生成的设备会显示在 lsscsi 的输出中,现在便可装入该设备。

14.3.3 iSCSI 发起端数据库

iSCSI 发起端发现的所有信息都储存在位于 /etc/iscsi 中的两个数据库文件中。一个数据库用于发现的目标,另一个数据库用于发现的节点。访问数据库时,首先必须选择是希望从发现获取数据还是从节点数据库获取数据。可使用 iscsiadm 的参数 -m discovery-m node 来执行此操作。使用 iscsiadm 搭配其中一个参数,可提供储存记录的概述:

tux > sudo iscsiadm -m discovery
10.44.171.99:3260,1 iqn.2006-02.com.example.iserv:systems

本示例中的目标名称为 iqn.2006-02.com.example.iserv:systems。与此特殊数据集相关的所有操作都需要此名称。要检查 ID 为 iqn.2006-02.com.example.iserv:systems 数据记录的内容,可使用以下命令:

tux > sudo iscsiadm -m node --targetname iqn.2006-02.com.example.iserv:systems
node.name = iqn.2006-02.com.example.iserv:systems
node.transport_name = tcp
node.tpgt = 1
node.active_conn = 1
node.startup = manual
node.session.initial_cmdsn = 0
node.session.reopen_max = 32
node.session.auth.authmethod = CHAP
node.session.auth.username = joe
node.session.auth.password = ********
node.session.auth.username_in = EMPTY
node.session.auth.password_in = EMPTY
node.session.timeo.replacement_timeout = 0
node.session.err_timeo.abort_timeout = 10
node.session.err_timeo.reset_timeout = 30
node.session.iscsi.InitialR2T = No
node.session.iscsi.ImmediateData = Yes
....

要编辑这些变量的值,可将 iscsiadm更新操作一起使用。例如,如果希望 iscsid 在初始化时登录 iSCSI 目标,则将变量 node.startup 的值设置为 automatic

sudo iscsiadm -m node -n iqn.2006-02.com.example.iserv:systems \
-p ip:port --op=update --name=node.startup --value=automatic

使用 delete 操作删除过时的数据集。如果目标 iqn.2006-02.com.example.iserv:systems 不再是有效的记录,请使用以下命令予以删除︰

sudo iscsiadm -m node -n iqn.2006-02.com.example.iserv:systems \
-p ip:port --op=delete
重要
重要:不确认

使用此选项时应谨慎,因为它会删除该记录而无任何附加确认提示。

要获取所有已发现目标的列表,请运行 sudo iscsiadm -m node 命令。

14.4 安装时使用 iSCSI 磁盘

使用支持 iSCSI 的固件时,支持从 AMD64/Intel 64 和 IBM POWER 体系结构上的 iSCSI 磁盘引导。

要在安装过程中使用 iSCSI 磁盘,必须将以下参数添加到引导选项行:

withiscsi=1

安装过程中会额外显示一个屏幕,让您可以将 iSCSI 磁盘连接到系统,并在安装过程中加以使用。

注意
注意:安装点支持

引导期间,iSCSI 设备将异步显示。虽然 initrd 可确保为根文件系统正确设置这些设备,但对于任何其他文件系统或安装点(例如 /usr),并无此类保证。因此,任何系统安装点(例如 /usr/var)都不受支持。要使用这些设备,请确保正确同步相应的服务和设备。

14.5 iSCSI 查错

本节介绍一些已知问题和针对 iSCSI 目标及 iSCSI 发起端问题的可行的解决方案。

14.5.1 在 iSCSI LIO 目标服务器上设置目标 LUN 时发生门户错误

添加或编辑 iSCSI LIO 目标组时发生错误:

Problem setting network portal IP_ADDRESS:3260

/var/log/YasT2/y2log 日志文件包含以下错误:

find: `/sys/kernel/config/target/iscsi': No such file or directory

若 iSCSI LIO 目标服务器软件当前未运行则会发生此问题。要解决此问题,请退出 YaST,并在命令行中使用 systemctl start target 命令手动启动 iSCSI LIO,然后重试。

您也可以输入以下内容来检查 configfsiscsi_target_modtarget_core_mod 是否载入。随即显示响应示例。

tux > sudo lsmod | grep iscsi
iscsi_target_mod      295015  0
target_core_mod       346745  4
iscsi_target_mod,target_core_pscsi,target_core_iblock,target_core_file
configfs               35817  3 iscsi_target_mod,target_core_mod
scsi_mod              231620  16
iscsi_target_mod,target_core_pscsi,target_core_mod,sg,sr_mod,mptctl,sd_mod,
scsi_dh_rdac,scsi_dh_emc,scsi_dh_alua,scsi_dh_hp_sw,scsi_dh,libata,mptspi,
mptscsih,scsi_transport_spi

14.5.2 iSCSI LIO 目标在其他计算机上不可见

如果目标服务器上使用防火墙,则必须打开要使用的 iSCSI 端口,以允许其他计算机看到 iSCSI LIO 目标。有关信息,请参见第 14.2.1 节 “iSCSI LIO 目标服务启动和防火墙设置”

14.5.3 丢弃 iSCSI 通讯的数据包

如果防火墙很忙,可能会丢弃包。SUSE 防火墙默认为三分钟后丢弃包。如果您发现防火墙正在丢弃 iSCSI 通讯包,可以考虑将 SUSE 防火墙配置为对包排队,而不是太忙时丢弃包。

14.5.4 将 iSCSI 卷用于 LVM

在 iSCSI 目标上使用 LVM 时,请使用本部分的查错提示。

14.5.4.1 检查在引导时是否执行 iSCSI 发起端发现

设置 iSCSI 发起端时,确保引导时启用发现,以便 udev 在引导时可以发现 iSCSI 设备,并设置可供 LVM 使用的设备。

14.5.4.2 检查 iSCSI 目标在引导时能否被发现

请记住,udev 会为设备提供默认设置。确保创建设备的所有应用程序均已在引导时启动,以便 udev 在系统启动时能为这些应用程序识别出并指派设备。如果应用程序或服务在稍后才启动,则 udev 不会像在引导时那样自动创建设备。

14.5.5 配置文件设置为手动时,会装入 iSCSI 目标

如果您之前手动修改了 /etc/iscsi/iscsid.conf 配置文件,那么,即使在该文件中将 node.startup 选项设置为手动,Open-iSCSI 启动时也会装入目标。

检查 /etc/iscsi/nodes/TARGET_NAME/IP_ADDRESS,PORT/default 文件。它包含覆盖 /etc/iscsi/iscsid.conf 文件的 node.startup 设置。如果使用 YaST 接口将装入选项设置为手动,同时会在 /etc/iscsi/nodes/TARGET_NAME/IP_ADDRESS,PORT/default 文件中设置 node.startup = manual

14.6 iSCSI LIO 目标术语

后备储存

提供 iSCSI 端点底层的实际储存的物理储存对象。

CDB(命令描述符块))

SCSI 命令的标准格式。CDB 通常长度为 6、10 或 12 个字节,但也可以达到 16 个字节或具有可变长度。

CHAP (Challenge Handshake Authentication Protocol)

点对点协议 (PPP) 身份验证方法用于向另一台计算机确认一台计算机的身份。链路控制协议 (LCP) 连接两台计算机并协商 CHAP 方法后,身份验证者会向对等体发送随机询问。然后该对等体会根据询问以及密钥发出以哈希加密的应答。再由身份验证者比照由预期哈希值自己计算出的结果对该哈希应答进行验证,以决定是确认身份验证还是中断连接。CHAP 在 RFC 1994 中定义。

CID(连接标识符)

由发起端生成的 16 位编号,用于唯一识别两个 iSCSI 设备之间的连接。登录阶段会显示此编号。

端点

iSCSI 目标名称与 iSCSI TPG(IQN + 标记)的组合。

EUI(扩展的唯一标识符)

在全球范围内唯一标识每个设备的 64 位编号。其格式由指定公司的唯一的 24 位编号和由该公司分配给所构建的每个设备的 40 位编号组成。

发起端

SCSI 会话的发起端。通常是计算机等控制设备。

IPS(因特网协议储存)

使用 IP 协议在储存网络中移动数据的一类协议或设备。FCIP(基于 IP 的光纤通道)、iFCP(因特网光纤通道协议)以及 iSCSI(因特网 SCSI)都属于 IPS 协议。

IQN(iSCSI 限定的名称)

在全球范围内唯一标识每个设备的 iSCSI 的名称格式(例如:iqn.5886.com.acme.tapedrive.sn‐a12345678)。

ISID(发起端会话标识符)

由发起端生成的一个 48 位编号,用于唯一识别发起端与目标之间的会话。此值在登录过程中创建,生成后将与登录 PDU 一起发送给目标。

MCS(每个会话多重连接)

它是 iSCSI 规范的组成部分,允许发起端与目标之间存在多个 TCP/IP 连接。

MPIO(多路径 I/O)

一种可在服务器和储存设备之间建立多个冗余数据路径的方法。

网络门户

iSCSI 端点与 IP 地址及 TCP(传输控制协议)端口的组合。TCP 端口 3260 是 IANA(因特网号码分配机构)所定义的 iSCSI 协议的端口号。

SAM(SCSI 体系结构模型)

以一般术语说明 SCSI 行为的文档。它支持不同类型的设备通过各种介质进行通讯。

目标

SCSI 会话的接收端,通常是磁盘驱动器、磁带驱动器或扫描仪等设备。

目标组 (TG)

在创建视图时视为同等对待的 SCSI 目标端口的列表。创建视图可帮助简化 LUN(逻辑单元号)映射。每个视图项指定一个目标组、主机组以及一个 LUN。

目标端口

一个 iSCSI 端点与一个或多个 LUN 的组合。

目标端口组 (TPG)

IP 地址和 TCP 端口号的列表,用于确定特定 iSCSI 目标将要侦听的接口。

目标会话标识符 (TSID)

由目标生成的 16 位编号,用于唯一标识发起端和目标之间的会话。此值在登录过程中创建,生成后将与登录响应 PDU(协议数据单元)一起发送给发起端。

14.7 其他信息

iSCSI 协议已面世多年。有许多评论将 iSCSI 与 SAN 解决方案作比较、评测性能,此外还有一份文档说明硬件解决方案。有关 open-iscsi 的更多信息,请参见以下重要页面:

还有一些联机文档。请参见 iscsiadmiscsidietd.confietd 的手册页,以及示例配置文件 /etc/iscsid.conf

15 以太网光纤通道储存:FCoE

许多企业数据中心的 LAN 和数据流量都依赖于以太网,而其储存基础设施则依赖于光纤通道网络。开放以太网光纤通道 (FCoE) 发起端软件允许配有以太网适配器的服务器经由以太网网络连接光纤通道储存子系统。而在以前,只允许配有光纤通道适配器的系统经由光纤通道架构进行连接。FCoE 技术通过支持网络融合降低了数据中心的复杂度。这有助于保护您在光纤通道储存基础设施方面的现有投资,并简化网络管理。

开放以太网 SAN 光纤通道
图 15.1︰ 开放以太网 SAN 光纤通道

Open-FCoE 可让您在主机上而不是主机总线适配器上的专有硬件上运行光纤通道协议。它专用于 10 Gbps(每秒千兆位)以太网适配器,但也可用于任何支持暂停帧的以太网适配器。发起端软件提供光纤通道协议处理模块以及基于以太网的传输模块。Open-FCoE 模块充当 SCSI 的低级驱动程序。Open-FCoE 传输使用 net_device 发送和接收包。数据中心桥接 (DCB) 驱动程序提供 FCoE 的服务质量。

FCoE 是一种封装协议,它可以通过以太网连接移动光纤通道协议流量而无需更改光纤通道数据帧。如此一来,您的网络安全和流量管理基础设施就可以像使用光纤通道一样使用 FCoE。

如果存在下列情况,您可以选择在您的企业中部署 FCoE:

  • 贵企业已有光纤通道储存子系统,并拥有具备光纤通道技能和知识的管理员。

  • 您的网络中部署的是 10 Gbps 以太网。

本章说明如何在您的网络中设置 FCoE。

15.1 安装过程中配置 FCoE 接口

如果在交换器上为服务器与光纤通道储存基础结构之间的连接启用了 FCoE,则可以通过适用于 SUSE Linux Enterprise Server 的 YaST 来在操作系统安装期间设置 FCoE 磁盘。有些类型的系统 BIOS 能够自动检测到 FCoE 磁盘,并向 YaST 安装软件报告该磁盘。但不是所有类型的 BIOS 都支持 FCoE 磁盘自动检测。在此情况下若要启用自动检测,您可以在开始安装时将 withfcoe 选项添加到内核命令行:

withfcoe=1

当检测到 FCoE 磁盘时,YaST 安装便会在当时提供配置 FCoE 实例的选项。在“磁盘激活”页面上,选择配置 FCoE 接口,以访问 FCoE 配置。有关配置 FCoE 接口的信息,请参见第 15.3 节 “使用 YaST 管理 FCoE 服务”

Image
注意
注意:安装点支持

引导期间,FCoE 设备将异步显示。虽然 initrd 可确保为根文件系统正确设置这些设备,但对于任何其他文件系统或安装点(例如 /usr),并无此类保证。因此,任何系统安装点(例如 /usr/var)都不受支持。要使用这些设备,请确保正确同步相应的服务和设备。

15.2 安装 FCoE 和 YaST FCoE 客户端

您可以通过在交换机上为服务器的连接启用 FCoE,来于储存基础设施中设置 FCoE 磁盘。如果在安装 SUSE Linux Enterprise Server 操作系统时 FCoE 磁盘可用,系统会在那时自动安装 FCoE 发起端软件。

如果 FCoE 发起端软件和 YaST FCoE 客户端软件均未安装,请使用下列程序通过下面的命令手动安装它们:

sudo zypper in yast2-fcoe-client fcoe-utils

也可以使用 YaST 软件管理器来安装以上所列包。

15.3 使用 YaST 管理 FCoE 服务

您可以使用“YaST FCoE 客户端配置”选项为光纤通道储存基础设施中的 FCoE 磁盘创建、配置和删除 FCoE 接口。若要使用此选项,必须安装并运行 FCoE 发起端服务(fcoemon 守护程序)和“链路层发现协议”代理守护程序 (llpad),并且必须在支持 FCoE 的交换器上启用 FCoE 连接。

  1. 起动 YaST 并选择网络服务 › FCoE 客户端配置

    Image
  2. 服务选项卡上,可按需要查看或修改 FCoE 服务和 Lldpad(链路层发现协议代理守护程序)服务启动时间。

    • FCoE 服务启动:: 指定是在服务器引导时启动以太网光纤通道服务 fcoemon 守护程序还是手动启动。该守护程序用于控制 FCoE 接口,并可与 llpad 守护程序创建连接。可用值为引导时(默认)或手动

    • Lldpad 服务启动:: 指定是在服务器引导时启动“链路层发现协议”代理 llpad 守护程序,还是手动启动该守护程序。llpad 守护程序会向 fcoemon 守护程序报告数据中心桥接功能和 FCoE 接口配置的相关信息。可用值为引导时(默认)或手动

    如果修改设置,则单击确定保存并应用更改。

  3. 接口选项卡上,可查看有关服务器上所有检测到的网络适配器的信息,包括有关 VLAN 和 FCoE 配置的信息。您也可以创建 FCoE VLAN 接口、更改现有 FCoE 接口的设置,或删除 FCoE 接口。

    Image

    请使用 FCoE VLAN 接口列来确定 FCoE 是否可用:

    接口名

    如果将 eth4.200 之类名称指派给接口,则 FCoE 在交换机上可用,并会为该适配器激活 FCoE 接口。

    未配置:

    如果状态为未配置,则表示在交换机上启用 FCoE 但尚未为适配器激活 FCoE 接口。选择适配器,然后单击创建 FCoE VLAN 接口,以在适配器上激活接口。

    不可用:

    如果状态为不可用,则表示因为没有在交换机上为该连接启用 FCoE,所以 FCoE 对适配器不可用。

  4. 若要设置未经设置的支持 FCoE 的适配器,予以选中,然后单击创建 FCoE VLAN 接口。对出现的问题请单击确认。

    该适配器现在会以某个接口名称列在 FCoE VLAN 接口列中。

  5. 若要更改已设置适配器的设置,请在列表中选择它,然后单击更改设置

    可设置下列选项:

    启用 FCoE

    启用或禁用为适配器创建 FCoE 实例。

    需要 DCB

    指定适配器是否需要数据中心桥接(通常会需要)。

    自动 VLAN

    指定 fcoemon 守护程序是否自动创建 VLAN 接口。

    如果修改设置,则单击下一步保存并应用更改。设置将写入 /etc/fcoe/cfg-ethX 文件。fcoemon 守护程序会在初始化时读取每个 FCoE 接口的配置文件。

  6. 若要去除已设置的接口,请从列表中选择它。单击删除接口,然后单击继续确认。FCoE 接口值将更改为未配置

  7. 配置选项卡上,可查看或修改 FCoE 系统服务的常规设置。您可以从 FCoE 服务脚本和 fcoemon 守护程序中启用或禁用调试讯息,并可指定是否将讯息发送至系统日志。

    Image
  8. 单击确定保存并应用更改。

15.4 使用命令配置 FCoE

  1. 打开一个终端控制台。

  2. 使用 YaST 配置以太网网络接口卡,例如 eth2

  3. 启动“链接层发现协议”代理守护程序 (llpad)。

    sudo systemctl start lldpad
  4. 在以太网适配器上启用数据中心桥接。

    tux > dcbtool sc eth2 dcb on
      Version:       2
      Command:       Set Config
      Feature:       DCB State
      Port:          eth2
      Status:        Successful
  5. 启用并设置数据中心桥接的优先级流量控制 (PFC) 设置。

    sudo dcbtool sc eth<x> pfc e:1 a:1 w:1

    自变量设置值为:

    e:<0|1>

    控制功能的启用。

    a:<0|1>

    控制是否通过数据中心桥接交换协议向对等体推广功能。

    w:<0|1>

    控制功能是否希望根据从对等体接收到的反馈来更改其操作配置。

  6. 启用数据中心桥接,以接受交换机的 FCoE 优先级设置。

    tux > sudo dcbtool sc eth2 app:fcoe e:1
      Version:       2
      Command:       Set Config
      Feature:       Application FCoE
      Port:          eth2
      Status:        Successful
  7. 将默认的 FCoE 配置文件复制到 /etc/fcoe/cfg-eth2

    sudo cp /etc/fcoe/cfg-ethx /etc/fcoe/cfg-eth2
  8. 启动 FCoE 发起端服务。

    systemctl start fcoe.service
  9. 将“链接层发现协议”代理守护程序 (llpad) 和 FCoE 发起端服务设置为引导时启动。

    systemctl enable llpad fcoe

15.5 使用 FCoE 管理工具管理 FCoE 实例

fcoeadm 实用程序是以太网光纤通道 (FCoE) 管理工具。可以使用该工具创建、销毁和重置指定网络接口上的 FCoE 实例。fcoeadm 实用程序通过套接字接口将命令发送给正在运行的 fcoemon 进程。有关 fcoemon 的相关信息,请参见 man 8 fcoemon

fcoeadm 实用程序可让您查询 FCoE 实例的以下相关信息:

  • 接口

  • 目标 LUN

  • 端口统计数字

fcoeadm 实用程序是 fcoe-utils 包的组成部分,该命令的一般语法如下所示:

fcoeadm
  [-c|--create] [<ethX>]
  [-d|--destroy] [<ethX>]
  [-r|--reset] [<ethX>]
  [-S|--Scan] [<ethX>]
  [-i|--interface] [<ethX>]
  [-t|--target] [<ethX>]
  [-l|--lun] [<ethX>]
  [-s|--stats <ethX>] [<interval>]
  [-v|--version]
  [-h|--help]

有关细节,请参见 man 8 fcoeadm

示例

fcoeadm -c eth2.101

在 eth2.101 上创建 FCoE 实例。

fcoeadm -d eth2.101

删除 eth2.101 上的 FCoE 实例。

fcoeadm -i eth3

显示接口 eth3 上所有 FCoE 实例的相关信息。如果未指定任何接口,则会显示所有已创建 FCoE 实例的接口的相关信息。下面的示例显示连接 eth0.201 的相关信息:

tux > sudo fcoeadm -i eth0.201
  Description:      82599EB 10-Gigabit SFI/SFP+ Network Connection
  Revision:         01
  Manufacturer:     Intel Corporation
  Serial Number:    001B219B258C
  Driver:           ixgbe 3.3.8-k2
  Number of Ports:  1

      Symbolic Name:     fcoe v0.1 over eth0.201
      OS Device Name:    host8
      Node Name:         0x1000001B219B258E
      Port Name:         0x2000001B219B258E
      FabricName:        0x2001000573D38141
      Speed:             10 Gbit
      Supported Speed:   10 Gbit
      MaxFrameSize:      2112
      FC-ID (Port ID):   0x790003
      State:             Online
fcoeadm -l eth3.101

显示在连接 eth3.101 上发现到的所有 LUN 的详细信息。如果未指定任何连接,则会显示在所有 FCoE 连接上发现到的所有 LUN 的相关信息。

fcoeadm -r eth2.101

重设置 eth2.101 上的 FCoE 实例。

fcoeadm -s eth3 3

以三秒的时间间隔显示具有 FCoE 实例的特定 eth 3 端口的统计信息。每隔一段时间会显示一行统计数字。若未指定时间间隔,则使用默认值一秒。

fcoeadm -t eth3

显示从具有 FCoE 实例的指定 eth3 端口发现到的所有目标的相关信息。每一个已发现目标后面列出了所有关联的 LUN。若未指定实例,则显示来自具有 FCoE 实例的所有端口的目标。下面的示例显示来自 eth0.201 连接的目标的相关信息:

tux > sudo fcoeadm -t eth0.201
  Interface:        eth0.201
  Roles:            FCP Target
  Node Name:        0x200000D0231B5C72
  Port Name:        0x210000D0231B5C72
  Target ID:        0
  MaxFrameSize:     2048
  OS Device Name:   rport-8:0-7
  FC-ID (Port ID):  0x79000C
  State:            Online

LUN ID  Device Name   Capacity   Block Size  Description
------  -----------  ----------  ----------  ----------------------------
    40  /dev/sdqi     792.84 GB      512     IFT DS S24F-R2840-4 (rev 386C)
    72  /dev/sdpk     650.00 GB      512     IFT DS S24F-R2840-4 (rev 386C)
   168  /dev/sdgy       1.30 TB      512     IFT DS S24F-R2840-4 (rev 386C)

15.6 其他信息

有关信息,请参见以下文档:

  • 有关 Open-FCoE 服务守护程序的信息,请参见 fcoemon(8) 手册页。

  • 有关 Open-FCoE 管理工具的信息,请参见 fcoeadm(8) 手册页。

  • 有关数据中心桥接配置工具的信息,请参见 dcbtool(8) 手册页。

  • 有关链路层发现协议代理守护程序的信息,请参见 lldpad(8) 手册页。

  • 有关一般信息,请参见 Open-FCoE 主页:http://www.open-fcoe.org/dokuwiki/start

16 NVMe over Fabric

本章介绍如何设置 NVMe over Fabric 主机和目标。

16.1 概述

NVM Express (NVMe) 是有关访问非易失性储存(通常是 SSD 磁盘)的接口标准。与 SATA 相比,NVMe 支持的速度要高得多,并且延迟更低。

NVMe over Fabric 是用于通过不同网络结构访问 NVMe 储存的体系结构。这些网络结构有 RDMA基于光纤通道的 NVMe (FC-NVMe) 等。NVMe over Fabric 的作用类似于 iSCSI。为提高容错能力,NVMe over Fabric 内置了多路径支持。

NVMe 主机是指连接到 NVMe 目标的计算机。NVMe 目标是指共享其 NVMe 块设备的计算机。

SUSE Linux Enterprise Server 12 SP5 支持 NVMe。提供了可用于 NVMe 块储存以及 NVMe over Fabric 目标和主机的内核模块。

要查看您的硬件是否有任何特殊注意事项,请参见第 16.4 节 “特殊硬件配置”

16.2 设置 NVMe over Fabric 主机

要使用 NVMe over Fabric,必须在目标上使用支持的联网方法。支持的方法包括基于光纤通道的 NVMe 和 RDMA。以下几节介绍如何将主机连接到 NVMe 目标。

16.2.1 安装命令行客户端

要使用 NVMe over Fabric,需要安装 nvme 命令行工具。请使用 zypper 安装该工具:

tux > sudo zypper in nvme-cli

使用 nvme --help 可列出所有可用的子命令。我们提供了 nvme 子命令的手册页。执行 man nvme-SUBCOMMAND 可查阅相关的手册页。例如,要查看 discover 子命令的手册页,请执行 man nvme-discover

16.2.2 发现 NVMe over Fabric 目标

要列出 NVMe over Fabric 目标上的可用 NVMe 子系统,您需要有发现控制器地址和服务 ID。

tux > sudo nvme discover -t TRANSPORT -a DISCOVERY_CONTROLLER_ADDRESS -s SERVICE_ID

TRANSPORT 替换为底层传输媒体:looprdmafc。将 DISCOVERY_CONTROLLER_ADDRESS 替换为发现控制器的地址。对于 RDMA,此地址应是 IPv4 地址。将 SERVICE_ID 替换为传输服务 ID。如果服务基于 IP(例如 RDMA),则服务 ID 指定端口号。对于光纤通道,不需要提供服务 ID。

NVMe 主机只会看到它们有权连接的子系统。

示例:

tux > sudo nvme discover -t rdma -a 10.0.0.1 -s 4420

有关更多细节,请参见 man nvme-discover

16.2.3 连接 NVMe over Fabric 目标

识别 NVMe 子系统后,便可以使用 nvme connect 命令来连接它。

tux > sudo nvme connect -t transport -a DISCOVERY_CONTROLLER_ADDRESS -s SERVICE_ID -n SUBSYSTTEM_NQN

TRANSPORT 替换为底层传输媒体:looprdmafc。将 DISCOVERY_CONTROLLER_ADDRESS 替换为发现控制器的地址。对于 RDMA,此地址应是 IPv4 地址。将 SERVICE_ID 替换为传输服务 ID。如果服务基于 IP(例如 RDMA),则此 ID 指定端口号。将 SUBSYSTEM_NQN 替换为发现命令找到的所需子系统的 NVMe 限定名称。NQNNVMe 限定名称 (NVMe Qualified Name) 的缩写。NQN 必须唯一。

示例:

tux > sudo nvme connect -t rdma -a 10.0.0.1 -s 4420 -n nqn.2014-08.com.example:nvme:nvm-subsystem-sn-d78432

或者,使用 nvme connect-all 连接到发现的所有名称空间。有关高级用法,请参见 man nvme-connectman nvme-connect-all

16.2.4 多路径

NVMe 本机多路径默认处于禁用状态。要打印多路径设备的布局,请使用命令 nvme list-subsys。要启用 NVMe 本机多路径,请将 nvme-core.multipath=on 添加为引导参数。

16.3 设置 NVMe over Fabric 目标

16.3.1 安装命令行客户端

要配置 NVMe over Fabric 目标,需要安装 nvmetcli 命令行工具。请使用 zypper 安装该工具:

tux > sudo zypper in nvmetcli

上提供了 nvmetclihttp://git.infradead.org/users/hch/nvmetcli.git/blob_plain/HEAD:/Documentation/nvmetcli.txt 的最新文档.

16.3.2 配置步骤

下面的过程举例说明如何设置 NVMe over Fabric 目标。

配置储存在树型结构中。使用 cd 命令可导航。使用 ls 可列出对象。您可以使用 create 创建新对象。

  1. 启动 nvmectli 交互外壳:

    tux > sudo nvmetcli
  2. 创建新端口:

    (nvmetcli)> cd ports
    (nvmetcli)> create 1
    (nvmetcli)> ls 1/
    o- 1
      o- referrals
      o- subsystems
  3. 创建 NVMe 子系统:

    (nvmetcli)> cd /subsystems
    (nvmetcli)> create nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82
    (nvmetcli)> cd nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82/
    (nvmetcli)> ls
    o- nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82
      o- allowed_hosts
      o- namespaces
  4. 创建新的名称空间,并在其中设置 NVMe 设备。

    (nvmetcli)> cd namespaces
    (nvmetcli)> create 1
    (nvmetcli)> cd 1
    (nvmetcli)> set device path=/dev/nvme0n1
    Parameter path is now '/dev/nvme0n1'.
  5. 启用先前创建的名称空间:

    (nvmetcli)> cd ..
    (nvmetcli)> enable
    The Namespace has been enabled.
  6. 显示创建的名称空间:

    (nvmetcli)> cd ..
    (nvmetcli)> ls
    o- nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82
      o- allowed_hosts
      o- namespaces
        o- 1
  7. 允许所有主机使用该子系统。只有在安全环境中才可这样做。

    (nvmetcli)> set attr allow_any_host=1
    Parameter allow_any_host is now '1'.

    或者,可以只允许特定的主机建立连接:

    (nvmetcli)> cd nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82/allowed_hosts/
    (nvmetcli)> create hostnqn
  8. 列出创建的所有对象:

    (nvmetcli)> cd /
    (nvmetcli)> ls
    o- /
      o- hosts
      o- ports
      | o- 1
      |   o- referrals
      |   o- subsystems
      o- subsystems
        o- nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82
          o- allowed_hosts
          o- namespaces
            o- 1
  9. 使目标可通过 RDMA 使用:

    (nvmetcli)> cd ports/1/
    (nvmetcli)> set addr adrfam=ipv4 trtype=rdma traddr=10.0.0.1 trsvcid=4420
    Parameter trtype is now 'rdma'.
    Parameter adrfam is now 'ipv4'.
    Parameter trsvcid is now '4420'.
    Parameter traddr is now '10.0.0.1'.

    或者,使目标可通过光纤通道使用:

    (nvmetcli)> cd ports/1/
    (nvmetcli)> set addr adrfam=fc trtype=fc traddr=nn-0x1000000044001123:pn-0x2000000055001123 trsvcid=none

16.3.3 备份和恢复目标配置

可使用以下命令在 JSON 文件中保存目标配置:

tux > sudo nvmetcli
(nvmetcli)> saveconfig nvme-target-backup.json

要恢复配置,请使用:

(nvmetcli)> restore nvme-target-backup.json

您还可以擦除当前配置:

(nvmetcli)> clear

16.4 特殊硬件配置

16.4.1 概述

有些硬件需要特殊的配置才能正常工作。请浏览以下章节的标题,确定您是否使用了所提到的设备或供应商。

16.4.2 Broadcom

如果您在使用 Broadcom Emulex LightPulse Fibre Channel SCSI 驱动程序,请在 lpfc 模块的目标和主机中添加内核配置参数:

tux > sudo echo "options lpfc lpfc_enable_fc4_type=3" > /etc/modprobe.d/lpfc.conf

确保 Broadcom 适配器固件的版本至少为 11.2.156.27。另外确保已安装最新版本的 nvme-cli, nvmetlci 和内核。

要启用光纤通道端口作为 NVMe 目标,请设置模块参数 lpfc_enable_nvmet= COMMA_SEPARATED_WWPNS。系统只会为目标模式配置列出的 WWPN。可将光纤通道端口配置为目标发起端。

16.4.3 Marvell

QLE269x 和 QLE27xx 适配器上都支持 FC-NVMe。Marvell® QLogic® QLA2xxx 光纤通道驱动程序中默认会启用 FC-NVMe 支持。

要确认 NVMe 是否已启用,请运行以下命令:

tux > cat /sys/module/qla2xxx/parameters/ql2xnvmeenable

如果显示 1,则表明 NVMe 已启用,显示 0 表示 NVMe 已禁用。

然后,检查以下命令的输出,确保 Marvell 适配器固件的版本不低于 8.08.204。

tux > cat /sys/class/scsi_host/host0/fw_version

最后,确保已安装适用于 SUSE Linux Enterprise Server 的最新版本( nvme-cliQConvergeConsoleCLI)及内核。例如,您可以运行

root # zypper lu && zypper pchk

来检查更新和增补程序。

有关安装的更多细节,请参考下列 Marvell 用户指南中的 FC-NVMe 部分:

16.5 更多信息

有关 nvme 命令的功能的更多细节,请参考 nvme nvme-help

以下链接提供了 NVMe 和 NVMe over Fabric 的简介:

17 管理设备的多路径 I/O

本章介绍如何使用多路径 I/O (MPIO) 来管理服务器和块储存设备间多路径的故障转移和路径负载平衡。

17.1 了解多路径 I/O

多路径是服务器与跨多个物理路径(这些路径在服务器中的主机总线适配器和设备储存控制器之间)的同一物理或逻辑块储存设备通讯的能力,通常是在光纤通道 (FC) 或 iSCSI SAN 环境中。当多个通道可用时,您还可以实现与直接挂接的储存器的多个连接。

Linux 的多路径提供连接容错,并可以跨多个活动连接提供负载平衡。当多路径已配置并且正在运行时,它会自动隔离和识别设备连接故障,并重路由 I/O 以改变连接。

常见连接问题包括适配器、电缆或控制器故障。当为一个设备配置多路径 I/O 时,多路径驱动程序将监视设备之间的活动连接。当多路径驱动程序检测到一个活动路径出现 I/O 错误时,它会故障转移到该设备的指定备用路径。当首选路径再次正常时,控制权会返回到首选路径。

17.2 硬件支持

多路径驱动程序和工具支持 SUSE Linux Enterprise Server 适用的所有体系结构。它们支持大多数储存阵列。存放多路径设备的储存阵列必须支持多路径,才能使用多路径驱动程序和工具。某些储存阵列供应商提供自己的多路径管理工具。请查看供应商的硬件文档以确定需要哪些设置。

17.2.1 自动检测到支持多路径的储存阵列

multipath-tools 包自动检测到以下储存阵列:

3PARdata VV
AIX NVDISK
AIX VDASD
APPLE Xserve RAID
COMPELNT Compellent Vol
COMPAQ/HP HSV101、HSV111、HSV200、HSV210、HSV300、HSV400、HSV 450
COMPAQ/HP MSA、HSV
COMPAQ/HP MSA VOLUME
DataCore SANmelody
DDN SAN DataDirector
DEC HSG80
DELL MD3000
DELL MD3000i
DELL MD32xx
DELL MD32xxi
DGC
EMC Clariion
EMC Invista
EMC SYMMETRIX
EUROLOGC FC2502
FSC CentricStor
FUJITSU ETERNUS_DX、DXL、DX400、DX8000
HITACHI DF
HITACHI/HP OPEN
HP A6189A
HP HSVX700
HP LOGICAL VOLUME
HP MSA2012fc、MSA 2212fc、MSA2012i
HP MSA2012sa、MSA2312 fc/i/sa、MCA2324 fc/i/sa、MSA2000s VOLUME
HP P2000 G3 FC|P2000G3 FC/iSCSI|P2000 G3 SAS|P2000 G3 iSCSI
IBM 1722-600
IBM 1724
IBM 1726
IBM 1742
IBM 1745、1746
IBM 1750500
IBM 1814
IBM 1815
IBM 1818
IBM 1820N00
IBM 2105800
IBM 2105F20
IBM 2107900
IBM 2145
IBM 2810XIV
IBM 3303 NVDISK
IBM 3526
IBM 3542
IBM IPR
IBM Nseries
IBM ProFibre 4000R
IBM S/390 DASD ECKD
IBM S/390 DASD FBA
Intel Multi-Flex
LSI/ENGENIO INF-01-00
NEC DISK ARRAY
NETAPP LUN
NEXENTA COMSTAR
Pillar Axiom
PIVOT3 RAIGE VOLUME
SGI IS
SGI TP9100、TP 9300
SGI TP9400、TP9500
STK FLEXLINE 380
STK OPENstorage D280
SUN CSM200_R
SUN LCSM100_[IEFS]
SUN STK6580、STK6780
SUN StorEdge 3510、T4
SUN SUN_6180

一般来说,其他的储存阵列多数都可以用。当自动检测到储存阵列时,将应用多路径的默认设置。如果想要使用非默认设置,则必须手动创建和配置 /etc/multipath.conf 文件。这对不能自动侦测到的硬件也适用。有关信息,请参见第 17.6 节 “创建或修改 /etc/multipath.conf 文件”

要注意下列事项:

17.2.2 测试过的支持多路径的储存阵列

下列供应商生产的储存阵列已在 SUSE Linux Enterprise Server 上经过测试:

EMC
Hitachi
Hewlett-Packard/Compaq
IBM
NetApp
SGI

其他供应商的储存阵列多数也可以用。请查看供应商的文档以获取相关指导。有关 multipath-tools 包可以识别的默认储存阵列的列表,请参见第 17.2.1 节 “自动检测到支持多路径的储存阵列”

17.2.3 需要特定硬件处理程序的储存阵列

要求特殊命令来进行一个路径向另一路径故障转移的储存阵列或要求特殊非标准错误处理的储存阵列,可能要求更多支持。因此,设备映射程序多路径服务有用于硬件处理程序的钩子。例如,已为 EMC CLARiiON CX 系列的阵列提供了一个此类处理程序。

重要
重要:更多信息

请查看硬件供应商的文档以确定是否必须为设备映射程序多路径安装其硬件处理程序。

multipath -t 命令显示一个要求使用特定硬件处理程序进行特殊处理的内部储存阵列表。显示的列表不是受支持储存阵列的穷举列表。仅列出要求特殊处理并且在工具开发期间 multipath-tools 开发人员可以访问的那些阵列。

重要
重要:例外

真正支持活动/活动多路径的阵列不要求特殊处理,所以 multipath -t 命令不会列出它们。

multipath -t 表中的列表不一定表示在该特定硬件上测试过 SUSE Linux Enterprise Server。对于已测试过的储存阵列的列表,请参见第 17.2.2 节 “测试过的支持多路径的储存阵列”

17.3 规划多路径

当规划多路径 I/O 解决方案时,请使用本节中的准则。

17.3.1 先决条件

  • 多路径在设备级别进行管理。

  • 用于多路径设备的储存阵列必须支持多路径。有关详细信息,请参见第 17.2 节 “硬件支持”

  • 仅当在服务器中的主机总线适配器和块储存设备的主机总线控制器之间存在多个物理路径时,才需要配置多路径。您可以将逻辑设备的多路径配置为对服务器可见。

  • 对于某些储存阵列,供应商提供其自己的多路径软件以管理该阵列物理和逻辑设备的多路径。在这种情况下,您应遵循供应商关于为这些设备配置多路径的说明。

  • 当在虚拟化环境中使用多路径时,多路径在主机服务器环境中控制。先配置设备的多路径,再将其指派给虚拟 Guest 计算机。

17.3.2 磁盘管理任务

尝试为有多个路径的物理或逻辑设备配置多路径之前,请执行以下磁盘管理任务:

  • 使用第三方工具将物理磁盘刻为几个较小的逻辑磁盘。

  • 使用第三方工具将物理或逻辑磁盘分区。如果在运行的系统中更改分区,设备映射程序多路径 (DM-MP) 模块不会自动检测和反映这些更改。DM-MPIO 必须重新初始化,这通常要求重引导。

  • 使用第三方 SAN 阵列管理工具创建和配置硬件 RAID 设备。

  • 使用第三方 SAN 阵列管理工具创建诸如 LUN 的逻辑设备。给定阵列支持的逻辑设备类型取决于阵列供应商。

17.3.3 软件 RAID

Linux 软件 RAID 管理软件在多路径的基础上运行。对于具有多个 I/O 路径以及您计划在软件 RAID 中使用的每个设备,必须将该设备配置为支持多路径,才能尝试创建软件 RAID 设备。不能自动发现多路径设备。软件 RAID 并不了解在底层运行的多路径管理。

有关为现有软件 RIAD 设置多路径的信息,请参见第 17.12 节 “为现有软件 RAID 配置多路径 I/O”

17.3.4 高可用性解决方案

群集储存资源的高可用性解决方案基于每个节点上的多路径服务运行。确保每个节点上的 /etc/multipath.conf 文件中的配置设置在整个群集中保持一致。

确保多路径设备在所有设备中的名称都相同。有关详细信息,请参见第 17.9.1 节 “HA 群集中的多路径设备名称”

用于跨 LAN 镜像设备的分布式复制块设备 (DRBD) 高可用性解决方案在多路径的基础上运行。对于具有多个 I/O 路径并且您计划在 DRDB 解决方案中使用的每个设备,必须先将该设备配置为支持多路径,再配置 DRBD。

17.3.5 始终让 initrd 与系统配置保持同步

使用多路径时最重要的一项要求是,需确保在根文件系统及引导系统所需的所有其他文件系统方面,initrd 与已安装的系统行为一致。如果在系统中启用了多路径,那么也需要在 initrd 中启用多路径,反之亦然。有关详细信息,请参见第 17.5.1 节 “启用、禁用、启动和停止多路径 I/O 服务”

如果 initrd 与系统不同步,系统将无法正常引导,启动过程将显示紧急外壳。有关如何避免或修复此类情况的说明,请参见第 17.15.1 节 “启用多路径时系统在引导过程中退出到紧急外壳”

17.4 多路径管理工具

SUSE Linux Enterprise Server 中的多路径支持以 Linux 内核的设备映射程序多路径模块及 multipath-tools 用户空间包为基础。您可以使用多设备管理实用程序 (multipath) 查看多路径设备的状态。

17.4.1 设备映射程序多路径模块

设备映射程序多路径 (DM-MP) 模块为 Linux 提供多路径功能。DM-MPIO 是在 SUSE Linux Enterprise Server 上实施多路径的首选解决方案。它是该产品随附的唯一一个多路径选项,完全受 SUSE 支持。

DM-MPIO 可以为各种设置自动配置多路径子系统。每个设备最多可配置 8 个路径。支持活动/不活动(一个路径活动、其他路径不活动)或活动/活动(所有路径都是活动,带循环负载平衡)的配置。

DM-MPIO 框架可按两种方式扩展:

DM-MPIO 的用户空间组件负责自动路径发现和分组以及自动路径再测试,以便先前失败的路径在恢复正常后可以自动重新启用。这可以最大程度地降低管理员对生产环境的关注。

DM-MPIO 保护设备路径以及设备本身不会出故障。如果一个活动路径丢失(例如,一个网络适配器 I/O 断开或光纤电缆被删除),I/O 会重定向到剩余的路径。如果该配置是活动/不活动,则路径会故障转移到一个不活动路径。如果正在使用循环负载平衡配置,则会在剩余正常路径间平衡通讯量。如果所有活动路径均失败,则必须唤醒不活动的辅助路径,因此需经过大约 30 秒的延迟之后才会开始故障转移。

如果一个磁盘阵列有多个储存处理器,请确保 SAN 交换机连接到拥有要访问的 LUN 的储存处理器。在多数磁盘阵列上,所有 LUN 均属于这两个储存处理器,所以两个连接都是活动的。

注意
注意:储存处理器

在某些磁盘阵列上,储存阵列通过储存处理器管理通讯,以便一次仅显示一个储存处理器。一个处理器是活动的,另一个是不活动的,直到发生故障。如果您连接到错误的储存处理器(具有不活动路径的那个),则可能无法看到所需的 LUN,或者可能看到这些 LUN,但在尝试访问它们时会出错。

表 17.1︰ 储存阵列的多路径 I/O 功能

储存阵列的功能

描述

活动/不活动控制器

一个控制器是活动的,为所有 LUN 提供服务。第二个控制器充当备用控制器。第二个控制器还将 LUN 提供给多路径组件,以便操作系统了解冗余路径。如果主控制器失败,第二个控制器会接管,并且它为所有 LUN 提供服务。

在某些阵列中,LUN 可以指派给不同的控制器。给定的 LUN 指派给要充当活动控制器的一个控制器。一个控制器一次可为任何 LUN 执行磁盘 I/O,第二个控制器是该 LUN 的备用控制器。第二个控制器也提供这些路径,但不可执行磁盘 I/O。使用该 LUN 的服务器连接到该 LUN 的指派的控制器。如果一组 LUN 的主控制器失败,第二个控制器会接管,并且它为所有 LUN 提供服务。

活动/活动控制器

两个控制器均分所有 LUN 的负载,并且可以处理任何 LUN 的磁盘 I/O。如果一个控制器失败,第二个处理器会自动处理所有通讯。

负载平衡

设备映射程序多路径驱动程序自动对所有活动路径中的通讯平衡负载。

控制器故障转移

当活动控制器故障转移到不活动控制器(或备用控制器)时,设备映射程序多路径驱动程序会自动激活主机和备用控制器之间的路径,使它们成为主路径。

引导/根设备支持

在 SUSE Linux Enterprise Server 10 和更高版本中,根 (/) 设备支持多路径。主机服务器必须连接到引导设备当前活动的控制器和储存处理器。

在 SUSE Linux Enterprise Server 11 和更高版本中,/boot 设备支持多路径。

设备映射程序多路径将多路径设备的每个路径检测为独立的 SCSI 设备。SCSI 设备名的格式为 /dev/sdN,其中 N 是为该设备自动生成的字母,从 a 开始,并在设备创建时顺序发放,例如 /dev/sda/dev/sdb 等。如果设备数超过 26,则会使用两个字母,这样在 /dev/sdz 后的下一个设备将命名为 /dev/sdaa/dev/sdab 等。

如果未自动检测到多路径,则您可以在 /etc/multipath.conf 文件中手动配置它们。multipath.conf 文件在您创建和配置之前是不存在的。有关信息,请参见第 17.6 节 “创建或修改 /etc/multipath.conf 文件”

17.4.2 多路径 I/O 管理工具

multipath-toolskpartx 包提供了负责执行自动路径发现和分组的工具。它们会定期自动测试路径,这样,先前失败的路径在恢复正常后,便可自动重新启用。这可以最大程度地降低管理员对生产环境的关注。

表 17.2︰ multipath-tools 包中的工具

工具

描述

multipath

扫描系统中的多路径设备并组装它们。

multipathd

等候映射事件,然后执行 multipath

kpartx

将线性 devmaps 映射到多路径设备上的分区,使得能够为设备上的分区创建多路径监视。

mpathpersist

管理设备映射程序多路径设备上的 SCSI 永久保留。

17.4.3 对多路径设备使用 MDADM

udev 是默认设备处理程序,系统会自动知道设备的全球 ID 而不是设备节点名。它解决了以前版本的 MDADM 和 LVM 中的问题,即配置文件(mdadm.conflvm.conf)不能正确识别多路径设备。

与 LVM2 一样,MDADM 也要求通过 ID 而非设备节点路径访问设备。因此,/etc/mdadm.conf 中的 DEVICE 项应如下设置:

DEVICE /dev/disk/by-id/*

如果要使用用户友好的名称,请按以下方式指定路径,以便在配置多路径后仅对设备映射程序名称进行扫描:

DEVICE /dev/disk/by-id/dm-uuid-.*-mpath-.*

17.4.4 multipath 命令

使用 Linux 的 multipath(8) 命令配置和管理多路径设备。该命令的一般语法如下所示:

multipath [-v verbosity_level] [-b bindings_file] [-d] [-h|-l|-ll|-f|-F|-B|-c|-q|-r|-w|-W|-t] [-p failover|multibus|group_by_serial|group_by_prio|group_by_node_name] [DEVICENAME]

有关细节,请参见 man 8 multipath

常规示例

multipath

配置所有多路径设备。

multipath DEVICENAME

配置特定多路径设备。

使用诸如 /dev/sdb(如 udev 的 $DEVNAME 变量中所示)的设备节点名或采用 major:minor 格式替换 DEVICENAME。也可以使用该设备的多路径映射名称。

multipath -f

选择性地抑制多路径映射及其设备映射的分区。

multipath -d

排演。显示潜在多路径设备,但不创建任何设备,也不更新设备映射。

multipath -v2 -d

显示试运行中潜在多路径设备的多路径映射信息。-v2 选项仅显示本地磁盘。这种详细级别仅打印创建或更新的多路径名称,用于为 kpartx 之类的其他工具提供输入。

如果设备已经存在且未作更改,则无输出。使用 multipath -ll 可以查看配置的多路径设备的状态。

multipath -v2 DEVICENAME

配置特定潜在多路径设备并显示它的多路径映射信息。这种详细级别仅打印创建的或更新的多路径名称,以用来为 kpartx 之类的其他工具提供输入。

如果设备已经存在且未作更改,则无输出。使用 multipath -ll 可以查看配置的多路径设备的状态。

使用诸如 /dev/sdb(如 udev 的 $DEVNAME 变量中所示)的设备节点名或采用 major:minor 格式替换 DEVICENAME。也可以使用该设备的多路径映射名称。

multipath -v3

配置潜在多路径设备并显示它们的多路径映射信息。这种详细级别打印所有检测到的路径、多路径和设备映射。WWID 和 devnode 列入黑名单的设备都会显示。

multipath -v3 DEVICENAME

配置特定潜在多路径设备并显示相关信息。-v3 选项显示完整的路径列表。这种详细级别打印所有检测到的路径、多路径和设备映射。WWID 和 devnode 列入黑名单的设备都会显示。

使用诸如 /dev/sdb(如 udev 的 $DEVNAME 变量中所示)的设备节点名或采用 major:minor 格式替换 DEVICENAME。也可以使用该设备的多路径映射名称。

multipath -ll

显示所有多路径设备的状态。

multipath -ll DEVICENAME

显示特定多路径设备的状态。

使用诸如 /dev/sdb(如 udev 的 $DEVNAME 变量中所示)的设备节点名或采用 major:minor 格式替换 DEVICENAME。也可以使用该设备的多路径映射名称。

multipath -F

刷新所有未用多路径设备映射。它不解析多路径,且不删除设备。

multipath -F DEVICENAME

刷新特定多路径设备的未用多路径设备映射。它不解析多路径,且不删除设备。

使用诸如 /dev/sdb(如 udev 的 $DEVNAME 变量中所示)的设备节点名或采用 major:minor 格式替换 DEVICENAME。也可以使用该设备的多路径映射名称。

multipath -p [ failover | multibus | group_by_serial | group_by_prio | group_by_node_name ]

指定下表中所述的其中一个组策略选项来设置组策略:

表 17.3︰ multipath -p 命令的组策略选项

策略选项

描述

failover

(默认)每个优先级组对应一个路径。您一次只能使用一个路径。

multibus

一个优先级组中的所有路径。

group_by_serial

每个检测到的 SCSI 序列号(控制器节点全球编号)一个优先级组。

group_by_prio

每个路径优先级值一个优先级组。具有相同优先级的路径在同一优先级组中。优先级由调出程序在 /etc/multipath.conf 配置文件中指定为 global、per-controller 或 per-multipath 选项来确定。

group_by_node_name

每个目标节点名一个优先级组。目标节点名是在 /sys/class/fc_transport/target*/node_name 位置获取的。

multipath -t

显示内部硬件表和活动的多路径配置。有关配置参数的细节,请参见 man multipath

17.4.5 mpathpersist 实用程序

mpathpersist 实用程序可用来管理设备映射程序多路径设备上的 SCSI 永久保留。该命令的一般语法如下所示:

mpathpersist [options] [device]

有关细节,请参见 man 8 mpathpersist

将此实用程序与 /etc/multipath.conf 文件中的服务操作保留密钥(reservation_key 属性)搭配使用,设置 SCSI 设备的永久保留。默认情况下不会使用该属性。如果未设置该属性,multipathd 守护程序不会检查新发现的路径或已重新启用的路径的永久保留。

reservation_key <RESERVATION_KEY>

您可以将该属性添加到 defaultsmultipaths 部分。例如:

multipaths {
  multipath {
    wwid   XXXXXXXXXXXXXXXX
    alias      yellow
    reservation_key  0x123abc
  }
}

设置所有适合永久管理的多路径设备的 reservation_key 参数,然后运行以下命令重启动 multipathd 守护程序:

sudo systemctl restart multipathd

设置它之后,您可以在 mpathpersist 命令中指定保留密钥。

示例

mpathpersist --out --register --param-sark=123abc --prout-type=5 -d /dev/mapper/mpath9

注册 /dev/mapper/mpath9 设备的服务操作保留密钥。

mpathpersist -i -k -d /dev/mapper/mpath9

读取 /dev/mapper/mpath9 设备的服务操作保留密钥。

mpathpersist --out --reserve --param-sark=123abc --prout-type=8 -d /dev/mapper/mpath9

保留 /dev/mapper/mpath9 设备的服务操作保留密钥。

mpathpersist -i -s -d /dev/mapper/mpath9

读取 /dev/mapper/mpath9 设备的保留状态。

17.5 为多路径配置系统

17.5.1 启用、禁用、启动和停止多路径 I/O 服务

要允许多路径服务在引导时启动,请运行以下命令:

sudo systemctl enable multipathd

要在正在运行的系统中手动启动服务,或是检查其状态,请输入以下其中一个命令:

sudo systemctl start multipathd
sudo systemctl status multipathd

要在当前会话中停止多路径服务,以及要禁用该服务以便在系统下次引导时不启动它,请运行以下命令:

sudo systemctl stop multipathd
sudo systemctl disable multipathd
重要
重要:重构建 initrd

每次启用或禁用多路径服务时,还需要重构建 initrd,否则系统可能无法再引导。启用多路径服务时,还要运行以下命令以重构建 initrd:

dracut --force --add multipath

禁用服务时,则运行以下命令以重构建 initrd:

dracut --force -o multipath

(可选)此外,如果您还想确保不设置多路径设备(即使手动启动了多路径),请在重构建 initrd 之前,将以下几行添加到 /etc/multipath.conf 的末尾:

blacklist {
    wwid ".*"
}

17.5.2 为多路径准备 SAN 设备

配置 SAN 设备的多路径 I/O 之前,请按需要执行以下操作准备 SAN 设备:

  • 使用供应商工具配置 SAN 并设置区域。

  • 使用供应商工具为储存阵列上的主机 LUN 配置访问权限。

  • 安装 Linux HBA 驱动程序模块。安装好模块后,驱动程序会自动扫描 HBA,以发现对该主机有访问权限的任何 SAN 设备。它将这些 SAN 设备提供给主机以进行进一步的配置。

    注意
    注意:无本机多路径

    确保您正在使用的 HBA 驱动程序没有启用本机多路径。

    有关更多细节,请参见供应商的特定说明。

  • 装载驱动程序模块之后,发现指派给特定阵列 LUN 或分区的设备节点。

  • 如果将 SAN 设备用作服务器上的根设备,请按第 17.14.9 节 “根设备为多路径时的 SAN 超时设置”中所述修改设备超时设置。

如果 HBA 驱动程序没有看到这些 LUN,则可以使用 lsscsi 检查操作系统是否正确看到这些 SCSI 设备。如果 HBA 驱动程序没有看到这些 LUN,请检查 SAN 的区域设置。特别是要检查 LUN 屏蔽是否是活动的,以及是否已将 LUN 正确指派给服务器。

如果 HBA 驱动程序看到这些 LUN,但没有相应的块设备,则需要其他内核参数来更改 SCSI 设备扫描行为,例如表示 LUN 不连续编号。有关信息,请参见 SUSE 知识库 (https://www.suse.com/support/kb/doc.php?id=3955167) 中的 TID 3955167:Troubleshooting SCSI (LUN) Scanning Issues(SCSI (LUN) 扫描问题查错)。

17.5.3 将多路径设备分区

不建议使用但支持有多个路径的分区设备。使用 kpartx 工具无需重引导即可在多路径设备中创建分区。也可以在尝试配置多路径之前,使用 YaST 中的“分区程序”功能或使用第三方分区工具对设备分区。

多路径设备是设备映射程序设备。虽然使用命令行工具(例如 parted、kpartx 或 fdisk)可以修改设备映射程序设备,但这并不一定会生成更新其他层所需的 udev 事件。对设备映射程序设备分区之后,您应该检查多路径映射,确保已映射设备映射程序设备。如果未映射它们,您可以重新映射多路径设备,或重引导服务器,以取得多路径映射中的所有新分区。

多路径设备上的一个分区的设备映射程序设备不同于一个独立设备。使用整个设备创建 LVM 逻辑卷时,必须指定不包含分区的设备。如果将多路径分区指定为 LVM 逻辑卷的目标设备,则 LVM 会认为底层物理设备已分区,创建将会失败。如果需要细分 SAN 设备,则可以拆分 SAN 设备上的 LUN,并将每个 LUN 作为独立的多路径设备显示给服务器。

17.6 创建或修改 /etc/multipath.conf 文件

只有创建 /etc/multipath.conf,该文件才会存在。除非您创建多路径配置文件并进行个性化设置,否则在运行守护程序 multipathd 时,将自动应用默认的多路径设备设置。

重要
重要: 测试及永久性应用 /etc/multipath.conf 中的更改

无论您何时创建或修改 /etc/multipath.conf 文件,当保存该文件时都不会自动应用更改。这样,您便可以在提交更改之前,先进行试运行以校验这些更改。如果对修改后的设置满意,便可按第 17.6.4 节 “应用 /etc/multipath.conf 文件更改以更新多路径映射”中所述来更新多路径映射。

17.6.1 创建 /etc/multipath.conf 文件

  1. 使用惯用的编辑器创建一个空的 /etc/multipath.conf 文件。

  2. 确保为您的 SAN 添加相应的 device 部分。多数供应商提供关于正确设置 device 部分的文档。请注意,不同的 SAN 需要单独的 device 部分。

    如果要使用自动检测到的储存子系统(请参见第 17.2.1 节 “自动检测到支持多路径的储存阵列”),则不需要添加 device,因为在此情况下将会应用此设备的默认设置。

  3. 创建 blacklist 部分,在其中包含您计算机的所有非多路径设备。有关详细信息,请参见第 17.8 节 “将非多路径设备列入黑名单”

  4. 视需要在配置文件中添加更多部分。有关简要介绍,请参考第 17.6.2 节 “/etc/multipath.conf 文件中的部分”。运行 man 5 multipath.conf 时会有更多细节可用。

  5. 完成后,保存 /etc/multipath.conf 并按第 17.6.3 节 “校验 /etc/multipath.conf 文件中的多路径设置”中所述测试您的设置。

  6. 成功校验配置后,请按第 17.6.4 节 “应用 /etc/multipath.conf 文件更改以更新多路径映射”中所述应用配置。

17.6.2 /etc/multipath.conf 文件中的部分

/etc/multipath.conf 文件由下列部分构成。有关细节,请参见 man 5 multipath.conf

defaults

多路径 I/0 的常规默认设置。如果在相应的设备或多路径部分中未提供值,则会使用这些值。有关信息,请参阅第 17.7 节 “配置巡回检测、排队及故障回复的默认策略”

blacklist

列出不作为候选多路径而丢弃的设备名称。可以通过设备节点名称 (devnode)、设备 WWID (wwid) 或设备供应商或产品字符串 (device) 来识别设备。您通常可能会忽略非多路径设备,例如 hpsafdhdmddmsrscdstramrawloop。有关详细信息和示例,请参见第 17.8 节 “将非多路径设备列入黑名单”

blacklist_exceptions

列出即使包含在黑名单中仍视为候选多路径的设备的设备名称。可以通过设备节点名称 (devnode)、设备 WWID (wwid) 或设备供应商或产品字符串 (device) 来识别设备。您必须使用黑名单中使用的相同关键字指定例外的设备。例如,如果您在黑名单中对设备使用了关键字 devnode,则需同样使用关键字 devnode 在黑名单例外中排除一些设备。您无法使用 devnode 关键词将设备加入黑名单,也无法使用 wwid 关键词排除其中某些设备。有关详细信息和示例,请参见第 17.8 节 “将非多路径设备列入黑名单”

multipaths

指定单个多路径设备的设置。除不支持单个设置的设置外,这些值会重写配置文件的 defaultsdevices 部分中的其他指定值。

devices

指定单个储存控制器的设置。这些值会重写配置文件的 defaults 部分中指定的值。如果您使用默认情况下不受支持的储存阵列,则可以创建 devices 子部分,以指定该储存阵列的默认设置。如果关键字允许,则可以使用单个多路径设备的设置重写这些值。

有关信息,请参见以下内容:

17.6.3 校验 /etc/multipath.conf 文件中的多路径设置

无论您何时创建或修改 /etc/multipath.conf 文件,当保存该文件时都不会自动应用更改。您可以在更新多路径映射之前对该设置执行试运行,以校验多路径设置。

在服务器命令提示符处输入

sudo multipath -v2 -d

此命令会扫描设备,然后显示如果提交更改设置将产生的效果。该命令假设在您修改 /etc/multipath.conf 文件并执行试运行时,守护程序 multipathd 已使用旧的(或默认)多路径设置运行。如果更改可接受,请继续下一步。

其输出类似于如下内容:

26353900f02796769
[size=127 GB]
[features="0"]
[hwhandler="1    emc"]

\_ round-robin 0 [first]
  \_ 1:0:1:2 sdav 66:240  [ready ]
  \_ 0:0:1:2 sdr  65:16   [ready ]

\_ round-robin 0
  \_ 1:0:0:2 sdag 66:0    [ready ]
  \_ 0:0:0:2 sdc   8:32   [ready ]

路径可分为多个优先级组。一次只有一个优先级组是活动的。要为活动/活动配置建模,所有路径都要分入同一个组。要构建活动/不活动配置,不应同时活动的路径要放在几个不同的优先级组中。这在设备发现中通常自动发生。

输出显示在组里用来平衡 I/O 的顺序、日程安排策略以及每个优先级组的路径。对于每个路径,显示其物理地址 (host:bus:target:lun)、设备节点名称、主要:次要编号以及状态。

在试运行中使用详细级别 -v3,即可查看所有检测到的路径、多路径和设备映射。它同时显示 WWID 和设备节点列入黑名单的设备。

以下示例显示了有两个 Qlogic HBA 连接到 Xiotech Magnitude 3000 SAN 的 64 位 SLES 11 SP2 服务器的 -v3 输出。为了简化示例,省略了一些多重项。

tux > sudo multipath -v3 d
dm-22: device node name blacklisted
< content omitted >
loop7: device node name blacklisted
< content omitted >
md0: device node name blacklisted
< content omitted >
dm-0: device node name blacklisted
sdf: not found in pathvec
sdf: mask = 0x1f
sdf: dev_t = 8:80
sdf: size = 105005056
sdf: subsystem = scsi
sdf: vendor = XIOtech
sdf: product = Magnitude 3D
sdf: rev = 3.00
sdf: h:b:t:l = 1:0:0:2
sdf: tgt_node_name = 0x202100d0b2028da
sdf: serial = 000028DA0014
sdf: getuid= "/lib/udev/scsi_id --whitelisted --device=/dev/%n" (config file default)
sdf: uid = 200d0b2da28001400 (callout)
sdf: prio = const (config file default)
sdf: const prio = 1
[...]
ram15: device node name blacklisted
[...]
===== paths list =====
uuid              hcil    dev dev_t pri dm_st  chk_st  vend/prod/rev
200d0b2da28001400 1:0:0:2 sdf 8:80  1   [undef][undef] XIOtech,Magnitude 3D
200d0b2da28005400 1:0:0:1 sde 8:64  1   [undef][undef] XIOtech,Magnitude 3D
200d0b2da28004d00 1:0:0:0 sdd 8:48  1   [undef][undef] XIOtech,Magnitude 3D
200d0b2da28001400 0:0:0:2 sdc 8:32  1   [undef][undef] XIOtech,Magnitude 3D
200d0b2da28005400 0:0:0:1 sdb 8:16  1   [undef][undef] XIOtech,Magnitude 3D
200d0b2da28004d00 0:0:0:0 sda 8:0   1   [undef][undef] XIOtech,Magnitude 3D
params = 0 0 2 1 round-robin 0 1 1 8:80 1000 round-robin 0 1 1 8:32 1000
status = 2 0 0 0 2 1 A 0 1 0 8:80 A 0 E 0 1 0 8:32 A 0
sdf: mask = 0x4
sdf: path checker = directio (config file default)
directio: starting new request
directio: async io getevents returns 1 (errno=Success)
directio: io finished 4096/0
sdf: state = 2
[...]

17.6.4 应用 /etc/multipath.conf 文件更改以更新多路径映射

/etc/multipath.conf 文件的更改在 multipathd 运行时不会生效。进行更改后,保存并关闭该文件,然后执行以下操作以应用更改并更新多路径映射:

  1. 停止 multipathd 服务:

    sudo systemctl stop multipathd
  2. 通过输入以下命令,清除旧的多路径绑定

    sudo /sbin/multipath -F
  3. 通过输入以下命令,创建新的多路径绑定

    sudo /sbin/multipath -v2 -l
  4. 重启动 multipathd 服务:

    sudo systemctl start multipathd
  5. 在系统中运行 dracut -f 重新创建 initrd 映像,然后重引导以使更改生效。

17.6.5 生成 WWID

为了在不同的路径上识别设备,多路径使用每台设备的全球通用标识 (WWID)。如果两个设备路径的 WWID 相同,则假定它们代表同一台设备。除非有绝对的理由,否则建议不要更改生成 WWID 的方法。有关细节,请参见 man multipath.conf

17.7 配置巡回检测、排队及故障回复的默认策略

多路径 I/O 旨在于储存系统与服务器之间提供连接容错。所需的默认行为取决于服务器是独立服务器还是高可用性群集中的一个节点。

在配置独立服务器的多路径 I/O 时,no_path_retry 设置会保护服务器操作系统在尽可能长的时间内不会接收 I/O 错误。它会在出现多路径故障转移前将消息排队,并提供正常的连接。

在为高可用性群集中的节点配置多路径 I/O 时,您需要让多路径报告 I/O 故障,以触发资源故障转移而不是等待多路径故障转移被解决。在群集环境中,您必须修改 no_path_retry 设置,以确保当与储存系统断开连接时,群集节点会收到与群集验证进程相关的 I/O 错误(建议为 Heartbeat 容错的 50%)。此外,您还希望将多路径 I/O 错误回复设为手动,以避免因路径故障而造成资源的乒乓效应。

/etc/multipath.conf 文件应包含一个 defaults 部分,您可以在此处指定巡回检测、排队以及故障回复的默认行为。如果该字段未另在 device 部分中指定,则为该 SAN 配置应用默认设置。

以下各项是已编译的默认设置。除非在创建及配置个性化 /etc/multipath.conf 文件时被重写,否则将使用这些值。

defaults {
  verbosity 2
#  udev_dir is deprecated in SLES 11 SP3
#  udev_dir              /dev
  polling_interval      5
#  path_selector default value is service-time in SLES 11 SP3
#  path_selector         "round-robin 0"
  path selector         "service-time 0"
  path_grouping_policy  failover
#  getuid_callout is deprecated in SLES 11 SP3 and replaced with uid_attribute
#  getuid_callout        "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
#  uid_attribute is new in SLES 11 SP3
  uid_attribute         "ID_SERIAL"
  prio                  "const"
  prio_args             ""
  features              "0"
  path_checker          "tur"
  alias_prefix          "mpath"
  rr_min_io_rq          1
  max_fds               "max"
  rr_weight             "uniform"
  queue_without_daemon  "yes"
  flush_on_last_del     "no"
  user_friendly_names   "no"
  fast_io_fail_tmo      5
  bindings_file         "/etc/multipath/bindings"
  wwids_file            "/etc/multipath/wwids"
  log_checker_err       "always"

  retain_attached_hw_handler  "no"
  detect_prio           "no"
  failback              "manual"
  no_path_retry         "fail"
  }

有关巡回检测、排队和故障回复策略设置的信息,请参见第 17.10 节 “配置路径故障转移策略和优先级”中的以下参数:

修改 /etc/multipath.conf 文件后,必须在系统上运行 dracut -f 重新创建 initrd,然后重启动服务器,更改才会生效。有关详细信息,请参见第 17.6.4 节 “应用 /etc/multipath.conf 文件更改以更新多路径映射”

17.8 将非多路径设备列入黑名单

/etc/multipath.conf 文件可能包含 blacklist 部分,其中会列出所有非多路径设备。您可以通过 WWID(wwid 关键词)、设备名称(devnode 关键词)或设备类型(device 部分)将设备加入黑名单。您还可以使用 blacklist_exceptions 部分,对通过 blacklist 部分中所用的正规表达式加入黑名单的一些设备启用多路径。

注意
注意: 首选的加入黑名单方法

将设备加入黑名单的首选方法是通过 WWID 或通过供应商和产品进行。建议不要通过 devnode 加入黑名单,因为设备节点可能会更改,因此对长久标识设备无帮助。

警告
警告:multipath.conf 中的正则表达式

/etc/multipath.conf 中的正则表达式一般情况下起作用。只有与通用字符串匹配时,它们才会起作用。不过,多路径的标准配置已包含许多设备和供应商的正则表达式。将正则表达式与其他正则表达式相匹配不起作用。请务必只与运行 multipath -t 后显示的字符串进行匹配。

您通常可能会忽略非多路径设备,例如 hpsafdhdmddmsrscdstramrawloop。例如,本地 SATA 硬盘和闪存盘没有多个路径。如果您希望 multipath 忽略单路径设备,请将它们放在 blacklist 部分。

注意
注意:兼容性

关键词 devnode_blacklist 已弃用且已替换为 blacklist

在 SUSE Linux Enterprise Server 12 中使用 glibc 提供的正规表达式。要与任意字符串匹配,现在必须使用 ".*" 而不应使用 "*"

例如,要将本地设备和 hpsa 驱动程序中的所有阵列加入黑名单,以免受到多路径的管理,则 blacklist 部分应为:

blacklist {
      wwid "26353900f02796769"
      devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
      devnode "^sd[a-z][0-9]*"
}

您可以仅将一个驱动程序中的分区而不是整个阵列加入黑名单。例如,您可以使用以下正规表达式,只将 cciss 驱动程序中的分区而非整个阵列加入黑名单:

blacklist {
      devnode "^cciss!c[0-9]d[0-9]*[p[0-9]*]"
}

您可以在 blacklist 中添加 device 部分,并使用 vendorproduct 关键词按特定设备类型加入黑名单。

blacklist {
      device {
           vendor  "DELL"
           product ".*"
       }
}

您可以使用 blacklist_exceptions 部分,对通过 blacklist 部分中所用的正规表达式加入黑名单的一些设备启用多路径。您可以通过 WWID(wwid 关键词)、设备名称(devnode 关键词)或设备类型(device 部分)添加例外。您必须以将相应设备加入黑名单的相同方式指定例外。也就是说,wwid 例外适用于 wwid 黑名单,devnode 例外适用于 devnode 黑名单,而设备类型例外适用于设备类型黑名单。

例如,如果您拥有来自不同供应商的设备类型,可以针对所需的设备类型启用多路径。在 blacklist 部分中将所有供应商的设备类型加入黑名单,然后在 blacklist_exceptions 部分中添加 device 部分,针对所需的设备类型启用多路径。

blacklist {
      devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st|sda)[0-9]*"
      device {
           vendor  "DELL"
           product ".*"
       }
}

blacklist_exceptions {
      device {
           vendor  "DELL"
           product "MD3220i"
       }
}

您还可以使用 blacklist_exceptions 仅针对特定设备启用多路径。例如:

blacklist {
      wwid ".*"
}

blacklist_exceptions {
        wwid "3600d0230000000000e13955cc3751234"
        wwid "3600d0230000000000e13955cc3751235"
}

修改 /etc/multipath.conf 文件后,必须在系统上运行 dracut -f 重新创建 initrd,然后重启动服务器,更改才会生效。有关详细信息,请参见第 17.6.4 节 “应用 /etc/multipath.conf 文件更改以更新多路径映射”

重引导之后,当您发出 multipath -ll 命令时,这些本地设备应不再列于多路径映射中。

注意
注意:使用 find_multipaths 选项

SUSE Linux Enterprise Server 12 SP2 开始,多路径工具支持 /etc/multipath.confdefaults 部分中的 find_multipaths 选项。简而言之,此选项会阻止多路径和 multipathd 为只有单个路径的设备设置多路径映射(有关细节,请参见 man 5 multipath.conf)。如此,在某些配置中,管理员就无需为本地 SATA 磁盘等创建黑名单项。

虽然使用 find_multipaths 选项看似很方便,但也有其弊端。它使得系统引导复杂化且速度变慢,因为对于找到的每台设备,引导逻辑都需要等到发现了所有设备之后才能确定设备是否存在第二个路径。此外,当一些路径已关闭或在引导期间不可视时可能会出现问题 — 可能会错误地将设备检测为单路径设备并激活,导致后面添加更多路径的操作失败。

find_multipaths 会将 /etc/multipath/wwids 中所列的具有匹配 WWID 的所有设备视为多路径设备。请注意,第一次激活 find_multipaths 时不会产生任何效果,除非删除或编辑了 /etc/multipath/wwids,因为所有先前存在的多路径映射(包括单路径映射)都列于该 wwids 文件中。在具有多路径根文件系统的 SAN-boot 系统中,请确保 /etc/multipath/wwids 在初始 RAM 磁盘和文件系统之间保持同步。

总而言之,虽然在某些情况下使用 find_multipaths 可能很方便,但 SUSE 仍建议使用正确配置了黑名单和黑名单例外的默认配置。

17.9 配置用户用好的名称或别名

多路径设备可以按 WWID、用户友好的名称或您指派的别名进行标识。格式为 /dev/sdn/dev/dm-n 的设备节点名称在重引导时会发生更改,且每次都可能会被指派给不同的设备。而设备的 WWID、用户友好名称以及别名则在重引导期间始终不变,因此是标识设备的首选方式。

重要
重要:建议使用永久的名称

因为格式为 /dev/sdn/dev/dm-n 的设备节点名称在重引导时会发生更改,所以最好使用其 WWID 来表示多路径设备。为了在重引导时唯一标识设备,您也可以使用与 WWID 映射的用户友好名称或别名。

下表介绍了 /etc/multipath.conf 文件中可用于设备的设备名称类型。有关 multipath.conf 设置的示例,请参见 /usr/share/doc/packages/multipath-tools/multipath.conf.synthetic 文件。

表 17.4︰ 多路径设备名称类型比较

名称类型

描述

WWID(默认)

WWID(全球标识符)序列是保证全球唯一且不会更改的多路径设备标识符。在多路径中使用的默认名称是 /dev/disk/by-id 目录中的逻辑单元的 ID。例如,WWID 为 3600508e0000000009e6baa6f609e7908 的设备将作为 /dev/disk/by-id/scsi-3600508e0000000009e6baa6f609e7908 列出。

用户友好

/dev/mapper 目录中的设备映射程序多路径设备名称也参考逻辑单元的 ID。这些多路径设备名称都是用户友好的名称,格式为 /dev/mapper/mpath<N>,比如 /dev/mapper/mpath0。名称是唯一且永久的,因为它们使用 /var/lib/multipath/bindings 文件跟踪 UUID 和用户友好的名称之间的关联。

别名

别名是由管理员为多路径设备提供的全局唯一名称。别名会覆盖 WWID 和用户友好的 /dev/mapper/mpathN 名称。

如果您使用的是 user_friendly_names,请不要将别名设为 mpathN 格式。否则可能会与自动指派的用户友好名称产生冲突,导致所提供的设备节点名称不正确。

/etc/multipath.conf 文件中的全局多路径 user_friendly_names 选项用于对多路径设备启用或禁用用户友好的名称。如果将它设置为 no(默认值),多路径会使用 WWID 作为设备的名称。如果将它设置为 yes,多路径将使用 /var/lib/multipath/bindings 文件,在 /dev/mapper 目录中以 mpath<N> 格式为设备指派一个永久的唯一名称。/etc/multipath.conf 文件中的 bindings_file 选项可用于指定 bindings 文件的备用位置。

/etc/multipath.conf 文件中的全局多路径 alias 选项用于明确为设备指派一个名称。如果为多路径设备设置了别名,则使用别名,而不使用 WWID 或用户友好的名称。

使用 user_friendly_names 选项时,在以下情形中可能会出现问题:

根设备使用的是多路径:

如果系统根设备使用的是多路径,而您使用的是 user_friendly_names 选项,则 initrd 文件中将会包含 /var/lib/multipath/bindings 文件中的用户友好设置。如果稍后更改储存设置,比如添加或删除了设备,则 initrd 内的绑定设置和 /var/lib/multipath/bindings 中的绑定设置之间会存在不匹配。

警告
警告:绑定不匹配项

initrd/var/lib/multipath/bindings 之间的绑定不匹配会导致对设备指派错误的安装点,进而导致文件系统损坏和数据丢失。

为了避免此问题,建议对系统根设备使用默认 WWID 设置。对于系统根设备不应使用别名。由于设备名称不同,因此使用别名会导致您无法通过内核命令行无缝关闭多路径。

从另一个分区装入 /var:

user_friendly_names 配置文件的默认位置是 /var/lib/multipath/bindings。如果 /var 数据不是位于系统 root 设备上,而是从另一个分区装入,则设置多路径时 bindings 文件不可用。

请确保 /var/lib/multipath/bindings 文件在系统 root 设备上可用,并且多路径可以找到它。例如,可以按如下操作来确保这一点:

  1. /var/lib/multipath/bindings 文件移动到 /etc/multipath/bindings

  2. 将 /etc/multipath.confdefaults 部分的 bindings_file 选项设置为此新位置。例如:

    defaults {
                   user_friendly_names yes
                   bindings_file "/etc/multipath/bindings"
    }
多路径在 initrd 中:

即使系统根设备不在多路径上,多路径也可以包含在 initrd 中。例如,如果系统根设备位于 LVM 上,就可能会发生这种情况。如果您使用 user_friendly_names 选项,且多路径在 initrd 中,则应当使用参数 multipath=off 进行引导,以免出现问题。

这样在系统引导过程中仅禁用了 initrd 中的多路径。系统引导后,boot.multipathmultipathd 引导脚本能够激活多路径。

HA 群集中的多路径:

有关详细信息,请参见第 17.9.1 节 “HA 群集中的多路径设备名称”

启用用户友好名称或指定别名:

  1. 使用 root 权限在文本编辑器中打开 /etc/multipath.conf 文件。

  2. (可选)修改 /var/lib/multipath/bindings 文件的位置。

    备用路径必须在系统根设备上可用,且多路径可以找到它。

    1. /var/lib/multipath/bindings 文件移动到 /etc/multipath/bindings

    2. 将 /etc/multipath.confdefaults 部分的 bindings_file 选项设置为此新位置。例如:

      defaults {
                user_friendly_names yes
                bindings_file "/etc/multipath/bindings"
      }
  3. (可选但不建议使用)启用用户友好的名称:

    1. 取消注释 defaults 部分及其结尾括号。

    2. 取消注释 user_friendly_names 选项,然后将其值从 No 更改为 Yes。

      例如:

      ## Use user-friendly names, instead of using WWIDs as names.
      defaults {
        user_friendly_names yes
      }
  4. (可选)使用 multipath 部分中的 alias 选项为设备指定您自己的名称。

    例如:

    ## Use alias names, instead of using WWIDs as names.
    multipaths {
           multipath {
                   wwid           36006048000028350131253594d303030
                   alias             blue1
           }
           multipath {
                   wwid           36006048000028350131253594d303041
                   alias             blue2
           }
           multipath {
                   wwid           36006048000028350131253594d303145
                   alias             yellow1
           }
           multipath {
                   wwid           36006048000028350131253594d303334
                   alias             yellow2
           }
    }
    重要
    重要:WWWID 与 WWN 的比较

    /etc/multipath.conf 文件中定义设备别名时,请确保使用每个设备的 WWID(如 3600508e0000000009e6baa6f609e7908)而不是它的 WWN(以 0x 替换设备 ID 的第一个字符,如 0x600508e0000000009e6baa6f609e7908)。

  5. 保存更改,然后关闭该文件。

  6. 修改 /etc/multipath.conf 文件后,必须在系统上运行 dracut -f 重新创建 initrd,然后重启动服务器,更改才会生效。有关详细信息,请参见第 17.6.4 节 “应用 /etc/multipath.conf 文件更改以更新多路径映射”

如果要直接使用整个 LUN(例如,如果您使用 SAN 功能对储存区分区),可为 mkfsfstab、应用程序等使用 /dev/disk/by-id/xxx 名称。已分区设备的设备名称后将追加 _part<n>,例如 /dev/disk/by-id/xxx_part1

/dev/disk/by-id 目录中,通过设备名 dm-uuid* 或别名(如果在 /etc/multipath.conf 文件中为其指派了别名)表示多路径映射设备。设备名 scsi-wwn- 表示设备的物理路径。

17.9.1 HA 群集中的多路径设备名称

请执行下列操作来确保多路径设备名称在所有设备中都相同:

  • 使用 UUID 和别名确保多路径设备名称在集群中的所有节点上保持一致。别名在所有节点上必须唯一。将 /etc/multipath.conf 文件从该节点复制到群集中所有其他节点的 /etc/ 目录下。

  • 当使用多路径映射设备的链接时,请确保在 /dev/disk/by-id 目录中指定 dm-uuid* 名称或别名,而不是设备的固定路径实例。有关信息,请参阅第 17.9 节 “配置用户用好的名称或别名”

  • user_friendly_names 配置选项设置为“no”以禁用它。用户友好名称对某个节点是唯一的,但集群中各个节点上的设备不得指派相同的用户友好名称。

注意
注意:用户友好名称

如果您确实需要使用用户友好名称,则可以执行下列操作,强制系统定义的用户友好名称在群集的所有节点中保持一致:

  1. 在一个节点上的 /etc/multipath.conf 文件中:

    1. user_friendly_names 配置选项设置为“yes”以启用它。

      多路径会使用 /var/lib/multipath/bindings 文件,在 /dev/mapper 目录中以 mpath<N> 格式为设备指派一个永久的唯一名称。

    2. (可选)设置 /etc/multipath.conf 文件的 defaults 部分中的 bindings_file 选项,以指定 bindings 文件的备用位置。

      默认位置为 /var/lib/multipath/bindings

  2. 设置该节点上的所有多路径设备。

  3. /etc/multipath.conf 文件从该节点复制到群集中所有其他节点的 /etc/ 目录下。

  4. 从该节点将 bindings 文件复制到集群中所有其他节点的 bindings_file 路径。

  5. 修改 /etc/multipath.conf 文件后,必须在系统上运行 dracut -f 重新创建 initrd,然后重启动节点,更改才会生效。有关细节,请参见第 17.6.4 节 “应用 /etc/multipath.conf 文件更改以更新多路径映射”。这适用于所有受影响的节点。

17.10 配置路径故障转移策略和优先级

在 Linux 主机中,当存在多个路径到某储存控制器时,每个路径都显示为独立的块设备,导致单个 LUN 有多个块设备。设备映射程序多路径服务检测到具有同一 LUN ID 的多个路径,并使用该 ID 创建了一个新的多路径设备。例如,如果具有两个 HBA 的主机通过单个未确定区域的光纤通道交换机挂接到一个带两个端口的储存控器,则会看到四个块设备:/dev/sda/dev/sdb/dev/sdc/dev/sdd。设备映射程序多路径服务会创建单个块设备 /dev/mpath/mpath1,由它来通过以上四个底层块设备重新路由 I/O。

本节描述如何指定故障转移策略和配置路径的优先级。请注意,修改 /etc/multipath.conf 文件后,必须在系统上运行 dracut -f 重新创建 initrd,然后重启动服务器,更改才会生效。有关详细信息,请参见第 17.6.4 节 “应用 /etc/multipath.conf 文件更改以更新多路径映射”

17.10.1 配置路径故障转移策略

使用带 -p 选项的 multipath 命令来设置路径故障转移策略:

sudo multipath DEVICENAME -p POLICY

POLICY 替换为以下策略选项之一:

表 17.5︰ multipath -p 命令的组策略选项

策略选项

描述

failover

(默认)每个优先级组对应一个路径。

multibus

一个优先级组中的所有路径。

group_by_serial

每个检测到的序列号一个优先级组。

group_by_prio

每个路径优先级值一个优先级组。优先级由调出程序在 /etc/multipath.conf 配置文件中指定为 global、per-controller 或 per-multipath 选项来确定。

group_by_node_name

每个目标节点名一个优先级组。目标节点名是在 /sys/class/fc_transport/target*/node_name 位置获取的。

17.10.2 配置故障转移优先级

必须在 /etc/multipath.conf 文件中手动输入设备的故障转移优先级。/usr/share/doc/packages/multipath-tools/multipath.conf.annotated 文件中有所有设置和选项的示例。

17.10.2.1 了解优先级组和属性

优先级组是通向同一物理 LUN 的路径的集合。默认情况下,I/O 在组中的所有路径中以循环方式分布。multipath 命令会基于 SAN 的 path_grouping_policy 设置为该 SAN 中的每个 LUN 自动创建优先级组。multipath 命令将一个组中的路径数乘以该组的优先级以确定哪个组是主组。计算出的值最高的组即是主组。当主组中的所有路径失败时,具有下一个最高值的优先级组即变为活动的组。

路径优先级是指派给一个路径的整数值。值越高,优先级越高。将使用一个外部程序来指派每个路径的优先级。对于给定的设备,具有相同优先级的路径属于同一优先级组。

prio 设置在 /etc/multipath.conf 文件的 defaults{}devices{} 部分中使用。当为 multipaths 部分的单个 multipath 定义指定该设置时,系统会无提示地将它忽略。prio 行用于指定优先级排序程序。如果优先级排序程序需要自变量,您要在第二行上使用 prio_args 关键字指定自变量。

Defaults 或 Devices 部分的 PRIO 设置

prio

指定要调用的优先级排序程序,以获取路径优先级的值。将加总每个路径组的权重以确定发生故障时要使用的下一个路径组。

如果指定的优先级排序程序需要自变量,则使用关键字 prio_args 指定自变量。

如果未指定关键字 prio,则所有路径具有相同优先级。默认设置为 const,且 prio_args 设置为空。

prio "const"
prio_args ""

优先级排序程序示例如下:

优先级排序程序

描述

alua

基于 SCSI-3 ALUA 设置生成路径优先级。

const

为所有路径生成同一优先级。

emc

为 EMC 阵列生成路径优先级。

hdc

为 Hitachi HDS Modular 储存阵列生成路径优先级。

hp_sw

为活动/备用模式的 Compaq/HP 控制器生成路径优先级。

ontap

为 NetApp 阵列生成路径优先级。

random

为每个路径生成随机优先级。

rdac

为 LSI/Engenio RDAC 控制器生成路径优先级。

weightedpath

根据您在 prio_args 的自变量中指定的加权值生成路径优先级。

path_latency

根据延迟算法生成路径优先级,该算法通过 prio_args 关键字配置。

prio_args

为需要自变量的指定优先级排序程序指定自变量。大多数 prio 程序并不需要自变量。

无默认值。该值取决于 prio 设置以及优先级排序程序是否需要自变量。

prio_args 自变量

说明

weighted

需要格式为 [hbtl|devname|serial|wwn] REGEX1 PRIO1 REGEX2 PRIO2... 的值

hbtl
   Regex must be of SCSI H:B:T:L format, for example  1:0:.:.
   and *:0:0:., with a weight value, where H, B, T, L are the
   host, bus, target, and LUN  IDs for a device. For example:

   prio "weightedpath"
   prio_args "hbtl 1:.:.:. 2 4:.:.:. 4"

devname

Regex 为设备名称格式。例如:sda、sd.e

serial

Regex 为序列号格式。For example: .*J1FR.*324。请使用 multipathd show paths format %z 命令查询您的序列号。(multipathd show wildcards 会显示所有 format 通配符。)

path_latency

如果远程储存阵列和本地储存阵列使用的是相同类型的硬件,您可以使用 path_latency 调整这两个阵列之间的延迟。通常情况下,远程阵列上的延迟会更高。这需要格式为 io_num=20 base_num=10 的值对。

io_num
   The number of read IOs sent to the current path continuously, which
   are used to calculate the average path latency. Valid values are
   integers from  2 to 200.

base_num
   The base number value of logarithmic scale, used to partition
   different priority ranks. Valid values: Integer, 2 - 10. The maximum
   average latency value is 100s, the minimum is 1us. For example:
   If  base_num=10, the paths will be grouped in priority groups with
   path  latency <=1us, (1us, 10us], (10us, 100us], (100us, 1ms],
   (1ms, 10ms], (10ms, 100ms], (100ms, 1s], (1s, 10s], (10s, 100s],
   >100s

alua

如果为某个设备 (alua exclusive_pref_bit) 设置了 exclusive_pref_bit,那么设置了 preferred path 的路径将始终在其自身的路径组中。

多路径属性

多路径属性用于控制设备的多路径 I/O 行为。您可以按默认方式为所有多路径设备指定属性。也可以通过在多路径配置文件的 multipaths 部分中创建设备项的方式,指定仅对指定多路径设备应用的属性。

user_friendly_names

指定是使用全球 ID (WWID) 还是使用 /var/lib/multipath/bindings 文件以 /dev/mapper/mpathN 的格式为多路径设备指派一个永久唯一的别名。

此选项可以在 devices 部分和 multipaths 部分使用。

描述

no

(默认)使用 /dev/disk/by-id/ 位置中显示的 WWID。

yes

自动生成用户友好的名称作为多路径设备的别名而不是实际 ID。

failback

指定是否监视失败路径恢复,并指明失败路径重新使用之后组故障回复的时间。

当失败的路径恢复后,系统会根据此设置将该路径重新添加到支持多路径的路径列表中。多路径计算优先级组,并在主路径的优先级超出备用组时更改活动优先级组。

描述

manual

(默认)不监视失败的路径是否恢复。管理员运行 multipath 命令以更新启用的路径和优先级组。

followover

仅当路径组的第一个路径激活时才执行自动故障回复。这可以防止某个节点在另一个节点请求了故障转移时自动故障回复。

immediate

当一个路径恢复时,立即启用该路径。

N

当路径恢复时,等待 N 秒再启用该路径。指定大于 0 的整数值。

为了防止多路径故障转移出现乒乓效应,建议将群集环境下的多路径故障回复设置为 manual

failback "manual"
重要
重要:校验

请务必向您的储存系统供应商确认故障回复设置。不同的储存系统可能会有不同的设置要求。

no_path_retry

指定在路径失败时使用的行为。

描述

N

指定 multipath 停止排队和路径失败之前的重试次数。指定大于 0 的整数值。

在群集中,您可以将值指定为 0 以避免发生排队现象,并允许资源进行故障转移。

fail

指定立即失败(不排队)。

queue

永不停止排队(一直排队,直到该路径成为活动路径)。

在群集中工作时,建议在 /etc/multipath.conf 文件中将重试设置设为 fail0。如此一来,当与储存的连接中断时便可让资源进行故障转移。否则会将消息排队而不会发生资源故障转移。

no_path_retry "fail"
no_path_retry "0"
重要
重要:校验

请务必向您的储存系统供应商确认重试设置。不同的储存系统可能会有不同的设置要求。

path_checker

确定路径的状态。

描述

directio

读取具有直接 I/O 的第一个扇区,这对于 DASD 设备非常有用。在 systemd 日记中记录失败讯息(请参见Book “管理指南”, Chapter 15 “journalctl:查询 systemd 日记”)。

tur

向设备发出 SCSI 测试单元就绪命令。如果 LUN 支持,则这是首选设置。如果命令失败,它不会在 systemd 日志中填入讯息。

CUSTOM_VENDOR_VALUE

一些 SAN 供应商提供了自定义的 path_checker 选项:

  • cciss_tur:: 检查 HP 智能储存阵列的路径状态。

  • emc_clariion:: 查询 EMC Clariion EVPD 页 0xC0 以确定路径状态。

  • hp_sw: 使用活动/备用固件检查 HP 储存阵列的路径状态(Up、Down 还是 Ghost)。

  • rdac: 检查 LSI/Engenio RDAC 储存控制器的路径状态。

path_grouping_policy

指定由给定控制器托管的多路径设备的路径分组策略。

描述

failover

(默认)为每个优先级组指派一个路径,以便每次只使用一个路径。

multibus

所有有效路径在一个优先级组中。通讯在该组所有活动路径之间平衡负载。

group_by_prio

对于每个路径优先级值,都存在一个优先级组。具有相同优先级的路径在同一优先级组中。优先级由外部程序指派。

group_by_serial

路径按 SCSI 目标序列号(控制器节点 WWN)分组。

group_by_node_name

每个目标节点名指派一个优先级组。目标节点名是在 /sys/class/fc_transport/target*/node_name 中获取的。

path_selector

指定用于负载平衡的 path-selector 算法。

描述

round-robin 0

用于平衡优先级组中所有活动路径之间的通讯的负载平衡算法。

queue-length 0

用于平衡路径上运行中 I/O 数的动态负载平衡器,类似于 least-pending 选项。

service-time 0

(默认值)面向服务时间的、用于根据延迟情况来平衡多个路径上的 I/O 的负载平衡器。

pg_timeout

指定路径组超时处理。不能指定任何值,已设置了内部默认值。

polling_interval

指定某个路径检查周期结束到下一个路径检查周期开始之间的时间(以秒为单位)。

指定大于 0 的整数值。默认值为 5。请务必向您的储存系统供应商确认 polling_interval 设置。不同的储存系统可能会有不同的设置要求。

rr_min_io_rq

指定在使用基于请求的 device-mapper-multipath 切换到当前路径组中的下一个路径前,路由至某个路径的 I/O 请求的数量。

指定大于 0 的整数值。默认值是 1。

rr_min_io_rq "1"
rr_weight

指定用于路径的加权方法。

描述

uniform

(默认)所有路径具有相同的循环复用权重。

priorities

每个路径的权重通过路径的优先级乘以 rr_min_io_rq 设置来确定。

uid_attribute

提供唯一路径标识符的 udev 属性。默认值为 ID_SERIAL

17.10.2.2 配置循环负载平衡

所有路径都是活动的。I/O 被配置为等候数秒或一定的 I/O 事务数,再移到序列中下一个打开的路径。

17.10.2.3 配置单路径故障转移

具有最高优先级(设置值为最低)的一个路径是活动的,可以进行通讯。其他路径可用于故障转移,但在发生故障转移前不会使用。

17.10.2.4 为循环负载平衡将 I/O 路径分组

具有相同优先级的多个路径分在活动的组中。当该组中的所有路径失败时,设备会故障转移到下一个最高优先级的组。该组中的所有路径以循环负载平衡的方式共享通讯负载。

17.10.3 报告目标路径组

使用 SCSI 报告目标端口组 (sg_rtpg(8)) 命令。有关信息,请参见 sg_rtpg(8) 的手册页。

17.11 为根设备配置多路径 I/O

SUSE Linux Enterprise Server 中的 /boot/root 可以使用并支持设备映射程序多路径 I/O (DM-MPIO)。此外,YaST 安装程序中的 YaST 分区程序支持在安装时启用多路径。

17.11.1 安装时启用多路径 I/O

要在多路径设备上安装操作系统,安装时必须运行多路径软件。multipathd 守护程序在系统安装过程中不会自动激活。您可以使用 YaST 分区程序中的配置多路径选项来启动它。

17.11.1.1 安装时在主动/主动多路径储存 LUN 上启用多路径 I/O

  1. 安装期间,在建议的分区屏幕上选择专家分区程序

  2. 选择硬盘主图标,单击配置按钮,然后选择配置多路径

  3. 启动多路径。

    YaST 会开始重扫描磁盘,并显示可用的多路径设备(如 /dev/disk/by-id/dm-uuid-mpath-3600a0b80000f4593000012ae4ab0ae65)。它是应做所有进一步处理的设备。

  4. 单击下一步继续安装。

17.11.1.2 安装时在主动/被动多路径储存 LUN 上启用多路径 I/O

multipathd 守护程序在系统安装过程中不会自动激活。您可以使用 YaST 分区程序中的配置多路径选项来启动它。

在安装时为主动/被动多路径储存 LUN 启用多路径 I/O:

  1. 安装期间,在建议的分区屏幕上选择专家分区程序

  2. 选择硬盘主图标,单击配置按钮,然后选择配置多路径

  3. 启动多路径。

    YaST 会开始重扫描磁盘,并显示可用的多路径设备(如 /dev/disk/by-id/dm-uuid-mpath-3600a0b80000f4593000012ae4ab0ae65)。它是应做所有进一步处理的设备。记下设备路径和 UUID,您以后会需要这些信息。

  4. 单击下一步继续安装。

  5. 所有设置都设好且安装完成后,YaST 即会开始写入引导加载程序信息,并显示重启动系统的倒计时。单击停止按钮停止倒计时,然后按 CtrlAltF5 访问控制台。

  6. 通过控制台确定是否在 /boot/grub/device.map 文件中为 hd0 条目输入了不活动路径。

    这一点是必需的,因为安装时不会区分活动和不活动路径。

    1. 输入以下命令将根设备装入 /mnt

      mount /dev/disk/by-id/UUID;_part2 /mnt

      例如,输入

      mount /dev/disk/by-id/dm-uuid-mpath-3600a0b80000f4593000012ae4ab0ae65_part2 /mnt
    2. 输入以下命令将引导设备装入 /mnt/boot

      mount /dev/disk/by-id/UUID_part1 /mnt/boot

      例如,输入

      mount /dev/disk/by-id/dm-uuid-mpath-3600a0b80000f4593000012ae4ab0ae65_part2 /mnt/boot
    3. /mnt/boot/grub/device.map 文件中,确定 hd0 条目是否指向不活动路径,然后执行下列其中一项操作:

      • 活动路径:: 不需要执行任何操作。跳过所有剩余的步骤,按 CtrlAltF7 返回 YaST 图形环境,然后继续安装。

      • 不活动路径:: 必须更改配置并重新安装引导加载程序。

  7. 如果 hd0 条目指向不活动路径,请更改配置并重新安装引导加载程序:

    1. 在控制台提示符处输入以下命令:

                mount -o bind /dev /mnt/dev
                mount -o bind /sys /mnt/sys
                mount -o bind /proc /mnt/proc
                chroot /mnt
    2. 在控制台中,运行 multipath -ll,然后检查输出以找到活动路径。

      不活动路径标有 ghost 字样。

    3. /boot/grub/device.map 文件中,将 hd0 条目更改为活动路径,保存更改并关闭文件。

    4. 输入以下命令重新安装引导加载程序

                grub-install /dev/disk/by-id/UUID_part1 /mnt/boot

      例如,输入

      grub-install /dev/disk/by-id/dm-uuid-mpath-3600a0b80000f4593000012ae4ab0ae65_part2 /mnt/boot
    5. 输入以下命令:

      exit
      umount /mnt/*
      umount /mnt
  8. CtrlAltF7 返回 YaST 图形环境。

  9. 单击确定继续安装重引导。

17.11.2 为现有根设备启用多路径 I/O

  1. 将 Linux 安装为仅有一个路径活动,最好是分区程序中列出 by-id 符号链接的路径。

  2. 使用安装期间使用的 /dev/disk/by-id 路径装入设备。

  3. 打开或创建 /etc/dracut.conf.d/10-mp.conf 并添加以下行(请注意前导空格):

    force_drivers+=" dm-multipath"
  4. 对于 IBM Z,在运行 dracut 之前先编辑 /etc/zipl.conf 文件,以 /etc/fstab 中使用的相同 by-id 信息更改 zipl.conf 中的 by-path 信息。

  5. 运行 dracut -f 更新 initrd 映像。

  6. 对于 IBM Z,在运行 dracut 之后运行 zipl

  7. 重引导服务器。

17.11.3 禁用根设备上的 I/O 多路径

向内核命令行中添加 multipath=off。这可以通过 YaST 引导加载程序模块来完成。打开引导加载程序安装 ›  内核参数,并将参数添加到两个命令行中。

这仅会影响根设备。不会影响所有其他设备。

17.12 为现有软件 RAID 配置多路径 I/O

理想的情况下,应先为设备配置多路径,再将这些设备用作软件 RAID 设备的组件。如果创建任何软件 RAID 设备之后添加多路径,则在重引导时,DM-MPIO 服务可能会比 multipath 服务启动得晚,导致多路径似乎不可用于 RAID。您可以使用本节中的过程使多路径对先前现有的软件 RAID 运行。

例如,您可能需要在以下情况中对软件 RAID 中的设备配置多路径:

  • 如果在全新安装或升级期间将一个新的软件 RAID 创建为分区设置的一部分。

  • 如果在软件 RAID 将设备用作成员设备或备用设备之前,没有将这些设备配置为支持多路径。

  • 如果通过向服务器添加新的 HBA 适配器或扩展 SAN 中的储存子系统而增加了系统规模。

注意
注意:假设条件

以下说明假定软件 RAID 设备是 /dev/mapper/mpath0,这是内核可以识别的设备名。它假设您已按照第 17.9 节 “配置用户用好的名称或别名”所述在 /etc/multipath.conf 文件中启用了用户友好的名称。

确保将这些说明中的设备名修改为您的软件 RAID 的设备名。

  1. 打开一个终端控制台。

    除非另行说明,请使用此控制台输入以下步骤中的命令。

  2. 如果当前已装入或正在运行任何软件 RAID 设备,请对每个设备输入以下命令来卸载并停止设备。

    sudo umount /dev/mapper/mpath0
    sudo mdadm --misc --stop /dev/mapper/mpath0
  3. 输入以下命令停止 md 服务

    sudo systemctl stop mdmonitor
  4. 输入以下命令启动 multipathd 守护程序:

    systemctl start multipathd
  5. 启动多路径服务之后,校验软件 RAID 的组件设备是否列在 /dev/disk/by-id 目录中。执行以下操作之一:

    • 已列出设备:: 现在设备名应已具有到其设备映射程序多路径设备名的符号链接,例如 /dev/dm-1

    • 未列出设备:: 输入以下命令清理并重新发现设备,强制多路径服务识别它们

      sudo multipath -F
      sudo multipath -v0

      这些设备现在应已在 /dev/disk/by-id 中列出,并且有到其设备映射程序多路径设备名的符号链接。例如:

      lrwxrwxrwx 1 root root 10 2011-01-06 11:42 dm-uuid-mpath-36006016088d014007e0d0d2213ecdf11 -> ../../dm-1
  6. 输入以下命令重启动 mdmonitor 服务和 RAID 设备

    systemctl start mdmonitor
  7. 通过输入以下命令,检查软件 RAID 的状态

    mdadm --detail /dev/mapper/mpath0

    RAID 的组件设备应匹配在 /dev/disk/by-id 目录中列为设备符号链接的设备映射程序多路径设备名。

  8. 如果根 (/) 设备或其任何部分(例如 /var/etc/log)位于 SAN 上,并且需要使用多路径引导,请重构建 initrd

    dracut -f --add-multipath
  9. 重引导服务器以应用更改。

  10. 通过检查 RAID 状态,校验软件 RAID 阵列在多路径设备之上正确工作。输入

    mdadm --detail /dev/mapper/mpath0

    例如:

    Number Major Minor RaidDevice State
    0 253 0 0 active sync /dev/dm-0
    1 253 1 1 active sync /dev/dm-1
    2 253 2 2 active sync /dev/dm-2
注意
注意:对多路径设备使用 mdadm

mdadm 工具要求使用 ID 而不是设备节点路径访问设备。有关详细信息,请参见第 17.4.3 节 “对多路径设备使用 MDADM”

17.13 在多路径设备上使用 LVM2

使用多路径时,资源的所有路径都显示为设备树中的设备。默认情况下,LVM 会检查设备树中任何设备的顶层是否存在多路径设备。如果 LVM 在顶层找到了多路径设备,它会假设该设备是多路径组件,并忽略(底层)设备。这很可能是您期望的行为,但也可以在 /etc/lvm/lvm.conf 中更改。如果将 multipath_component_detection 设置为 0,LVM 会扫描多路径组件设备。lvm.conf 中的默认项是:

    # By default, LVM2 will ignore devices used as component paths
    # of device-mapper multipath devices.
    # 1 enables; 0 disables.
    multipath_component_detection = 1

17.14 最佳实践

17.14.1 在不重引导的情况下扫描新设备

如果系统已针对多路径进行配置并且稍后需要向 SAN 添加更多储存区,则可以使用脚本 rescan-scsi-bus.sh 扫描新设备。默认情况下,此脚本将扫描具有典型 LUN 范围的所有 HBA。该命令的一般语法如下所示:

rescan-scsi-bus.sh [options] [host [host ...]]

对于大多数储存子系统,此脚本可在无选项的情况下成功运行。不过,在某些特殊情况下,可能需要使用一或多个选项。有关细节,请运行 rescan-scsi-bus.sh --help

警告
警告:EMC PowerPath 环境

在 EMC PowerPath 环境中,请勿使用操作系统随附的 rescan-scsi-bus.sh 实用程序或 HBA 供应商脚本来扫描 SCSI 总线。为了避免可能发生的文件系统损坏,EMC 要求您遵照 EMC PowerPath for Linux 的供应商文档中提供的过程操作。

使用以下过程扫描设备并在不重引导系统的情况下使这些设备可用于多路径。

  1. 在储存子系统上,使用供应商的工具分配设备并更新其访问控制设置,以允许 Linux 系统访问新的储存区。有关细节,请参见供应商的文档。

  2. 在所有目标中扫描查找一个主机,使其新设备为 Linux 内核 SCSI 子系统的中间层所知。在终端控制台提示符下,输入

    sudo rescan-scsi-bus.sh

    根据您的设置,您可能需要结合可选参数运行 rescan-scsi-bus.sh。有关细节,请参见 rescan-scsi-bus.sh --help

  3. 请在 systemd 日记中检查扫描进度(有关细节,请参见Book “管理指南”, Chapter 15 “journalctl:查询 systemd 日记”)。在终端控制台提示符下,输入

    sudo journalctl -r

    此命令显示日志的最后 行。例如:

    tux > sudo journalctl -r
    Feb 14 01:03 kernel: SCSI device sde: 81920000
    Feb 14 01:03 kernel: SCSI device sdf: 81920000
    Feb 14 01:03 multipathd: sde: path checker registered
    Feb 14 01:03 multipathd: sdf: path checker registered
    Feb 14 01:03 multipathd: mpath4: event checker started
    Feb 14 01:03 multipathd: mpath5: event checker started
    Feb 14 01:03:multipathd: mpath4: remaining active paths: 1
    Feb 14 01:03 multipathd: mpath5: remaining active paths: 1
    [...]
  4. 重复上述步骤,以添加通过 Linux 系统上连接到新设备的其他 HBA 适配器的路径。

  5. 运行 multipath 命令以识别 DM-MPIO 配置的设备。在终端控制台提示符下,输入

    sudo multipath

    现在可以为多路径配置新设备了。

17.14.2 在不重引导的情况下扫描新的分区设备

使用本节中的示例,在不重引导的情况下检测新添加的多路径 LUN。

警告
警告:EMC PowerPath 环境

在 EMC PowerPath 环境中,请勿使用操作系统随附的 rescan-scsi-bus.sh 实用程序或 HBA 供应商脚本来扫描 SCSI 总线。为了避免可能发生的文件系统损坏,EMC 要求您遵照 EMC PowerPath for Linux 的供应商文档中提供的过程操作。

  1. 打开一个终端控制台。

  2. 在所有目标中扫描查找一个主机,使其新设备为 Linux 内核 SCSI 子系统的中间层所知。在终端控制台提示符下,输入

    rescan-scsi-bus.sh

    根据您的设置,您可能需要结合可选参数运行 rescan-scsi-bus.sh。有关细节,请参见 rescan-scsi-bus.sh --help

  3. 通过输入以下命令校验该设备是否可见(例如链接是否有一个新的时戳)

    ls -lrt /dev/dm-*

    您也可以通过输入以下命令来校验设备存在于 /dev/disk/by-id

    ls -l /dev/disk/by-id/
  4. 通过输入以下命令,校验新设备是否出现在日志中

    sudo journalctl -r
  5. 使用文本编辑器,在 /etc/multipath.conf 文件中为该设备添加新的别名定义,例如 data_vol3

    例如,如果 UUID 是 36006016088d014006e98a7a94a85db11,则进行以下更改:

    defaults {
         user_friendly_names   yes
      }
    multipaths {
         multipath {
              wwid    36006016088d014006e98a7a94a85db11
              alias  data_vol3
              }
      }
  6. 通过输入以下命令,为该设备创建分区表

    fdisk /dev/disk/by-id/dm-uuid-mpath-<UUID>

    使用设备的 WWID(如 36006016088d014006e98a7a94a85db11)替换 UUID。

  7. 通过输入以下命令触发 udev

    sudo echo 'add' > /sys/block/DM_DEVICE/uevent

    例如,要为 dm-8 上的分区生成设备映射程序设备,请输入

    sudo echo 'add' > /sys/block/dm-8/uevent
  8. 在设备 /dev/disk/by-id/dm-uuid-mpath-UUID_partN 上创建文件系统。根据您选择的文件系统,您可以使用以下其中一个命令实现此目的:mkfs.btrfs mkfs.ext3mkfs.ext4mkfs.xfs。有关细节,请参见相应的手册页。用实际的 UUID 和分区编号替换 UUID_partN,例如 36006016088d014006e98a7a94a85db11_part1。

  9. 输入以下命令为新分区创建标签:

    sudo tune2fs -L LABELNAME /dev/disk/by-id/dm-uuid-UUID_partN

    用实际的 UUID 和分区编号替换 UUID_partN,例如 36006016088d014006e98a7a94a85db11_part1。用您选择的标签替换 LABELNAME

  10. 输入以下命令以重配置 DM-MPIO,使其读取别名:

    sudo multipathd -k'reconfigure'
  11. 通过输入以下命令,校验该设备已由 multipathd 识别

    sudo multipath -ll
  12. 使用文本编辑器在 /etc/fstab 文件中添加新的装入项。

    此时,您在上一步中创建的别名还不在 /dev/disk/by-label 目录中。为 /dev/dm-9 路径添加一个装入项,然后在下次重引导到以下项目之前更改该项目

    LABEL=LABELNAME
  13. 创建要作为安装点的目录,然后装入设备。

17.14.3 查看多路径 I/O 状态

查询多路径 I/O 状态会输出多路径映射的当前状态。

multipath -l 选项可显示从上次运行路径检查程序以来的当前路径状态。它不会运行路径检查程序。

multipath -ll 选项运行路径检查程序,更新路径信息,然后显示当前状态信息。此命令始终显示关于路径状态的最新信息。

tux > sudo multipath -ll
3600601607cf30e00184589a37a31d911
[size=127 GB][features="0"][hwhandler="1 emc"]

\_ round-robin 0 [active][first]
  \_ 1:0:1:2 sdav 66:240  [ready ][active]
  \_ 0:0:1:2 sdr  65:16   [ready ][active]

\_ round-robin 0 [enabled]
  \_ 1:0:0:2 sdag 66:0    [ready ][active]
  \_ 0:0:0:2 sdc  8:32    [ready ][active]

对于每个设备,它显示该设备的 ID、大小、功能和硬件处理程序。

在设备发现时,通向该设备的路径会自动分组为多个优先级组。一次只有一个优先级组是活动的。对于活动/活动配置,所有路径均在同一组中。对于活动/不活动配置,不活动的路径会放在另外的优先级组中。

会针对每个组显示下列信息:

  • 用于在组内平衡 I/O 的日程安排策略,例如循环

  • 该组为活动、已禁用还是已启用

  • 该组是否是第一个(最高优先级)组

  • 该组内包含的路径

会针对每个路径显示下列信息:

  • 物理地址,格式为 HOST:BUS:TARGET:LUN,例如 1:0:1:2

  • 设备节点名,例如 sda

  • 主要:次要编号

  • 设备的状态

17.14.4 在错误状况下管理 I/O

如果所有路径同时失败,则可能需要通过启用 queue_if_no_path 来配置多路径以使 I/O 排队。否则,I/O 将在通过所有路径后立即失败。在某些情形下,即驱动程序、HBA 或光纤遇到欺骗性错误时,应该将 DM-MPIO 配置为在这些错误导致丢失所有路径时将所有 I/O 排队,并且永不向上散播错误。

在群集中使用多路径设备时,可以选择禁用 queue_if_no_path。这会自动使路径失败,而不是使 I/O 排队,并升级 I/O 错误以引发群集资源的故障转移。

因为启用 queue_if_no_path 会导致 I/O 无限排队(除非有一个路径恢复),所以请确保 multipathd 正在运行且在您的环境中起作用。否则,可能需要在受影响的多路径设备上永远停止 I/O,直到重引导或手动返回到故障转移而不是排队。

测试该情形:

  1. 打开一个终端控制台。

  2. 输入以下命令激活设备 I/O 的排队而非故障转移

    sudo dmsetup message DEVICE_ID 0 queue_if_no_path

    DEVICE_ID 替换为您设备的 ID。值 0 代表扇区,在不需要扇区信息时使用该值。

    例如,输入:

    sudo dmsetup message 3600601607cf30e00184589a37a31d911 0 queue_if_no_path
  3. 输入以下命令返回到设备 I/O 的故障转移

    sudo dmsetup message DEVICE_ID 0 fail_if_no_path

    该命令会立即导致所有排队的 I/O 失败。

    DEVICE_ID 替换为您设备的 ID。例如,输入

    sudo dmsetup message 3600601607cf30e00184589a37a31d911 0 fail_if_no_path

在所有路径失败的情形下设置将 I/O 排队:

  1. 打开一个终端控制台。

  2. 在文本编辑器中打开 /etc/multipath.conf

  3. 取消注释 defaults 部分及其结尾括号,然后如下所示添加 default_features 设置:

    defaults {
      default_features "1 queue_if_no_path"
    }
  4. 修改 /etc/multipath.conf 文件后,您必须运行 dracut -f 在系统中重新创建 initrd,然后重引导以使更改生效。

  5. 当您准备好返回到设备 I/O 的故障转移时,请输入

    sudo dmsetup message MAPNAME 0 fail_if_no_path

    MAPNAME 替换为该设备映射的别名或设备 ID。值 0 代表扇区,在不需要扇区信息时使用该值。

    此命令会立即导致所有排队的 I/O 失败,并且将该错误传播到调用的应用程序。

17.14.5 解决停止的 I/O

如果所有路径同时失败,并且 I/O 排队并停止,请执行以下操作:

  1. 在终端控制台提示符下输入以下命令:

    sudo dmsetup message MAPNAME 0 fail_if_no_path

    MAPNAME 替换为设备的正确设备 ID 或映射别名。值 0 代表扇区,在不需要扇区信息时使用该值。

    此命令会立即导致所有排队的 I/O 失败,并且将该错误传播到调用的应用程序。

  2. 输入以下命令重新激活排队:

    sudo dmsetup message MAPNAME 0 queue_if_no_path

17.14.6 配置 IBM Z 设备的默认设置

对具有多路径功能的 IBM Z 设备进行的测试表明,应将 dev_loss_tmo 参数设置为无穷 (2147483647),将 fast_io_fail_tmo 参数设置为 5 秒。如果您使用的是 IBM Z 设备,请修改 /etc/multipath.conf 文件,指定如下值:

defaults {
       dev_loss_tmo 2147483647
       fast_io_fail_tmo 5
}

dev_loss_tmo 参数设置将某个多路径链接标记为无效之前需等待的秒数。如果路径失败,则已失败路径上的任何当前 I/O 将失败。默认值根据所使用的设备驱动程序而异。要使用驱动程序的内部超时,请将值设置为零 (0)。也可以将其设置为“infinity”或 2147483647,如此会将其设置为最大值 2147483647 秒(68 年)。

fast_io_fail_tmo 参数设置检测到链接问题时将 I/O 确定为失败之前需等待的时间。到达驱动程序的 I/O 将失败。如果 I/O 排在拥堵的队列中,则未到 dev_loss_tmo 时间且队列未疏通之前 I/O 不会失败。

如果您修改了 /etc/multipath.conf 文件,所做的更改只有在您更新多路径映射或重启动 multipathd 守护程序 (systemctl restart multipathd) 后才会应用。

17.14.7 使用 NetApp 设备的多路径

使用适用于 NetApp 设备的多路径时,建议在 /etc/multipath.conf 文件中进行如下设置:

  • 为 NetApp 设备全局设置以下参数的默认值:

    max_fds max
    queue_without_daemon no
  • 在硬件表中为 NetApp 设备的以下参数设置默认值:

    dev_loss_tmo infinity
    fast_io_fail_tmo 5
    features "3 queue_if_no_path pg_init_retries 50"

17.14.8 对多路径设备使用 --noflush

在多路径设备上运行时,应始终使用 --noflush选项。

例如,在执行重新装载表的脚本中,应继续使用 --noflush 选项以确保任何未解决的 I/O 不会被刷新,因为您需要多路径拓扑信息。

load
resume --noflush

17.14.9 根设备为多路径时的 SAN 超时设置

所有路径都已失败并已从系统中去除时,多路径设备上包含根目录 (/) 的系统可能会停止,因为系统会收到储存子系统(例如光纤通道储存阵列)发出的 dev_loss_tmo 超时通知。

如果系统设备配置了多路径,且多路径 no_path_retry 设置处于活动状态,则应相应地修改储存子系统的 dev_loss_tmo 设置,以确保所有路径都失败时不会删除任何设备。强烈建议您将 dev_loss_tmo 值设置为等于或大于多路径的 no_path_retry 设置。

建议按如下方式设置储存子系统的 dev_los_tmo

<dev_loss_tmo> = <no_path_retry> * <polling_interval>

以下定义适用于多路径值:

  • no_path_retry 是将路径视为丢失并停止 IO 排队前多路径 I/O 的重试次数。

  • polling_interval 是路径检查的间隔时间(以秒为单位)。

以上多路径值都应该从 /etc/multipath.conf 配置文件进行设置。有关信息,请参阅第 17.6 节 “创建或修改 /etc/multipath.conf 文件”

17.15 MPIO 查错

本节对 MPIO 的一些已知问题以及可行的解决方案进行了说明。

17.15.1 启用多路径时系统在引导过程中退出到紧急外壳

在引导过程中,系统退出到紧急外壳,并显示类似如下的讯息:

[  OK  ] Listening on multipathd control socket.
         Starting Device-Mapper Multipath Device Controller...
[  OK  ] Listening on Device-mapper event daemon FIFOs.
         Starting Device-mapper event daemon...
         Expecting device dev-disk-by\x2duuid-34be48b2\x2dc21...32dd9.device...
         Expecting device dev-sda2.device...
[  OK  ] Listening on udev Kernel Socket.
[  OK  ] Listening on udev Control Socket.
         Starting udev Coldplug all Devices...
         Expecting device dev-disk-by\x2duuid-1172afe0\x2d63c...5d0a7.device...
         Expecting device dev-disk-by\x2duuid-c4a3d1de\x2d4dc...ef77d.device...
[  OK  ] Started Create list of required static device nodes ...current kernel.
         Starting Create static device nodes in /dev...
[  OK  ] Started Collect Read-Ahead Data.
[  OK  ] Started Device-mapper event daemon.
[  OK  ] Started udev Coldplug all Devices.
         Starting udev Wait for Complete Device Initialization...
[  OK  ] Started Replay Read-Ahead Data.
         Starting Load Kernel Modules...
         Starting Remount Root and Kernel File Systems...
[  OK  ] Started Create static devices
[   13.682489] floppy0: no floppy controllers found
[*     ] (1 of 4) A start job is running for dev-disk-by\x2du...(7s / 1min 30s)
[*     ] (1 of 4) A start job is running for dev-disk-by\x2du...(7s / 1min 30s)

...

Timed out waiting for device dev-disk-by\x2duuid-c4a...cfef77d.device.
[DEPEND] Dependency failed for /opt.
[DEPEND] Dependency failed for Local File Systems.
[DEPEND] Dependency failed for Postfix Mail Transport Agent.
Welcome to emergency shell
Give root password for maintenance
(or press Control-D to continue):

在下列情况下,可能会发生此问题:

过程 17.1︰ 应急外壳:将文件系统加入黑名单

如果根文件系统不在多路径上,却启用了多路径,则需要此修复。在此类设置中,多路径会尝试为未加入黑名单的所有设备设置其路径。由于具有根文件系统的设备已装入,它对于多路径而言是无法访问的,因而会导致路径设置失败。您可以在 /etc/multipath.conf 中将根设备加入黑名单来正确设置多路径,从而修复此问题。

  1. 在紧急外壳中运行 multipath -v2 并确定根文件系统的设备。产生的输出如下所示:

    root # multipath -v2
    Dec 18 10:10:03 | 3600508b1001030343841423043300400: ignoring map

    | : 之间的字符串是加入黑名单所需的 WWID。

  2. 打开 /etc/multipath.conf 并添加以下内容:

    blacklist {
      wwid "WWWID"
    }

    用在上一步中获取的 ID 替换 WWWID。有关详细信息,请参见第 17.8 节 “将非多路径设备列入黑名单”

  3. CtrlD 退出紧急外壳并重引导服务器。

过程 17.2︰ 应急外壳:重构建 initrd

如果 initrd 与系统之间的多路径状态(已启用或已禁用)不相同,则需要执行此修复过程。要修复此问题,请重构建 initrd

  1. 如果已在系统中启用多路径,请通过以下命令重构建支持多路径的 initrd:

    dracut --force --add multipath

    如果已在系统中禁用多路径,请通过以下命令重构建支持多路径的 initrd:

    dracut --force -o multipath
  2. CtrlD 退出紧急外壳并重引导服务器。

过程 17.3︰ 应急外壳:重构建 initrd

如果 initrd 不包含用于访问网络挂接储存的驱动程序,则需要此修复。例如,如果系统是在没有多路径的情况下安装的,或者当添加或更换相应硬件时,就可能需要执行此修复过程。

  1. 将所需的驱动程序添加至文件 /etc/dracut.conf.d/01-dist.conf 中的变量 force_drivers。例如,如果系统包含 hpsa 驱动程序访问的 RAID 控制器,且多路径设备连接到由 qla23xx 驱动程序访问的 QLogic 控制器,该项将会如下所示:

    force_drivers+="hpsa qla23xx"
  2. 使用以下命令重构建 initrd

    dracut -f --add-multipath
  3. 为了防止在挂接网络储存失败时系统引导到紧急模式,建议将装入选项 _netdev 添加到 /etc/fstab 中的相应项。

  4. CtrlD 退出紧急外壳并重引导服务器。

17.15.2 升级到多路径 0.4.9 或更高版本后单个设备的 PRIO 设置不起作用

从 0.4.9 版开始,多路径工具使用 /etc/multipath.conf 文件 defaults{}devices{} 部分中的 prio 设置。当为 multipaths{} 部分中的单个 multipath 定义指定关键字 prio 时,它将被忽略而无反馈。

多路径工具 0.4.8 允许 multipaths{) 部分单个 multipath 定义中的 prio 设置覆盖 defaults{}devices{} 部分中的 prio 设置。

17.15.3 升级到 multipath-tools-0.4.9 或更高版本后带有自变量的 PRIO 设置不起作用

multipath-tools-0.4.8 升级到 multipath-tools-0.4.9 时,若优先级排序程序需要自变量,则 /etc/multipath.conf 文件中的 prio 设置会损坏。在 multipath-tools-0.4.9 中,使用关键字 prio 指定优先级排序程序,使用关键字 prio_args 为需要自变量的优先级排序程序指定自变量。而在早前版本中,优先级排序程序及其自变量均在同一个 prio 行上指定。

例如,在 multipath-tools-0.4.8 中,可使用以下一行命令指定优先级排序程序及其自变量。

prio "weightedpath hbtl [1,3]:.:.+:.+ 260 [0,2]:.:.+:.+ 20"

升级到 multipath-tools-0.4.9 或更高版本后,该命令会导致错误。出现的消息类似如下所示:

<Month day hh:mm:ss> | Prioritizer 'weightedpath hbtl [1,3]:.:.+:.+ 260
[0,2]:.:.+:.+ 20' not found in /lib64/multipath

要解决此问题,请使用文本剪辑器修改 /etc/multipath.conf 文件中的 prio 行。创建两行,其中 prio 行指定优先级排序程序,而下方的 prio_args 行指定其自变量:

prio "weightedpath"
prio_args "hbtl [1,3]:.:.+:.+ 260 [0,2]:.:.+:.+ 20"

运行 sudo systemctl restart multipathd 重启动 multipathd 守护程序,以使更改生效。

17.15.4 技术信息文档

有关 SUSE Linux Enterprise Server 上多路径 I/O 问题的查错信息,请参见 SUSE 知识库中的下列技术信息文档 (TID):

18 管理 NFSv4 访问控制列表

在 Linux 中,除了针对用户、组和其他人 (ugo) 的读取、写入、执行 (rwx) 这些简单标志之外,各访问控制列表 (ACL) 没有统一的标准。控制能力相对较好的一个选择是《Draft POSIX ACLs》(POSIX ACL 草稿),它尚未得到 POSIX 的正式标准化。另一个选择是 NFSv4 ACL,它是 NFSv4 网络文件系统的一部分,目的是为了在 Linux 上的 POSIX 系统与 Microsoft Windows 上的 WIN32 系统之间提供适当的兼容性。

NFSv4 ACL 不足以正确实施草稿 POSIX ACL,因此未进行在 NFSv4 客户端上映射 ACL 访问的尝试(比如使用 setfacl)。

使用 NFSv4 时,即使在仿真模式下也无法使用草稿 POSIX ACL,并且需要直接使用 NFSv4 ACL。这意味着,虽然 setfacl 能够在 NFSv3 上运行,却不能在 NFSv4 上运行。为了能够在 NFSv4 文件系统上使用 NFSv4 ACL,SUSE Linux Enterprise Server 提供了 nfs4-acl-tools 包,其中包含下列各项:

  • nfs4-getfacl

  • nfs4-setfacl

  • nfs4-editacl

这些操作的运作方式与用于检查和修改 NFSv4 ACL 的 getfaclsetfacl 类似。仅当 NFS 服务器上的文件系统提供对 NFSv4 ACL 的全面支持时,这些命令才有效。虽然某些访问控制项 (ACE) 的特定组合可能在客户端中不可用,但客户端上运行的程序都将受到服务器施加的任何限制的影响。

不支持在输出 NFS 服务器上本地装入 NFS 卷。

其他信息

有关信息,请参见 Introduction to NFSv4 ACLs(NFSv4 ACL 简介,网址为 http://wiki.linux-nfs.org/wiki/index.php/ACLs#Introduction_to_NFSv4_ACLs)。