我有一个装有小型 RAID-1 阵列的盒子,用于交换空间。我这样做只是因为我要为系统中的所有其他分区设置镜像。
今天我读了这个问题这让我开始思考:“在 RAID-1 上进行交换是否理想/可取?”。
答案1
您(可能)不应该将交换从 RAID 1 中移除。
有时在 RAID 1 上进行交换并不那么重要,但它很好,通常很有帮助,并且通常是必要的。如果您已经在使用 RAID 1,则很少有理由故意将交换放在其他地方。
RAID 1 上的交换可能性能更好
RAID 1 上的 SWAP 的性能预计会比 RAID 外部的单个交换分区更好,但不如设置为相同优先级的两个交换分区。
写入 RAID 1 有时比写入单个磁盘要慢,因为所有数据都必须写入两个磁盘。通常它并不会慢到哪里去——通常减慢的速度可以忽略不计。如果您在同一个 IDE 控制器上有两个磁盘的 RAID 1,它会慢一些。但是,当访问一个磁盘不会减慢对另一个磁盘的访问时,写入 RAID 1 的速度不会明显变慢。
从 RAID 1 读取几乎总是比从单个磁盘读取更快,因为当一个磁盘被读取时,可以从另一个磁盘读取更多数据。从由两个驱动器组成的 RAID 1 读取通常快两倍就像从单个驱动器读取一样。
我不知道有任何测试可以将两个单独的交换分区与 RAID 1(或任何其他 RAID)上的单个交换分区进行比较。没有理由认为单个交换分区的性能会和 RAID 1 上的交换分区一样好或更好。如果在不同的磁盘上有两个交换,情况会更加复杂:
如果在 中为交换赋予了不同的优先级
/etc/fstab
,则将不同的页面交换到它们;同一页面不会同时交换到两个页面。我预计两个交换在同时访问不相关的交换数据时会更快,但在访问单个页面时会更慢。如果在 中对交换赋予相同的优先级
/etc/fstab
,数据(即使来自单个页面)将被条带化。这与 RAID 0 类似,并且很可能比将交换放在 RAID 1 上表现更好。理论上,如果您有硬件 RAID 1,软件条带化可能会效率较低,但除非您有特殊应用程序,其中从交换中读取比写入更常见,否则我预计非 RAID 软件条带化交换的性能将优于 RAID 1 上的交换分区。
(由于内核可以在多个交换分区之间对交换数据进行条带化,因此没有理由仅为了交换而设置软件 RAID 0。)
看本节Wikipdia 文章“标准 RAID 级别”,了解有关 RAID 1 性能的更多信息。
谢谢格特夫戴克提供有关条带交换的至关重要的信息。
你可能真的需要在 RAID 1 上进行交换
是否需要在 RAID 1 上进行交换取决于你首先需要 RAID 1 的原因。交换中的数据是通常高度波动并失去它通常并不代表资产遭受重大损失。但是:
RAID(RAID 0 除外)的一个优点是,如果某个驱动器发生故障你的电脑继续运行(只是速度稍慢)。如果你正在运行一些程序,这些程序将页面交换到磁盘(如果启用了交换,情况几乎总是如此),包含交换分区的驱动器(无论它是否是唯一的交换分区)发生故障,并且它没有冗余备份,你的系统将立即地停止工作吧(并且可能在重新启动之前完全无法使用,具体取决于交换的使用方式)。如果您将计算机用作生产服务器或用于任何其他重要任务,将导致停机。
如果你能容忍因单一常见不良事件(一个驱动器发生故障)而导致的全面交换失败,你应该问问自己为什么要使用 RAID 1。您可能有一个很好的答案……也可能没有。RAID(RAID 0 除外)可防止磁盘故障,但RAID 不是备份解决方案。如果您更改或删除 RAID 上的文件,或者恶意软件感染了 RAID 上的系统,则更改会立即在所有地方生效 - RAID 将无法让您从中恢复。
如果你需要的是备份而不是冗余,并且您还没有高度可靠、易于访问的备份,那么您应该将其中一个驱动器完全从 RAID 中取出并使用它进行备份。(当然,有时也需要进行异地备份。)
如果你让计算机休眠(即暂停到磁盘),RAM 的内容被复制到交换分区。因此,如果您的机器在发生磁盘故障时处于休眠状态,那么您实际上可能会因丢失交换分区而丢失数据。
答案2
高级安装Ubuntu Server 文档中的部分介绍了在软件 RAID 1 阵列上的安装。据我所知,他们也在 RAID 上创建了一个交换分区,因此这几乎是一个“推荐”的布局。
然而,从纯理论的角度来看,与“普通”分区相比,使用 RAID 1 作为交换分区可能提供的好处较少 - 交换分区上的数据或多或少是易失性的,因此在磁盘发生故障的情况下,您不太可能丢失大量数据,尽管如果交换分区突然发生故障,进程可能会崩溃或系统可能会重新启动。
从性能角度来看,使用 RAID-0 或 2 个独立的非 RAID 分区可能(或可能不)更有意义,如果您担心性能,则可能需要进行一些基准测试。
此外,所有这些仅在您的系统严重受限于 RAM 且交换分区使用率很高的情况下才会影响性能。无论从性能还是可靠性的角度来看,增加更多 RAM 并完全删除交换分区都是最终的解决方案 :)