这Linux 交换空间迷你指南描述了如何在 Windows 和 Linux 之间共享交换空间。**这些说明在 2011 年还适用于 Ubuntu 吗?我应该如何修改 Ubuntu 的步骤?
有没有更好的方法来共享交换空间?**
根据 HOWTO,最好创建一个专用的 NTFS 交换分区:
- 专用的,因此交换文件将是连续的,并且保持不碎片化。
- NTFS,因此 Windows 和 Ubuntu 都可以读取/写入它。(或者 FAT32 更适合此目的?)
然后,配置 Ubuntu 准备交换空间,供 Linux 在启动时使用;供 Windows 在关闭时使用。
我想在我的 X301 笔记本电脑上双启动 Ubuntu 和 Windows 7。但是,我的笔记本电脑只有 64 GB 的 SSD,所以我想尽可能节省磁盘空间。
更新:有一个替代方法使用适用于 Windows 的特殊驱动程序,您可以使用 Linux 交换分区作为 RAM 磁盘等临时存储,但效果似乎不太好……
答案1
Windows 的交换空间通常是存储在驱动器上的 pagefile.sys 文件。它的大小是任意的,并且不能超过该大小。
Ubuntu 和 Linux 需要专用的“交换”分区或指定的交换空间。但是,Linux 和 Windows 之间的交换空间格式不正确,无法让每个系统理解对方的交换空间。这导致共享交换空间的能力受到限制。但是,您不需要共享交换空间。它以 RAM 为前提:内存的每一位都填充了数据并根据需要进行分配。当不需要那里的数据时,它会被标记为可以覆盖。这意味着其他一些程序可以过来并用新数据覆盖最后分配的区域。然后这个循环继续。
答案2
不可能。pagefile.sys 的格式是专有的且未知。
答案3
在 Linux 中仍然可以使用 Windows pagefile.sys 作为交换文件,而且并不那么复杂。
首先,您需要在启动时自动挂载 Windows 分区。将此行添加到/etc/fstab
:
UUID=<MY_UUID> /mnt/Windows_C auto auto 0 0
然后创建一个脚本,如果需要的话,该脚本将格式化交换文件并挂载它。例如home/<username>/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 的重新格式化在启动时是自动的。