Linux 交换稳健性和/或镜像 - 内核 3.2

Linux 交换稳健性和/或镜像 - 内核 3.2

我在 raid6 中使用了 mdadm,有 8 个 2TB 磁盘,我决定在每个驱动器上添加一个小的“松弛”分区,以防替换驱动器的大小与我现在使用的驱动器不完全相同。这样做的目的是,我不会因为磁盘太小而无法将磁盘添加到 raid 中。

现在,对于空闲分区,我简单地将它们指定为交换分区(不会造成损害)。据我所知,Linux 在分配交换页面时会对这些磁盘进行循环调度。据我所知,这意味着我的所有交换空间大致相当于 raid0 条带集。现在,如果一个磁盘发生故障,是否意味着...

答:我的整个交换空间已损坏或处于无效状态?

B:任何在交换设备上有发生故障的页面的程序现在都受到了损害(或终止了?!)

C:我最好在交换分区上运行 mdadm raid10 并创建交换文件,或者直接交换到 mdX 设备?!

如果有人能够真正解释一下 Linux 在发生故障时如何处理交换,我将不胜感激。

答案1

内核中交换分区或文件之间没有依赖关系,每个交换区域内只有页面的低级映射。从交换中读取页面是对磁盘中几个连续扇区的低级读取。因此,如果一个交换区域发生故障,其他交换区域不会受到影响。

如果交换分区发生故障,没有人会注意到,直到使用故障分区的某个进程发生硬页面错误。可能的结果是,分配给接收换入页面的内存页面将保持为零,并且进程将发生段错误。您可能会在内核日志中看到“交换设备上的读取错误...”,但除了记录错误之外,内核不会将交换区域标记为坏的。在写入交换时,内核会在 klog 中打印“交换设备上的写入错误”,并重新弄脏页面,以便不会再次写入,但就当前进程而言,损害已经造成。没有代码可以在分区的另一个位置或不同的交换分区中重新尝试错误的写入。

有些人在 RAID1 上进行交换,请参阅我对您的 OP 的评论中的 SE 帖子。我很难相信这不会对交换系统的性能产生负面影响。也许他们没有看到这一点,因为他们有很多 RAM,而且他们的应用程序不会导致交换。无论如何,RAID 的目的是保护您的永久数据,而不是您的交换。这有点像/tmp在 RAID5 上安装并进行夜间增量备份。我的建议是购买“RAID 版”(即最高质量的)磁盘,并像您目前所做的那样在原始分区上进行交换。

相关内容