群晖 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 的分层行为,对"容量会怎么切"建立直觉,再上生产。