Linux 文件系统与存储管理完全手册:设备识别、空间监控、文件查找及 MBR 分区详解
第一章:Linux 设备识别机制
在 Linux 中,一切皆文件。对存储设备的访问通过块设备文件实现,这些文件通常位于 /dev/ 目录下,由操作系统自动创建。
1.1 常见块设备命名规范
在挂载(格式化)之前,系统通过不同的接口类型识别设备,命名规则如下:
| 接口类型 | 设备名称格式 | 常见场景 |
|---|---|---|
| SATA / SAS / USB / SCSI | /dev/sda, /dev/sdb … |
物理机硬盘、U盘 |
| virtio-blk (虚拟磁盘) | /dev/vda, /dev/vdb … |
KVM/Xen 虚拟机默认磁盘 |
| NVMe (固态硬盘) | /dev/nvme0n1, /dev/nvme1n1 |
高性能 SSD |
| SD / MMC / eMMC | /dev/mmcblk0, /dev/mmcblk1 |
嵌入式设备、SD卡 |
分区表示法:
- SATA/SAS 磁盘:第一个分区为
/dev/sda1,第二个为/dev/sda2。- NVMe 磁盘:第一个分区为
/dev/nvme0n1p1(多了一个p以示区分)。
1.2 为什么要分区?
- 数据安全隔离:系统分区损坏不影响数据分区。
- 性能优化:可根据分区用途(如
/home大量小文件)定制不同的文件系统参数。 - 空间限制:通过配额限制用户或服务的使用空间。
- 便于备份:可以只备份关键数据分区。
第二章:Linux 文件系统概述
文件系统是操作系统在存储设备上组织文件的方法。Linux 默认采用 文件系统层次结构标准(FHS),所有文件从根目录 / 开始。
2.1 常用文件系统类型
- xfs:CentOS/RHEL 7+ 默认,支持超大文件,日志型,性能优秀。
- ext4:传统 Linux 标准,向下兼容 ext2/3。
- swap:交换分区(虚拟内存)。
- iso9660:光盘/镜像文件系统。
- ntfs / exfat:Windows 常用格式(Linux 需额外驱动)。
第三章:查看设备与文件系统状态
3.1 lsblk —— 查看块设备树状结构
bash
lsblk
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
# sda 8:0 0 20G 0 disk
# nvme0n1 259:0 0 200G 0 disk
# ├─nvme0n1p1 259:1 0 1G 0 part /boot
# └─nvme0n1p2 259:2 0 199G 0 part
# ├─rl-root 253:0 0 70G 0 lvm /
TYPE列显示是disk(磁盘)、part(分区)还是lvm(逻辑卷)。MOUNTPOINT为空表示尚未挂载。
3.2 df —— 查看文件系统磁盘空间使用情况
bash
# -h 人类易读 (1024进制) ; -T 显示文件系统类型 ; -H 1000进制
df -hT
# Filesystem 类型 容量 已用 可用 已用% 挂载点
# /dev/mapper/rl-root xfs 70G 6.5G 64G 10% /
Tips:
df -h /boot只查看指定挂载点;df /tmp可以查看某目录所在设备的剩余空间。
3.3 du —— 统计目录和文件占用空间
bash
# -s 仅显示总计, -h 人类易读
du -sh /boot # 查看 /boot 总大小
du -sk /usr/* | sort -n # 找出 /usr 下哪个子目录最大(经典排查手法)
实战案例:查找根目录下的大文件
bash
# 方法1:逐层 du + sort 定位
du -sk /* | sort -n
# 方法2:直接 find 查找超过 100M 的文件
find / -size +100M 2>/dev/null
第四章:挂载与卸载文件系统
必须将设备挂载到一个空目录(挂载点)上,该目录下的原有文件将被隐藏。
4.1 mount 挂载
bash
# 基本语法:mount [-t 类型] [-o 选项] 设备 挂载点
mount /dev/sdb /data
# 通过 UUID 挂载(推荐,设备名可能变化)
blkid /dev/sdb # 获取 UUID
mount UUID="f20547b2..." /data
# 查看当前所有挂载信息
mount | grep ^/dev
4.2 umount 卸载
bash
umount /dev/sdb # 或 umount /data
4.3 卸载失败(Target is busy)解决方法
当有进程正在使用挂载点时,无法卸载。
-
方法1:使用
lsof查看占用进程bash
lsof /data # COMMAND PID USER FD TYPE DEVICE NODE NAME # bash 1508 root cwd DIR 8,17 64 /data -
方法2:使用
fuser查看并强制终止bash
fuser -m /data # 查看 fuser -km /data # 强制杀死占用进程 (发送 SIGKILL) cd ~ && umount /data # 切换目录后卸载
4.4 开机自动挂载(/etc/fstab)
手动挂载重启后失效。若需永久挂载,需修改 /etc/fstab 配置文件。
bash
# 格式: UUID 挂载点 文件系统类型 挂载选项 dump备份 开机自检
UUID=f20547b2... /data xfs defaults 0 0
- 修改后,使用
mount -a测试配置文件是否有语法错误,无需重启。
第五章:特殊文件系统挂载实战
5.1 挂载 NTFS 格式(Windows U盘)
Linux 默认不支持,需安装 ntfs-3g 驱动(通常由 EPEL 仓库提供)。
bash
yum install -y ntfs-3g
mount.ntfs /dev/sdb1 /mnt/windows
5.2 挂载 exFAT 格式
需编译安装 fuse-exfat 模块(需依赖 gcc、fuse-devel)。
bash
# 编译安装后
mount.exfat /dev/sdb1 /mnt/exfat
5.3 挂载 ISO 镜像文件(构建本地 YUM 仓库)
bash
# 创建挂载点,并将光盘挂载到 Web 目录供内网使用
mkdir /usr/share/nginx/html/dvd
mount /dev/sr0 /usr/share/nginx/html/dvd
# 客户端配置仓库
cat > /etc/yum.repos.d/dvd.repo << EOF
[dvd]
name=Local DVD Server
baseurl=http://server_ip/dvd
gpgcheck=0
EOF
yum clean all && yum grouplist
第六章:文件查找利器(locate vs find)
6.1 locate —— 基于数据库快速查找
利用 /var/lib/mlocate/mlocate.db 数据库极速检索,需要先用 updatedb 更新数据库。
bash
locate httpd.conf # 精准匹配
locate -i passwd # -i 忽略大小写
locate -c passwd # -c 只计数
locate -r 'http.*conf' # -r 正则表达式
6.2 find —— 实时硬盘查找(功能强大)
基本语法:find [路径] [条件] [动作]
| 分类 | 参数示例 | 说明 |
|---|---|---|
| 文件名 | -name "passwd" -iname "passwd" |
精确/忽略大小写匹配 |
| 文件类型 | -type f (文件) -type d (目录) -type l (链接) |
|
| 文件大小 | -size +10M (大于10M) -size -1k (小于1k) -size 1024k |
注意:-size 1M 会匹配小于1M的文件(取整),建议用 1024k |
| 权限 | -perm 764 (精准匹配) -perm -764 (权限至少包含764) -perm /764 (ugo任一满足) |
查找 SUID: find / -perm -4000 |
| 时间 | -mtime +10 (10天前修改) -amin -5 (5分钟内访问) |
|
| 用户/组 | -user root -nouser (删除的用户遗留文件) |
多条件组合:
- 逻辑与(默认):
find . -name "*.txt" -size +1M - 逻辑或:
-o,例如find / -nouser -o -nogroup - 逻辑非:
!,例如find / ! -size -200M
常用动作(action):
bash
# 1. 查找并删除
find / -name PASSWD -delete
# 2. 查找并执行命令(经典用法,注意 {} 和 \; 的组合)
find /var/log -name "*.log" -exec cp -a {} /backup/ \;
# 3. 查找并查看详细信息(相当于 ls -l)
find /etc -name passwd -ls
第七章:硬盘分区管理(MBR 与 GPT)
7.1 分区方案对比
| 特性 | MBR (传统) | GPT (新标准) |
|---|---|---|
| 分区数量 | 最多4个主分区,或 3主+1扩展(含N逻辑) | 理论上无限 (通常128个) |
| 单分区容量 | 最大 2 TiB | 最大 9.4 ZB |
| 固件支持 | BIOS | UEFI |
| 工具 | fdisk |
gdisk 或 fdisk (新版本也支持) |
MBR 补知识:扩展分区不能格式化,只能用来容纳逻辑分区;只有逻辑分区可以挂载使用。
7.2 使用 fdisk 管理 MBR 分区
交互式命令内部常用按键:
p:打印分区表n:新建分区d:删除分区t:修改分区类型(如 82=Swap, 83=Linux, 8e=LVM)w:保存并退出q:不保存退出
新建分区步骤示例(创建一个 2G 主分区):
bash
fdisk /dev/sdb
> n # 新建
> p # 主分区
> 1 # 分区号
> 回车 # 起始扇区(默认)
> +2G # 结束扇区(指定大小)
> w # 保存
执行完后,建议运行 partprobe 通知内核更新分区表。
非交互式(脚本化)操作:
将命令写入文件,通过重定向执行:
bash
echo -e "n\np\n1\n\n+2G\nw" | fdisk /dev/sdb
7.3 分区布局示例(扩展分区)
如果超过4个分区,需将第4个设为扩展分区,再在其上创建逻辑分区(从 sdb5 开始):
text
/dev/sdb1 (主, 2G)
/dev/sdb2 (主, 3G)
/dev/sdb3 (主, 4G)
/dev/sdb4 (扩展, 剩余全部)
/dev/sdb5 (逻辑, 5G)
/dev/sdb6 (逻辑, 剩余)
附录:核心工具速查表
| 需求 | 命令 | 说明 |
|---|---|---|
| 查看所有磁盘 | lsblk |
最直观看结构 |
| 查看磁盘容量 | df -hT |
看已挂载的分区 |
| 查看目录大小 | du -sh * |
看文件夹实际占用 |
| 查看磁盘分区 | fdisk -l /dev/sdb |
未挂载也能看 |
| 格式化分区 | mkfs.xfs /dev/sdb1 |
或 mkfs.ext4 |
| 挂载设备 | mount /dev/sdb1 /mnt |
- |
| 卸载设备 | umount /mnt |
记得退出挂载目录 |
| 查看占用进程 | lsof /mnt |
卸载时若报 busy 使用 |
| 查找大文件 | find / -size +1G 2>/dev/null |
忽略权限报错 |
| 批量复制查找结果 | find . -name "*.conf" -exec cp {} /tmp/ \; |
注意 {} 和 \; |
总结:Linux 存储管理遵循“设备文件 → 格式化(文件系统)→ 挂载(目录)”的链路。熟练使用 lsblk、df、du 排查空间问题,掌握 find 的灵活查找,以及 fdisk 的分区操作,是 Linux 运维的核心基本功。对于生产环境,建议优先使用 GPT 分区方案和 UUID 挂载方式(写入 /etc/fstab)以确保稳定性。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)