文章目录
- Linux 磁盘分区管理 | RAID存储技术 | 逻辑卷管理
-
- 磁盘分区管理
-
- 一、 GPT 分区方案深度解析
-
- 1. 为什么需要 GPT?
- 2. GPT 分区表结构(LBA 布局)
- 二、 磁盘分区管理工具实战
-
- 1. `gdisk` 工具管理 GPT 磁盘
-
- 1.1 查看分区表与转换为 GPT
- 1.2 创建新分区
- 1.3 更改分区名称与查看详情
- 1.4 删除分区
- 2. `wipefs` 工具:彻底清除磁盘元数据
- 3. `parted` 工具:全能分区管理大师
-
- 3.1 设置单位与查看分区表
- 3.2 管理 MBR (msdos) 磁盘
- 3.3 管理 GPT 磁盘
- 3.4 非交互式操作(单行命令)
- 三、 文件系统持久化挂载(`/etc/fstab`)
-
- 1. `/etc/fstab` 六字段详解
- 2. 实战配置与测试
- 四、 文件系统空间不足综合排障
-
- 场景 1:大量的大文件占用空间
- 场景 2:删除文件后,空间没有释放(经典陷阱)
- 场景 3:inode 耗尽(大量小文件占满)
- RAID存储技术
-
- 一、 RAID 技术概述
-
- 1.1 RAID 的历史与定义
- 1.2 RAID 的实现方式
- 二、 核心 RAID 级别详解
-
- 2.1 RAID 0(条带化)
- 2.2 RAID 1(镜像)
- 2.3 RAID 5(分布式奇偶校验)
- 2.4 RAID 6(双重分布式奇偶校验)
- 2.5 RAID 10(条带化+镜像)
- 2.6 复合 RAID 级别(RAID 50 / RAID 60)
- 2.7 RAID 各级别参数对比总结
- 三、 软 RAID 的配置与管理实战(`mdadm`)
-
- 3.1 RAID 0 的创建与管理
- 3.2 RAID 1 的容错与热备盘机制
- 3.3 RAID 5 的动态扩容与故障模拟
- 逻辑卷管理
-
- 硬盘分区管理方案缺点
- 逻辑卷管理(LVM)的优势
- 基本概念
- LVM 管理基本流程
-
- 创建物理卷
- 创建卷组
- 创建逻辑卷
- 创建文件系统
- 清理 LVM
- 扩展和缩减卷组
-
- 环境准备
- 扩展卷组
- 缩减卷组
- 扩展逻辑卷
- 缩减逻辑卷
- 扩展 XFS 文件系统
- 扩展 EXT4 文件系统
- 缩减 EXT4 文件系统
- 逻辑卷快照
- RAID 逻辑卷
-
- 创建 RAID1 逻辑卷
- 模拟故障与修复
- 创建 RAID5 逻辑卷示例
Linux 磁盘分区管理 | RAID存储技术 | 逻辑卷管理
磁盘分区管理
一、 GPT 分区方案深度解析
1. 为什么需要 GPT?
传统的 MBR(Master Boot Record) 分区方案自 1982 年以来长期统治磁盘管理,但其具有两个硬性瓶颈:
- 容量限制:MBR 记录分区总扇区数时仅使用 4 个字节,最大只能表示 2^32 个扇区。按每扇区 512 字节计算,MBR 单个分区最大无法超过 2 TiB。
- 分区数量限制:MBR 最多支持 4 个主分区,即使利用扩展分区和逻辑分区,最多也只能扩展到 15 个分区。
而 GPT(GUID Partition Table) 是运行在 UEFI 固件 系统上的全新标准,彻底解决了上述问题:
- 超大容量:GPT 使用 8 个字节(64 位)存储扇区总数,理论可支持 18 ZiB(约 18 亿 TB)的分区和磁盘。
- 海量分区:GPT 默认支持 128 个分区(远超 MBR 的 15 个),无需繁琐的扩展分区逻辑。
- 数据冗余:GPT 在磁盘头部和尾部各保存了一份分区表信息,具备极强的自我修复能力。
2. GPT 分区表结构(LBA 布局)
GPT 对磁盘的扇区管理采用了逻辑块寻址(LBA)的方式,其结构严谨且带有防护机制:
- LBA0(保护性 MBR):
- GPT 在磁盘第一个扇区保留了兼容性。前 446 字节用于存放启动引导程序,后 4 个分区表项中,有一个存放了特殊标识符 0xEE。
- 作用:当使用老旧、不支持 GPT 的磁盘管理软件读取该磁盘时,系统会认为这是一个已分区的磁盘,从而避免误操作覆盖分区表,起到了保护作用。
- LBA1(GPT 表头记录):
- 这是 GPT 的核心元数据,记录了分区表自身的位置和大小、备份 GPT 所在的位置(通常位于磁盘最后 34 个 LBA),以及分区表的 CRC32 校验码。
- 作用:操作系统启动时,会通过校验码判断 GPT 信息是否正确。一旦检测到损坏,系统会立刻从备份 GPT 中恢复数据,确保磁盘结构的完整性。
- LBA2 ~ LBA33(分区记录区):
- 默认情况下,每个 LBA(512 字节)可存放 4 组分区记录信息。因此,32 个 LBA 最大可提供 128 组分区记录。
- 注意:虽然 GPT 理论上支持 128 个分区,但在实际使用中,如果逻辑分区超过 120 个,可能会出现无法格式化使用的异常情况。
二、 磁盘分区管理工具实战
在 Linux 中,针对不同分区表类型,系统提供了不同的管理工具。gdisk 专门用于管理 GPT 磁盘,而 parted 则是一个同时支持 MBR 和 GPT 的强大全能工具。
1. gdisk 工具管理 GPT 磁盘
1.1 查看分区表与转换为 GPT
使用 gdisk -l /dev/sdb 可以查看目标磁盘的分区表状态。 如果系统检测到磁盘当前是 MBR 格式,而我们需要将其转换为 GPT,可以进入交互式界面:
[root@server-xianyu ~]# gdisk /dev/sdb
Command (? for help): o # 输入o,清空所有分区,创建一个新的空 GPT 分区表
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): Y # 确认删除操作
Command (? for help): w # 输入w,将更改写入磁盘并退出
(注:如果你不想保存更改,可以输入 q 直接退出,避免破坏原有数据。)
1.2 创建新分区
转换并保存后,再次进入 gdisk,此时会识别到 GPT 方案。通过以下步骤创建一个 2GB 的分区:
Command (? for help): n # 输入n,添加新分区
Partition number (1-128, default 1): 回车 # 使用默认分区号1
First sector (34–..., default = 2048): 回车 # 使用默认起始扇区(支持4K对齐)
Last sector (2048–..., default = ...): +2G # 指定分区大小为2GB
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 回车 # 使用默认的Linux filesystem (8300) 类型
1.3 更改分区名称与查看详情
为了便于识别,我们可以给分区设置一个易读的名称(PARTLABEL):
Command (? for help): c # 输入c,更改分区名称
Using 1 # 选择分区号1
Enter name: data01 # 输入新的分区名称
完成创建和命名后,可以用 p 查看分区表,或者用 i 查看特定分区的详细 GUID 信息:
Command (? for help): i # 查看分区1详细信息
Using 1
Partition GUID code: 0FC63DAF-8483-4772-8E79-3D69D8477DE4 (Linux filesystem)
Partition name: 'data01'
1.4 删除分区
如果需要清理分区,使用 d 命令即可:
Command (? for help): d # 删除分区
Using 1 # 选择要删除的分区号
删除完成后,务必输入 w 保存并退出。
2. wipefs 工具:彻底清除磁盘元数据
在某些情况下,磁盘上残留的旧分区表或文件系统签名会导致新的分区操作失败。此时可以使用 wipefs 工具彻底清除这些元数据。
# 查看磁盘上现有的分区表签名
[root@server-xianyu ~]# wipefs /dev/sdb
# 清除未挂载磁盘的所有分区表信息(即重置为空白磁盘)
[root@server-xianyu ~]# wipefs -a /dev/sdb
# 如果系统提示有保护,可使用 -f 强制清除
[root@server-xianyu ~]# wipefs -fa /dev/sdb
⚠️ 注意:该操作非常危险,会将硬盘上的所有分区记录清空,请务必确认数据已备份或确认不需要保留原有数据后再执行。
3. parted 工具:全能分区管理大师
parted 可以交互式或非交互式地操作 MBR(msdos)和 GPT 磁盘。
3.1 设置单位与查看分区表
操作的第一步通常是将默认的 MB(1000进制)单位改为 MiB(1024进制),以保证扇区边界完美 4K 对齐:
(parted) unit MiB # 设置单位为 MiB
(parted) print # 查看当前分区表
3.2 管理 MBR (msdos) 磁盘
① 创建分区表与分区
(parted) mklabel msdos # 设置为 MBR 格式
(parted) mkpart primary xfs 1 2049 # 创建主分区,起始1MiB,结束2049MiB(大小2GiB)
② 扩展分区容量
(parted) resizepart 1 4097 # 将分区1的结束位置扩展到4097MiB(即扩大到4GiB)
(注:在 parted 中调整分区大小会立即生效,无需像传统 fdisk 那样删除重建。)
③ 删除分区
(parted) rm 1 # 删除分区1
3.3 管理 GPT 磁盘
parted 管理 GPT 磁盘的步骤与 MBR 基本一致,仅在创建分区和设置标签时有细微差别:
(parted) mklabel gpt # 设置为 GPT 格式
(parted) mkpart data01 xfs 1 2049 # 创建名为 data01 的 xfs 分区
扩展和删除操作与 MBR 下的 resizepart 和 rm 命令完全相同。
3.4 非交互式操作(单行命令)
parted 支持直接在一行命令行中完成操作,非常适合编写自动化脚本:
# 创建一个 msdos 分区表的主分区
parted /dev/sdb unit MiB mkpart primary 1 2049
# 创建一个 gpt 分区表的分区
parted /dev/sdb unit MiB mkpart data01 xfs 1 2049
# 删除分区1
parted /dev/sdb rm 1
三、 文件系统持久化挂载(/etc/fstab)
使用 mount 命令挂载的分区在服务器重启后会失效。为了实现开机自动挂载,需要将配置写入 /etc/fstab 文件。
1. /etc/fstab 六字段详解
该文件的每一行代表一个挂载配置,以空格分隔,包含 6 个字段:
- 0:不检查(XFS 文件系统推荐设为 0,因为 XFS 有自有的日志机制)。
- 1:优先检查(通常仅用于根分区 /)。
- 2:按顺序检查(用于其他 ext4 文件系统分区)。
2. 实战配置与测试
# 1. 获取 UUID
[root@server-xianyu ~]# blkid /dev/sdb1
/dev/sdb1: UUID="f5c35f10-0274-45af-b044-73694989fe01" TYPE="xfs"
# 2. 创建挂载点并编辑 fstab
[root@server-xianyu ~]# mkdir /data01
[root@server-xianyu ~]# vim /etc/fstab
# 在文件末尾追加以下内容(注意必须用制表符或空格正确隔开):
UUID="f5c35f10-0274-45af-b044-73694989fe01" /data01 xfs defaults 0 0
# 3. 立即测试挂载(无需重启服务器!)
[root@server-xianyu ~]# mount /data01
# 或者使用 mount -a 测试所有 fstab 条目的正确性
# 4. 验证
[root@server-xianyu ~]# df -h /data01
⚠️ 重要提醒:在执行 mount /data01 或重启服务器之前,务必确认 /etc/fstab 配置无语法错误。如果配置错误,可能导致系统开机卡死在文件系统检查阶段而无法正常引导。
四、 文件系统空间不足综合排障
在运维过程中,“磁盘写满”是高频故障。针对不同的场景,排查与解决方法截然不同。
场景 1:大量的大文件占用空间
现象:df -h 显示该分区利用率已达到 100%,且系统响应变慢。 解决策略:使用 find 或 du 组合命令快速定位大文件并删除。
# 直接查找大于100M的文件
find /myapp-1/ -size +100M
/myapp-1/etc/bigfile
# 或者逐层进入目录,利用 du 和 sort 找出最大目录
du -sk /myapp-1/* | sort -n | tail -2
定位后直接 rm -f 删除即可。
场景 2:删除文件后,空间没有释放(经典陷阱)
现象:执行 rm -f 删除了一个 2GB 的日志文件,但 df -h 显示依然 100% 满。 原因:该文件虽然从目录中移除了,但仍有进程(如 tail -f 或程序进程)正在持续打开并写入该文件。Linux 不会释放被打开文件占用的磁盘块,直到该进程彻底退出。 解决方法:使用 lsof 查找被删除但仍被占用的文件,并终止该进程。
[root@server-xianyu ~]# lsof |grep delete |grep /myapp-1
tail 1654 root 3r REG 8,17 2061565952 /myapp-1/etc/bigfile (deleted)
[root@server-xianyu ~]# kill 1654
[root@server-xianyu ~]# df -h /myapp-1/
# 空间立即释放!
💡 建议:在日常清理大文件时,可以先执行 > /myapp-1/etc/bigfile 重定向清空文件内容,再执行 rm 删除,这样从源头避免了进程占用问题。
场景 3:inode 耗尽(大量小文件占满)
现象:df -h 显示还有大量剩余空间(如 1.8M 已用 / 905M 可用),但创建新文件时却报错 设备上没有空间。 原因:文件系统的**索引节点(Inode)**被大量 1KB 的空文件或小文件耗尽了。Inode 用于存放文件的元数据(如权限、位置、时间),每个文件必然占用 1 个 Inode。当 Inode 数量达到上限时,即使磁盘有空间,也无法创建新文件。 排查与解决:
# 使用 df -hi 查看 inode 使用情况
[root@server-xianyu ~]# df -hi /myapp-2
文件系统 Inodes IUsed IFree IUse% Mounted on
/dev/sdb2 64K 64K 0 100% /myapp-2
# 解决方法一:直接删除不需要的海量小文件
rm -f /myapp-2/file-0*
# 解决方法二:将大量小文件合并为一个大文件(归档)
cat /myapp-2/file-{00001..10000} > file-00001
RAID存储技术
一、 RAID 技术概述
1.1 RAID 的历史与定义
RAID 的概念最早起源于 1988 年,由美国加州大学伯克利分校的 D. A. Patterson 教授等人在论文《A Case of Redundant Array of Inexpensive Disks》中首次提出,其全称为 廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks)。当时大容量磁盘极其昂贵,RAID 的基本思想是将多块容量较小、相对廉价的磁盘组合起来,以较低的成本获得与昂贵大容量磁盘相当的容量、性能和可靠性。
随着硬件成本的降低,“廉价”一词已失去实际意义。RAID 咨询委员会(RAB)决定用“独立”替代“廉价”,因此 RAID 现在的正式名称变为 独立磁盘冗余阵列(Redundant Array of Independent Disks)。尽管名称改变,但其核心技术思想并未发生实质变化。
1.2 RAID 的实现方式
从底层实现角度看,RAID 主要分为以下三种类型:
- 软 RAID:所有 RAID 的逻辑功能(包括数据条带化、镜像、校验计算等)均由操作系统和 CPU 完成。它没有独立的 RAID 控制芯片和 I/O 处理芯片,因此效率最低,但成本极低,无需额外硬件支持。
- 硬 RAID:配备了专门的 RAID 控制芯片、I/O 处理芯片以及独立的阵列缓存。所有的数据运算都由硬件独立完成,完全不占用服务器的 CPU 资源,性能极佳,但硬件成本很高。
- 软硬混合 RAID:具备专门的 RAID 控制芯片,但缺乏独立的 I/O 处理芯片,部分控制逻辑仍需要 CPU 配合驱动程序来完成。其性能和成本介于软 RAID 和硬 RAID 之间。
二、 核心 RAID 级别详解
RAID 主要通过数据条带化(Striping)、**镜像(Mirroring)和数据校验(Parity)**三种技术来获取高性能、可靠性和容错能力。根据这些技术的不同组合,衍生出了多种 RAID 级别。业界公认的标准主要有 RAID 0~RAID 5,在实际应用中使用最广的是 RAID 0、RAID 1、RAID 5、RAID 6 和 RAID 10。
2.1 RAID 0(条带化)
- 原理:将数据分割成固定大小的块,并依次分布在多块磁盘上,通过并行读写提高性能。不提供任何数据冗余。
- 优点:性能极高,读写速度快;没有容量冗余,空间利用率 100%。
- 缺点:没有容错能力,一旦任意一块磁盘损坏,整个阵列的数据全部丢失。
- 适用场景:视频编辑、大型数据库或实时流媒体等对性能要求极高、但数据可临时恢复的场景。
2.2 RAID 1(镜像)
- 原理:将数据完全复制到两块或以上的磁盘上。写入时数据同时写入所有磁盘,读取时可并行从多块磁盘读取提升性能。
- 优点:提供 100% 的数据冗余,可靠性极高;读取性能提升;故障恢复极其简单。
- 缺点:磁盘空间利用率仅为 50%,成本较高;写入性能略低于单块磁盘。
- 适用场景:企业财务数据、客户信息、数据库服务器等对数据安全要求极高的关键业务。
2.3 RAID 5(分布式奇偶校验)
- 原理:将数据条带化分布在多块磁盘上,同时将奇偶校验信息均匀分布在所有磁盘上。当一块磁盘故障时,可通过剩余的奇偶校验信息计算恢复丢失的数据。
- 优点:兼具性能和数据冗余;仅需额外一块磁盘的空间作为奇偶校验,空间利用率较高。
- 缺点:写操作涉及校验计算,写入性能受限;在磁盘故障期间,数据恢复过程中系统性能会下降,且存在数据完整性风险。
- 适用场景:文件服务器、中小企业数据库等需要兼顾性能和数据安全的场景。
2.4 RAID 6(双重分布式奇偶校验)
- 原理:在 RAID 5 的基础上,增加了第二份独立的奇偶校验信息,并将其也分布式存储在所有磁盘上。
- 优点:提供了更高级别的数据冗余,即使同时发生两块磁盘故障,数据依然可以恢复。
- 缺点:写入性能比 RAID 5 更低,需要更多的计算开销;硬件成本更高。
- 适用场景:大容量存储系统、虚拟化环境、长期运行的关键数据库。
2.5 RAID 10(条带化+镜像)
- 原理:结合了 RAID 0 和 RAID 1 的优点。先对数据进行镜像(RAID 1),再对镜像后的数据进行条带化(RAID 0)。通常需要 4 块盘组成(两两镜像,再条带)。
- 优点:兼具 RAID 0 的高性能和 RAID 1 的高可靠性;故障恢复极快,无需计算校验。
- 缺点:空间利用率仅为 50%,成本高昂。
- 适用场景:金融交易系统、在线电商平台、虚拟化环境等极度依赖高性能和高可用性的核心业务。
2.6 复合 RAID 级别(RAID 50 / RAID 60)
- RAID 50:由多个 RAID 5 阵列(至少 2 组)通过 RAID 0 条带化组合而成。提供了比 RAID 5 更高的性能和更强的容错能力(允许每组 RAID 5 中各坏一块盘)。
- RAID 60:由多个 RAID 6 阵列(至少 2 组)通过 RAID 0 条带化组合而成。提供了比 RAID 6 更高的性能,以及极强的容错能力。
2.7 RAID 各级别参数对比总结
| RAID 0 | 2 | 无 | 0% | 高 | 高 | 低 |
| RAID 1 | 2 | 单块磁盘 | 50% | 高 | 低 | 中 |
| RAID 5 | 3 | 单块磁盘 | 1 / N | 中 | 低 | 中 |
| RAID 6 | 4 | 两块磁盘 | 2 / N | 中 | 低 | 高 |
| RAID 10 | 4 | 多块磁盘 | 50% | 高 | 中 | 高 |
| RAID 50 | 6 | 多块磁盘 | 1 / N | 高 | 中 | 高 |
| RAID 60 | 8 | 多块磁盘 | 50% | 高 | 中 | 高 |
三、 软 RAID 的配置与管理实战(mdadm)
Linux 提供了强大的 mdadm 实用程序,用于创建、组装和管理软件 RAID 阵列。
3.1 RAID 0 的创建与管理
1. 创建 RAID 0 阵列
# 安装 mdadm
[root@server-xianyu ~]# yum install -y mdadm
# 使用 /dev/sdb 和 /dev/sdc 创建一个 RAID 0 设备 /dev/md0
[root@server-xianyu ~]# mdadm –create /dev/md0 –level 0 –raid-devices 2 /dev/sd{b,c}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
2. 查看阵列信息 可以通过 /proc/mdstat 快速查看阵列概要状态,或通过 mdadm –detail 获取详细信息。
# 查看概要
[root@server-xianyu ~]# cat /proc/mdstat
Personalities : [raid0]
md0 : active raid0 sdc[1] sdb[0]
41908224 blocks super 1.2 512k chunks
# 查看详细属性
[root@server-xianyu ~]# mdadm –detail /dev/md0
...
Raid Level : raid0
Array Size : 41908224 (39.97 GiB 42.91 GB)
Raid Devices : 2
State : clean
Chunk Size : 512K
...
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
重点关注属性:Raid Level、State、Chunk Size 以及设备清单。
3. 格式化和挂载
[root@server-xianyu ~]# mkfs.xfs /dev/md0
[root@server-xianyu ~]# mkdir -p /raid/raid0
[root@server-xianyu ~]# mount /dev/md0 /raid/raid0
[root@server-xianyu ~]# df -h /raid/raid0
Filesystem Size Used Avail Use% Mounted on
/dev/md0 40G 319M 40G 1% /raid/raid0
4. 删除 RAID 0
[root@server-xianyu ~]# umount /dev/md0
[root@server-xianyu ~]# mdadm –stop /dev/md0
mdadm: stopped /dev/md0
[root@server-xianyu ~]# mdadm –zero-superblock /dev/sd{b,c}
⚠️ RAID 0 的特性限制(重要):
3.2 RAID 1 的容错与热备盘机制
1. 创建 RAID 1 阵列
[root@server-xianyu ~]# mdadm –create /dev/md1 –level 1 –raid-devices 2 /dev/sd{b,c}
mdadm: Note: this array has metadata at the start and may not be suitable...
Continue creating array? yes
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
2. 等待同步完成 RAID 1 创建后,系统会自动进行数据同步。在同步完成之前,State 显示为 clean, resyncing,并且会有 Resync Status 进度条。必须等待进度达到 100% 后,才能进行格式化和挂载。
3. 增加热备盘 RAID 1 支持在线增加热备盘(Spare Disk),一旦阵列中某块盘发生故障,热备盘会自动顶替并重建数据。
# 将 /dev/sdd 添加为热备盘
[root@server-xianyu ~]# mdadm –add /dev/md1 /dev/sdd
mdadm: added /dev/sdd
# 查看状态,/dev/sdd 状态变为 spare
[root@server-xianyu ~]# mdadm –detail /dev/md1 |tail -5
...
2 8 48 – spare /dev/sdd
4. 模拟磁盘故障与自动重建
# 强制将 /dev/sdc 标记为故障
[root@server-xianyu ~]# mdadm –fail /dev/md1 /dev/sdc
mdadm: set /dev/sdc faulty in /dev/md1
# 查看成员状态变化
[root@server-xianyu ~]# mdadm –detail /dev/md1 |tail -5
...
2 8 48 1 spare rebuilding /dev/sdd
1 8 32 – faulty /dev/sdc
此时热备盘 /dev/sdd 立刻顶替了故障盘 /dev/sdc 的位置,并开始重建同步。在此期间,数据访问依然正常,完美体现了 RAID 1 的高可用性。
5. 移除故障磁盘与删除 RAID
# 移除物理故障盘
[root@server-xianyu ~]# mdadm –remove /dev/md1 /dev/sdc
mdadm: hot removed /dev/sdc from /dev/md1
# 删除整个阵列
[root@server-xianyu ~]# umount /dev/md1
[root@server-xianyu ~]# mdadm –stop /dev/md1
[root@server-xianyu ~]# mdadm –zero-superblock /dev/sd{b..d}
⚠️ RAID 1 的特性限制(重要): RAID 1 的设计初衷是数据冗余和可靠性,而不是为了增加存储容量。即使尝试对 RAID 1 进行扩容,其总容量也是不会增加的,因为镜像关系决定了容量仅等于最小的一块成员盘。
3.3 RAID 5 的动态扩容与故障模拟
1. 创建 RAID 5 阵列
# 使用 4 块磁盘创建一个 RAID 5 设备 /dev/md5
[root@server-xianyu ~]# mdadm –create /dev/md5 –level 5 –raid-devices 4 /dev/sd{b..e}
2. 查看同步进度 RAID 5 创建后会有进度条,必须等待 Resync Status 达到 100% 后,阵列才进入 clean 状态,此时才能进行 mkfs 和挂载。
3. 增加热备盘与模拟故障 与 RAID 1 类似,RAID 5 也支持热备盘。
# 增加热备盘
[root@server-xianyu ~]# mdadm –add /dev/md5 /dev/sdf
# 模拟故障
[root@server-xianyu ~]# mdadm –fail /dev/md5 /dev/sdb
一旦 sdb 故障,热备盘 sdf 会立即顶替并开始重建(状态变为 spare rebuilding)。数据依然可以正常访问。
4. 监控磁盘读写性能(sar 命令) 在 RAID 阵列故障修复或重建期间,可以使用 sar -dp 1 实时监控磁盘的性能状态:
[root@server ~ 15:09:05]# sar -dp 1
...
15时09分05秒 sdf 1718.18 0.00 439854.55 256.00 0.33 0.19 0.19 32.73
15时09分05秒 sde 1718.18 439854.55 0.00 256.00 0.38 0.22 0.22 38.18
...
重点注意 %util(磁盘繁忙程度)和 rd_sec/s / wr_sec/s(每秒读写扇区数量),可以准确判断磁盘是否处于高负载状态。
5. RAID 5 的在线扩容(核心技能) 注意: 扩容的前提是阵列必须处于正常(clean)状态,降级或正在重构时不允许扩容。
# 1. 新增两块盘作为热备盘
[root@server-xianyu ~]# mdadm –add /dev/md5 /dev/sdb /dev/sdg
# 2. 将阵列的活动成员盘数量从 4 扩容到 5
[root@server-xianyu ~]# mdadm –grow /dev/md5 –raid-devices 5
# 3. 等待重组完成,查看进度
[root@server-xianyu ~]# mdadm –detail /dev/md5
...
Reshape Status : 16% complete
Delta Devices : 1, (4–>5)
...
# 4. 确认容量变化
[root@server-xianyu ~]# lsblk /dev/md5
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
md5 9:5 0 80G 0 raid5 /raid/raid5 # 容量已成功增加
# 5. 扩容文件系统(XFS 需要专用命令)
[root@server-xianyu ~]# xfs_growfs /raid/raid5
[root@server-xianyu ~]# df -h /raid/raid5/
Filesystem Size Used Avail Use% Mounted on
/dev/md5 80G 604M 80G 1% /raid/raid5
6. 重建与清除 RAID 如果 stop 后,尚未清除 superblock,可以通过 mdadm –assemble 命令重新组合阵列以恢复数据:
[root@server-xianyu ~]# mdadm –assemble /dev/md5 /dev/sd{b..g}
最终彻底删除并还原磁盘:
[root@server-xianyu ~]# umount /dev/md5
[root@server-xianyu ~]# mdadm –stop /dev/md5
[root@server-xianyu ~]# mdadm –zero-superblock /dev/sd{b..g}
逻辑卷管理
硬盘分区管理方案缺点
传统分区管理存在三大短板:
- 扩容麻烦:分区空间必须连续,扩容时要求分区后有剩余连续空间,操作复杂。
- 无法跨盘:单个文件系统受限于单块硬盘容量,无法跨越多个物理磁盘。
- 数据风险:一旦硬盘损坏,该分区上的所有数据将全部丢失。
逻辑卷管理(LVM)的优势
LVM 通过抽象存储层,带来了显著的灵活性和可靠性:
- 灵活扩容/缩减:文件系统空间可以在线扩展或缩减,无需重新分区。
- 跨盘整合:逻辑卷可以跨越多个物理硬盘,轻松创建超大容量文件系统。
- 数据冗余:支持创建 RAID 镜像卷,单个硬盘损坏不影响数据。
- 快照功能:保留某一时刻的数据状态,便于快速恢复。
基本概念
LVM 包含三个核心层次:
- 物理卷(PV,Physical Volume):是 LVM 的基本存储块,由磁盘、分区或 RAID 设备初始化而来。
- 卷组(VG,Volume Group):由一个或多个物理卷组成的存储池。
- 逻辑卷(LV,Logical Volume):从卷组中划分出的逻辑空间,可视为虚拟分区,可在其上创建文件系统。
关系图示:
卷组由多个物理卷组成,在卷组中可创建多个逻辑卷,逻辑卷上可创建文件系统供用户使用。
LVM 管理基本流程
创建物理卷
# 创建单个 PV
[root@server-xianyu ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
# 同时创建多个 PV
[root@server-xianyu ~]# pvcreate /dev/sd{c,d}
Physical volume "/dev/sdc" successfully created.
Physical volume "/dev/sdd" successfully created.
# 查看 PV 列表
[root@server-xianyu ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb lvm2 — 20.00g 20.00g
/dev/sdc lvm2 — 20.00g 20.00g
/dev/sdd lvm2 — 20.00g 20.00g
# 查看单个 PV 详细信息
[root@server-xianyu ~]# pvdisplay /dev/sdb
"/dev/sdb" is a new physical volume of "20.00 GiB"
— NEW Physical volume —
PV Name /dev/sdb
VG Name
PV Size 20.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID MBHW0w-OkJL-CasO-PYRR-sduS-U2m5-zdkQ5d
创建卷组
# 创建包含单个 PV 的卷组
[root@server-xianyu ~]# vgcreate webapp /dev/sdb
Volume group "webapp" successfully created
# 创建包含多个 PV 的卷组
[root@server-xianyu ~]# vgcreate dbapp /dev/sd{c,d}
Volume group "dbapp" successfully created
[root@server-xianyu ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb webapp lvm2 a– <20.00g <20.00g
/dev/sdc dbapp lvm2 a– <20.00g <20.00g
/dev/sdd dbapp lvm2 a– <20.00g <20.00g
# 查看 VG 列表
[root@server-xianyu ~]# vgs
VG #PV #LV #SN Attr VSize VFree
dbapp 2 0 0 wz–n- 39.99g 39.99g
webapp 1 0 0 wz–n- <20.00g <20.00g
# 查看单个 VG 详细信息
[root@server-xianyu ~]# vgdisplay dbapp
— Volume group —
VG Name dbapp
...
PE Size 4.00 MiB
Total PE 10238
Alloc PE / Size 0 / 0
Free PE / Size 10238 / 39.99 GiB
注:PE(Physical Extend) 是 PV 的最小存储单元,创建 VG 时可通过 -s 选项设置大小,默认为 4 MiB。
创建逻辑卷
# 在卷组 webapp 中创建名为 webapp01,大小为 5G 的逻辑卷
[root@server-xianyu ~]# lvcreate -n webapp01 -L 5G webapp
Logical volume "webapp01" created.
# 在卷组 dbapp 中创建名为 data01,大小为 25G 的逻辑卷(跨两块硬盘)
[root@server-xianyu ~]# lvcreate -n data01 -L 25G dbapp
Logical volume "data01" created.
# 查看 LV 列表
[root@server-xianyu ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
data01 dbapp -wi-a—– 25.00g
webapp01 webapp -wi-a—– 5.00g
逻辑卷设备名支持三种格式:
- /dev/vname/lvname
- /dev/mapper/vname-lvname
- /dev/dm-N
[root@server-xianyu ~]# ls -l /dev/dbapp/data01 /dev/mapper/dbapp-data01
lrwxrwxrwx 1 root root 7 6月 17 18:26 /dev/dbapp/data01 –> ../dm-4
lrwxrwxrwx 1 root root 7 6月 17 18:26 /dev/mapper/dbapp-data01 –> ../dm-4
# 查看单个 LV 详细信息
[root@server-xianyu ~]# lvdisplay /dev/dbapp/data01
— Logical volume —
LV Path /dev/dbapp/data01
LV Name data02
VG Name dbapp
...
LV Size 25.00 GiB
Current LE 6400
Segments 2
注:LE(Logical Extend) 是 LV 的最小存储单元,通常一个 LE 对应一个 PE。
此时,物理卷空间使用情况:
[root@server-xianyu ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb webapp lvm2 a– <20.00g <15.00g
/dev/sdc dbapp lvm2 a– <20.00g 0
/dev/sdd dbapp lvm2 a– <20.00g 14.99g
可以看到,/dev/sdc 已用完,/dev/sdd 还有剩余。
查看设备映射关系:
[root@server-xianyu ~]# lsblk /dev/sd{b..d}
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
└─webapp-webapp01 253:3 0 5G 0 lvm
sdc 8:32 0 20G 0 disk
└─dbapp-data01 253:4 0 25G 0 lvm
sdd 8:48 0 20G 0 disk
└─dbapp-data01 253:4 0 25G 0 lvm
创建文件系统
[root@server-xianyu ~]# mkfs.xfs /dev/webapp/webapp01
[root@server-xianyu ~]# mount /dev/webapp/webapp01 /usr/share/nginx/html
若需持久化挂载,需在 /etc/fstab 中添加相应条目。
清理 LVM
# 卸载文件系统
[root@server-xianyu ~]# umount /dev/webapp/webapp01
# 删除 LV
[root@server-xianyu ~]# lvremove /dev/webapp/webapp01 /dev/dbapp/data01
Do you really want to remove active logical volume webapp/webapp01? [y/n]: y
Logical volume "webapp01" successfully removed
Do you really want to remove active logical volume dbapp/data01? [y/n]: y
Logical volume "data01" successfully removed
# 删除 VG
[root@server-xianyu ~]# vgremove webapp dbapp
Volume group "webapp" successfully removed
Volume group "dbapp" successfully removed
# 删除 PV
[root@server-xianyu ~]# pvremove /dev/sd{b..d}
Labels on physical volume "/dev/sdb" successfully wiped.
Labels on physical volume "/dev/sdc" successfully wiped.
Labels on physical volume "/dev/sdd" successfully wiped.
扩展和缩减卷组
环境准备
# 创建卷组 webapp 并创建逻辑卷 webapp01(10G)
[root@server-xianyu ~]# vgcreate webapp /dev/sdb
[root@server-xianyu ~]# lvcreate -n webapp01 -L 10G webapp
扩展卷组
如果卷组空间不足,可以添加新的物理卷到卷组中。
[root@server-xianyu ~]# vgextend webapp /dev/sd{c,d}
Physical volume "/dev/sdc" successfully created.
Physical volume "/dev/sdd" successfully created.
Volume group "webapp" successfully extended
缩减卷组
若要从卷组中移除物理卷,必须确保该物理卷上的数据已迁移到其他物理卷。
# 查看物理卷使用状态
[root@server-xianyu ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb webapp lvm2 a– <20.00g <10.00g
/dev/sdc webapp lvm2 a– <20.00g <20.00g
/dev/sdd webapp lvm2 a– <20.00g <20.00g
# 尝试移除 /dev/sdb(失败,因为该 PV 正在使用)
[root@server-xianyu ~]# vgreduce webapp /dev/sdb
Physical volume "/dev/sdb" still in use
# 将 /dev/sdb 上的数据迁移到其他 PV
[root@server-xianyu ~]# pvmove /dev/sdb
# 或者迁移到指定 PV
[root@server-xianyu ~]# pvmove /dev/sdb /dev/sdd
/dev/sdb: Moved: 100.00%
# 再次查看,/dev/sdb 已空闲
[root@server-xianyu ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb webapp lvm2 a– <20.00g <20.00g
/dev/sdc webapp lvm2 a– <20.00g <20.00g
/dev/sdd webapp lvm2 a– <20.00g <10.00g
# 成功移除
[root@server-xianyu ~]# vgreduce webapp /dev/sdb
Removed "/dev/sdb" from volume group "webapp"
扩展逻辑卷
当卷组空间充足时,可以直接扩展逻辑卷的大小。
# 给逻辑卷增加 2G 空间
[root@server-xianyu ~]# lvextend -L +2G /dev/webapp/webapp01
Size of logical volume webapp/webapp01 changed from 10.00 GiB (2560 extents) to 12.00 GiB (3072 extents).
Logical volume webapp/webapp01 successfully resized.
[root@server-xianyu ~]# lvs /dev/webapp/webapp01
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
webapp01 webapp -wi-a—– 12.00g
缩减逻辑卷
缩减逻辑卷有数据丢失风险,操作前需谨慎。
[root@server-xianyu ~]# lvreduce -L -2G /dev/webapp/webapp01
WARNING: Reducing active logical volume to 10.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce webapp/webapp01? [y/n]: `y`
Size of logical volume webapp/webapp01 changed from 12.00 GiB (3072 extents) to 10.00 GiB (2560 extents).
扩展 XFS 文件系统
XFS 文件系统只支持扩展,不支持缩减。
# 格式化并挂载
[root@server-xianyu ~]# mkfs.xfs /dev/webapp/webapp01
[root@server-xianyu ~]# mount /dev/webapp/webapp01 /usr/share/nginx/html
[root@server-xianyu ~]# cp /etc/host* /usr/share/nginx/html
# 扩展逻辑卷(例如扩展到 15G)
[root@server-xianyu ~]# lvextend -L 15G /dev/webapp/webapp01
# 扩展 XFS 文件系统
[root@server-xianyu ~]# xfs_growfs /usr/share/nginx/html
# 验证
[root@server-xianyu ~]# df -h /usr/share/nginx/html
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/webapp-webapp01 15G 140M 15G 1% /usr/share/nginx/html
# 一条命令同时扩展 LV 和文件系统
[root@server-xianyu ~]# lvextend -rL 20G /dev/webapp/webapp01
[root@server-xianyu ~]# lvs /dev/webapp/webapp01
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
webapp01 webapp -wi-ao—- 20.00g
[root@server-xianyu ~]# df -h /usr/share/nginx/html
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/webapp-webapp01 20G 176M 20G 1% /usr/share/nginx/html
扩展 EXT4 文件系统
EXT4 既支持扩展也支持缩减。
# 重新格式化为 EXT4 并挂载
[root@server-xianyu ~]# umount /usr/share/nginx/html
[root@server-xianyu ~]# mkfs.ext4 /dev/webapp/webapp01
[root@server-xianyu ~]# mount /dev/webapp/webapp01 /usr/share/nginx/html
[root@server-xianyu ~]# df -h /usr/share/nginx/html
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/webapp-webapp01 20G 24K 19G 1% /usr/share/nginx/html
[root@server-xianyu ~]# cp /etc/host* /usr/share/nginx/html
# 扩展逻辑卷
[root@server-xianyu ~]# lvextend -L 25G /dev/webapp/webapp01
# 扩展 EXT4 文件系统
[root@server-xianyu ~]# resize2fs /dev/webapp/webapp01
[root@server-xianyu ~]# df -h /usr/share/nginx/html
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/webapp-webapp01 25G 36K 24G 1% /usr/share/nginx/html
# 一条命令同时扩展
[root@server-xianyu ~]# lvextend -rL 30G /dev/webapp/webapp01
[root@server-xianyu ~]# df -h /usr/share/nginx/html
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/webapp-webapp01 30G 36K 28G 1% /usr/share/nginx/html
缩减 EXT4 文件系统
缩减 EXT4 需注意:
- 必须离线操作,即卸载文件系统。
- 缩减后的容量不能小于当前已用空间。
步骤:
# 卸载
[root@server-xianyu ~]# umount /usr/share/nginx/html
# 检查文件系统
[root@server-xianyu ~]# e2fsck -f /dev/webapp/webapp01
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/webapp/webapp01:14/1966080 文件(0.0% 为非连续的), 167445/7864320 块
# 缩小文件系统到 10G
[root@server-xianyu ~]# resize2fs /dev/webapp/webapp01 10G
resize2fs 1.45.6 (20-Mar-2020)
将 /dev/webapp/webapp01 上的文件系统调整为 2621440 个块(每块 4k)。
/dev/webapp/webapp01 上的文件系统现在为 2621440 个块(每块 4k)。
# 缩小逻辑卷到 10G
[root@server-xianyu ~]# lvreduce -L 10G /dev/webapp/webapp01
WARNING: Reducing active logical volume to 10.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce webapp/webapp01? [y/n]: `y`
Size of logical volume webapp/webapp01 changed from 30.00 GiB (7680 extents) to 10.00 GiB (2560 extents).
# 重新挂载验证
[root@server-xianyu ~]# mount /dev/webapp/webapp01 /usr/share/nginx/html
[root@server-xianyu ~]# df -h /usr/share/nginx/html
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/webapp-webapp01 9.7G 36K 9.3G 1% /usr/share/nginx/html
[root@server-xianyu ~]# ls /usr/share/nginx/html
host.conf hostname hosts lost+found
补充说明:如果文件系统直接构建在磁盘分区上,扩展和缩减操作流程与此相同。
逻辑卷快照
快照可以记录某个时刻逻辑卷的数据状态,便于数据恢复。
# 创建快照(快照大小不能小于原 LV)
[root@server-xianyu ~]# lvcreate -s -n webapp01-snap1 -L 10G /dev/webapp/webapp01
Logical volume "webapp01-snap1" created.
# 挂载快照
[root@server-xianyu ~]# mount /dev/webapp/webapp01-snap1 /webapp/webapp01/
# 查看快照中的数据
[root@server-xianyu ~]# ls /webapp/webapp01/
host.conf hostname hosts hosts.allow hosts.deny
# 在原 LV 中创建新数据
[root@server-xianyu ~]# echo hello world > /webapp/webapp01/hello.txt
[root@server-xianyu ~]# cat /webapp/webapp01/hello.txt
hello world
此时,快照中仍然保存着创建时刻的旧数据,可用于恢复。
RAID 逻辑卷
LVM 也支持创建 RAID 类型的逻辑卷(如 RAID1、RAID5),提供硬件级别的数据冗余。
创建 RAID1 逻辑卷
# 环境清理(卸载并删除之前的 LV)
[root@server-xianyu ~]# umount /webapp/webapp0
[root@server-xianyu ~]# umount /usr/share/nginx/html
[root@server-xianyu ~]# lvremove /dev/webapp/webapp01*
# 创建 RAID1 逻辑卷(需要至少两块 PV)
[root@server-xianyu ~]# lvcreate –type raid1 -n webapp01 -L 15G webapp
# 格式化和挂载
[root@server-xianyu ~]# mkfs.xfs /dev/webapp/webapp01
[root@server-xianyu ~]# mount /dev/webapp/webapp01 /usr/share/nginx/html/
[root@server-xianyu ~]# cp /etc/ho* /usr/share/nginx/html/
模拟故障与修复
# 模拟硬盘损坏(写入错误数据)
[root@server-xianyu ~]# dd if=/dev/zero of=/dev/sdd bs=1M count=256
# 此时文件系统仍可正常访问(RAID1 容错)
[root@server-xianyu ~]# ls /usr/share/nginx/html/
host.conf hostname hosts hosts.allow hosts.deny
# 卸载并重新挂载,依然正常
[root@server-xianyu ~]# umount /usr/share/nginx/html
[root@server-xianyu ~]# mount /dev/webapp/webapp01 /usr/share/nginx/html/
# 修复 RAID
# 1. 删除丢失的物理卷(VG 中移除故障 PV)
[root@server-xianyu ~]# vgreduce –removemissing webapp –force
# 2. 将原故障盘重新加入卷组(或换新盘后加入)
[root@server-xianyu ~]# vgextend webapp /dev/sdd
# 3. 修复 RAID1 逻辑卷
[root@server-xianyu ~]# lvconvert –repair /dev/webapp/webapp01
# 4. 扫描物理卷变化
[root@server-xianyu ~]# pvscan
# 5. 验证
[root@server-xianyu ~]# pvs|grep webap
/dev/sdb webapp lvm2 a– <20.00g 4.99g
/dev/sdc webapp lvm2 a– <20.00g 4.99g
/dev/sdd webapp lvm2 a– <20.00g <20.00g
创建 RAID5 逻辑卷示例
# 创建一个 RAID5 逻辑卷,可用大小 5GiB,3 条带,条带大小 64KiB,共 4 个设备(含 1 个奇偶校验)
lvcreate –type raid5 -L 5G -i 3 -I 64 -n mylv vg00
网硕互联帮助中心





评论前必须登录!
注册