为什么启用交换文件时 swapon 需要很长时间?

为什么启用交换文件时 swapon 需要很长时间?

我已经创建了一个交换文件

dd if=/dev/zero of=swap.img bs=1024k count=4k
mkswap swap.img
swapon swap.img

虽然此swapon命令有效,但需要很长时间(大约 10 分钟)才能完成。启用交换文件意味着/etc/fstab启动过程将暂停几分钟。

我注意到,如果增加块大小,dd 命令的执行时间将会减少(之前尝试过 1024 和 1)。这是否也会对 产生影响swapon

swapon处理稀疏文件吗?我之前试过成功,但重启后出现“交换文件有漏洞”的错误,所以我切换回了完整文件。

更多信息:

  • 使用 Linux Mint KDE 15 RC
  • 交换文件位于已挂载的 NTFS 分区上

输出dd

4096+0 records in
4096+0 records out 
4294967296 bytes (4,3 GB) copied, 73,9629 s, 58,1 MB/s 

mkswap 的输出是

Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=108b2e2d-e00a-40d0-8e28-c0b72003e63e

swapon没有产生任何输出,但dmesg之后显示:

Adding 4194272k swap on /host/personal/swap.img.  Priority:-1 extents:9 across:4335880k

知道如何创建可在合理时间内挂载的交换文件(最好是两倍大小)吗?

答案1

这与其说是一个答案,倒不如说是一系列的提示。首先,这一页提到dd在 NTFS 分区上运行该命令可能会损坏该分区。不知道为什么,也不知道这是否属实,但我认为值得一提:

如果 /mnt/home 是 NTFS 驱动器,请不要使用 dd(写入 NTFS 驱动器可能会损坏文件系统)

无论细节如何,在 NTFS 分区上创建交换文件确实似乎存在问题:

 $  dd if=/dev/zero of=swap.img bs=1024k count=4k
 4096+0 records in 
 4096+0 records out
 4294967296 bytes (4.3 GB) copied, 122.731 s, 35.0 MB/s
 $ mkswap swap.img 
 $ sudo swapon swap.img 
  swapon: /winblows/swap.img: skipping - it appears to have holes.

在 ext4 分区上运行完全相同的过程不会出现任何错误,而且似乎运行正常,这表明问题出在 NTFS 驱动器上。此外,将有效的文件从 ext4 分区移动到 NTFS 分区并swapon在其上运行会出现相同的“文件有漏洞”错误。所以这实际上不是文件的问题,而是分区的问题。

这可能是由于我的驱动器碎片引起的问题,但本论坛发帖说他在新格式化的仅包含 2 个文件的驱动器上遇到了同样的问题,因此看起来碎片化不是问题。

一方面,ntfs-3G(即内核用来挂载和访问NTFS分区的模块)常问问题状态:

我可以在 NTFS 上安全地使用交换文件且不出现死锁吗?

是的,如果设置正确,这是可能的。下面是如何安全、无死锁地创建、初始化和打开 2 GB 交换文件的示例:

dd if=/dev/zero of=swapfile bs=1M count=2000 
mkswap swapfile
swapon swapfile

您必须使用“swapoff”关闭交换文件,然后才能卸载 NTFS。还请注意,其他解决方案(例如在循环设备上使用交换)并不安全,并且可能导致死锁!

所以他们似乎认为它应该有效。另一方面,当我运行上述命令时,我得到了同样的“文件有漏洞”错误。

因此,虽然我找不到任何确凿的信息,但我无法让它在 NTFS 上工作。我发现各种帖子都建议将 NTFS 分区用于交换文件是一个坏主意,或者描述了用户在尝试这样做时遇到的各种问题。总之,如果您有任何避免使用 NTFS 的方法,这可能是一个好主意。

相关内容