LVM逻辑卷管理

news2024/12/24 9:05:35

目录

  • 一、LVM简介
    • 1、逻辑卷管理磁盘的优点
    • 2、缺陷
    • 3、LVM概述图
  • 二、LVM的使用
    • 1、创建逻辑卷
    • 2、使用逻辑卷
    • 3、删除逻辑卷
    • 4、LVM扩容
    • 5、LVM缩容
  • 三、Snapshot(快照功能)
    • 1、LVM-snapshot简介
    • 2、利用snapshot做备份(LV快照)
  • 四、LVM数据迁移
    • 1、源设备操作
    • 2、目标设备操作
  • 五、总结


一、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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/430105.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

整型在内存中的存储

在计算机底层&#xff0c;所有数据最终都会被表示为二进制形式。整型也不例外。本文将介绍在C语言中如何定义和操作整型变量&#xff0c;并解释整型在内存中的存储方式。 整型变量的定义和使用 在C语言中&#xff0c;可以用int关键字来定义一个整数型变量。例如&#xff1a; …

ChatGPT们接踵而至,AI会彻底改变我们的工作方式吗?

2023年开年&#xff0c;AI成为了舞台上聚光灯下的主角&#xff0c;AI 浪潮不仅让我们对人工智能的能力有了一次全新的理解&#xff0c;而且所有人的工作和生活都将受到不同程度的影响。 ChatGPT、Notion AI、New Bing、GPT-4、MidJourney v5、office copilot、Adobe Firefly、…

解决方案:炼丹师养成计划 Pytorch如何进行断点续训——DFGAN断点续训实操

我们在训练模型的时候经常会出现各种问题导致训练中断&#xff0c;比方说断电、系统中断、内存溢出、断连、硬件故障、地震火灾等之类的导致电脑系统关闭&#xff0c;从而将模型训练中断。 所以在实际运行当中&#xff0c;我们经常需要每100轮epoch或者每50轮epoch要保存训练好…

Python实现哈里斯鹰优化算法(HHO)优化卷积神经网络分类模型(CNN分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 2019年Heidari等人提出哈里斯鹰优化算法(Harris Hawk Optimization, HHO)&#xff0c;该算法有较强的全…

DAY 43 Apache的配置与应用

虚拟Web主机 概述 虚拟web主机指的是在同一台服务器中运行多个web站点&#xff0c;其中每一个站点实际上并不独立占用整个服务器&#xff0c;因此被称为"虚拟"web主机。通过虚拟web主机服务可以充分利用服务器的硬件资源&#xff0c;从而大大降低网站构建及运行成本…

TensorFlow 决策森林详细介绍和使用说明

使用TensorFlow训练、调优、评估、解释和部署基于树的模型的完整教程 两年前TensorFlow (TF)团队开源了一个库来训练基于树的模型&#xff0c;称为TensorFlow决策森林(TFDF)。经过了2年的测试&#xff0c;他们在上个月终于宣布这个包已经准备好发布了&#xff0c;也就是说我们…

在android项目上集成libyuv库以及使用linyuv库完成camera的缩放,旋转,翻转,裁剪操作

目录 一、下拉google官方的libyuv库代码 二、在android项目中集成libyuv库 1.环境配置 2.拷贝libyuv源码文件 ​编辑3.配置cmake libyuv相关的链接编译等 三、使用libyuv库 1.libyuv库完成camera的旋转 2.libyuv库实现翻转 3.libyuv库实现缩放 4.libyuv库实现裁剪 一…

为什么重视安全的公司都在用SSL安全证书?

我们今天来讲一讲为什么重视安全的公司都在用SSL证书 SSL证书是什么&#xff1f; SSL安全证书是由权威认证机构颁发的&#xff0c;是CA机构将公钥和相关信息写入一个文件&#xff0c;CA机构用他们的私钥对我们的公钥和相关信息进行签名后&#xff0c;将签名信息也写入这个文件…

对于数据库而言,其锁范围可以分为全局锁 、表级锁、 行级锁

一、全局锁 全局锁就是对整个数据库实例加锁。 MySQL 提供了一个加全局读锁的方法&#xff0c;命令是 Flush tables with read lock (FTWRL)。当你需要让整个库处于只读状态的时候&#xff0c;可以使用这个命令&#xff0c;之后其他线程的以下语句会被阻塞&#xff1a;数据更新…

DOM(1)

DOM&#xff08;文档对象模型&#xff09;&#xff1a;处理可扩展标记语言(HTML或XML&#xff09;的标准编程接口&#xff0c;可以改变网页的内容、结构和样式。DOM树&#xff1a; …

ubuntu18 网络问题

在/etc/netplan/*.yaml配置文件中&#xff1a; renderer的值可以是networkd&#xff0c;或者是NetworkManager 它俩的其中一个区别为&#xff1a; networkd在图像界面&#xff0c;networking setting中不显示网卡配置。 版权简介&#xff1a; 从Ubuntu 18.04.2版本开始&…

腾讯云4核8G轻量服务器12M支持多少访客同时在线?并发数怎么算?

腾讯云轻量4核8G12M轻量应用服务器支持多少人同时在线&#xff1f;通用型-4核8G-180G-2000G&#xff0c;2000GB月流量&#xff0c;系统盘为180GB SSD盘&#xff0c;12M公网带宽&#xff0c;下载速度峰值为1536KB/s&#xff0c;即1.5M/秒&#xff0c;假设网站内页平均大小为60KB…

网络安全:网络攻击原理与方法.

网络安全&#xff1a;网络攻击原理与方法. 网络攻击&#xff1a;是损害网络系统安全属性的危害行为。危害行为导致网络系统的机密性、完整性、可控性、真实性、抗抵赖性等受到不同程度的破坏。 目录&#xff1a; 常见的危害行为有四个基本类型&#xff1a; 网络攻击模型&…

项目实践 | 行人跟踪与摔倒检测报警

项目实践 | 行人跟踪与摔倒检测报警 小白学视觉 7月7日 原文地址&#xff1a;项目实践 | 行人跟踪与摔倒检测报警 1.简介 本项目的目的是为了给大家提供跟多的实战思路&#xff0c;抛砖引玉为大家提供一个案例&#xff0c;也希望读者可以根据该方法实现更多的思想与想法&…

为什么Uber从PostgreSQL换成了MySQL

说明&#xff1a;本文翻译自Why Uber Engineering Switched from Postgres to MySQL 引言 Uber的早期架构包括一个用Python编写的单一后端应用程序&#xff0c;它使用Postgres进行数据持久化。从那时起&#xff0c;Uber的架构发生了重大变化&#xff0c;转向了微服务和新数据…

比例放大器设置接线US-DAS1/US-DAS2

US-DAS1、US-DAS2比例放大器接线定义 1 CMD 指令 2 CMD- 指令- 3/4/5 N.C. 不接 6 ENA 使能 7 VREF_5V 参考电压5V 8 VREF_0V 参考电压0V 9 SOL_A 电磁铁A 10 SOL_A- 电磁铁A- 11 PWR 电源 12 PWR- 电源- 13 SOL_B- 电磁铁B- 15 RS485_A - 16 RS485_B -

LeetCode-盛最多水的容器-11题

LeetCode-盛最多水的容器-11题 题目中要求计算最大面积&#xff0c;即需要选择对应的长和宽。 最终解决方法&#xff1a;使用对撞指针 对撞指针的概念&#xff1a;是指在数组的两个端引入两个指针&#xff0c;左指针不断向右移动&#xff0c;右指针不断向左移动。最终到达两个…

Spring AOP切入点表达式

先来认识两个概念吧&#xff08;其实Spring AOP实现功能增强的方式就是代理模式&#xff09; 目标对象(Target)&#xff1a;原始功能去掉共性功能对应的类产生的对象&#xff0c;这种对象是无法直接完成最终工作的代理(Proxy)&#xff1a;目标对象无法直接完成工作&#xff0c;…

【学术搬砖】第一期

“一期一会” —— 珍惜我们遇见的论文&#xff0c;把和每个论文的相遇&#xff0c;当做一种缘分。我们会定期推荐若干优质学术论文&#xff0c;并分享一段总结&#xff0c;非常欢迎提出任何建议和想法。 【NeurIPS2022】ShufflfleMixer: An Effificient ConvNet for Image Su…

R -- 时序分析

brief 横截面数据对应着某个时间点的数据。 纵向的数据对应着一系列时间点的数据&#xff0c;某个变量随着时间的变动被反复测量。 研究纵向数据&#xff0c;也许会得到“时间”的答案。 描述时间序列 生成时序对象 x <- runif(20)ts(x) ts(x,frequency 12) ts(x,frequen…