当我搜索例如 RAID1 安装时,似乎管理员倾向于将他们的交换分区放在 RAID1 之下。
对我来说,更直观的做法是拥有两个磁盘,每个磁盘都有一个大分区供 RAID1 和系统分区使用,还有一个较小的分区用于 RAID 阵列之外的交换。
如果我在系统运行时丢失了一个磁盘并且实际上丢失了一半的交换空间,最坏的情况会是什么?
与 RAID 之外的两个独立交换卷相比,镜像交换卷时性能是会提高还是降低?
如果交换应该被镜像,那么为交换提供自己的 RAID1 阵列是否更有意义,还是使用 LVM 分区一个大的 RAID1 阵列更有意义?
(注/4. 我不确定 mdX 是否可以在没有 LVM 的情况下进行分区,但是 debian 安装程序让我相信它不能)
答案1
如果您使用的是 RAID1,那么您不会丢失一半的交换,只会丢失两个镜像中的一个。最糟糕的情况是,您将失去本来可能获得的任何性能优势。如果在各个驱动器上有两个单独的交换区域,则内核将以类似于 RAID0(如果它们具有相同的优先级设置)或 JBOD(如果优先级不同,则使用最高优先级区域直到填满,然后再使用下一个)的方式使用这两个区域,因此如果其中一个驱动器坏了,您的系统很可能会在需要访问交换区域时立即崩溃。这就是为什么交换空间通常存在于 RAID1 卷上的原因 - 它更安全,而且这通常比性能更重要。
两个独立的交换区域将与 RAID0 类似,因此您通常可以看到性能提升,但这取决于驱动器当时承受的其他负载。使用现代内核,RAID1 驱动程序可以尝试猜测哪个驱动器最适合读取每个块,因此您可能会获得一些读取性能提升,但显然对于写入交换,您不会获得提升,因为必须更新两个镜像。在大多数现代设置中,交换的性能并不像其安全性那么重要 - 如今 RAM 相对便宜,因此除非您触及主板可以容纳的 RAM 极限,否则您应该尽量拥有足够的 RAM,以便尽可能少地使用交换空间。
如果您使用的是同一对磁盘,则差别不大。在单独的阵列上进行交换的一个常见原因是当使用 RAID5/6 作为主阵列时(这在您的例子中并非如此),以避免页面调出到受到 RAID5/6 写入性能问题影响的交换区域。您可以通过尝试确保交换区域靠近磁盘最繁忙的部分来调整性能(因此,如果您有一个 1Tb 阵列,其中 250Gb 逻辑卷用于最繁忙的活动数据库文件,则将交换卷放在其旁边)以减少交换时的磁头移动 - 但实际上,这种调整并不值得花费时间,因为当您进行大量交换时,% 或 2 的好处不足以在性能良好和不良好之间产生差异。
我相信你能就内核而言,分区软件 RAID 卷是可行的,但这并不意味着安装程序能够理解这种安排。在未使用 LVM 的示例中,我总是看到驱动器被划分为多个分区,并且每个分区都有一个单独的 RAID 阵列,而不是一个分区的大型 RAID 卷。我建议使用 LVM 方法,除非您有特殊原因要避免使用它,因为它更灵活,并且(根据我的经验)可靠性不低于其他安排。
答案2
如果您使用 RAID10,则可以在 Linux 上享受 RAID0 快速访问(尽管是只读)和 RAID1 安全性的优势。Linux MD 驱动程序可以在任意数量的驱动器(从 2 个开始)上创建 RAID10 卷。要获得速度优势,您需要将阵列布局指定为“远”(-p f2
),这样读取性能与 RAID0 相似,而写入性能仅比 RAID1 稍慢。