当前位置: 首页 > news >正文

【Linux从入门到精通】第13篇:磁盘管理与文件系统——数据存在哪了?

目录

一、引言:“磁盘满了”是运维的第一声警钟

二、df与du:磁盘排查的黄金搭档

2.1 df -h:看整体,哪个分区快满了?

2.2 du -sh:看细节,哪些目录在占空间?

2.3 df与du的配合策略

2.4 一个常被忽略的问题:inode耗尽

三、lsblk:看清你的磁盘和分区

四、mount与umount:挂载的艺术

4.1 挂载的概念

4.2 挂载U盘

4.3 挂载ISO镜像

4.4 卸载失败时的排查

五、/etc/fstab:开机自动挂载

5.1 fstab文件格式

5.2 实战:添加一个开机自动挂载的数据盘

5.3 fstab常见挂载选项

六、综合实战:磁盘空间告急的完整处理流程

七、本篇小结

动手练习

八、下篇预告


一、引言:“磁盘满了”是运维的第一声警钟

“服务器报500错误了!”
“网站怎么打不开了?”
“数据库连接失败了!”

这些问题背后的罪魁祸首,十有八九是同一件事:磁盘满了

一个古老但真实的笑话:某公司网站宕机半天,运维排查了网络、内存、CPU、应用日志,最后发现是日志文件把磁盘占满了——而这个排查过程花了三个小时,因为没人第一时间想到用df -h

今天我们就来掌握Linux的磁盘管理,让你在“磁盘告急”时能快速定位问题、解决问题,成为那个三分钟找出根因的人。


二、df与du:磁盘排查的黄金搭档

2.1 df -h:看整体,哪个分区快满了?

df(disk free)用于查看文件系统级别的磁盘使用情况——整个分区用了多少、还剩多少。

bash

df -h

-h参数表示“human-readable”,以K、M、G等人类可读的单位显示,而不是默认的1K块数。

输出示例:

text

Filesystem Size Used Avail Use% Mounted on /dev/sda1 50G 42G 5.2G 90% / /dev/sdb1 100G 60G 40G 60% /data tmpfs 3.9G 1.2M 3.9G 1% /dev/shm

关键字段解读

字段含义关注点
Filesystem文件系统/分区名忽略tmpfs等虚拟文件系统,关注/dev开头的真实磁盘
Size分区总大小
Used已使用空间
Avail可用空间这个值快没了就是告急信号
Use%使用百分比超过80%就该关注,超过90%需要立即处理
Mounted on挂载点这个分区对应哪个目录

常用变体

bash

# 只查看真实磁盘(排除tmpfs等虚拟文件系统) df -h -t ext4 -t xfs # 查看inode使用情况(小文件过多导致的“伪满”) df -ih

2.2 du -sh:看细节,哪些目录在占空间?

df告诉你“哪个分区快满了”,du(disk usage)则进一步告诉你“哪些目录在占地盘”。

bash

du -sh /var/*

参数说明:

  • -s:summary,只显示总计(不加-s会列出每个子目录)

  • -h:human-readable,人类可读格式

  • *:统计该目录下每个子项的大小

输出示例:

text

12M /var/backups 4.0K /var/cache 2.3G /var/log 4.0K /var/mail

一目了然——/var/log占了2.3G,是清理的重点对象。

常用组合技

bash

# 查看当前目录下各子目录的大小,按大小排序 du -sh * | sort -hr # 查看当前目录的总大小 du -sh . # 找出当前目录下最大的5个文件或目录 du -sh * | sort -hr | head -5 # 查看指定深度(--max-depth) du -h --max-depth=1 /var

2.3 df与du的配合策略

排查“磁盘满了”的标准流程

bash

# 第一步:看整体,哪个分区满了? df -h # 假设发现 / 分区使用率90% # 第二步:从根目录开始,逐层深入 du -sh /* 2>/dev/null | sort -hr | head -10 # 找出根下最大的目录,假设是 /var # 第三步:继续深入 du -sh /var/* 2>/dev/null | sort -hr | head -10 # 找出/var下最大的子目录,假设是 /var/log # 第四步:找到具体的大文件 ls -lhS /var/log | head -10 # -S 参数按文件大小排序 # 第五步:确认文件可以清理后,动手 > /var/log/huge_app.log # 清空文件内容(比rm更安全) # 或者 rm /var/log/old_log_*.log

2.4 一个常被忽略的问题:inode耗尽

有时候df -h显示磁盘还有空间,但系统却报“No space left on device”。这可能是inode被小文件耗尽了

bash

df -ih # 查看inode使用情况

如果IUse%接近100%,说明你创建了海量小文件(常见于邮件队列、缓存目录)。解决方法是清理这些文件,而不是尝试“腾出更多空间”。


三、lsblk:看清你的磁盘和分区

lsblk(list block devices)用树形结构直观展示系统中的磁盘、分区和挂载关系。

bash

lsblk

输出示例:

text

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk ├─sda1 8:1 0 50G 0 part / sdb 8:16 0 100G 0 disk └─sdb1 8:17 0 100G 0 part /data sr0 11:0 1 1024M 0 rom

如何解读

  • sdasdb:物理磁盘(或虚拟机磁盘)

  • sda1sdb1:磁盘上的分区

  • sr0:光驱(现在的服务器上基本见不到了)

  • MOUNTPOINT为空说明该分区没有被使用(可能是新加的磁盘还没挂载)

查看更详细的信息

bash

lsblk -f # 显示文件系统类型和UUID lsblk -m # 显示权限信息

输出示例(带文件系统类型):

text

NAME FSTYPE FSVER LABEL UUID MOUNTPOINT sda ├─sda1 ext4 1.0 abc123-def456-789 / sdb └─sdb1 xfs 123abc-456def-890 /data

UUID是分区的唯一标识符,在配置/etc/fstab时会用到。


四、mount与umount:挂载的艺术

4.1 挂载的概念

还记得第3篇讲的“一切皆文件”吗?在Linux中,所有存储设备都要挂载(mount)到目录树上的某个节点才能访问。插入U盘不会像Windows那样弹出“F盘”——它需要被挂载到某个目录。

mount命令本身可以查看当前所有挂载:

bash

mount | grep "^/dev"

输出示例:

text

/dev/sda1 on / type ext4 (rw,relatime) /dev/sdb1 on /data type xfs (rw,relatime)

4.2 挂载U盘

第一步:插入U盘后,用lsblk找到它

bash

lsblk # 会多出一个设备,比如sdc,容量和你U盘吻合

第二步:创建挂载点并挂载

bash

sudo mkdir -p /mnt/usb sudo mount /dev/sdc1 /mnt/usb

第三步:访问U盘内容

bash

ls /mnt/usb

第四步:用完卸载

bash

sudo umount /mnt/usb

⚠️重要:卸载前确保没有程序正在使用该目录(比如你的终端当前不在/mnt/usb下),否则会报target is busy错误。

4.3 挂载ISO镜像

不需要刻录光盘,你可以直接把ISO文件挂载为一个目录来读取内容:

bash

# 创建挂载点 sudo mkdir -p /mnt/iso # 挂载ISO文件(注意是-o loop) sudo mount -o loop ubuntu-22.04.iso /mnt/iso # 现在可以像浏览普通目录一样查看ISO内容 ls /mnt/iso # 用完后卸载 sudo umount /mnt/iso

-o loop告诉系统把这个普通文件当成一个块设备来处理——这是“一切皆文件”哲学的又一个生动例子。

4.4 卸载失败时的排查

bash

# 错误:target is busy # 原因:有程序正在使用该目录 # 查看是谁占用了目录 sudo lsof /mnt/usb # 或者 sudo fuser -v /mnt/usb # 强制结束占用进程后卸载 sudo fuser -km /mnt/usb sudo umount /mnt/usb

五、/etc/fstab:开机自动挂载

手动挂载的目录在重启后会消失。要让挂载在开机时自动生效,需要配置/etc/fstab文件。

5.1 fstab文件格式

text

# <file system> <mount point> <type> <options> <dump> <pass> UUID=abc-123 /data ext4 defaults 0 2

字段逐一解释

字段含义说明
file system设备标识可以用UUID、设备路径(/dev/sdb1)、或标签
mount point挂载点设备挂载到哪个目录
type文件系统类型ext4、xfs、ntfs等
options挂载选项defaults是常用默认选项
dump备份标记0=不备份,1=备份(几乎没人用了)
pass启动检查顺序0=不检查,1=根分区先检查,2=其他分区

5.2 实战:添加一个开机自动挂载的数据盘

第一步:查看分区的UUID

bash

lsblk -f

找到目标分区的UUID,比如abc123-def456-789

第二步:创建挂载点

bash

sudo mkdir -p /data

第三步:编辑fstab

bash

sudo vim /etc/fstab

添加一行:

text

UUID=abc123-def456-789 /data ext4 defaults 0 2

第四步:测试配置(非常重要!)

在重启之前,先用以下命令测试fstab是否有语法错误:

bash

sudo mount -a

如果没有任何输出,说明配置正确。如果有报错,说明fstab有问题,立即修正,否则系统可能无法正常启动

5.3 fstab常见挂载选项

选项含义
defaults默认选项(rw, suid, dev, exec, auto, nouser, async)
noauto不自动挂载(需要手动mount)
ro只读挂载
rw读写挂载
noexec禁止在该分区执行程序
user允许普通用户挂载

六、综合实战:磁盘空间告急的完整处理流程

假设你收到监控告警:服务器/分区使用率超过90%。

bash

# 第一步:确认告警 df -h / # 输出确认 Use% 超过90% # 第二步:找出根目录下占用最大的目录(排除虚拟文件系统) sudo du -sh /* 2>/dev/null | sort -hr | head -5 # 输出示例: # 12G /var # 8.5G /usr # 3.2G /home # 1.1G /opt # 可以立即确认/var是元凶 # 第三步:深入/var sudo du -sh /var/* 2>/dev/null | sort -hr | head -5 # 输出示例: # 8.9G /var/log # 1.5G /var/cache # 可以发现/var/log是主要占用者 # 第四步:找出/var/log中的大文件 ls -lhS /var/log | head -10 # 找到一个8.5G的syslog日志文件 # 第五步:安全清空大日志(不要直接rm,可能影响rsyslog服务) sudo truncate -s 0 /var/log/syslog # 或者 sudo cat /dev/null > /var/log/syslog # 第六步:清理旧压缩日志 sudo find /var/log -name "*.gz" -mtime +30 -delete # 第七步:验证 df -h / # Use%应该已经下降

七、本篇小结

今天掌握了Linux磁盘管理的完整工具链:

排查工具

  • df -h:看分区整体空间使用情况

  • du -sh * | sort -hr:逐层深入,找到占用空间的目录

  • df -ih:检查inode是否耗尽

设备管理

  • lsblk:树形查看磁盘、分区、挂载关系

  • lsblk -f:查看文件系统类型和UUID

挂载操作

  • mount /dev/设备 /挂载点:挂载设备

  • umount /挂载点:卸载设备

  • mount -o loop ISO文件 /挂载点:挂载ISO镜像

自动挂载

  • 编辑/etc/fstab,使用UUID指定设备

  • 修改后务必先执行mount -a测试,防止无法启动

动手练习

bash

# 1. 检查当前系统的磁盘使用情况 df -h # 2. 找出当前目录下最大的3个文件或子目录 du -sh * | sort -hr | head -3 # 3. 查看磁盘和分区结构 lsblk lsblk -f # 查看UUID # 4. 创建一个测试用的临时文件镜像(模拟ISO挂载) dd if=/dev/zero of=/tmp/test.img bs=1M count=10 sudo mkdir -p /mnt/testimg sudo mount -o loop /tmp/test.img /mnt/testimg ls /mnt/testimg sudo umount /mnt/testimg rm /tmp/test.img # 5. 查看当前的fstab配置 cat /etc/fstab

八、下篇预告

今天学习了磁盘的日常管理,但你知道系统是怎么启动起来的吗?从你按下电源键到出现登录界面,中间经历了哪些步骤?

下一篇我们将进入Linux引导流程,了解BIOS/UEFI、GRUB2引导加载程序、内核加载、systemd/init的整个启动链条。你还会学到“单用户模式修改root密码”这个应急技能——当忘记root密码时,不需要重装系统。


延伸思考:在生产环境中,/var/log经常是磁盘占满的头号嫌疑犯。为什么日志会无限增长?下一篇我们会提到logrotate日志轮转机制,在第16篇计划任务中会深入讲解如何自动化管理日志。

http://www.jsqmd.com/news/690476/

相关文章:

  • 地瓜机器人RDKx5部署YOLOv8
  • 安全神话还是营销泡沫?重新审视 Claude Mythos
  • 并行编程中的异步处理:深入理解Boost.Asio
  • 深度解析LIWC文本分析:从语言心理学到智能洞察的实战指南
  • 如何用 dedao-dl 实现得到课程永久保存:告别知识过期的终极指南
  • 【2026年版|建议收藏】Agent开发学习路线(从入门到进阶),小白程序员也能轻松上手大模型
  • Deep Residual Learning for Image Recognition 全精读:ResNet 残差网络开山之作
  • Sunshine游戏串流终极指南:如何5分钟搭建跨设备游戏共享平台
  • YOLO26如何涨点系列篇(NEU-DET缺陷检测) | CVPR2026 DEGConv方向引导边缘门控,破解细长裂缝检测难题 ,实现涨点
  • 别再为cx_Oracle报错发愁了!手把手教你搞定Python连接Oracle 12c/19c的完整配置流程
  • 黑客利用 macOS 扩展属性传播新型 RustyAttr 木马
  • 告别纯理论!用Proteus+CD4029+4511亲手搭一个可正/倒计数的数码管显示系统
  • 别只看主频!全志T3(A40I)和T5(T507)在智能车载与工业HMI场景下的真实表现差异
  • 【黑马点评日记】高并发秒杀:库存超卖与锁机制解析
  • Hermes 常见报错排查
  • GanttProject:开源项目管理解决方案如何帮助您掌控复杂项目?
  • 新型网络钓鱼利用 Linux 虚拟机入侵 Windows 系统
  • 【Linux从入门到精通】第14篇:Linux引导流程浅析——从按下电源到登录界面
  • Web 品质样式表:构建高效、美观的网页设计指南
  • AI赋能农业:智能种植技术解析与应用实践
  • Python的__getattr__方法实现属性访问重定向与适配器在遗留系统集成
  • 知识点原子化拆解与专业讲解技能knowledge-explainer
  • 2026年知名的沿海高耐腐蚀塑钢门窗多家厂家对比分析 - 品牌宣传支持者
  • Python 面向对象总结:对比 JavaScript 的面向对象
  • 前沿AI模型重塑网络犯罪格局:从“辅助工具“到“自主攻击体“
  • 2026年比较好的佛山平开窗公司哪家好 - 行业平台推荐
  • 从AUTOSAR工程师视角看TDA4:那些官方SDK没告诉你的多核软件架构“坑”与实战调优
  • Android 13.0 systemui锁屏页面人脸解锁锁屏页面显示通知功能实现
  • 【企业级Docker网络安全白皮书】:基于eBPF+Calico的零信任网络实践,已落地金融级隔离方案
  • 终极游戏手柄测试指南:快速诊断按键失灵与摇杆漂移问题