CentOS 系统盘 20GB 是否够用,取决于具体用途和使用方式,但通常来说:勉强可用,但不推荐,存在较大风险,尤其对生产环境或长期运行的服务器。
以下是详细分析:
✅ 20GB 可能“够用”的场景(仅限轻量、临时、测试):
- 纯命令行(无 GUI)的 CentOS 7/8/Stream 最小化安装(
@core或minimal install); - 仅运行单一轻量服务(如静态网站 Nginx + 单个 PHP 脚本,或简单 Python Flask API);
- 不安装额外软件包(如 Docker、Java、MySQL、Git、编译工具等);
- 日志轮转严格配置(如
logrotate限制保留天数/大小),且不写大量日志; - 不保存应用数据(数据库、上传文件、缓存等均挂载到独立数据盘);
- 定期手动清理(如
yum clean all、journalctl --vacuum-size=50M); - 仅为短期测试、学习或 CI/CD 构建节点(生命周期短)。
| ⚠️ 20GB 容易“不够用”的常见原因(实际运维中高频发生): | 类别 | 占用示例 | 大小估算 |
|---|---|---|---|
| 系统更新 & yum 缓存 | yum update 后旧内核 + RPM 包缓存 |
1–3 GB(多次更新后快速累积) | |
| 系统日志(journald) | 默认 systemd-journald 无限保留 |
可达 2–5 GB+/月(尤其有报错/高频率服务) | |
| Docker / 容器镜像与层 | 一个基础镜像(nginx:alpine)+ 若干层 | 200MB–2GB;多个服务轻松超 5GB | |
| 临时文件 & 编译产物 | /tmp, /var/tmp, make 中间文件 |
数百 MB~数 GB(尤其未定时清理) | |
| 应用日志(Nginx/Apache/自定义) | 未配置 logrotate 或误配为 no rotate |
几天即可占满剩余空间 | |
| 残留内核(kernel) | CentOS 默认保留多个旧内核(installonly_limit=5) |
每个内核约 200–400MB → 5个 ≈ 1.5GB+ | |
| SELinux 策略、语言包、文档 | man-pages, glibc-common, i18n 等 |
额外 300–800MB(最小化安装可避免,但易被意外安装) |
🔍 实测参考(CentOS 7 minimal):
- 初始最小化安装:约 600–900MB
- 执行一次
yum update(含内核升级):+1.2GB - 安装 Docker + 拉取 3 个常用镜像(nginx, redis, python):+2.5GB
- 运行 1 个月(默认 journald + 应用日志):+1.8GB
→ 1个月内已占用 ~6–7GB,剩余仅 13–14GB;再过 2–3 个月极易触发磁盘满(/dev/sda1: 100%)→ 服务崩溃、SSH 登录失败、系统冻结。
| ✅ 强烈建议的最低配置: | 场景 | 推荐系统盘大小 | 说明 |
|---|---|---|---|
| 生产环境(Web/API/DB等) | ≥40GB(推荐 60–100GB) | 预留充足空间应对更新、日志、临时文件;便于监控告警(如预留 20% 空间) | |
| 开发/测试服务器 | ≥30GB | 平衡成本与稳定性,避免频繁救火 | |
| 容器化平台(Docker/K8s) | ≥60GB 或单独挂载 /var/lib/docker |
Docker 存储目录极易膨胀,必须隔离 | |
| 纯学习/命令行实验 | 20GB 可短期尝试,但务必: • sudo package-cleanup --oldkernels --count=1• sudo journalctl --vacuum-time=2weeks• sudo yum clean all 定期执行 |
🔧 补救措施(若已用 20G):
# 1. 清理旧内核(保留最新1个)
sudo package-cleanup --oldkernels --count=1 -y
# 2. 限制 journald 日志(重启生效)
echo 'SystemMaxUse=100M' | sudo tee -a /etc/systemd/journald.conf
sudo systemctl restart systemd-journald
# 3. 清理 yum 缓存
sudo yum clean all
# 4. 查看大目录(定位元凶)
sudo du -sh /* 2>/dev/null | sort -hr | head -10
sudo du -sh /var/log/* /var/cache/yum /var/lib/docker 2>/dev/null | sort -hr
✅ 终极建议:
不要省系统盘空间。云硬盘价格极低(如阿里云高效云盘约 ¥0.12/GB/月),多买 20GB 成本每月不到 ¥2.4,却可避免 80% 的线上故障和深夜救火。把数据盘(
/data)、Docker 根目录(/var/lib/docker)、日志目录(/var/log)全部挂载到独立云盘,系统盘专注 OS,这才是云上最佳实践。
如你告知具体用途(如:部署 WordPress?跑 Java 微服务?做 Jenkins 构建机?),我可以给出更精准的配置建议 👍
需要我帮你写一份自动清理脚本或分区挂载方案吗?
ECLOUD博客