第二章:给LVM分区扩容企业案例(加一块硬盘,在线扩容根目录)

发布时间:2024年01月04日

一、MBR(Master Boot Record)分区说明?

在传统的MBR(Master Boot Record)分区表中,一个硬盘最多可以有四个主分区(Primary Partitions)。如果需要更多分区,则必须将其中一个主分区设置为扩展分区(Extended Partition),在这个扩展分区内可以创建多个逻辑分区(Logical Partitions)。

具体来说:

  • 最多有4个主分区,或者有3个主分区加1个扩展分区。
  • 在一个扩展分区内可以有多个逻辑分区,理论上的数量取决于操作系统的限制以及磁盘大小,但通常由于MBR分区表设计的限制,在一个扩展分区内可包含的逻辑分区数量大约为64个。
  • 另一方面,在GPT(GUID Partition Table)分区表中,没有主分区和扩展分区的概念,它支持多达128个分区,甚至更多,这取决于操作系统和具体的实现。GPT是现代硬盘推荐的分区表方式,克服了MBR分区表的许多限制,同时支持的磁盘大小远大于MBR分区表。

在MBR(Master Boot Record)分区表中,将一个主分区设置为扩展分区,并在其中创建多个逻辑分区,可以通过分区工具如fdisk或者parted来实现。以下是使用fdisk进行这些操作的通用步骤:

  1. 打开终端:请确保你具备对系统的管理员权限(root权限),因为分区操作通常需要这些权限。
  2. 运行fdisk命令:通过fdisk命令开启分区编辑:
sudo fdisk /dev/sdx                            # 开始对sdx磁盘进行分区操
  1. 删除主分区: 如果磁盘已有四个主分区,则需删除一个以创建扩展分区。使用d命令来删除分区,并根据提示选择要删除的分区号。
  2. 创建扩展分区:使用n来创建一个新分区,选择e创建扩展分区。按照提示操作,指定分区的起始和终止位置。
  3. 创建逻辑分区:在创建了扩展分区后,你仍然可以使用n创建新的分区,在有扩展分区的情况下,这将会创建逻辑分区。按照提示操作,指定每个逻辑分区的大小。
  4. 保存并退出:使用w命令来写入更改并退出fdisk。如果你正在操作系统使用的分区,分区更改可能需要重启才能生效。

以下是这些步骤的示例:

sudo fdisk /dev/sdx   # 开始对sdx磁盘进行分区操作
> d                                  # 删除一个现有的主分区(按照提示选择分区号)
> n                                  # 创建新分区
> e                                  # 选择创建扩展分区
> (选择分区号)                       # 选择扩展分区的号码,通常是不占用的最小可用数字
> (default)                          # 选择分区的起点,默认回车即可
> (指定终点或者大小)                 # 根据你磁盘的大小来决定扩展分区的范围
> n                                  # 创建新的逻辑分区
> (选择分区号)                       # 分区号将自动为新的逻辑分区分配
> (default)                          # 选择起点
> +大小G                             # 指定逻辑分区大小,例如 +5G 为5GB
> w                                  # 写入分区表并退出fdisk

使用fdisk操作分区时要格外小心,因为错误的操作可能会导致数据丢失。在进行任何操作之前,务必备份重要数据。对于那些支持图形界面的系统,还可以使用图形化工具如gparted等执行分区操作,这更直观且可能更容易操作。务必记住,在某些场景下,如正在运行的系统驱动器或者需要特殊处理的硬件,可能需要特殊的步骤或须在单独的维护环境(如使用可启动的维护盘)中进行分区更改。

二、环境说明?

准备一台硬盘10G的centos7.9操作系统版本,安装操作系统的时候,一定要是Linux LVM,不管是“根目录”还是“数据盘”,都要是LVM,方便日后磁盘扩容。LVM扩容的实验在这里做了很多次了,经验很丰富了,也一直使用于生产环境的机器磁盘扩容。
个人经验硬盘挂的越少越好,如果没有特别去要求,一个硬盘/dev/xvda给根目录,或者两个硬盘/dev/xvda(给根目录)和/dev/xvdb(给数据盘),后面如果空间不足了,对现有的硬盘扩展增大容量,不要新增硬盘,因为如果一个虚拟机挂的硬盘越多后面对虚拟机迁移就会不好,我遇到一个虚拟机挂4个硬盘(/dev/xvda、/dev/xvdb、/dev/xvdc、/dev/xvdd),在线迁移几次都会失败,还没试过关机迁移,因为在跑业务。

1、环境准备💖

  • 准备一台Centos7.9版本系统,一块硬盘10G,已经安装好了,系统类型:Linux LVM,测试机器如下:
    在这里插入图片描述

2、查看磁盘情况是否LVM💖

df命令用于显示文件系统的磁盘空间使用情况。常用选项-T表示以易读的格式显示,-h表示使用人类可读的格式。

[root@localhost ~]# df -Th

lsblk用于列出系统中所有可用的块设备(如硬盘、分区、LVM、RAID、光驱等)。它以树状图的方式显示设备之间的关系,而不显示它们的文件系统详细信息,这使得lsblk在快速查看系统的存储层次结构时非常有用。

[root@localhost ~]# lsblk

在这里插入图片描述

3、 查看磁盘情况💖

  • fdisk 是一个用来查看和操作磁盘分区表的强大工具。当配合 -l 参数使用时,它会列出当前系统中所有磁盘分区的信息。-l 参数的意思是
    “list”(列出),System: 分区类型(如Linux,Linux LVM分区等)。
[root@localhost ~]# fdisk -l

在这里插入图片描述

三、给LVM分区扩容(加一块硬盘,在线扩容跟目录)?

  • 从上面“#环境说明”里可以看到,现在系统是一块硬盘/dev/xvda,共10G,并分成两个分区,xvda1分区挂到/boot目录,xvda2分区则交给了LVM来管理并挂载到根目录/。需求是现在根目录空间不足了,需要扩容根目录,这种增加硬盘的好事是不需要关机,不需要停业务,在线扩容。

1、新增一块硬盘💖

1.1 添加硬盘

  • 先做好快照或者其他方式数据备份,这里使用xcp-ng虚拟化平台的,之前也使用过VMware虚拟化平台(各平台不一样,根据自己只用的平台来操作,反正就是增加一块硬盘),把鼠标放在空白处,鼠标右击:Add,如下图所示:
    在这里插入图片描述

1.2 分配硬盘大小

  • 在Add Virtual Disk的界面,自定义填写Name、磁盘大小为:10G,点击:Add,如下图所示:
    在这里插入图片描述

1.3 增加硬盘之后的大小

  • 可以看到现在有两个硬盘了(/dev/xvda和/dev/xvdb)各10G。
    在这里插入图片描述

2、查看新增加的硬盘💖

可以看到多了一个硬盘xvdb,Disk /dev/xvdb: 10.7 GB,就是刚刚增加的。

[root@localhost ~]# fdisk -l

在这里插入图片描述

3、查看系统中所有的块设备信息,包括磁盘和分区💖

lsblk(列出块设备的列表)则是一个显示所有可用块设备及其分区信息的命令。它会列出设备名称、挂载点、分区大小等信息。

[root@localhost ~]# lsblk 

在这里插入图片描述

上面的步骤是添加了一块硬盘/dev/xvdb,接下来是进行扩容,这里有两个方法进行扩容。
方法一:无需创建新分区扩容
方法二:创建新的分区/dev/xvdb1扩容

4、方法一:无需创建新分区扩容💖

4.1、创建物理卷(pv)

  • 在没有创建物理卷(pv)之前查看只有一个( PV Name:/dev/xvda2),创建之后多了一个(PV Name :
    /dev/xvdb)
[root@localhost ~]# pvdisplay
[root@localhost ~]# pvcreate /dev/xvdb
[root@localhost ~]# pvdisplay

在这里插入图片描述

4.2、扩展卷组(VG)

[root@localhost ~]# lvdisplay | grep "VG Name" | awk '{print $3}'                           #查看物理卷(PV)名称
[root@localhost ~]# lvdisplay | grep "LV Path" | awk '{print $3}'                           #查看物理卷(LV)名称
[root@localhost ~]# vgextend centos /dev/xvdb                                               #扩展VG

在这里插入图片描述

4.3、扩展逻辑卷(LV)

lvextend 命令是在使用逻辑卷管理器(LVM)的 Linux 系统中用于增加逻辑卷大小的命令。你写的命令是专门用来将卷组中所有剩余的空闲空间分配给逻辑卷的命令。
命令解释如下:
lvextend:用于扩展逻辑卷大小的命令。
-l +100%FREE:这里的-l 选项指定要添加到逻辑卷的逻辑扩展(extents)的数量。使用 +100%FREE 表示你要将逻辑卷增加卷组中所有剩余的空闲扩展空间。
/dev/mapper/VGDATA-vol01:这是你要扩展的逻辑卷的路径。它的格式是 /dev/mapper/卷组名称-逻辑卷名称。

[root@localhost ~]# lvextend -l +100%FREE /dev/centos/root

在这里插入图片描述

4.4、拉伸文件系统:xfs_growfs 或者 resize2fs

  • xfs_growfs和resize2fs命令用于增加文件系统的大小。它们对应于不同类型的文件系统:xfs_growfs用于XFS文件系统,而resize2fs用于ext2、ext3、或ext4文件系统。这些命令通常在文件系统未占满给定的分区空间,而分区空间已经扩大后使用,以便文件系统能够使用所有可用的分区空间。
[root@localhost ~]# df -Th | grep mapper | awk '{print $2}'                     #查看系统类型
[root@localhost ~]# xfs_growfs /dev/centos/root                                 #XFS文件系统
[root@localhost ~]# resize2fs /dev/centos/root                                  #resize2fs用于ext2, ext3, 或ext4文件系统

在这里插入图片描述

4.5、验证结果,扩容完成

  • 我们现在再看下根目录大小,之前是9.5G,现在扩容到19.5G了。 扩容完成!
[root@localhost ~]# df -lh
[root@localhost ~]# lsblk

在这里插入图片描述

5、方法二:创建新的分区/dev/xvdb1扩容💖

5.1、给xvdb创建新分区

  • 注意要选择分区类型为8e(Linux LVM),执行命令:
    fdisk是一个用来管理磁盘分区的传统命令行工具。当你使用fdisk命令并附加-l参数以及一个磁盘设备名(比如/dev/xvdb),这个命令将会列出指定的磁盘设备上所有分区的信息。
[root@localhost ~]# fdisk /dev/xvdb

依次输入:n、p、1、p、t、L、8e、p、w
n:新建分区 (Add a new partition)
p:新建主分区 (Create a primary partition)
1:指定分区号为 1 (Set the partition number to 1)
输入两次 p 时,初次没有给出其含义,它通常不是用作输入命令。 如果是错误输入,第二次的 p 将展示当前分区表 (Print the partition table)
t:改变分区类型 (Change the partition’s system id)
L:列出所有已知的分区类型 (List known partition types)
8e:将分区类型设置为 Linux LVM (Set the partition type to Linux LVM)
再次:展示当前分区表,展示进行的修改 (Print the partition table to show the changes made)
w:将更改保存到磁盘然后退出 fdisk (Write the changes and exit fdisk)
在这里插入图片描述
这里需要注意一下,在依次输入 n、p、1之后,再输入p查看了下分区格式,显示出的/dev/xvdb1那一栏是83,这是默认的分区格式,但我们需要将这个分区后面交给lvm来管理,就需要修改分区格式,输入 t 、L、8e,修改完分区格式之后,我们再输入p看一下,/dev/xvdb1从83变成8e(Linux LVM)了,输入w保存。
在这里插入图片描述

5.2、分区完成,查看分区情况

  • 我们再执行fdisk -l 和 lsblk命令看看,创建好了xvdb1分区,系统类型:Linux LVM
[root@localhost ~]# fdisk -l
[root@localhost ~]# lsblk

在这里插入图片描述

5.3、查看卷组状态

  • 其实主要的操作流程就是: 创建物理卷 -> 将物理卷加入到卷组中 -> 扩展逻辑卷 –>刷新文件系统。(这里的已在安装操作系统时候创建了,不需要再创建卷组) 。
  • vgdisplay命令用于显示有关卷组(LVM即逻辑卷管理)的信息。它提供了卷组的详细属性,包括它的大小、剩余空间、物理卷数、逻辑卷数等。vgdisplay是LVM管理工具的一部分,通常与pvdisplay(显示物理卷信息)和 lvdisplay(显示逻辑卷信息)一起使用。
[root@localhost ~]# vgdisplay

在这里插入图片描述

5.4、创建物理卷(PV)和扩展卷组(VG)

[root@localhost ~]# pvcreate /dev/xvdb1                                    #创建物理卷
[root@localhost ~]# vgscan                                                 #可以查到本机物理卷名称为“centos”,
[root@localhost ~]# vgextend centos /dev/xvdb1                             #使用新增物理卷扩展到centos,vgextend 卷组名 物理卷路径
[root@localhost ~]# vgdisplay                                              #查看vg

在这里插入图片描述

5.5、扩展逻辑卷(LV)

[root@localhost ~]# lvextend -r -L +9.99G /dev/centos/root           #把新增加10G硬盘开展到逻辑卷,这里是填9.99G,因为填10G可能会报错。
[root@localhost ~]# Lvdisplay                                        #查看逻辑卷状态
[root@localhost ~]# df -lh                                           #查看扩容后的磁盘大小

在这里插入图片描述
lvextend 命令是在使用逻辑卷管理器(LVM)的 Linux 系统中用于增加逻辑卷大小的命令。你写的命令是专门用来将卷组中所有剩余的空闲空间分配给逻辑卷的命令。
命令解释如下:
lvextend:用于扩展逻辑卷大小的命令。
-l +100%FREE:这里的-l 选项指定要添加到逻辑卷的逻辑扩展(extents)的数量。使用 +100%FREE 表示你要将逻辑卷增加卷组中所有剩余的空闲扩展空间。
/dev/mapper/VGDATA-vol01:这是你要扩展的逻辑卷的路径。它的格式是 /dev/mapper/卷组名称-逻辑卷名称。

  • 这一步(lvextend -r -L +9.99G /dev/centos/root)也可以换成如下命令执行。
[root@localhost ~]# lvextend -l +100%FREE /dev/centos/root

在这里插入图片描述

5.6、拉伸文件系统:xfs_growfs 或者 resize2fs

  • xfs_growfs和resize2fs命令用于增加文件系统的大小。它们对应于不同类型的文件系统:xfs_growfs用于XFS文件系统,而resize2fs用于ext2、ext3、或ext4文件系统。这些命令通常在文件系统未占满给定的分区空间,而分区空间已经扩大后使用,以便文件系统能够使用所有可用的分区空间。
[root@localhost ~]# df -Th | grep mapper | awk '{print $2}'                     #查看系统类型
[root@localhost ~]# xfs_growfs /dev/centos/root                                 #XFS文件系统
[root@localhost ~]# resize2fs /dev/centos/root                                  #resize2fs用于ext2, ext3, 或ext4文件系统

在这里插入图片描述

5.7、验证结果,扩容完成

  • 我们现在再看下根目录大小,之前是9.5G,现在扩容到19.5G了。 扩容完成!
[root@localhost ~]# df -lh
[root@localhost ~]# lsblk

在这里插入图片描述

四、编写shell脚本自动扩容?

我思来想去,这种操作也比较频繁,加上人工操作也可能会出错,后来我就把上面的步骤写成了一个脚本,执行脚本可自动扩容,无论你扩容多少次多少G,这个脚本都适用,这个是我日常工作使用的脚本,已经验证过了。
用于自动检测、初始化新磁盘,并将其添加到现有的逻辑卷管理(LVM)配置中,然后根据磁盘的文件系统类型进行逻辑卷的扩展。

1、自动扩容shell脚本💖

[root@localhost ~]# cat lvm_create_v2.sh
#!/bin/bash
#auther chentongsan,update time 2023-12-25
#Description: 适用于系统根分区扩容,可用于多次扩容,第一次、第二次、第三次……..适合用于centos 6、centos 7、centos 8版本
#在不重启机器的情况下,扫描总线,识别新增添加的磁盘,下面三行使用的平台是VMware的虚拟化平台的虚拟机。
#echo "- - -" > /sys/class/scsi_host/host0/scan
#echo "- - -" > /sys/class/scsi_host/host1/scan
#echo "- - -" > /sys/class/scsi_host/host2/scan
#1073741824是数字230次方,它等于1 GiB(Gibibyte)
DIVISOR=1073741824
#检测新加磁盘的盘符、扩展VG及磁盘大小
DISK_NAME=`fdisk -l | grep "Disk /dev/xv" | awk -F '[ :]+' '{print $2}'`
for disk in ${DISK_NAME[*]};do
    df_disk=`df -h | grep $disk | wc -l`
    if [[ $df_disk -eq 0 ]];then
        pvs_disk=`pvs | grep $disk | wc -l`
        if [[ $pvs_disk -eq 0 ]];then
            new_disk_size=`fdisk -l | grep "$disk" | awk -F '[ ,:]+' '{print $5}'`
            new_disk_size_G=$(($new_disk_size/$DIVISOR))
            echo -e "\033[32m检测到新磁盘:$disk        容量为:${new_disk_size_G}G\033[0m"
            echo -e "\033[32m开始创建lvm逻辑卷\033[0m"
            #创建PV、扩展VG
            pvcreate $disk
            VG_NAME=`lvdisplay | grep "VG Name" | awk '{print $3}'`
            LV_PATH=`lvdisplay | grep "LV Path" | awk '{print $3}'`
            vgextend $VG_NAME $disk
            lvresize -l +100%FREE $LV_PATH
            Filesystem_Type=`df -Th | grep mapper | awk '{print $2}'`
            if [ "$Filesystem_Type" == “xfs” ];then
                xfs_growfs $LV_PATH
            else
                resize2fs $LV_PATH
            fi
            echo "$LV_PATH   /   ext4 defaults 0 0" >> /etc/fstab
        fi
    fi
done
echo -e "\033[32m根分区扩容完成,请检查确认!\033[0m"
[root@localhost ~]#

注意:这个脚本只能适用于新增加一块磁盘。

2、实操验证脚本的实用性💖

2.1、查看资源情况

  • 如下再次验证脚本的实用性,续上面的步骤,现在是2快硬盘,要使用这个脚本再次扩容,扩容之前的查看磁盘情况。
    在这里插入图片描述
  • 这个是我做验证之前查看磁盘使用情况,是给使用者能够清楚了解它的原理,如果了解原理了,就直接执行脚本使用了,没必要查看这些了。
    在这里插入图片描述
[root@localhost ~]# df -lh
[root@localhost ~]# fdisk -l
  • 查看系统中所有的块设备信息,包括磁盘和分区
[root@localhost ~]# lsblk

在这里插入图片描述

2.2、新增加一块硬盘

  • 现在我们来增加一块磁盘,现在共3块硬盘,把/dev/xvdd这个磁盘也扩容到根目录下的空间,之前是20G,加上这10G就等于30G了。
    在这里插入图片描述

2.3、验证执行扩容脚本的结果

  • 增加好磁盘,直接执行扩容的脚本,也就是上面的脚本,执行的结果如下:
[root@localhost ~]# sh lvm_create_v2.sh
[root@localhost ~]# df -lh
[root@localhost ~]# lsblk

在这里插入图片描述

  • 之后我有不断添加4快硬盘(xvdb、xvdd、xvde、xvdf)进行测试,脚本都没问题。
    在这里插入图片描述
    在这里插入图片描述
    执行好脚本之后根目录就会扩容到30G的空间,以此类推,这个脚本适用于新增加一块硬盘。

注意:执行任何管理级操作时,用户都应当对可能的结果和风险有充分的认识,首先做好数据备份,在虚拟化平台在操作之前先做好快照或者其他备数据份(这里也需要注意一下:先把磁盘扩容好了,再启动服务,以免出错了恢复快照数据不一致)。如果您没有足够的经验来处理可能出现的复杂情况,最好在开始之前咨询有经验的系统管理员,或者先做下实验。此外,在维护关键系统时,最好安排在非工作时间进行,这样如果出现任何问题,对日常运营的影响会降到最低。

历史文章:
1、LVM究竟有多强大?原理和企业实战案例全解析

文章来源:https://blog.csdn.net/chentongsan/article/details/135299888
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。