在 Linux 服务器(无论是 CentOS 还是 Ubuntu)中,系统盘和数据盘的划分主要基于运维安全和数据持久性的考量。虽然底层文件系统结构是一样的,但在实际生产环境(尤其是云厂商如阿里云、腾讯云、华为云的 ECS/CVM 实例)中,这种逻辑划分非常明确。
简单来说:系统盘存放“能重装的”,数据盘存放“不能丢的”。
下面我从文件路径、具体内容和最佳实践三个维度来详细拆解。
一、 系统盘(System Disk):存放操作系统与运行依赖
系统盘通常挂载为 /(根目录)。它包含启动系统所需的一切二进制文件、库文件和配置信息。如果系统盘损坏或需要重装系统,这些数据通常会丢失(除非你做了快照备份),但可以通过镜像快速恢复。
1. 核心系统与内核
/boot: 存放引导加载程序(GRUB)、内核文件(vmlinuz)和初始内存盘(initrd/initramfs)。这是机器通电后第一个读取的地方。/bin,/sbin,/usr/bin,/usr/sbin: 存放各种命令的二进制可执行文件。比如ls,cd,systemctl,nginx等。/lib,/usr/lib: 动态链接库文件。绝大多数命令都依赖这些库才能运行。
2. 硬件抽象与设备节点
/dev: 设备文件目录。注意:这里不是真正的磁盘分区,而是指向硬件设备的接口(如/dev/sda是磁盘,/dev/null是黑洞)。在云服务器上,这些是由云主机XX(Agent)动态生成的。/proc,/sys: 伪文件系统,用于向用户空间暴露内核参数和设备信息。它们是内存中的虚拟文件,重启后自动重建,不占用磁盘物理空间。
3. 配置与管理
/etc: 最重要的配置目录。存放所有软件的配置文件,如 SSH 配置(/etc/ssh/sshd_config)、网络配置、用户密码策略等。/var/log: 系统日志。包括messages,secure,syslog等。虽然日志会增长,但它们属于“运行时状态”,清理或重新安装系统后通常会重置。/tmp: 临时文件。重启后通常会被清空。
4. 用户主目录(争议点)
/home(Ubuntu) 或/root(CentOS): 普通用户和 root 用户的家目录。- 建议:对于开发环境,代码、脚本、个人配置放在这里是可以的。但对于生产环境,如果涉及重要业务数据,建议不要直接堆在
/home下,因为一旦误操作删除或系统崩溃,找回成本较高。
- 建议:对于开发环境,代码、脚本、个人配置放在这里是可以的。但对于生产环境,如果涉及重要业务数据,建议不要直接堆在
二、 数据盘(Data Disk):存放业务数据与持久化存储
数据盘通常是额外挂载的云硬盘(EBS/EVS/CLOUD_DISK),格式化为 ext4/xfs 后,挂载到某个特定目录(如 /data, /mnt/data, /opt/app 等)。它的核心价值在于:即使系统盘被格式化、实例被销毁重建,只要数据盘不解绑、不删除,里面的数据依然完好无损。
1. 网站与应用源码
- Web 服务器内容: Nginx/Apache 的
html目录,PHP/Python/Java 应用的部署包。 - 数据库文件: MySQL 的
datadir(如/var/lib/mysql若迁移至数据盘),MongoDB 的dbpath,Redis 的 dump 文件等。- 注:很多高性能架构会将数据库数据目录直接指向数据盘,以减少 IO 竞争并保障数据安全。
2. 用户上传的文件与媒体资源
- 图片/视频/附件: 例如 WordPress 的
wp-content/uploads,论坛的附件目录。 - 静态资源: CDN 源站回源的原始文件。
3. 备份与归档
- 备份目录: 定期生成的数据库备份 SQL 文件、系统配置备份、应用打包 tar.gz 文件。
- 日志归档: 虽然实时日志在系统盘,但经过 logrotate 切割后的历史日志,或者大型应用的长期审计日志,建议存放在数据盘,避免撑爆系统盘导致系统无法登录。
4. 虚拟机/容器镜像缓存
- Docker/Volumes: 如果使用 Docker,强烈建议将 Volume 挂载到数据盘。否则容器内的数据会随着容器删除而消失,且会占用系统盘 IO。
- K8s PV/PVC: 在 Kubernetes 集群中,持久卷(Persistent Volume)通常映射到数据盘。
三、 常见误区与最佳实践
1. “/var/www” 到底放哪?
- 传统做法: 放在系统盘
/var/www/html。 - 现代推荐: 如果网站流量大、文件多,建议将
/var/www软链接指向数据盘,或者直接修改 Nginx/Apache 的文档根目录为数据盘路径。这样可以防止日志写入或上传文件撑爆系统盘,导致 SSH 无法连接。
2. 日志要不要放数据盘?
- 短期日志: 放在系统盘
/var/log。因为系统盘 IO 性能通常优于廉价的数据盘(尤其是云厂商的基础型数据盘),且系统诊断时需要快速读取当前日志。 - 长期/海量日志: 使用 ELK、Loki 等集中式日志系统,将日志通过网络发送到独立服务器,而不是堆积在本机数据盘。如果必须本地存储,则放入数据盘。
3. Swap 分区/文件放哪?
- 建议: 放在系统盘。Swap 是内存不足时的临时交换空间,频繁读写会影响系统稳定性,且其内容不需要持久化保存。
4. 云厂商的特殊情况
- 阿里云/腾讯云: 默认情况下,系统盘是 SSD 或高效云盘,数据盘可能是普通云盘或 ESSD。务必利用云盘快照功能对数据盘进行定期备份,而不是依赖系统盘备份。
- 初始化脚本: 新购云服务器时,云厂商通常会在首次启动时自动挂载数据盘并格式化。你需要编写
/etc/fstab确保重启后能自动挂载。
总结对照表
| 文件/目录 | 所在盘 | 原因 | 是否可丢失 |
|---|---|---|---|
/boot, /bin, /lib |
系统盘 | 系统启动必需 | 是(需重装) |
/etc |
系统盘 | 系统配置 | 否(需备份配置) |
/var/log |
系统盘 | 实时诊断需求 | 否(需轮转清理) |
/home |
系统盘 | 用户环境 | 视情况(建议备份) |
/data/web |
数据盘 | 业务代码 | 不可丢失 |
/data/db |
数据盘 | 数据库文件 | 不可丢失 |
/data/uploads |
数据盘 | 用户上传内容 | 不可丢失 |
/data/backups |
数据盘 | 备份文件 | 不可丢失 |
一句话原则:把可以重新生成或可以快速重装的东西放在系统盘;把花了时间积累、难以复制、丢了就哭的东西放在数据盘。
云技术博客