在规划 Synology Disk Station 上的 RAID 设置期间,我阅读了大量有关各种 RAID 类型的资料,这是一本很好的阅读资料:RAID 级别和URE(不可恢复的读取错误)的重要性。
但是,我还不清楚一件事:
让我们有两个场景:
- 阵列是2 个驱动器的RAID 1
- 阵列是3 个驱动器的RAID 5
两种情况的假设相同:
- 让我们在 RAID 阵列上有 100.000 个文件
- 一个驱动器发生故障(需要更换)
- 在重建阵列期间恰好有一个坏扇区 (URE)
怎么了?RAID 重建是否有 99.999 个文件正常且 1 个文件丢失?还是我会丢失所有 100.000 个文件?
如果答案需要了解文件系统类型,假设文件系统是 BTRFS 或 ZFS。
简短的回答是视情况而定。
在您描述的情况下(有故障的磁盘 + 另一个磁盘上的一些不可读扇区),一些企业 RAID 控制器将核对整个阵列,理由是其完整性受到损害,因此唯一安全的措施是从备份中恢复。
其他一些控制器(最值得注意的是来自 LSI)将改为刺穿阵列,将一些 LBA 标记为不可读但继续重建。如果不可读的 LBA 有效地位于可用空间上,则不会丢失实际数据,因此这是最佳方案。如果它们影响已经写入的数据,一些信息(希望没有什么价值)将不可避免地丢失。
Linux MDADM 非常通用,最新版本为这种穿孔阵列提供了一个专用的“重映射区域”。此外,您始终可以使用
dd
或ddrescue
首先将具有不可读扇区的驱动器复制到新磁盘,然后使用该磁盘重新组装阵列(当然会丢失一些数据)。BTRFS 和 ZFS 凭借与块分配层的更多集成,可以检测丢失的数据是在空闲空间还是分配空间,并详细报告受影响的文件。