RedHat磁盘的添加和扩容
前情提要
- 🧱 磁盘结构流程概念图:
物理磁盘 (/dev/sdX) └── 分区(如 /dev/sdX1)或整块磁盘(直接使用) └── 物理卷 (PV, 用 pvcreate) └── 卷组 (VG, 用 vgcreate) └── 逻辑卷 (LV, 用 lvcreate) └── 格式化为文件系统(如 ext4,用 mkfs.ext4) |
- ✅ 命令职责说明
命令 | 作用 | 用于哪种结构 |
mkpart | 用于创建磁盘分区(在 parted 中) | 普通分区结构、也可为 LVM 提供空间 |
vgcreate | 创建 LVM 的卷组(VG) | LVM 结构 |
pvcreate | 初始化一个设备或分区为 LVM 的物理卷 | LVM 结构 |
lvcreate | 在卷组里创建逻辑卷(LV) | LVM 结构 |
mkfs.ext4 | 格式化一个分区或逻辑卷为 ext4 文件系统 | 可用于普通分区或 LVM LV |
- ✅ 小结
操作目标 | 你应使用的命令 |
创建普通磁盘分区 | parted + mkpart + mkfs.ext4 |
使用磁盘做 LVM | pvcreate + vgcreate + lvcreate |
格式化成 ext4 文件系统 | mkfs.ext4 |
1、添加一块磁盘
2、创建分区
-
2.1小于2T空间可采用fdisk命令进行分区
`
fdisk /dev/sdb n p 1 w |
最后输入w保存所有配置,输入quit退出/放弃配置退出
-
2.2大于2T可采用parted命令进行ext4分区
parted /dev/sdb |
使用 parted 创建 GPT 分区表并分区
mklabel gpt # 创建 GPT 分区表 mkpart primary ext4 0% 100% # 创建分区,占满整个磁盘 quit |
进入 parted 命令行后,依次执行:
mkfs.ext4 /dev/sdb1 |
格式化分区(假设创建的是 /dev/sdb1)
mkdir /data mount /dev/sdb1 /data |
创建挂载点并挂载
-
2.3大于2T可采用parted命令进行LVM分区(优选)
查看磁盘状态和需要初始化的磁盘分区
创建物理卷(PV)
pvcreate /dev/sdc |
创建卷组(VG)
vgcreate vg_data /dev/sdc |
创建逻辑卷(LV)
比如分配 2GB 空间:
lvcreate -n lv_data -L 2G vg_data |
也可以使用所有剩余空间:
lvcreate -n lv_data -l 100%FREE vg_data |
格式化逻辑卷为 ext4
mkfs.ext4 /dev/vg_data/lv_data |
挂载到你想用的目录
mkdir /lvm-data mount /dev/vg_data/lv_data /data |
3、设置开机自动挂载(写入 /etc/fstab)
先获取 UUID:
blkid /dev/sdb1 |
然后编辑 /etc/fstab:
vi /etc/fstab |
添加如下行(替换为实际 UUID):
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /data ext4 defaults 0 0 |
4、添加完成检查状态
🔧 注意事项
- RedHat 6.5 默认支持 GPT,但是你必须使用 parted 或 gdisk,不要使用 fdisk。
- 如果你使用的是较老的 BIOS(非 UEFI),启动盘不能使用 GPT(但数据盘没问题)。
5、扩容磁盘
-
5.1、ext4磁盘类型的扩容
查看目前磁盘状态
卸载分区,此时会中断业务
umount /dev/sdb1 |
如果提示 busy,可以用:
lsof | grep /dev/sdb1 |
结束占用进程后再卸载。
卸载之前
卸载之后
使用 parted 删除并重建分区(不丢数据)
⚠️ 只删除分区,不格式化,数据不会丢失。
parted /dev/sdb |
在 parted 交互命令行中执行:
rm 1 # 删除 sdb1 分区 mkpart primary ext4 0% 100% # 创建新的分区占满整个磁盘 quit |
让系统识别新的分区表
partprobe |
扩展文件系统到新的分区大小
e2fsck -f /dev/sdb1 # 先检查文件系统(非常重要) resize2fs /dev/sdb1 # 扩展 ext4 文件系统 |
重新挂载分区
mount /dev/sdb1 /data df -h /data # 查看是否扩容成功 |
-
5.2、LVM格式的扩容
查看 VG 剩余空间(确认)
vgdisplay vg_data |
执行扩容逻辑卷命令(使用所有剩余空间)
lvextend -l +100%FREE /dev/vg_data/lv_data |
这表示:将 vg_data 中剩余的全部空间分配给 lv_data。
你也可以指定扩多少,比如再加 2G:
lvextend -L +2G /dev/vg_data/lv_data |
扩展文件系统(ext4)
由于你使用的是 ext4 文件系统(默认情况下通常是),运行:
resize2fs /dev/vg_data/lv_data |
这个命令会让文件系统识别到新的逻辑卷大小,并利用新增空间。
📌 注意:这个命令可以在线运行,不影响业务!
验证扩容是否成功
df -h /lvm-data |
6、总结
- ✅ LVM 与 ext4 的对比总结:
特性 | LVM | ext4 |
扩容方式 | 支持动态扩容、收缩 | 支持在线扩展,但无法收缩 |
磁盘合并 | 支持合并多个磁盘形成一个逻辑卷 | 不支持多个磁盘合并 |
文件系统管理 | 支持快速变动和调整逻辑卷 | 固定文件系统,变更需要重分区 |
快照 | 支持快照,适合数据备份与恢复 | 不支持文件系统级别的快照 |
性能开销 | 有较小的性能开销 | 较小,无额外的抽象层 |
数据恢复 | 恢复复杂,需要恢复 LVM 配置 | 恢复相对简单 |
文件系统功能 | 不涉及文件系统,交给其他工具 | 提供日志、文件系统修复等功能 |
- 对于普通的ext4的格式也可以在线扩容但是需要用到非系统自带组件,需要另外安装。
- ⚠️ 注意事项:
- growpart 是 cloud-utils 包的一部分(有些系统可能需要安装):
yum install cloud-utils-growpart |
- 并且growpart 只适用于 MBR 或 GPT 分区表的末尾分区。不能扩展中间分区。
- 如果你原来是 LVM 分区,这个方法就不适用,而是要用 lvextend + resize2fs。
- ✅ 正确理解 growpart 和 resize2fs
命令 | 作用 | 是否会中断业务 |
growpart | 扩展分区表中该分区的大小(前提是后面有空闲空间) | ❌ 不会中断 |
resize2fs | 扩展 ext4 文件系统以使用新空间 | ❌ 在线执行 |
- 🧠 工作原理简述
在使用云平台或 LVM 之外的普通分区时,如果你挂载的是 /dev/sdb1 这样的 普通 ext4 分区,growpart 会:
- 只调整分区表,把 /dev/sdb1 从 2G 扩到例如 5G
- 文件系统大小并没有变化
- 所以你还需要运行 resize2fs 才会看到新的可用空间
- ✅ 在线扩容 ext4 分区完整流程(无业务中断)
假设你挂载的是 /dev/sdb1 到 /data,现在你已经通过扩盘或者调整磁盘,使得 /dev/sdb 后面有空闲空间。
# 第一步:扩展分区(非破坏性) growpart /dev/sdb 1 # 第二步:扩展文件系统 resize2fs /dev/sdb1 |
注意:这个操作不会卸载分区,可以在线完成。
- 🔍 验证是否成功:
df -h /data |