当前位置: 首页 > news >正文

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

http://www.xdnf.cn/news/343045.html

相关文章:

  • 计数排序-详解
  • 从新手到高手:jQuery 全面进阶之路
  • 数字电子技术基础(五十六)——JK触发器
  • crawl4ai能替代scrapy等传统爬虫框架吗?
  • windows 部署 Kafka3.x KRaft 模式 不依赖 ZooKeeper
  • FPGA_Verilog实现QSPI驱动,完成FLASH程序固化
  • 学习黑客 MAC 地址深入了解
  • 解决社区录音应用横屏状态下,录音后无法播放的bug
  • 信息学奥赛一本通 1511:【SCOI2011】糖果 | 洛谷 P3275 [SCOI2011] 糖果
  • ProfiNet与CANopen:新能源时代的“语言翻译官”
  • Kotlin与Java企业级开发实战:从零到一掌握最新语法与技术精髓
  • Office宏病毒钓鱼-打点突破
  • ROS2基本操作1
  • js常用的数组遍历方式
  • HypotMAX7705771077157720HIPOT美国ASSOCIATEDRESEARCH耐压测试仪
  • 1分区 1-113 多线不起总线启
  • 使用pytorch保存和加载预训练的模型方法
  • Spring Boot 中 MongoDB @DBRef注解适用什么场景?
  • 深入理解软件测试覆盖率:从概念到实践
  • SpringBoot的自动配置和起步依赖原理
  • Java 文件监听与热更新机制封装
  • 【LeetCode 42】接雨水(单调栈、DP、双指针)
  • 日拱一卒 | RNA-seq数据质控(1)
  • ERC-20与ERC-721:区块链代币标准的双星解析
  • Spring MVC 中Model, ModelMap, ModelAndView 之间有什么关系和区别?
  • Spring AI Alibaba-04- Spring AI + RAG + ToolCalling 智能对话应用开发全流程
  • # 如何使用 PyQt5 创建一个简单的警报器控制界面
  • Linux基础(最常用基本命令)
  • 用kompose将docker-compose文件转换为K8S资源清单
  • WHAT - ahooks vs swr 请求