MDADM - 将新硬盘添加到现有 RAID1

MDADM - 将新硬盘添加到现有 RAID1

我的专用服务器有一个带有 2x1TB HDD 的 RAID1 阵列,它已满

我想添加新硬盘(已经物理添加)

我不知道该怎么做。

我害怕丢失数据

我找到了这个教程

 [root@server ~]# fdisk -l

 Disk /dev/nvme2n1: 1024.2 GB, 1024209543168 bytes, 2000409264 sectors
 Units = sectors of 1 * 512 = 512 bytes
 Sector size (logical/physical): 512 bytes / 512 bytes
 I/O size (minimum/optimal): 512 bytes / 512 bytes


 Disk /dev/nvme1n1: 1024.2 GB, 1024209543168 bytes, 2000409264 sectors
 Units = sectors of 1 * 512 = 512 bytes
 Sector size (logical/physical): 512 bytes / 512 bytes
 I/O size (minimum/optimal): 512 bytes / 512 bytes
 Disk label type: dos
 Disk identifier: 0x844cebe6

Device Boot      Start         End      Blocks   Id  System
 /dev/nvme1n1p1            2048    67110911    33554432   fd  Linux raid autodetect
 /dev/nvme1n1p2        67110912    68159487      524288   fd  Linux raid autodetect
 /dev/nvme1n1p3        68159488  2000407215   966123864   fd  Linux raid autodetect

 Disk /dev/nvme0n1: 1024.2 GB, 1024209543168 bytes, 2000409264 sectors
 Units = sectors of 1 * 512 = 512 bytes
 Sector size (logical/physical): 512 bytes / 512 bytes
 I/O size (minimum/optimal): 512 bytes / 512 bytes
 Disk label type: dos
 Disk identifier: 0xcb3fcb0e

    Device Boot      Start         End      Blocks   Id  System
 /dev/nvme0n1p1            2048    67110911    33554432   fd  Linux raid autodetect
 /dev/nvme0n1p2        67110912    68159487      524288   fd  Linux raid autodetect
 /dev/nvme0n1p3        68159488  2000407215   966123864   fd  Linux raid autodetect

 Disk /dev/md1: 535 MB, 535822336 bytes, 1046528 sectors
 Units = sectors of 1 * 512 = 512 bytes
 Sector size (logical/physical): 512 bytes / 512 bytes
 I/O size (minimum/optimal): 512 bytes / 512 bytes


 Disk /dev/md2: 989.2 GB, 989175545856 bytes, 1931983488 sectors
 Units = sectors of 1 * 512 = 512 bytes
 Sector size (logical/physical): 512 bytes / 512 bytes
 I/O size (minimum/optimal): 512 bytes / 512 bytes


 Disk /dev/md0: 34.3 GB, 34325135360 bytes, 67041280 sectors
 Units = sectors of 1 * 512 = 512 bytes
 Sector size (logical/physical): 512 bytes / 512 bytes
 I/O size (minimum/optimal): 512 bytes / 512 bytes

答案1

增加 RAID1...如果您更换两个都磁盘。我刚刚做了,它的工作原理是这样的:

  • 从工作 RAID1 阵列 (md0) 中的 2x4T 驱动器(sda1 和 sdb1)开始
  • 购买了两个新的 16T 驱动器并将其插入(sdc 和 sdd)
  • 使用完整驱动器分区(sdc1 和 sdd1)对它们进行分区
  • 将它们都添加到 RAID1:mdadm /dev/md0 --add /dev/sdc1 /dev/sdd1
  • 旧驱动器之一出现故障:mdadm /dev/md0 -f /dev/sda1
  • 等待同步完成:watch cat /proc/mdstat
  • 另一个旧驱动器出现故障:mdadm /dev/md0 -f /dev/sdb1
  • 等待同步完成:watch cat /proc/mdstat
  • 从阵列中删除旧驱动器:mdadm /dev/md0 -r /dev/sda1 /dev/sdb1
  • 增长数组:mdadm --grow /dev/md0 --size max
  • 增长文件系统:resize2fs /dev/md0

..现在我有一个 14TB RAID1,而不是最初的 4TB。

答案2

有了mdadm,就有了从 raid1 到 raid5 的迁移路径。因此,您所需要的只是一个新驱动器,对其进行相应的分区,然后扩展现有的 raid。

对于 2 个磁盘,mdadm 的 raid5 使​​用与 raid1 相同的磁盘布局,因此可以立即转换为 raid5(仅在名称上):

mdadm --grow /dev/md2 --level=5

将 2 磁盘 raid5 增长为 3 磁盘 raid5,然后重塑所有数据:

mdadm --grow /dev/md2 --raid-devices=3 --add /dev/newXp3

重塑完成后,额外的存储容量就可用,您可以使用resize2fs或类似的方法相应地扩展文件系统。


笔记:

目前尚不完全清楚,但您似乎也在使用 raid1 作为启动分区。如果您的引导加载程序不支持 raid,即如果您使用 0.90 或 1.0 版本元数据(其中元数据位于分区末尾),则您无法使用 raid5,因此引导加载程序会看到常规文件系统而不是 raid。

这仅适用于 raid1,因此您应该为您/dev/md0和/或/dev/md1设备坚持使用 raid1。您仍然可以像上面那样将它们增加到 3 个磁盘,只是无需更改级别。

如前所述,将 raid1 增加到 3 个磁盘不会增加容量(您需要 raid5),但会增加冗余(3 路镜像 raid1)。

答案3

该教程看起来毫无用处,因为它是关于“增长 RAID-1”的,但甚至没有提到这样做的最重要的事情,那就是你不能(不是不​​使用更大的驱动器重建它) - 您最多可以通过向阵列添加另一个驱动器来增加冗余 - 但阵列仍将具有相同的存储容量。增加 RAID-1 意味着您的数据会更安全,因为会有更多的副本,但您不会获得更多的存储容量。

RAID-1 在阵列中的所有设备上镜像相同的数据,具有任意数量相同大小的驱动器的 RAID-1 阵列的容量仅为这些驱动器的容量(不同大小驱动器的 RAID-1 的容量是最小的其中)。

要增加存储空间,您必须启动至救援模式(或救援 CD/DVD/USB/等),并对现有 RAID-1 阵列进行完整备份和恢复到新的 RAID-5 阵列。或者,您可以使用 LVM 的 RAID-5 功能而不是 mdadm 的 - LVM 是非常在 RHEL 和 Centos 上得到良好的支持和记录,并且几乎是这些发行版的默认环境。或者,请参见下文,也许可以使用 ZFS。

如果您有另一个 1TB 驱动器(例如机械 HDD,而不是另一个 nvme 驱动器),那么您可以将其用作备份目标。然后使用所有三个 nvme 驱动器创建一个新的 RAID-5 阵列,并将所有内容恢复到其中。

否则,您必须使用新的 nvme 驱动器作为备份目标,将所有内容备份到其中,然后使用原来的两个 nvme 驱动器创建一个退化的RAID-5阵列,将所有内容恢复到其中,然后(一旦您测试了系统启动并在 RAID-5 阵列上运行),将新的 nvme 添加到数组中。

新的 RAID-5 阵列将具有 2TB(因为具有 N 个驱动器的 RAID-5 阵列的容量为 N-1...3 x 1TB 驱动器在 RAID-5 中将具有 2 x 1TB 总存储容量)。

我更喜欢rsync进行备份和恢复,因为如果崩溃或断电或其他原因中断了该过程,您只需重新启动它,它就会从中断的地方继续,而不必从头开始并复制相同的文件之前已经复制了。

此站点上有许多有关如何执行此操作的分步示例,搜索将数据迁移到新驱动器的问题,特别注意涉及mdadmlvm(或 ZFS)的问题和答案。忽略任何谈论使用的内容dd(因为您想要进行基于文件的备份和恢复,而不是磁盘映像的位副本)。我知道多年来我已经就这个主题写了一些答案(例如如何迁移到LVM?是否可以将现有分区与文件系统集成?),其他人也有。

完成阅读后,写下您需要做什么的分步计划。通过周密的规划可以避免迁移灾难。没有计划几乎肯定会导致灾难,尤其是如果您以前从未这样做过的话。多年来,我已经使用物理机和虚拟机完成了数百次此类迁移,并且我仍然花时间以点的形式写下计划,因为我知道如果不这样做,我会忘记一些重要的步骤。

如果您可以在系统上运行虚拟机,那么我强烈建议在 RAID-1 阵列上设置一个虚拟机,并在 RAID-1 阵列上安装最小化的 Centos,并使用额外的磁盘来练习迁移在您的真实驱动器上尝试一下。 VM 的虚拟磁盘不需要很大,每个几百 MB 就足够了……足以满足最小的操作系统(以及 mdadm、lvm、rsync 和您需要的任何其他工具)。这将使规划真正的迁移变得更加容易,很难规划你以前从未做过的事情。

多次练习,直到您了解整个过程,并知道可能会出现哪些问题(以及如何从中恢复)。您还可以练习不同类型的迁移 - 例如从 mdadm RAID-1 到 mdadm RAID-5,以及从 mdadm RAID-1 到 LVM RAID-5 或到 ZFS,以帮助您决定哪一种最适合您。第一次完成设置后,通过制作两个 RAID-1 虚拟磁盘的副本来让自己更轻松......这样您就可以快速轻松地将虚拟机恢复到其“起始状态”以进行另一次练习跑步。


另一种选择是使用 ZFS RAIDZ 而不是 RAID-5,这将提供大致相同的存储容量,但 ZFS 支持透明压缩,因此高度可压缩的文件如文本(例如配置文件、日志文件、源代码、markdown 或 TeX 文件、HTML、 XML、json 等)将使用更少的磁盘空间。已经压缩的文件(例如 PDF 以及大多数视频、图像、音频格式)将使用与以前相同的空间量。 ZFS 还有其他好处,包括错误检测和纠正、快照以及为具有不同属性(例如压缩类型、加密、记录大小等)的不同类型数据创建单独数据集的能力。

您必须安装 ZFS dkms 模块和 ZFS 实用程序。这在 Debian 和 Ubuntu 上非常简单直接,但我从未在 Centos 上做过,所以不知道这会有多困难。我确信会有关于它的博客文章和教程。

答案4

本来只想发表评论,但我必须发布作为答案,因为我缺乏发表评论的声誉。

添加另一个磁盘到 raid1 将添加另一个没有更多空间的镜像。由于计算奇偶校验的计算,Raid5/6 正在失宠[需要引用]。当然,取决于应用程序。

raid10 与 raid1 更相似,但可以随着磁盘数量的增加而增大大小(最初是嵌套 raid1/0(需要偶数个驱动器),但 raid10 可以使用奇数个驱动器),它存储副本而不是奇偶校验。 2 驱动器 raid10 是 raid1,因此您可以免费更改:

 mdadm <device> --grow --raid-level=10

默认布局接近 2,这应该足够了。您将获得分布在驱动器上的每个块的 2 个副本(当前为 2 个,因此仍然是 raid 1)。
然后添加新驱动器:

mdadm <device> --add /dev/new-disk
mdadm <device> --grow --raid-devices=3

现在我们的 raid 有更多可用空间,但文件系统仍然是原始大小,所以最后:

resize2fs <device>

相关内容