Linux运维养成记-磁盘管理LVM 逻辑卷

1.LVM 逻辑卷概述

随着企业业务的增加,文件系统负载加大,很可能导致空间不足,用传统的分区方式管理磁盘,得把现有的分区删除,然后重新规划新的存储方案,因此我们需要一种管理机制,可以帮我们动态管理存储,而 LVM 就可以提供这种功能。
LVM(Logical Volume Manager)是基于内核的一种逻辑卷管理器,LVM 适合管理大存储设备,并允许用户动态调整文件系统的大小。此外,LVM 的快照功能可以帮助我们快速备份数据。
下面是关于 LVM的几个概念。

  1. 物理卷(PV):物理卷是 LVM 的最底层概念,是 LVM 的逻辑存储块,物理卷与磁盘分区是逻辑的对应关系。多个逻辑卷可以组合或拆分,实现容量扩充或缩减。LVM 提供的命令可以将分区转化成物理卷,通过组合生成卷组。
  2. 卷组(VG):卷组时 LVM 逻辑概念上的磁盘设备,通过单个或多个 PV 组合生成的。
  3. 物理长度(PE):物理长度为 PV 合成 VG 后,所划分的最小存储单元,PE 默认为 4MB。
  4. 逻辑卷(LV):逻辑卷是 LVM 逻辑意义分区,我们可以指定从卷组中分多少容量来创建逻辑卷,最后将此逻辑卷挂载使用。

下面是逻辑卷分区的一些命令解释:

  1. pvcreate
    描述:使用 LVM 对磁盘或分区进行初始化。
    用法:pvcreate [选项] 物理卷 [物理卷…]
    例:
pvcreate /dev/sdc2 /dev/sde
pvcreate /dev/sdb{1,2,3}
  • vgcreate
    描述:创建卷组。
    用法:vgcreate [选项] 卷组名 物理设备路径 [物理设备路径…]
    例:
vgcreate test_vg1 /dev/sdb1 /dev/sdb2
vgcreate test_vg2 -s 16M /dev/sdb3 /dev/sdb4
#-s表示指定 PE 大小为 16MB
  • lvcreate
    描述:从卷组中提取存储空间,创建逻辑卷。
    用法:lvcreate [选项] 卷组名或路径 [物理卷路径]
    选项:
  • -l:指定使用多少个卷组中的 PE 创建逻辑卷,PE 容量在创建卷组时已定
  • -L:直接指定逻辑卷容量大小
  • -n:指定逻辑卷名
    例:
lvcreate -L 2G -n test_lv1 test_vg1
#从卷组 test_vg1 中取 2G 创建名为 test_lv1 的逻辑卷

lvcreate -l 200 -n test_lv2 test_vg2
#使用 200 个 PE 创建名为 test_lv2 的逻辑卷

lvcreate -L 2G -n test_lv3 test_vg1 /dev/sdb2
#指定 test_lv3 这个逻辑卷使用 test_vg1 下的/dev/sdb2创建

2. 创建 LVM 分区实例

使用之前 sdb 这块磁盘创建两个分区,用这两个创建一个名为 test_vg 的卷组,最后从卷组中创建两个大小为 1G 的逻辑卷,名为 test_web、test_data。

  • 使用 fdiask 创建分区
[root@localhost ~]# fdisk -l
...
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         262     2104483+  83  Linux
/dev/sdb2             263        1305     8377897+   5  Extended
#这里已有一个主分区和一个扩展分区,下面将扩展分区创建一个逻辑分区,并修改分区标签LVM
Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l													#l 创建逻辑分区
First cylinder (263-1305, default 263): 
Using default value 263
Last cylinder, +cylinders or +size{K,M,G} (263-1305, default 1305):+2G
#穿件 sdb5 逻辑分区大小为2G

Command (m for help): t								
Partition number (1-5): 5					        #指定分区编号sdb5
Hex code (type L to list codes): 8e					#改变分区 id 为 LVM
Changed system type of partition 5 to 8e (Linux LVM)

Command (m for help): p
Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         262     2104483+  83  Linux
/dev/sdb2             263        1305     8377897+   5  Extended
/dev/sdb5             263         524     2104483+  8e  Linux LVM

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

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

partprobe /dev/sdb
  • pvcreate创建物理卷并使用 pvdisplay查看结果
[root@localhost ~]# pvcreate /dev/sdb{1,5}
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb5" successfully created
  
[root@localhost ~]# pvdisplay
  "/dev/sdb1" is a new physical volume of "2.01 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               2.01 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               GVq0p6-LA0y-zsVA-NAK4-wyan-qB74-0ajhqM
   
  "/dev/sdb5" is a new physical volume of "2.01 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb5
  VG Name               
  PV Size               2.01 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               RU8NUI-1gkC-gaMW-ubHp-LDAz-8xS4-6nbO9J
  • 使用 vgcreate创建卷组并使用vgdisplay查看结果
[root@localhost ~]# vgcreate test_vg /dev/sdb{1,5}
  Volume group "test_vg" successfully created
  
[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               test_vg
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               4.01 GiB				#卷组大小
  PE Size               4.00 MiB				#PE 大小
  Total PE              1026
  Alloc PE / Size       0 / 0   
  Free  PE / Size       1026 / 4.01 GiB
  VG UUID               vVhxaV-sX5z-52Sd-vj9N-8jre-CaXZ-gXeFM6
  • 使用lvcreate创建逻辑卷,lvdisplay查看结果
[root@localhost ~]# lvcreate -n test_web -L 1G test_vg
  Logical volume "test_web" created
  
[root@localhost ~]# lvcreate -n test_data -L 1G test_vg
  Logical volume "test_data" created
  
  [root@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/test_vg/test_web
  LV Name                test_web
  VG Name                test_vg
  LV UUID                Y2B4Eh-fraF-1Szh-1gov-kyCc-vUMi-1ks8cz
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2019-06-13 07:28:27 -0700
  LV Status              available
  # open                 0
  LV Size                1.00 GiB
  Current LE             256
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
 - currently set to     256
  Block device           253:0
   
  --- Logical volume ---
  LV Path                /dev/test_vg/test_data
  LV Name                test_data
  VG Name                test_vg
  LV UUID                NIF17d-8Hy0-er6o-Eaus-efks-1xS7-XMlXkJ
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2019-06-13 07:28:41 -0700
  LV Status              available
  # open                 0
  LV Size                1.00 GiB
  Current LE             256
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
 - currently set to     256
  Block device           253:1
  • 格式化并挂载
[root@localhost ~]# mkfs.ext4 /dev/test_vg/test_web 
[root@localhost ~]# mkfs.ext4 /dev/test_vg/test_data
[root@localhost ~]# mkdir -p /test/{web,data}
[root@localhost ~]# cat >> /etc/fstab <<EOF
> /dev/test_vg/test_web /test/web/ ext4 defaults 0 0
> /dev/test_vg/test_data /test/data/ ext4 defaults 0 0
> EOF
[root@localhost test]# mount -a
[root@localhost test]# df -h				#查看挂载结果

3.修改 LVM 分区容量

下面使用lvextend命令调整逻辑卷大小。调整后使用ext4_growfs命令更新文件系统大小,方法如下:

[root@localhost test]# lvextend -L +1G /dev/test_vg/test_data 
  Extending logical volume test_data to 2.00 GiB
  Logical volume test_data successfully resized
  
[root@localhost test]# lvs
  LV        VG      Attr       LSize Pool Origin Data%  Move Log Cpy%Sync Convert
  test_data test_vg -wi-ao---- 2.00g                                             
  test_web  test_vg -wi-ao---- 1.00g     
                                          
[root@localhost test]# df -h
Filesystem                     Size  Used Avail Use% Mounted on
/dev/sda2                       18G  2.9G   14G  18% /
tmpfs                          491M   80K  491M   1% /dev/shm
/dev/sda1                      291M   34M  242M  13% /boot
/dev/mapper/test_vg-test_web  1008M   34M  924M   4% /test/web
/dev/mapper/test_vg-test_data 1008M   34M  924M   4% /test/data
#这里系统文件大小还未变化

[root@localhost test]# resize2fs /dev/test_vg/test_data	
#调整文件系统大小,使之生效
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/test_vg/test_data is mounted on /test/data; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/test_vg/test_data to 524288 (4k) blocks.
The filesystem on /dev/test_vg/test_data is now 524288 blocks long.

[root@localhost test]# df -h							#查看结果
Filesystem                     Size  Used Avail Use% Mounted on
/dev/sda2                       18G  2.9G   14G  18% /
tmpfs                          491M   80K  491M   1% /dev/shm
/dev/sda1                      291M   34M  242M  13% /boot
/dev/mapper/test_vg-test_web  1008M   34M  924M   4% /test/web
/dev/mapper/test_vg-test_data  2.0G   34M  1.9G   2% /test/data

此外当卷组没有足够空间时,可以再加磁盘然后fdisk分区,将新分区做成物理卷,然后通过vgextend将新的物理卷追加至现有的卷组中,最后lvextend调整逻辑卷大小,以下演示追加新的物理卷至已有卷组中。

fdisk /dev/sdb								#分新区
pvcreate /dev/sdb6							#将分区做成物理卷 PV
vgextend test_vg /dev/sdb6					#将新的 PV 加到 test_vg 卷中
vgdisplay test_vg							#查看结果
lvextend -L 2G /dev/test_vg/test_data		#将逻辑卷扩充2G
resize2fs /dev/test_vg/test_data			#调整文件大小,使之生效
df -h										#查看结果

4.删除 LVM 分区

删除 LVM 分区的顺序与创建时相反,即先卸载文件系统、删除逻辑卷、删卷组,删物理卷。下载文件系统时应更新/etc/fstab文件。
下面是删除 LVM 分区命令,步骤:

umount /dev/test_vg/test_web
umount /dev/test_vg/test_data
lvremove /dev/test_vg/test_web
lvremove /dev/test_vg/test_data
vgremove /dev/test_vg
pvremove /dev/sdb{1,5,6}

猜你喜欢

转载自blog.csdn.net/weixin_45181224/article/details/91792215