跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Linux Enterprise Server 文档 / 储存管理指南 / 软件 RAID / 使用 mdadm 调整软件 RAID 阵列的大小
适用范围 SUSE Linux Enterprise Server 12 SP5

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 阵列的大小”