XFS repair on failed SSD

突然VPN无法登录了,本地登录服务器,悲摧了,一块盘不见了,尝试重新挂载 失败.

尝试重启,再挂载,当然还是不行,因为是一块PCI-E SSD 卡,非常担心数据搞不出来。

1. 先备份

保险起见,先dd出来,因为本地没有足够大的空间,尝试将现有信息保存到另外一台主机,

在有空间的主机(192.168.1.2)运行:

ssh root@192.168.1.1 "dd iflag=fullblock  conv=sync,noerror if=/dev/nvme0n1 |gzip -1 -" |dd  of=/mnt/nvme.bak

还好可以执行,庆幸SSD盘似乎没有挂的很彻底。没有高兴太久,发现800G的盘 dd出来只有267G,看了下warning,似乎是因为中间有坏块读不出来,造成dd出来 的后面的部分,覆盖了前面的内容。

按理dd应该有选项避免这种情况,但是没查到,感觉过于复杂,不友善放弃。换 ddrescue,没看到可以支持管道到远端,放弃。换ddrescue。是的 ddrescue 和ddrescue 是两个不同的软件。 命令够简单: 在故障磁盘(/dev/nvme0n1)所在主机执行

dd_rescue /dev/nvme0n1 - | ssh root@192.168.1.2 "cat - > /mnt/filename.img"

执行效果不错,速度更是令人惊喜,千兆网络可以跑满。用dd只有一半速度。 关键是文件大小基本靠谱。

2. 恢复

备份完成后在原始磁盘上尝试修复。 直接上大招

xfs_repair -L  /dev/nvme0n1

输出如下:

xfs_repair -L /dev/nvme0n1                                                        
Phase 1 - find and verify superblock...
Phase 2 - using internal log
	- zero log...
ALERT: The filesystem has valuable metadata changes in a log which is being
destroyed because the -L option was used.
xfs_repair: libxfs_device_zero write failed: Input/output error

没戏。

尝试从备份出来的文件进行恢复。

xfs_repair -Lf /mnt/filename.img 

尝试挂载这个文件

mount /mnt/filename.img /media/
ls /media

运气不错,至少看起来大部分文件都在。

3. 重新启用该SSD

SSD还没有完全故障,还是要利用起来。看了下xfs似乎没有排除坏块的选项,用ext4重新格式化,再挂载。(当然,这次要定期做好备份)

mkfs.ext4 -c -c /dev/nvme0n1

blogroll

social