服务器上「磁盘满没满、哪个目录吃空间、新硬盘怎么挂上去、卸载报 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同时显示文件系统与 UUIDfilesystemTYPE / UUID / LABELlsblk -p显示完整设备路径path/dev/sda而非sdalsblk -d只看磁盘、不展开分区disk-only隐藏 part / lvmlsblk -o NAME,SIZE,MOUNTPOINT自定义输出列output只显示关心的字段lsblk /dev/sdb只看指定设备排查单盘时用# 树状查看整机磁盘、分区与 LVM 关系[rootzhb-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、光盘romMOUNTPOINT为空即未挂载。2.2 df查看文件系统使用率写法作用说明英文原意df -h人类可读单位1024 进制human-readabledf -hT同时显示文件系统类型Typexfs / ext4 / iso9660 …df -H1000 进制单位H1K1000数字略大于-hdf -h /data只看某个挂载点跟目录 / 文件参数只显示所在文件系统df -i看 inode 而非空间inode文件数耗尽也会写不进# 带类型一起看一眼分清 xfs / iso9660[rootzhb-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# 看某个文件落在哪个文件系统[rootzhb-m1 ~]# df -h /tmp文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/rl-root 70G6.5G 64G10% /2.3 du统计目录 / 文件占用写法作用说明英文原意du /path递归列出每个子目录占用默认单位 KBdu -s /path只给总和summarize不展开子目录du -sh /path人类可读的总占用human-readabledu -sk /* | sort -n各顶层目录按大小排序kilobytes sort找大目录du -h -d 1 /path只看一层子目录depth等价于--max-depth1# 先看 /boot 递归占用每级子目录都列再只看总和[rootzhb-m1 ~]# du /boot | tail -3142368/boot[rootzhb-m1 ~]# du -sh /boot140M /boot2.4 示例揪出根目录里的大文件# 环境准备造一个 4G 文件用 0 填充[rootzhb-m1 ~]# dd if/dev/zero of/usr/share/doc/dhclient-4.2.5/bigfile-4G bs1M count40964294967296bytes(4.3GB)copied,38.66s,111MB/s# 方法一逐层下钻每层按占用排序找最大的目录[rootzhb-m1 ~]# du -sk /* | sort -n......7917328/usr[rootzhb-m1 ~]# du -sk /usr/share/doc/* | sort -n......4194316/usr/share/doc/dhclient-4.2.5[rootzhb-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后先格式化成文件系统才能用。# 查看新盘[rootzhb-m1 ~]# lsblk /dev/sdbNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb8:16020G0disk# 格式化为 xfs[rootzhb-m1 ~]# mkfs.xfs /dev/sdbmeta-data/dev/sdbisize512agcount4,agsize1310656blks databsize4096blocks5242624,imaxpct25loginternal logbsize4096blocks2560,version2realtimenoneextsz4096blocks0,rtextents0⚠️注意mkfs.xfs默认拒绝覆盖已有文件系统的设备要强制重写需加-f会清掉上面的全部数据慎用。3.2 xfs_admin修改文件系统标签文件系统标签LABEL写在文件系统超级块里用于在不记 UUID 的情况下认设备、按标签挂载。它与分区名PARTLABEL不是一回事后者写在 GPT 分区表上用gdisk的c键改见姊妹篇《Linux 硬盘分区管理》。XFS 用xfs_adminxfsprogs包系统默认自带无需额外安装。格式化时直接指定可省掉事后修改[rootzhb-m1 ~]# mkfs.xfs -L data01 /dev/sdb1 # 格式化时一并写入标签参数含义英文原意-L label设置文件系统标签LabelXFS 最长 12 个字符-l打印当前标签label小写-U UUID设置 UUIDUUID-u打印当前 UUIDuuid设备名位置参数写设备路径如/dev/sdb1不能写挂载点[rootzhb-m1 ~]# umount /data # 改标签前先卸载[rootzhb-m1 ~]# xfs_admin -L data01 /dev/sdb1 # 设置新标签writing all SBs new labeldata01[rootzhb-m1 ~]# xfs_admin -l /dev/sdb1 # 查看标签labeldata01[rootzhb-m1 ~]# mount LABELdata01 /data # 之后即可按标签挂载ext2 / ext3 / ext4 不走xfs_admin用e2labele2fsprogs包同样自带[rootzhb-m1 ~]# e2label /dev/sdb1 data01 # 带名称即设置[rootzhb-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显式指定文件系统类型typemount -o ro /dev/sdb /data只读挂载optionsro / rw / defaultsmount -o loop file.iso /mnt挂载 ISO 镜像文件loop 设备把文件当块设备mount | grep ^/dev查看当前所有挂载无参数列出全部挂载项# 创建挂载点并查看设备标识[rootzhb-m1 ~]# mkdir /data[rootzhb-m1 ~]# blkid /dev/sdb/dev/sdb:UUIDf20547b2-df53-46e5-b526-a8744be26231TYPExfs# 两种方式挂载效果相同[rootzhb-m1 ~]# mount /dev/sdb /data[rootzhb-m1 ~]# mount UUIDf20547b2-df53-46e5-b526-a8744be26231 /data# 验证 写文件测试[rootzhb-m1 ~]# df -h /data文件系统 Size Used Avail Use% Mounted on /dev/sdb 20G 33M 20G1% /data[rootzhb-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/sdbumount -l /data惰性卸载lazy等进程释放后再卸不卡住umount -f /data强制卸载force网络文件系统卡死时用[rootzhb-m1 ~]# umount /data[rootzhb-m1 ~]# df -h /data文件系统 Size Used Avail Use% Mounted on /dev/mapper/rl-root 50G4.3G 46G9% /# 卸载后 /data 回到根文件系统4.2 卸载失败lsof 定位占用进程在挂载点目录内时卸载会报target is busy。[rootzhb-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 / NAMElsof -p 1508某进程打开了哪些文件pidlsof -u zhb某用户打开的文件userlsof -i :22谁占用了 22 端口internet[rootzhb-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同时显示用户名userfuser -k -m /data杀掉这些进程kill默认 SIGKILLfuser -k -i -m /data交互式确认后再杀interactive[rootzhb-m1 ~]# fuser -m /data/data: 1508c# c 进程把该目录当当前目录⚠️注意fuser -k默认发SIGKILL进程来不及清理临时文件 / 落盘数据就终止生产环境优先用lsof看清 PID 后手动处理或加-i逐个确认。五、实战挂载 NTFS / exFAT U 盘Linux 默认不认 NTFS / exFAT需装对应驱动模块。5.1 NTFSntfs-3gyuminstall-yntfs-3g# 来自 EPELmount-tntfs-3g /dev/sdb1 /mnt5.2 exFATexfatprogs现代/ 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 标签与 UUIDe2labelext2label查看 / 修改 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卡过的经历。
