1. 问题现象与紧急处理
当银河麒麟操作系统因磁盘空间耗尽无法正常启动时,典型表现为:
- 系统启动时卡在引导界面
- 出现"No space left on device"等错误提示
- 图形界面无法加载或立即闪退
- 部分系统服务启动失败
遇到这种情况,建议按以下步骤进行紧急处理:
1.1 进入单用户模式
- 重启系统,在GRUB菜单界面按"e"键进入编辑模式
- 找到以"linux"开头的行,在行尾添加"init=/bin/bash"
- 按Ctrl+X启动系统,此时会进入root shell环境
注意:此操作需要物理机访问权限,如果是远程服务器,建议通过带外管理(iLO/iDRAC等)操作
1.2 初步空间清理
在单用户模式下执行:
bash复制# 检查各分区使用情况
df -h
# 清理日志文件(通常占用较大空间)
rm -rf /var/log/*.gz
rm -rf /var/log/*.log
# 清理临时文件
rm -rf /tmp/*
rm -rf /var/tmp/*
# 清理包管理器缓存
apt-get clean
yum clean all
2. 根本原因分析与定位
2.1 常见占用源分析
通过以下命令定位大文件:
bash复制# 查找大于100MB的文件
find / -type f -size +100M -exec ls -lh {} \;
# 按目录大小排序
du -h --max-depth=1 / | sort -h
银河麒麟系统中常见的大文件来源包括:
- 日志文件:/var/log/journal/
- 核心转储:/var/lib/systemd/coredump/
- 软件包缓存:/var/cache/apt/archives/
- 用户文件:/home/
- 容器/虚拟机镜像:/var/lib/docker/
2.2 特殊注意事项
银河麒麟V10特有的空间占用情况:
- 审计日志:/var/log/audit/audit.log
- 安全加固产生的临时文件
- 国产化软件产生的缓存文件
3. 系统恢复与预防措施
3.1 完整恢复流程
- 通过live CD/USB启动系统
- 挂载原系统分区:
bash复制mount /dev/sda1 /mnt
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
- chroot进入原系统环境:
bash复制chroot /mnt
- 执行全面清理:
bash复制# 清理旧内核
dpkg --list | grep linux-image | awk '{print $2}' | grep -v `uname -r` | xargs apt-get purge -y
# 清理无用依赖包
apt-get autoremove --purge -y
# 设置日志轮转
journalctl --vacuum-size=200M
3.2 长期预防方案
- 配置日志轮转:
bash复制# 编辑/etc/logrotate.conf
/var/log/syslog {
rotate 7
daily
missingok
notifempty
delaycompress
compress
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
- 添加磁盘空间监控:
bash复制# 创建监控脚本/usr/local/bin/disk_check.sh
#!/bin/bash
THRESHOLD=90
CURRENT=$(df / | grep / | awk '{print $5}' | sed 's/%//g')
if [ "$CURRENT" -gt "$THRESHOLD" ]; then
echo "Disk space alert on $(hostname)" | mail -s "Disk Space Alert" admin@example.com
fi
# 添加到crontab
echo "0 * * * * /usr/local/bin/disk_check.sh" >> /etc/crontab
4. 高级故障处理技巧
4.1 处理已删除文件仍占用空间
当进程持有已删除的文件句柄时:
bash复制# 查找被删除但仍被进程占用的文件
lsof | grep deleted
# 释放空间方法
kill -9 <PID> # 结束相关进程
或者
> /proc/<PID>/fd/<FD_NUM> # 清空文件内容
4.2 特殊文件系统问题
处理银河麒麟特有的文件系统问题:
- 检查文件系统错误:
bash复制fsck -y /dev/sda1
- 处理inode耗尽情况:
bash复制df -i # 检查inode使用
find / -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n # 查找小文件密集目录
4.3 系统关键目录保护
为防止关键目录被误填满:
bash复制# 创建专用分区
mkfs.ext4 /dev/sdb1
mkdir /var/log/audit
mount /dev/sdb1 /var/log/audit
# 使用quota限制用户空间
apt-get install quota
edquota -u username
