Skip to content

lidong 磁盘扩容与 LVM 转换指南

1. 准备工作

bash
# 查看系统中是否安装了 LVM 管理工具
apt list --installed | grep lvm2
# 如提示未安装,执行下面命令安装
apt install lvm2
# 检查系统磁盘情况
fdisk -l | grep /dev/vd | grep -v vda

系统磁盘列表 一般默认除系统盘后,系统第一个磁盘是/dev/vdb、第二个是/dev/vdc

磁盘命名说明

  • /dev/vda:系统盘(通常是第一个磁盘)
  • /dev/vdb:第一个数据盘
  • /dev/vdc:第二个数据盘
  • 以此类推...

在物理服务器上,可能会看到 /dev/sda/dev/sdb 等命名方式,这是不同的磁盘控制器类型导致的命名差异。

查看当前磁盘情况

使用命令 fdisk -l 或者 lsblk 找到新增的未分区的磁盘。

提示:若新增磁盘尚未出现在列表中,可执行以下命令重新扫描 SCSI 主机。

bash
for file in `ls /sys/class/scsi_host`; \
do echo '- - -' > /sys/class/scsi_host/$file/scan ; \
done

注意事项:

  • 执行扫描命令后,建议等待几秒钟让系统识别新磁盘
  • 如果仍然无法识别,可以尝试重启系统
  • 在云服务器环境中,可能需要先在控制台挂载新磁盘

重要提示

需求确认

  1. 需要扩容原本的/dev/vdb1 空间以利用/dev/vdb 所有空间,请参考2. 原磁盘本身扩容
  2. 需要将/dev/vdc 和/dev/vdb 合并使用,请参考3. 新增磁盘扩容,与原有磁盘合并

2. 原磁盘本身扩容

适用情况:原磁盘已有分区,但申请了新增了磁盘空间 类似于下图:本身 vdb1 只有 500GB,但对 vdb 磁盘新增了 500G,本次需要对 vdb1 扩容至 1000G

lsblk情况

扩容原理说明

  1. 首先取消磁盘挂载,确保数据安全
  2. 将分区表转换为 GPT 格式,支持更大容量
  3. 调整分区大小,使其占用所有可用空间
  4. 扩展文件系统以使用新增的空间
  5. 重新挂载并验证扩容结果

2.1 取消原磁盘挂载

bash
vim /etc/fstab
注释以下行`# /dev/vdb1 /home ext4 defaults 0 0``ESC``:wq`保存退出

fstab情况

bash
mount -a
umount /home  ## 取消/home挂载

挂载点说明

  • /etc/fstab 文件记录了系统启动时需要自动挂载的文件系统
  • 在修改挂载配置前,请确保了解每个挂载点的用途
  • 建议在修改前备份 /etc/fstab 文件

2.2 转为 GPT 格式

高风险操作

以下命令会写入磁盘分区表。请确认设备路径正确,并在完成可恢复备份后继续。

bash
gdisk /dev/vdb  # 选择磁盘
w               # 写入,是否转为GPT格式
Y               # 确定转格式
# 等待执行完成

gdisk情况

2.3 调整分区大小

高风险操作

调整分区与文件系统前,请确认备份有效,并保证操作期间供电与连接稳定。

bash
# 检查文件系统
e2fsck -f /dev/vdb1

# 使用 parted 调整分区
parted /dev/vdb                      # 操作磁盘
               print                 # 打印信息
(parted)       resizepart 1          # 选择分区
End? [500GB]?  100%                  # 扩展到全部空间
(parted)       quit                  # 退出

# 扩展文件系统
resize2fs /dev/vdb1

调整分区大小

2.4 重新挂载

bash
mount /dev/vdb1 /home
vim /etc/fstab
# 注释以下行`/dev/vdb1 /home ext4 defaults 0 0`并`ESC`和`:wq`保存退出

fstab情况2

2.5 检查磁盘挂载情况

bash
mount -a
lsblk
df -hT

检查磁盘挂载情况

3. 新增磁盘扩容,与原有磁盘合并

适用情况:已有磁盘/dev/vdb,需要将新磁盘/dev/vdc 合并,即把/dev/vdc 空间和/dev/vdb 合并使用

LVM 扩容优势

  1. 支持在线扩容,无需停机
  2. 可以灵活管理多个物理磁盘
  3. 支持动态调整分区大小
  4. 提供更好的数据管理能力

3.1. 备份原本磁盘数据(/dev/vdb->/dev/vdc)

数据备份重要性

  1. 确保备份目标磁盘有足够空间
  2. 建议在备份前进行数据完整性检查
  3. 备份完成后进行验证
  4. 保留备份直到确认新系统运行正常

3.1.1 在新硬盘上创建新分区并格式化

高风险操作

格式化会清除目标分区上的现有数据。请再次核对目标磁盘与备份状态。

bash
# 查看新硬盘信息
fdisk -l /dev/vdc

# 创建新分区
fdisk /dev/vdc
g    # 新建一份 GPT 分区表
n    # 添加新分区
     # 默认回车 分区号
     # 默认回车 第一个扇区
     # 默认回车 大小
w    # 将分区表写入磁盘并退出

# 格式化分区
mkfs.ext4 /dev/vdc1

# 验证分区创建
fdisk -l /dev/vdc1

3.1.2 将旧硬盘内容传输至新硬盘

bash
# 建议先验证源分区和目标分区的大小,需求 vdc 区大于或等于 vdb 区
fdisk -l /dev/vdb1 /dev/vdc1

# 开始数据迁移
dd if=/dev/vdb1 of=/dev/vdc1 bs=512M
# 可以再开一个终端执行此命令查看进度
watch -n 10 kill -USR1 $(ps aux | grep "dd if=/dev/vdb1"|grep -v grep|awk '{print $2}')

数据迁移注意事项

  • 迁移过程中请勿中断操作
  • 建议在迁移前进行数据完整性检查
  • 迁移完成后务必进行验证
  • 如果发现数据不一致,请立即停止操作并联系技术支持

3.2 修改原磁盘为 LVM 卷组(如 /dev/vdb)

3.2.1 删除 /dev/vdb 当前分区

高风险操作

删除分区会使原有数据不可直接访问。请确认迁移副本完整且目标设备无误。

bash
# 卸载正在使用的硬盘
umount /dev/vdb1
# 如果提示设备正忙,可以使用 fuser 命令查看正在操作硬盘的进程,并合理关闭它们
fuser -cu /dev/vdb1 # 找到进程号
ps -ef|grep 进程号  # 找到对应进程
kill -9 进程号      # 杀死进程
# 如当前终端处于 /home 路径,切换到其他路径,如 `cd /`,避免占用

# 删除磁盘分区
fdisk /dev/vdb
d    # 删除分区
w    # 将分区表写入磁盘并退出

删除分区操作

3.2.2 将 /dev/vdb 转换为 LVM 卷组

高风险操作

创建物理卷会覆盖目标设备的 LVM 元数据。请勿对错误的磁盘执行命令。

bash
# 检查当前磁盘状态
lsblk
fdisk -l /dev/vdb
# 清除磁盘签名,会删除 /dev/vdb 数据
wipefs -a /dev/vdb

# 创建物理卷 (PV)
pvcreate /dev/vdb
# 创建卷组 (VG)
vgcreate vg_data /dev/vdb
# 创建逻辑卷 (LV)
lvcreate -n lv_data -l 100%FREE vg_data
# 格式化逻辑卷 (LV),**需要等一会儿执行完成**
mkfs.ext4 /dev/mapper/vg_data-lv_data
# 挂载逻辑卷 /home
mount /dev/mapper/vg_data-lv_data /home

# 设置自动挂载
vim /etc/fstab
# 按a进入编辑模式,添加下面一行
/dev/mapper/vg_data-lv_data /home ext4 defaults 0 0
# esc 后再 :wq 保存

# 手动挂载
mount -a
# 检查挂载情况
df -h

LVM 创建过程1

LVM 创建过程2

fstab 信息

重启机器后,检查挂载情况

重启后挂载检查

3.3 将新硬盘上的数据传至 LVM 卷组

bash
# 开始数据迁移,**等待执行完成**
dd if=/dev/vdc1 of=/dev/mapper/vg_data-lv_data bs=512M
# 可以再开一个终端执行此命令查看进度
watch -n 10 kill -USR1 $(ps aux | grep "dd if=/dev/vdc1"|grep -v grep|awk '{print $2}')

3.4 将新硬盘加入 LVM 卷组

高风险操作

本节会重新分区并加入卷组。请确认数据迁移已完成并经过校验。

bash
# 删除原有分区
fdisk /dev/vdc
d    # 删除分区
n    # 添加新分区
     # 默认回车 分区号
     # 默认回车 第一个扇区
     # 默认回车 大小
w    # 将分区表写入磁盘并退出

# 通知操作系统分区表更新
partprobe /dev/vdc

# 查看 pv 信息
pvs
# 创建 pv
pvcreate /dev/vdc

# 扩展卷组(VG)空间
vgextend vg_data /dev/vdc # 往 vg_data 添加
lvextend -l +100%FREE /dev/mapper/vg_data-lv_data # 100%空间分配

3.5 扩容 LVM 卷组的文件系统

文件系统扩容注意事项

  • 确保文件系统支持在线扩容
  • 扩容过程中不要中断操作
  • 建议在扩容后检查文件系统完整性
bash
# 检查当前文件系统类型
df -hT
# 根据文件系统类型选择扩容命令
# 如果是 ext4 文件系统
resize2fs -p /dev/mapper/vg_data-lv_data
# 如果是 xfs 文件系统
# xfs_growfs /dev/mapper/vg_data-lv_data

# 检查挂载信息
df -hT

文件系统扩容结果

4. 注意事项

常见问题处理

  1. 磁盘无法识别

    • 检查磁盘是否已正确连接
    • 执行磁盘扫描命令
    • 检查系统日志
  2. 挂载失败

    • 检查文件系统是否损坏
    • 验证挂载点权限
    • 检查 fstab 配置
  3. LVM 操作失败

    • 检查 PV、VG、LV 状态
    • 确保有足够的空间
    • 查看系统日志

lidong 文档中心 · 清晰、可靠、持续维护