如何设置加密的交换文件?

当我安装Ubuntu时,我设置了一个加密的家目录分区。现在我遇到了一个问题,因为我没有设置交换空间,导致内存不足。我该如何设置一个加密的交换文件?
在启动时,我几次看到了一些关于cryptswap的引用。我还在/etc/fstab中找到了以下这些行。
# swap was on /dev/sda6 during installation
#UUID=1ba8a53b-1842-4de7-8e38-2d6c79f3a1ab none            swap    sw              0       0
/dev/mapper/cryptswap1 none swap sw 0 0

在较新的Ubuntu版本(经过14.10测试),您需要运行/etc/init.d/cryptdisks-early reload。@Adam Ryczkowski,您能发布您的启动脚本吗? - Jan B
2个回答

感谢这个指南,我设置了一个加密的交换文件(不能用于休眠)。在基于Debian的发行版中,您需要cryptsetup软件包来执行这些说明。
  1. 首先创建一个适当大小的文件(这里是4GB)来存储交换数据:

    fallocate -l 4G /cryptswap
    
  2. 将以下内容添加到/etc/crypttab中:

    cryptswap /cryptswap /dev/urandom swap
    
  3. 激活新创建的加密驱动器:

    service cryptdisks reload
    
  4. 将以下内容添加到/etc/fstab中:

    /dev/mapper/cryptswap none swap sw 0 0
    
  5. 激活新的交换文件:

    swapon -a
    

2这个加密的交换空间是休眠的唯一安全选项。只需对/etc/crypttab进行一些更改,并添加一个启动脚本(用于要求用户输入挂载密码)即可。 - Adam Ryczkowski
@AdamRyczkowski 如果你在附近的话,另一个用户正在询问那个启动脚本是否已经制作好了。请查看问题下的评论。 - muru
@muru 在Ubuntu 14.04上不需要这样的脚本。如果我记得没错,早期的启动脚本会解析/etc/crypttab文件中类似cryptswap /dev/sda5 none luks的行,并自动要求用户输入密码。 - Adam Ryczkowski
4不要使用truncate,而是使用fallocate为文件分配inode;mkswap步骤是多余的,因为在设置加密交换空间时会被覆盖。 - solsTiCe
@adam-ryczkowski,你说“仅限安全的休眠选项”,而liamzebedee说“不能用于休眠”。你们俩谁是对的,或者要采取哪些进一步的措施使其适合于休眠呢? - Frank N
@FrankN. 休眠数据存储在交换空间中,因此在启动的早期阶段必须进行解密。如果交换空间使用固定密码加密,则解密将起作用。然后,在引导阶段,计算机将要求输入密码以解密交换空间 - 无论交换空间上是否存在休眠状态。liamzebedee所展示的方法不使用固定密码,因此无法与休眠功能配合使用(您可以进入休眠并关闭电源,但在唤醒时无法输入正确的密码来读取休眠状态)。 - Adam Ryczkowski
3很好的总结。然而,任何想要阅读更多内容的人会发现你提供的链接“this guide”已经失效了。 - underscore_d
2仅供参考:在/dev/mapper/cryptswap卷出现之前,我不得不重新启动系统。 - HRJ
除了给fallocate命令传递8G参数之外,我完全按照指示进行操作:fallocate -l 8G /cryptswap。然而,根据swapon -sfree -h显示的最终加密交换内存仍然是4G。我做错了什么? - datka

跳过重新启动:
sudo cryptdisks_start cryptswap

在`/etc/crypttab`中,`cryptswap`是名称。

2我不明白那是如何回答这个问题的。请您能否解释一下?据我所知,OP 想知道如何正确设置(加密)交换空间。您的回答只是描述了如何启动以前定义的加密卷,但没有说明如何将其用于交换。-1 - David Foerster
崛起吧,古老的线程。Friendly 正试图回应 HRJ 在原始帖子中提到的评论。具体来说,"在 /dev/mapper/cryptswap 卷出现之前,我不得不重新启动系统。" 这个方便的 cryptdisks_start swap0(在我的情况下)让我免去了重新启动的麻烦。不错。 - fbicknel