Linux 磁盘存储全套知识点(GPT/parted/RAID/LVM)
·
一、磁盘分区方案对比 MBR vs GPT
1. 核心差异
表格
| 对比项 | MBR(msdos) | GPT |
|---|---|---|
| 最大磁盘容量 | 2TiB | 18ZiB |
| 分区上限 | 主分区 4 个 / 扩展 + 逻辑最多 15 个 | 128 个主分区 |
| 冗余备份 | 无,分区表损坏直接丢数据 | 分区表头尾双备份,支持 CRC 校验恢复 |
| 适用固件 | BIOS | UEFI |
2. GPT 分区结构
- LBA0 保护性 MBR
- 446 字节引导程序;分区标识
0xEE,防止老旧工具误删 GPT 磁盘
- 446 字节引导程序;分区标识
- LBA1 GPT 头部
- 记录分区表位置、备份位置、CRC32 校验码,用于校验修复分区表
- LBA2~33 分区条目
- 每扇区 4 组分区记录,每组 128 字节,合计 128 条分区
- 磁盘末尾:备份 GPT 头部 + 分区表
二、GPT 分区工具 gdisk
1. 基础语法
bash
# 查看磁盘GPT分区表
gdisk -l /dev/sdb
# 交互式操作磁盘
gdisk /dev/sdb
2. 核心交互命令
表格
| 指令 | 功能 |
|---|---|
? | 查看全部帮助 |
o | 新建空白 GPT 表(清空全部分区) |
p | 打印分区列表 |
n | 新建分区 |
c | 修改分区名称 |
i | 查看分区详细 GUID / 扇区信息 |
d | 删除分区 |
t | 修改分区类型 ID(LVM/RAID/EFI) |
w | 写入分区表并保存退出 |
q | 不保存直接退出 |
3. 完整实操代码(带注释)
bash
# 1. 将MBR磁盘转为GPT(清空原有分区)
gdisk /dev/sdb
Command (? for help): o # 新建GPT分区表
Proceed? (Y/N): Y
Command (? for help): p # 查看空分区表
Command (? for help): w # 保存分区表
Do you want to proceed? (Y/N): Y
# 2. 创建2G Linux文件系统分区
gdisk /dev/sdb
Command (? for help): n
Partition number (1-128, default 1): 回车 # 默认分区号1
First sector: 回车 # 起始扇区默认对齐2048
Last sector: +2G # 分配2G空间
Hex code: 回车 # 默认8300 Linux filesystem
# 3. 修改分区名称
Command (? for help): c
Using 1
Enter name: data01
# 4. 查看分区详情
Command (? for help): i
Using 1
# 5. 删除分区
Command (? for help): d
Using 1
Command (? for help): w # 保存修改
三、磁盘清理工具 wipefs
作用:清除磁盘分区表、文件系统签名,避免新旧分区冲突
bash
# 查看磁盘现有文件系统/分区标识
wipefs /dev/sdb
# 清空全部磁盘签名(无强制风险,推荐)
wipefs -a /dev/sdb
# 强制清除(慎用,磁盘挂载时禁止使用)
wipefs -fa /dev/sdb
四、通用分区工具 parted(支持 MBR/GPT,支持脚本非交互)
1. 交互式核心命令
bash
# 进入磁盘交互界面
parted /dev/sdb
(parted) help # 查看所有指令
(parted) print # 打印分区表
(parted) unit MiB # 切换容量单位为二进制MiB(默认十进制MB)
(parted) mklabel gpt # 设置磁盘为GPT分区表
(parted) mklabel msdos # 设置磁盘为MBR分区表
(parted) mkpart # 新建分区
(parted) resizepart 1 5121 # 扩容1号分区到5121MiB
(parted) rm 1 # 删除1号分区
(parted) quit # 退出
2. 非交互脚本命令(自动化推荐)
bash
# 1. 磁盘改为GPT分区表
parted /dev/sdb mklabel gpt yes
# 2. 创建2G GPT分区data01,文件系统标记xfs
parted /dev/sdb unit MiB mkpart data01 xfs 1 2049
# 3. 扩容分区1至5G
parted /dev/sdb unit MiB resizepart 1 5121
# 4. 删除分区1
parted /dev/sdb rm 1
# 5. 查看分区信息
parted /dev/sdb unit MiB print
重点:parted 操作实时生效,无需手动保存
五、文件系统格式化 + /etc/fstab 永久挂载
1. 格式化分区
bash
# xfs格式化,存在旧文件系统需加-f强制覆盖
mkfs.xfs /dev/sdb1
mkfs.xfs -f /dev/sdb1
# ext4格式化
mkfs.ext4 /dev/sdb1
2. /etc/fstab 六字段详解
UUID=xxx /data01 xfs defaults 0 0
- 设备标识:UUID(推荐)//dev/sdb1
- 挂载点:必须提前
mkdir创建 - 文件系统类型:xfs/ext4/swap
- 挂载参数:defaults=rw,suid,dev,exec,auto,nouser,async
- dump 备份标记:0 = 不备份
- fsck 自检顺序:xfs 固定 0;ext4 根分区 1,其他分区 2
3. 完整挂载流程
bash
# 获取分区UUID
blkid /dev/sdb1
# 创建挂载目录
mkdir /data01
# 写入fstab持久挂载
vim /etc/fstab
UUID="f5c35f10-0274-45af-b044-73694989fe01" /data01 xfs defaults 0 0
# 生效挂载,无需重启
mount /data01
# 验证挂载
df -h /data01
六、磁盘空间不足三大场景排查方案
场景 1:大文件占满磁盘
bash
# 方法1:查找大于100M文件
find /myapp-1 -size +100M
# 方法2:逐层统计目录占用
du -s /myapp-1/* | sort -n | tail -2
# 删除大文件释放空间
rm -f /myapp-1/etc/bigfile
场景 2:文件删除但进程占用,空间不释放
bash
# 查找已删除但被进程占用的文件
lsof | grep delete | grep /myapp-1
# 终止占用进程释放空间
kill 1654
场景 3:小文件耗尽 inode(磁盘空间充足但无法新建文件)
bash
# 查看inode使用率
df -hi /myapp-2
# 批量删除海量小文件
rm -f /myapp-2/file-0*
七、RAID 磁盘冗余阵列
1. RAID 分类(软 RAID mdadm / 硬 RAID 阵列卡)
- 软 RAID:CPU 计算,无硬件,Linux mdadm 实现
- 硬 RAID:独立阵列卡芯片,不占用 CPU,企业服务器专用
2. 主流 RAID 级别核心参数
表格
| RAID | 最小磁盘 | 容错 | 空间利用率 | 读性能 | 写性能 | 适用场景 |
|---|---|---|---|---|---|---|
| RAID0 | 2 | 无 | 100% | 极高 | 极高 | 临时高速存储,无重要数据 |
| RAID1 | 2 | 坏 1 块 | 50% | 高 | 一般 | 数据库、关键业务 |
| RAID5 | 3 | 坏 1 块 | (n-1)/n | 高 | 偏低 | 普通文件服务器 |
| RAID6 | 4 | 坏 2 块 | (n-2)/n | 高 | 低 | 大容量归档存储 |
| RAID10 | 4 | 每组镜像坏 1 块 | 50% | 极高 | 高 | 高并发数据库、虚拟化 |
3. mdadm 软 RAID 实操(重点注释)
(1)RAID0 创建 / 查看 / 删除
bash
# 安装工具
yum install -y mdadm
# 创建RAID0 /dev/md0 两块磁盘sdb sdc
mdadm --create /dev/md0 --level 0 --raid-devices 2 /dev/sd{b,c}
# 查看RAID概要
cat /proc/mdstat
# 查看RAID详细信息
mdadm --detail /dev/md0
# 格式化挂载
mkfs.xfs /dev/md0
mkdir /raid/raid0
mount /dev/md0 /raid/raid0
# 删除RAID0
umount /raid/raid0 # 1.卸载
mdadm --stop /dev/md0 # 2.停止阵列
mdadm --zero-superblock /dev/sd{b,c} # 3.清除磁盘RAID标记
限制:RAID0 无冗余,不支持添加热备盘、故障磁盘模拟
(2)RAID1 镜像阵列(支持热备、故障自动重建)
bash
# 创建2盘RAID1
mdadm --create /dev/md1 --level 1 --raid-devices 2 /dev/sd{b,c}
# 添加热备盘sdd
mdadm --add /dev/md1 /dev/sdd
# 模拟磁盘故障
mdadm --fail /dev/md1 /dev/sdc
# 移除故障磁盘
mdadm --remove /dev/md1 /dev/sdc
# 销毁RAID1
umount /raid/raid1
mdadm --stop /dev/md1
mdadm --zero-superblock /dev/sd{b..d}
(3)RAID5 扩容实操
bash
# 4块磁盘创建RAID5
mdadm --create /dev/md5 --level 5 --raid-devices 4 /dev/sd{b..e}
# 添加两块新磁盘作为热备
mdadm --add /dev/md5 /dev/sdb /dev/sdg
# 扩容阵列,磁盘数量从4变为5
mdadm --grow /dev/md5 --raid-devices 5
# 等待重组完成后,扩容xfs文件系统
xfs_growfs /raid/raid5
八、LVM 逻辑卷管理(核心重点)
1. LVM 三层结构
-
PV 物理卷:磁盘 / 分区初始化为 LVM 底层存储单元
-
VG 卷组:多个 PV 合并成存储资源池
-
LV 逻辑卷
:从 VG 池划分,格式化后挂载使用
PE:VG 最小存储块,默认 4MiB;LE:LV 最小块,一一对应 PE
2. PV 物理卷操作
bash
# 将磁盘初始化为PV
pvcreate /dev/sdb /dev/sdc /dev/sdd
# 查看PV简略信息
pvs
# 查看PV详细信息
pvdisplay /dev/sdb
# 删除PV(释放磁盘)
pvremove /dev/sdb
3. VG 卷组扩容 / 缩容
bash
# 创建VG webapp,包含/dev/sdb
vgcreate webapp /dev/sdb
# VG扩容:新增两块PV到卷组
vgextend webapp /dev/sdc /dev/sdd
# VG缩容:移除空闲PV
# 1.迁移PV内所有数据到其他PV
pvmove /dev/sdb
# 2.从VG剔除PV
vgreduce webapp /dev/sdb
# 查看VG信息
vgs
vgdisplay webapp
# 删除VG
vgremove webapp
4. LV 逻辑卷基础创建
bash
# 在webapp卷组创建5G逻辑卷webapp01
lvcreate -n webapp01 -L 5G webapp
# 查看LV列表
lvs
lvdisplay /dev/webapp/webapp01
# 删除逻辑卷
lvremove /dev/webapp/webapp01
5. LV 扩容(XFS/EXT4 通用)
bash
# 方式1:单独扩容LV,之后手动扩文件系统
lvextend -L +2G /dev/webapp/webapp01
# xfs扩容文件系统
xfs_growfs /usr/share/nginx/html
# ext4扩容文件系统
resize2fs /dev/webapp/webapp01
# 方式2:一键扩容LV+文件系统(-r自动同步)
lvextend -rL 20G /dev/webapp/webapp01
6. EXT4 LV 缩容(XFS 不支持缩容)
流程:卸载→磁盘检测→缩文件系统→缩 LV→挂载
bash
# 1.卸载挂载点
umount /usr/share/nginx/html
# 2.强制检测文件系统完整性
e2fsck -f /dev/webapp/webapp01
# 3.缩减文件系统至10G
resize2fs /dev/webapp/webapp01 10G
# 4.缩减逻辑卷容量
lvreduce -L 10G /dev/webapp/webapp01
# 5.重新挂载验证
mount /dev/webapp/webapp01 /usr/share/nginx/html
7. LVM 快照(数据备份)
bash
# 创建10G快照webapp01-snap1,基于原LV
lvcreate -s -n webapp01-snap1 -L 10G /dev/webapp/webapp01
# 挂载快照查看历史数据
mount /dev/webapp/webapp01-snap1 /webapp/snap
8. RAID 类型 LVM(raid1 镜像逻辑卷)
bash
# 创建15G RAID1类型逻辑卷
lvcreate --type raid1 -n webapp01 -L 15G webapp
# 磁盘故障修复流程
vgreduce --removemissing webapp --force # 移除损坏磁盘
vgextend webapp /dev/sdd # 添加新磁盘
lvconvert --repair /dev/webapp/webapp01 # 重建RAID镜像
更多推荐


所有评论(0)