启用/禁用用于分页和交换的设备和文件
命令语法格式
swapon [options] [specialfile…]
swapoff [-va] [specialfile…]
命令描述
命令swapon用于指定要进行分页和交换的设备。
由参数specialfile给出使用的设备或文件。它可以是-L label或-U uuid形式,来用于通过label或uuid来指示设备。
对swapon的调用通常发生在系统启动脚本中,使所有交换设备可用,因此分页和交换活动在多个设备和文件之间交错。
命令swapoff禁用指定的设备和文件的交换。当给出-a标志时,禁用所有已知的交换设备和文件上的交换(如/proc/swaps或/etc/fstab中所示)。
命令支持的选项及含义
启用交换分区
-a, –all
将所有在/etc/fstab中标记为“swap”设备设为可用,除了那些带有“noauto”选项的。 静默跳过已用作交换的设备。
-e, –ifexists
默默地跳过不存在的设备。 /etc/fstab挂载选项nofail也可用于跳过不存在的设备。
-L label
使用具有指定标签label的分区来作为交换分区。(为此,需要访问/proc/partitions。)
-U uuid
通过uuid指定要使用的分区。
-d, –discard[=policy]
如果交换后备设备支持丢弃或修整操作,则启用交换丢弃。 这可能会提高某些固态设备的性能,但通常不会。 该选项允许用户在两个可用的交换丢弃策略之间进行选择:
- –dispard=once,在swapon时,对整个交换区域执行单次丢弃操作;
- –discard=pages,在可以重用之前,异步丢弃释放的交换页面。
如果未选择任何策略,则默认行为是启用两种丢弃类型。 /etc/fstab挂载选项discard,discard=once,discard=pages也可用于启用discard标志。
-f, –fixpgsz
如果交换空间的页面大小与当前运行的内核的大小不匹配,则重新初始化(exec mkswap)。调用mkswap(2)初始化整个设备,不检查坏块。
-o, –options opts
通过fstab兼容的逗号分隔字符串指定交换选项。 例如:swapon -o pri=1,discard=pages,nofail /dev/sda2,评估最后的opts字符串,并覆盖所有其他命令行选项。
-p, –priority priority
指定交换设备的优先级。 priority是介于-1和32767之间的值。数字越大表示优先级越高。 如果未定义优先级,则默认为-1。
有关交换优先级的完整描述,请参阅swapon(2)。 将pri=value添加到/etc/fstab的选项字段以与swapon -a一起使用。
显示交换分区的信息
-s, –summary
按设备来显示交换使用情况摘要。 相当于“cat /proc/swaps”。 不赞成此输出格式,支持–show,可以更好地控制输出数据。
–show[=column…]
显示可定义的交换区域表。 请参阅–help输出以获取可用列的列表。
- NAME:设备文件或者分区路径。
- TYPE:设备的类型。
- SIZE:交换分区的大小。
- USED:使用的字节数。
- PRIO:交换分区的权重。
- UUID:交换分区的UUID。
- LABEL:交换分区的LABEL。
–noheadings
显示–show输出时不要打印标题。
–raw
显示–show输出时不对齐表格列。
–bytes
在–show输出中,以字节为单位显示交换大小,而不是以用户友好的单位显示。
-v, –verbose
显示更多的详细信息。
其他选项
-V, –version
显示版本信息并退出。
-h, –help
显示帮助信息并退出。
注意事项
你不应该在有“洞”(hole)的文件上使用swapon命令。这可以在系统日志中看到
内核中的交换文件实现期望能够直接写入文件,而无需文件系统的帮助。这对于像XFS或ext4这样的文件系统上的预分配文件(例如fallocate(1))以及像btrfs这样的写时复制文件系统是一个问题。
建议使用dd(1)和/dev/zero来避免XFS和ext4上的“洞”。
使用带有某些版本的btrfs的交换文件时,swapon可能无法正常工作。这是因为btrfs是一个写时复制文件系统:文件位置可能不是静态的,可能导致损坏。 Btrfs通过拒绝映射文件来主动禁止在其文件系统上使用交换文件。
一种可能的解决方法是将交换文件映射到环回设备。这将允许文件系统正确地确定映射,但可能会对性能产生影响。
在NFS之上的交换可能无法正常工作。
swapon自动检测并使用旧的软件暂停数据重写交换空间签名(例如S1SUSPEND,S2SUSPEND,…)。问题是,如果我们不这样做,那么下次尝试取消停顿时,我们就会出现数据损坏。
相关文件
/dev/sd??
标准分页设备
/etc/fstab
文本的文件系统描述表
相关环境变量
LIBMOUNT_DEBUG=all
启动libmount的调试选项。
LIBBLKID_DEBUG=all
启用libblkid debug output.
相关手册
swapoff(2), swapon(2), fstab(5), init(8), mkswap(8), mount(8), rc(8)
参考文献
- man 8 swapon, Version swapon from util-linux 2.32
更新日志
- 07/11/2018 创建文章