(2024更新)修复黑群晖 DSM7.0 + Btrfs 存储空间/磁盘损毁/堪用 的问题

意外断电重启后,发现群晖提示硬盘损毁了,但是实际上硬盘还是正常的,S.M.A.R.T. 状态也良好,但是无法写入数据,系统状态报告为“严重”,群晖的程序也拒绝工作。

我们来先治标再治本。

治标:修复存储空间故障方法

  1. 通过 SSH 直接登录 root 账号。如果不方便直接登录 root,则执行:

    cd /
    sudo -i
    

    对于虚拟机黑群晖如果SSH挂了也没事,开个管道模式的串口连接(例如 \\.\pipe\dsm),然后用Putty或者Xshell 以管理员身份运行 连上管道即可。

  2. 检查有问题的存储池,此时可以看到 sdc3 后面的 [E] 表示他现在是错误状态:

cat /proc/mdstat
root@syno:~# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [raidF1]

md2 : active raid1 sdc3[0](E)
      3738594304 blocks super 1.2 [1/1] [E]

md1 : active raid1 sdb2[0] sdc2[1]
      2097088 blocks [12/2] [UU__________]

md0 : active raid1 sdb1[0]
      2490176 blocks [12/1] [U___________]

unused devices: <none>

不需要关注 md0md1 这两个存储池,因为他们是系统盘,只需要关注 md2 这个存储池。

  1. 执行以下命令停止并用MDADM装载存储池:
synospace --stop-all-spaces # (群晖命令)停止所有存储池
mdadm --assemble --scan # 扫描并装在所有存储池

如果这一步没法停止所有存储池,可以尝试先停止所有套件:

# 能停止就不要执行这个命令
synopkg list --name | xargs -I"{}" synopkg stop "{}"
  1. 查看有问题的存储池 md2 的信息,记下 Version 和 UUID:
    mdadm -D /dev/md2 #  -D, --detail Print details of one or more md devices
    
        Version : 1.2  # 注意这里
  Creation Time : Fri Mar  3 21:01:41 2023
     Raid Level : raid1

           Name : KDS:2  (local to host KDS)
           UUID : bf3d8440:bff1633d:8c175723:69d81786 # 注意这里
         Events : 10

    Number   Major   Minor   RaidDevice State
       0       8       35        0      faulty active sync   /dev/sdc3

  1. 执行以下命令停止并修复存储池 md2,这一步我将 UUID 改掉了,不过网上似乎有人不改 UUID 也没什么问题,如果不改 UUID 也可以工作请在评论区反馈:

    mdadm -Sf /dev/md2 # 停止有问题的存储池md2 -S, --stop  deactivate array, releasing all resources.
    mdadm -Cf /dev/md2 -e1.2 -n1 -l1 /dev/sdc3 -ubf3d8440:bff1633d:8c175723:69d81789 # 1.2为上文version, bf3d8440:bff1633d:8c175723:69d81786 为上文的 UUID 再随便改掉几位,例如把 86 换成 89
    #  -C, --create Create a new array.
    
  2. 重启

    reboot
    
  3. 手动启动存储池。

    synospace --start-all-spaces
    
  4. 到群晖面板,发现此时存储池由损毁变成只读,此时手动转换为读写模式即可

如果之前停用了所有套件

# 启动所有停止的套件
synopkg list --name | xargs -I"{}" synopkg start "{}"

治标:修复存储空间堪用

  1. 和上一节所述方法一样,登入终端,执行命令检查有问题的存储池,此时可以看到 md4 后面的 [U_] ,存在下划线_表示他现在是堪用状态:
cat /proc/mdstat
root@KDS:~# cat /proc/mdstat
Personalities : [raid1]
md6 : active raid1 sdb3[0]
      26635264 blocks super 1.2 [1/1] [U]

md4 : active raid1 sdc3[0]
      483564544 blocks super 1.2 [2/1] [U_]

md1 : active raid1 sdc2[1]
      2097088 blocks [15/1] [_U_____________]

md0 : active raid1 sdc1[1]
      2490176 blocks [15/1] [_U_____________]

unused devices: <none>

不需要关注 md0md1 这两个存储池,因为他们是系统盘,只需要关注 md4 这个存储池。 [2/1] 表示阵列配置为有 2 个磁盘位置,但目前只有 1 个磁盘是活动的(正常的)。[U_] 表示阵列中的磁盘状态。U 表示正常(Up),_ 表示一个磁盘位置没有磁盘或磁盘故障。

  1. 停止存储池
synospace --stop-all-spaces # (群晖命令)停止所有存储池
mdadm --assemble --scan # 扫描并装在所有存储池

治本:探究造成损毁的原因

I/O 操作超时


正在加载评论。你可能需要科学上网才能正常加载评论区