尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Linux磁盘空间管理实战:从目录大小排查到PostgreSQL数据清理

Linux磁盘空间管理实战:从目录大小排查到PostgreSQL数据清理
📅 发布时间:2026/7/5 0:23:08

1. 磁盘空间告警后的第一反应

收到服务器磁盘空间不足的告警时,我的第一反应不是立即删除文件,而是先搞清楚三个关键问题:哪个分区快满了?是什么类型的文件占用了空间?这些文件是否可以被安全清理?这种系统化的排查思路,能避免误删重要数据。

最常用的df -h命令就像汽车的油表,能快速显示各分区的使用情况。我习惯加上-T参数显示文件系统类型,因为不同的文件系统有不同的特性。比如看到xfs文件系统快满了要特别小心,因为XFS文件系统在空间耗尽后更容易出现故障。

# 查看各分区使用情况和文件系统类型 df -hT

当发现/var分区使用率达到95%时,我会先用cd /var进入该目录,然后用du -sh * | sort -rh | head -10找出占用空间最大的前10个目录。这个组合命令中,-s表示汇总大小,-h以人类可读格式显示,sort -rh按人类可读的数字逆序排序。

2. 深入分析大目录内容

找到大目录后,需要像侦探一样层层深入。比如发现/var/lib/postgresql占用异常,我会用--max-depth参数逐级下钻:

# 一级目录分析 du -h --max-depth=1 /var/lib/postgresql # 二级目录分析 du -h --max-depth=1 /var/lib/postgresql/12/main

对于PostgreSQL的数据目录,有几个关键子目录需要特别关注:

  • base/:存储实际数据文件,不能随意删除
  • pg_wal/:WAL日志文件,可以配置自动清理
  • pg_log/:数据库日志文件,需要定期归档

我曾遇到过pg_wal目录暴涨的情况,原因是主从复制中断导致WAL日志堆积。通过pg_controldata可以查看当前的WAL日志状态:

pg_controldata /var/lib/postgresql/12/main

3. PostgreSQL数据库的专项清理

当确定是数据库占用过大时,需要区分是正常数据增长还是异常堆积。首先查看各数据库大小:

SELECT pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname)) as size FROM pg_database ORDER BY pg_database_size(pg_database.datname) DESC;

如果发现某个表异常大,可以用以下SQL查看表的大小(含索引):

SELECT table_schema || '.' || table_name AS table_full_name, pg_size_pretty(pg_total_relation_size('"' || table_schema || '"."' || table_name || '"')) as size FROM information_schema.tables WHERE table_schema NOT IN ('pg_catalog', 'information_schema') ORDER BY pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') DESC LIMIT 20;

对于需要清理的大表,TRUNCATE比DELETE更高效,因为它不记录单行删除操作:

-- 清空表但保留表结构 TRUNCATE TABLE large_table; -- 清空表并重置自增序列 TRUNCATE TABLE large_table RESTART IDENTITY;

4. 自动化监控与预防措施

为了避免半夜被磁盘告警吵醒,我设置了多层防护:

  1. 每天检查磁盘空间的cron任务:
#!/bin/bash THRESHOLD=90 CURRENT=$(df / --output=pcent | tail -1 | tr -d '% ') [ $CURRENT -ge $THRESHOLD ] && echo "Warning: Disk usage is ${CURRENT}%" | mail -s "Disk Alert" admin@example.com
  1. PostgreSQL的自动维护任务:
-- 设置自动清理参数 ALTER SYSTEM SET autovacuum = on; ALTER SYSTEM SET autovacuum_vacuum_scale_factor = 0.1; ALTER SYSTEM SET autovacuum_analyze_scale_factor = 0.05; -- 限制WAL日志大小 ALTER SYSTEM SET max_wal_size = '2GB'; ALTER SYSTEM SET wal_keep_segments = 32;
  1. 日志轮转配置(/etc/logrotate.d/postgresql):
/var/log/postgresql/*.log { daily missingok rotate 7 compress delaycompress notifempty sharedscripts postrotate /usr/bin/pg_ctl logrotate -D /var/lib/postgresql/12/main endscript }

曾经有一次,一个开发环境的数据库日志配置不当,导致500GB的磁盘一周内被日志塞满。现在我会特别检查logging_collector和log_rotation_size参数的设置是否合理。

相关新闻

  • 2025年Nmap渗透测试实战指南:从基础扫描到高级规避技术
  • 2026年AI论文助手推荐:从开题到答辩的一站式智能解决方案
  • Google Cloud Vision API:如何用AI技术实现智能图像分析与识别?

最新新闻

  • Python初学者必知:6个让你效率翻倍的开源框架(附学习路径)
  • 商用容积式电热水炉厂家
  • AI写小说接入文心一言教程:千帆API+向量记忆系统实现百万字长篇智能创作
  • 【5天实战】从零构建AI-Native组织:飞书+Bot+Gitee全链路自动化实战指南—Day 5:完整场景实操验证
  • Codex 完整使用教程(Windows/macOS 双系统区别详解)
  • 【Java毕业设计】校园在线测验考试成绩管理系统的设计与实现 智能题库组卷与在线考试监控系统(源码+文档+远程调试,全bao定制等)

日新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号