交换失败:具有Btrfs文件系统的Linux系统上的无效参数


16

在具有Btrfs文件系统的Debian Squeeze系统上运行的这种操作顺序有什么问题?

$ dd if=/dev/zero of=swapfile2 bs=1024 count=524288
$ sudo mkswap swapfile2
$ sudo chown root:root swapfile2
$ sudo chmod 0600 swapfile2  
$ sudo swapon -v -f swapfile2
swapon on swapfile2
swapon: /home/mathieu/swapfile2: found swap signature: version 1, page-size 4, same byte order
swapon: /home/mathieu/swapfile2: pagesize=4096, swapsize=536870912, devsize=536870912
swapon: swapfile2: swapon failed: Invalid argument

我的文件系统是:

$ mount
/dev/mapper/voxbox-root on / type btrfs (rw)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/dev/mapper/voxbox-boot on /boot type ext2 (rw)
fusectl on /sys/fs/fuse/connections type fusectl (rw)

玛拉特,我重新打开了您的问题,并按如下所示添加了您的答案。随时发布您的答案,我将删除我的答案。
Sathyajith Bhat

Answers:


16

此错误报告导致了讨论

因此,“无效参数”应理解为“您的文件系统不支持交换文件”

作为发布马拉特


6
好赶上!该btrfs文件系统不支持交换文件,因为它会移动文件数据,并且Linux交换代码仅获取一次交换文件的映射。如果允许,将发生灾难-使用随机文件的数据块一旦使用交换文件便会损坏。
David Schwartz 2013年

1
较新的swapon手册页文档提供了一个新技巧“一种可能的解决方法是将文件映射到回送设备”。我还没有尝试过。
malat

8

我的声誉不到50,因此无法发表评论。但我必须更新现有答案。在Linux内核5.0.0中,btrfs现在原生支持swapfile。(您必须将其设置为no-COW)

这是来自kernel.org的一些信息:https : //btrfs.wiki.kernel.org/index.php/FAQ#Does_btrfs_support_swap_files.3F

从内核5.0+起,btrfs支持本机交换文件,但有一些限制。交换文件-必须完全分配为NOCOW,且在一台设备上不得压缩。

该链接显示了如何执行此操作:https : //wiki.archlinux.org/index.php/swap#Swap_file

不要在LINUX <4.21中尝试它!

警告:5.0之前的Linux内核上的Btrfs不支持交换文件。不注意此警告可能会导致文件系统损坏。通过交换设备安装交换文件时,可以在Btrfs上使用交换文件,但这将导致交换性能严重下降。


1
您能否在链接中引用相关部分?
Burgi

@Burgi我编辑了答案,现在更好了!
recolic

2

如果仍然要交换文件,只需使用btrfs-swapon


我采用了相同的解决方案,但是我对这种方法的正确性感到担忧。例如 使用循环开发工具,我可以解决由创建的孔检查truncate -s 4G swapfile_holes.img。即swapon检查某物的原因是swapfile应该满足合理性能的一些要求。
2015年

1
不久之前,我决定避免使用losetup映射。我的系统开始losetup在btrfs(使用预分配的文件)上使用交换后卡住了。也许它以某种方式干扰了缓冲区和缓存。即系统希望释放内存并交换掉某些内容,但这会导致相同大小的缓存增加。虽然我不确定,但我会避免这种情况。
2015年

0

2019年4月更新:请参阅recolic的答案,该答案声称Btrfs从 Linux内核版本5.0.0 开始支持交换功能

原始答案:

Sathya的答案似乎包含无效链接。

我在Btrfs常见问题中找到了这个:

btrfs是否支持交换文件?

目前没有。只是使文件变为NOCOW并没有帮助,交换文件支持依赖于btrfs由于潜在损坏而有意不实现的一个功能。交换实现过去依赖于btrfs中可能不成立的某些假设,例如交换文件中的块号,而对于多个设备,btrfs具有不同的块号映射。有一个新的API可用于将交换端口移植到btrfs。有关更多详细信息,请查看项目Ideas#Swap文件支持。

尽管性能较差,但一种解决方法是通过循环设备挂载交换文件。

资料来源:https : //btrfs.wiki.kernel.org/index.php/FAQ#Does_btrfs_support_swap_files.3F


FAQ还说,从Linux内核5.0开始支持在Btrfs上进行交换
phuclv

@phuclv:是的,进步!
mpb

-2

Invalid argumentswapon命令参数有问题。

首先,阅读man swapon

尝试sudo swapon swapfile2。就我而言,它有效。


5
您可能会认为,如果不阅读手册页就可以找到-v和-f标志?
malat
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.