群晖 SHR 存储池里面到底分了几层 RAID?一条命令看清底层数组结构

为什么要看 SHR 的底层结构

SHR(Synology Hybrid RAID)在存储管理器里显示成"一个存储池",但它的底子往往不是单个 RAID 阵列——SHR 可能由多个 RAID 阵列组成,这些阵列通过 LVM(逻辑卷管理器)集成到单一存储池中。LVM 是一种 RAID 管理工具,可以把多个 RAID 阵列合并为更大的存储空间,也可以把单个 RAID 阵列划分成多个较小的存储空间。

这解释了两个常见困惑:

  • 混合容量池(比如 4TB 混 6TB)为什么可用容量和想象对不上——底层是按区块拆开、分层组阵列的,不是简单相加;
  • 排障、换盘、评估冗余风险时,只看"池"这一层不够,得知道数据实际落在哪几个阵列上。

官方给的查看办法不走界面,走命令行,一条命令的事。

操作步骤

第一步:以 root 权限通过 SSH 登录 DSM

SSH 功能需先在 DSM 中开启,登录后使用 root 权限。

第二步:识别 md 阵列的数量

运行:

cat /proc/mdstat

第三步:逐行读输出

以官方文档给出的示例输出为例(两块 4TB 硬盘 + 两块 6TB 硬盘的机器):

Personalities : [raid1] [raid6] [raid5] [raid4] [raidF1]

md2 : active raid5 sda5[4] sdd5[3] sdc5[2] sdb5[1]
      11706562368 blocks super 1.2 level 5, 64k chunk, algorithm 2 [4/4] [UUUU]

md3 : active raid1 sdc6[0] sdd6[1]
      1953494912 blocks super 1.2 [2/2] [UU]

md1 : active raid1 sdd2[0] sdb2[3] sda2[2] sdc2[1]
      2097088 blocks [4/4] [UUUU]

md0 : active raid1 sdd1[0] sdb1[3] sda1[2] sdc1[1]
      2490176 blocks [4/4] [UUUU]

读法拆开说:

  • Personalities 行:列出本机内核支持的 RAID 级别,先扫一眼有个底;
  • md2 行:这是一个 active 的 raid5 阵列,参与成员是 sda5、sdb5、sdc5、sdd5 四个分区——也就是四块硬盘各自贡献出来的分区。后面那串 11706562368 blocks 是该阵列的块数,[4/4] [UUUU] 表示四个成员全部在线(U 一个不少);
  • md3 行:另一个阵列,raid1 镜像,成员是 sdc6、sdd6 两个分区,两个在线;
  • 方括号里如果出现下划线(比如 [UU_U]),就代表有成员掉线——这是判断阵列健康状态的直接信号;
  • 输出里通常还能看到几个块数很小的阵列(示例中的 md0、md1),官方文档对它们未展开解释,属于系统自身的分区布局——看到了别当成数据阵列去动它

示例池到底怎么分的层

回到官方这个 2×4TB + 2×6TB 的例子,文档给出了明确解释:

  • md2:在四块硬盘上各取一个 4TB 分区,组成 raid5——4TB 是全部四块盘都拿得出来的"公约数";
  • md3:两块 6TB 盘扣除 4TB 后各剩 2TB,这两个 2TB 分区再组成 raid1——把"富余容量"也利用起来。

两层阵列再由 LVM 合并,对外呈现为一个存储池。这就是 SHR 对混合容量盘的典型处理方式:先切公约数、再收富余,分阵列、后合并。

验证

跑完命令,对照三处:阵列数量与你对这台机器盘型分层的预期是否一致;每个阵列末尾的 U 标记是否满员;md2/md3 等数据阵列的成员分区是否落在你预期的硬盘上。换盘、扩容前后各跑一次,前后对比最能说明问题。

预防与注意

  • cat /proc/mdstat 是只读查看,不改动任何数据,但 root 权限下敲命令仍要逐字核对,尤其别顺手对 md 阵列做其他写操作;
  • 看懂结构是排障和规划的第一步,任何针对阵列的变更(换盘、修复)仍应在存储管理器的向导里完成,不要手动改 md 层;
  • 混合容量建池前,可用本文方法在测试机上先看一次 SHR 的分层行为,对"容量会怎么切"建立直觉,再上生产。