在Windows和Ubuntu之间共享交换空间

这个Linux Swap Space Mini-HOWTO描述了如何在Windows和Linux之间共享交换空间。**这些说明在2011年的Ubuntu上是否仍然适用?我应该如何修改步骤以适应Ubuntu?**
有没有更好的方法来共享交换空间?
根据HOWTO,最好创建一个专用的NTFS交换分区:
  • 专用的,这样交换文件将是连续的并保持不碎片化。
  • NTFS,这样Windows和Ubuntu都可以读写它。(或者FAT32对此目的更好吗?)
然后,配置Ubuntu在启动时为Linux准备交换空间;在关闭时为Windows准备。 我想在我的X301笔记本上双启动Ubuntu和Windows 7。然而,我的笔记本只有64GB的固态硬盘,所以我希望尽量节省磁盘空间。 更新:有一种替代方法,使用Windows的特殊驱动程序,可以让您将Linux交换分区用作临时存储,就像RAM磁盘一样,但似乎效果不太好...

你既不能使用NTFS也不能使用FAT32来作为交换磁盘的文件系统。交换分区有自己的文件系统,称为"swap",它只能用于特定目的。不过你可以尝试使用交换文件来替代。我想到的一个方法是在启动时使用交换文件,并自动删除其他操作系统的交换文件。但这需要对启动脚本进行一些技巧处理,而对此我完全没有任何主意。 - FUZxxl
2“Linux Swap Space Mini-HOWTO”讲解了3.1和95/98。我没有仔细观察MS,但也许这不是最新的。据我所知,mkswap只是将文件/分区标记为交换空间,这只是一种安全措施,以防止您交换文档。不知道Windows会做什么,但我可以想象它依赖于文件名和可能的属性。如果我是你,我会去尝试一下。 - maaartinus
1只作为将来参考,Linux确实可以使用文件作为Swap。 - nanofarad
3个回答

Windows的交换空间通常是存储在磁盘上的pagefile.sys文件。它被赋予一个任意的大小,并且不能超过该大小。

Ubuntu和Linux需要专用的“swap”分区或指定的交换空间。然而,Linux和Windows之间的交换空间没有以正确的格式进行格式化,以便系统能够理解对方的交换空间。这导致了在共享交换空间的能力上存在限制。但是,您不需要共享交换空间。它根据RAM的原理运作:每个内存位都填充有数据并按需分配。当那里的数据不再需要时,它被标记为可被覆写。然后,其他程序可以使用新数据覆盖上次分配的区域。这个循环就这样继续下去。


不可能。pagefile.sys的格式是专有的且未知。


3实际的pagefile.sys文件不需要共享。无论是Windows还是Ubuntu,在启动时都会忽略其各自交换空间的初始内容,因此实际内容无需保留,只需处于“就绪”状态即可。 - Leftium
2@Leftium:不,Linux会寻找有效的交换区头部。这就是为什么在使用交换分区之前,你必须用mkswap格式化它。我很确定Windows也是类似的。 - psusi

在Linux中仍然可以使用Windows的pagefile.sys作为交换文件,而且并不复杂。

首先,您需要在启动时自动挂载Windows分区。将以下行添加到/etc/fstab文件中:

UUID=<MY_UUID> /mnt/Windows_C auto auto 0 0

然后创建一个脚本,如果需要的话,将格式化交换文件并挂载它。例如:home//swap.sh
#!/bin/bash
pagefile=/mnt/Windows_C/pagefile.sys
type=$(blkid -s TYPE -o value $pagefile)
if [[ $type != swap && $type != swsuspend ]]; then
    mkswap $pagefile
fi
swapon $pagefile

将脚本设为可执行,并创建一个服务,在Windows分区挂载后启动它:创建文件/etc/systemd/system/swap.service,内容如下:
[Unit]
Description=Use Windows swap file
After=local-fs.target

[Service]
Type=simple
ExecStart=/home/<username>/swap.sh

[Install]
WantedBy=multi-user.target

启动服务以检查其是否正常工作:
sudo systemctl start swap

如果脚本正常工作,命令swapon应该返回类似以下内容:
NAME                        TYPE SIZE USED PRIO
/mnt/Windows_C/pagefile.sys file 8,5G   0B   -2

如果不行的话,尝试执行systemctl status swap.service来查看发生了什么。
如果一切顺利,你可以启用该服务:
sudo systemctl enable swap

现在你基本上完成了。如果你想避免在pagefile.sys上出现一些不安全的权限警告,你需要在Windows和Linux之间设置一个权限映射。
为此,卸载Windows分区,然后生成一个用户映射文件。
sudo ntfsusermap /dev/disk/by-uuid/<UUID>

重新挂载分区并将用户映射文件移动到一个名为.NTFS-3G的新文件夹中。
sudo mkdir /mnt/Windows_C/.NTFS-3G
sudo mv UserMapping /mnt/Windows_C/.NTFS-3G/

从我所看到的情况来看,你在Windows方面不需要做任何操作,页面文件pagefile.sys的重新格式化会在启动时自动进行。

https://linuxize.com/post/create-a-linux-swap-file/

在fstab之后运行脚本

如何在NTFS(或FAT32)分区上使用'chmod'命令?


1好答案。你测试过吗?还有,这个功能支持磁盘挂起(休眠)吗?或者它的工作方式和Ubuntu中的交换文件一样,只支持挂起(睡眠)? - VidathD
是的,我试过了。我编辑了脚本swap.sh,以避免从休眠中唤醒后重新格式化交换文件。它的工作原理类似于Ubuntu中的交换文件,因此可以按照这些说明进行休眠:https://askubuntu.com/questions/6769/hibernate-and-resume-from-a-swap-file#1132154。显然,如果在Ubuntu休眠时切换到Windows,这将无法正常工作(交换文件需要重新格式化)。 - Jean Paul