在CentOS上搭建Web服务器时,合理的磁盘空间管理至关重要,它直接影响服务器的性能、稳定性和可维护性。以下是一些关键注意事项和最佳实践:
推荐分区方案:
- /
(根分区):20-30GB(系统文件和基本应用)
- /var
:单独分区,30GB+(Web内容、日志和数据库通常存放于此)
- /home
:根据用户数量决定
- /tmp
:5-10GB(临时文件)
- swap
:物理内存的1-2倍(但不超过8GB)
理由: 隔离关键目录可以防止一个区域填满导致整个系统崩溃。
需要特别监控的目录:
- /var/www
(或您的Web根目录)
- /var/log
(日志文件)
- /var/lib/mysql
(如果使用MySQL)
- /tmp
监控命令:
df -h # 查看各分区使用情况
du -sh /var/www/* # 查看Web目录大小
du -sh /var/log/* # 查看日志目录大小
日志轮转配置:
1. 使用logrotate管理日志文件:
bash
yum install logrotate
2. 编辑配置文件/etc/logrotate.conf
和/etc/logrotate.d/
下的应用特定配置
示例Apache日志轮转配置(/etc/logrotate.d/httpd
):
/var/log/httpd/*log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
sharedscripts
postrotate
/bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
endscript
}
定期清理:
1. 使用tmpwatch清理旧临时文件:
bash
yum install tmpwatch
tmpwatch 24h /tmp
2. 设置cron任务定期清理:
bash
0 3 * * * /usr/sbin/tmpwatch 24h /tmp
最佳实践: - 将用户上传内容与Web根目录分离 - 限制上传文件大小(在Web服务器配置中) - 定期清理旧版本/备份文件 - 使用符号链接管理大型静态资源
MySQL/MariaDB优化:
-- 定期优化表
OPTIMIZE TABLE table_name;
-- 清理二进制日志(如有复制)
PURGE BINARY LOGS BEFORE '2023-01-01 00:00:00';
-- 配置my.cnf中的日志过期时间
[mysqld]
expire_logs_days = 7
设置磁盘空间警报:
1. 安装监控工具:
bash
yum install nagios zabbix-agent
2. 或使用简单脚本:
bash
#!/bin/bash
ALERT=90
df -P | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $6 }' | while read output;
do
usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 )
partition=$(echo $output | awk '{ print $2 }' )
if [ $usep -ge $ALERT ]; then
echo "Running out of space \"$partition ($usep%)\" on $(hostname) as on $(date)" |
mail -s "Alert: Almost out of disk space $usep%" admin@example.com
fi
done
推荐备份方案: - 完整系统备份:每周一次 - 增量备份:每日进行 - 数据库备份:每日完整备份+二进制日志 - 关键配置文件备份:每次修改后
示例备份命令:
# Web内容备份
tar -czf /backups/web-$(date +%Y%m%d).tar.gz /var/www
# MySQL备份
mysqldump -u root -p --all-databases > /backups/mysql-$(date +%Y%m%d).sql
当空间不足时: 1. 添加新磁盘并挂载到新目录 2. 使用LVM管理磁盘,便于扩展 3. 将部分内容迁移到网络存储(NAS/SAN) 4. 考虑使用符号链接将部分目录重定向到其他分区
通过遵循这些磁盘空间管理实践,您可以确保CentOS Web服务器在高效运行的同时,保持足够的空间余量以应对突发增长和日志积累。