目录一、引言“磁盘满了”是运维的第一声警钟二、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看整体哪个分区快满了dfdisk free用于查看文件系统级别的磁盘使用情况——整个分区用了多少、还剩多少。bashdf -h-h参数表示“human-readable”以K、M、G等人类可读的单位显示而不是默认的1K块数。输出示例textFilesystem 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 -ih2.2 du -sh看细节哪些目录在占空间df告诉你“哪个分区快满了”dudisk usage则进一步告诉你“哪些目录在占地盘”。bashdu -sh /var/*参数说明-ssummary只显示总计不加-s会列出每个子目录-hhuman-readable人类可读格式*统计该目录下每个子项的大小输出示例text12M /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-depth1 /var2.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_*.log2.4 一个常被忽略的问题inode耗尽有时候df -h显示磁盘还有空间但系统却报“No space left on device”。这可能是inode被小文件耗尽了。bashdf -ih # 查看inode使用情况如果IUse%接近100%说明你创建了海量小文件常见于邮件队列、缓存目录。解决方法是清理这些文件而不是尝试“腾出更多空间”。三、lsblk看清你的磁盘和分区lsblklist block devices用树形结构直观展示系统中的磁盘、分区和挂载关系。bashlsblk输出示例textNAME 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如何解读sda、sdb物理磁盘或虚拟机磁盘sda1、sdb1磁盘上的分区sr0光驱现在的服务器上基本见不到了MOUNTPOINT为空说明该分区没有被使用可能是新加的磁盘还没挂载查看更详细的信息bashlsblk -f # 显示文件系统类型和UUID lsblk -m # 显示权限信息输出示例带文件系统类型textNAME FSTYPE FSVER LABEL UUID MOUNTPOINT sda ├─sda1 ext4 1.0 abc123-def456-789 / sdb └─sdb1 xfs 123abc-456def-890 /dataUUID是分区的唯一标识符在配置/etc/fstab时会用到。四、mount与umount挂载的艺术4.1 挂载的概念还记得第3篇讲的“一切皆文件”吗在Linux中所有存储设备都要挂载mount到目录树上的某个节点才能访问。插入U盘不会像Windows那样弹出“F盘”——它需要被挂载到某个目录。mount命令本身可以查看当前所有挂载bashmount | grep ^/dev输出示例text/dev/sda1 on / type ext4 (rw,relatime) /dev/sdb1 on /data type xfs (rw,relatime)4.2 挂载U盘第一步插入U盘后用lsblk找到它bashlsblk # 会多出一个设备比如sdc容量和你U盘吻合第二步创建挂载点并挂载bashsudo mkdir -p /mnt/usb sudo mount /dev/sdc1 /mnt/usb第三步访问U盘内容bashls /mnt/usb第四步用完卸载bashsudo 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 UUIDabc-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 实战添加一个开机自动挂载的数据盘第一步查看分区的UUIDbashlsblk -f找到目标分区的UUID比如abc123-def456-789。第二步创建挂载点bashsudo mkdir -p /data第三步编辑fstabbashsudo vim /etc/fstab添加一行textUUIDabc123-def456-789 /data ext4 defaults 0 2第四步测试配置非常重要在重启之前先用以下命令测试fstab是否有语法错误bashsudo mount -a如果没有任何输出说明配置正确。如果有报错说明fstab有问题立即修正否则系统可能无法正常启动。5.3 fstab常见挂载选项选项含义defaults默认选项rw, suid, dev, exec, auto, nouser, asyncnoauto不自动挂载需要手动mountro只读挂载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 bs1M count10 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篇计划任务中会深入讲解如何自动化管理日志。