尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

群晖NAS存储空间损毁?从SSH到文件系统修复的实战指南

群晖NAS存储空间损毁?从SSH到文件系统修复的实战指南 先说个场景你可能也遇到过有一天打开群晖的 DSM 后台正想往相册里传几张照片结果页面上一个红色横幅冒出来——存储空间 1 已损毁。那一瞬间脑子基本是空白的紧接着是各种怀疑人生硬盘是不是挂了数据还能不能要回来要不要现在就拔盘我当初第一次碰上第一反应是赶紧把 NAS 断电冷静下来之后才一步步排查问题。后来帮朋友处理过几次类似的状况也总结了不少经验和教训。这篇小记不打算谈那些玄乎的原理就是想把我实测过的、群晖存储空间损毁提示的处理过程如实记录下来尤其是那些 DSM 界面里看不到、必须进 SSH 才能做的检查与修复。如果你也遇到了这种情况建议你先别急着点修复按钮也别轻易做删池重建的操作按照下面的顺序一步步排查大概率能少走很多弯路。1. 搞清楚存储空间损毁到底是在报警什么1.1 两个容易混淆的概念存储池与存储空间群晖 NAS 里的存储分为两层这一点很多人一开始分不清。底层是存储池Storage Pool它负责管理物理硬盘和 RAID 阵列在系统里通常对应一个 md 设备比如 /dev/md2上层是存储空间Volume你在 File Station 里看到的共享文件夹、套件、快照都在这一层它对应的是具体的文件系统ext4 或 btrfs。DSM 提示存储空间损毁字面意思是 Volume 这个层面的文件系统或分区元数据出了状况但它并不等于底层物理硬盘已经坏掉也不等于存储池一定崩了。很多时候只是某个文件系统超级块异常、日志不一致、或者断电时没正常卸载导致 DSM 检查不过就直接给你标成损毁。反过来如果存储池降级甚至损毁DSM 的报警会更严重通常会提示存储池已降级或硬盘 X 已损坏。这两种情况处理逻辑完全不同。所以遇到红色提示第一步不是崩溃而是先确认报警落在哪一层。进入存储管理器页面左侧会同时显示存储池和存储空间两个入口先看看到底是池红还是卷红。1.2 常见的报错场景与提示信息我自己见过、也听身边朋友反馈过的几种典型报错场景场景 A提示存储空间损毁但存储池还显示正常。这种通常就是文件系统元数据或挂在 /volume1 下的分区有问题是最有希望无损修复的类型。场景 B提示存储空间损毁且存储池显示降级或重建中。一般发生在 RAID1/RAID5/RAID6 阵列中某块盘掉线、被踢出阵列之后。需要先处理硬盘状态再做阵列重建。场景 C存储池直接损毁。这个相对棘手可能涉及 md 超级块丢失或阵列元数据损坏修复难度比前两种高很多。场景 D重启后所有存储空间都变成未初始化或损毁。这种情况多半是引导盘、系统分区或者阵列配置文件出了问题而不是单个卷坏了。不同场景对应的操作截然不同千万别用一套方法硬套。下面我会按最典型、也最有修复希望的场景 A 来展开同时在常见问题部分把其他场景的排查思路也放进去。2. 动手修复前的关键信息搜集2.1 第一时间做好物理层体检硬盘 SMART 与连接状态我自己的原则是凡是软件层面的修复前提是物理盘必须健康。如果硬盘本身已经大量坏道或者盘根本转不起来那再怎么 fsck 也没用甚至强行挂载会加速数据丢失。所以第一步是打开 DSM 的存储管理器 HDD/SSD逐块检查硬盘的 SMARТ 状态注意是大写的 SMART。重点看两项Reallocated Sector Count重映射扇区数和 Current Pending Sector待映射扇区。如果这两项数值持续上涨说明盘在老化坏道在蔓延。此时不建议强行重建 RAID先把数据备份出来换盘再说。另外如果方便的话物理检查一下硬盘仓底部的连接是否牢固。群晖这种热插拔结构长时间运行后某些盘位接口会松动重新插拔或者换个盘位有时候损毁就消失了。很多时候问题根本不在盘而是接触不良。2.2 日志与系统信息的取证方法在点任何修复按钮之前先通过 SSH 登进机器把当时的系统状态记录下来。这一步非常重要因为修复过程可能改变现场早先的日志可能是判断问题原因的唯一线索。在 DSM 控制面板的终端机和 SNMP里启用 SSH 功能然后用自己的管理员账号登录ssh admin你的NAS_IP登录后需要切换到 root。群晖的默认管理员账号虽然分配了 sudo 权限但很多修复命令还是需要 root 身份执行sudo -i下面几条命令是我每次必跑的取证命令# 查看 RAID 设备状态 cat /proc/mdstat # 查看所有 md 设备详情 mdadm --detail /dev/md2 # 查看系统日志里与存储相关的报错 grep -i -E error|fail|block|I/O /var/log/messages | tail -n 200 # 查看磁盘 dmesg 输出里的 I/O 错误 dmesg | grep -i -E error|fail|md|sda|sdb | tail -n 200这些命令和输出可以帮助你确认几件事存储空间对应的 md 设备是哪个阵列成员状态是 active 还是 faulty文件系统是否已经只读2.3 在动手前先想清楚数据重要性与备份状态说实话这是很多人最容易忽略、但最关键的一步。虽然我接下来介绍的修复方法大概率能保住数据但没有任何一个修复过程是 100% 安全的。尤其是在文件系统层面执行 fsck 或 btrfs check --repair 这类操作时如果遇到坏块或元数据严重损坏结果可能是灾难性的。所以我建议你手动执行修复前先问自己一句这份数据丢了能承受吗如果能承受那就大胆修如果不能先试试在 DSM 界面把存储空间的整体快照或 Hyper Backup 任务跑一遍如果系统还能挂载的话。实在没法跑备份可以尝试用 Live USB 引导把盘通过 USB 挂载到另一台机器上做一些只读级别的数据恢复比如用 dd 把整盘镜像出来。这个方案操作量很大但数据无价风险排查永远不嫌多。3. 修复实操全流程从只读挂载到文件系统重建3.1 停止写入将文件系统挂载为只读当你决定要修复时第一件事是尽量把目标卷改成只读挂载防止新的写入干扰修复过程。在 DSM 图形界面里即使卷提示损毁有时仍然可以被挂载但状态显示为只读。更稳妥的做法是直接在 SSH 里查挂载状态mount | grep /dev/md正常情况会看到类似/dev/md2 on /volume1 type ext4 (rw,relatime...)如果括号里是ro说明已经是只读。如果是rw而我接下来要做文件系统检查那就需要先卸载# 停掉相关服务或套件强烈建议通过 DSM 界面把卷停用 umount /volume1注意在群晖上直接 umount 有可能会失败因为很多套件进程仍占用着文件句柄。最稳的办法是先通过 DSM 的存储管理器把目标存储空间停用。停用后卷的挂载点会被移除这时再进行后续操作会安全很多。如果因为存储空间状态异常导致界面无法停用可以尝试用lsof或fuser找出占用进程fuser -km /volume1 umount /volume1fuser -km会强制杀掉占用该挂载点的所有进程属于比较粗暴的操作但修复场景下可以接受。杀掉进程后再次 umount一般就能卸载成功。3.2 确认阵列状态cat /proc/mdstat 与 mdadm 细节在文件系统检查之前先确认 RAID 阵列本身是否健康。如果阵列已经降级比如 RAID1 只剩一块盘直接做文件系统检查反而会加重阵列负担。cat /proc/mdstat重点看方括号里的状态例如Personalities : [raid1] [raid6] [raid5] [raid4] md2 : active raid1 sda5[0] sdb5[1] 1953383488 blocks super 1.2 [2/2] [UU][UU]表示两块盘都正常如果是[U_]或[_U]说明阵列降级了。如果降级先别 fsck优先找降级原因。用mdadm --detail /dev/md2这个命令会列出阵列的全部成员、每个成员的状态active sync / faulty / removed以及最近的事件日志。如果看到某个成员的状态是faulty或者后面跟着(F)那基本就是这个盘有硬错误被阵列自动踢出了。3.3 对 ext4 卷执行文件系统检查与修复如果确认阵列健康接下来就是对文件系统做检查。先通过blkid或mdadm找到存储空间对应的设备名称大多数群晖机型第一个存储空间对应/dev/md2第二个对应/dev/md3具体以cat /proc/mdstat的排序为准。如果文件系统是 ext4建议先做一次只读检查看看问题到底有多严重e2fsck -n /dev/md2-n表示 no只读检查不修改任何东西。如果只读检查过程中报了一堆需要修复的错误再手动加-p参数尝试自动修复这参数会直接回答 yese2fsck -y /dev/md2-y意味着所有问题都回答 yes会自动修复大部分可修复的元数据错误。注意这个过程可能很慢一块 8TB 的盘跑完整 fsck 可能需要几个小时。中间千万别中断否则会把文件系统搞得比之前更糟。建议用screen或tmux跑长任务避免 SSH 断线导致进程被杀screen -S fsck e2fsck -y /dev/md2如果修复完成后返回值是 0说明文件系统已经干净。如果返回 1说明有错误但已修复返回 2 及以上说明仍有未修复的系统错误需要更长时间或更多次运行。跑完后不要急着挂载用e2fsck -f /dev/md2再强制检查一遍确认没有剩余错误。确认无误后再回到 DSM 界面尝试重新挂载或重新启动。3.4 对 btrfs 卷执行检查与修复的注意事项如果你的存储空间基于 btrfs群晖在创建存储空间时如果选择了 Btrfs 格式默认会启用快照、校验和等高级功能处理方式会更谨慎。btrfs 文件系统的检查命令是btrfs check但它和 ext4 的 fsck 逻辑完全不同。btrfs check在部分情况下是不能直接对挂载中的文件系统执行的必须先卸载。群晖有专门的停用操作。先做只读检查btrfs check /dev/md2注意这会扫描 btrfs 的块树、extent 树等结构输出可能很多。看到ERROR或corrupt字眼说明有结构损坏。如果确认有错误可以在完整备份的前提下尝试btrfs check --repair /dev/md2--repair参数会尝试修复 btrfs 内部的校验错误。但是请注意btrfs 的check --repair在日常经验里风险较高我曾经见过一次 critical 模式修复直接把文件系统搞到无法挂载。所以我的建议是能靠备份恢复就靠备份只有明确错误是 block group 或者 device extent 这类小问题时才考虑--repair。更推荐的做法是让群晖自己处理。DSM 在检测到 btrfs 卷出现一致性错误时通常会在存储管理器里显示一致性检查或修复文件系统的按钮。这个按钮后台跑的就是一套群晖官方封装好的btrfs check流程比你手动敲命令要稳得多。遇到这类提示优先用界面按钮。3.5 重建或升级存储空间什么时候用修复按钮如果你前面的排查发现问题出在 RAID 阵列元数据或卷的分区表而群晖 DSM 的存储管理器界面给存储池/存储空间提供了修复按钮注意不是删除那可以尝试直接在那个位置点击修复。这个修复按钮通常代表两条路径一是如果阵列处于降级状态它会把新盘或原盘重新加入阵列触发 RAID 重建二是它会对已损毁的卷尝试重置挂载标记重新注册卷信息。整个过程不用命令行但要看运气通常只解决因为异常关机导致卷标记成 dirty这类问题。在点击之前建议你先通过mdadm --detail确认阵列的State字段。如果是active, degraded说明确实有成员盘需要重新加入。这时你可以把故障盘从机器里拔出来擦一下金手指再插回去或者在存储管理器里对故障硬盘执行停用/启用触发系统重新识别。很多情况下盘只是偶发掉线重新插回去就能被识别然后点击修复就会开始重建。4. 修复中的常见问题与排查技巧实录4.1 硬盘明明没事但还是报损毁先换线换口再找软件原因这个坑我踩了不止一次。有一次某台群晖的硬盘 3 频繁掉盘SMART 一切正常把盘拆下来放到其他盘位就稳如老狗。后来发现是原盘位的 SATA 背板触点氧化导致偶发断连。换了一个盘位后阵列自动恢复。所以在你的损毁问题发生在 RAID 阵列环境中时可以优先做一次交叉验证把疑似有问题的盘换到另一个空盘位观察一天系统日志。如果不再报错说明是盘位接触问题跟盘本身无关如果换盘位后仍然掉盘那大概率盘体真的有问题。连接线、电源问题也常见。群晖的电源在长期高负载下容易老化输出纹波变大就会导致硬盘随机 I/O 错误进而被阵列剔除DSM 误报存储空间损毁。4.2 修复后卷仍然只读挂载怎么处理有时候 fsck 跑完回到 DSM 界面发现卷还是只读状态。这时不要慌先检查mount输出确认挂载参数如果是ro可以尝试手动重新挂载为读写mount -o remount,rw /dev/md2 /volume1如果这条命令报错说明文件系统里可能还有未恢复的日志。对 ext4可以再跑e2fsck并且重点看日志恢复阶段是否成功如果日志区损坏可能需要用e2fsck -E discard之类的参数清一下日志——不过这个命令会丢弃未提交的事务最好不要在数据非常重要时操作。另一个更简单的方法重启 NAS。群晖在开机时会对文件系统做一次挂载前的日志重放很多只读状态在重启后会恢复正常读写。4.3 重建 RAID 时反复硬盘不支持或无法加入在 DSM 里手动把一块盘加入降级中的存储池时有时会提示此硬盘不支持用于存储池或无法加入。这类提示在部分群晖型号上会把非群晖认证硬盘直接拒掉但这个限制有时并不是绝对的。有几个思路可以试试先确认硬盘容量不小于阵列中最小盘容量而且最好用同容量同转速盘。检查硬盘是否存在分区残留。用fdisk -l /dev/sdX看一下如果有异常分区先把盘清干净再接回操作前务必确认目标盘没有在用数据。RAID 阵列元数据里记录了原成员盘的 UUID当你插入一块新盘时群晖可能认为它不是原成员而拒绝自动识别。这时可以通过命令行强制将盘加入mdadm --add /dev/md2 /dev/sdX5但注意--add的盘必须是干净盘或已经被群晖初始化的盘。如果你不确定先在 DSM 中把新盘初始化为Basic格式再尝试加入。4.4 修复后重启顺序先存储池后存储空间还有一个小细节很多人不知道当群晖经历了存储空间损毁事件后正确做法是先关机再开机让系统按正常引导流程重新装配 RAID 和挂载卷。如果只是热重启某些 md 设备可能没有被正确释放导致挂载顺序混乱。我在处理完 fsck 后通常会这样操作shutdown -h now等机器完全断电硬盘停转再重新开机。开机后不要立刻进 DSM 页面等系统事件日志里出现存储空间已挂载的消息再打开 File Station 验证文件完整性。5. 如何尽量减少下一次损毁的概率5.1 群晖系统与硬盘维护建议存储空间损毁这个提示在大多数情况下不是硬盘的物理故障而是数据一致性方面的异常。所以日常维护里有几件事做好了能明显降低触发概率给 NAS 配置 UPS 断电保护这是最重要的一项。群晖停电后异常关机是文件系统元数据损坏的第一大诱因。我在家里配了一台后备式 UPS并启用了群晖的 UPS 联动关机到现在再没遇到过一次损毁。定期执行文件系统完整性检查在 DSM 的存储管理器中btrfs 卷可以选择数据清理Data Scrubbing。我一般设置成每月一次。它会读取全盘数据来验证校验和能提前发现潜在的扇区弱化避免坏点累积成文件系统错误。注意硬盘温度。群晖机箱通风差、盘位密集夏天如果放在密闭柜子里硬盘温度轻松飙到 50 度以上。长期高温会加速盘片和磁头老化。建议尽量让 NAS 待在通风位置并开启硬盘休眠之外的合理散热策略。5.2 不同 RAID 级别的风险认知关于 RAID 的认知需要多说两句。很多人以为做了 RAID 5 / RAID 6 就万事大吉但现实中存储空间损毁的最大风险恰恰在于阵列重建过程。RAID 5 单盘损坏后重建时所有剩余盘都要被高强度读取此时如果另一块盘也藏着坏道或重映射扇区就很容易在重建中途掉盘阵列直接崩溃。因此 RAID 5 只适合能承受单盘故障但重建窗口较短的家庭环境。RAID 6 同样存在重建失败的可能只是概率更低。如果你非常在意数据安全建议在 RAID 之上继续叠加云端备份或冷备份。SHRSynology Hybrid RAID在群晖中很普及但它本质上仍是 mdadm 管理的 RAID底层逻辑类似。不同点在于 SHR 允许不同容量盘混用但一旦出现故障重建的复杂度其实比标准 RAID 更高。不要因为系统做了冗余就忽略备份。我自己最后悔的事就是当年图省事没给一台存照片的群晖接异地备份结果某次恢复操作中误格式化了一个卷那个教训比任何损毁都深刻。6. 修复完成后的验证与长期观察6.1 文件完整性抽检与套件恢复当卷恢复读写、系统显示正常之后不要急着把所有套件重新启动先做几件事验证数据完整性。第一去 File Station 打开几个关键的共享文件夹抽查目录结构和文件大小特别是最近写入过的文件。可以看看相册套件能不能正常索引下载一个收件箱里的压缩包解压试试。如果这些基本操作正常说明文件系统层的数据大体没坏。第二如果你的存储空间是 btrfs群晖有内置的文件自检能力可以在存储管理器里点击文件系统检查让它再全盘扫一遍。这个过程会比较久但能给出一个相对令人放心的结论。建议在深夜跑不要占用白天的正常读写。第三检查套件是否受到影响。比如 Download Station、Video Station 这类套件如果安装在损毁卷上可能需要重新启用。某些安装包可能因为元数据损坏而出现异常最稳妥的做法是把套件中心里的套件逐个更新或重装一遍。6.2 观察系统事件日志与硬盘 SMART 趋势修复后的一两周是观察期。我一般会把群晖的存储管理器页面开着同时每天看一眼 SMART 属性里的几个关键数值有没有明显增长。重点看三个字段字段含义风险信号Reallocated_Sector_Ct重映射扇区数持续上升说明盘有物理坏道蔓延Current_Pending_Sector等待重映射的扇区数数值不归零说明有坏扇区未被完全隔离UltraDMA_CRC_Error_Count数据传输 CRC 错误数非零且上升多半是线材或背板问题如果 CRC 错误数在修复后暴涨基本可以断定是连接层面的问题而不是文件系统问题。这时候该换线换线该换盘位换盘位。另外群晖系统日志里的smartd会定期记录每块盘的健康状态如果有一块盘的日志频繁出现SMART error建议尽快联系售后或准备替换盘。6.3 我后来养成的三个习惯折腾完这一轮之后我再也没有遇到过存储空间损毁的报警很大程度上不是运气而是养成了几个固定习惯。第一每次 DSM 大版本升级前我都会手动去存储管理器里做一个存储空间快照并且确保外接 USB 硬盘里的 Hyper Backup 任务是最新状态。第二每个月固定看一次 SMART 数据。就像开车前看一下胎压两分钟的事但能提前发现隐患。第三重要数据始终保留第三份。NAS 上一份冷备硬盘一份云端对象存储再存一份。群晖的 Hyper Backup 可以直接备份到 阿里云 OSS、Amazon S3 等标准存储用起来非常方便。这样就算哪天真出现不可逆的文件系统损坏我也只是损失点时间不会损失数据。我个人在实际操作中的体会是群晖的存储空间损毁提示七成以上都是软故障真正需要直接换盘的场景反而不多。只要你在看到报错后保持冷静按先物理体检、再阵列检查、最后文件系统修复的顺序走绝大多数数据都能完好找回来。但无论如何别把希望全押在修复上平时多一份异地备份关键时刻能救命。
返回列表