Bradley Ward Allen < ulmo@Q.Net> 写道
想法包括(到目前为止,我所做的只是建议去掉这些工具并将它们放入内核中;这就是我的想法,这是一个文件系统,而不是玩具。)
- 启动参数告诉内核哪些设备是 MD 设备(不再需要 ``
mdadd
'')- 使 MD 对 ``
mount
''/``umount
'' 透明,这样就不需要 ``mdrun
'' 和 ``mdstop
''- 将 ``
ckraid
'' 完全集成到内核中,并使其在需要时运行
- 处理可以轻松应对 N 个磁盘同时或在不同时刻出现故障的阵列,其中 N 是一个可由管理员设置的 > 0 的整数
- 更好地处理内核冻结、断电和其他突然关机
- 如果只有一个磁盘的部分发生故障,则不要禁用整个磁盘,例如,如果在 20 个不同请求的尝试中,扇区错误限制在访问量的 50% 以下,那么它将继续忽略该特定磁盘的那些扇区。
- 坏扇区
- 一种用于保存哪些扇区是坏扇区的机制,保存在磁盘上的某个位置。
- 如果有一种通用的机制可以标记降级的坏块,以便上层文件系统级别可以识别,请使用它。如果没有,则编程实现它。
- 或者,也许有一种机制可以告诉上层磁盘大小变小了,甚至安排上层将内容从正在消除的区域移出。 这将有助于处理降级的坏块。
- 如果上述想法都不可行,则保留少量(管理员可设置的)空间用于坏块(均匀分布在磁盘上?),并在坏块发生时使用它们(如果可能,则使用附近的块)。 当然,这是低效的。 此外,内核应该记录 RAID 阵列每次启动的每个坏扇区以及正在采取的措施,并发出 ``
crit
'' 级别的警告,只是为了让管理员意识到他的磁盘有一块灰尘钻入了其中(或者磁头患有盘片疾病)。- 软件可切换磁盘
- ``禁用此磁盘''
将阻塞,直到内核完成确保被关闭的磁盘上没有需要的数据(例如,完成 XOR/ECC/其他纠错),然后释放磁盘以供使用(以便可以移除它等);
- ``启用此磁盘''
如果合适,将
mkraid
一个新磁盘,然后开始将其用于 ECC/任何操作,从而在进行过程中扩大 RAID5 阵列;- ``调整阵列大小''
将重新指定磁盘总数和冗余磁盘数,结果通常是调整阵列的大小; 在不会导致数据丢失的情况下,根据需要执行此操作会很好,但我很难弄清楚它是如何做到的; 在任何情况下,都需要一种阻塞模式(可能持续数小时(如果这样,内核应该每十秒记录一些内容));
- ``在保存数据的同时启用此磁盘''
这将按原样保存磁盘上的数据,并根据需要将其移动到 RAID5 系统,这样每次有人启动 RAID5 系统时都不必进行可怕的保存和恢复(相反,可能更简单的是只保存一个分区而不是两个分区,它甚至可以作为 gzip'd 文件放入第一个分区); 最后,
- ``重新启用磁盘''
将是操作员给操作系统的提示,尝试以前失败的磁盘(我想它会简单地调用禁用然后启用)。
来自网络的其他想法
- finalrd 类似于 initrd,以简化根 raid。
- 只读 raid 模式,以简化上述操作
- 每当没有完成“半写”时,将 RAID 集标记为干净。 -- 也就是说,每当没有在一个磁盘上提交但在另一个磁盘上仍未完成的写入事务时。 添加“写入不活动”超时(以避免在 RAID 集相对繁忙时频繁寻道到 RAID 超级块)。