直接给结论:对于绝大多数生产环境或学习测试环境,20GB 的系统盘(System Disk)都显得非常局促,甚至可以说是“不够用”的。
除非你是在做极致的成本控制实验,或者系统只跑最基础的 Web 服务且所有数据、日志、依赖包全部挂载到独立的数据盘上,否则不建议将系统盘限制在 20GB。
下面从几个实际维度拆解一下为什么 20GB 容易捉襟见肘,以及不同场景下的建议:
1. 基础占用与增长逻辑
- 初始占用:
- CentOS/RHEL 系:默认安装后,包含内核、基本工具链、yum/dnf 缓存等,通常在 3-5GB 左右。但如果开启了自动更新、保留了旧内核(
grubby会保留多个 kernel 版本),占用会迅速增加。 - Ubuntu/Debian 系:相对精简,初始占用可能在 2-4GB。但 Ubuntu 默认的
unattended-upgrades和 snap 包机制(如果启用)可能会带来不可控的空间消耗。
- CentOS/RHEL 系:默认安装后,包含内核、基本工具链、yum/dnf 缓存等,通常在 3-5GB 左右。但如果开启了自动更新、保留了旧内核(
- 日志文件(Log):这是系统盘爆满的头号杀手。
/var/log目录下的syslog,auth.log,kern.log等。如果没有配置 logrotate(日志轮转)或轮转策略过于宽松,几天下来就能吃掉几 GB。- 如果是高并发服务器,Nginx/Apache 的 access/error log 如果没做分离,瞬间就能撑爆系统盘。
- 软件包缓存:
- CentOS 的
/var/cache/yum或 Ubuntu 的/var/cache/apt/archives。如果你频繁执行yum update或apt upgrade而不清理缓存,这些目录可以轻松占据 1-2GB。
- CentOS 的
2. 常见场景分析
场景 A:个人学习 / 轻量级 Web 服务 (WordPress, Nginx)
- 现状:很多教程推荐最小化安装,看起来 20GB 够用。
- 风险:当你开始部署 Docker、编译代码、或者安装一些大型依赖(如 Node.js 的 node_modules, Python 的 site-packages)时,空间需求会指数级上升。
- 建议:至少 30-40GB。预留 50% 的冗余空间用于突发增长和临时文件解压。
场景 B:Java / Go / C++ 后端服务
- 现状:JVM 需要堆外内存和元空间,有时会在本地磁盘生成 dump 文件;Go 编译产物较大;C++ 的 build 目录更是空间黑洞。
- 风险:一旦应用崩溃生成 core dump,或者编译过程中间文件未清理,系统盘极易写满,导致服务不可用。
- 建议:至少 50GB。强烈建议将构建目录 (
/tmp,/build) 和日志目录挂载到独立的数据盘或 tmpfs。
场景 C:Docker / Kubernetes 节点
- 现状:Docker 的默认存储驱动(overlay2)会将镜像层、容器层放在系统盘的
/var/lib/docker。 - 风险:一个中等大小的 Java 镜像可能就有 1-2GB,加上拉取过程中的中间层,系统盘很快被占满。一旦
/var/lib/docker满了,整个 Docker 守护进程会停止工作,影响所有容器。 - 建议:至少 50-80GB。并且必须配置 Docker 的
data-root指向数据盘,或者使用docker system prune定期清理。
场景 D:数据库服务 (MySQL, PostgreSQL)
- 现状:虽然数据文件通常建议放在数据盘,但错误日志、二进制日志(binlog)、慢查询日志默认都在系统盘的
/var/log/mysql或类似路径。 - 风险:binlog 如果不及时清理,会飞速膨胀。
- 建议:至少 50GB。并确保 binlog 有合理的过期策略(
expire_logs_days)。
3. 为什么国内云厂商默认给 20-40GB?
国内主流云厂商(阿里云、腾讯云、华为云等)在创建 ECS/CVM 实例时,往往默认提供 20GB-40GB 的系统盘。这主要是出于:
- 成本考量:降低用户入门门槛。
- 引导最佳实践:他们希望你将数据、日志、应用部署在数据盘(EBS/云硬盘)上,因为数据盘可以方便地快照、扩容、迁移,而系统盘通常被视为“易失性”或“可重建”的。
4. 实操建议
-
初始分配:
- 如果只是跑一个简单的静态网站或 Hello World 服务,20GB 勉强能用,但你要做好心理准备,随时监控磁盘使用率。
- 强烈推荐:选择 40GB 或 50GB 作为起步。价格差异很小(每月可能只差几块钱),但能避免后期扩容的麻烦。
-
监控告警:
- 无论分配多少,务必配置磁盘使用率告警。当使用率达到 80% 时发出警告,90% 时紧急处理。
- 使用
df -h和du -sh /*定期检查大文件。
-
数据分离原则:
- 核心原则:系统盘只放操作系统和必要的运行脚本。
- 日志:通过 syslog/rsyslog 或 ELK 栈将日志发送到外部存储或另一台日志服务器。
- 应用数据:数据库文件、Web 上传文件、代码仓库、Docker 镜像等,全部挂载到独立的数据盘。
- 临时文件:设置
/tmp为 tmpfs(内存文件系统),重启即清空,避免占用磁盘。
-
扩容方案:
- 如果已经用了 20GB 的系统盘并发现不够,不要慌。大多数云平台支持在线扩容系统盘(需要重启实例),然后在 OS 内使用
growpart和resize2fs(ext4) 或xfs_growfs(xfs) 命令扩展分区。但这终究是补救措施,不如一开始就规划好。
- 如果已经用了 20GB 的系统盘并发现不够,不要慌。大多数云平台支持在线扩容系统盘(需要重启实例),然后在 OS 内使用
总结:
20GB 系统盘在 2024 年的云计算环境下属于“极限操作”。为了运维稳定性和减少故障排查时间,建议至少分配 40GB,并将重要数据和日志分离到数据盘。这不是浪费钱,而是买了一份“运维保险”。
云技术博客