温馨提示×

centos如何回收利用数据文件

小樊
41
2025-12-21 14:38:57
栏目: 智能运维

CentOS 数据文件回收与空间释放指南

一 标准清理释放空间

  • 包管理与系统更新残留
    • 清理 YUM/DNF 缓存:执行 sudo yum clean all(CentOS 8+ 可用 sudo dnf clean all)。
    • 移除无用依赖:执行 sudo yum autoremove
    • 清理旧内核(推荐保留最近 1–2 个):执行 sudo package-cleanup --oldkernels --count=1
  • 日志与临时文件
    • 清理 systemd 日志:执行 sudo journalctl --vacuum-time=2weeks(可按需改为 –vacuum-size=100M)。
    • 清理临时目录:执行 sudo rm -rf /tmp/ /var/tmp/*(系统重启后 /tmp 通常会自动清空,但残留文件仍可能占用空间)。
    • 清理包管理器缓存目录:执行 sudo rm -rf /var/cache/yum/
  • 大文件定位与处置
    • 快速扫描大文件:执行 find / -xdev -size +1G -exec ls -lh {} ;(避免跨挂载点扫描)。
    • 交互式分析占用:安装并使用 ncdu(执行 sudo yum install ncdu && ncdu /),定位后可按需删除。
  • 图形化辅助工具
    • 桌面环境可用 BleachBit 进行可视化清理(执行 sudo yum install bleachbit)。

二 删除文件未释放空间的排查与修复

  • 现象与原因
    • 使用 rm 删除正在被进程写入的日志/文件时,仅解除目录链接,进程仍持有文件描述符,磁盘空间不会立即释放。
  • 快速修复步骤
    • 查找被删除但仍被占用的文件:执行 lsof | grep deleted,输出中可见类似 “REG … (deleted)” 的条目及对应 PID
    • 释放空间方式(按影响从低到高):
      • 让应用重新打开日志:如 nginx 可执行 nginx -s reopen,或重启对应服务。
      • 重启进程/服务:执行 systemctl restart kill (谨慎,确保业务允许)。
      • 应急取回内容:若文件内容仍被进程占用,可从 /proc//fd/ 读取并保存,例如 cat /proc/12345/fd/3 > /var/log/app.log.recovered(仅在确认安全时操作)。

三 建立安全回收站与定时清理

  • 使用 trash-cli(更接近“回收站”的体验)
    • 安装:sudo yum install trash-cli
    • 常用命令:trash trash -r trash-empty(清空回收站)。
  • 自定义回收站脚本(可控、可审计)
    • 思路:将 rm 别名指向脚本,将删除的文件 mv~/.trash/YYYY-MM-DD_HH/,并按时间策略清理。
    • 示例要点:
      • ~/.bashrc 中设置别名:alias rm=‘/usr/local/bin/rm.sh’,并提供 rl(查看回收站)、surm(强制删除)等辅助别名。
      • 脚本 /usr/local/bin/rm.sh 将目标按日期分层移动至回收站目录。
      • 定时清理:在 crontab -e 中加入如 @weekly /bin/rm -rf /home//.trash/(可按需改为 30 2 * * * find /home/*/.trash -mtime +7 -delete)。

四 虚拟机环境的额外回收(VMware)

  • 适用场景
    • VMware Workstation/Player 中删除虚拟机内大量文件后,宿主机磁盘空间未同步回收。
  • 操作步骤
    • 安装工具:sudo yum install -y open-vm-tools
    • 查看可压缩路径:vmware-toolbox-cmd disk list
    • 回收空间:vmware-toolbox-cmd disk shrink /(建议先执行 wipeshrink,以获得更好压缩率)。
  • 限制与注意
    • 虚拟磁盘需为“厚置备”或支持收缩;存在快照时无法 shrink,需先删除快照。
    • 执行 wipe 阶段会在虚拟机内临时占用与磁盘同等大小的空间,请确保宿主机磁盘有余量。

五 自动化与风险控制建议

  • 自动化
    • 使用 logrotate 管理日志轮转与清理(编辑 /etc/logrotate.conf/etc/logrotate.d/ 下的配置,必要时执行 logrotate -f /etc/logrotate.conf 测试)。
    • 通过 cronsystemd timer 定期执行清理脚本(如清理回收站、旧日志、临时文件等)。
  • 风险控制
    • 重要操作前先备份关键数据;删除前用 lsof 检查文件是否被占用;对生产环境优先采用“服务级滚动重启/重新打开日志”而非直接 kill。
    • 谨慎使用内存缓存清理:仅在必要时执行 sync && echo 3 | sudo tee /proc/sys/vm/drop_caches,避免影响性能。

0