我有两个以上的非常旧的硬盘OpenBSD 上的 softraid(4) RAID1 镜像规则。
看起来某些底层物理驱动器可能出现一些 I/O 错误;但在完全更换这些物理驱动器之前,我想确保我真的不再需要其中的任何数据。
在更换其中一个驱动器之前,有什么方法可以检查阵列的完整性,以避免多年后出现意外?
答案1
OpenBSD 的文档软件阵列似乎表明,数组的创建在创建步骤中没有发生任何类型的同步:
The RAID 1 discipline does not initialize the mirror upon creation. This
is by design because all sectors that are read are written first. There
is no point in wasting a lot of time syncing random data.
因此,必须借助文件系统来验证物理驱动器之间的完整性和一致性。
但是,由于软 RAID 上的每个文件系统都与 RAID 无关,因此必须有一种特殊方法,也许可以将文件系统以只读模式挂载到几个不同的挂载点,每个挂载点都与底层 RAID1 中的单独物理驱动器绑定,然后运行比较工具来比较驱动器之间的文件系统内容。目前似乎没有任何代码可以实现这一点。
另一种方法是在创建软 RAID 之前将所有物理驱动器完全清零,或在创建文件系统之前将所有逻辑 RAID 卷清零。这样就可以逐块比较数据(例如,通过以只读模式安装文件系统,并在sha1
忽略用于存储软 RAID 信息的初始偏移量后对每个物理驱动器执行操作(除非它存储在磁盘上的多个位置,就像文件系统对一些最重要的数据所做的那样))。
最后一种选择似乎是尝试用充满 /dev/zero 的文件填充所有文件系统,这可能会也可能不会使逻辑驱动器具有相同的内容,然后尝试使用 sha1 对物理驱动器上的数据进行比较,如上一步所示。但是,如果给定的物理驱动器已经从逻辑驱动器脱机,那么这最后一步将毫无用处,因为不再有任何方法可以挂载它或修改其内容。