好的,遵照您的要求,我将对您提供的 Markdown 文本进行排版优化,不修改任何文字内容,仅通过调整缩进和间距,使其结构更清晰,阅读体验更佳。
引言
逻辑卷管理(LVM,Logical Volume Manager)是 Linux 环境下实现灵活存储管理的关键技术。它通过抽象层简化了磁盘空间的分配、调整和管理。随着数据存储需求的增长,对现有 LVM 逻辑卷(LV)进行扩容是常见的运维任务。
本文旨在提供一份实战指南,针对用户可能遇到的具体场景,指导如何在 Ubuntu 系统中安全有效地扩展 LVM 逻辑卷。文章将侧重于通过增加物理存储来增加 LVM 容量,并最终扩展逻辑卷和文件系统。
核心概念回顾:PV, VG, LV
在开始之前,简要回顾 LVM 的基本组成部分:
- 物理卷(PV,Physical Volume):经过 LVM 初始化处理的磁盘或分区,是 LVM 的最底层存储单元。
- 卷组(VG,Volume Group):由一个或多个 PV 组成的存储池,逻辑卷从卷组中分配空间。
- 逻辑卷(LV,Logical Volume):从卷组中分割出来的虚拟磁盘,可格式化文件系统并挂载使用。
对逻辑卷进行扩容,本质上是通过增加其所在卷组的可用空间,然后将这些空间分配给逻辑卷。
Ubuntu 系统 LVM 磁盘管理分场景指南
逻辑卷管理(LVM)为 Linux 提供了强大的磁盘管理能力。本文将根据用户可能遇到的不同实际场景,提供在 Ubuntu 系统中设置、扩展和管理 LVM 逻辑卷的详细操作指南,帮助用户快速找到并执行对应任务。
本文将涵盖以下三个常见场景:
- 全新服务器场景:在一个新磁盘上从零开始设置 LVM,并创建逻辑卷供系统使用。
- 添加新磁盘扩容场景:系统已使用 LVM,需要将一个新的、未使用的磁盘或其上的分区添加到现有 LVM 卷组中,并用这部分空间扩展逻辑卷。
- 扩展现有磁盘扩容场景:系统已使用 LVM 且逻辑卷所在的物理磁盘(或虚拟磁盘)在硬件或虚拟化平台层面扩容后,需要让 LVM 识别并利用新增的空间来扩展逻辑卷。
重要提示:在进行任何磁盘操作前,务必备份重要数据!
场景一:全新服务器上设置磁盘为 LVM
场景描述
拥有一台全新服务器或一块新磁盘,希望在该磁盘上配置 LVM,创建卷组和逻辑卷,用于存储数据。
操作步骤
-
识别新磁盘
使用lsblk
命令查看系统中识别到的块设备,找到需要用于 LVM 的新磁盘设备名(例如/dev/sdb
):lsblk
-
在新磁盘上创建 LVM 分区(推荐)
使用parted
工具进行分区操作(以/dev/sdb
为例):sudo parted /dev/sdb
在
parted
交互模式下执行以下操作:(parted) mklabel gpt # 创建 GPT 分区表(大于 2TB 的磁盘推荐使用 GPT),假设这是一个新硬盘,需要输入 mklabel gpt ,输入后磁盘分割表类型将变为gpt。假设之前设置过,此步骤可跳过 (parted) mkpart primary 0% 100% # 创建主分区,占用整个磁盘空间 (parted) set 1 lvm on # 将分区 1 设置为 LVM 类型 (parted) print # 确认分区信息 (parted) quit # 退出
关于
mkpart primary 0% 100%
的说明:使用百分比
0% 100%
是创建覆盖整个磁盘(或指定比例)分区的一种便捷且推荐的方法。系统会自动计算并设置最佳的起始和结束扇区,确保存储性能(通常通过 1MiB 对齐实现,即从第 2048 个扇区开始)并为 GPT 备份表在磁盘末尾保留必要的空间。手动指定精确的起始/结束位置(例如
mkpart primary 1MiB -1s
或mkpart primary 1049kB 2199GB
)也是可以的,但如果设置的起始位置未正确对齐(例如未使用 1MiB 或其倍数),可能会收到性能警告,如Warning: The resulting partition is not properly aligned for best performance.
。同样,如果结束位置设置得过于靠后,覆盖了 GPT 备份表,可能导致错误或潜在的数据风险。使用0% 100%
可以有效避免这些复杂性和潜在问题。注意:使用百分比时,它是相对于整个硬盘的总大小计算的,而不是剩余空间。例如,若要将磁盘平分为两个分区,第一个分区应设置为
0% 50%
,第二个分区则应设置为50% 100%
。更新内核分区表:
sudo partprobe /dev/sdb
再次使用
lsblk
确认新分区(如/dev/sdb1
)已显示。 -
初始化物理卷(PV)
将新分区/dev/sdb1
初始化为 PV:sudo pvcreate /dev/sdb1
-
创建卷组(VG)
使用刚创建的 PV/dev/sdb1
创建名为vg_data
的卷组:sudo vgcreate vg_data /dev/sdb1
-
创建逻辑卷(LV)
- 选项A:使用卷组所有可用空间
在卷组vg_data
中创建名为lv_data
的逻辑卷,使用所有剩余空间:sudo lvcreate -l +100%FREE -n lv_data vg_data
- 选项B:指定固定大小(例如 4TB)
在卷组vg_data
中创建名为lv_data
的逻辑卷,大小为 4TB:sudo lvcreate -L 4T -n lv_data vg_data
创建成功后,逻辑卷的设备路径通常为
/dev/vg_data/lv_data
或/dev/mapper/vg_data-lv_data
。 - 选项A:使用卷组所有可用空间
-
格式化逻辑卷并挂载
- 格式化为 ext4 文件系统
sudo mkfs.ext4 /dev/vg_data/lv_data
- 或者格式化为 xfs 文件系统
sudo mkfs.xfs /dev/vg_data/lv_data
创建挂载点:
sudo mkdir /data
挂载逻辑卷:
sudo mount /dev/vg_data/lv_data /data
- 格式化为 ext4 文件系统
-
配置自动挂载(可选)
首先,获取逻辑卷的 UUID:sudo blkid /dev/vg_data/lv_data
记录输出的 UUID 值。然后编辑
/etc/fstab
文件:sudo vim /etc/fstab
在文件末尾添加类似下面的一行(请将
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
替换为实际的 UUID,/data
替换为实际挂载点,ext4
替换为实际文件系统类型):UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" /data ext4 defaults 0 0
保存并退出
vim
。
场景二:添加新磁盘扩容现有 LVM 卷组
场景描述
系统已使用 LVM,新增一块物理磁盘或虚拟磁盘,需将其空间添加到现有卷组中,以扩展逻辑卷。
操作步骤
-
识别并准备新磁盘
使用lsblk
找到新磁盘(例如/dev/sdc
)。lsblk
参照场景一的步骤 2,在新磁盘
/dev/sdc
上创建 LVM 类型的分区(例如/dev/sdc1
)。sudo parted /dev/sdc # ... (mklabel gpt, mkpart ..., set 1 lvm on, quit) sudo partprobe /dev/sdc
-
初始化新分区为 PV
将新分区/dev/sdc1
初始化为物理卷:sudo pvcreate /dev/sdc1
-
将 PV 添加到目标卷组
将新的 PV/dev/sdc1
添加到现有的卷组vg_data
(请替换为实际卷组名):sudo vgextend vg_data /dev/sdc1
检查卷组
vg_data
的可用空间是否已增加:sudo vgdisplay vg_data
-
扩展逻辑卷
假设要扩展的逻辑卷是/dev/vg_data/lv_data
(请替换为实际逻辑卷路径)。- 选项A:使用所有新增的可用空间
sudo lvextend -l +100%FREE /dev/vg_data/lv_data
- 选项B:增加指定大小(例如 1TB)
sudo lvextend -L +1T /dev/vg_data/lv_data
- 选项A:使用所有新增的可用空间
-
调整文件系统大小
扩展逻辑卷后,需要相应地扩展其上的文件系统。- 对于 ext4 文件系统
sudo resize2fs /dev/vg_data/lv_data
- 对于 xfs 文件系统
(注意:xfs_growfs
通常作用于挂载点)sudo xfs_growfs /data # /data 是 /dev/vg_data/lv_data 的挂载点
- 对于 ext4 文件系统
-
验证结果
查看文件系统空间是否已扩展:df -h /data # /data 是挂载点
查看逻辑卷大小是否已更新:
sudo lvdisplay /dev/vg_data/lv_data
场景三:扩展现有磁盘的底层存储后扩容 LVM
场景描述
LVM 物理卷(PV)所在的底层存储设备(如虚拟机磁盘、硬件 RAID LUN)在硬件或虚拟化平台层面扩容后,需让 LVM 识别新增空间并扩展逻辑卷。
操作步骤
-
扫描并识别磁盘容量变化
在底层平台完成扩容后,让操作系统识别磁盘大小的变化。可能需要执行以下命令(具体取决于系统和硬件):
尝试使用rescan-scsi-bus.sh
(如果已安装scsitools
):sudo rescan-scsi-bus.sh
或者,手动触发特定设备的扫描(以
/dev/sda
为例):echo 1 | sudo tee /sys/class/block/sda/device/rescan
验证磁盘总大小是否已更新:
lsblk
此时,你应该能看到
/dev/sda
的 SIZE 已经更新为你扩容后的大小。但其下的分区 sda1 和逻辑卷 vg–data-lv_data 仍然是旧的大小。注意: 在虚拟机或云环境中,可能需要在管理平台确认磁盘扩展已完成,有时重启客户机是让系统识别新容量的最简单方法。
-
扩展 PV 所在分区(若 PV 基于分区)
重要: 如果 PV 直接建立在整个磁盘上(例如/dev/sda
),请跳过此步骤。如果 PV 建立在分区上(例如/dev/sda1
),则需要先扩展该分区。
使用parted
扩展分区(以扩展/dev/sda
上的第 1 个分区为例):sudo parted /dev/sda
在
parted
交互模式下:(parted) print # 查看当前分区信息,记下要扩展的分区号(例如 1)。 这里需要注意,lsblk 使用二进制单位(KiB, MiB, GiB),parted 使用十进制单位(KB, MB, GB),因此可能parted中看到的磁盘比lsbk中看到的大 (parted) resizepart 1 # 输入要调整大小的分区号 # parted 会询问新分区的结束位置,输入 100% 表示扩展到磁盘末尾 End? [old_size]? 100% (parted) print # 确认分区大小已更新 (parted) quit
更新内核分区表:
sudo partprobe /dev/sda
-
扩展物理卷(PV)
分区变大了,现在需要让 LVM 管理系统知道这件事(以 PV/dev/sda1
为例):sudo pvresize /dev/sda1
命令成功会返回 Physical volume “/dev/sda1” changed。
-
查找卷组 (VG) 和逻辑卷 (LV) 的确切名称
这是最关键的一步,我们需要知道要给哪个“资源池”(VG)的哪个“容器”(LV)增加空间。4.1. 查找物理卷(PV)所属的卷组(VG)
- 使用
pvdisplay
这个命令可以显示物理卷属于哪个卷组。sudo pvdisplay /dev/sda1
- 示例输出分析:
现在我们知道了卷组名是--- Physical volume --- PV Name /dev/sda1 VG Name vg-data <-- 找到了,卷组(VG)名是 "vg-data"
vg-data
,用lvs
命令列出该卷组下的所有逻辑卷,以确定要扩展哪一个。
4.2. 查找卷组(VG)中的逻辑卷(LV)
-
使用
pvdisplay
sudo lvs vg-data
-
示例输出:
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv_data vg-data -wi-ao---- 50.00g
从上面的输出可以清楚地看到,
vg-data
这个卷组里有一个名为lv_data
的逻辑卷。我们要扩展的就是它。它的完整设备路径是/dev/vg-data/lv_data
。当然,使用
lsblk
也可以看到vg--data-lv_data
,它对应到 LVM 的路径就是 /dev/vg-data/lv_data。
- 使用
-
扩展逻辑卷 (LV) 和文件系统 (合并为一步)
现在,我们将卷组中的所有空闲空间分配给lv_data
逻辑卷,并同时调整其上的文件系统大小。lvextend
的-r
参数可以帮我们一气呵成。# 使用 -l +100%FREE 将所有可用空间分配给逻辑卷 # 使用 -r 选项,在扩展逻辑卷后自动运行 resize2fs (适用于ext4) 或 xfs_growfs (适用于xfs) sudo lvextend -r -l +100%FREE /dev/vg-data/lv_data
命令执行后,你会看到类似
Size of logical volume ... changed...
和fsck
、resize2fs
的输出信息。 -
最终验证
检查根目录的文件系统大小,确认扩容是否成功。df -h /data
你应该能看到
/data
挂载点的Size
列已经显著增加。你也可以再次运行lsblk
,会看到vg--data-lv_data
的大小也已更新。
重要注意事项
- 设备名确认:操作前务必通过
lsblk
,pvs
,vgs
,lvs
,pvdisplay
等命令仔细确认磁盘、分区、PV、VG、LV 的名称和路径,避免操作错误对象。 - 数据备份:任何磁盘或文件系统操作都存在风险,强烈建议在执行任何更改前完整备份所有重要数据。
- 文件系统检查:在调整分区、PV 或文件系统大小之前,建议对文件系统进行检查。最好在卸载文件系统后执行
fsck
。如果必须在线检查(如 ext4),请谨慎使用-f
选项。# 示例(最好在卸载后执行) sudo umount /data sudo fsck -f /dev/vg_data/lv_data # 替换为实际 LV 路径 sudo mount /data # 检查后重新挂载
- 在线扩容支持:大多数现代文件系统(如 ext4、xfs)支持在线(挂载状态下)扩容,无需卸载。请确保操作前文件系统状态健康。
总结
本文覆盖了 LVM 逻辑卷扩容的核心场景:新增磁盘扩容、底层存储扩容,以及全新 LVM 环境的搭建。通过分场景的操作指南和清晰的命令示例,用户可以根据自己的具体情况,安全、高效地完成 Ubuntu 系统下的 LVM 存储扩展。LVM 提供了极大的灵活性,但操作时务必仔细核对、谨慎执行,并在生产环境操作前进行充分测试。