vps.town 磁盘扩容新手指南

📖 本文目录
温馨提示

本文由用户 biebiele 撰写,并已加入 VPS.Town 优秀原创文章激励计划,本站享有完整版权,未经允许不得转载。

本文已通过 VPS.Town 社区文章投稿及奖励规则 (试行稿) 审核,并获得 200 元余额 奖励。

操作风险提示
  1. 数据安全:操作前必须进行完整的数据备份,有准备应急恢复方案。
  2. 系统状态:确保系统处于稳定状态,在系统低负载情况下进行操作。
  3. 操作过程严格按照步骤执行,验证每个步骤完成情况。
  4. 后续维护定期检查磁盘状态,监控文件系统使用情况。
使用须知

请务必先完整阅读后在操作,并确保你具有以下知识:

  • 了解磁盘分区和 LVM 原理
  • 明白数据是无价的
  • 熟悉基本的 Linux 命令操作
  • 了解文件系统的基本概念

系统要求:

  • Linux 系统(推荐 Ubuntu 20.04 或更高版本)
  • 足够的磁盘空间用于备份
  • root 权限或 sudo 权限

术语说明:

  • LVM (Logical Volume Manager):逻辑卷管理器,用于管理磁盘存储的高级工具
  • PV (Physical Volume):物理卷,LVM 的基本存储单元
  • VG (Volume Group):卷组,由多个物理卷组成的存储池
  • LV (Logical Volume):逻辑卷,从卷组中划分出的逻辑存储空间

文档结构说明: 本文分为四个主要部分:

  1. 准备工作:介绍必要的系统检查和工具安装
  2. 原磁盘本身扩容:适用于已有分区需要扩容的情况
  3. 新增磁盘扩容:适用于需要合并多个磁盘的情况
  4. 注意事项:总结操作过程中的重要提示

1. 准备工作

# 查看系统中是否安装了 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 找到新增的未分区的磁盘。

提示
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 取消原磁盘挂载

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

fstab情况

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

2.2 转为 GPT 格式

⚠️ 警告

高危操作,请小心执行

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 重新挂载

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

fstab情况2

2.5 检查磁盘挂载情况

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 将旧硬盘内容传输至新硬盘

# 建议先验证源分区和目标分区的大小,需求 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 卷组

⚠️ 警告

高危操作,请小心执行

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 卷组

# 开始数据迁移,**等待执行完成**
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 卷组的文件系统

文件系统扩容注意事项
  • 确保文件系统支持在线扩容
  • 扩容过程中不要中断操作
  • 建议在扩容后检查文件系统完整性
# 检查当前文件系统类型
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 状态
    • 确保有足够的空间
    • 查看系统日志