news 2026/7/14 10:52:54

Linux 磁盘空间管理的黄金搭档:df、du、fdisk、lsblk 实战解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux 磁盘空间管理的黄金搭档:df、du、fdisk、lsblk 实战解析

1. 磁盘空间管理的四大神器

刚接手一台Linux服务器时,最让人头疼的就是突然弹出的"no space left on device"警告。上周我就遇到个典型案例:某台生产环境的Nginx服务器突然无法写入日志,紧急排查时发现根分区被占满。这时候df、du、fdisk、lsblk这四个命令就像手术刀组合,能快速定位问题。

df命令像是系统的体检报告,用df -h查看时,重点关注Use%列。有次我发现/var分区显示100%使用率,但实际文件加起来不到分区容量的一半——原来是某个进程删除文件后未释放句柄,用lsof | grep deleted找到了罪魁祸首。

du命令则是精准的病灶探测器。当/home分区告急时,用sudo du -sh /home/* | sort -rh快速锁定占用50G空间的用户目录。更精细的排查可以用--max-depth控制扫描深度,比如du -h --max-depth=2 /var/log

fdisk和lsblk这对搭档负责理清磁盘的"解剖结构"。有次扩容磁盘后,lsblk清晰显示出新增的/dev/sdb未分区,而fdisk -l则详细列出了每个分区的起止扇区。特别提醒:操作fdisk时千万注意设备名,误操作可能导致数据灾难。

经验之谈:生产环境操作前先用lsblk -f确认文件系统类型,EXT4/XFS/Btrfs等文件系统的管理命令各有不同

2. 从报警到解决的全流程实战

去年处理过一起典型故障:监控系统报警显示/data分区剩余不足10%。以下是完整的排查过程:

第一阶段:宏观诊断

$ df -hT /data Filesystem Type Size Used Avail Use% Mounted on /dev/nvme0n1p1 ext4 100G 92G 3.2G 97% /data

发现是ext4文件系统,使用率已达97%。但du -sh /data统计只有60G,这30G的差值可能是隐藏文件或已删除未释放的空间。

第二阶段:定位大文件

$ sudo find /data -type f -size +1G -exec ls -lh {} + -rw-r----- 1 mysql mysql 12G Jun 15 03:00 /data/mysql/slow.log -rw-r--r-- 1 root root 8G Jun 14 18:00 /data/backups/old.tar.gz

找到MySQL的慢查询日志和过期备份文件,用truncate -s 0清空日志文件(注意不要直接rm,避免影响正在写入的进程)。

第三阶段:分析分区结构

$ lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT NAME FSTYPE SIZE MOUNTPOINT nvme0n1 200G ├─nvme0n1p1 ext4 100G /data └─nvme0n1p2 xfs 100G /home

发现该NVMe硬盘还有100G未分配空间,于是用fdisk /dev/nvme0n1创建新分区,通过resize2fs在线扩展了/data分区。

3. 那些容易踩的坑

inode耗尽陷阱:有次df -h显示磁盘还有空间,但系统报"no space"。执行df -i发现inode用尽,原因是/tmp下有数百万个小文件。解决方法:

$ find /tmp -type f -name "*.tmp" -delete $ tune2fs -i 0 /dev/sda1 # 禁用inode时间检查提升性能

LVM的障眼法:用lsblk看到的是物理视图,而LVM逻辑卷需要额外命令:

$ pvs; vgs; lvs # 查看物理卷/卷组/逻辑卷 $ vgdisplay # 查看剩余可分配空间

网络文件系统的特殊性:NFS挂载点用df可能显示不准确,实际应该用du -s统计。曾遇到NAS存储配额满但本地df显示有空间的案例。

容器带来的复杂度:Docker的overlay2存储驱动会占用大量空间,用docker system df查看专属统计:

$ docker system prune --volumes # 清理无用容器数据

4. 高级技巧与自动化方案

实时监控方案

# 每5分钟记录磁盘使用情况 (crontab -l 2>/dev/null; echo "*/5 * * * * df -h >> /var/log/disk_usage.log") | crontab -

安全删除大文件

$ shred -n 3 -z -v sensitive_file # 多次覆盖后删除 $ rm -f sensitive_file

自动化清理脚本

#!/bin/bash THRESHOLD=90 CURRENT=$(df / | awk '{print $5}' | tail -1 | sed 's/%//') if [ "$CURRENT" -gt "$THRESHOLD" ]; then find /var/log -name "*.log" -mtime +30 -exec rm {} \; journalctl --vacuum-size=200M fi

Btrfs/ZFS特例:这些现代文件系统需要专用命令:

$ btrfs filesystem show # Btrfs空间统计 $ zpool list # ZFS存储池状态

实际运维中,我习惯将这几个命令组合使用。比如lsblk -f | grep -v snap可以过滤掉快照设备,du --exclude="*.iso"可以跳过特定文件类型。记住:任何删除操作前先用ls确认文件列表,避免误删关键数据。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 10:52:01

Next.js DApp 并发请求管理:React Query 与 SWR 在钱包连接下的竞态处理

Next.js DApp 并发请求管理:React Query 与 SWR 在钱包连接下的竞态处理 一、深度引言 在构建 Next.js 驱动的 DApp 前端时,有一个容易被忽视但影响深远的架构问题:钱包连接切换导致的数据竞态。当用户切换钱包账户、更换网络、或者钱包自动刷…

作者头像 李华
网站建设 2026/7/14 10:50:30

Unity AndroidJavaProxy实战:解决泛型接口、线程与内存管理难题

1. 项目概述:为什么Unity与Android交互总让人头疼? 如果你正在开发一款Unity游戏,并且需要接入Android平台的SDK,比如登录、支付、广告或者一些硬件功能,那么“Unity与Android交互”这个话题你一定不陌生。这几乎是每个…

作者头像 李华
网站建设 2026/7/14 10:49:59

openEuler summer2022:开源贡献者的成长路线图与职业规划

openEuler summer2022:开源贡献者的成长路线图与职业规划 【免费下载链接】summer2022 This reposiroty will provide the content of openEuler summer of code 2022. 项目地址: https://gitcode.com/openeuler/summer2022 前往项目官网免费下载&#xff1a…

作者头像 李华
网站建设 2026/7/14 10:48:36

龙芯2K0300开发板实战指南:从硬件架构到高效调试的深度解析

龙芯2K0300开发板实战指南:从硬件架构到高效调试的深度解析 【免费下载链接】docs-2k0300 2k0300 平台板卡的产品规格书,用户手册等文档 项目地址: https://gitcode.com/open-loongarch/docs-2k0300 龙芯2K0300作为国产自主处理器的重要代表&…

作者头像 李华