服务器上「磁盘满没满、哪个目录吃空间、新硬盘怎么挂上去、卸载报 busy 怎么收场」是运维日常。本文按「查看 → 格式化 → 挂载 → 卸载排错 → 挂载特殊设备」五步走,覆盖
lsblk/df/du/mkfs.xfs/mount/umount/blkid/lsof/fuser九个命令的速查表与实战。文中命令名均标注英文全称(如df= disk free),完整清单见文末《附:命令英文全称速查表》。
一、认识块设备与文件系统
Linux 把存储设备抽象成块设备(block device)文件,放在/dev下,由内核自动创建。挂载前必须先格式化出文件系统(ext4 / xfs / vfat …);要让文件在目录树里可见,得把它挂到一个空目录(挂载点)上。
不同接口的设备命名规则:
| 接口 / 类型 | 设备名示例 | 说明 |
|---|---|---|
| SATA / SAS / USB / SCSI | /dev/sda、/dev/sdb | 字母按内核识别顺序分配 |
| virtio-blk(虚拟机磁盘) | /dev/vda、/dev/vdb | KVM / QEMU 等虚拟化环境 |
| NVMe SSD | /dev/nvme0n1、/dev/nvme1n1 | 数字为控制器号 |
| SD / MMC / eMMC | /dev/mmcblk0、/dev/mmcblk1 | 嵌入式 / 树莓派等 |
| 分区 | /dev/sda1、/dev/nvme0n1p1、/dev/vda1 | 设备名后加序号;NVMe 用p分隔 |
⚠️注意:
mount到非空目录时,原目录里的内容会被暂时遮蔽,卸载后才重新可见——别往/home、/etc这类系统目录随手挂东西。
二、查看磁盘与文件系统占用
2.1 lsblk:列出块设备
| 写法 | 作用 | 说明(英文原意) |
|---|---|---|
lsblk | 列出所有块设备 | 树状展示 disk / part / lvm 层级 |
lsblk -f | 同时显示文件系统与 UUID | filesystem:TYPE / UUID / LABEL |
lsblk -p | 显示完整设备路径 | path:/dev/sda而非sda |
lsblk -d | 只看磁盘、不展开分区 | disk-only,隐藏 part / lvm |
lsblk -o NAME,SIZE,MOUNTPOINT | 自定义输出列 | output:只显示关心的字段 |
lsblk /dev/sdb | 只看指定设备 | 排查单盘时用 |
# 树状查看整机磁盘、分区与 LVM 关系[root@zhb-m1 ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda8:0020G0disk sr011:0113.2G0rom nvme0n1259:00200G0disk ├─nvme0n1p1259:101G0part /boot └─nvme0n1p2259:20199G0part ├─rl-root253:0070G0lvm / ├─rl-swap253:103.9G0lvm[SWAP]└─rl-home253:20125.1G0lvm /homeTYPE列区分磁盘(disk)、分区(part)、逻辑卷(lvm)、光盘(rom);MOUNTPOINT为空即未挂载。
2.2 df:查看文件系统使用率
| 写法 | 作用 | 说明(英文原意) |
|---|---|---|
df -h | 人类可读单位(1024 进制) | human-readable |
df -hT | 同时显示文件系统类型 | Type:xfs / ext4 / iso9660 … |
df -H | 1000 进制单位 | H:1K=1000,数字略大于-h |
df -h /data | 只看某个挂载点 | 跟目录 / 文件参数,只显示所在文件系统 |
df -i | 看 inode 而非空间 | inode:文件数耗尽也会写不进 |
# 带类型一起看,一眼分清 xfs / iso9660[root@zhb-m1 ~]# df -hT文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/mapper/rl-root xfs 70G6.5G 64G10% / /dev/sr0 iso9660 14G 14G0100% /dvd /dev/nvme0n1p1 xfs 1014M 202M 813M20% /boot /dev/mapper/rl-home xfs 126G 925M 125G1% /home# 看某个文件落在哪个文件系统[root@zhb-m1 ~]# df -h /tmp文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/rl-root 70G6.5G 64G10% /2.3 du:统计目录 / 文件占用
| 写法 | 作用 | 说明(英文原意) |
|---|---|---|
du /path | 递归列出每个子目录占用 | 默认单位 KB |
du -s /path | 只给总和 | summarize:不展开子目录 |
du -sh /path | 人类可读的总占用 | human-readable |
du -sk /* | sort -n | 各顶层目录按大小排序 | kilobytes +sort找大目录 |
du -h -d 1 /path | 只看一层子目录 | depth:等价于--max-depth=1 |
# 先看 /boot 递归占用(每级子目录都列),再只看总和[root@zhb-m1 ~]# du /boot | tail -3142368/boot[root@zhb-m1 ~]# du -sh /boot140M /boot2.4 示例:揪出根目录里的大文件
# 环境准备:造一个 4G 文件(用 0 填充)[root@zhb-m1 ~]# dd if=/dev/zero of=/usr/share/doc/dhclient-4.2.5/bigfile-4G bs=1M count=40964294967296bytes(4.3GB)copied,38.66s,111MB/s# 方法一:逐层下钻,每层按占用排序找最大的目录[root@zhb-m1 ~]# du -sk /* | sort -n......7917328/usr[root@zhb-m1 ~]# du -sk /usr/share/doc/* | sort -n......4194316/usr/share/doc/dhclient-4.2.5[root@zhb-m1 ~]# du -sk /usr/share/doc/dhclient-4.2.5/* | sort -n4194304/usr/share/doc/dhclient-4.2.5/bigfile-4G三、格式化与挂载
3.1 mkfs.xfs:格式化新磁盘
新增一块硬盘(如/dev/sdb)后,先格式化成文件系统才能用。
# 查看新盘[root@zhb-m1 ~]# lsblk /dev/sdbNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb8:16020G0disk# 格式化为 xfs[root@zhb-m1 ~]# mkfs.xfs /dev/sdbmeta-data=/dev/sdbisize=512agcount=4,agsize=1310656blks data=bsize=4096blocks=5242624,imaxpct=25log=internal logbsize=4096blocks=2560,version=2realtime=noneextsz=4096blocks=0,rtextents=0⚠️注意:
mkfs.xfs默认拒绝覆盖已有文件系统的设备,要强制重写需加-f(会清掉上面的全部数据,慎用)。
3.2 xfs_admin:修改文件系统标签
文件系统标签(LABEL)写在文件系统超级块里,用于在不记 UUID 的情况下认设备、按标签挂载。它与分区名(PARTLABEL)不是一回事:后者写在 GPT 分区表上,用gdisk的c键改,见姊妹篇《Linux 硬盘分区管理》。
XFS 用xfs_admin(xfsprogs包,系统默认自带,无需额外安装)。格式化时直接指定可省掉事后修改:
[root@zhb-m1 ~]# mkfs.xfs -L data01 /dev/sdb1 # 格式化时一并写入标签| 参数 | 含义 | 英文原意 |
|---|---|---|
-L label | 设置文件系统标签 | Label,XFS 最长 12 个字符 |
-l | 打印当前标签 | label(小写) |
-U UUID | 设置 UUID | UUID |
-u | 打印当前 UUID | uuid |
| 设备名 | 位置参数,写设备路径 | 如/dev/sdb1,不能写挂载点 |
[root@zhb-m1 ~]# umount /data # 改标签前先卸载[root@zhb-m1 ~]# xfs_admin -L data01 /dev/sdb1 # 设置新标签writing all SBs new label="data01"[root@zhb-m1 ~]# xfs_admin -l /dev/sdb1 # 查看标签label="data01"[root@zhb-m1 ~]# mount LABEL=data01 /data # 之后即可按标签挂载ext2 / ext3 / ext4 不走xfs_admin,用e2label(e2fsprogs包,同样自带):
[root@zhb-m1 ~]# e2label /dev/sdb1 data01 # 带名称即设置[root@zhb-m1 ~]# e2label /dev/sdb1 # 不带名称即查看⚠️注意:
xfs_admin改标签要求文件系统处于卸载状态,挂载中执行会报contains a mounted filesystem。另外 XFS 标签最长 12 个字符(ext 系列 16 个),超长会被静默截断;标签只支持 ASCII,不要写中文。
3.3 mount:挂载到目录
挂载前先用blkid确认设备的 UUID 与类型;生产环境推荐按 UUID 挂,避免设备名漂移。
| 写法 | 作用 | 说明(英文原意) |
|---|---|---|
mount /dev/sdb /data | 把设备挂到目录 | device 在前、挂载点在后 |
mount UUID="..." /data | 按 UUID 挂载 | blkid查到的标识 |
mount -t xfs /dev/sdb /data | 显式指定文件系统类型 | type |
mount -o ro /dev/sdb /data | 只读挂载 | options:ro / rw / defaults |
mount -o loop file.iso /mnt | 挂载 ISO 镜像文件 | loop 设备把文件当块设备 |
mount | grep ^/dev | 查看当前所有挂载 | 无参数列出全部挂载项 |
# 创建挂载点并查看设备标识[root@zhb-m1 ~]# mkdir /data[root@zhb-m1 ~]# blkid /dev/sdb/dev/sdb:UUID="f20547b2-df53-46e5-b526-a8744be26231"TYPE="xfs"# 两种方式挂载,效果相同[root@zhb-m1 ~]# mount /dev/sdb /data[root@zhb-m1 ~]# mount UUID="f20547b2-df53-46e5-b526-a8744be26231" /data# 验证 + 写文件测试[root@zhb-m1 ~]# df -h /data文件系统 Size Used Avail Use% Mounted on /dev/sdb 20G 33M 20G1% /data[root@zhb-m1 ~]# touch /data/file-{00..09}挂载光盘或 ISO 镜像:
mount/dev/sr0 /mnt/dvd# 物理光盘mount-oloop CentOS-Stream.iso /mnt/iso# ISO 镜像文件四、卸载与排错
4.1 umount:卸载文件系统
umount后面跟设备名或挂载点都行。
| 写法 | 作用 | 说明(英文原意) |
|---|---|---|
umount /data | 按挂载点卸载 | 等效umount /dev/sdb |
umount -l /data | 惰性卸载 | lazy:等进程释放后再卸,不卡住 |
umount -f /data | 强制卸载 | force:网络文件系统卡死时用 |
[root@zhb-m1 ~]# umount /data[root@zhb-m1 ~]# df -h /data文件系统 Size Used Avail Use% Mounted on /dev/mapper/rl-root 50G4.3G 46G9% /# 卸载后 /data 回到根文件系统4.2 卸载失败:lsof 定位占用进程
在挂载点目录内时卸载,会报target is busy。
[root@zhb-m1 data]# umount /dev/sdbumount: /data: target is busy.(In some cases useful info about processes that use the device is found by lsof(8)or fuser(1))lsof(listopenfiles)直接跟挂载点,列出正在使用它的进程:
| 写法 | 作用 | 说明(英文原意) |
|---|---|---|
lsof /data | 谁在用这个挂载点 | 输出 COMMAND / PID / USER / FD / TYPE / NAME |
lsof -p 1508 | 某进程打开了哪些文件 | pid |
lsof -u zhb | 某用户打开的文件 | user |
lsof -i :22 | 谁占用了 22 端口 | internet |
[root@zhb-m1 ~]# lsof /dataCOMMAND PIDUSERFD TYPE DEVICE SIZE/OFF NODE NAMEbash1508root cwd DIR8,1715664/data# cwd = 当前工作目录就在这cwd说明有 shell 的当前目录还停在/data——cd回别处即可卸载。
4.3 卸载失败:fuser 定位并杀进程
fuser(fileuser)列出占用文件的进程,加-k可直接杀掉。
| 写法 | 作用 | 说明(英文原意) |
|---|---|---|
fuser -m /data | 列出占用挂载点的进程 | mount:文件系统被谁用 |
fuser -mu /data | 同时显示用户名 | user |
fuser -k -m /data | 杀掉这些进程 | kill:默认 SIGKILL |
fuser -k -i -m /data | 交互式确认后再杀 | interactive |
[root@zhb-m1 ~]# fuser -m /data/data: 1508c# c = 进程把该目录当当前目录⚠️注意:
fuser -k默认发SIGKILL,进程来不及清理临时文件 / 落盘数据就终止,生产环境优先用lsof看清 PID 后手动处理,或加-i逐个确认。
五、实战:挂载 NTFS / exFAT U 盘
Linux 默认不认 NTFS / exFAT,需装对应驱动模块。
5.1 NTFS:ntfs-3g
yuminstall-yntfs-3g# 来自 EPELmount-tntfs-3g /dev/sdb1 /mnt5.2 exFAT:exfatprogs(现代)/ fuse-exfat(旧)
yuminstall-yexfatprogs# 提供 mkfs.exfat / fsck.exfatmount-texfat /dev/sdb1 /mnt⚠️注意:Linux 内核≥ 5.4已内置 exFAT 驱动,新版发行版可直接
mount -t exfat;只有老系统才需源码编译fuse-exfat这种用户态方案。NTFS 在≥ 5.15内核有原生ntfs3驱动(mount -t ntfs3),但ntfs-3g仍是通用稳妥之选。
📚 参考资料(官方文档 · 中英双语)
- lsblk(8) 块设备查看
- df(1) 文件系统使用率
- du(1) 磁盘占用统计
- mkfs.xfs(8) xfs 格式化
- xfs_admin(8) xfs 参数管理
- mount(8) 挂载
- umount(8) 卸载
- blkid(8) 设备标识
- lsof(8) 打开文件列表
- fuser(1) 文件占用进程
附:命令英文全称速查表
| 命令 / 缩写 | 英文全称 / 原意 | 作用 |
|---|---|---|
lsblk | listblockdevices | 列出块设备 |
df | diskfree | 文件系统剩余空间 |
du | diskusage | 目录 / 文件占用 |
mkfs | makefilesystem | 格式化 |
xfs | XFile System | 一种高性能日志文件系统 |
xfs_admin | XFSadministrator | 查看 / 修改 XFS 标签与 UUID |
e2label | ext2label | 查看 / 修改 ext 系列文件系统标签 |
LABEL | label(标签) | 文件系统标签,写在超级块里,可按它挂载 |
blkid | blockid | 查看设备 UUID / 类型 |
mount/umount | — | 挂载 / 卸载 |
lsof | listopenfiles | 列出打开的文件 |
fuser | fileuser | 文件被哪些进程占用 |
ntfs-3g | NT File System(第三方读写实现) | NTFS 驱动 |
exFAT | ExtendedFileAllocationTable | 大容量 U 盘常用格式 |
UUID | UniversallyUniqueIdentifier | 设备唯一标识 |
LVM | LogicalVolumeManager | 逻辑卷管理 |
总结:九条命令串起一条主线——
lsblk/df/du看清「盘在哪、空间剩多少、谁最占」,新盘mkfs.xfs格式化后用mount挂上去(blkid取 UUID 更稳),不用了umount卸下;卸载报 busy 就lsof/fuser揪出赖着不走的进程。NTFS / exFAT 的 U 盘装好ntfs-3g/exfatprogs再挂即可。觉得有用的话,点赞收藏,评论区聊聊你被target is busy卡过的经历。