CentOS生产环境的分区方案直接决定后期运维成本。根分区写满、日志撑爆磁盘、业务数据无处安放,这些问题基本都能追溯到初始分区时的随意。很多团队拿到服务器后习惯一路回车自动分区,结果运行几个月后不得不停机扩容。规划分区不是给系统盘切几块空间,而是把不同的数据增长模型和故障影响范围提前隔离。

一、分区规划前必须明确的几个核心问题
动手划分区之前,需要先梳理这台机器将来要承载的服务类型。Web服务、中间件、数据库、日志收集等角色对磁盘的消耗方式完全不同。Web访问日志可能每天增长数GB,数据库数据文件可能持续线性膨胀,而中间件产生的临时文件则呈现波动。如果不把这些写入路径拆开,根分区很快就会被某一种数据占满,进而拖垮整个系统。
故障隔离是分区规划的另一层目的。/var目录通常保存日志和缓存,一旦日志失控,如果它和根分区共用空间,系统关键进程会因磁盘写满而异常退出。/tmp目录权限特殊,任何用户都可能写入临时文件,单独划分并设置容量上限可以防止恶意或异常程序耗尽磁盘。/home目录保存用户数据和配置文件,独立出来后做备份和迁移都会更加灵活。
还需要提前确认是否使用LVM。CentOS安装程序默认采用LVM,这对于后期扩容非常关键。如果使用传统固定分区,当某个挂载点空间不足时,只能通过添加新磁盘重新挂载或做数据迁移,操作风险较高。基于LVM的规划允许在线扩展逻辑卷,配合XFS文件系统可以做到不停机增加容量。
二、常见挂载点拆分方案与容量建议
下面是一套适合大多数生产服务器的分区基线,实际容量需要根据业务数据量做调整。表中数值以系统盘总容量500GB为例,业务数据盘可以单独使用另一块磁盘。
| 挂载点 | 建议大小 | 说明 |
|---|---|---|
| /boot | 1GB | 保存内核和引导文件,单独分区避免根分区损坏时无法启动 |
| /boot/efi | 200MB | UEFI启动必需,非UEFI可忽略 |
| / | 50GB至100GB | 系统核心目录,不建议存放业务数据 |
| /var | 20GB至50GB | 日志、缓存、邮件队列,增长较快 |
| /tmp | 10GB | 临时文件,可加noexec限制执行权限 |
| /home | 20GB至50GB | 用户目录,若没有多用户需求可适当缩小 |
| /data | 剩余空间或独立磁盘 | 业务数据、数据库文件、代码部署目录 |
| swap | 见下文 | 交换分区,视内存大小和用途决定 |
/boot分区只需要1GB就足够,因为CentOS会保留多个内核版本,一般三个内核加initramfs不会超过500MB。如果使用UEFI引导,还需要单独划分/boot/efi,大小200MB即可。有些管理员习惯把/boot放在根分区里,这在LVM或RAID环境下可能导致引导加载器无法读取内核,所以单独划出来是一种稳妥做法。
Swap大小的确定没有绝对标准。传统建议是内存小于2GB时设为内存两倍,内存在2GB到8GB时设为与内存相等,内存大于8GB可以只给4GB到8GB。如果服务器需要休眠,swap必须大于等于内存,但生产环境通常不会启用休眠。对于大内存数据库服务器,可以进一步减小swap,但保留少量swap有助于缓解内存压力峰值。
# 查看现有分区情况 lsblk fdisk -l /dev/sda
三、使用LVM实现灵活扩容
LVM的逻辑层次从物理卷开始,多个物理卷组成卷组,再从卷组中划出逻辑卷。这样设计的好处是逻辑卷的大小不再受限于单块磁盘,后期可以随时往卷组里添加新磁盘,然后扩展逻辑卷。对于生产环境而言,这种能力意味着当/data空间不足时,不需要把数据复制到更大的磁盘,只需插入新盘、创建物理卷、加入卷组、扩展逻辑卷和文件系统即可。
假设服务器新增了一块磁盘/dev/sdb,准备把它纳入LVM并挂载到/data目录。下面是完整的操作流程。首先创建物理卷,再创建卷组,然后创建逻辑卷。这里直接使用整块磁盘,不需要提前用fdisk分区。
# 创建物理卷 pvcreate /dev/sdb # 创建卷组 vgcreate vg_data /dev/sdb # 创建逻辑卷,分配200GB空间 lvcreate -L 200G -n lv_data vg_data # 格式化为XFS文件系统 mkfs.xfs /dev/vg_data/lv_data # 创建挂载点并挂载 mkdir /data mount /dev/vg_data/lv_data /data # 写入开机自动挂载 echo '/dev/vg_data/lv_data /data xfs defaults,noatime 0 2' >> /etc/fstab
如果后续/data需要扩容,只要卷组里还有剩余空间,一条命令就能完成逻辑卷扩展。XFS文件系统支持在线扩容,不需要卸载挂载点。执行lvextend后,再用xfs_growfs让文件系统识别新空间。
# 扩容逻辑卷,增加100GB lvextend -L +100G /dev/vg_data/lv_data # 在线扩展XFS文件系统 xfs_growfs /data
四、文件系统选择与挂载参数调优
CentOS 7及之后的版本默认使用XFS作为根文件系统。XFS在并行读写、大文件处理方面表现优于ext4,特别是在日志服务和数据库场景下,它的分配组机制能有效降低锁竞争。ext4的优势在于小文件场景和成熟的修复工具,但生产环境如果涉及大量并发写入,优先选择XFS更稳妥。如果使用CentOS 6或者有特殊兼容要求,才考虑ext4。
挂载参数对性能影响明显。默认情况下,文件系统会记录文件访问时间,每次读取文件都会产生一次写操作。对于高并发读取场景,这会增加不必要的磁盘写入。使用noatime参数可以让读取不再更新访问时间,减小写放大。更精细的做法是用relatime,它只在访问时间早于修改时间或创建时间时更新,是一种折中方案。
# /etc/fstab 示例 /dev/mapper/centos-root / xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0 /dev/vg_data/lv_data /data xfs defaults,noatime 0 2 /dev/vg_data/lv_tmp /tmp xfs defaults,noatime,nosuid,noexec 0 2
对/tmp分区加上nosuid和noexec可以提升安全性,防止临时目录被利用执行恶意程序。不过需要注意,某些应用的安装脚本或运行时会在/tmp下执行二进制文件,如果设置noexec可能导致这些应用异常。生产环境建议先在测试机上验证,确认没有依赖后再应用到正式服务器。
五、安装后的分区检查与监控
分区规划完成并部署后,还需要建立一套检查习惯。df -h查看各挂载点的空间使用率,df -i查看inode使用情况。很多时候磁盘还有剩余空间,但inode已经耗尽,这种现象在生成大量小文件的场景中非常常见。日志目录、邮件队列、缓存目录都是小文件密集区域,需要单独关注inode消耗。
# 查看空间使用率 df -h # 查看inode使用率 df -i /var # 定位目录空间占用 du -sh /var/* | sort -rh | head -n 10
日志轮转是防止分区爆满的关键手段。生产环境的日志必须配置logrotate,按天或按大小归档,并保留合理的份数。例如Nginx日志可以按天切割,保留30天;系统日志每周轮转,保留8周。轮转脚本通常位于/etc/logrotate.d目录下,可以针对不同服务单独配置。
监控层面建议对根分区、/var、/data设置使用率告警阈值,一般达到80%时提醒,达到90%时升级处理。同时要记录各分区历史增长趋势,便于提前规划扩容。LVM虽然支持在线扩容,但也不能无限依赖,数据增长和磁盘采购周期需要提前匹配。