断电后恢复无法识别的4TB西部数据非系统Btrfs硬盘
你提供的系统日志里反复出现以下错误(每2秒一次):
Jul 16 23:44:50 test kernel: [ 510.020913] ata2.00: exception Emask 0x0 SAct 0x20 SErr 0x0 action 0x0 Jul 16 23:44:50 test kernel: [ 510.020927] ata2.00: irq_stat 0x40000008 Jul 16 23:44:50 test kernel: [ 510.020932] ata2.00: failed command: READ FPDMA QUEUED Jul 16 23:44:50 test kernel: [ 510.020936] ata2.00: cmd 60/20:28:00:00:00/00:00:00:00:00/40 tag 5 ncq dma 16384 in Jul 16 23:44:50 test kernel: [ 510.020936] res 41/40:00:00:00:00/00:00:00:00:00/40 Emask 0x409 (media error) <F> Jul 16 23:44:50 test kernel: [ 510.020947] ata2.00: status: { DRDY ERR } Jul 16 23:44:50 test kernel: [ 510.020950] ata2.00: error: { UNC } Jul 16 23:44:50 test kernel: [ 510.021717] ata2.00: ATA Identify Device...
这里的核心问题是日志里的UNC标记——也就是不可纠正的媒体错误,说明你的西数4TB硬盘在断电后,出现了物理扇区损坏、磁头临时故障或者SATA链路异常的问题,导致系统没法正常读取Btrfs分区的元数据。下面给你一步步的排查和数据恢复建议:
先暂停磁盘的自动重试,避免加重损坏
现在系统每2秒就会重试一次失败的读命令,反复读写坏扇区可能磨坏磁头或者扩大损坏范围。先通过lsblk或dmesg | grep ata2找到磁盘对应的设备名(比如/dev/sdb),然后执行:echo 0 > /sys/block/sdX/device/queue_depth把命令里的
sdX换成你的实际磁盘设备名,这会关闭NCQ队列,减少不必要的读写重试。检查磁盘硬件健康状态
用smartctl工具查看磁盘的SMART数据,判断是物理坏道还是临时故障:smartctl -a /dev/sdX重点关注这几个参数:
Reallocated_Sector_Ct:已经被重新映射的坏扇区数,大于0说明磁盘有物理坏道;Current_Pending_Sector:待重新映射的扇区数,这些扇区读取失败,等待下次写入时修复;UDMA_CRC_Error_Count:数值很高的话,大概率是SATA线/接口的问题,可以先尝试换线或换主板SATA端口试试。
尝试只读挂载Btrfs分区
优先以只读模式挂载分区,避免写入操作破坏剩余数据:mount -o ro /dev/sdX1 /mnt/recovery如果挂载成功,赶紧把重要数据复制到其他安全的磁盘;如果挂载失败,用Btrfs的只读检查工具查看分区状态:
btrfs-check --readonly /dev/sdX1这个命令只会检查Btrfs元数据的问题,不会修改磁盘内容。
镜像磁盘到新设备(最安全的恢复方式)
如果SMART显示有物理坏道,优先把整个磁盘镜像到另一块容量≥4TB的磁盘上,再在镜像上做恢复操作,避免原磁盘进一步损坏:
安装ddrescue后执行:ddrescue -n /dev/sdX /dev/sdY rescue.log-n参数表示不重试坏扇区,先快速镜像所有能正常读取的部分;之后可以用-r3参数重试3次坏扇区,尽量恢复更多数据。镜像完成后,你可以在/dev/sdY上尝试挂载或修复Btrfs分区。
注意:如果SMART数据显示磁盘有大量重新映射扇区或磁头故障,这个磁盘基本已经接近寿命终点,数据恢复后建议不要再用它存储重要数据了。
备注:内容来源于stack exchange,提问作者algalg

