我已经创建了一个交换文件
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 的方法,这可能是一个好主意。