给LVM添加磁盘扩容

1. 概述

Linux内核的逻辑卷管理器(Logical Volume Manager)让我们对磁盘分区进行抽象。我们不需要把存储卷分配给写入物理磁盘分区表的分区,而是根据需要灵活地分配空间。而且,我们不是一次使用一个磁盘,而是使用一个存储池。这意味着,如果我们的/usr或/var卷的空间用完了,我们可以扩大或缩小。

CentOS系统安装的时候默认都提供了LVM管理磁盘的方式,当我们需要比原来计划的更多的存储空间时,就需要用到LVM相关的命令了。

在本教程中,我们将向我们的存储池(又称卷组)添加一个新的物理磁盘,并使用添加的存储空间来增加我们现有的文件系统。

2. 情况是这样的

比方说,我们一直在使用CentOS 7服务器。默认情况下,我们的服务器的存储空间已经被划分为一个传统的35.5GB的/分区,系统目前有一个可以清除数据的磁盘,当前挂载在/u01。我们可以用lsblk看一下:

[root@glpt1 ~]# lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT
NAME                   SIZE TYPE FSTYPE      MOUNTPOINT
sda                     40G disk             
├─sda1                 500M part xfs         /boot
└─sda2                39.5G part LVM2_member 
  ├─centos_glpt1-root 35.5G lvm  xfs         /
  └─centos_glpt1-swap    4G lvm  swap        [SWAP]
sdb                    400G disk             
└─sdb1                 400G part xfs         /u01
sdc                      1T disk LVM2_member 
└─datavg-datalv       1024G lvm  xfs         /u02
sr0                   1024M rom     

从这个输出中,我们看到/dev/sdb1有400G,如果一个磁盘只有一部分空间在LVM被分配了,也能从lsblk命令看得出来,结果会像sda磁盘那样子,未分配的空间可以继续分配到其他的挂载点。

让我们看看我们的文件系统用传统的工具(如df)看起来是什么样子。

[root@glpt1 ~]# df -h
Filesystem                     Size  Used Avail Use% Mounted on
/dev/mapper/centos_glpt1-root   36G   33G  3.0G  92% /
devtmpfs                        12G     0   12G   0% /dev
tmpfs                           12G  148K   12G   1% /dev/shm
tmpfs                           12G  226M   12G   2% /run
tmpfs                           12G     0   12G   0% /sys/fs/cgroup
/dev/sdb1                      400G  371G   29G  93% /u01
/dev/sda1                      497M  127M  370M  26% /boot
tmpfs                          2.4G     0  2.4G   0% /run/user/0
tmpfs                          2.4G   20K  2.4G   1% /run/user/1000
/dev/mapper/datavg-datalv      1.0T  388G  637G  38% /u02

对于Linux来说,这个有长名字的逻辑卷看起来就像一个块设备或分区。现在我们准备使用/dev/sdb1来扩容/dev/mapper/centos_glpt1-root。

3. 物理卷、卷组和逻辑卷

在过去简单分区的情况下,我们不得不把所有东西都复制到一个更大的分区,以增加更多的存储空间。我们很可能不得不让我们的服务器在磁盘扩容阶段处于离线状态。

当我们使用LVM时,我们可以在任何物理驱动器之间切换我们的逻辑卷。我们可以安全地调整任何逻辑卷的大小,然后调整其文件系统。

Linux的LVM系统包含三个层次:物理卷、卷组和逻辑卷。lvm命令让我们把系统作为一个整体来处理。

但是,这些层次中的每一个都可以通过一系列的命令来创建、检查、修改,等等。

扫描二维码关注公众号,回复: 15265299 查看本文章
  • pv命令操作物理卷

  • vg命令操作卷组

  • lv命令操作逻辑卷

3.1. 检查我们的逻辑卷

让我们用LVM工具检查一下我们的存储。使用pvdisplay,我们可以看到旧式的硬盘分区,它已经被标记为一个LVM物理卷。

[root@glpt1 /]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               centos_glpt1
  PV Size               39.51 GiB / not usable 3.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              10114
  Free PE               10
  Allocated PE          10104
  PV UUID               v6hdW9-xzbJ-Ayrk-k1VT-c4ka-0ZGF-Z1ZZqF
   
  --- Physical volume ---
  PV Name               /dev/sdc
  VG Name               datavg
  PV Size               1.00 TiB / not usable 4.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              262143
  Free PE               0
  Allocated PE          262143
  PV UUID               QvGx3c-xc6p-cCEC-L087-W2uM-j655-yVx0OU

我们还注意到它是centos_glpt1卷组的一个成员。PE是物理扩展的意思。Extent是文件系统衡量块设备的一种方式:一个块的单位长度。

lvdisplay 命令可以知道逻辑卷的名字,逻辑卷所使用的 VG。

[root@glpt1 /]# lvdisplay /dev/mapper/centos_glpt1
  --- Logical volume ---
  LV Path                /dev/centos_glpt1/root
  LV Name                root
  VG Name                centos_glpt1
  LV UUID                AvEYjq-6OKT-V7Hb-zVUx-rhnY-QCCn-v7q662
  LV Write Access        read/write
  LV Creation host, time localhost, 2017-10-09 15:29:14 +0800
  LV Status              available
  # open                 1
  LV Size                <35.47 GiB
  Current LE             9080
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0
   
  --- Logical volume ---
  LV Path                /dev/centos_glpt1/swap
  LV Name                swap
  VG Name                centos_glpt1
  LV UUID                X52ge1-fhE0-Uiau-lbtY-Hhfi-cKJu-hEb5CU
  LV Write Access        read/write
  LV Creation host, time localhost, 2017-10-09 15:29:15 +0800
  LV Status              available
  # open                 2
  LV Size                4.00 GiB
  Current LE             1024
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1

3.2. 清除原有磁盘分区信息

对于已经创建分区的磁盘,我们无法创建物理卷。pvcreate命令回报告无法找到对应的磁盘。如果你是一块新的磁盘挂载到服务器,可以忽略本小节的内容直接进入下一个小节。

[root@glpt1 /]# pvcreate /dev/sdb
  Device /dev/sdb not found (or ignored by filtering).

使用fdisk命令删除已有磁盘的分区。d是删除分区,p命令可以确认磁盘信息,最后使用w保存操作,退出fdisk命令。

[root@glpt1 /]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): d
Selected partition 1
Partition 1 is deleted

Command (m for help): p

Disk /dev/sdb: 429.5 GB, 429496729600 bytes, 838860800 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x833e9763

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

再次使用lsblk命令确认磁盘信息

[root@glpt1 /]# lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT
NAME                   SIZE TYPE FSTYPE      MOUNTPOINT
sda                     40G disk             
├─sda1                 500M part xfs         /boot
└─sda2                39.5G part LVM2_member 
  ├─centos_glpt1-root 35.5G lvm  xfs         /
  └─centos_glpt1-swap    4G lvm  swap        [SWAP]
sdb                    400G disk             
sdc                      1T disk LVM2_member 
└─datavg-datalv       1024G lvm  xfs         /u02
sr0                   1024M rom              

3.3. 添加存储

如果增加了一个硬盘驱动器,我们可以使用RAID模式来获得更可靠的扩容。但现在我们使用LVM来对服务器的存储空间执行线性扩容。

3.3.1. pvcreate创建物理卷

首先,我们使用pvcreate命令对新的硬盘创建物理卷,以便与LVM一起使用。

[root@glpt1 /]# pvcreate /dev/sdb
WARNING: dos signature detected on /dev/sdb at offset 510. Wipe it? [y/n]: y
  Wiping dos signature on /dev/sdb.
  Physical volume "/dev/sdb" successfully created.

使用lsblk命令确认磁盘信息,对比3.2节里面的lsblk命令结果,我们发现/dev/sdb已经是LVM成员了。

[root@glpt1 /]# lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT
NAME                   SIZE TYPE FSTYPE      MOUNTPOINT
sda                     40G disk             
├─sda1                 500M part xfs         /boot
└─sda2                39.5G part LVM2_member 
  ├─centos_glpt1-root 35.5G lvm  xfs         /
  └─centos_glpt1-swap    4G lvm  swap        [SWAP]
sdb                    400G disk LVM2_member 
sdc                      1T disk LVM2_member 
└─datavg-datalv       1024G lvm  xfs         /u02
sr0                   1024M rom              

3.3.2. pvdisplay确认物理卷信息

物理卷pvdisplay命令也可以看到新增了/dev/sdb,空间大小400GiB。

[root@glpt1 /]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               centos_glpt1
  PV Size               39.51 GiB / not usable 3.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              10114
  Free PE               10
  Allocated PE          10104
  PV UUID               v6hdW9-xzbJ-Ayrk-k1VT-c4ka-0ZGF-Z1ZZqF
   
  --- Physical volume ---
  PV Name               /dev/sdc
  VG Name               datavg
  PV Size               1.00 TiB / not usable 4.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              262143
  Free PE               0
  Allocated PE          262143
  PV UUID               QvGx3c-xc6p-cCEC-L087-W2uM-j655-yVx0OU
   
  "/dev/sdb" is a new physical volume of "400.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name               
  PV Size               400.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               t61gDu-YXqB-m3fX-a6OO-21pe-m0xR-72HzLP

3.3.3. vgextend物理卷添加至卷组

接下来我们将把我们的物理卷,/dev/sdb,添加到我们的卷组,centos_glpt1。

我们将使用LVM命令vgextend。

[root@glpt1 /]# vgextend centos_glpt1 /dev/sdb
  Volume group "centos_glpt1" successfully extended

3.3.4. vgdisplay确认卷组信息

使用vgdisplay确认卷组的情况,可以看到 Free PE / Size 是400GiB

[root@glpt1 /]# vgdisplay centos_glpt1
  --- Volume group ---
  VG Name               centos_glpt1
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               439.50 GiB
  PE Size               4.00 MiB
  Total PE              112513
  Alloc PE / Size       10104 / <39.47 GiB
  Free  PE / Size       102409 / <400.04 GiB
  VG UUID               8oUA5b-JG2w-M60U-hCcs-EWbi-eKOq-PihB1Y

3.3.5. lvresize对逻辑卷扩容

最后,我们可以调整我们的逻辑卷的大小,centos_glpt1。现在,它有400GiB可用空间。让我们100%使用完可用空间。

我们将用lvresize来完成操作。

[root@glpt1 /]# lvresize --extents +100%FREE --resizefs /dev/mapper/centos_glpt1-root
  Size of logical volume centos_glpt1/root changed from <35.47 GiB (9080 extents) to 435.50 GiB (111489 extents).
  Logical volume centos_glpt1/root successfully resized.
meta-data=/dev/mapper/centos_glpt1-root isize=256    agcount=4, agsize=2324480 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=9297920, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal               bsize=4096   blocks=4540, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 9297920 to 114164736

--resizefs选项会自动扩展你的ext或XFS文件系统以适应其新的空间。我们也可以用特定于文件系统的调整大小的命令作为一个单独的步骤来做,但在lvresize里使用--resizefs参数一次性完成扩容很方便。

让我们使用非LVM工具来检查我们的磁盘空间。

[root@glpt1 /]# df -h
Filesystem                     Size  Used Avail Use% Mounted on
/dev/mapper/centos_glpt1-root  436G   33G  404G   8% /
devtmpfs                        12G     0   12G   0% /dev
tmpfs                           12G  148K   12G   1% /dev/shm
tmpfs                           12G  226M   12G   2% /run
tmpfs                           12G     0   12G   0% /sys/fs/cgroup
/dev/sda1                      497M  127M  370M  26% /boot
tmpfs                          2.4G     0  2.4G   0% /run/user/0
tmpfs                          2.4G   20K  2.4G   1% /run/user/1000
/dev/mapper/datavg-datalv      1.0T  388G  637G  38% /u02

lvresize命令除了使用百分比来扩容空间,我们也可以使用--size来指定一个确定的目标容量空间大小,例如20G,或一个增加数量,如+10G。

# lvresize --size +10G --resizefs /dev/mapper/centos_glpt1-root

4. 关于LVM线性扩容的思考

像这样组合多个磁盘可以称之为线性模式,会增加我们因硬件故障而丢失数据的风险。一般只使用在从存储服务器分配出来的磁盘直接挂载至服务器的情况,因为存储服务器已经对磁盘做了RAID。如果是物理服务器直接挂载物理裸设备,仍然建议使用RAID来保护数据不丢失。

RAID也可以硬件 RAID 卡,或者是软 RAID,例如使用 mdraid 创建一个Linux RAID设备。然后我们可以像对待任何物理卷一样对待它,把它添加到卷组继而在LVM中使用它;也可以使用 LVM 内置的 RAID命令。两种软 RAID 方法都使用相同的RAID软件。所以是用软RAID时,选择哪种方式实际上是一个关于我们如何组织我们的存储的问题。

5. 总结

与使用裸硬盘分区相比,逻辑卷管理器为我们提供了更大的存储灵活性。在本教程中,我们已经扩展了我们的根卷。我们能够做到这一点是因为它是用LVM创建的。这意味着我们可以标记一个新的物理卷供LVM使用,将其添加到卷组,然后将该存储部署到我们想要的地方。我们可以根据需要增加空间,并且服务器上的服务仍然在不间断运行,LVM提供了极大的便利性。

猜你喜欢

转载自blog.csdn.net/xieshaohu/article/details/129671846
今日推荐