当前位置:首页 > 文章列表 > 文章 > linux > Linux systemd.swap 怎样配置交换文件单元

Linux systemd.swap 怎样配置交换文件单元

来源:17golang原创 2026-11-03 12:31:00 0浏览 收藏

如果要让 systemd 管理一个交换文件,关键不是把命令塞进服务单元,而是创建与受管文件对应的 .swap 单元,并在 [Swap] 中写入必需的 What=。以 /swapfile 为例,原生单元名应使用 swapfile.swap,文件内容至少包含 What=/swapfile。

官方地址:https://www.freedesktop.org/software/systemd/man/latest/systemd.swap.html

最小可用配置是:创建权限正确的 /swapfile,写入 swapfile.swap,执行 daemon-reload 后用 systemctl enable --now swapfile.swap 管理它。若同一交换文件同时写在 /etc/fstab,先保留一个配置入口,避免排障时不知道实际采用了哪份配置。

先确定 swap 单元名和 What 路径

systemd 的交换单元文件名需要对应它管理的设备或文件。设备路径会按 systemd 的路径转义规则映射成单元名;对根目录下的 /swapfile,常见结果就是 swapfile.swap。单元中的 What= 则写回绝对路径 /swapfile,它是 [Swap] 段的必填项。

这两个字符串承担不同职责:文件名用于让 systemd 找到并识别单元,What= 用于告诉 swapon 实际启用哪个设备节点或文件。只改其中一个,往往会让排障变得困难。

Linux systemd.swap 交换文件单元与 What 配置关系说明图
图1:swap 文件与 .swap 单元的静态结构说明图,不是运行截图或运行证据。

创建交换文件和最小单元

下面的示例只展示配置形态,不代表已经在当前机器执行。交换文件的大小应按实际内存压力、发行版文档和业务需要决定;本文只聚焦 systemd 单元如何接管它。

# 创建交换文件;大小示例仅用于演示,请按机器规划调整
sudo fallocate -l 2G /swapfile

# 交换文件不应对普通用户开放读写权限
sudo chmod 600 /swapfile

# 写入交换空间签名;失败时停止后续 systemd 配置
sudo mkswap /swapfile

# 创建与 /swapfile 对应的原生单元
sudo tee /etc/systemd/system/swapfile.swap >/dev/null 

What= 是必需字段,Priority= 是可选字段。如果把优先级写进 Options=pri=,应避免再用另一处设置同一个含义,以免读配置时产生误判。交换单元只适用于系统服务管理器或 root 的用户服务管理器,普通用户服务管理器不能直接管理 Linux swap。

理解 systemd 自动补上的依赖

对于文件型 swap,systemd 会根据 What= 建立与相应挂载单元的依赖;设备型 swap 则会关联对应设备单元。官方手册把这些关系描述为自动加入的 Requires= 和 After=,因此通常不必手写一套重复的设备等待逻辑。

本地 swap 默认会与 umount.target 形成关闭关系,并排在 swap.target 之前。对于需要网络访问的交换设备,可以使用 _netdev 标记网络边界;这会让它转而与远程文件系统和网络在线目标建立相应关系。

Linux swap 单元 fstab 原生配置与 systemd 依赖边界说明图
图2:swap 配置入口与依赖边界结构说明图,不是实际系统运行界面。

用 systemctl 载入、启用和查看状态

单元文件写入 /etc/systemd/system/ 后,先让 systemd 重新读取配置,再决定是立即启用、只启动本次,还是只查看依赖关系。

# 让 systemd 重新读取新增或修改的单元文件
sudo systemctl daemon-reload

# 立即启用并启动;enable 负责开机拉起,--now 同时负责当前启动
sudo systemctl enable --now swapfile.swap

# 查看单元状态和最近一次失败原因
systemctl status swapfile.swap --no-pager

# 查看 What、依赖和启动目标等解析后的属性
systemctl show swapfile.swap -p What -p After -p Requires -p Before

# 从内核视角确认当前启用的交换空间;输出是检查结果,不是配置文件
swapon --show

如果修改了 What= 或单元依赖,先执行 daemon-reload。如果 status 显示启动失败,优先看 What= 指向的文件是否存在、权限是否为 600、是否已经执行 mkswap,以及是否有另一份 fstab 配置。

noauto、nofail 和 _netdev 怎么选

启动策略不要混为一谈:

选项适用含义注意点
auto默认加入相关目标,系统启动时自动拉起适合本机稳定存在的交换文件或设备
noauto不作为 swap.target 的自动依赖需要由其它单元或人工命令显式启动
nofail只希望启动目标拉起它,不把失败视为必须满足的依赖适合可选交换设备,避免它失败时阻塞启动
_netdev声明交换设备需要网络访问网络交换与本地文件型 swap 的依赖边界不同

其中 noauto、nofail 和 _netdev 常在 /etc/fstab 的选项字段里出现;它们不是可以随意写进原生 [Swap] 单元的同义替代。原生单元需要优先查对应的 systemd 文档和 Options= 语义。

不要让 fstab 和原生单元互相打架

交换空间也可以写在 /etc/fstab 中。systemd 会在启动时或重新加载管理器配置时,把 fstab 条目动态转换成原生单元。如果同一个设备或文件既出现在 fstab,又有同名原生单元,官方规则是原生单元配置优先。

# 只查看 fstab 中是否已经存在同一个交换文件条目
grep -n -- '/swapfile' /etc/fstab

# 查看 systemd 当前识别到的单元文件来源和覆盖关系
systemctl cat swapfile.swap

# 修改 fstab 或单元后重新读取配置,再观察解析结果
sudo systemctl daemon-reload
systemctl show swapfile.swap -p FragmentPath -p UnitFileState

实际维护时建议选一个明确入口:要么让 fstab 管理简单的静态交换文件,要么让原生 .swap 单元承载更细的描述和依赖。重复配置并不会带来两份交换空间,却会让“改了为什么不生效”的判断更复杂。

常见问题

为什么单元名不是任意的 service 名?

因为 .swap 单元需要对应受管的交换设备或文件。对路径进行 systemd 规则转义后得到的名称,能让单元和资源一一对应。

只写 What= 能不能启动?

还要保证目标文件已经初始化为交换空间,并且单元文件被 systemd 重新加载。What= 只是告诉 systemd 要管理谁,不会代替 mkswap 创建签名。

fstab 和原生单元应该保留哪一个?

固定本机资源可以选更简单的 fstab;需要清晰的单元描述、独立状态管理或特殊依赖时再保留原生单元。若两者同时存在,先确认原生单元是否覆盖了 fstab 生成的结果。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Python 3.14 升级后怎样检查扩展模块兼容Python 3.14 升级后怎样检查扩展模块兼容
上一篇
Python 3.14 升级后怎样检查扩展模块兼容
Linux journalctl --rotate 怎样手动切换当前日志文件
下一篇
Linux journalctl --rotate 怎样手动切换当前日志文件
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    857次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    862次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    938次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    919次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    747次使用