如果我将 Ubuntu 安装在加密的 ext4 分区上,通常会有一个/swapfile
.现在我希望交换的内存默认也是加密的。但是,那手册页的swapon
说:
内核中的交换文件实现期望能够直接写入文件,而不需要文件系统的帮助。
现在,“直接”的含义仍然不明确,特别是 ext4 之上的加密层是否被视为这个意义上的“文件系统”。先验的,我不能排除这样一种可能性:内核首先简单地获取交换文件在磁盘上的位置,然后直接写入磁盘,而不使用加密层,这样内存数据最终会在磁盘上未加密。
我的怀疑是否属实(适用于哪些 Linux 版本)?如果没有,请提供直接解决此问题的来源;不仅仅是互联网上如何在加密分区上设置交换文件的众多说明之一。谢谢你!
答案1
加密分区上的交换内存是否已加密?
如果分区是通过块设备(LUKSdm-crypt
等)加密的,那么可以。
先验的,我不能排除内核首先简单地获取交换文件在磁盘上的位置,然后直接写入磁盘的可能性
这几乎就是内核所做的事情;内核不直接写入磁盘,它写入块设备。实际上,交换文件应被视为托管文件系统的设备上的保留块;不能依赖其他文件系统功能。
当添加交换文件时,内核映射它使用的所有块在底层块设备上。完成后,通过直接寻址底层块设备来完成对交换文件的读取和写入;不涉及内核的 VFS 层。
这样做的实际后果包括任何基于文件系统的加密都无法使用。但是,底层块设备不一定是物理设备,因此托管在整体加密的卷中的文件系统中的交换文件可以正常工作(并且已加密)。所以 Ext4 加密不起作用,但 LUKS 可以。
也可以看看如何在 Linux 中设置加密交换文件?(但请注意,其中的信息并不全部适用于当前内核)。