2017 警告!接受的答案似乎有效,但使用最近的内核,我发现系统一开始交换就会挂起。如果您尝试使用加密的交换文件,请确保它实际交换正确。我花了很长时间才弄清楚为什么我的系统一直无缘无故地锁定。我已经回到使用加密交换分区,它确实工作正常。
如何在 Linux 中设置加密交换文件(不是分区)?甚至有可能吗?我找到的所有指南都讨论了加密交换分区,但我没有交换分区,我宁愿不必重新分区我的磁盘。
我不需要磁盘挂起支持,所以我想在每次启动时使用一个随机密钥。
我已经将TrueCrypt文件托管卷用于我的数据,但我不想将交换放在该卷中。如果有更好的解决方案,我不会将 TrueCrypt 用于交换文件。
如果重要的话,我正在使用带有默认内核的Arch Linux。
我正在寻找一种压缩磁盘上交换的方法。我并不是在寻求对替代解决方案进行更广泛的讨论。请参阅最后的讨论。
我努力了...
使用压缩的 zfs zvol 进行交换是行不通的。它的设置有效,交换有效,交换确实发生了一些,所以我想有人可能会说它在技术上是一个可行的解决方案,但是如果它比软盘访问慢,并导致您的系统“工作”,那么您的工作解决方案到底如何“工作”十次中有十次完全冻结?尝试了几次——一旦系统进入内存压力条件,一切都会冻结。我也尝试使用 losetup 间接使用它,甚至尝试使用 zfs zvol 作为 zram 的支持设备。没有区别,总是相同的结果——写入/读取速度极其缓慢,系统不可避免地在压力下崩溃。
BTRFS。仅支持未压缩的交换文件。显然,也只支持未压缩的循环图像,因为我尝试了 dd-ing 一个空文件,使用常规 ext2 格式化它,压缩它,作为循环设备安装,并在其中创建一个交换文件。不起作用,即使我在启用强制压缩的情况下安装了 btrfs - compsize 显示 ext2 图像压缩比恰好为 1.00 。
Zswap——它只是内存和常规磁盘交换之间的缓冲区。常规磁盘交换仍然是常规磁盘交换,zswap 在将页面写入其中之前解压缩页面。
Zram——自从它作为compcache诞生以来就有一个支持设备选项,人们会认为它是多年来一直使用压缩磁盘交换的完美候选者。没有这样的运气。虽然您可以随意将压缩的内存页面写回磁盘,但页面在写入之前会被解压缩。与 zswap 不同的是,它不会写入相同和零填充的页面,这既节省了 i\o,又稍微提高了吞吐量,并保证使用循环安装的稀疏文件作为 backing_dev。到目前为止,这是我在低端设备上找到的交换优化的最佳选择,尽管它仍然缺乏磁盘压缩。
还有什么想法我还可以尝试吗?也许有一些我不知道的压缩块设备层,可以压缩写入其中的任何内容,不需要文件系统?也许我可以使用一些压缩的覆盖层?但在 FUSE 中没有这样做,因为 FUSE 本身就是交换的对象,除非您知道一种方法来防止它被交换。
由于我没有看到对此进行太多探索,因此欢迎您提出您喜欢的任何疯狂建议。拜托,让我们往墙上扔东西,看看什么能粘住。
对于专家来说——如果你们中的任何人阅读过,甚至编写过与此问题相关的 Linux 源代码的任何部分,请尽可能详细地描述,为什么您认为这还没有实现,以及如何实现如果您有任何想法,您认为它可以实施吗?显然,如果可以的话,请务必实现这一点,那就太棒了。
讨论
在将其标记为重复之前——我知道围绕 stackexchange 存在一些类似的问题,但我看到没有一个有有效的答案,也很少有任何进一步的反馈。因此,我将尝试在这里描述细节,对所有内容进行汇总,希望比我聪明的人能够弄清楚这一点。我不是程序员,只是一个用户和一个脚本小子,所以这应该是一个相当低的跨越门槛。
多买点内存就可以了,便宜
买一个固态硬盘
交换不好
反正压缩很慢,何苦呢
如果你要说的只是上述任何一句话——走开。因为参数是优化。不管现在的内存多么便宜,它都不是免费的。交换总是需要的,拥有它对系统有好处,这一事实已经被证实了很多年。压缩没什么,即使是“重型”算法在过去十年制造的任何处理器上执行速度也快得愚蠢。最后,当然,如果您使用 SSD,压缩实际上可能会成为瓶颈,但并不是每个人都会优先考虑速度而不是磁盘空间使用,而 HDD 驱动器确实从磁盘压缩中受益匪浅,但仍然非常受欢迎且数量众多,不容忽视。