大家好!今天我们来聊聊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:查看已知分区类型ID
  • w:保存并退出
  • 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 挂载的概念

将文件系统关联到目录树的过程称为“挂载”,这个目录就是“挂载点”。

挂载点要求

  1. 目录必须存在
  2. 尽量使用空目录
  3. 原有文件会被暂时隐藏

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),再到熟练使用各种管理工具,每一步都很重要。

关键要点回顾

  1. 分区前先了解MBR和GPT的区别
  2. 创建文件系统时要考虑块大小、预留空间等因素
  3. 挂载时注意选项设置,特别是生产环境
  4. 学会使用fstab实现开机自动挂载
  5. 掌握LVM可以实现灵活的空间管理
  6. 定期检查文件系统健康状态

希望这篇文章能帮助你建立起完整的磁盘管理知识体系。如果有任何疑问,欢迎在评论区交流讨论!

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐