ITPub博客

首页 > Linux操作系统 > Linux操作系统 > LVM 逻辑卷管理

LVM 逻辑卷管理

原创 Linux操作系统 作者:probe 时间:2020-08-03 22:38:07 0 删除 编辑

声明 :本文有一大部分内容属于参考别人博客,一小部分为自己所写


LVM是Linux环境中对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上、文件系统之下的一个逻辑层,可提高磁盘分区管理的灵活性。RHEL5默认安装的分区格式就是LVM逻辑卷的格式,需要注意的是/boot分区不能基于LVM创建,必须独立出来。


一.LVM原理

要想理解好LVM的原理,我们必须首先要掌握4个基本的逻辑卷概念。

1) PE  (Physical Extend)  物理拓展  , 也就是LVM的最小存储单位,默认大小为4M;可以通过调整PE块的数量来定义LV的容量。

2) PV  (Physical Volume)  物理卷  , 物理卷是LVM的最底层的元素,组成LVM的物理分区就是PV

3) VG  (Volume Group)  卷组  , 将各个独立的PV组合起来,所形成的一个存储空间称为VG;VG的大小就是整个LVM的空间大小。

4) LV  (Logical Volume)  逻辑卷  , 最终可以被用户格式化、挂载、存储数据的操作对象就是LV;LV与分区相类似,只不过LV可以更加灵活的调整容量。

5) snapshot     快照   ,快照用于保存原卷上有变化的数据。快照刚刚被创建时其内容与原卷是一模一样的,只有在原卷中的数据发生变化时,快照才会将被改动的数据的原数据保存起来。

我们知道在使用LVM对磁盘进行动态管理以后,我们是以逻辑卷的方式呈现给上层的服务的。所以我们所有的操作目的,其实就是去创建一个 LV(Logical Volume),逻辑卷就是用来取代我们之前的分区,我们通过对逻辑卷进行格式化,然后进行挂载操作就可以使用了。那么LVM的工作原理是什么呢?所谓无图无真相,咱们下面通过图来对逻辑卷的原理进行解释


1.将我们的物理硬盘格式化成PV(Physical Volume)

我们看到,这里有两块硬盘,一块是sda,另一块是sdb,在LVM磁盘管理里,我首先要将这两块硬盘格式化为我们的 PV(Physical Volume),也就是我们的物理卷,其实格式化物理卷的过程中LVM是将底层的硬盘划分为了一个一个的 PE(Physical Extend), 我们的LVM磁盘管理中PE的默认大小是4M大小,其实PE就是我们逻辑卷管理的最基本单位。比如说我有一个400M的硬盘,那么在将其格式化成PV的时候,其实际就是将这块物理硬盘划分成了100个的PE,因为PE默认的大小就是4M。这个就是我们的第一步操作。

2.创建一个VG(Volume Group)

在将硬盘格式化成PV以后,我们第二步操作就是创建一个卷组,也就是 VG(Volume Group),卷组在这里我们可以将其抽象化成一个空间池,VG的作用就是用来装PE的,我们可以把一个或者多个PV加到VG当中,因为在第一步操作时就已经将该硬盘划分成了多个PE,所以将多个PV加到VG里面后,VG里面就存放了许许多多来自不同PV中的PE,我们通过上面的图片就可以看到,我们格式化了两块硬盘,每个硬盘分别格式化成了3个PE,然后将两块硬盘的PE都加到了我们的VG当中,那么我们的VG当中就包含了6个PE,这6个PE就是两个硬盘的PE之和。通常创建一个卷组的时候我们会为其取一个名字,也就是该VG的名字。

3.基于VG创建我们最后要使用的LV(Logical Volume)

注意】PV以及VG创建好以后我们是不能够直接使用的,因为PV、VG是我们逻辑卷底层的东西,我们其实最后使用的是在VG基础上创建的 LV(Logical Volume),所以第三步操作就是基于VG来创建我们最终要使用的LV。

当我们创建好我们的VG以后,这个时候我们创建LV其实就是从VG中拿出我们指定数量的PE,还是拿上图来说,我们看到我们此时的VG里面已经拥有了6个PE,这时候我们创建了我们的第一个逻辑卷,它的大小是4个PE的大小,也就是16M(因为一个PE的默认大小是4M),而这4个PE有三个是来自于第一块硬盘,而另外一个PE则是来自第二块硬盘。当我们创建第二个逻辑卷时,它的大小就最多只有两个PE的大小了,因为其中的4个PE已经分配给了我们的第一个逻辑卷。

所以创建逻辑卷其实就是我们从VG中拿出我们指定数量的PE,VG中的PE可以来自不同的PV,我们可以创建的逻辑卷的大小取决于VG当中PE存在的数量,并且我们创建的逻辑卷其大小一定是PE的整数倍(即逻辑卷的大小一定要是4M的整数倍)。

4.将我们创建好的LV进行文件系统的格式化,然后挂载使用

在创建好LV以后,这个时候我们就能够对其进行文件系统的格式化了,我们最终使用的就是我们刚创建好的LV,其就相当于传统的文件管理的分区,我们首先要对其进行文件系统的格式化操作,然后通过mount命令对其进行挂载,这个时候我们就能够像使用平常的分区一样来使用我们的逻辑卷了。

我们在创建好LV以后,我们会在 /dev 目录下看到我们的LV信息,例如 /dev/vgname/lvname, 我们每创建一个VG,其会在/dev目录下创建一个以该VG名字命名的文件夹,在该VG的基础上创建好LV以后,我们会在这个VG目录下多出一个以LV名字命名的逻辑卷。

下面我们来对整个LVM的工作原理进行一个总结:

(1) 物理磁盘被格式化为PV,空间被划分为一个个的PE

(2) 不同的PV加入到同一个VG中,不同PV的PE全部进入到了VG的PE池内

(3) LV基于PE创建,大小为PE的整数倍,组成LV的PE可能来自不同的物理磁盘

(4) LV直接可以格式化后挂载使用

(5) LV的扩充缩减实际上就是增加或减少组成该LV的PE数量,其过程不会丢失原始数据

我们看到,我们这里如果要对LV进行扩充,直接加进来一块sdc硬盘,然后将其格式化成PE,然后将该PV加入到了VG当中,这个时候我们就可以通过增加LV中PE的数量来动态的对LV进行扩充了,只要我们的LV的大小不要超过我们VG空余空间的大小就行


二、创建LVM逻辑卷

熟悉了LVM的工作原理,首先是要将我们的物理硬盘格式化成PV,然后将多个PV加入到创建好的VG中,最后通过VG创建我们的LV。


三、拉伸一个逻辑卷

我们知道相比于传统磁盘管理方式的各种问题,使用LVM逻辑卷来管理我们的磁盘,我们可以对其进行动态的管理。在传统的磁盘管理方式中,我们如果出现分区大小不足的情况下,我们此时只能通过加入一块物理硬盘,然后对其进行分区,因为加入的硬盘作为独立的文件系统存在,所以对原有分区并没有影响,如果此时我们需要扩大分区,就只能先将之前的分区先卸载掉,然后将所有的信息转移到新的分区下,最后再将新的分区挂载上去,如果是在生产环境下,这样是非常麻烦的。正因为如此,我们才出现了LVM的磁盘管理方式,可以动态的对我们的磁盘进行管理。

我们首先来看下动态拉伸一个逻辑卷的示意图:


我们从上图可以看到,我们在对逻辑卷进行拉伸时,其实质就是向逻辑卷中增加PE的数量,而PE的数量是由VG中剩余PE的数量所决定的。

注意: 逻辑卷的拉伸操作可以在线进行,不需要卸载掉我们的逻辑卷

这样的好处就是当我们的逻辑卷的大小不够用时,我们不需要对其进行卸载,就可以动态的增加我们的逻辑卷的大小,并不会对我们的系统产生任何影响。例如如果我们的服务器上运行着一个重要的服务或者数据库,并要求我们7*24小时不间断保持在线,那么这样的动态增加逻辑卷的大小就非常的有必要了。


四、逻辑卷常用命令

命令总结:

PV:

pvcreate,pvs,pvdisplay,pvremove,pvmove,pvscan


VG:

vgcreate,vgs,vgdisplay,vgremove,vgscan,vgextend,vgreduce


LV:

lvcreate,lvs,lvdisplay,lvremove,lvextend,lvreduce,lvresize,lvscan


五、操作案例

1. 先查看系统当前的分区情况

[root@shell ~]# 

[root@shell ~]# lsblk    

[root@shell ~]# 

[root@shell ~]# fdisk  -l

[root@shell ~]# 

[root@shell ~]# pvdisplay 


[root@shell ~]# 

[root@shell ~]# vgdisplay 

[root@shell ~]# 

[root@shell ~]# lvdisplay 



2. 关机并给该虚拟机添加两块30G的磁盘


3. 开机查看新添加的磁盘是否被识别

[root@shell ~]# 

[root@shell ~]# lsblk 

[root@shell ~]# 

[root@shell ~]# fdisk  -l


4. 首先创建4个磁盘分区,且分区类型要改为8e

[root@shell ~]# 

[root@shell ~]# 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.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xe2dba289.
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-62914559, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-62914559, default 62914559): +10G
Partition 1 of type Linux and of size 10 GiB is set
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): p
Disk /dev/sdb: 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 label type: dos
Disk identifier: 0xe2dba289
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   8e  Linux LVM
Command (m for help): 
Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
Partition number (2-4, default 2): 2
First sector (20973568-62914559, default 20973568): 
Using default value 20973568
Last sector, +sectors or +size{K,M,G} (20973568-62914559, default 62914559): +10G
Partition 2 of type Linux and of size 10 GiB is set
Command (m for help): t
Partition number (1,2, default 2): 2
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): 
Command (m for help): p
Disk /dev/sdb: 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 label type: dos
Disk identifier: 0xe2dba289
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   8e  Linux LVM
/dev/sdb2        20973568    41945087    10485760   8e  Linux LVM
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

[root@shell ~]# 

[root@shell ~]# partprobe  /dev/sdb

[root@shell ~]# 

[root@shell ~]# lsblk 

[root@shell ~]# 

[root@shell ~]# fdisk  -l

[root@shell ~]# 

[root@shell ~]# fdisk  /dev/sdc

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.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x2b464b1e.
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-62914559, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-62914559, default 62914559): +10G
Partition 1 of type Linux and of size 10 GiB is set
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): p
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 label type: dos
Disk identifier: 0x2b464b1e
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048    20973567    10485760   8e  Linux LVM
Command (m for help): 
Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
Partition number (2-4, default 2): 2
First sector (20973568-62914559, default 20973568): 
Using default value 20973568
Last sector, +sectors or +size{K,M,G} (20973568-62914559, default 62914559): +10G
Partition 2 of type Linux and of size 10 GiB is set
Command (m for help): t
Partition number (1,2, default 2): 2
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): p
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 label type: dos
Disk identifier: 0x2b464b1e
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048    20973567    10485760   8e  Linux LVM
/dev/sdc2        20973568    41945087    10485760   8e  Linux LVM
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

[root@shell ~]# 

[root@shell ~]# partprobe  /dev/sdc

[root@shell ~]# 

[root@shell ~]# lsblk 

[root@shell ~]# 

[root@shell ~]# fdisk  -l

[root@shell ~]# 

[root@shell ~]# ls  -l  /dev/sdb*  /dev/sdc*


5. 将上面划分出来的4个分区创建成4个PV

[root@shell ~]# 

[root@shell ~]# pvcreate  /dev/sdb{1,2}

[root@shell ~]# 

[root@shell ~]# pvcreate  /dev/sdc{1,2}

[root@shell ~]# 

[root@shell ~]# pvs

[root@shell ~]# 

[root@shell ~]# pvscan 

[root@shell ~]# 

[root@shell ~]# pvdisplay         #查看pv的详细信息


6. 创建vg

[root@shell ~]# 

[root@shell ~]# vgcreate  vg1  /dev/sdb{1,2}

  Volume group "vg1" successfully created

[root@shell ~]# 

[root@shell ~]# vgcreate  vg2  /dev/sdc{1,2}

  Volume group "vg2" successfully created

[root@shell ~]# 

[root@shell ~]# vgs

[root@shell ~]# 

[root@shell ~]# vgscan 

[root@shell ~]# 

[root@shell ~]# vgdisplay 


7.创建lv

[root@shell ~]# 

[root@shell ~]# vgs           #查看当前可用的vg信息

由上图可以看出,刚刚创建了个两个VG,容量分别为20G和20G,下面我们就在这两个VG上分别创建lv

[root@shell ~]# 

[root@shell ~]# lvcreate  -L  5G  -n  lv01  vg1              #在卷组1中创建一个名为“lv01”的逻辑卷

    Logical volume "lv01" created. 

[root@shell ~]# 

[root@shell ~]# lvs        #简单查看一下逻辑卷

[root@shell ~]# 

[root@shell ~]# lvscan 

[root@shell ~]# 

[root@shell ~]# lvdisplay 

[root@shell ~]# 

[root@shell ~]# lvcreate  -L  7G  -n  lv02  vg2              #在卷组2中创建一个名为“lv02”的逻辑卷

  Logical volume "lv02" created.

[root@shell ~]# 

[root@shell ~]# lvs

[root@shell ~]# 

[root@shell ~]# lvscan 

[root@shell ~]# 

[root@shell ~]# lvdisplay 


8.lv的挂载

在对LV进行格式化、挂载之前,先来说明下lv的访问路径问题。

我们 可以使用两种路径来访问lv:

(1) /dev/VG_NAME/LV_NAME

如:

/dev/vg1/lv01

/dev/vg2/lv02 

  (2) /dev/mapper/VG_NAME-LV_NAME

如:

/dev/mapper/vg1-lv01 

/dev/mapper/vg2-lv02


以上两路径均为符号链接,指向的文件为/dev/dm-#,如下图所示:

[root@shell ~]# 

[root@shell ~]# ll /dev/vg1/lv01

lrwxrwxrwx. 1 root root 7 Aug  5 00:40 /dev/vg1/lv01 -> ../dm-2

[root@shell ~]#

[root@shell ~]# ll /dev/mapper/vg1-lv01 

lrwxrwxrwx. 1 root root 7 Aug  5 00:40 /dev/mapper/vg1-lv01 -> ../dm-2 

[root@shell ~]#

[root@shell ~]# mkfs.xfs  /dev/vg1/lv01           #格式化逻辑卷lv01

[root@shell ~]# 

[root@shell ~]# mkfs.xfs  /dev/vg2/lv02          #格式化逻辑卷lv02

[root@shell ~]# 

[root@shell ~]# mkdir  /data01

[root@shell ~]# mkdir  /data02

[root@shell ~]# 

[root@shell ~]# mount  /dev/vg1/lv01  /data01             #将逻辑卷lv01挂载到/data01目录

[root@shell ~]# mount  /dev/vg2/lv02  /data02             #将逻辑卷lv02挂载到/data02目录 

[root@shell ~]# 

[root@shell ~]# df  -hT             #查看磁盘分区挂载情况

[root@shell ~]# 

[root@shell ~]# vi  /etc/fstab          #设置磁盘分区实现开机自动挂载

#在配置文件最末尾增加需要自动挂载的磁盘分区即可

/dev/vg1/lv01 /data01 xfs    defaults 0 0

/dev/vg2/lv02         /data02                    xfs       defaults        0 0

[root@shell ~]# 

[root@shell ~]# cat  /etc/fstab         #查看写入的内容


9.逻辑卷的扩展

扩展前需要思考的问题:

1)先确定扩展的目标大小,并确保对应的卷组中有足够的空间;

2)扩展物理边界,使用lvextend命令;

3)扩展逻辑边界,使用resize2fs命令


操作案例:

将逻辑卷lv01扩展到8G

[root@shell ~]# 

[root@shell ~]# lvextend  -L  8G  /dev/vg1/lv01

[root@shell ~]# 

[root@shell ~]# lvs  /dev/vg1/lv01 

参数说明:

-L  [+]8G:指定扩展的容量    

如果带+号的话,表示扩展的容量是在原来的基础上加上8G的容量;

如果不带+号的话,表示直接扩展容量到8G

-l  [+] #:指定扩展的容量

如果带+号,表示扩展的容量是在原来的基础上加上#个PE的容量;

如果不带+号,表示直接扩展到#个PE的容量


[root@shell ~]#

[root@shell ~]# df  -hT          #查看文件系统的挂载情况

由上图得知,在执行完逻辑卷扩容的操作以后,发现lv01的文件系统空间并没有增加,依然是扩容之前的5G,这是为什么呢?难道说之前的扩容没有成功嘛?

原因是执行完扩容操作后,还缺少以下一个操作:

[root@shell ~]# 

[root@shell ~]# xfs_growfs  /dev/vg1/lv01        #调整逻辑卷分区 /dev/vg1/lv01 的大小

[root@shell ~]# 

[root@shell ~]# df  -hT             #再次查看,发现果然扩容成功了


特别注意的是:

resize2fs       命令         针对的是ext2、ext3、ext4文件系统

ext2/ext3/ext4文件系统的调整命令是resize2fs (增大和减小都支持)

xfs_growfs  命令          针对的是xfs文件系统

xfs文件系统的调整命令是xfs_growfs (只支持增大)

就是说:xfs文件系统只支持增大分区空间的情况,不支持减小的情况(切记!!)

如果硬要减小的话,只能在减小后将逻辑分区重新通过mkfs.xfs命令重新格式化才能挂载上,这样的话这个逻辑分区上原来的数据就丢失了。如果有重要文件,那就歇菜喽~~~


[root@shell ~]# 

[root@shell ~]# lvextend  -L  +11G  /dev/vg1/lv01       #将逻辑卷lv01在原来8G大的基础上,再增加11G,即扩容到19G

[root@shell ~]# lvs  /dev/vg1/lv01 

[root@shell ~]# 

[root@shell ~]# df  -hT

[root@shell ~]# 

[root@shell ~]# xfs_growfs   /dev/vg1/lv01        #执行调整

[root@shell ~]# 

[root@shell ~]# df  -hT


上面的实例中是在VG中还有剩余空间的情况下进行的LV扩展,那么如果VG空间已经全部用完,这时再想增加扩展逻辑卷应该将新的PV加入到VG中以获得更多的空间

[root@shell ~]# 

[root@shell ~]# vgs       #由图可知,所剩VG空间已经不足1024M,急需扩容

 先执行关机,给系统添加1块10G大小的磁盘

开机,查看新增加的磁盘是否被识别

[root@shell ~]# 

[root@shell ~]# lsblk

[root@shell ~]# 

[root@shell ~]# fdisk  -l

[root@shell ~]# 

[root@shell ~]# fdisk  /dev/sdd          #创建新分区

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.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xc7cfb7dd.
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-20971519, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519): +9G
Partition 1 of type Linux and of size 9 GiB is set
Command (m for help): p
Disk /dev/sdd: 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: 0xc7cfb7dd
   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1            2048    18876415     9437184   83  Linux
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

[root@shell ~]# 

[root@shell ~]# lsblk 

[root@shell ~]# 

[root@shell ~]# fdisk  -l

[root@shell ~]# 

[root@shell ~]# pvcreate   /dev/sdd1

[root@shell ~]# pvs  /dev/sdd1

[root@shell ~]# 

[root@shell ~]# vgextend  vg1  /dev/sdd1        #将pv“ /dev/sdd1”加入到vg “vg1”中,实现对vg1的扩容

[root@shell ~]# 

[root@shell ~]# vgs

这样就可以再对LV进行扩展了……


10.逻辑卷的缩减(减小)

缩减前需要思考的问题:

1)先确定缩减后的目标大小,并确保目标逻辑卷中有足够的空间可用;

2)卸载逻辑卷,并要执行强制检测,使用e2fsck -f命令;

3)缩减逻辑边界,使用resize2fs命令;

4)缩减物理边界,使用lvreduce命令


注意:

xfs类型的逻辑卷不支持缩减


接下来演示使用ext4类型的lvm来演示逻辑卷的缩减:



11.卷的移除

1)移除逻辑卷

[root@shell ~]# 

[root@shell ~]# umount  /dev/vg1/lv01         #先卸载逻辑卷

[root@shell ~]# lvremove  /dev/vg1/lv01       #移除逻辑卷

[root@shell ~]# lvs

[root@shell ~]# vgs

  2)移除卷组

[root@shell ~]# 

[root@shell ~]# vgremove  vg1         #移除卷组

[root@shell ~]# vgs

[root@shell ~]# pvs

  3)移除物理卷

[root@shell ~]# 

[root@shell ~]# pvremove   /dev/sd{b1,b2,d1}          #一条命令移除3个物理卷

[root@shell ~]# pvs

上面的实例中我们将拥有3个PV的VG整个移除,如果我们只想移除VG中的个别PV可以进行如下操作:

[root@shell ~]# 

[root@shell ~]# vgreduce   vg2    /dev/sdc2        #从vg2中移除1个pv“/dev/sdc2” 

[root@shell ~]# vgs

[root@shell ~]# pvs

再来看一种情况,如下图,卷组vg2中拥有一个逻辑卷lv02,现在要求在不对lv02进行任何操作的情况下移动物理卷/dev/sdc1

[root@shell ~]# 

[root@shell ~]# vgs

[root@shell ~]# lvs

我们先来直接移除/dev/sdc1:

[root@shell ~]# 

[root@shell ~]# vgreduce  vg2  /dev/sdc1           #从卷组“vg2”中移除pv“/dev/sdc1”

结果提示此PV正在使用,此时我们来看一下PV的信息:

[root@shell ~]# 

[root@shell ~]# pvdisplay   /dev/sdc1

由于/dev/sdc1有被占用的PE,如果想要移除此PV,需要先将PE块的空间移动到其它的PV上:

[root@shell ~]# 

[root@shell ~]# vgextend  vg2  /dev/sdc2       #将物理卷/dev/sdc2加入到卷组vg2中

[root@shell ~]# pvs

[root@shell ~]# 

[root@shell ~]# pvmove  /dev/sdc1  /dev/sdc2         #将/dev/sdc1上的PE块移动到/dev/sdc2上

再来移除/dev/sdc1:

[root@shell ~]# 

[root@shell ~]# vgreduce  vg2  /dev/sdc1        #从卷组“vg2”中移除pv“/dev/sdc1”

[root@shell ~]# pvremove  /dev/sdc1            #移除物理卷

[root@shell ~]# pvs

12.创建卷快照

原理:系统快照(snapshot)是 lvm的另外一种重要的功能,快照就是将当时的数据记录下来,就好像照相记录一样,以后数据有任何改动,原数据会被移动到快照区,没有被改变的区域则由快照区与文件系统共享。

由于快照区和原本的 LV共享很多 PE,所以快照区与被快照的区域必须在同一个 VG上


创建快照与创建逻辑卷类似,使用-s选项,后面指明是对哪个逻辑卷做操作即可。

操作案例:

以上面创建的lv02为例进行演示

[root@shell ~]# 

[root@shell ~]# lvs  |  grep  lv02

1)挂载lv

[root@shell ~]# 

[root@shell ~]# mount  /dev/vg2/lv02  /data02

[root@shell ~]# df  -h

[root@shell ~]# 

[root@shell ~]# cd  /data02       #切换到该目录

[root@shell data02]# touch  {1,2,3}          #创建3个文件

[root@shell data02]# ls

1  2  3

[root@shell data02]#

2)为  /dev/vg2/lv02 创建快照

[root@shell data02]# 

[root@shell data02]# lvcreate  -L  1G  -s  -n  lv02_snap01  /dev/vg2/lv02          #为逻辑卷“ /dev/vg2/lv02 ”创建一个大小为1G的名叫 lv02_snap01 的快照

[root@shell data02]# lvs

[root@shell data02]# lvscan 

[root@shell data02]# 

[root@shell data02]# mount  /dev/vg2/lv02_snap01  /lv_snap  -onouuid,ro       #将卷快照以只读的方式挂载到   /lv_snap

[root@shell data02]# 

注意:

如果快照源逻辑卷使用的是xfs 的文件系统,挂载的时候需要加入 -onouuid,ro  选项;

且创建快照的时候不能指定-p r  选项,快照不需要格式化

[root@shell lv_snap]# 

[root@shell lv_snap]# diff /data02   /lv_snap         #经比较发现两个文件一摸一样

[root@shell ~]# ls /data02

1  2  3

[root@shell ~]# 

[root@shell ~]# ls /lv_snap

1  2  3

[root@shell ~]# 























 




 
 
 
 


 
 











 









 





 











  


 



 


 



















来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69980869/viewspace-2708974/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论
爱学习,爱分享

注册时间:2020-08-03

  • 博文量
    6
  • 访问量
    2608