Linux文件系统全网精讲:设备识别、挂载卸载、磁盘排查一站式实战

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/vdbKVM虚拟化虚拟机磁盘
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 730 18:58 /proc/kcore
-rw-r--r--. 1 root root      4244771581 722 10:46 /root/CentOS-7-x86_64-DVD-2207-02.iso
-rw-r--r--. 1 root root      4294967296 730 18:45 /usr/share/doc/dhclient-4.2.5/bigfile-4G

全局检索大于1024M的文件,过滤权限报错,快速定位异常文件。

四、文件系统挂载与卸载(生产必备)

1. 核心流程及用法

裸磁盘/分区格式化 → 挂载至空目录 → 正常读写使用 → 用完卸载,断开关联。

基础语法:

mount [-t 文件系统] [-o 选项] 设备源 挂载点
  • -t vfstype,指明文件系统类型
  • -o options,指明挂载选项
  • 设备源:/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命令常用选项

基础用法和区别

工具全称核心定位安装说明
lsoflist open files列出已打开的文件全能工具:文件、目录、套接字、管道、端口都能查最小化 CentOS/Debian 默认不带,yum install lsof / apt install lsof
fuserfile 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 22lsof -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
-vverbose 详细输出进程、用户、命令fuser -vm /
-k直接杀死占用资源的进程(慎用!高危)fuser -k -m /mnt
-i交互式杀死,需要确认,配合 -kfuser -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 1010 2025 $RECYCLE.BIN
drwxrwxrwx. 1 root root 0 1010 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 {} \;

七、核心知识点总结

  1. Linux存储层级:物理磁盘 → 分区 → 文件系统 → 挂载点,LVM逻辑卷可实现灵活扩容。

  2. df查整体使用率,du查具体文件占用,二者组合是磁盘运维核心手段。

  3. 所有外接设备必须格式化+挂载才可使用,卸载前需确保无进程占用。

  4. Linux遵循KISS原则,单命令功能单一,多命令管道组合可完成复杂运维场景。

  5. 特殊格式U盘(NTFS/exFAT)需安装第三方驱动,系统原生支持xfs、ext4等文件系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值