麒麟V10系统磁盘空间管理与优化实战指南
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.confSystemMaxUse500M # 限制总大小 MaxRetentionSec1month # 保留时长立即生效命令systemctl restart systemd-journald journalctl --vacuum-size200M # 立即缩减到200MB3.2 软件包缓存的清理策略根据包管理器类型选择方案APT系银河麒麟常用apt-get autoremove --purge # 删除无用包 apt-get clean # 清空下载缓存YUM/DNF系package-cleanup --oldkernels --count1 # 只保留当前内核 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 214. 预防性维护与高级技巧4.1 文件系统的监控方案配置prometheusnode_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规则并设置日志轮转解决了问题。这个案例说明有时候需要跳出常规思路直接搜索大文件可能更高效。