1. 麒麟V10系统磁盘满问题的典型表现
麒麟V10作为国产操作系统的代表版本,在日常使用中经常会遇到系统盘空间不足的告警。根据我多年运维经验,这个问题通常表现为以下几种典型场景:
- 系统日志持续输出导致/var目录膨胀(特别是/var/log/journal目录)
- 软件包缓存未清理(/var/cache/apt/archives或/var/cache/yum)
- 容器运行时存储失控(/var/lib/docker/overlay2)
- 用户家目录大文件堆积(特别是下载目录和桌面)
- 临时文件未清理(/tmp目录积压)
提示:在麒麟V10中,默认启用的systemd-journald会持续记录系统日志,这是最容易被忽视的空间占用源。实测一个中等负载的服务器,半年不清理日志可能占用超过20GB空间。
2. 诊断磁盘空间占用的标准流程
2.1 使用基础命令快速定位
首先通过组合命令建立整体认知:
df -hT | grep -v tmpfs # 查看各分区使用情况(排除临时文件系统) du -sh /* | sort -rh | head -10 # 找出根目录下占用最大的前10个目录这个组合能快速发现异常点。比如某次排查中发现/var占用达85%,进一步分析:
du -sh /var/* | sort -rh | head -52.2 针对特殊目录的深度分析
对于常见问题目录需要特殊处理技巧:
日志目录分析:
journalctl --disk-usage # 查看journal日志总大小 ls -lh /var/log/journal/$(cat /etc/machine-id) # 查看具体日志文件容器存储分析:
docker system df # Docker专用分析命令 podman stats --no-stream # Podman的替代方案软件包缓存检查:
# 对于APT系 du -sh /var/cache/apt/archives # 对于YUM系 yum clean all --enablerepo='*' # 先清理再检查3. 针对性清理方案与实施步骤
3.1 日志文件的智能清理
推荐使用logrotate配置自动化管理,示例配置:
/var/log/syslog { daily rotate 7 compress delaycompress missingok notifempty create 640 root adm }对于journal日志,调整/etc/systemd/journald.conf:
SystemMaxUse=500M # 限制总大小 MaxRetentionSec=1month # 保留时长立即生效命令:
systemctl restart systemd-journald journalctl --vacuum-size=200M # 立即缩减到200MB3.2 软件包缓存的清理策略
根据包管理器类型选择方案:
APT系(银河麒麟常用):
apt-get autoremove --purge # 删除无用包 apt-get clean # 清空下载缓存YUM/DNF系:
package-cleanup --oldkernels --count=1 # 只保留当前内核 dnf autoremove # 自动移除无用依赖3.3 容器存储的优化方案
对于Docker用户必做操作:
docker system prune -af # 清理所有无用对象 # 更彻底的清理(会删除所有停止的容器) docker system prune -af --volumes建议在crontab中添加定期任务:
0 3 * * * /usr/bin/docker system prune -f >/dev/null 2>&14. 预防性维护与高级技巧
4.1 文件系统的监控方案
配置prometheus+node_exporter监控关键指标:
# prometheus.yml 片段 - job_name: 'kylin' static_configs: - targets: ['localhost:9100'] metrics_path: '/metrics'对应告警规则示例:
groups: - name: disk.rules rules: - alert: DiskSpaceCritical expr: (node_filesystem_avail_bytes{fstype=~"ext4|xfs",mountpoint="/"} * 100) / node_filesystem_size_bytes{fstype=~"ext4|xfs",mountpoint="/"} < 10 for: 5m4.2 LVM的动态扩展方案
对于采用LVM分区的系统,扩展步骤:
pvcreate /dev/sdb1 # 假设新增磁盘为sdb1 vgextend vg_kylin /dev/sdb1 # 扩展卷组 lvextend -L +50G /dev/vg_kylin/lv_root # 扩展逻辑卷 resize2fs /dev/vg_kylin/lv_root # 调整文件系统4.3 用户空间配额管理
启用配额系统:
# /etc/fstab 添加usrquota,grpquota选项 /dev/vg_kylin/lv_home /home ext4 defaults,usrquota,grpquota 0 0 # 初始化配额 quotacheck -cugm /home quotaon -av设置用户限额:
setquota -u username 500M 1G 0 0 /home5. 疑难案例分析与解决方案
5.1 已删除文件但空间未释放问题
常见于被进程占用的文件:
lsof +L1 # 查看被删除但未释放的文件 # 典型输出示例: # COMMAND PID USER FD TYPE DEVICE SIZE/OFF NLINK NODE NAME # java 123 root 1w REG 253,0 10240000 0 12345 /var/log/app.log (deleted)解决方案:
# 方案1:重启持有进程 systemctl restart service_name # 方案2:清空文件内容 truncate -s 0 /proc/123/fd/1 # 其中123是PID5.2 磁盘IO异常导致的误报
当出现"no space left"但df显示有空闲时:
df -i # 检查inode使用情况 # 若inode耗尽,需要找到小文件聚集目录 find / -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n5.3 特殊文件系统问题处理
对于overlay2存储驱动的问题:
docker info | grep "Storage Driver" # 确认驱动类型 # 清理时需要先停止所有容器 systemctl stop docker rm -rf /var/lib/docker/overlay2/* systemctl start docker我在某次生产环境维护中,发现一个Oracle数据库服务器频繁报磁盘空间不足,但常规检查未发现异常。最终通过以下命令定位到问题:
find / -type f -size +1G -exec ls -lh {} + 2>/dev/null结果发现是审计日志(/var/log/audit/audit.log)因配置错误增长到47GB。通过优化auditd规则并设置日志轮转解决了问题。这个案例说明,有时候需要跳出常规思路,直接搜索大文件可能更高效。