通过移除磁盘来缩小 RAID?

Pie*_*aud 16 raid nas

我有一个带 12 个托架的 Synology NAS。最初,我们决定为单个 RAID-6 卷分配所有 12 个磁盘,但现在我们想缩小卷以仅使用 10 个磁盘并分配两个 HDD 作为备用。

卷管理器向导可以方便地扩展通过增加硬盘容量,但我发现没有办法缩小除去硬盘容量。如何在不必重新初始化整个系统的情况下做到这一点?

Pau*_*aul 21

为此,我将假设阵列中有 12 个磁盘,每个磁盘的大小为 1TB。

这意味着有 10TB 的存储空间。例如,如果您使用的存储容量不超过 6 个磁盘 (6TB),那么它们的大小无关紧要。

免责声明:Synology 可能不支持这些,所以我会与他们核实这种方法是否会导致问题,事先备份并事先关闭任何 Synology 服务。据我所知,Synology 使用标准的 md raid 阵列,如果将磁盘移动到支持 md 的标准服务器,它们就可以访问 - 所以应该没有问题。

概述

顺序是这样的:

  1. 减小文件系统大小
  2. 减小逻辑卷大小
  3. 减少数组大小
  4. 重新调整文件系统的大小
  5. 将备盘转换为热备盘

文件系统

找到主分区,使用df -h,它应该看起来像:

Filesystem                Size      Used Available Use% Mounted on
/dev/vg1/volume_1         10T       5T   5T         50% /volume1
Run Code Online (Sandbox Code Playgroud)

使用此命令将大小调整为所需的最大值,不再需要:

umount /dev/vg1/volume_1
resize2fs -M /dev/vg1/volume_1
Run Code Online (Sandbox Code Playgroud)

现在检查:

mount /dev/vg1/volume_1 /volume1
df -h

Filesystem                Size      Used Available Use% Mounted on
/dev/vg1/volume_1         5T       5T    0T        100% /volume1
Run Code Online (Sandbox Code Playgroud)

体积

要减小卷大小,请使用 lvreduce(为了以防万一,让它大一点):

umount /dev/vg1/volume_1
lvreduce -L 5.2T /dev/vg1/volume_1
Run Code Online (Sandbox Code Playgroud)

现在逻辑卷已经缩小了,使用 pvresize 来缩小物理卷的大小:

pvresize --setphysicalvolumesize 5.3T /dev/md0
Run Code Online (Sandbox Code Playgroud)

如果调整大小失败,请参阅其他问题以将在物理卷末尾分配的数据部分移向开头。

现在我们在 10T 阵列上有 5.3T 卷,因此我们可以安全地将阵列大小减少 2T。

大批

找出 md 设备:

 pvdisplay -C
 PV         VG      Fmt  Attr PSize   PFree
 /dev/md0   vg1     lvm2 a--  5.3t    0.1t
Run Code Online (Sandbox Code Playgroud)

第一步是告诉 mdadm 减少数组大小(随着增长):

mdadm --grow -n10 /dev/md0
mdadm: this change will reduce the size of the array.
       use --grow --array-size first to truncate array.
       e.g. mdadm --grow /dev/md0 --array-size 9683819520
Run Code Online (Sandbox Code Playgroud)

这就是说,为了将当前阵列适合 10 个磁盘,我们需要减小阵列大小。

 mdadm --grow /dev/md0 --array-size 9683819520
Run Code Online (Sandbox Code Playgroud)

现在它更小了,我们可以减少磁盘数量:

 mdadm --grow -n10 /dev/md0 --backup-file /root/mdadm.md0.backup
Run Code Online (Sandbox Code Playgroud)

这将需要很长时间,可以在此处进行监控:

 cat /proc/mdstat

Personalities : [raid6] [raid5] [raid4]
md4 : active raid6 sda4[0] sdb4[1] sdc4[2] sdd4[3] sde4[4] sdf4[5] sdg4[6] sdh4[7] sdi4[1] sdj4[1] 
      [>....................]  reshape =  1.8% (9186496/484190976)
                              finish=821.3min speed=9638K/sec [UUUUUUUUUU__]
Run Code Online (Sandbox Code Playgroud)

但我们不需要等待。

将 PV、LV 和文件系统调整到最大:

pvresize /dev/md0
lvextend -l 100%FREE /dev/vg1/volume_1
e2fsck -f /dev/vg1/volume_1
resize2fs /dev/vg1/volume_1
Run Code Online (Sandbox Code Playgroud)

将备用磁盘设置为备用

这里没有什么可做的,阵列中的任何备用磁盘都是自动备用的。整形完成后,检查状态:

cat /proc/mdstat

Personalities : [raid6] [raid5] [raid4]
md4 : active raid6 sda4[0] sdb4[1] sdc4[2] sdd4[3] sde4[4] sdf4[5] sdg4[6] sdh4[7] sdi4[S] sdj4[S] 
Run Code Online (Sandbox Code Playgroud)