Table of contents
Open Table of contents
结论:
在现代的Linux发行版中,假如你是一般的用户,不会手动更改默认系统休眠的设置,那么4-8G的swap就足够了。反之,会手动更改成休眠到磁盘,才需要大于等于内存大小。
针对前者,更推荐的做法是,不需要创建swap分区,进入系统后再创建swap文件即可。
具体原理是是这样的:
Linux 里常见的电源状态大致有两类:
- suspend:挂起,通常保留在内存里
- hibernate:休眠,把系统状态写到磁盘
可以查看系统支持的状态:
cat /sys/power/state
# freeze = 最浅的软件冻结
# mem = 普通挂起,通常是 suspend
# disk = 休眠到磁盘,也就是 hibernate
Swap 的核心作用:
当 RAM 不够,或者某些内存页长期不用时,把一部分内存内容临时放到磁盘。
主要对象是:
- 匿名页:heap、stack、malloc/new 申请的内存
- tmpfs/shmem:例如 /dev/shm、某些内存文件系统内容
这些内容没有普通文件作为后备,不能像文件缓存那样直接丢掉。
而文件映射页不同:
- 干净文件页:可以直接丢,之后从原文件重新干净文件页:
- 脏文件页:通常写回原文件
所以 Swap 不是“扩展硬盘缓存”,而是给没有文件后备的内存提供退路。
不用 hibernate,就没必要 Swap = RAM
假设你的系统只是普通 suspend:
systemctl suspend → 写入 mem → 状态保留在内存 → 不需要把整块内存写入 Swap
这时 Swap 的作用主要是防止内存压力过大,而不是保存整机状态。
所以对于普通桌面用户:Swap 4GB 或 8GB 通常够
如果硬盘空间很紧张:2GB Swap 也不是不能用
只有你明确要使用 hibernate,才需要 Swap >= RAM
如果你明确要用:
systemctl hibernate # 让 Linux 进入休眠到磁盘状态、
或者自己修改相关的休眠设置,
那么 swap 就不只是“内存压力缓冲区”,而是“休眠镜像存放区”。
这时通常建议:Swap 大于等于 RAM。例如:16GB 内存 → 至少 16GB swap
严格说,休眠镜像不一定永远等于完整内存大小,因为系统可能会压缩或丢弃部分可重建页面。
但为了避免休眠失败,保守做法仍然是:Swap >= RAM
分区还是文件?
现在更推荐普通用户使用 swap file。
- swap partition 是独立磁盘分区,例如
/dev/nvme0n1p3。
优点是结构清晰,传统工具支持好。缺点是后期不好改大小。
- swap file 是文件系统里的普通文件,例如
/swapfile或/swap.img。
它本质上也是磁盘空间,只是以文件形式存在。优点是灵活。
所以普通桌面用户如果不用 hibernate:推荐 swap file。
如果明确要 hibernate:可以考虑 swap partition,或者认真配置 swap file 的 resume。
因为 swap file 也能用于 hibernate,但配置通常更麻烦。
因此安装系统时,普通用户不一定要单独划 swap 分区。
更灵活的做法是:安装时只分 EFI、/、可选 /home,进入系统后再根据需要创建 swap file。