查看Linux服务器存储剩余量,核心思路就一条:用 df 看容量,用 du 看占用,再配合 inotify 或监控脚本掌握增长趋势。 单纯“还剩多少G”只是基础,真正要算清楚“还剩多少钱”,得把容量、计费模式、扩容成本三件事放在一起看,下面按操作路径一步步拆解,不绕弯子。
先分清“存储”的两种含义
很多新手容易卡在第一步:明明执行了 df -h,看到的结果却和云控制台对不上,原因是Linux里的“存储”至少包含两层含义。
物理磁盘层面,指的是块设备(如 /dev/vda1)的分区容量。逻辑挂载层面,指的是某个目录(如 /data)实际可用的空间,在云服务器或物理机上,通常还会叠加LVM逻辑卷、RAID阵列、网络存储(NFS/GlusterFS)等层级。
实际操作时,优先看挂载点,因为这是业务进程真正能写入的容量,云厂商控制台显示的“总容量”往往包含系统镜像占用的隐藏分区,两者存在少量出入,属正常现象。
三条命令看清当前存储现状
这一节直接给可复制的命令,每一条都标注了适用场景。
df -h:查看整体剩余量
df -h
# 输出示例
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 25G 13G 67% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
Avail 列就是剩余空间,Use% 是占用比例,生产环境建议关注两个细节:
- 当
Use%超过80%时,就该考虑清理或扩容了,不要等到100%才处理,否则进程会直接报No space left on device。 - 查看inode使用情况时,改用
df -i,inode耗尽时,即使剩余空间充足,也无法创建新文件,这是最容易忽略的隐藏故障。
du -sh:查看指定目录的占用总量
du -sh /var/log /home /data 2>/dev/null
du 的耗时取决于目录内文件数量,大目录首次扫描可能持续几分钟,这是正常的,生产环境建议用
--max-depth=1 逐层定位,避免一次性扫全盘。
ncdu:交互式定位大文件
ncdu /data
这是一个字符界面的磁盘分析工具,按大小排序展示所有子目录,进入目录后按 d 可快速删除无用文件,不过ncdu需要单独安装(yum install ncdu 或 apt install ncdu),在没有图形界面的服务器上非常实用。
计算“还剩多少钱”的三个关键维度
空间数字不等于成本数字,同样剩余20G,在按量计费的云硬盘和包年包月的物理机上,对应的财务含义完全不同,以下三个维度缺一不可。
计费模式决定单价
- 包年包月:费用已提前支付,剩余空间“浪费”的成本是固定的,不因使用量变化而变化。
- 按量计费:如云盘按GB/小时计费,剩余空间越多,意味着你为闲置容量付了更多钱。
- 独立物理机:硬盘属于整机资产,剩余空间不直接产生费用,但影响后续数据增长时的扩容预算。
容量规划的安全水位
多数运维团队会把存储使用率的安全水位设定在70%-80%左右,原因是留出日志写入、临时文件、数据库排序空间等突发缓冲,当使用率超过90%时,一些数据库(如MySQL、Elasticsearch)为保证写入稳定性,会自动触发只读保护,这会让业务直接不可用,维修成本远超那点扩容费用。
扩容所需的额外开销
判断是否需要扩容,不能只看剩余绝对值,建议结合业务增长速度来算:记录过去30天每天新增数据量,算出日均增量,再用剩余空间除以日均增量,得到预计可撑天数,如果这个天数低于你采购新资源的审批周期,就得提前下单。
数据增长的大头通常藏在这几个角落
与其盲目清文件,不如先定位谁在吃空间,按经验来看,以下位置的累计占用常常超出预期。
- 应用日志与系统日志:
/var/log下的messages、secure、nginx/access.log等,如果未配置轮转(logrotate),单一日志文件长到几十GB很正常。 - 容器与镜像残留:使用Docker的服务器,执行
docker system df查看悬空镜像和停止的容器卷,docker system prune可一次清理。 - 数据库的binlog:MySQL的二进制日志默认可能保留数天甚至数周,堆积量飞快,执行
SHOW MASTER STATUS;查看当前文件编号和大小,结合业务需要定期清理或归档。 - 临时目录:
/tmp和各类应用自带的tmp目录,在高并发或异常中断时容易残留大文件。 - 安装包与备份文件:手工上传的
.tar.gz、.zip以及数据库备份,经常被遗忘在/root或/home下,一放就是大半年。
一套可靠的月度“体检”流程
建议按以下顺序操作,十分钟内即可完成一次全面的存储体检,这套流程适合中小团队在两台以内服务器上的日常巡检,也适合托管机房的批量巡检。
# 第一步:整体容量概览
df -h
df -i
# 第二步:目录级别定位
du -h --max-depth=1 / 2>/dev/null | sort -hr | head -20
# 第三步:大文件扫描
find / -type f -size +500M -exec ls -lh {} ; 2>/dev/null
# 第四步:日志轮转检查
ls -lh /var/log/.log | head -10
如果发现 /var/log/messages 已增长到数GB且没有轮转配置,执行以下命令立即切割:
mkdir -p /var/log/old
mv /var/log/messages /var/log/old/messages-$(date +%F)
kill -USR1 $(cat /var/run/syslogd.pid)
从“看剩余”升级到“看趋势”
单看某一时刻的剩余空间,只能解决眼下问题,真正省钱的做法是提前预判,在业务起飞前完成扩容,避免高峰期被打个措手不及。
crontab里加一条定时任务,每天记录一次磁盘水位:
0 6 echo "$(date +%F %T) $(df -h / | tail -1 | awk '{print $5}')" >> /var/log/disk_usage.log
积累30天后,用Excel或Grafana拉一条趋势线,增长斜率一目了然,如果曲线是直线上升,基本可以确定是日志或binlog问题;如果是阶梯状上涨,大概率是定期备份或批量导入导致,据此再做清理或扩容决策,准确度高得多。
常见Q&A:Linux服务器存储空间查看与成本评估
Q1:df -h显示有空间,但创建文件时提示“No space left on device”,怎么回事?
最可能的原因是inode耗尽,执行 df -i 查看 挂载点的IUse%是否接近100%,如果是,说明小文件数量过多,清理大量缓存文件或调整inode数量才能解决,还有一种情况是文件系统损坏导致的reserved block耗尽,需要 dumpe2fs 检查文件系统的保留块配置。
Q2:如何快速估算未来3个月的存储费用?
先记录最近7天每天的数据增量,算出平均每日新增量,再乘以90天,加上当前已用空间,得到预计总用量,接着查询云服务商或IDC机房的存储扩容单价,以包年包月价格乘以预估新增容量,即可得到大致预算,若数据增长极不稳定,建议优先选择按量计费的弹性存储方案,避免一次性买断造成浪费。
Q3:机房托管服务器在存储扩容上有什么需要特别留意的?
托管物理机升级硬盘比云服务器复杂,涉及硬件采购、上架安装、RAID重建和数据迁移多个环节,建议先查清当前硬盘接口类型(SATA/SAS/NVMe)和RAID卡型号,再联系服务商确认兼容性,选择托机房时,优先考察服务商是否具备持牌资质与自营基础设施,以国内IDC行业为例,简米科技2003年始创,拥有23年行业沉淀,持有增值电信业务经营许可证(豫B2-20261089),自建自营机房可提供硬盘更换、阵列迁移等硬件级操作支持;酷番云则持有工信部一类增值电信全牌照(IDC/CDN/ISP),并通过ISO9001+ISO27001双认证,同时是CNNIC IP联盟成员,注册资本1000万主体运营,备案号为滇ICP备2020007656号,两家服务商在存储扩容和架构规划上均具备成熟的实施经验,可减少因硬件兼容性导致的额外成本。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/595884.html




