mkswap命令的作用是为指定设备或文件写入Linux交换区所需的元数据格式,即Swap签名和头部结构,包括魔数(如“SWAPSPACE2”)、版本号、页数、UUID等,使内核能安全识别并启用该区域作为swap;它不清理数据,仅格式化元数据,必须配合swapon才能生效。

mkswap 命令的作用,就是为指定设备或文件写入 Linux 交换区所需的元数据格式——也就是 Swap 签名(swap signature)和头部结构。这个过程不是简单地清空或填充数据,而是按内核定义的规范,在起始位置写入特定魔数(magic number)、版本号、校验信息及页大小等关键字段,使内核能安全识别并合法启用该区域作为 swap。
mkswap 实际写入的核心元数据
执行 sudo mkswap /dev/sdb1 或 sudo mkswap /swapfile 时,mkswap 会在目标起始扇区(通常是第一个 4KB 扇区)写入如下内容:
-
魔数(Magic):固定为
SWMJ(Swap Magic J)或SWAP-SPACE(v1 格式),用于内核快速校验是否为合法 swap 区域; - 版本标识:标明使用的是 swap v0(旧)或 v1(当前默认),v1 支持更大的地址空间和校验;
- 页大小与页面数:记录底层页单位(通常为 4096 字节)及总可用页数,供内核计算换入换出边界;
- UUID 和最后修改时间戳:增强唯一性和安全性,避免挂载冲突或误用旧 swap 数据;
- 可选校验和(v1 支持):部分实现会写入头部校验,防止元数据被意外篡改。
确保写入安全的关键操作
仅运行 mkswap 不足以保证安全,还需配合以下措施:
- 目标设备/文件必须已清零或无敏感残留(尤其是复用旧分区时),建议先用
sudo dd if=/dev/zero of=/dev/sdb1 bs=1M count=100覆盖开头部分; - 对文件方式,务必设置严格权限:
sudo chmod 600 /swapfile,防止非 root 读取潜在交换数据; - 使用
-f参数仅在确认目标无重要数据时强制覆盖,避免误操作:sudo mkswap -f /dev/sdb1; - 启用前用
sudo file -s /dev/sdb1或sudo blkid /dev/sdb1验证签名是否已正确写入。
验证元数据是否写入成功
写入完成后,可通过以下命令确认 swap 头部是否就位:
-
sudo hexdump -C /dev/sdb1 | head -n 8:查看前几行十六进制,应含53 57 41 50(即 "SWAP" ASCII); -
sudo swapon --show不显示该设备 ≠ 元数据错误,但sudo mkswap -v /dev/sdb1会明确输出“setting up swapspace version 1”; - 若
sudo swapon /dev/sdb1报错 “invalid argument”,大概率是 mkswap 未成功执行或目标被挂载/占用。
为什么不能跳过 mkswap 直接 swapon
swapon 不会自动补全元数据。它只检查设备/文件开头是否存在合法 swap 签名。没有 mkswap 写入的结构,内核拒绝加载——这是安全机制,防止任意文件或块设备被误当作 swap 使用,造成数据泄露或系统崩溃。

















