Linux磁盘管理命令大全:df、du、lsblk、fdisk用法详解
在 Linux 服务器运维中,磁盘空间管理是非常重要的一部分。
例如,Spring Boot 项目运行一段时间后,日志文件越来越大,导致服务器磁盘空间不足;或者上传文件时提示 No space left on device,这时就需要掌握 Linux 磁盘排查和管理命令。
这一篇主要介绍 Linux 中常见的磁盘管理命令,包括 df、du、lsblk、fdisk、mkfs、mount、umount 等,并结合服务器磁盘空间不足的场景,演示如何定位和处理问题。

1. Linux 磁盘与文件系统基础
在学习具体命令之前,我们先了解几个基本概念。
- 磁盘(Disk): 用于存储数据的物理设备,例如 HDD、SSD。
- 分区(Partition): 将一块磁盘划分成多个逻辑区域,每个分区可以独立使用。
- 文件系统(Filesystem): 负责组织和管理磁盘上的文件和目录,例如 ext4、XFS。
- 挂载(Mount): 将一个文件系统接入 Linux 目录树,使用户可以通过指定目录访问其中的数据。
例如,一块磁盘可能经历下面的过程:
物理磁盘
|
v
磁盘分区
|
v
创建文件系统
|
v
挂载到目录
|
v
通过目录读写文件
这里需要注意:Linux 不像 Windows 那样通常使用 C 盘、D 盘来组织文件。Linux 通过统一的目录树管理文件系统,不同磁盘或分区可以挂载到目录树中的不同位置。
2. df:查看磁盘空间使用情况
df(Disk Free)用于查看文件系统的磁盘空间使用情况。
# 查看所有文件系统的磁盘使用情况 df # 以人类可读的方式显示容量 df -h # 查看文件系统类型 df -T # 查看指定目录所在文件系统的使用情况 df -h /opt
例如执行:
df -h
可能得到:
Filesystem Size Used Avail Use% Mounted on /dev/sda1 50G 30G 20G 60% / /dev/sdb1 100G 70G 30G 70% /data
常见字段:
| 字段 | 含义 |
|---|---|
| Filesystem | 文件系统或设备 |
| Size | 总容量 |
| Used | 已使用容量 |
| Avail | 可用容量 |
| Use% | 使用率 |
| Mounted on | 挂载点 |
其中,-h 表示以人类容易阅读的单位显示,例如 KB、MB、GB。
如何判断磁盘是否快满了?
例如:
/dev/sda1 50G 48G 2G 96% /
说明根目录所在的文件系统已经使用了 96% 的空间,需要进一步排查哪些文件或目录占用了大量磁盘。
这里需要注意:df 查看的是文件系统整体空间使用情况,并不能直接告诉我们具体哪个目录占用了多少空间。
这时就需要使用 du。
3. du:查看文件和目录占用空间
du(Disk Usage)用于查看文件或目录实际占用的磁盘空间。
# 查看当前目录下各文件和目录的空间占用 du -h # 查看指定目录的总占用空间 du -sh /opt/myapp # 查看指定目录下一级子目录的空间占用 du -h --max-depth=1 /opt # 查看某个文件占用的空间 du -h app.log
常用参数:
| 参数 | 含义 |
|---|---|
-h | 以人类可读的单位显示 |
-s | 只显示汇总结果 |
-a | 同时显示文件和目录 |
--max-depth=1 | 只显示指定目录下一层的统计结果 |
例如,想知道 /var/log 下面哪个目录占用空间最大:
du -h --max-depth=1 /var/log
如果想按照占用空间从大到小排序:
du -h --max-depth=1 /var/log | sort -hr
这样就能快速找到占用空间较大的目录。
df 和 du 有什么区别?
| 对比 | df | du |
|---|---|---|
| 主要作用 | 查看文件系统空间 | 查看文件和目录占用空间 |
| 统计对象 | 文件系统 | 文件和目录 |
| 适用场景 | 判断磁盘是否快满 | 定位哪个目录占空间 |
| 常用命令 | df -h | du -sh |
简单来说:
df 看整体,du 找原因。
4. lsblk:查看磁盘和分区结构
lsblk(List Block Devices)用于查看系统中的块设备,例如磁盘、分区以及它们之间的层级关系。
# 查看磁盘和分区 lsblk # 显示文件系统类型 lsblk -f # 显示设备完整路径 lsblk -p
例如:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 50G 0 disk ├─sda1 8:1 0 49G 0 part / └─sda2 8:2 0 1G 0 part [SWAP] sdb 8:16 0 100G 0 disk └─sdb1 8:17 0 100G 0 part /data
常见字段:
| 字段 | 含义 |
|---|---|
| NAME | 设备名称 |
| SIZE | 设备大小 |
| TYPE | 设备类型,例如 disk、part |
| FSTYPE | 文件系统类型 |
| MOUNTPOINTS | 挂载点 |
通过 lsblk,我们可以清楚地看到:
sda是一块磁盘。sda1、sda2是它的分区。sdb是另一块磁盘。sdb1被挂载到了/data。
这对于服务器磁盘管理非常有用。
5. fdisk:磁盘分区管理
fdisk 是 Linux 中常见的磁盘分区管理工具,可以用于查看和创建磁盘分区。
查看磁盘分区:
sudo fdisk -l
例如:
Disk /dev/sdb: 100 GiB Device Start End Sectors Size Type /dev/sdb1 2048 209715199 209713152 100G Linux filesystem
如果需要创建新分区,可以使用:
sudo fdisk /dev/sdb
进入交互界面后,常用操作:
| 输入 | 作用 |
|---|---|
m | 查看帮助 |
n | 创建新分区 |
p | 查看分区表 |
d | 删除分区 |
w | 保存修改并退出 |
q | 不保存修改直接退出 |
注意:磁盘分区操作具有破坏性,尤其是删除或修改已有分区时,可能导致数据丢失。操作前一定要确认设备名称并备份重要数据。
6. mkfs:创建文件系统
创建分区后,还需要在分区上创建文件系统,才能正常存储文件。
mkfs(Make Filesystem)用于创建文件系统。
常见文件系统:
| 文件系统 | 特点 |
|---|---|
| ext4 | Linux 中常见的通用日志文件系统 |
| XFS | 常用于服务器,适合处理较大文件和高容量文件系统 |
| Btrfs | 支持快照、校验和等高级特性 |
例如,在一个新分区 /dev/sdb1 上创建 ext4 文件系统:
sudo mkfs.ext4 /dev/sdb1
如果要创建 XFS 文件系统:
sudo mkfs.xfs /dev/sdb1
注意:mkfs 会在目标设备上创建新的文件系统,可能破坏原有数据。不要对已经存有重要数据的分区随意执行。
7. mount:挂载文件系统
前面我们提到,Linux 需要将文件系统挂载到目录树中,才能通过目录访问其中的数据。
mount 用于挂载文件系统。
例如,将 /dev/sdb1 挂载到 /data:
# 创建挂载目录 sudo mkdir -p /data # 挂载分区 sudo mount /dev/sdb1 /data # 查看挂载情况 df -h
挂载完成后,我们就可以通过 /data 访问该分区中的文件。
查看当前挂载信息:
mount
也可以使用:
findmnt
查看指定目录对应的文件系统:
findmnt /data
如何卸载文件系统?
如果不再需要使用某个挂载点,可以通过 umount 卸载:
sudo umount /data
注意:卸载时,不能有进程正在使用该文件系统中的文件或目录,否则可能出现 target is busy。
可以通过下面的命令查找占用情况:
sudo lsof +f -- /data
确认相关程序已经停止使用后,再执行卸载。
8. 如何实现开机自动挂载?
前面使用 mount 挂载文件系统,只对当前运行状态有效。
如果服务器重启,手动挂载的文件系统通常不会自动恢复挂载。
如果希望每次开机时自动挂载,可以配置 /etc/fstab。
先查看分区的 UUID:
sudo blkid /dev/sdb1
可能得到:
/dev/sdb1: UUID="xxxx-xxxx" TYPE="ext4"
然后编辑:
sudo vim /etc/fstab
添加一行:
UUID=xxxx-xxxx /data ext4 defaults 0 2
字段说明:
| 字段 | 含义 |
|---|---|
| UUID | 文件系统唯一标识 |
/data | 挂载点 |
ext4 | 文件系统类型 |
defaults | 使用默认挂载选项 |
0 | 是否使用 dump 备份 |
2 | fsck 检查顺序,根文件系统通常使用 1,其他需要检查的文件系统通常使用 2 |
配置完成后,建议先进行检查:
sudo mount -a
该命令会尝试挂载 /etc/fstab 中尚未挂载的文件系统。如果配置错误,可能导致启动时挂载失败,因此修改前应备份配置,并确保 UUID、文件系统类型和挂载点正确。
9. 实战:服务器磁盘空间不足如何排查?
假设我们的 Spring Boot 项目部署在 /opt/myapp,运行一段时间后服务器提示:
No space left on device
这说明系统在写入文件时发现没有可用空间,但不一定意味着整个磁盘容量已经用完,也可能是 inode 耗尽。
可以按照下面步骤排查。
第一步:查看整体磁盘使用情况
df -h
找到使用率较高的文件系统。
第二步:定位占用空间较大的目录
假设根目录使用率已经达到 95%,可以执行:
sudo du -h --max-depth=1 / | sort -hr
找到占用空间较大的目录。
第三步:继续定位具体目录
如果发现 /var 占用空间较大:
sudo du -h --max-depth=1 /var | sort -hr
如果发现日志目录占用较大:
sudo du -h --max-depth=1 /var/log | sort -hr
第四步:检查大文件
sudo find /var/log -type f -size +100M
查找大于 100MB 的文件。
如果确认某个日志文件可以清理,应优先通过日志轮转、归档或应用自身日志管理机制处理,而不是随意删除正在使用的文件。
第五步:检查 inode 是否耗尽
df -i
如果 inode 使用率达到 100%,即使磁盘还有剩余容量,也可能无法创建新文件。
这通常与大量小文件有关,需要进一步定位文件数量异常的目录。
10. 常用命令速查表
| 命令 | 作用 |
|---|---|
df -h | 查看文件系统磁盘使用情况 |
df -i | 查看 inode 使用情况 |
du -sh | 查看目录总占用空间 |
lsblk | 查看磁盘和分区结构 |
fdisk -l | 查看磁盘分区信息 |
mkfs | 创建文件系统 |
mount | 挂载文件系统 |
umount | 卸载文件系统 |
blkid | 查看设备的 UUID 和文件系统类型 |
findmnt | 查看文件系统挂载关系 |
总结
其中,df 用于查看整体磁盘空间,du 用于定位目录占用,lsblk 和 fdisk 用于查看磁盘与分区,mkfs 用于创建文件系统,而 mount 和 umount 则用于挂载和卸载文件系统。
对于后端开发来说,磁盘管理非常重要。尤其是服务器日志不断增长、上传文件占用大量空间、应用无法写入文件等场景,都需要借助这些命令进行排查。
以上就是Linux磁盘管理命令大全:df、du、lsblk、fdisk用法详解的详细内容,更多关于Linux磁盘管理命令的资料请关注脚本之家其它相关文章!
相关文章
Linux服务器VPS的Windows DD包详细的制作教程
这里就说下Windows dd包的制作过程,虽然网上很多这样的dd包,但对于一些来历不明的,也会有点不放心,所以我们有时间的话可以自己定制一个2022-08-08
Linux VPS配置Web网站环境一键包(LNMP/LAMP/LNMPA)
如果我们是资深Linux用户,可能不屑于网上免费Linux Web一键包、管理面板的安装,然后自己编译或者自由的一套环境安装配置环境。但是,对于大部分用户而言,麦子个人建议还是选择较为成熟的WEB一键包或者面板安装环境2017-02-02


最新评论