Linux 文件系统管理与挂载实战
2026/9/24 17:36:43 网站建设 项目流程

服务器上「磁盘满没满、哪个目录吃空间、新硬盘怎么挂上去、卸载报 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/vdbKVM / 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同时显示文件系统与 UUIDfilesystem: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 /home

TYPE列区分磁盘(disk)、分区(part)、逻辑卷(lvm)、光盘(rom);MOUNTPOINT为空即未挂载。

2.2 df:查看文件系统使用率

写法作用说明(英文原意)
df -h人类可读单位(1024 进制)human-readable
df -hT同时显示文件系统类型Type:xfs / ext4 / iso9660 …
df -H1000 进制单位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 /boot

2.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 分区表上,用gdiskc键改,见姊妹篇《Linux 硬盘分区管理》。

XFS 用xfs_adminxfsprogs包,系统默认自带,无需额外安装)。格式化时直接指定可省掉事后修改:

[root@zhb-m1 ~]# mkfs.xfs -L data01 /dev/sdb1 # 格式化时一并写入标签
参数含义英文原意
-L label设置文件系统标签Label,XFS 最长 12 个字符
-l打印当前标签label(小写)
-U UUID设置 UUIDUUID
-u打印当前 UUIDuuid
设备名位置参数,写设备路径/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,用e2labele2fsprogs包,同样自带):

[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))

lsoflistopenfiles)直接跟挂载点,列出正在使用它的进程:

写法作用说明(英文原意)
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 定位并杀进程

fuserfileuser)列出占用文件的进程,加-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 /mnt

5.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) 文件占用进程

附:命令英文全称速查表

命令 / 缩写英文全称 / 原意作用
lsblklistblockdevices列出块设备
dfdiskfree文件系统剩余空间
dudiskusage目录 / 文件占用
mkfsmakefilesystem格式化
xfsXFile System一种高性能日志文件系统
xfs_adminXFSadministrator查看 / 修改 XFS 标签与 UUID
e2labelext2label查看 / 修改 ext 系列文件系统标签
LABELlabel(标签)文件系统标签,写在超级块里,可按它挂载
blkidblockid查看设备 UUID / 类型
mount/umount挂载 / 卸载
lsoflistopenfiles列出打开的文件
fuserfileuser文件被哪些进程占用
ntfs-3gNT File System(第三方读写实现)NTFS 驱动
exFATExtendedFileAllocationTable大容量 U 盘常用格式
UUIDUniversallyUniqueIdentifier设备唯一标识
LVMLogicalVolumeManager逻辑卷管理

总结:九条命令串起一条主线——lsblk/df/du看清「盘在哪、空间剩多少、谁最占」,新盘mkfs.xfs格式化后用mount挂上去(blkid取 UUID 更稳),不用了umount卸下;卸载报 busy 就lsof/fuser揪出赖着不走的进程。NTFS / exFAT 的 U 盘装好ntfs-3g/exfatprogs再挂即可。觉得有用的话,点赞收藏,评论区聊聊你被target is busy卡过的经历。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询