LVM逻辑卷管理


一、LVM简介

LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的存储卷,在存储卷上建立文件系统。LVM不局限与物理磁盘分区划分。

1、逻辑卷管理磁盘的优点

Linux的LVM非常强大,可以在生产运行系统上面直接在线扩展硬盘分区,可以把分区umount以后收缩分区大小,还可以在系统运行过程中把一个分区从一块硬盘搬到另一块硬盘上面去等等,而且这一切都可以在一个繁忙运行的系统上面直接操作,不会对你的系统运行产生任何影响,很安全。

2、缺陷

LVM使用有局限性。虽然能很方便的扩容和缩容磁盘的空间(扩容磁盘大小,文件不丢失),但是一旦出现问题,数据丢失,想要恢复数据就有点困难。

3、LVM概述图

在这里插入图片描述

  1. pv:pv 命令用于显示物理卷(Physical Volume)的信息,包括物理卷的名称、大小、空闲空间、占用情况等。物理卷是 Linux LVM(Logical Volume Manager,逻辑卷管理器)中的一种基本概念,用于管理硬盘驱动器或分区。
  2. vg:vg 命令用于显示卷组(Volume Group)的信息,包括卷组的名称、物理卷的数量、逻辑卷的数量、占用情况等。卷组是 LVM 中的逻辑概念,用于将多个物理卷组合成一个逻辑单元,从而提供更灵活的存储管理。
  3. lv:lv 命令用于显示逻辑卷(Logical Volume)的信息,包括逻辑卷的名称、卷组名称、大小、挂载点、文件系统类型等。逻辑卷是 LVM 中的最终逻辑单元,用于将卷组中的存储空间划分为逻辑单元,供操作系统使用

二、LVM的使用

1、创建逻辑卷

当前环境

NAME            MAJ:MIN 	RM  SIZE RO 	TYPE 	MOUNTPOINT
sda			8:0    0   10G  0 	disk 
├─sda1		8:1    0    1G  0 	part	/boot
└─sda2		8:2    0    9G  0 	part 
  ├─centos-root	253:0  0    7G  0	lvm  	/
  └─centos-swap	253:1  0    2G  0 	lvm  	[SWAP]
Sdb			8:16   0   20G  0 	disk 
Sdc			8:32   0   30G  0 	disk 

首先是要将我们的物理硬盘格式化成PV,然后将多个PV加入到创建好的VG中,最后通过VG创建我们的LV。所以我们第一步就是将我们的物理硬盘格式化成PV(物理卷)。
将物理硬盘格式化成PV(物理卷)

[root@lvm ~]# fdisk -l
Disk /dev/sda: 10.7 GB, 10737418240 bytes, 20971520 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: 0x000b88e0
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    20971519     9436160   8e  Linux LVM

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 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 /dev/sdc: 32.2 GB, 32212254720 bytes, 62914560 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 /dev/mapper/centos-root: 7511 MB, 7511998464 bytes, 14671872 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 /dev/mapper/centos-swap: 2147 MB, 2147483648 bytes, 4194304 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

根据上面所示,我们先将 /dev/sdb、 /dev/sdc 两块硬盘格式化成PV

[root@lvm ~]# pvcreate /dev/sdb /dev/sdc
  Physical volume "/dev/sdb" successfully created.
  Physical volume "/dev/sdc" successfully created.

创建完PV以后,我们可以使用pvdisplay(显示详细信息)、pvs命令来查看当前pv的信息

[root@lvm ~]# pvdisplay 
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               centos
  PV Size               <9.00 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              2303
  Free PE               0
  Allocated PE          2303
  PV UUID               c4T0zy-4Bhj-dAfK-4CiU-nezj-cz02-NFFsep
   
  "/dev/sdc" is a new physical volume of "30.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc
  VG Name               
  PV Size               30.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               eiFpcS-mfqo-0MLf-Qqg8-yfvZ-Imcl-HmH0SD
   
  "/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               J90cm2-oKZC-aOmh-sfAo-vbtL-WMxj-yeXBYN

通过这两个命令我们可以看到我们已经创建好的PV的信息,两个PV一个是20G一个是30G,目前还没有使用。(我们可能用不到这么多,先放着吧)
创建卷组(VG),并将PV加入到卷组中  
通过 vgcreate 命令,在创建完PV以后,这时候我们需要创建一个VG,然后将我们的PV都加入到这个卷组当中,在创建卷组时要给该卷组起一个名字。

[root@lvm ~]# vgcreate john /dev/sdb /dev/sdc	

在到已有的VG添加一个新的LV的话,直接扩容原来的VG卷

vgextend centos
  Volume group "john" successfully created

同样,在创建好VG以后,我们也可以使用 vgdisplay 或者 vgs 命来来查看VG的信息

[root@lvm ~]# 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               <9.00 GiB
  PE Size               4.00 MiB
  Total PE              2303
  Alloc PE / Size       2303 / <9.00 GiB
  Free  PE / Size       0 / 0   
  VG UUID               HEm8Jc-Zqqd-F0U2-ESI0-wOjd-TRu2-NoEVxl
   
  --- Volume group ---
  VG Name               zhou
  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               49.99 GiB
  PE Size               4.00 MiB
  Total PE              12798
  Alloc PE / Size       0 / 0   
  Free  PE / Size       12798 / 49.99 GiB
  VG UUID               aGHDlM-HUVG-woEm-ZJes-T3bO-cdMw-0yADbR
[root@lvm ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree 
  centos   1   2   0 wz--n- <9.00g     0 
  zhou     2   0   0 wz--n- 49.99g 49.99g

基于卷组(VG)创建逻辑卷(LV)  
通过 lvcreate 命令,因为创建好的PV、VG都是底层的东西,我们上层使用的是逻辑卷,所以我们要基于VG创建我们的逻辑卷才行

 [root@lvm ~]# lvcreate -n lv0 -L 2G john
 [root@lvm ~] lvcreate -l 100%free lcp -n redhat 

在这里插入图片描述
意思:在centos的vg卷中将全部的给到data的lv中

  Logical volume "lv0" created.

通过 lvcreate 命令基于VG创建好我们的逻辑卷,名字为lv0,大小为2G,同样我们可以使用 lvdisplay 或者 lvs 命令来查看创建好的逻辑卷的信息。

[root@lvm ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/centos/swap
  LV Name                swap
  VG Name                centos
  LV UUID                tAe9i5-4Nx6-XvIn-t2Nf-DA8T-KiKX-UjJ5if
  LV Write Access        read/write
  LV Creation host, time localhost, 2018-08-03 11:26:07 -0400
  LV Status              available
  # open                 2
  LV Size                2.00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1
   
  --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                hZpwip-88Np-2tcn-pOnN-3hfk-60uI-VQDDRq
  LV Write Access        read/write
  LV Creation host, time localhost, 2018-08-03 11:26:07 -0400
  LV Status              available
  # open                 1
  LV Size                <7.00 GiB
  Current LE             1791
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0
   
  --- Logical volume ---
  LV Path                /dev/zhou/lv0
  LV Name                lv0
  VG Name                john
  LV UUID                R9gaGn-oi5b-FNoT-6ojC-sc3S-agK3-Gy93Bg
  LV Write Access        read/write
  LV Creation host, time lvm, 2018-08-03 04:21:34 -0400
  LV Status              available
  # open                 0
  LV Size                2.00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2
[root@lvm ~]# lvs
  LV   VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao---- <7.00g                                                    
  swap centos -wi-ao----  2.00g                                                    
  lv0  john  -wi-a-----  2.00g

这样子我们的逻辑卷也就已经创建好了,我们这个时候再通过 vgs 还有 pvs 命令查看一下我们的PV与VG的信息

[root@lvm ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree 
  centos   1   2   0 wz--n- <9.00g     0 
  john     2   1   0 wz--n- 49.99g 47.99g
[root@lvm ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree  
  /dev/sda2  centos lvm2 a--   <9.00g      0 
  /dev/sdb   john   lvm2 a--  <20.00g <18.00g
  /dev/sdc   john   lvm2 a--  <30.00g <30.00g
我们发现,当我们每创建完一个LV时,VG与PV的信息都是时时在变化的,并且我们创建LV的大小是根据当前VG的大小来决定的,不能超过当前VG的剩余大小。
每创建好一个逻辑卷,都会在 /dev 目录下出现一个以该卷组命名的文件夹,基于该卷组创建的所有的逻辑卷都是存放在这个文件夹下面,我们可以查看一下。
```bash
[root@lvm ~]# ls /dev/john/lv0 
/dev/john/lv0

我们每创建一个新的逻辑卷,该VG目录下都会多出这么一个设备。

2、使用逻辑卷

我们已经创建好了我们的PV、VG以及LV,这时候我们如果要使用逻辑卷,就必须将其格式化成我们需要用的文件系统,并将其挂载起来,然后就可以像使用分区一样去使用逻辑卷了.

[root@lvm ~]# mkfs.xfs /dev/john/lv0 			blkid查看文件类型
meta-data=/dev/john/lv0          isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=524288, 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

格式化我们的逻辑卷以后,就可以使用 mount 命令将其进行挂载,我们将其挂载到 /mnt 目录下。

[root@lvm ~]# mount /dev/john/lv0 /mnt/

如果新建data要新建一个data目录将逻辑卷挂载在data目录中

[root@lvm ~]# mount /dev/Sentos/data /data/
[root@lvm ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root  7.0G  1.2G  5.9G  17% /
devtmpfs                 476M     0  476M   0% /dev
tmpfs                    488M     0  488M   0% /dev/shm
tmpfs                    488M  7.6M  480M   2% /run
tmpfs                    488M     0  488M   0% /sys/fs/cgroup
/dev/sda1               1014M  130M  885M  13% /boot
tmpfs                     98M     0   98M   0% /run/user/0
/dev/mapper/john-lv0     2.0G   33M  2.0G   2% /mnt

逻辑卷挂载完成之后,我们可以像使用其他分区一样在上面进行文件操作了。
挂载好后需要在vim /etc/fstab中写入 然后mount -a看是否报错不报错则成功
最后df -h看一下就可以了

在这里插入图片描述
在这里插入图片描述

3、删除逻辑卷

我们在创建好逻辑卷后可以通过创建文件系统,挂载逻辑卷来使用它,如果说我们不想用了也可以将其删除掉。
【注意:】对于创建物理卷、创建卷组以及创建逻辑卷我们是有严格顺序的,同样,对于删除逻辑卷、删除卷组以及删除物理卷也是有严格顺序要求的。
1首先将正在使用的逻辑卷卸载掉  通过 umount 命令
2将逻辑卷先删除  通过 lvremove 命令
3删除卷组  通过 vgremove 命令
4最后再来删除我们的物理卷  通过 pvremove 命令

[root@lvm ~]# umount /dev/zhou/lv0 
[root@lvm ~]# lvremove /dev/zhou/lv0
Do you really want to remove active logical volume zhou/lv0? [y/n]: y
  Logical volume "lv0" successfully removed
[root@lvm ~]# vgremove zhou
  Volume group "zhou" successfully removed
[root@lvm ~]# pvremove /dev/sdb /dev/sdc 
  Labels on physical volume "/dev/sdb" successfully wiped.
  Labels on physical volume "/dev/sdc" successfully wiped.

此时我们的刚创建的逻辑卷 lv0,卷组 zhou以及物理卷 /dev/sdb、/dev/sdc 已经从我们当前操作系统上删除掉了,通过 lvs、vgs、pvs命令可以查看一下.

[root@lvm ~]# lvs
  LV   VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao---- <7.00g                                                    
  swap centos -wi-ao----  2.00g                                                    
[root@lvm ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree
  centos   1   2   0 wz--n- <9.00g    0 
[root@lvm ~]# pvs
  PV         VG     Fmt  Attr PSize  PFree
  /dev/sda2  centos lvm2 a--  <9.00g    0

4、LVM扩容

当前环境

[root@lvm ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   10G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0    9G  0 part 
  ├─centos-root 253:0    0    7G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
├─sdb1            8:17   0    2G  0 part 
│ └─vg0-lv0     253:2    0    2G  0 lvm  /lvmtest
├─sdb2            8:18   0    2G  0 part 
│ └─vg1-lv1     253:3    0    2G  0 lvm  /lvmtest1
├─sdb3            8:19   0  512B  0 part 
├─sdb5            8:21   0    5G  0 part 
├─sdb6            8:22   0    5G  0 part 
└─sdb7            8:23   0    6G  0 part 
sdc               8:32   0   30G  0 disk

如上所示,lvmtest为2G以xfs为文件系统的lv挂载点,lvmtest1为2G以ext4为文件系统的lv挂载点
例:对其进行扩展,分别将sdb5扩展到lv0
步骤为:

[root@lvm ~]# pvcreate /dev/sdb5		###########a.新建pv
  Physical volume "/dev/sdb5" successfully created.
[root@lvm ~]# vgextend vg0 /dev/sdb5		###########b.扩容vg
  Volume group "vg0" successfully extended
 [root@lvm ~]# lvresize -l +100%FREE /dev/vg0/lv0		 ############c.扩容lv
  Size of logical volume vg0/lv0 changed from <2.00 GiB (511 extents) to 6.99 GiB (1790 extents).
  Logical volume vg0/lv0 successfully resized.
[root@lvm ~]# xfs_growfs /dev/vg0/lv0 		###########d.扩展文件系统
meta-data=/dev/mapper/vg0-lv0    isize=512    agcount=4, agsize=130816 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=523264, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 523264 to 1832960
[root@lvm ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   10G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0    9G  0 part 
  ├─centos-root 253:0    0    7G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
├─sdb1            8:17   0    2G  0 part 
│ └─vg0-lv0     253:2    0    7G  0 lvm  /lvmtest			##############初始环境下此挂载点下的lv为2G
├─sdb2            8:18   0    2G  0 part 
│ └─vg1-lv1     253:3    0    2G  0 lvm  /lvmtest1
├─sdb3            8:19   0  512B  0 part 
├─sdb5            8:21   0    5G  0 part 
│ └─vg0-lv0     253:2    0    7G  0 lvm  /lvmtest
├─sdb6            8:22   0    5G  0 part 
└─sdb7            8:23   0    6G  0 part 
sdc               8:32   0   30G  0 disk 

xfs扩容完成,ext4文件系统请大家自行试验。
在这里插入图片描述
在这里插入图片描述

5、LVM缩容

当前环境:

[root@lvm ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   10G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0    9G  0 part 
  ├─centos-root 253:0    0    7G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
├─sdb1            8:17   0    2G  0 part 
│ └─vg0-lv0     253:2    0    7G  0 lvm  /lvmtest
├─sdb2            8:18   0    2G  0 part 
│ └─vg1-lv1     253:3    0    7G  0 lvm  /lvmtest1
├─sdb3            8:19   0  512B  0 part 
├─sdb5            8:21   0    5G  0 part 
│ └─vg0-lv0     253:2    0    7G  0 lvm  /lvmtest
├─sdb6            8:22   0    5G  0 part 
│ └─vg1-lv1     253:3    0    7G  0 lvm  /lvmtest1
└─sdb7            8:23   0    6G  0 part 
sdc               8:32   0   30G  0 disk

如上所示,在此对lv0所在挂载点lvmtest进行缩容(缩容只能在实际容量小于缩容后的容量的情况下进行,并且一般不支持在线缩容)

[root@lvm ~]# umount /dev/vg1/lv1		###########a.卸载文件系统
[root@lvm ~]# e2fsck -f /dev/vg1/lv1 		###########b.执行磁盘检查
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vg1/lv1: 11/458752 files (0.0% non-contiguous), 39295/1833984 blocks
[root@lvm ~]# resize2fs /dev/vg1/lv1 2G		###########c.缩小文件系统容量
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg1/lv1 to 524288 (4k) blocks.
The filesystem on /dev/vg1/lv1 is now 524288 blocks long.
[root@lvm ~]# lvresize -L 2G /dev/vg1/lv1		###########d.缩小lv容量(相当于lvreduce -L -5G /dev/vg1/lv1)
  WARNING: Reducing active logical volume to 2.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg1/lv1? [y/n]: y
  Size of logical volume vg1/lv1 changed from <7.00 GiB (3582 extents) to 2.00 GiB (1024 extents).
  Logical volume vg1/lv1 successfully resized.
[root@lvm ~]# lvdisplay /dev/vg1/lv1		###########e.查看缩容后的lv
  --- Logical volume ---
  LV Path                /dev/vg1/lv1
  LV Name                lv1
  VG Name                vg1
  LV UUID                wgIeIU-Wv0I-9eo5-Y4cS-kNHB-mz3D-Tbblzu
  LV Write Access        read/write
  LV Creation host, time lvm, 2018-08-06 04:07:24 -0400
  LV Status              available
  # open                 0
  LV Size                2.00 GiB
  Current LE             1024
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3

上述缩容方案只对ext4有效,在缩容前,最好执行备份操作(备份文件系统,并非备份逻辑卷),以免数据丢失。缩容步骤可以改为d-b-c,先缩容lv,再缩容文件系统。xfs文件系统缩容,不支持免格式化,如实在需要缩容xfs文件系统,相当于重新构造。

三、Snapshot(快照功能)

1、LVM-snapshot简介

在正常系统运行的情况下,文件系统内部存在着数据读写,意味着系统内的数据大多数时间处于一个非静止状态,如果此时进行文件系统备份(诸如:xfsdump/xfsrestore、Rsnapshot、dump)。在此只介绍CoW(copy-on-write):当一个snapshot创建的时候,仅拷贝原始卷里数据的元数据(meta-data)。创建的时候,并不会有数据的物理拷贝,因此snapshot的创建几乎是实时的,当原始卷上有写操作执行时,snapshot跟踪原始卷块的改变,这个时候原始卷上将要改变的数据在改变之前被拷贝到snapshot预留的空间里,这就是CoW(相当于卷的符号连接symbol link),也可以被挂载使用。
LV的snapshot只能对于LVM生效,对文件系统是不生效的,当创建lv快照分配一部分空间给它之后,它开始记录原始卷数据写入情况,当lv快照空间被用完之后,这个lv快照会立即被释放,从而无法使用。所以,非常重要的一点,一定要在snapshot的生命周期里,做完你需要做得事情。当然,如果你的lv快照大小和原始卷一样大,甚至还要大,那它的就是“天地同寿”了。

2、利用snapshot做备份(LV快照)

[root@lvm ~]# lvcreate -L 200M -s -n lvsnapshot /dev/vg1/lv1 【注意:snapshot会占用lv所在vg容量,创建之前确认其空间足够】
 Logical volume "lvsnapshot" created.		###########1,创建一个snapshot做lv1的快照
[root@lvm ~]# lvdisplay /dev/vg1/lv1 		###########2,查看snapshot状态
 --- Logical volume ---
 LV Path                /dev/vg1/lv1
 LV Name                lv1
 VG Name                vg1
 LV UUID                wgIeIU-Wv0I-9eo5-Y4cS-kNHB-mz3D-Tbblzu
 LV Write Access        read/write
 LV Creation host, time lvm, 2018-08-06 04:07:24 -0400
 LV snapshot status     source of
                        lvsnapshot [active]
 LV Status              available
 # open                 1
 LV Size                <2 GiB
 Current LE             1996
 Segments               2
 Allocation             inherit
 Read ahead sectors     auto
 - currently set to     8192
 Block device           253:3
[root@lvm ~]# lvs /dev/vg1/lvsnapshot 	###########3,查看snapshot的利用率
 LV         VG  Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
 lvsnapshot vg1 swi-a-s--- 200.00m      lv1    0.01                                   
[root@lvm ~]# cd /lvmtest1/		###########4,模拟snapshot利用率增加的情景
[root@lvm lvmtest1]# touch testfile
[root@lvm lvmtest1]# dd if=/dev/zero of=testfile bs=1 count=20
20+0 records in
20+0 records out
20 bytes (20 B) copied, 0.072071 s, 0.3 kB/s
[root@lvm lvmtest1]# lvs /dev/vg1/lvsnapshot 
 LV         VG  Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
 lvsnapshot vg1 swi-a-s--- 200.00m      lv1    0.04                                   
[root@lvm lvmtest1]# dd if=/dev/zero of=testfile bs=1 count=200
200+0 records in
200+0 records out
200 bytes (200 B) copied, 0.000667621 s, 300 kB/s
[root@lvm lvmtest1]# lvs /dev/vg1/lvsnapshot 
 LV         VG  Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
 lvsnapshot vg1 swi-a-s--- 200.00m      lv1    0.05                                   
[root@lvm lvmtest1]# dd if=/dev/zero of=testfile bs=1M count=200
200+0 records in
200+0 records out
209715200 bytes (210 MB) copied, 9.34816 s, 22.4 MB/s
[root@lvm lvmtest1]# lvs /dev/vg1/lvsnapshot 		###########5,这里snapshot的利用率到了100%
 LV         VG  Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
 lvsnapshot vg1 swi-I-s--- 200.00m      lv1    100.00                                 
[root@lvm lvmtest1]# lvdisplay /dev/vg1/lv1 		###########6,可以查看到利用率100%后,snapshot变成不可用的状态
 --- Logical volume ---
 LV Path                /dev/vg1/lv1
 LV Name                lv1
 VG Name                vg1
 LV UUID                wgIeIU-Wv0I-9eo5-Y4cS-kNHB-mz3D-Tbblzu
 LV Write Access        read/write
 LV Creation host, time lvm, 2018-08-06 04:07:24 -0400
 LV snapshot status     source of
                        lvsnapshot [INACTIVE]
 LV Status              available
 # open                 1
 LV Size                2 GiB
 Current LE             1996
 Segments               2
 Allocation             inherit
 Read ahead sectors     auto
 - currently set to     8192
 Block device           253:3
[root@lvm lvmtest1]# lvremove /dev/vg1/lvsnapshot 		###########7,对此我们只能删除原始的snapshot后重建
Do you really want to remove active logical volume vg1/lvsnapshot? [y/n]: y
 Logical volume "lvsnapshot" successfully removed
[root@lvm lvmtest1]# lvcreate -L 2G -s -n lvsnapshot /dev/vg1/lv1 		###########8,新建snapshot为2G,与lv容量相同
 Logical volume "lvsnapshot" created.
[root@lvm lvmtest1]# lvdisplay /dev/vg1/lv1 
 --- Logical volume ---
 LV Path                /dev/vg1/lv1
 LV Name                lv1
 VG Name                vg1
 LV UUID                wgIeIU-Wv0I-9eo5-Y4cS-kNHB-mz3D-Tbblzu
 LV Write Access        read/write
 LV Creation host, time lvm, 2018-08-06 04:07:24 -0400
 LV snapshot status     source of
                        lvsnapshot [active]
 LV Status              available
 # open                 1
 LV Size                2 GiB
 Current LE             1996
 Segments               2
 Allocation             inherit
 Read ahead sectors     auto
 - currently set to     8192
 Block device           253:3
  
[root@lvm lvmtest1]# dd if=/dev/zero of=testfile bs=1M count=1800
1800+0 records in
1800+0 records out
1887436800 bytes (1.9 GB) copied, 20.1192 s, 93.8 MB/s
[root@lvm lvmtest1]# lvs /dev/vg1/lvsnapshot 
 LV         VG  Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
 lvsnapshot vg1 swi-a-s--- 2.00g      lv1    88.25           

当我创建的snapshot大于等于原始卷容量时,将原始卷写满,snapshot也不会到100%,进而就可以随便使用了。

四、LVM数据迁移

LVM迁移是LVM众多优秀特性之一,通过它,我们可以迁移逻辑卷到一个新的磁盘而不会丢失数据,也不用关机操作。该特性的功能是将数据从旧磁盘移动到新磁盘。通常,我们只是在一些磁盘发生错误时,才将数据从一个磁盘迁移到另外一个磁盘存储。

1、源设备操作

[root@lvm lvmtest1]# umount /dev/vg1/lv1 		###########卸载lv1
[root@lvm lvmtest1]# vgrename vg1 newvg		###########重命名vg,使之不与新设备vg冲突
  Volume group "vg1" successfully renamed to "newvg"
[root@lvm lvmtest1]# lvrename /dev/newvg/lv1 newlv		###########同样重命名lv
  Renamed "lv0" to "newlv" in volume group "newvg"
[root@lvm lvmtest1]# vgchange -an newvg		###########使vg处于不活动状态
  0 logical volume(s) in volume group "newvg" now active
 [root@lvm lvmtest1]# lvdisplay 
 
  --- Logical volume ---
  LV Path                /dev/newvg/newlv
  LV Name                newlv
  VG Name                newvg
  LV UUID                12CLK9-3E1O-tsWG-y08m-I5Yh-lUtC-as5YQ0
  LV Write Access        read/write
  LV Creation host, time lvm, 2018-08-06 03:49:44 -0400
  LV Status              NOT available			###########vg不活动了lv自然也就不活动了
  LV Size                6.99 GiB
  Current LE             1790
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
[root@lvm lvmtest1]# vgexport  newvg			###########导出newvg备用
  Volume group "newvg" successfully exported
[root@lvm lvmtest1]# pvdisplay 			###########可以看到两个分区的同一个vg都已经被导出了
  
  Physical volume "/dev/sdb1" of volume group "newvg" is exported
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               newvg (exported)
  PV Size               2.00 GiB / not usable 4.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              511
  Free PE               0
  Allocated PE          511
  PV UUID               SSfIeC-xv8e-pp9M-Kfe9-CEjV-KLUC-BEfGfA
   
  Physical volume "/dev/sdb5" of volume group "newvg" is exported
  --- Physical volume ---
  PV Name               /dev/sdb5
  VG Name               newvg (exported)
  PV Size               5.00 GiB / not usable 4.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              1279
  Free PE               0
  Allocated PE          1279
  PV UUID               TtbBh1-b6tm-fbEs-w1bI-lyLy-KXBb-A8qsOC

2、目标设备操作

[root@localhost ~]# lsblk			###########拆除硬盘,换到目标设备上后(此处为目标设备的分区)
NAME                   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                      8:0    0   10G  0 disk 
├─sda1                   8:1    0    1G  0 part /boot
└─sda2                   8:2    0    9G  0 part 
  ├─centos-root        253:0    0    8G  0 lvm  /
  └─centos-swap        253:1    0    1G  0 lvm  [SWAP]
sdb                      8:16   0   20G  0 disk 
├─sdb1                   8:17   0    2G  0 part 
├─sdb2                   8:18   0    2G  0 part 
│ └─vg1-lv1-real       253:2    0  3.9G  0 lvm  
│   ├─vg1-lv1          253:3    0  3.9G  0 lvm  
│   └─vg1-lvsnapshot   253:5    0  3.9G  0 lvm  
├─sdb3                   8:19   0    1K  0 part 
├─sdb5                   8:21   0    5G  0 part 
├─sdb6                   8:22   0    5G  0 part 
│ ├─vg1-lv1-real       253:2    0  3.9G  0 lvm  
│ │ ├─vg1-lv1          253:3    0  3.9G  0 lvm  
│ │ └─vg1-lvsnapshot   253:5    0  3.9G  0 lvm  
│ └─vg1-lvsnapshot-cow 253:4    0    2G  0 lvm  
│   └─vg1-lvsnapshot   253:5    0  3.9G  0 lvm  
└─sdb7                   8:23   0    6G  0 part 
[root@localhost ~]# pvscan		###########扫描一遍pv,发现exported VG
  PV /dev/sda2   VG centos          lvm2 [<9.00 GiB / 0    free]
  PV /dev/sdb1    is in exported VG newvg [<2.00 GiB / 0    free]
  PV /dev/sdb5    is in exported VG newvg [<5.00 GiB / 0    free]
  PV /dev/sdb2   VG vg1             lvm2 [<2.00 GiB / 0    free]
  PV /dev/sdb6   VG vg1             lvm2 [<5.00 GiB / <1.10 GiB free]
  Total: 5 [22.98 GiB] / in use: 5 [22.98 GiB] / in no VG: 0 [0   ]
[root@localhost ~]# vgscan
  Reading volume groups from cache.
  Found volume group "centos" using metadata type lvm2
  Found exported volume group "newvg" using metadata type lvm2
  Found volume group "vg1" using metadata type lvm2
[root@localhost ~]# vgimport newvg		###########加载导出的vg
  Volume group "newvg" successfully imported
[root@localhost ~]# vgdisplay newvg
  --- Volume group ---
  VG Name               newvg
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  10
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               6.99 GiB
  PE Size               4.00 MiB
  Total PE              1790
  Alloc PE / Size       1790 / 6.99 GiB
  Free  PE / Size       0 / 0   
  VG UUID               YCA5jl-VHmW-ikFR-SVML-jjmc-8Wej-ukpkML
   
[root@localhost ~]# vgchange -ay newvg		###########激活逻辑卷组
  1 logical volume(s) in volume group "newvg" now active                                         
[root@localhost ~]# lvdisplay /dev/newvg/newlv
  --- Logical volume ---
  LV Path                /dev/newvg/newlv
  LV Name                newlv
  VG Name                newvg
  LV UUID                12CLK9-3E1O-tsWG-y08m-I5Yh-lUtC-as5YQ0
  LV Write Access        read/write
  LV Creation host, time lvm, 2018-08-06 03:49:44 -0400
  LV Status              available		###########其实不难发现,激活vg的同时,lv也已经激活了
  # open                 0
  LV Size                6.99 GiB
  Current LE             1790
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:6

至此,我们已将原系统的lv迁移到目标系统上了,直接挂载即可使用。数据迁移完成。可以通过迁移有数据的lv来更直观的验证lvm迁移功能。

五、总结

以下是单vg扩容和加盘后扩容的省流版

[root@localhost ~]# pvcreate /dev/nvme0n1 
Physical volume "/dev/nvme0n1" successfully created.

[root@localhost ~]# vgcreate john /dev/nvme0n1
Volume group "john" successfully created

[root@localhost ~]# lvcreate -n lv0 -L 2G john
WARNING: xfs signature detected on /dev/john/lv0 at offset 0. Wipe it? [y/n]: y
Wiping xfs signature on /dev/john/lv0.
Logical volume "lv0" created.

[root@localhost ~]# mkfs.xfs /dev/john/lv0
meta-data=/dev/john/lv0          isize=512    agcount=4, agsize=131072 blks
       =                       sectsz=512   attr=2, projid32bit=1
       =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=524288, 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

[root@localhost ~]# mount /dev/john/lv0  /mnt/
[root@localhost ~]# lsblk
NAME       MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda          8:0    0   45G  0 disk
├─sda1       8:1    0  300M  0 part /boot
├─sda2       8:2    0  3.9G  0 part [SWAP]
└─sda3       8:3    0 35.9G  0 part /
sr0         11:0    1  4.4G  0 rom
nvme0n1    259:0    0    5G  0 disk
└─john-lv0 253:0    0    2G  0 lvm  /mnt
nvme0n2    259:1    0    5G  0 disk
[root@localhost ~]# vgex

[root@localhost ~]# lvresize -l +100%free /dev/john/lv0
Size of logical volume john/lv0 changed from 2.00 GiB (512 extents) to <5.00 GiB (1279 extents).
Logical volume john/lv0 successfully resized.

[root@localhost ~]# pvcreate /dev/nvme0n2
Physical volume "/dev/nvme0n2" successfully created.

[root@localhost ~]# vgextend john /dev/nvme0n2
Volume group "john" successfully extended

[root@localhost ~]# lvresize -l +100%free /dev/john/lv0
Size of logical volume john/lv0 changed from <5.00 GiB (1279 extents) to 9.99 GiB (2558 extents).
Logical volume john/lv0 successfully resized.

[root@localhost ~]# xfs_growfs /dev/john/lv0
meta-data=/dev/mapper/john-lv0   isize=512    agcount=4, agsize=131072 blks
       =                       sectsz=512   attr=2, projid32bit=1
       =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=524288, imaxpct=25
       =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
       =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 524288 to 2619392
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谁的BUG最难改

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值