深入浅出Linux磁盘分区与文件系统管理
大家好!今天我们来聊聊Linux系统中一个非常重要的基础话题——磁盘分区和文件系统管理。无论你是刚入门的小白还是有一定经验的运维工程师,这部分知识都是必知必会的。
一、磁盘基础概念
1.1 为什么需要磁盘?
计算机中有三大核心资源:CPU、内存和I/O。而磁盘就是I/O中最重要的持久化存储设备。我们的操作系统、应用程序和数据都需要存放在磁盘上。
1.2 磁盘接口类型
磁盘通过不同的接口与主板连接,常见的有:
|
接口类型 |
特点 |
速度 |
|---|---|---|
|
IDE (ATA) |
并行总线,已淘汰 |
133MB/s |
|
SCSI |
并行接口,服务器常用 |
最高640MB/s |
|
SATA |
串行总线,家用主流 |
6Gbps |
|
SAS |
串行接口,企业级 |
6Gbps |
|
USB |
通用串行总线 |
480MB/s |
重要区别:并行接口(IDE、SCSI)一根线缆可以接多块设备,而串行接口(SATA、SAS、USB)只能接单个设备。
1.3 硬盘工作原理
机械硬盘(HDD):
- 磁道(Track):盘片上的同心圆
- 扇区(Sector):每个扇区512字节,是存储的最小单位
- 柱面(Cylinder):所有盘片相同位置的磁道集合
- 分区就是基于柱面划分的
转速决定了性能:5400rpm(笔记本)→ 7200rpm(台式机)→ 10000/15000rpm(企业级)
固态硬盘(SSD):没有机械结构,速度快得多,但有写入寿命限制。
二、Linux中的设备管理
2.1 一切皆文件
Linux的核心理念之一就是“一切皆文件”。设备也不例外,它们都被表示为/dev目录下的特殊文件。
设备类型:
- 块设备:可以随机访问,数据交换单位是“块”(如硬盘)
- 字符设备:线性访问,数据交换单位是“字符”(如键盘)
2.2 设备命名规则
IDE硬盘:/dev/hd[a-z] (已基本淘汰)
SCSI/SATA/USB:/dev/sd[a-z]
NVMe固态:/dev/nvme0n1
分区命名:
/dev/sda1, /dev/sda2 ... (传统硬盘)
/dev/nvme0n1p1, p2 ... (NVMe硬盘)
2.3 设备号
每个设备文件都有两个编号:
- 主设备号(major):标识设备类型,决定使用哪个驱动程序
- 次设备号(minor):标识同类型下的不同设备
可以使用mknod命令手动创建设备文件:
mknod /dev/mydevice b 8 0 # 创建设备号为8:0的块设备
三、磁盘分区详解
3.1 MBR vs GPT
目前有两种主流的分区表格式:
MBR(Master Boot Record)
位于磁盘的第一个扇区(LBA0),共512字节:
- 446字节:引导程序(Bootloader)
- 64字节:分区表(最多4个主分区)
- 2字节:有效性标记(55AA)
分区方案:4个主分区,或者3个主分区+1个扩展分区(扩展分区内可建多个逻辑分区)
- 主分区编号:1-4
- 逻辑分区编号:5+
GPT(GUID Partition Table)
现代分区表标准,解决了MBR的诸多限制:
|
位置 |
内容 |
说明 |
|---|---|---|
|
LBA0 |
Protective MBR |
防止旧工具误识别 |
|
LBA1 |
GPT Header |
包含分区表位置、CRC校验等 |
|
LBA2开始 |
分区表条目 |
默认128条,每条128字节 |
|
磁盘末尾 |
备份GPT |
用于恢复 |
GPT优势:
- 支持超过2TB的磁盘
- 最多128个分区(Windows限制,Linux更多)
- 没有主/扩展/逻辑之分,全是普通分区
- 包含CRC校验,更安全
3.2 使用fdisk管理分区
查看分区信息
fdisk -l /dev/sda
交互式分区管理
fdisk /dev/sda
常用子命令:
n:创建新分区d:删除分区t:修改分区类型l:查看已知分区类型IDw:保存并退出q:不保存退出p:显示当前分区表
重要提示:所有操作都在内存中进行,直到使用w命令才会写入磁盘!
让内核识别新分区
# 查看当前识别的分区
cat /proc/partitions
# 强制内核重读分区表
partx -a /dev/sda
# 或者
kpartx -af /dev/sda
四、创建文件系统
4.1 什么是文件系统?
文件系统是操作系统用于管理文件的方法和数据结构。它包含:
- 元数据区:存储文件的inode(索引节点),包含文件大小、权限、时间戳等信息
- 数据区:存储文件的实际内容
- 位图索引:记录哪些块已被使用
4.2 常见文件系统类型
|
文件系统 |
特点 |
|---|---|
|
ext2 |
早期Linux文件系统,无日志 |
|
ext3/ext4 |
支持日志,兼容性好 |
|
xfs |
高性能,适合大文件 |
|
btrfs |
新一代文件系统,支持快照、压缩 |
|
vfat |
Windows兼容,跨平台 |
|
swap |
Linux交换分区专用 |
4.3 创建文件系统
使用mkfs系列命令
# 通用方式
mkfs -t ext4 /dev/sda1
# 专用命令
mkfs.ext4 /dev/sda1
mkfs.xfs /dev/sda1
mkfs.vfat /dev/sda1
使用mke2fs(ext系列专用)
mke2fs -t ext4 -b 2048 -L MYDATA -m 2 /dev/sda1
参数说明:
-t:指定文件系统类型-b:指定块大小(1024/2048/4096)-L:设置卷标-m:预留空间百分比(默认5%)-i:每多少字节创建一个inode
4.4 查看文件系统属性
# 查看超级块信息
dumpe2fs -h /dev/sda1
# 查看或设置卷标
e2label /dev/sda1 MYDATA
# 查看设备UUID
blkid /dev/sda1
4.5 文件系统检测与修复
# 检查文件系统(需卸载)
e2fsck -f /dev/sda1
# 或使用通用命令
fsck -t ext4 /dev/sda1
五、挂载与使用文件系统
5.1 挂载的概念
将文件系统关联到目录树的过程称为“挂载”,这个目录就是“挂载点”。
挂载点要求:
- 目录必须存在
- 尽量使用空目录
- 原有文件会被暂时隐藏
5.2 mount命令详解
mount [-t fstype] [-o options] device dir
常用选项:
-r:只读挂载-w:读写挂载(默认)-t:指定文件系统类型-L:按卷标挂载-U:按UUID挂载
挂载选项(-o):
|
选项 |
含义 |
|---|---|
|
async/sync |
异步/同步I/O |
|
atime/noatime |
是否更新访问时间 |
|
exec/noexec |
是否允许执行程序 |
|
dev/nodev |
是否识别设备文件 |
|
suid/nosuid |
是否允许SUID生效 |
|
ro/rw |
只读/读写 |
|
user/nouser |
是否允许普通用户挂载 |
|
defaults |
默认值:rw,suid,dev,exec,auto,nouser,async |
5.3 实战示例
挂载光盘:
mount -r /dev/cdrom /mnt
挂载U盘:
mount /dev/sdb1 /mnt/usb
绑定挂载(将一个目录映射到另一个位置):
mount --bind /original /new_location
5.4 卸载文件系统
umount /mnt
# 或
umount /dev/sda1
解决“设备忙”问题:
# 查看占用进程
lsof /mnt
fuser -v /mnt
# 强制终止占用进程
fuser -km /mnt
5.5 开机自动挂载
编辑/etc/fstab文件,每行6个字段:
设备 挂载点 类型 选项 转储 自检
/dev/sda1 / ext4 defaults 0 1
UUID=xxx /data ext4 defaults 0 2
LABEL=DATA /backup ext4 noatime 0 0
- 第5字段:转储频率(0不备份,1每天,2每两天)
- 第6字段:自检次序(0不自检,1最先,2其次)
六、交换分区管理
6.1 创建交换分区
# 创建分区时类型设为82(Linux swap)
fdisk /dev/sda → t → 82
# 格式化为swap
mkswap /dev/sda3
# 启用
swapon /dev/sda3
# 查看
swapon --show
free -h
6.2 禁用交换分区
swapoff /dev/sda3
七、链接文件
7.1 硬链接
指向同一个inode的多个文件路径。
特点:
- 不能用于目录
- 不能跨文件系统
- 增加inode引用计数
ln source_file link_file
7.2 软链接(符号链接)
保存目标路径的特殊文件,有自己的inode。
特点:
- 可用于目录
- 可跨文件系统
- 删除原文件后失效
- 文件大小等于目标路径长度
ln -s source_file link_file
八、综合练习
练习1:创建并挂载分区
需求:创建一个10G分区,格式化为ext4,块大小2048,预留空间2%,卷标MYDATA,挂载到/mydata,禁止程序运行,不更新访问时间,开机自动挂载。
# 1. 创建分区
fdisk /dev/sda
n → p → 回车 → 回车 → +10G → w
# 2. 刷新分区表
partx -a /dev/sda
# 3. 创建文件系统
mke2fs -t ext4 -b 2048 -m 2 -L MYDATA /dev/sda2
# 4. 创建挂载点
mkdir -p /mydata
# 5. 挂载
mount -o noexec,noatime -L MYDATA /mydata
# 6. 设置开机自动挂载
echo "LABEL=MYDATA /mydata ext4 noexec,noatime 0 0" >> /etc/fstab
# 7. 验证
mount -a
df -h
练习2:创建并启用Swap
# 1. 创建1G分区
fdisk /dev/sda
n → p → 回车 → 回车 → +1G → t → 82 → w
# 2. 刷新
partx -a /dev/sda
# 3. 格式化并启用
mkswap /dev/sda3
swapon /dev/sda3
# 4. 验证
swapon --show
free -h
九、进阶:RAID与LVM
9.1 RAID概述
RAID(独立磁盘冗余阵列)通过组合多块磁盘来提高性能和可靠性。
常用级别:
|
级别 |
最少磁盘 |
可用空间 |
容错能力 |
性能 |
|---|---|---|---|---|
|
RAID 0 |
2 |
N×min |
无 |
读写提升 |
|
RAID 1 |
2 |
1×min |
1块 |
读提升,写下降 |
|
RAID 5 |
3 |
(N-1)×min |
1块 |
读写提升 |
|
RAID 10 |
4 |
N×min/2 |
每组1块 |
读写提升 |
9.2 LVM逻辑卷管理
LVM提供了更灵活的磁盘管理方式,可以在不停机的情况下调整分区大小。
基本概念:
- PV(物理卷):底层磁盘或分区
- VG(卷组):多个PV的组合
- LV(逻辑卷):从VG中划分的逻辑分区
- PE(物理扩展):VG的最小分配单元
创建流程:
# 1. 创建PV
pvcreate /dev/sda1 /dev/sda2
# 2. 创建VG
vgcreate myvg /dev/sda1 /dev/sda2 -s 16M
# 3. 创建LV
lvcreate -L 5G -n mylv myvg
# 4. 创建文件系统并挂载
mkfs.ext4 /dev/myvg/mylv
mount /dev/myvg/mylv /mnt
扩展LV:
lvextend -L +2G /dev/myvg/mylv
resize2fs /dev/myvg/mylv
缩减LV(需谨慎):
umount /dev/myvg/mylv
e2fsck -f /dev/myvg/mylv
resize2fs /dev/myvg/mylv 3G
lvreduce -L 3G /dev/myvg/mylv
mount /dev/myvg/mylv /mnt
创建快照:
lvcreate -L 1G -s -n mysnap /dev/myvg/mylv
mount -o ro /dev/myvg/mysnap /snap
十、Btrfs简介
Btrfs是新一代文件系统,具有许多先进特性:
核心特性:
- 多物理卷支持(类似LVM)
- 写时复制(CoW)
- 数据和元数据校验
- 子卷和快照
- 透明压缩
基本操作:
# 创建
mkfs.btrfs /dev/sdb /dev/sdc
# 挂载(启用压缩)
mount -o compress=lzo /dev/sdb /mnt
# 查看
btrfs filesystem show
总结
磁盘分区和文件系统管理是Linux系统管理的基石。从理解磁盘工作原理,到掌握分区表格式(MBR/GPT),再到熟练使用各种管理工具,每一步都很重要。
关键要点回顾:
- 分区前先了解MBR和GPT的区别
- 创建文件系统时要考虑块大小、预留空间等因素
- 挂载时注意选项设置,特别是生产环境
- 学会使用fstab实现开机自动挂载
- 掌握LVM可以实现灵活的空间管理
- 定期检查文件系统健康状态
希望这篇文章能帮助你建立起完整的磁盘管理知识体系。如果有任何疑问,欢迎在评论区交流讨论!
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)