Linux文件系统全网精讲:设备识别、挂载卸载、磁盘排查一站式实战
在Linux运维工作中,文件系统与磁盘管理是最基础、最高频的核心操作。磁盘爆满排查、U盘/光盘挂载、大文件定位、本地YUM仓库搭建,日常90%的存储类问题,都离不开文件系统基础能力。
本文从零梳理Linux文件系统完整知识体系,搭配真实可落地的实操命令、故障解决方案、经典运维案例,适合新手学习、老手复盘,可直接用于生产环境参考。
一、Linux存储核心:块设备与文件系统
1. 块设备基础认知
Linux所有存储设备(硬盘、U盘、光盘、虚拟机磁盘)均以块设备形式管理,所有设备文件统一存放于/dev 目录,由系统自动创建生成。
核心使用规则:块设备必须先格式化(创建文件系统)、再挂载到系统目录,才能正常读写使用。
生产环境中几乎不会直接使用整块磁盘,通常会划分多个分区。不同分区可配置不同文件系统、独立存储数据,实现空间隔离,避免单个分区占满导致整个系统故障。
2. 主流块设备命名规范(必记)
Linux严格按照设备接口类型命名,熟记命名规则可快速区分设备类型,排查故障事半功倍:
| 设备接口类型 | 设备命名示例 | 适用场景 |
|---|---|---|
| SATA/SAS/USB/SCSI | /dev/sda、/dev/sdb | 物理机械硬盘、普通SSD、U盘 |
| virtio-blk | /dev/vda、/dev/vdb | KVM虚拟化虚拟机磁盘 |
| NVMe SSD | /dev/nvme0n1、nvme0n1p1 | 高速固态硬盘,p后缀代表分区 |
| SD/MMC/eMMC | /dev/mmcblk0、mmcblk1 | 内存卡、嵌入式设备存储 |
3. 分区命名规则
在磁盘设备名后追加数字,即为对应分区,规则统一:
-
普通磁盘:
/dev/sda1(第一块硬盘第一个分区)、/dev/vda2(虚拟机磁盘第二个分区) -
NVMe磁盘:
/dev/nvme0n1p1、/dev/nvme0n1p2
二、文件系统核心原理
文件系统是操作系统管理磁盘数据的规则与数据结构,决定文件的存储、读取、写入、权限管理方式。
Linux 所有文件遵循唯一树形层级结构,以根目录 / 为顶层起点。
关键特性:裸磁盘/分区无文件系统无法直接使用,必须挂载到空目录(挂载点),融入系统目录树后才可读写。
日常运维核心使用场景:
-
磁盘空间占用排查、爆满故障处理
-
超大文件定位、磁盘空间清理
-
外接设备(U盘/光盘)挂载适配
-
磁盘故障风险排查、数据分区管理
三、磁盘与文件系统查看核心命令
1. lsblk:树形查看整块设备架构
最常用的存储架构排查命令,可树形展示磁盘、分区、LVM逻辑卷的层级、大小、挂载状态,一目了然。
[root@server ~ 18:25:32]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 199G 0 part
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
└─centos-home 253:2 0 145.1G 0 lvm /home
sr0 11:0 1 4.4G 0 rom
核心字段解析
-
NAME:块设备名称
-
MAJ:MIN:设备唯一主次编号,系统识别标识
-
RM:是否为可移动设备(1=是,0=否)
-
SIZE:设备总容量
-
RO:是否为只读设备(1=只读,0=可读写)
-
TYPE:设备类型(disk=整块磁盘、part=分区、lvm=逻辑卷、rom=光驱)
-
MOUNTPOINT:挂载路径,无内容代表未挂载
2. df:查看文件系统空间使用率
聚焦已挂载文件系统,统计总容量、已用、可用空间、占用百分比,适合排查磁盘爆满问题。
高频参数
-
df:默认1KB单位展示原始数据 -
df -h:人性化单位(MB/GB),1024进制,可读性最强 -
df -H:1000进制,适配厂商硬盘标称容量 -
df -T:额外显示文件系统类型(xfs/ext4/iso9660) -
df -i:查看 inode 使用量(磁盘空间充足但无法新建文件优先排查 inode 满)
示例:单独查看boot分区状态 df -hT /boot
[root@server ~ 18:39:16]# df -hT /boot
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sda1 xfs 1014M 174M 841M 18% /boot
3. du:精准统计文件/目录磁盘占用
df 看整体,du 看细节!专门统计单个文件、目录的真实磁盘占用,是清理大文件的核心命令。
高频参数
-
du:递归展示所有子目录占用明细 -
du -s:只展示汇总总大小,屏蔽明细 -
du -h:人性化单位展示 -
du -sk 路径 | sort -rn:按容量从大到小排序,磁盘排查万能组合
4. 实战演练:逐层定位4G超大文件
模拟生产环境磁盘爆满场景,从根目录逐层排查,精准定位异常大文件。
步骤1:生成4G测试空文件
[root@server ~ 18:44:39]# dd if=/dev/zero of=/usr/share/doc/dhclient-4.2.5/bigfile-4G bs=1M count=4096
记录了4096+0 的读入
记录了4096+0 的写出
4294967296字节(4.3 GB)已复制,12.0437 秒,357 MB/秒
命令释义:从空设备 /dev/zero 读取空数据,每次写入1M,共4096次,生成真实占用4GB的测试文件。
步骤2:逐层目录排查大文件
# 查看根目录一级目录占用,反向排序,同时过滤错文件,只显示前5行
[root@server ~ 18:51:33]# du -sk /* 2>/dev/null | sort -rn | head -n 5
# 逐层深入定位
[root@server ~ 18:52:24]# du -sk /usr/* 2>/dev/null | sort -rn | head -n 5
5622080 /usr/share
1213888 /usr/lib64
868848 /usr/lib
145644 /usr/bin
66684 /usr/sbin
[root@server ~ 18:52:52]# du -sk /usr/share/* 2>/dev/null | sort -rn | head -n 5
4280320 /usr/share/doc
442224 /usr/share/locale
213252 /usr/share/help
122840 /usr/share/fonts
83908 /usr/share/icons
[root@server ~ 18:53:22]# du -sk /usr/share/doc/* 2>/dev/null | sort -rn | head -n 5
4194316 /usr/share/doc/dhclient-4.2.5
1216 /usr/share/doc/postfix-2.10.1
1192 /usr/share/doc/python-kitchen-1.1.1
1060 /usr/share/doc/pam-1.1.8
968 /usr/share/doc/opus-1.0.2
# 精准锁定目标文件
[root@server ~ 18:53:48]# du -sk /usr/share/doc/dhclient-4.2.5/* 2>/dev/null | sort -rn | head -n 5
4194304 /usr/share/doc/dhclient-4.2.5/bigfile-4G
4 /usr/share/doc/dhclient-4.2.5/README.dhclient.d
4 /usr/share/doc/dhclient-4.2.5/dhclient.conf.example
4 /usr/share/doc/dhclient-4.2.5/dhclient6.conf.example
步骤3:快速检索大文件(高效方案)
[root@server ~ 18:57:48]# find / -size +1024M 2>/dev/null
-r--------. 1 root root 140737486266368 7月 30 18:58 /proc/kcore
-rw-r--r--. 1 root root 4244771581 7月 22 10:46 /root/CentOS-7-x86_64-DVD-2207-02.iso
-rw-r--r--. 1 root root 4294967296 7月 30 18:45 /usr/share/doc/dhclient-4.2.5/bigfile-4G
全局检索大于1024M的文件,过滤权限报错,快速定位异常文件。
四、文件系统挂载与卸载(生产必备)
1. 核心流程及用法
裸磁盘/分区格式化 → 挂载至空目录 → 正常读写使用 → 用完卸载,断开关联。
基础语法:
mount [-t 文件系统] [-o 选项] 设备源 挂载点
-tvfstype,指明文件系统类型-ooptions,指明挂载选项- 设备源:/dev/sdb1、UUID、LABEL、NFS 地址
- 挂载点:必须是已存在空目录
- 卸载:umount 挂载点 / umount /dev/sdb1
2. 完整挂载实操(新增磁盘)
# 1. 查看新增磁盘
[root@server ~ 19:07:12]# lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 100G 0 disk
# 2. 格式化xfs文件系统(CentOS7+默认)
[root@server ~ 19:07:23]# mkfs.xfs /dev/sdb
meta-data=/dev/sdb isize=512 agcount=4, agsize=6553600 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=26214400, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=12800, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
# 3. 创建挂载点并挂载
[root@server ~ 19:08:15]# mkdir /data
# 设备名挂载
[root@server ~ 19:09:28]# mount /dev/sdb /data/
# UUID挂载(生产推荐,稳定性更高)
# blkid可以查询uuid和文件系统
[root@server ~ 19:09:43]# blkid /dev/sdb
/dev/sdb: UUID="017832e7-eec3-4b14-b110-2d6cef44ebdf" TYPE="xfs"
[root@server ~ 19:11:07]# mount UUID="017832e7-eec3-4b14-b110-2d6cef44ebdf" /data
# 4. 验证挂载成功
[root@server ~ 19:12:11]# df -h /dev/sdb
文件系统 容量 已用 可用 已用% 挂载点
/dev/sdb 100G 33M 100G 1% /data
# 括号中属性,是文件系统当前支持的功能。
[root@server ~ 19:15:19]# mount | grep ^/dev
/dev/mapper/centos-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/mapper/centos-home on /home type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/sdb on /data type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
3. 卸载文件系统
# 两种卸载方式等效
[root@server ~ 19:15:41]# umount /data # 或用 umount /dev/sdb
[root@server ~ 19:16:12]# lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 100G 0 disk
4. 故障解决:设备忙碌无法卸载
报错 target is busy:当前终端或进程正在占用挂载目录。
# 创建卸载失败环境
[root@server ~ 19:19:27]# mount /dev/sdb /data
[root@server ~ 19:20:38]# cd /data/
[root@server data 19:20:51]#
[root@server data 19:20:51]# umount /data
umount: /data:目标忙。
(有些情况下通过 lsof(8) 或 fuser(1) 可以
找到有关使用该设备的进程的有用信息)
# 查看占用进程
[root@server data 19:21:25]# lsof /data
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 1904 root cwd DIR 8,16 6 64 /data
lsof 2636 root cwd DIR 8,16 6 64 /data
lsof 2637 root cwd DIR 8,16 6 64 /data
[root@server data 19:22:42]# fuser -m /data/
/data: 1904c
# 退出目录后重新卸载
root@server data 19:28:55]# cd ~
# 可以正常卸载
[root@server ~ 19:29:42]# df -h /data/
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 50G 13G 38G 26% /
5. lsof和fuser命令常用选项
基础用法和区别
| 工具 | 全称 | 核心定位 | 安装说明 |
|---|---|---|---|
| lsof | list open files列出已打开的文件 | 全能工具:文件、目录、套接字、管道、端口都能查 | 最小化 CentOS/Debian 默认不带,yum install lsof / apt install lsof |
| fuser | file user查找使用某个文件 / 挂载点的进程 | 轻量化,专注反向查询:资源→进程 | 属于psmisc软件包,yum install psmisc |
lsof语法:
lsof [选项] [目标]
常用选项
| 选项 | 作用 | 示例 |
|---|---|---|
-i | 查询网络套接字(端口) | lsof -i |
-i :端口 | 查看占用指定端口的进程 | lsof -i :22 |
-i TCP/UDP:端口 | 指定协议端口 | lsof -i TCP:80 |
-p PID | 根据进程号,列出该进程打开所有文件 | lsof -p 1234 |
-u 用户名 | 查询某用户所有进程打开文件 | lsof -u nginx |
文件/目录 | 查询谁正在打开这个文件 | lsof /var/log/messages |
+D 目录 | 递归目录,查找目录下所有被打开文件 | lsof +D /mnt |
-d 描述符 | 按文件描述符筛选,如 -d 22 | lsof -d deleted |
-d deleted | ⭐运维重点:查询已经 rm 删除,但句柄未释放的文件(磁盘空间不释放经典场景) | lsof -d deleted |
-n | 不解析主机名,加速查询 | lsof -ni :3306 |
-P | 端口不解析服务名,直接显示数字端口 | lsof -nPi |
fuser语法
fuser [选项] 文件/挂载点/端口
| 选项 | 功能 | 示例 |
|---|---|---|
-m | 挂载点模式(最常用) 后跟挂载目录,查找占用该文件系统所有进程 | fuser -m /mnt |
-n tcp/udp 端口 | 查询占用端口进程 | fuser -n tcp 80 |
-v | verbose 详细输出进程、用户、命令 | fuser -vm / |
-k | 直接杀死占用资源的进程(慎用!高危) | fuser -k -m /mnt |
-i | 交互式杀死,需要确认,配合 -k | fuser -ki -m /mnt |
-4 / -6 | 仅 ipv4 /ipv6 协议 | fuser -4 -n tcp 22 |
五、特殊设备挂载实战(U盘+本地YUM仓库)
1. NTFS格式U盘挂载
CentOS默认不兼容NTFS格式,需安装第三方驱动:
# 安装依赖包
[root@server ~ 19:34:29]# yum install -y ntfs-3g
# 指定使用 ntfs 内核驱动 进行挂载
[root@server ~ 19:54:20]# mount.ntfs /dev/sdc1 /mnt
# 查看是否挂载成功
[root@server ~ 19:54:49]# ls -l /mnt
总用量 0
drwxrwxrwx. 1 root root 0 10月 10 2025 $RECYCLE.BIN
drwxrwxrwx. 1 root root 0 10月 10 2025 System Volume Information
2. exFAT格式U盘挂载
系统无默认驱动,需编译安装依赖:
# 安装依赖包
[root@server ~ 22:46:33]# yum install -y gcc fuse-devel make pkg-config
# 下载源码包
[root@server ~ 22:47:45]# wget https://www.laoma.cloud/class/course-materials/softwares/stage01/fuse-exfat-1.2.0.tar.gz
# 解压软件包,并进入软件包目录
[root@server ~ 22:49:01]# tar -xf fuse-exfat-1.2.0.tar.gz
[root@server ~ 22:50:03]# cd fuse-exfat-1.2.0/
# 配置文件,且编译安装
[root@server fuse-exfat-1.2.0 22:51:00]# ./configure
[root@server fuse-exfat-1.2.0 22:51:46]# make && make install
# 挂载exFAT格式的U盘(假设U盘设备为/dev/sdc1)
[root@server fuse-exfat-1.2.0 22:52:08]# mount.exfat /dev/sdc1 /mnt
3. 光盘ISO搭建局域网本地YUM仓库
适用场景:服务器无外网、内网批量部署环境,提升安装速度。
服务端配置(发布仓库)
# 安装并配置nginx,开启目录浏览
[root@server ~ 22:53:55]# yum install -y nginx
[root@server ~ 22:56:01]# vim /etc/nginx/nginx.conf
# 在http { 下面一行添加
autoindex on;
# 开机自启,同时启动程序
[root@server ~ 22:58:20]# systemctl enable nginx --now
# 挂载光盘至网站目录
[root@server ~ 22:58:59]# mkdir /usr/share/nginx/html/dvd
[root@server ~ 23:00:14]# mount /dev/sr0 /usr/share/nginx/html/dvd
# 关闭防火墙
[root@server ~ 23:00:40]# systemctl disable firewalld.service --now
客户端配置(使用本地仓库)
# 迁移默认外网仓库
[root@client ~ 22:46:38]# mkdir /etc/yum.repos.d/old
[root@client ~ 23:01:26]# mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/old
# 新建本地DVD仓库
[root@client ~ 23:01:45]# vim /etc/yum.repos.d/dvd.repo
[dvd]
name=dvd from local server
baseurl=http://10.1.8.10/dvd
gpgcheck=0
# 清理缓存、测试安装
[root@client ~ 23:02:27]# yum clean all && yum makecache
# 查看仓库,同时测试安装软件
[root@client ~ 23:03:33]# yum groupinstall
[root@client ~ 23:05:31]# yum groupinstall -y 'Server with GUI'
注意:该内网仓库链接需保证服务端10.1.8.10地址正常、Nginx服务开启,否则会出现解析失败。
六、文件查找两大神器:locate vs find
1. locate:数据库快速检索
基于系统预生成数据库查找,速度极快,需手动更新数据库同步新文件。
常用选项用法:
| 选项 | 全称 | 作用说明 |
|---|---|---|
-b | --basename | 仅匹配文件名(基名),忽略路径部分例:搜索test,只会匹配/data/test,不会匹配/data/test.txt之外路径包含 test 的目录 |
-i | --ignore-case | 忽略大小写匹配(大小写不敏感) |
-c | --count | 不输出文件路径,只输出匹配到的总数量 |
-r | --regexp | 使用正则表达式作为匹配条件(默认是通配符 glob 模式) |
# 新安装软件,必须同时更新文件数据库,不然新安装的软件文件无法搜索
[root@server ~ 23:13:54]# locate hpped.conf
# 搜索未找到数据
[root@server ~ 23:14:25]# locate httpd.conf
# 更新文件数据库
[root@server ~ 23:14:38]# updatedb
[root@server ~ 23:15:30]# locate httpd.conf
/etc/httpd/conf/httpd.conf
/usr/lib/tmpfiles.d/httpd.conf
2. find:实时精准遍历查找(功能最全)
实时遍历磁盘,支持多条件组合匹配,是生产环境首选查找命令。
常用选项和用法:
| 选项 | 含义 | 示例 |
|---|---|---|
-name "字符串" | 按文件名匹配,区分大小写,支持通配符* ? | find /etc -name "*.conf" |
-iname "字符串" | 按文件名,忽略大小写 | find /tmp -iname "test*.log" |
-type | 指定文件类型f 普通文件;d 目录;l 软链接;b 块设备;c 字符设备;p 管道;s 套接字 | find / -type f |
-size | 按文件大小筛选单位:k (KB)、M (MB)、G (GB)+n大于 n;-n小于 n;直接 n = 等于 | find /data -size +100M |
-user 用户名 | 匹配文件属主 | find /home -user tom |
-group 组名 | 匹配文件所属组 | find /opt -group nginx |
-uid / -gid | 使用 UID/GID 数字匹配(适合用户已删除) | find /tmp -uid 1000 |
-perm | 按权限匹配(-表示大于等于、/表示随便哪个权限满足就可以匹配,不加前缀表示精确匹配) | find /usr/bin -perm 755 |
-mtime | 修改时间(文件内容变更),单位:天+7 7 天前;-7 7 天内 | find /var/log -mtime +30 |
-atime | 访问时间(读取文件) | find /tmp -atime -2 |
-ctime | 属性变更时间(权限、属主修改) | find /etc -ctime -1 |
-mmin | 修改时间,单位:分钟 | find /tmp -mmin -10 |
-amin / -cmin | 访问分钟、属性变更分钟 | 同上逻辑 |
-maxdepth N | 限制搜索层级,避免递归过深 | find /etc -maxdepth 1 -name "*.conf" |
-mindepth N | 从第 N 层目录开始搜索 | find /data -mindepth 2 -type f |
-not / ! | 取反条件(不匹配) | find /tmp -type f -not -name "*.txt" |
expr1 -o expr2 | 逻辑或:只满足1个条件就行 | find /tmp -name "*.log" -o -name "*.txt" |
-links | 根据硬链接数去匹配(等于、大于、小于) | find -links 3 |
-inum | 根据 inode 查找文件 | find / -inum 67160130 |
expr1 -a expr2 或者 expr1 expr2 | 逻辑与:两个条件均需满足 | find . -name file-* -perm /764 |
# 按文件名,加-i,忽略大小写
find /etc/ -name passwd
find /etc -iname passwd
# 从根目录开始递归查找,所有大小大于100MB的文件(包含目录、普通文件等所有类型)
find / -size +100M
# 当前目录递归查找,只筛选【普通文件】,排除目录、链接、设备文件
find . -type f
# 全盘搜索,查找拥有SUID权限(4000)的文件
find / -perm -4000
# 全盘搜索,匹配【不小于200M】的文件;把错误信息(权限不足等)重定向到空设备屏蔽输出
find / ! -size -200M 2>/dev/null
# 全盘查找名称为PASSWD的文件,找到后直接删除(区分大小写!高危命令
find / -name PASSWD -delete
# 在/etc目录下查找文件名为passwd,找到后执行 ls -l 列出文件详情
find /etc -name passwd -exec ls -l {} \;
七、核心知识点总结
-
Linux存储层级:物理磁盘 → 分区 → 文件系统 → 挂载点,LVM逻辑卷可实现灵活扩容。
-
df查整体使用率,du查具体文件占用,二者组合是磁盘运维核心手段。
-
所有外接设备必须格式化+挂载才可使用,卸载前需确保无进程占用。
-
Linux遵循KISS原则,单命令功能单一,多命令管道组合可完成复杂运维场景。
-
特殊格式U盘(NTFS/exFAT)需安装第三方驱动,系统原生支持xfs、ext4等文件系统。


被折叠的 条评论
为什么被折叠?



