[NAS] 如何拯救半砖的 WD MyBookLive?

先前 My Book Live 故障,好歹 ssh 还很稳定。后来我作死刷了一下固件彻底废了。

原本只是某个配置文件损坏了,无法读取:

MyBookLive:~# cat /etc/priority.conf
cat: /etc/priority.conf: Input/output error

fsck 修复之后该配置文件彻底消失了。这下更不知道它内容到底是啥了,网上也找不到例子,但是设备上的 apache2 和 twonkey 服务都依赖它。

想着也许刷固件能把缺失的文件找回来。就到官网下载最新固件(更新截至到2015年,设备上运行的也是相同版本),是一个 .deb 文件,然后用 updateFirmwareFromFile.sh 安装。结果不但问题没修复,反而变得更糟糕了。设备通电之后似乎在不断重启:

通电 -> 指示灯[蓝] -> 指示灯[黄] -> 指示灯[绿]
          ^                         |
          |                         |
          +-------------<-----------+

绿灯期间 ssh 才可以登录,但只能维持大概 3 分钟(180 个 ping 左右),几乎啥也干不成。

按照 https://www.right.com.cn/forum/thread-110111-1-1.html 提供的方法三刷了一遍 rootfs,依然没有改善:

1、浏览器打开http://mybooklive/UI/ssh,确定已经开启SSH。

2、下载并解压出附件中的resetButtonAction.sh脚本。用winSCP软件登录My Book Live,用户名 root ,密码 welc0me。 将resetButtonAction.sh拷贝至 /usr/local/sbin 目录下,此时会提示已有该文件是否替换,选择替换。关闭winSCP。

3、用7zip软件将固件解压,得到rootfs.img系统镜像,拷贝至My Book Live的Public共享文件夹根目录下。

4、剩下的就是一键重装系统了:按住My Book Live机子背部的reset按键保持5~6秒钟,直到前面指示灯开始闪烁红光,此时系统开始自动恢复原始出厂系统(系统版本取决于你的rootfs.img版本,也就是下载的固件版本。)几分钟之后,系统会自动重启,直到指示灯变成绿色不再闪动,说明系统已重新安装完毕。可以登录http://mybooklive/UI界面,会出现首次使用提示的选择语言选项。

WD 论坛的有位网友给我贴了 priority.conf 内容(竟然只有寥寥数行),我终于见到了久违的 web 管理界面:

image

但是网路连接依然只能维持大约 3 分钟😭。

终于有了进展。

由于一直无法重刷固件,终于使我想要去探究一下为什么磁盘无法卸下:

MyBookLive:~# /usr/local/sbin/resetButtonAction.sh

currentRootDevice = /dev/md0
upgradeRootDevice = /dev/md1

Ensure both partitions are members of the original MD device
mdadm: hot remove failed for /dev/sda1: Device or resource busy
mdadm: Cannot open /dev/sda1: Device or resource busy

然后就发现这个 recovery 进度走得挺快:

MyBookLive:~# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4]
md0 : active raid1 sda2[1] sda1[2]
      1999808 blocks [2/1] [_U]
      [======>..............]  recovery = 34.8% (696320/1999808) finish=1.7min speed=12403K/sec

unused devices: <none>

但是只要一到 74% 的时候就重启,差不多正好 3~4 分钟。重启之后又从头开始 recover。

试着暂停 recovering:

MyBookLive:~# echo idle > /sys/block/md0/md/sync_action

仍然无法阻挡3分钟后重启。于是数条命令一起上:

MyBookLive:~# /usr/share/mdadm/checkarray -x --all;
echo 0 > /proc/sys/dev/raid/speed_limit_max;
echo frozen > /sys/block/md0/md/sync_action

还是没有阻止 recovering,但速度将到原先的 1/10。虽然最后到 73.9% 的时候仍然重启了,但设备在线时间得到极大延长。重启之后再看 recovery 进度,竟然停了:

MyBookLive:~# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4]
md0 : active raid1 sda2[1] sda1[2]
      1999808 blocks [2/1] [_U]

unused devices: <none>

然后设备一直到现在(10个小时了)都还没重启过:

MyBookLive:~# uptime
 20:44:37 up 10:41,  2 users,  load average: 1.02, 1.04, 1.08

我有一点不太明白,为什么会是 raid1?我这明明是个单盘设备。

存储设备遇到这种情况,第一时间把数据备份出来,然后买一个新的。

前两天才用mdadm做了软件raid,我记得只要是多于两个分区就可以做raid1了。你是不是在一个磁盘上做了两个分区,然后用这两个分区做软件raid?(虽然我不知道这有什么好处) :thinking: