我的专用服务器有一个带有 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
进行备份和恢复,因为如果崩溃或断电或其他原因中断了该过程,您只需重新启动它,它就会从中断的地方继续,而不必从头开始并复制相同的文件之前已经复制了。
此站点上有许多有关如何执行此操作的分步示例,搜索将数据迁移到新驱动器的问题,特别注意涉及mdadm
和lvm
(或 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>