Linux 存储管理的核心是对块设备(硬盘、分区、逻辑卷等)的识别、分区、格式化、挂载及后续维护,需遵循 “硬件→分区→文件系统→目录树” 的层级逻辑。以下从基础到进阶,系统讲解 Linux 存储基本管理的关键知识点与操作。
一、存储设备的识别
Linux 中所有存储硬件(如硬盘、U 盘、SSD)均以块设备文件形式存在于
/dev 目录下,需先识别设备再进行后续操作。1. 常见块设备命名规则
不同类型的存储设备,其
/dev 下的命名有固定规律:| 设备类型 | 命名格式 | 示例 | 说明 |
|---|---|---|---|
| SATA/SAS 硬盘 | /dev/sd[a-z] |
/dev/sda、/dev/sdb |
第一个硬盘为 sda,依次类推 |
| NVMe 硬盘 | /dev/nvme[n]n[p] |
/dev/nvme0n1 |
NVMe 控制器 0 的第一个命名空间 |
| 分区 | /dev/sd[a-z][1-] |
/dev/sda1、/dev/sdb2 |
硬盘 sda 的第一个分区 |
| 逻辑卷(LVM) | /dev/mapper/[vg-lv] 或 /dev/[vg]/[lv] |
/dev/mapper/vg0-lv_root、/dev/vg0/lv_home |
卷组 vg0 下的逻辑卷 lv_root |
| 软件 RAID | /dev/md[0-9] |
/dev/md0 |
第一个软件 RAID 设备 |
2. 识别设备的核心命令
通过以下命令查看系统已识别的存储设备及分区信息:
| 命令 | 功能说明 | 常用选项与示例 |
|---|---|---|
lsblk |
以树形结构显示块设备(推荐,直观) | lsblk -f:显示设备 + 文件系统信息 |
fdisk -l |
查看分区表信息(支持 MBR/GPT,需 root 权限) | fdisk -l /dev/sdb:查看指定硬盘 sdb |
parted -l |
查看分区表(更适合 GPT 分区,支持大硬盘) | parted -l:查看所有设备分区 |
blkid |
查看块设备的 UUID(唯一标识,用于永久挂载) | blkid /dev/sda1:查看分区 sda1 的 UUID |
示例:用
lsblk -f 查看设备信息[root@localhost ~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 ext4 5f4dcc3b-0000-0000-0000-000000000001 /boot
├─sda2 swap 5f4dcc3b-0000-0000-0000-000000000002 [SWAP]
└─sda3 xfs 5f4dcc3b-0000-0000-0000-000000000003 /
sdb
└─sdb1 xfs 5f4dcc3b-0000-0000-0000-000000000004 /mnt/data
二、分区管理(MBR vs GPT)
硬盘需先分区(将物理硬盘划分为多个逻辑区域),再格式化文件系统。Linux 支持两种主流分区表格式:MBR 和 GPT。
1. MBR vs GPT 对比
| 特性 | MBR(Master Boot Record) | GPT(GUID Partition Table) |
|---|---|---|
| 支持最大硬盘容量 | 2TB | 18EB(几乎无限制) |
| 最大分区数 | 4 个主分区 或 3 主 + 1 扩展(扩展分区下可分多个逻辑分区) | 128 个主分区(无扩展 / 逻辑分区概念) |
| 分区标识 | 分区类型 ID(如 83=Linux 分区,82=Swap) | GUID(全局唯一标识) |
| 兼容性 | 支持所有系统(旧主板默认) | 需主板支持 UEFI 启动(新主板默认) |
| 数据恢复 | 无备份(分区表损坏后难恢复) | 分区表备份(在硬盘首尾两端) |
2. 分区工具:fdisk(MBR)与 parted(GPT)
(1)fdisk:管理 MBR 分区(适合 ≤2TB 硬盘)
操作步骤示例:给
/dev/sdb 硬盘创建 1 个 100GB 的 Linux 分区- 进入 fdisk 交互模式(需 root):
fdisk /dev/sdb - 输入命令操作(交互提示见
m帮助):n:新建分区 → 选择p(主分区)→ 分区号(默认 1)→ 起始扇区(默认)→ 结束扇区(输入+100G表示 100GB)t:修改分区类型 → 输入83(Linux 分区,默认即 83)w:保存分区表(此步执行后分区才生效,不可逆!)
- 刷新分区表(无需重启):
partprobe /dev/sdb
(2)parted:管理 GPT 分区(适合 ≥2TB 硬盘)
操作步骤示例:给
/dev/sdc 硬盘创建 GPT 分区表并新建 200GB 分区- 进入 parted 交互模式:
parted /dev/sdc - 输入命令操作:
mklabel gpt:创建 GPT 分区表(会清除硬盘所有数据!)mkpart primary xfs 0% 200GB:新建主分区(文件系统类型暂填 xfs,起始位置 0%,结束位置 200GB)print:查看分区结果quit:退出(自动保存)
三、文件系统创建与维护
分区后需格式化(创建文件系统),才能被 Linux 识别并存储文件。Linux 支持多种文件系统,需根据场景选择。
1. 主流文件系统对比
| 文件系统 | 特点 | 适用场景 | 缺点 |
|---|---|---|---|
| ext4 | 成熟稳定、支持日志(防数据丢失)、兼容所有 Linux 发行版 | 系统分区(/、/boot)、普通数据分区 | 单个文件最大 16TB,不支持快照、动态扩容(需离线) |
| XFS | 高性能(大文件读写快)、支持在线扩容、最大单个文件 8EB | 大文件存储(视频、数据库)、CentOS 7+ 默认根分区 | 不支持在线缩容,删除大量小文件时性能较差 |
| Btrfs | 支持快照、在线扩缩容、RAID 功能、数据校验 | 需灵活管理的场景(如虚拟机存储) | 稳定性略逊于 ext4/XFS,部分发行版默认不支持 |
| Swap | 虚拟内存分区(无实际文件系统,用于内存溢出时暂存数据) | Swap 分区(内存不足时使用) | 不能挂载为目录,仅作虚拟内存 |
2. 创建文件系统:mkfs 命令
mkfs 是创建文件系统的通用命令,需指定文件系统类型(通过子命令或 -t 选项)。| 命令格式 | 功能说明 | 示例 |
|---|---|---|
mkfs.ext4 /dev/[分区] |
创建 ext4 文件系统 | mkfs.ext4 /dev/sdb1 |
mkfs.xfs /dev/[分区] |
创建 XFS 文件系统 | mkfs.xfs /dev/sdc1 |
mkswap /dev/[分区] |
创建 Swap 分区(特殊文件系统) | mkswap /dev/sdd1 |
mkfs -t btrfs /dev/[分区] |
用 -t 指定文件系统类型创建 |
mkfs -t btrfs /dev/sde1 |
3. 文件系统维护:检查与修复
当文件系统损坏(如突然断电)时,需通过工具检查修复(修复前建议备份数据!)。
| 工具 | 支持文件系统 | 功能说明 | 示例 |
|---|---|---|---|
e2fsck |
ext2/ext3/ext4 | 检查并修复 ext 系列文件系统(不可挂载时用) | e2fsck -f /dev/sdb1(-f 强制检查) |
xfs_repair |
XFS | 检查并修复 XFS 文件系统(不可挂载时用) | xfs_repair /dev/sdc1 |
fsck |
通用 | 自动识别文件系统并调用对应工具检查(不推荐主动用) | fsck /dev/sdb1 |
四、挂载管理(将文件系统关联到目录树)
Linux 中,文件系统必须挂载到某个目录(挂载点),才能通过目录树访问其中的文件。挂载分为「临时挂载」和「永久挂载」。
1. 核心概念
- 挂载点:一个空目录(若目录非空,挂载后原内容会被隐藏,卸载后恢复)。
- UUID:块设备的唯一标识(即使设备名变化,UUID 不变,适合永久挂载)。
- /etc/fstab:系统启动时自动挂载文件系统的配置文件(永久挂载需编辑此文件)。
2. 临时挂载:mount 命令
临时挂载仅当前会话生效,重启后失效。
命令格式
mount /dev/[文件系统] /[挂载点目录]
示例
- 创建挂载点(必须是空目录):
mkdir -p /mnt/data # -p 确保父目录存在 - 挂载 ext4 分区
/dev/sdb1到/mnt/data:mount /dev/sdb1 /mnt/data - 挂载 Swap 分区(特殊挂载,用
swapon):swapon /dev/sdd1 # 启用 Swap;关闭用 swapoff /dev/sdd1 - 查看已挂载的文件系统:
mount # 查看所有挂载 df -h # 查看挂载点、已用/剩余空间(-h 人性化显示)
3. 永久挂载:编辑 /etc/fstab
通过
/etc/fstab 配置,实现系统开机自动挂载(编辑前务必备份文件!)。/etc/fstab 格式
每行对应一个挂载配置,字段用空格 / 制表符分隔:
<设备标识> <挂载点> <文件系统类型> <挂载选项> <dump> <pass>
- 设备标识:可填
/dev/sdb1(设备名)或UUID=xxx(推荐,更稳定)。 - 挂载选项:常用
defaults(包含 rw, suid, dev, exec, auto, nouser, async),特殊需求可加noexec(禁止执行文件)、ro(只读)等。 - dump:0(不备份)、1(备份,通常根分区设 1)。
- pass:0(不检查)、1(优先检查,根分区设 1)、2(次优先检查,其他分区设 2)。
配置示例(永久挂载 /dev/sdb1)
- 获取
/dev/sdb1的 UUID:blkid /dev/sdb1 # 输出类似:/dev/sdb1: UUID="5f4dcc3b-1234-5678-90ab-cdef00000001" TYPE="ext4" - 编辑
/etc/fstab(用 vim 或 nano):vim /etc/fstab添加一行:
UUID=5f4dcc3b-1234-5678-90ab-cdef00000001 /mnt/data ext4 defaults 0 2 - 验证配置(避免开机挂载失败):
mount -a # 加载 /etc/fstab 所有配置,无报错则正常
风险提示
若
/etc/fstab 配置错误(如 UUID 输错、挂载点不存在),系统可能无法开机。此时需进入救援模式,注释错误行并重新挂载。五、进阶:逻辑卷管理(LVM)
传统分区的大小固定,无法动态调整(需卸载后扩容 / 缩容)。LVM(Logical Volume Manager) 通过 “物理卷→卷组→逻辑卷” 的层级,实现存储的动态扩容 / 缩容,适合需要灵活管理的场景(如服务器数据分区)。
1. LVM 核心组件
| 组件 | 英文 | 作用说明 | 示例 |
|---|---|---|---|
| 物理卷 | PV(Physical Volume) | 将分区 / 硬盘封装为 LVM 可识别的 “物理块” | /dev/sdb1、/dev/sdc1 |
| 卷组 | VG(Volume Group) | 将多个 PV 合并为一个 “存储池”(资源池) | vg_data(卷组名) |
| 逻辑卷 | LV(Logical Volume) | 从 VG 中划分出的 “虚拟分区”(可动态调整) | lv_doc(逻辑卷名) |
2. LVM 基本操作流程
以 “创建 LVM 并挂载” 为例,步骤如下:
步骤 1:安装 LVM 工具(部分系统默认已装)
# CentOS/RHEL
yum install -y lvm2
# Ubuntu/Debian
apt install -y lvm2
步骤 2:创建物理卷(PV)
pvcreate /dev/sdb1 /dev/sdc1 # 将两个分区封装为 PV
pvs # 查看 PV 状态(简短)
pvdisplay # 查看 PV 详细信息
步骤 3:创建卷组(VG)
vgcreate vg_data /dev/sdb1 /dev/sdc1 # 用两个 PV 创建卷组 vg_data
vgs # 查看 VG 状态
vgdisplay # 查看 VG 详细信息(含剩余空间)
步骤 4:创建逻辑卷(LV)
从
vg_data 中划分 200GB 逻辑卷 lv_doc:lvcreate -L 200G -n lv_doc vg_data # -L 指定大小,-n 指定名称
lvs # 查看 LV 状态
lvdisplay # 查看 LV 详细信息(含路径:/dev/vg_data/lv_doc)
步骤 5:格式化 LV 并挂载
# 格式化 LV 为 XFS 文件系统
mkfs.xfs /dev/vg_data/lv_doc
# 创建挂载点
mkdir -p /mnt/doc
# 永久挂载(编辑 /etc/fstab)
echo "/dev/vg_data/lv_doc /mnt/doc xfs defaults 0 2" >> /etc/fstab
# 加载配置
mount -a
步骤 6:动态扩容 LV(示例:给 lv_doc 增加 100GB)
- 先确保 VG 有剩余空间(
vgs查看),若不足需先添加新 PV 到 VG:# 新增 PV /dev/sdd1 并加入 vg_data pvcreate /dev/sdd1 vgextend vg_data /dev/sdd1 - 扩容 LV:
lvextend -L +100G /dev/vg_data/lv_doc # +100G 表示增加 100GB(直接写 300G 表示总大小) - 扩容文件系统(必须执行,否则 LV 扩容后文件系统不识别新增空间):
# XFS 文件系统用 xfs_growfs xfs_growfs /mnt/doc # ext4 文件系统用 resize2fs # resize2fs /dev/vg_data/lv_doc
六、存储监控与日常维护
1. 查看磁盘使用情况
df -h:查看已挂载文件系统的空间使用(-h人性化显示,-i查看 inode 使用)。du -sh [目录]:查看目录 / 文件的大小(-s汇总,-h人性化,-d 1显示一级子目录)。du -sh /home # 查看 /home 总大小 du -hd 1 /var # 查看 /var 下一级子目录的大小
2. 监控磁盘 I/O 性能
iostat:查看磁盘读写速率(需安装sysstat包):iostat -x 2 # 每 2 秒输出一次磁盘 I/O 详细信息(-x 显示扩展统计)iotop:实时查看进程的磁盘 I/O 占用(类似top,需安装iotop包)。
3. 常见问题处理
- 磁盘满了:用
df -h定位满的分区,再用du -sh *找到大文件 / 目录,删除无用数据(注意:不要删除系统关键文件,如/var/log下的日志可清理旧文件)。 - 挂载点无法卸载:提示 “device is busy”,表示有进程正在使用该挂载点,用
fuser -m /mnt/data找到占用进程,杀死后再卸载(umount /mnt/data)。
总结
Linux 存储管理的核心流程可概括为:
识别设备(lsblk/fdisk)→ 分区(fdisk/parted)→ 格式化(mkfs)→ 挂载(mount/fstab)→ 维护(LVM / 监控)。
需重点掌握:
识别设备(lsblk/fdisk)→ 分区(fdisk/parted)→ 格式化(mkfs)→ 挂载(mount/fstab)→ 维护(LVM / 监控)。
需重点掌握:
- 设备命名规则与识别命令;
/etc/fstab永久挂载配置(避免开机失败);- LVM 动态管理(扩容 / 缩容);
- 日常监控与故障排查(df/du/iostat)。
实际操作中,务必先备份数据,尤其是分区、格式化、LVM 调整等破坏性操作,避免数据丢失。