lvm

2020-07-06  本文已影响0人  木头_95b3

1、介绍

LVM: 是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制
作用:在零停机前提下可以自如对文件系统的大小进行调整,可以方便实现文件系统跨越不同磁盘和分区。

找了一张看着比较舒服的图:

image.png

LVM就是一个虚拟设备驱动,在物理设备和文件系统层之间,维护着逻辑盘区和物理盘区之间的映射。它将几块磁盘或者分区组合起来形成一个存储池或者卷组

2、创建 lv卷

1、我在虚拟机上新加了一块 20G的磁盘,现在要把它做成逻辑卷
image.png
2、在线识别磁盘,这条命令只适合虚拟机(也可以重启系统识别,生产是在线加盘的),用 "lsblk "查看,此时系统多了一块20G的磁盘
#识别磁盘
[root@localhost ~]#echo "- - -" > /sys/class/scsi_host/host0/scan

#查看磁盘分区
[root@localhost ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   45G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   44G  0 part 
  ├─centos-root 253:0    0   42G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
sr0              11:0    1  4.4G  0 rom  
3、查看物理卷,可以看到,目前只有我的第一块盘上有lvm物理卷
#查看简略信息
[root@localhost ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  <44.00g 4.00m  (逻辑卷总的大小、剩余空闲空间)

#查看详细信息
[root@localhost ~]# pvdisplay 
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               centos
  PV Size               <44.00 GiB / not usable 3.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              11263
  Free PE               1
  Allocated PE          11262
  PV UUID               dsd3qT-ytxw-FvJo-X0u6-Czun-O8nd-ueiwd3
4、新建的磁盘,创建物理卷

上面 "lsblk " 中可以看到新加的disk 磁盘 设备名是 /dev/sdb

# 新建物理卷
[root@localhost ~]# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.

# 再次查看,多了一块 20G 物理卷,新建成功
[root@localhost ~]# pvdisplay        
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               centos
  PV Size               <44.00 GiB / not usable 3.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              11263
  Free PE               1
  Allocated PE          11262
  PV UUID               dsd3qT-ytxw-FvJo-X0u6-Czun-O8nd-ueiwd3
   
  "/dev/sdb" is a new physical volume of "20.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name               
  PV Size               20.00 GiB
  Allocatable           NO
  PE Size               0         #这些信息,是需要创建卷组后才有的
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               yAzAvC-2ISI-DOVZ-pzfQ-wSLr-S91g-H387pi
5、创建卷组

语法:vgcreate + -s PE大小 + 卷组名 + 设备名

不指定PE大小,默认是 4M

PE : 就是在创建卷组时,卷组的空间会按照 PE的指定大小,被分配成一块一块的;并且在以后的扩容,与缩减,都是按照PE的倍数来执行的

[root@localhost ~]# vgcreate -s 10M VGroup /dev/sdb
  Volume group "VGroup" successfully created

[root@localhost ~]# pvdisplay 
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               centos
  PV Size               <44.00 GiB / not usable 3.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              11263
  Free PE               1
  Allocated PE          11262
  PV UUID               dsd3qT-ytxw-FvJo-X0u6-Czun-O8nd-ueiwd3
   
  --- Physical volume ---
  PV Name               /dev/sdb
  VG Name               VGroup
  PV Size               20.00 GiB / not usable 10.00 MiB
  Allocatable           yes 
  PE Size               10.00 MiB    #这里查看PE大小
  Total PE              2047         # PE的总数量
  Free PE               2047         # PE的空闲数量
  Allocated PE          0            # PE在使用数量
  PV UUID               yAzAvC-2ISI-DOVZ-pzfQ-wSLr-S91g-H387pi

查看创建 的vg

[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree 
  VGroup   1   0   0 wz--n-  19.99g 19.99g
  centos   1   2   0 wz--n- <44.00g  4.00m

[root@localhost ~]# vgdisplay 
  --- Volume group ---
  VG Name               centos
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <44.00 GiB
  PE Size               4.00 MiB
  Total PE              11263
  Alloc PE / Size       11262 / 43.99 GiB
  Free  PE / Size       1 / 4.00 MiB
  VG UUID               P05Uyx-sjAy-o27c-D7Vs-Pcdt-VglQ-kcZl6Q
   
  --- Volume group ---
  VG Name               VGroup
  System ID             
  Format                lvm2
  Metadata Areas        1
  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                1
  Act PV                1
  VG Size               19.99 GiB
  PE Size               10.00 MiB   #这里也可以查看PE大小
  Total PE              2047
  Alloc PE / Size       0 / 0   
  Free  PE / Size       2047 / 19.99 GiB
  VG UUID               sYSKqx-o6jW-QCe4-lwW6-xrky-CjLm-0bijHE

卷组改名:
vgrename + 原名 + 新名

[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree 
  VGroup   1   0   0 wz--n-  19.99g 19.99g
  centos   1   2   0 wz--n- <44.00g  4.00m

[root@localhost ~]# vgrename VGroup VGroup1
  Volume group "VGroup" successfully renamed to "VGroup1"

[root@localhost ~]# vgs
  VG      #PV #LV #SN Attr   VSize   VFree 
  VGroup1   1   0   0 wz--n-  19.99g 19.99g
  centos    1   2   0 wz--n- <44.00g  4.00m

禁用卷组:vgchange -an VGroup1
激活卷组:vgchange -ay VGroup1

6、创建逻辑卷
[root@localhost ~]# lvcreate  -n mysqldb -L 10G VGroup1           
  Logical volume "mysqldb" created.

查看卷组剩余空间,有10G被占用了,逻辑卷说明创建成功

[root@localhost ~]# vgdisplay  VGroup1
  --- Volume group ---
  VG Name               VGroup1
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               19.99 GiB
  PE Size               10.00 MiB
  Total PE              2047
  Alloc PE / Size       1024 / 10.00 GiB      #被分配的  PE / 空间
  Free  PE / Size       1023 / 9.99 GiB
  VG UUID               sYSKqx-o6jW-QCe4-lwW6-xrky-CjLm-0bijHE

查看所有 lv 逻辑卷的详细信息:

[root@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/VGroup1/mysqldb
  LV Name                mysqldb
  VG Name                VGroup1
  LV UUID                jfKGjO-8tZI-uzhV-rtdH-6G43-k2N1-avkNgZ
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2020-07-04 11:52:29 +0800
  LV Status              available
  # open                 0
  LV Size                10.00 GiB
  Current LE             1024
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

逻辑卷命名路径有两种,其实他们都是软连接指到 /dev/dm-* 下的
/dev/VGroup1/mysqldb
/dev/mapper/VGroup1-mysqldb

[root@localhost ~]# ll /dev/VGroup1/mysqldb 
lrwxrwxrwx. 1 root root 7 Jul  4 11:52 /dev/VGroup1/mysqldb -> ../dm-2
[root@localhost ~]# ll /dev/mapper/VGroup1-mysqldb 
lrwxrwxrwx. 1 root root 7 Jul  4 11:52 /dev/mapper/VGroup1-mysqldb -> ../dm-2
7、创建文件系统:

ext4文件系统:mkfs.ext4
xfs文件系统: mkfs.xfs

[root@localhost ~]# mkfs.xfs /dev/VGroup1/mysqldb 
meta-data=/dev/VGroup1/mysqldb   isize=512    agcount=4, agsize=655360 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=2621440, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

查看 /dev/VGroup1/mysqldb 创建情况

[root@localhost ~]# lsblk -f
NAME              FSTYPE      LABEL           UUID                                   MOUNTPOINT
sda                                                                                  
├─sda1            xfs                         fba83f2c-f309-42c1-8dc1-98b502cfe168   /boot
└─sda2            LVM2_member                 dsd3qT-ytxw-FvJo-X0u6-Czun-O8nd-ueiwd3 
  ├─centos-root   xfs                         4cfc38ed-6515-416a-b3e9-1d2ad227c66e   /
  └─centos-swap   swap                        07e1514e-11de-4f71-8f40-fca0075e75dd   [SWAP]
sdb               LVM2_member                 yAzAvC-2ISI-DOVZ-pzfQ-wSLr-S91g-H387pi 
└─VGroup1-mysqldb xfs                         9f6acaaf-ee88-4910-9df7-a44b3f4a1068   
sr0               iso9660     CentOS 7 x86_64 2019-09-11-18-50-31-00             
8、挂载到指定目录上
[root@localhost mnt]# vim /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Mon Jun 15 16:20:13 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=fba83f2c-f309-42c1-8dc1-98b502cfe168 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
UUID=9f6acaaf-ee88-4910-9df7-a44b3f4a1068 /mnt  xfs     defaults        0 0

查看指定卷uuid的两种方法:

[root@localhost ~]# lsblk -p /dev/VGroup1/mysqldb -f
NAME                        FSTYPE LABEL UUID                                 MOUNTPOINT
/dev/mapper/VGroup1-mysqldb xfs          9f6acaaf-ee88-4910-9df7-a44b3f4a1068 /mnt

[root@localhost ~]# blkid /dev/VGroup1/mysqldb 
/dev/VGroup1/mysqldb: UUID="9f6acaaf-ee88-4910-9df7-a44b3f4a1068" TYPE="xfs" 

扩容:

新加了一块 /dev/sdc 磁盘:

[root@localhost ~]# lsblk
NAME              MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                 8:0    0   45G  0 disk 
├─sda1              8:1    0    1G  0 part /boot
└─sda2              8:2    0   44G  0 part 
  ├─centos-root   253:0    0   42G  0 lvm  /
  └─centos-swap   253:1    0    2G  0 lvm  [SWAP]
sdb                 8:16   0   20G  0 disk 
└─VGroup1-mysqldb 253:2    0   10G  0 lvm  /mnt
sdc                 8:32   0   20G  0 disk 
sr0                11:0    1  4.4G  0 rom  

把/dev/sdc 磁盘加到逻辑卷中

[root@localhost ~]# pvcreate /dev/sdc 
  Physical volume "/dev/sdc" successfully created.
[root@localhost ~]# pvs
  PV         VG      Fmt  Attr PSize   PFree 
  /dev/sda2  centos  lvm2 a--  <44.00g  4.00m
  /dev/sdb   VGroup1 lvm2 a--   19.99g  9.99g
  /dev/sdc           lvm2 ---   20.00g 20.00g

目前 VGroup1 的容量是 9.99g

[root@localhost ~]# vgs
  VG      #PV #LV #SN Attr   VSize   VFree
  VGroup1   1   1   0 wz--n-  19.99g 9.99g
  centos    1   2   0 wz--n- <44.00g 4.00m

把 /dev/sdc 扩容到 VGroup1卷组中

[root@localhost ~]# vgextend VGroup1 /dev/sdc
  Volume group "VGroup1" successfully extended

再次查看, 逻辑卷组,在原有的基础上多了 20G

[root@localhost ~]# vgs
  VG      #PV #LV #SN Attr   VSize   VFree 
  VGroup1   2   1   0 wz--n-  39.98g 29.98g
  centos    1   2   0 wz--n- <44.00g  4.00m
扩容分区,以下以扩充10G例::
[root@localhost ~]# vgdisplay VGroup1
  --- Volume group ---
  VG Name               VGroup1
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               39.98 GiB
  PE Size               10.00 MiB
  Total PE              4094
  Alloc PE / Size       1024 / 10.00 GiB
  Free  PE / Size       3070 / 29.98 GiB
  VG UUID               sYSKqx-o6jW-QCe4-lwW6-xrky-CjLm-0bijHE

lvextend 参数:
-L 以容量为单位
-l 以PE个数为单位
-r 使扩容的文件系统生效,不使用该参数,"lsblk" 可以看到总容量正确,但是 "df -h" 就看不到扩容部分;

在原有基础上 增加 10G :

lvextend -r -L +10G /dev/VGroup1/mysqldb   

增加到 20G(如果,原有10G,就增加了10G):

lvextend -r -L 20G /dev/VGroup1/mysqldb   

要根据 单位PE的大小,自己去计算,需要扩充的容量

在原有基础上,增加10G;(算法:1024(个PE)* 10M):

lvextend -r -l +1024 /dev/VGroup1/mysqldb

增加到 20G;( 原有 1024个PE,增加 1024个PE,就是增加了1024(个PE)* 10M 等于 10G):

lvextend -r -l 2048 /dev/VGroup1/mysqldb

剩余空间全用光:

lvextend -r -l +100%FREE  /dev/VGroup1/mysqldb
如果扩容没有加 -r 参数,要让文件系统加入扩容空间(建议使用 -r):

centos7(xfs文件系统)上用 xfs_growfs + 挂载点

xfs_growfs /mnt/

centos6 (ext文件系统)上使用 resize2fs + 逻辑卷名 使其生效:

resize2fs  /dev/VGroup1/mysqldb 

扩容后 :

[root@localhost mnt]# lsblk
NAME             MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                8:0    0   45G  0 disk 
├─sda1             8:1    0    1G  0 part /boot
└─sda2             8:2    0   44G  0 part 
  ├─centos-root  253:0    0   42G  0 lvm  /
  └─centos-swap  253:1    0    2G  0 lvm  [SWAP]
sdb                8:16   0   20G  0 disk 
└─VGroup-mysqldb 253:2    0   20G  0 lvm  /mnt
sdc                8:32   0   20G  0 disk 
└─VGroup-mysqldb 253:2    0   20G  0 lvm  /mnt
sr0               11:0    1  4.4G  0 rom  

缩减逻辑卷:

只适用与 centos 6,不建议用于生产,会丢数据

1.取消逻辑卷的挂载
umount /mnt
2.检查文件系统
fsck -f /dev/VGroup1/mysqldb
3.设定文件系统到10G
resize2fs /dev/VGroup1/mysqldb 10G
4.缩减lv逻辑卷
lvreduce -L 10G /dev/VGroup1/mysqldb
5.挂载
mount -a

磁盘数据迁移(删除PV)

当服务器硬盘出现告警提示,我们就得把该硬盘的数据迁移到其它硬盘上去,再替换新硬盘,以保证数据不丢失

确认逻辑卷组上有足够的空间就可以导入上面有讲到,不再赘述了

注意:数据迁移是根据被使用的 PE 块设备来迁移的,与磁盘下的实际数据无关
迁移 /dev/sdb

1、可以看到 /dev/sdb 上使用了全部PE块 共: 2047 个;一定要看总空间,不要去看空闲空间 ;因为 /dev/sdb 的空闲空间 VGroup 卷组也包含,自己不能复制到自己的空闲空间中去

[root@localhost mnt]# pvdisplay /dev/sdb
  --- Physical volume ---
  PV Name               /dev/sdb
  VG Name               VGroup
  PV Size               20.00 GiB / not usable 10.00 MiB
  Allocatable           yes (but full)
  PE Size               10.00 MiB
  Total PE              2047
  Free PE               0
  Allocated PE          2047
  PV UUID               yAzAvC-2ISI-DOVZ-pzfQ-wSLr-S91g-H387pi

2、现在要确定 /dev/sdb 所在的 VGroup 逻辑卷组空闲空间是否足够:
Free PE / Size 3069 / 29.97 GiB 确认空闲充足

[root@localhost mnt]# vgdisplay VGroup
  --- Volume group ---
  VG Name               VGroup
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  7
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               49.97 GiB
  PE Size               10.00 MiB
  Total PE              5117
  Alloc PE / Size       2048 / 20.00 GiB
  Free  PE / Size       3069 / 29.97 GiB
  VG UUID               sYSKqx-o6jW-QCe4-lwW6-xrky-CjLm-0bijHE

3、开始迁移;迁移是系统自己完成的,不需要指定到具体盘

[root@localhost mnt]# pvmove /dev/sdb
  /dev/sdb: Moved: 0.54%
  /dev/sdb: Moved: 100.00%

4、迁移完成后,再查看 /dev/sdb,上面都是空闲的了

[root@localhost mnt]# pvdisplay /dev/sdb
  --- Physical volume ---
  PV Name               /dev/sdb
  VG Name               VGroup
  PV Size               20.00 GiB / not usable 10.00 MiB
  Allocatable           yes 
  PE Size               10.00 MiB
  Total PE              2047
  Free PE               2047
  Allocated PE          0
  PV UUID               yAzAvC-2ISI-DOVZ-pzfQ-wSLr-S91g-H387pi

5、再把 /dev/sdb 从卷组中移走

[root@localhost mnt]# vgreduce  VGroup  /dev/sdb
  Removed "/dev/sdb" from volume group "VGroup"

#可以看到 /dev/sdb 不在 "VGroup" 卷组中了
[root@localhost mnt]# pvdisplay  /dev/sdb
  "/dev/sdb" is a new physical volume of "20.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name               
  PV Size               20.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               yAzAvC-2ISI-DOVZ-pzfQ-wSLr-S91g-H387pi

6、再把 /dev/sdb 从物理卷中移除

[root@localhost mnt]# pvremove  /dev/sdb
  Labels on physical volume "/dev/sdb" successfully wiped.

#可以看到物理卷中没有了
[root@localhost mnt]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  <44.00g 4.00m
  /dev/sdc   VGroup lvm2 a--   19.99g    0 
  /dev/sdd   VGroup lvm2 a--    9.99g 9.98g

7、最后就可以把磁盘拆走了

附:lvm做快照,用的很少

image.png
上一篇 下一篇

猜你喜欢

热点阅读