处理损坏文件和 mdadm 的问题

处理损坏文件和 mdadm 的问题

我正在运行 ubuntu server 20.04,在 RAID5 阵列中使用 4x 4TB 驱动器,使用 mdadm 提供非根 ext4 分区。我有几个 rsync 脚本来备份关键文件夹,其中一个生成错误,因此我重新运行它并找到了有问题的文件。这是一个 3GB 的 mp4 视频。我正在寻找有关如何修复此文件或以某种方式修复文件系统的任何其他指导,以便错误不再发生。我不介意丢失文件,但我想确保如果我只是删除它,我不会掩盖其他损坏。我相当确定硬件没有问题(更多信息见下文)。

我迄今为止的故障排除记录:

  • 该文件本身似乎“工作”得很好(我可以在 vlc 中打开它并及时来回滚动,它没有声音,视频相当无聊,所以我不确定是否存在故障,但 vlc 没有抱怨)
  • 如果我尝试将文件复制到任何地方,包括复制到同一个驱动器,文件大小会达到 1GB 左右,Nautilus 会弹出错误:“拼接文件时出错:输入/输出错误”。1GB 大小的文件片段无法在 vlc 中打开。
  • 如果我尝试使用“safecopy”复制文件,则表明存在问题:
safecopy DJI_0719.MP4 /media/BigData/SSoT/test.mp4
Low level device calls enabled mode: 1
Reported hw blocksize: 4096
Reported low level blocksize: 4096
File size: 3026885347
Blocksize: 4096
Fault skip blocksize: 65536
Resolution: 4096
Min read attempts: 3
Head moves on read error: 1
Starting block: 0
Source: DJI_0719.MP4
Destination: /media/BigData/SSoT/test.mp4
......................................... [40961] 
......................................... [82945] 
......................................... [124929] 
......................................... [166913] 
......................................... [208897] 
....................................!![245901](+1007210496){X [245917] 
XXXXXXX<<<<}[246016](+471040)
.!![246157](+577536){XXXXXXXX<<<<}[246272](+471040)
.!![246400](+524288){XXXXXXXX<<<<}[246528](+524288)
.!![246656](+524288){XXXXXX<<<<}[246748](+376832)
.!![246912](+671744){XXXXXX<<<<}[247004](+376832)
......................................... [287965] 
......................................... [329949] 
......................................... [371933] 
......................................... [413917] 
......................................... [455901] 
......................................... [497885] 
......................................... [539869] 
......................................... [581853] 
......................................... [623837] 
......................................... [665821] 
......................................... [707805] 
.............................._  ;-} 100%
Done!
Recovered bad blocks: 0
Unrecoverable bad blocks (bytes): 36 (2220032)
Blocks (bytes) copied: 738985 (3026885347)

生成的文件也无法在 vlc 中打开。

  • 以上均不会在 dmesg 中生成任何条目
  • 卸载分区并运行 fsck 似乎没有表明任何问题:
sudo fsck -p -f /dev/md0
fsck from util-linux 2.34
BigData: 744159/366272512 files (3.2% non-contiguous), 2317034203/2930164224 blocks
  • 我曾经sudo echo check > /sys/block/md0/md/sync_action使用 mdadm 扫描驱动器,之后所有驱动器都可用并sudo cat /sys/block/md0/md/mismatch_cnt返回 0
  • smartctl 表示阵列中的所有驱动器都通过了自我检查,重新分配的扇区数、当前待处理的扇区数和离线无法更正的扇区数均为 0。我还没有尝试过低级测试,尽管由于我在用户级别遇到错误,我会假设这些错误也会出现在驱动器级别。
  • sudo mdadm -E /dev/sdX1(其中 X=a、b、c 和 d)表示驱动器 sdb 和 sdd 上的坏块 - 均显示:

Bad Block Log : 512 entries available at offset 24 sectors - bad blocks present.

有趣的是,这些是我已经在此阵列中更换过的 2 个驱动器(例如 sdb 有大约 3,000 小时,sda 有 30,000 小时)。

mdadm 是否可能需要以某种方式刷新/重建/重新测试其坏块,是否有命令可以执行此操作?如果这很重要,我会在一年内更换 2 个有问题的驱动器(即,如果预计 mdadm 每次修复阵列时都会修复坏块)。

谢谢您的任何建议。

相关内容