Ubuntu 系统 LVM 逻辑卷初始化&扩容实战指南

好的,遵照您的要求,我将对您提供的 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 逻辑卷的详细操作指南,帮助用户快速找到并执行对应任务。

本文将涵盖以下三个常见场景:

  1. 全新服务器场景:在一个新磁盘上从零开始设置 LVM,并创建逻辑卷供系统使用。
  2. 添加新磁盘扩容场景:系统已使用 LVM,需要将一个新的、未使用的磁盘或其上的分区添加到现有 LVM 卷组中,并用这部分空间扩展逻辑卷。
  3. 扩展现有磁盘扩容场景:系统已使用 LVM 且逻辑卷所在的物理磁盘(或虚拟磁盘)在硬件或虚拟化平台层面扩容后,需要让 LVM 识别并利用新增的空间来扩展逻辑卷。

重要提示:在进行任何磁盘操作前,务必备份重要数据!

场景一:全新服务器上设置磁盘为 LVM

场景描述

拥有一台全新服务器或一块新磁盘,希望在该磁盘上配置 LVM,创建卷组和逻辑卷,用于存储数据。

操作步骤
  1. 识别新磁盘
    使用 lsblk 命令查看系统中识别到的块设备,找到需要用于 LVM 的新磁盘设备名(例如 /dev/sdb):

    lsblk
    
  2. 在新磁盘上创建 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 -1smkpart 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)已显示。

  3. 初始化物理卷(PV)
    将新分区 /dev/sdb1 初始化为 PV:

    sudo pvcreate /dev/sdb1
    
  4. 创建卷组(VG)
    使用刚创建的 PV /dev/sdb1 创建名为 vg_data 的卷组:

    sudo vgcreate vg_data /dev/sdb1
    
  5. 创建逻辑卷(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

  6. 格式化逻辑卷并挂载

    • 格式化为 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
    
  7. 配置自动挂载(可选)
    首先,获取逻辑卷的 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,新增一块物理磁盘或虚拟磁盘,需将其空间添加到现有卷组中,以扩展逻辑卷。

操作步骤
  1. 识别并准备新磁盘
    使用 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
    
  2. 初始化新分区为 PV
    将新分区 /dev/sdc1 初始化为物理卷:

    sudo pvcreate /dev/sdc1
    
  3. 将 PV 添加到目标卷组
    将新的 PV /dev/sdc1 添加到现有的卷组 vg_data(请替换为实际卷组名):

    sudo vgextend vg_data /dev/sdc1
    

    检查卷组 vg_data 的可用空间是否已增加:

    sudo vgdisplay vg_data
    
  4. 扩展逻辑卷
    假设要扩展的逻辑卷是 /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
      
  5. 调整文件系统大小
    扩展逻辑卷后,需要相应地扩展其上的文件系统。

    • 对于 ext4 文件系统
      sudo resize2fs /dev/vg_data/lv_data
      
    • 对于 xfs 文件系统
      (注意:xfs_growfs 通常作用于挂载点)
      sudo xfs_growfs /data  # /data 是 /dev/vg_data/lv_data 的挂载点
      
  6. 验证结果
    查看文件系统空间是否已扩展:

    df -h /data # /data 是挂载点
    

    查看逻辑卷大小是否已更新:

    sudo lvdisplay /dev/vg_data/lv_data
    

场景三:扩展现有磁盘的底层存储后扩容 LVM

场景描述

LVM 物理卷(PV)所在的底层存储设备(如虚拟机磁盘、硬件 RAID LUN)在硬件或虚拟化平台层面扩容后,需让 LVM 识别新增空间并扩展逻辑卷。

操作步骤
  1. 扫描并识别磁盘容量变化
    在底层平台完成扩容后,让操作系统识别磁盘大小的变化。可能需要执行以下命令(具体取决于系统和硬件):
    尝试使用 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 仍然是旧的大小。

    注意: 在虚拟机或云环境中,可能需要在管理平台确认磁盘扩展已完成,有时重启客户机是让系统识别新容量的最简单方法。

  2. 扩展 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
    
  3. 扩展物理卷(PV)
    分区变大了,现在需要让 LVM 管理系统知道这件事(以 PV /dev/sda1 为例):

    sudo pvresize /dev/sda1
    

    命令成功会返回 Physical volume “/dev/sda1” changed。

  4. 查找卷组 (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。

  5. 扩展逻辑卷 (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...fsckresize2fs 的输出信息。

  6. 最终验证
    检查根目录的文件系统大小,确认扩容是否成功。

    df -h /data
    

    你应该能看到 /data 挂载点的 Size 列已经显著增加。你也可以再次运行 lsblk,会看到 vg--data-lv_data 的大小也已更新。

重要注意事项

  1. 设备名确认:操作前务必通过 lsblk, pvs, vgs, lvs, pvdisplay 等命令仔细确认磁盘、分区、PV、VG、LV 的名称和路径,避免操作错误对象。
  2. 数据备份:任何磁盘或文件系统操作都存在风险,强烈建议在执行任何更改前完整备份所有重要数据。
  3. 文件系统检查:在调整分区、PV 或文件系统大小之前,建议对文件系统进行检查。最好在卸载文件系统后执行 fsck。如果必须在线检查(如 ext4),请谨慎使用 -f 选项。
    # 示例(最好在卸载后执行)
    sudo umount /data
    sudo fsck -f /dev/vg_data/lv_data # 替换为实际 LV 路径
    sudo mount /data # 检查后重新挂载
    
  4. 在线扩容支持:大多数现代文件系统(如 ext4、xfs)支持在线(挂载状态下)扩容,无需卸载。请确保操作前文件系统状态健康。

总结

本文覆盖了 LVM 逻辑卷扩容的核心场景:新增磁盘扩容、底层存储扩容,以及全新 LVM 环境的搭建。通过分场景的操作指南和清晰的命令示例,用户可以根据自己的具体情况,安全、高效地完成 Ubuntu 系统下的 LVM 存储扩展。LVM 提供了极大的灵活性,但操作时务必仔细核对、谨慎执行,并在生产环境操作前进行充分测试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值