1. 项目概述
在服务器运维工作中,磁盘空间管理是个永恒的话题。当系统提示"no space left on device"时,如何快速定位大文件并释放空间?今天我要分享的是在KeyarchOS系统上安装和使用agedu工具的经验。这个轻量级工具能帮我们直观地分析磁盘使用情况,找出真正的"空间杀手"。
KeyarchOS作为国产化服务器操作系统,在ARM架构上表现优异。而agedu作为老牌磁盘分析工具,其优势在于能按时间维度分析空间占用,这是比单纯看文件大小更聪明的做法。想象一下,当你面对一个已经使用了80%的磁盘时,是删除上周生成的日志文件,还是清理三个月前的临时文件更有价值?agedu能帮你做出这个判断。
2. 环境准备
2.1 系统确认
首先确认系统环境,我使用的是KeyarchOS 5.8sp2,运行在华为鲲鹏920的ARM架构服务器上。可以通过以下命令查看系统信息:
bash复制cat /etc/os-release
uname -a
输出结果应包含"KeyarchOS"标识和aarch64架构信息。如果你的系统是x86架构,后续的rpm包需要相应调整。
2.2 依赖检查
安装前建议更新系统并安装基础编译工具:
bash复制yum update -y
yum groupinstall "Development Tools" -y
yum install wget rpm-build -y
特别提醒:生产环境中进行yum update前,建议先测试关键服务的兼容性。我曾经遇到过glibc升级导致Java应用崩溃的情况,后来养成了在测试环境先验证更新的习惯。
3. 安装agedu
3.1 获取安装包
官方推荐从源码编译安装,但考虑到部署效率,我们选择预编译的rpm包。访问阿里云镜像站搜索agedu:
bash复制wget https://mirrors.aliyun.com/epel/7/aarch64/Packages/a/agedu-20171202-8a8299e.el7.aarch64.rpm
如果链接失效,可以到agedu官网下载源码包手动编译。这里分享一个编译技巧:在ARM服务器上编译时,添加--disable-silent-rules参数可以显示完整编译信息,方便排错。
3.2 安装过程
执行rpm安装命令:
bash复制rpm -ivh agedu-20171202-8a8299e.el7.aarch64.rpm
安装完成后验证版本:
bash复制agedu -V
注意:如果遇到依赖错误,可以通过
yum provides */libxxx.so查找缺失的库。我曾经在龙芯平台上遇到过glibc版本不兼容的问题,最终通过源码编译解决了。
4. 基础使用
4.1 目录扫描
扫描/home目录(生产环境建议在业务低峰期执行):
bash复制agedu -s /home -f /tmp/home_scan.dat
这里有几个实用技巧:
- 使用
-f指定索引文件位置,避免默认生成在扫描目录下 - 添加
--progress参数可以看到实时进度 - 对特别大的目录,可以用
--prune "*.log"跳过日志文件
4.2 生成报告
生成网页版报告:
bash复制agedu -w -f /tmp/home_scan.dat --address 0.0.0.0:8080
浏览器访问服务器IP:8080即可看到交互式报告。报告中的亮点功能:
- 按时间热度着色(越久远显示越红)
- 点击目录可下钻分析
- 显示累计大小占比
我曾用这个功能发现某个服务生成的调试文件占用了200GB空间,而这些文件其实早已不需要保留。
5. 高级技巧
5.1 定期扫描监控
设置每周自动扫描并生成报告:
bash复制# 创建扫描脚本
cat > /usr/local/bin/disk_scan.sh <<'EOF'
#!/bin/bash
DATE=$(date +%Y%m%d)
agedu -s / -f /tmp/scan_$DATE.dat --prune "*.log" --prune "/proc/*"
agedu -w -f /tmp/scan_$DATE.dat --address 0.0.0.0:8080 >/dev/null 2>&1 &
EOF
# 添加执行权限并设置计划任务
chmod +x /usr/local/bin/disk_scan.sh
(crontab -l 2>/dev/null; echo "0 3 * * 1 /usr/local/bin/disk_scan.sh") | crontab -
5.2 安全加固
如果报告需要对外提供,务必添加认证:
bash复制agedu -w -f scan.dat --auth basic --auth-file /etc/agedu.passwd
密码文件格式:
code复制username:password
建议使用htpasswd生成加密密码:
bash复制yum install httpd-tools
htpasswd -c /etc/agedu.passwd admin
6. 常见问题排查
6.1 扫描卡住
现象:扫描进程长时间无进度
解决方法:
- 检查是否扫描到挂载的NFS或特殊文件系统
- 使用
--no-cross-fs限制不跨文件系统 - 通过
--prune排除已知问题目录
6.2 网页无法访问
现象:端口已监听但无法连接
排查步骤:
netstat -tunlp | grep agedu确认监听- 检查防火墙规则
- 尝试本地curl测试
6.3 报告数据异常
现象:显示大小与实际不符
可能原因:
- 扫描期间文件被修改
- 没有扫描权限的目录
- 文件系统统计误差
建议解决方案:重新扫描并添加--progress监控过程
7. 替代方案对比
虽然agedu很好用,但在某些场景下其他工具可能更合适:
| 工具 | 优势 | 劣势 | 适用场景 |
|---|---|---|---|
| agedu | 时间维度分析 | 扫描大目录较慢 | 历史文件清理 |
| ncdu | 交互式操作 | 无时间分析 | 快速定位大目录 |
| du+bash | 无需安装 | 功能简单 | 简单统计 |
| baobab | 图形化展示 | 需要桌面环境 | 个人电脑 |
在KeyarchOS上,我还发现自带的kos-utils工具包中有增强版的du命令,支持彩色输出和排序,可以作为日常快速检查的补充。
8. 性能优化建议
对于超大型存储系统(超过10TB),agedu的扫描可能会消耗较长时间。以下是我的优化经验:
- 分区扫描:对不同的挂载点分开扫描
- 增量扫描:保留索引文件,后续扫描用
-S增量更新 - 后台运行:使用nohup或screen在后台执行
- 资源限制:通过cgroup限制扫描进程的CPU和内存使用
例如,限制扫描进程最多使用2核CPU和4GB内存:
bash复制yum install libcgroup-tools
cgcreate -g cpu,memory:/agedu
echo 200000 > /sys/fs/cgroup/cpu/agedu/cpu.cfs_quota_us
echo 4000000000 > /sys/fs/cgroup/memory/agedu/memory.limit_in_bytes
cgexec -g cpu,memory:agedu agedu -s /data
9. 真实案例分享
去年我们有个MySQL服务器频繁报磁盘空间不足。使用agedu分析后发现:
- 慢查询日志每天增长2GB(配置错误导致记录过多)
- binlog保留时间设置过长(30天)
- 临时目录堆积大量CSV导出文件
通过调整配置和清理历史文件,直接释放了500GB空间。关键是要用agedu的-r参数按时间范围分析:
bash复制agedu -w -f scan.dat -r 30d-
这个命令只显示30天前的文件,帮助我们快速定位到真正需要清理的历史文件。
10. 延伸应用
除了磁盘清理,agedu还可以用于:
- 容量规划:分析各业务目录增长趋势
- 安全审计:查找异常的大文件
- 迁移评估:确定需要迁移的关键数据
比如在服务器迁移前,我会用以下命令生成迁移优先级报告:
bash复制agedu -s / -f full_scan.dat --exclude "/proc/*" --exclude "/sys/*"
agedu -H -f full_scan.dat -o /var/www/html/migration_report
这个报告会按目录大小和最后访问时间排序,帮团队决定迁移顺序。