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 大小涉及以下任务。执行这些任务的顺序取决于是增加还是减少大小。
任务 |
描述 |
增加大小的顺序 |
减小大小的顺序 |
---|---|---|---|
调整每个组件分区的大小。 |
增加或减小每个组件分区的活动大小。一次仅可删除一个组件分区,修改其大小,然后将其返回到 RAID。 |
1 |
2 |
调整软件 RAID 本身的大小。 |
RAID 不会自动知道您对底层组件分区大小进行的增加或减小操作。您必须向其告知新的大小。 |
2 |
3 |
调整文件系统的大小。 |
必须调整驻留在 RAID 上的文件系统的大小。此操作只适用于提供了用于重设置大小工具的文件系统。 |
3 |
1 |
下列各部分中的程序使用在下表中所示的设备名称。确保使用您自己的设备名称修改这些名称。
RAID 设备 |
组件分区 |
---|---|
|
|
11.1 增加软件 RAID 的大小 #
增大软件 RAID 的大小涉及按给定顺序执行下列任务:增加所有组成 RAID 的所有分区的大小,增加 RAID 本身的大小,最后增加文件系统的大小。
如果 RAID 没有磁盘容错,或只是不一致,则在删除其任何分区的情况下,将会导致数据丢失。删除分区时要非常小心,并确保有可用的数据备份。
11.1.1 增加组件分区的大小 #
应用本节中的过程以增加 RAID 1、4、5 或 6 的大小。对于 RAID 中的每个组件分区,从 RAID 中删除该分区,修改其大小,将其返回到 RAID,然后等待 RAID 稳定下来以继续。删除一个分区时,RAID 会以降级模式运行,没有磁盘容错或降低磁盘容错。即使对于可以容忍多个并行磁盘故障的 RAID,也不要一次删除多个组件分区。若要增加 RAID 组件分区的大小,请执行下列步骤:
打开一个终端控制台。
通过输入以下命令,确保 RAID 阵列一致并同步
cat /proc/mdstat
如果根据此命令的输出,RAID 阵列仍然正在同步,则必须等到同步完成,才能继续。
从 RAID 阵列中删除一个组件分区。例如,要删除
/dev/sda1
,请输入sudo mdadm /dev/md0 --fail /dev/sda1 --remove /dev/sda1
为确保操作成功,必须指定失败和去除操作。
执行下列操作之一,增加在上一步中去除的分区的大小:
使用磁盘分区程序(例如 YaST 分区程序)或命令行工具 parted 增加分区的大小。该选项是通常的选项。
将分区驻留的磁盘替换为高容量设备。仅当系统不访问原始磁盘上的任何其他文件系统时,该选项才可用。当将替换设备添加回 RAID 时,同步数据需要的时间长得多,因为原始设备上的所有数据都必须重构建。
将该分区重新添加到 RAID 阵列。例如,要添加
/dev/sda1
,请输入sudo mdadm -a /dev/md0 /dev/sda1
等到 RAID 同步并一致,然后再继续下一个分区。
对阵列中的每个剩余组件设备重复执行这些步骤。确保按照正确的组件分区修改命令。
如果得到一个消息,告知您内核不能重读 RAID 的分区表,则必须在调整所有分区大小后重引导计算机,以强制更新分区表。
11.1.2 增加 RAID 阵列的大小 #
调整 RAID 中的每个组件分区之后(请参见第 11.1.1 节 “增加组件分区的大小”),RAID 阵列配置将继续使用原始阵列大小,直到您强制其了解新的可用空间。您可以为 RAID 指定大小或使用最大可用空间。
本节中的过程对 RAID 设备使用设备名 /dev/md0
。确保使用您自己的设备名称修改名称。
打开一个终端控制台。
通过输入以下命令,确保 RAID 阵列一致并同步
cat /proc/mdstat
如果根据此命令的输出,RAID 阵列仍然正在同步,则必须等到同步完成,才能继续。
通过输入以下命令,检查阵列了解到的阵列大小和设备大小
sudo mdadm -D /dev/md0 | grep -e "Array Size" -e "Dev Size"
执行以下操作之一:
通过输入以下命令,将阵列大小增加到最大可用大小
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 字节)的整数值。
通过输入以下命令,重新检查阵列了解到的阵列大小和设备大小
sudo mdadm -D /dev/md0 | grep -e "Array Size" -e "Dev Size"
执行以下操作之一:
如果已成功调整阵列大小,请继续第 11.1.3 节 “增加文件系统的大小”。
如果未能和预期一样调整阵列大小,则请重引导,然后重试该过程。
11.1.3 增加文件系统的大小 #
增加阵列大小之后(请参见第 11.1.2 节 “增加 RAID 阵列的大小”),您就准备好调整文件系统大小了。
您可以将文件系统的大小增加到最大可用空间或指定精确大小。为文件系统指定精确大小时,请确保新大小满足以下条件:
新大小必须大于现有数据的大小;否则会发生数据丢失。
新大小必须等于或小于当前 RAID 大小,因为文件系统大小不能超出可用空间。
有关详细,请参见第 2 章 “调整文件系统大小”。
11.2 减小软件 RAID 的大小 #
减少软件 RAID 的大小涉及按顺序完成下列任务:减少文件系统的大小,减少所有组成分区 RAID 的大小,最后减少 RAID 本身的的大小。
如果 RAID 没有磁盘容错,或只是不一致,则在删除其任何分区的情况下,将会导致数据丢失。删除分区时要非常小心,并确保有可用的数据备份。
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
。确保使用您自己的设备名称修改这些命令。
打开一个终端控制台。
通过输入以下命令,检查阵列了解到的阵列大小和设备大小
sudo mdadm -D /dev/md0 | grep -e "Array Size" -e "Dev Size"
输入以下命令将阵列的设备大小减少至指定值
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
通过输入以下命令,重新检查阵列了解到的阵列大小和设备大小
sudo mdadm -D /dev/md0 | grep -e "Array Size" -e "Device Size"
执行以下操作之一:
如果已成功调整阵列大小,请继续第 11.2.3 节 “减小组件分区的大小”。
如果未能和预期一样调整阵列大小,则请重引导,然后重试该过程。
11.2.3 减小组件分区的大小 #
减小 RAID 中每个设备使用的段的大小之后(请参见第 11.2.2 节 “减小 RAID 阵列的大小”),RAID 将不会使用每个组件分区的剩余空间。您可以让分区保持其当前大小,以为 RAID 将来的增长留出空间,或者也可以回收这些当前未使用的空间。
要回收空间,请逐个减少组件分区。对于每个组件分区执行以下步骤:从 RAID 中删除它,减小其分区大小,将该分区装回到 RAID,然后等到 RAID 稳定。要允许元数据,则应指定比您在第 11.2.2 节 “减小 RAID 阵列的大小”中为 RAID 指定的大小略大的大小值。
删除一个分区时,RAID 会以降级模式运行,没有磁盘容错或降低磁盘容错。即使对于可以容忍多个并行磁盘故障的 RAID,也不要一次删除多个组件分区。若要减小 RAID 组件分区的大小,请执行下列步骤:
打开一个终端控制台。
通过输入以下命令,确保 RAID 阵列一致并同步
cat /proc/mdstat
如果根据此命令的输出,RAID 阵列仍然正在同步,则必须等到同步完成,才能继续。
从 RAID 阵列中删除一个组件分区。例如,要删除
/dev/sda1
,请输入sudo mdadm /dev/md0 --fail /dev/sda1 --remove /dev/sda1
为确保操作成功,必须指定失败和去除操作。
减小在上一步中去除的分区的大小,让其值略大于为段设置的大小。该大小应是大块大小的倍数,并为 RAID 超块预留 128 KB 的空间。使用磁盘分区程序(例如 YaST 分区程序)或命令行工具 parted 减少分区的大小。
将该分区重新添加到 RAID 阵列。例如,要添加
/dev/sda1
,请输入sudo mdadm -a /dev/md0 /dev/sda1
等到 RAID 同步并一致,然后再继续下一个分区。
对阵列中的每个剩余组件设备重复执行这些步骤。确保按照正确的组件分区修改命令。
如果得到一个消息,告知您内核无法重读 RAID 的分区表,则您必须在重新调整其所有组件分区大小后重引导计算机。
(可选)扩展 RAID 和文件系统的大小,以使用当前较小组件分区中的最大空间量,并在此后增加文件系统的大小。有关指导,请参见第 11.1.2 节 “增加 RAID 阵列的大小”。