逻辑卷管理器(LVM

     逻辑卷在生产环境中有些企业里会用到,但有些企业呢觉得逻辑卷,他是一个逻辑上的软件的东西。他是建立在硬件分区,或者硬盘之上的软件的管理方式,所以觉得他,要是数据放在上面,数据损坏了,或者系统出故障了,我们恢复数据是比较难得。他不像分区,分区很简单,像有些数据中心的数据恢复工具,拿过来就可以直接恢复。但是逻辑卷是更上层的一个,就想RAID一样,我的数据分布的位置,我自己也不知道,不像磁盘分区,我的数据放在哪个分区里,就放在哪个分区里。而RAID我们都知道,他的数据可能分布在好几个成员里面。所以将来出故障,我要恢复的话,我的东找一块,西找一块,我的把他凑起来。所以这个难度就比较大,所以逻辑卷也有这样的隐患。但逻辑卷突出的优势就是,我们有逻辑卷,组织磁盘空间,他跟RAID类似,他把好几个硬盘或者分区,逻辑的组织在一起,组合在一块,我们在用的时候就感觉这是一块硬盘。这样的话,无形中磁盘容量就变大。

     比如说我们前面讲的,ext4,或者说MBR的分区,最多分多大啊?

是不是2T,那如果说,我的一个文件就是很大,4T,MBR分不了,那怎么办?

那么这时我们就用逻辑卷,逻辑卷他可以把好几个分区组合在一块用。成了一个了,那是不是就可以突破2T的容量了?这时容量变大,这时逻辑捐的一个优点。另外我把逻辑卷组合在一起后,将来如果数据空间仍然不够,那我还可以扩展。怎么变大?买硬盘,把硬盘插上,加入到逻辑卷里面。把硬盘的容量加进去了,整的逻辑卷的容量就变大了。

     当然我感觉这个硬盘没用了,把他一移走也可以。容量就缩减了,所以逻辑卷的容量可以增加,也可以缩减。他不像分区,分完了就固定下来了。这是他的突出优势。

说了半天,总结一下,逻辑卷其实就是有两个优点。

第一:逻辑卷可以讲多个硬盘逻辑上建立一个硬盘使用。

第二:逻辑卷的容量可以增加也可以缩减,是动态的。

下面咱们看逻辑卷是怎么实现的:

逻辑卷他的实现方式,需要三大步:

                            逻辑卷管理器(LVM)_创建

那么我们结合图分步实现。

第一步:

先把我们的硬盘或者分区,变成物理卷,名称为physical volumes

(注意:这里做物理卷,可以用硬盘,也可以用分区,就像我们前面做RAID一样。RAID不就是拿整块硬盘做也行,用一个分区做也行。)

我们这可以拿硬盘也可以拿分区,那么第一步,先把硬盘或者分区先变成物理卷,名称为physical volumes

用pv命令,先把普通的硬件,变成物理卷。

命令:

#pvcreate /dev/DEVICE

/dev/DEVICE      //物理卷的名字,和原来的物理设备的名字是一样的,没什么变化。

第二步:

我们将物理卷,再加入到卷组中:

卷组名称: volume group

     那么加入到卷组后,我们结合上图发现,图已经发生变化了,原来是四个成员,现在成了一个了。那么这时候就相当于,我们把物理上的多块硬盘或者分区,逻辑的放在了一个大硬盘一样,这个卷组他有自己的名字,这时候我们就把这个卷组理解成一个硬盘。他的大小,就是好几个硬盘的总和,那卷组就相当于硬盘,这时候我们就可以这样理解了,那有硬盘了,那硬盘是不是通常要分区啊?那么我们在大的卷组里面再分成小的,当然我们不把这些小的叫分区了,我们称之为,逻辑卷。

逻辑卷名称: logical volumes

     逻辑卷,就是从卷组中取出的一部分空间。他的空间是来自于卷组的。我可以在卷组里分若干个逻辑卷,当然我也可以只分一个,把所有的卷组空间全部占光,这也没问题。

     那么逻辑卷的空间是来自于卷组,而卷组的空间是来自于真正的物理成员。所以我们如果说某个逻辑卷的空间不够了,我就从卷组中要空间。卷组中只要有剩余的空间,我就可以扩展,当然卷组空间如果不够了,那我就在增加新硬盘。这样卷组的空间就大了,卷组有空间了,我就可以扩展逻辑卷。

     那么对应的命令就是:

pvcreate   //创建物理卷

vgcreate   //创建卷组

lvcreate   //创建逻辑卷

物理卷是用固定大小的物理区域(PhysicalExtent ,PE )来定义的。

其中这里面有一个概念需要我知道,叫:PE (Physical Extent)即,物理的扩展,那这个是什么意思呢?这个就是在我们扩展的时候,或者缩减的时候,系统会自动的以整个PE整数倍进行扩展。而PE的大小是可以指定的。可以很大,也可以很小,比方说我给指定32M,一下子给我分配32M他是一个PE.一个PE为单位分配的。

所以逻辑卷的大小,应该是PE的整数倍。增大或缩小都是安装PE的整数倍来进行的。

 

 

 

逻辑卷(LVM)的操作

我先看一下我的硬盘

lsblk

逻辑卷管理器(LVM)_linux_02

 

我拿硬盘或者分区都可以做。

我先把前面的sda整理一下

逻辑卷管理器(LVM)_创建_03

我发现,在fdisk管理磁盘的交互式界面中显示的分区数,跟lsblk看到的分区数不一样,那这我们就知道这是不同步导致的,那么我们同步一下。

#partx -d --nr 7-8 /dev/sda

逻辑卷管理器(LVM)_创建_04

这样就同步了。

我们再看看b硬盘,

逻辑卷管理器(LVM)_逻辑卷_05

发现也不同步,那我们执行一样的命令同步一下。c盘也是,因为b,c硬盘都是一个

逻辑卷管理器(LVM)_创建_06

这样我们就把环境整理好了,接下来我们开始试验一下创建逻辑卷

我们那sda的一个分区,以及拿sdb的整个硬盘,即一个分区,一个硬盘。来做物理卷。

我先拿一个分区来做物理卷,那我现在sda上先分一个分区,

逻辑卷管理器(LVM)_逻辑卷_07

逻辑卷管理器(LVM)_逻辑卷_08

分完区后,这里也要注意,他也存在改ID的问题。在创建逻辑卷的时候,我们在进行第一步创建物理卷的时候,只要是分区,就要改ID,要是整块硬盘就不用改了。

因为我们这里是操作分区,所以改id,我们要记住,逻辑卷的id是8e

操作如下,

逻辑卷管理器(LVM)_linux_09

逻辑卷管理器(LVM)_逻辑卷_10

逻辑卷管理器(LVM)_逻辑卷_11

逻辑卷管理器(LVM)_创建_12

保存退出。

我们执行lsblk看一下分区表是否同步,不同步,因为这里是加分区,所以我们执行

#part -a /dev/sda      //这一步很关键,因为不让内核识别他,那就不能进行常见物理卷。

逻辑卷管理器(LVM)_linux_13

发现同步了。

那接下来我把b硬盘直接拿过来用了,因为是硬盘,他就不存在,-t 跟改id的问题了。

第一步:

把物理的设备变成物理卷。所以用pvcreate,我们在执行创建物理卷之前,我们先用pvs来查看一下,当前系统中是否有了而存在的物理卷。

逻辑卷管理器(LVM)_创建_14

表示一个都没有。

我们还可以用pvdisplay看的更详细,

逻辑卷管理器(LVM)_创建_15

这也表示一个也没有。

接下来我们创建物理卷。

逻辑卷管理器(LVM)_创建_16

创建成功。

接下来我们再用pvs来查看

逻辑卷管理器(LVM)_linux_17

或者用pvdisplay来查看

逻辑卷管理器(LVM)_逻辑卷_18

我们从中可以看到,VG name 是空的,是因为我还没有创建卷组,没用将他们加入到卷组里面。

并且我们还可以看到有一个PE Size 是0,这就是我们说的物理的区域,在我们创建卷组的时候可以指定大小。在光创建PV的时候是没有的。

第二步:

我们把物理卷加到卷组里,加到卷组实际上就是创建卷组的名字。

在创建之前,同样我们看看有没有卷组,vgs ,或者 vgdisplay

逻辑卷管理器(LVM)_逻辑卷_19

空的,表示目前还没有卷组。

接下来,创建卷组,vgcreate 创建卷组,是不是要起名啊,那叫什么名字呢?例如叫vg0,这名字由我个人指定的,叫什么都行。然后我当然要指定成员啊,这个卷组里面是谁在啊,则 /sd{a7,b},这个时候把这两个成员加到vg0里面。也就意味着vg0创建出来了。

综合上述分析,我们可以

逻辑卷管理器(LVM)_linux_20

创建出来以后,我们vgs查看一下

逻辑卷管理器(LVM)_创建_21

可以看到,有两个PV,里面没有逻辑卷,总共大小为25G.

我们在用pvs查看一下,发现两个物理卷已经在vg0里面了

逻辑卷管理器(LVM)_逻辑卷_22

这时候我们用pvdisplay就看的更详细了。显示,他已经加入到vg0里,同时默认制定了PE的大小,这个大小为4M,实际上我们是可以在创建卷组的时候加选项指定PE大小,我刚才没指定。

逻辑卷管理器(LVM)_创建_23

接下来,我们vgdisplay,可以看到这个VG是可读可写的,还可以看到free pe空闲的PE个数是多少。

alloc PE 分配出去PE多少,是0个。

逻辑卷管理器(LVM)_创建_24

这时候vg0相当于一个硬盘出来了,这个硬盘里没有分区相当于。接下来我们可以在vg0中选出一个区域来定义逻辑卷了。

在创建逻辑卷之前,lvs 或者lvdisplay 查看逻辑卷,应该都是空的。

逻辑卷管理器(LVM)_逻辑卷_25

第三步:

我们用lvcreate 创建逻辑卷

创建逻辑卷,要指定一个名字,这个随意指定,用选选项-n 指定。比如说叫lv0.然后要指定逻辑卷的大小,用选项-L 为什么要指定大小?卷组总共25G,我从中取多少?所以要指定大小。大小的话有两种单位,小写l和大写L

-l 就是数PE个数

-L 就是直接指定容量

(注意:用 -L指定容量,肯定不是那么准确,因为他必须是4M的整数倍。)

接下来就是指定从哪个卷组中取,在系统中可能有多个卷组。

创建逻辑卷如下:

逻辑卷管理器(LVM)_linux_26

表示创建成功。

我们再次查看vgdisplay

逻辑卷管理器(LVM)_逻辑卷_27

这时候我们可以查看lvdisplay

逻辑卷管理器(LVM)_linux_28

我们可以看到逻辑卷的名称为 /dev/vg0/lv0并且上面的LE其实就是PE,read/write表示可读可写。

但是我们要知道,这个设备名不是真正的设备名,他是一个软连接

逻辑卷管理器(LVM)_逻辑卷_29

真正的设备名是dm-0,但是他太难记了,一点意义都没有。我们再创建一个逻辑卷,就叫dm-1,所以我们用软连接/dev/vg0/lv0更方便。

实际上还有一个/dev/mapper/vg0-lv0他也是一个软连接。都可以指定访问这个逻辑卷。

逻辑卷管理器(LVM)_创建_30

 

这样,逻辑军建好了,就相当于分了区了,所以就可以该格式化了。

我们这时在centOS6上操作的,所以我们格式化xfs是不支持的,所以我们格式化为ext4

#mkfs.ext4 /dev/vg0/lv0   如下图所示:

逻辑卷管理器(LVM)_创建_31

分完区后,该挂载挂载:

vim /etc/fstab

我们的挂载设备名最好写UUID,这里我们写设备名称了就。如下图所示:

逻辑卷管理器(LVM)_linux_32

然后我们创建挂载点目录,进行挂载

逻辑卷管理器(LVM)_linux_33

挂在上之后,我们就可以使用了,我们可以复制一些文件过去

#cp /etc/* .

逻辑卷管理器(LVM)_逻辑卷_34

 

 

这是正常的创建。

接下来我们看扩展,假设空间不够了,当然现在是够了,现在才是1%嘛

逻辑卷管理器(LVM)_创建_35

我们假设不够了,总共10个G,我们快写满了,

逻辑卷管理器(LVM)_创建_36

那我们开扩,但是扩有个前提就是,我们先看看,我们能够扩多少?

逻辑卷管理器(LVM)_逻辑卷_37

也就是说,我们要想扩,那我们应该先看看vg0里面还剩多少空间,没有了,那我们就不能扩了,那我们一看,还剩15个G,那我还能从这15个G中再取出来一些空间,当然我可以在这个vg0里面可以创建多个逻辑卷的,这里我就一个了

那现在我要扩展,就用lvextend

这时候扩展多大,也是有两个单位, -l 和 -L

-l   小写l是表示扩展到多少个PE,

逻辑卷管理器(LVM)_逻辑卷_38

用lvdisplay可以查看到,现在我有2560个PE,用vgdisplay可以查看到还剩下3841个PE

逻辑卷管理器(LVM)_linux_39

一定注意 -l是扩展到多少个PE

我就可以这样写 lvextend -l 4000 这表示,我由现在的2560扩展到4000,就是从3841里面再取 4000-3841个PE,当然我们还可以这样写, lvextend -l +1440 或者我还可以这样写, lvextend -L20G 这表示直接到20G,或者还可以写 lvextend-L +10G

然后就是指定对谁增加, lvextend -L +10G /dev/vg0/lv0

逻辑卷管理器(LVM)_linux_40

表示成功加上10G。

我们查看一下是否添加成功

逻辑卷管理器(LVM)_创建_41

说明成功。

但是我们在查看逻辑卷时,发现还是10G,

逻辑卷管理器(LVM)_linux_42

这是因为df看的不是空间的东西,是看的文件系统的大小,什么是文件系统?就是ext4格式化的,我原来逻辑卷的10G是被格式化的,现在加上的10G,还没有格式化,也就是说上面还没有文件系统,所以要同步文件系统,把文件系统同步过去,我们才能用df看,

执行命令:

#resize2fs /dev/vg0/lv0

就是同步文件系统,注意这个命令只能同步ext系列的文件系统,

逻辑卷管理器(LVM)_linux_43

同步完了么再查看一下,显示成功了。

逻辑卷管理器(LVM)_创建_44

这就是扩展文件系统。

我们发现,我们在扩展的时候,一直没有取消挂载,所以用户的使用是不受影响的吧,所以他的扩展是在线扩展。

 

 

假设卷组没空间了,我们就加硬盘,先扩展卷组,再扩展逻辑卷。

这里我看到我有一个c盘,我直接将c盘加进去。

逻辑卷管理器(LVM)_逻辑卷_45

那么加硬盘怎么加?

首先我们把C盘变成物理卷,然后加入到卷组中。

这里先创建物理卷成功

逻辑卷管理器(LVM)_linux_46

然后我们要知道,我们现在创建的这个物理卷他不属于任何一个卷组,

可以用pvdisplay来查看

逻辑卷管理器(LVM)_创建_47

那这时我们将其加入到vg0卷组就行

使用命令:

#vgextend vg0 /dev/sdc

逻辑卷管理器(LVM)_linux_48

现在添加成功。

我们看到卷组的容量又变大了,这样逻辑卷再扩就很轻松。

逻辑卷管理器(LVM)_创建_49

逻辑卷最大的优势就是,扩展的时候非常方便。

逻辑卷要想扩展,前提是,卷组中有剩余的空间,卷组中如果没有剩余的空间,则逻辑卷就无法动态扩建,而且也可以也可以将卷组进行扩充,卷组加硬盘,或加分区都可以。

我们可以先用命令df查看一下分区的挂在情况。可以看到,我们的挂载中已经有一个逻辑卷了。

逻辑卷管理器(LVM)_创建_50

用命令lvs查看一下,看到我们的逻辑卷为10G大小,名称为lv0

逻辑卷管理器(LVM)_逻辑卷_51

我们用命令lvdisplay查看,会显示更多的详细信息:

逻辑卷管理器(LVM)_逻辑卷_52

我们还利用ll别名的命令查看到逻辑卷的名称有两个,并且都是软连接:

逻辑卷管理器(LVM)_逻辑卷_53

我们用df -h 命令可以看到,挂载分区的信息:

逻辑卷管理器(LVM)_逻辑卷_54

用vgs命令查看:卷组的信息:可以看到,我这个卷组剩余空间为35G,所以我们的逻辑卷还可以扩展。

逻辑卷管理器(LVM)_创建_55

如果想将vg0这个卷组中所有的空间全部加入到lv0这个逻辑卷中,那我们怎样扩?

我们还想用lvextend -L +35G /dev/vg0/lv0其实这样是不准确的,因为我们这样增加,或者缩减都是加或减PE的整数倍,而PE默认大小是4M,所以我们这样指定的话,肯定是不准确的。

这时我们应该用,-l +#%FREE 即按照剩余的百分比来加,是最精确的。

这里我们将剩余的所有空间都加入到,lv0中,所以我们应该这样写

#lvextend -l +100%FREE/dev/vg0/lv0

然后再进行文件系统同步

#resize2fs /dev/vg0/lv0

综合上面的两条命令,我们可以写成一条命令:

#lvextend -r -l +100%FREE /dev/vg0/lv0

逻辑卷管理器(LVM)_逻辑卷_56

我们现在再查看一下vg信息,和lv信息:

逻辑卷管理器(LVM)_linux_57

逻辑卷管理器(LVM)_逻辑卷_58

 

下面我们来看磁盘的缩减

我们用df命令来查看当前的逻辑卷的挂载情况:

逻辑卷管理器(LVM)_创建_59

逻辑卷管理器(LVM)_逻辑卷_60

发现有一个逻辑卷。大小是45G,那我们现在不想让lv0这个逻辑卷用这么大的空间,我想在vg0这个卷组中在创建一个逻辑卷,但是现在vg0所有空间都被lv0占用着,所以这是就用到了

缩减逻辑卷:

缩减逻辑卷,不能在线缩减,所以必须先将逻辑卷卸载,所以我们看到逻辑卷的缩减,会影响客户的使用。

用lvs或者lvdisplay查看一下lv0这个逻辑卷的组成等信息:

逻辑卷管理器(LVM)_linux_61

逻辑卷管理器(LVM)_linux_62

用pvs来查看物理卷在那些卷组中。

逻辑卷管理器(LVM)_逻辑卷_63

接下来,我们开始缩减逻辑卷。

步骤,分为五步,并且顺序一定不能错,不然会引起文件系统损坏,数据丢失。

缩减逻辑卷:

# umount  /dev/VG_NAME/LV_NAME

# e2fsck  -f   /dev/VG_NAME/LV_NAME

# resize2fs/dev/VG_NAME/LV_NAME  #[mMgGtT]

# lvreduce  -L  [-]#[mMgGtT]  /dev/VG_NAME/LV_NAME

# mount -a

第一步:卸载逻辑卷

umount /dev/vg0/lv0

逻辑卷管理器(LVM)_逻辑卷_64

第二步,文件系统加测

e2fsck -f /dev/vg0/lv0

逻辑卷管理器(LVM)_创建_65

第三步:缩减文件系统:

resize2fs /dev/vg0/lv0 10G

逻辑卷管理器(LVM)_linux_66

第四步:缩减逻辑卷

lvreduce -L 10G /dev/vg0/lv0

逻辑卷管理器(LVM)_创建_67

第五步:重新挂载逻辑卷

mount -a

-a :自动挂载所有支持自动挂载的设备( 定义在了/etc/fstab

文件中,且挂载选项中有auto 功能)

然后我们执行一下vgdiplay看一下卷组vg0是否又恢复了,空闲空间35G,发现逻辑卷缩减成功。

逻辑卷管理器(LVM)_创建_68

 

 

再一个知识点,

删除卷组的成员,即删除PV,或者说我们创建好逻辑卷后,突然感觉组成逻辑卷的硬盘有点小了,我想换掉小的硬盘,换成一个大硬盘。

那我们面临的问题就是,现在硬盘已经被做成了物理卷,那么我就需要将物理卷,那我们就要在不破坏卷组或者逻辑卷的情况下删除,这么这时候我们就应该想到,如果我们想要删掉的物理卷上正好存着数据,没存的直接用命令

#vgreduce vg0 /dev/sd*

但是现在我们想删除的硬盘所做的PV上存有数据,那么我们就需要先将数据移走,然后再删,比如说如下所示:

逻辑卷管理器(LVM)_逻辑卷_69

逻辑卷管理器(LVM)_创建_70

我们创建的卷组中,在我们要更换硬盘/dev/sdb这块硬盘上的PV中存有数据。那么我们这时就先将数据移走,至于移动到什么地方,我不管。这是因为,我们总的卷组很大,就像这个vg0是45G,但是我们现在里面有一个10G的lv0的逻辑卷,其实这个逻辑卷就是分配给用户使用的,那么我们在扩展也好,缩减也好我们的卷组,但是我们前提时保证我们分配出去的逻辑卷大小不变。

#pvmove /dev/sdb

那这个命令就是将存有数据的PE移走,注意这里移走的是空间。


逻辑卷管理器(LVM)_linux_71

腾出/sdb上的PE,不用了,全部搬走,但是要搬,前提是,这同一个卷组中,别的PE要够,我们再次查看

逻辑卷管理器(LVM)_linux_72

逻辑卷管理器(LVM)_linux_73

我们发现,sdb没有数据了,数据被搬到了sdc上这里是搬空间,不是搬数据。虽然没有数据了,但是sdb还是在卷组中,

逻辑卷管理器(LVM)_linux_74

这样我们就可以删除sdb山的pv,删除pv就代表恢复了sdb是一块硬盘。再删除之前,我们应该先将vg0卷组上的sdb的pv删除,这样sdv上的pv就不影响卷组了,然后我们再删除pv

 

#vgreduce vg0 /dev/sdb

逻辑卷管理器(LVM)_linux_75

这时候发现sdb不属于卷组了。

我们再删除卷组sdv上的pv,上sdb恢复为一个硬盘:

#pvremove /dev/sdb   并查看一下,sdb已经是一块普通硬盘了,之后我们就可以将其移除,换成更大的硬盘,然后再该做pv,卷组,等等。

逻辑卷管理器(LVM)_创建_76

 

综合上述操作,做个总结:

我们要从逻辑卷中恢复一个硬盘或者分区,要经过三步:

第一步:

转移PE

pvmove /sdb#

第二步:

从卷组中移除,使其成为一个独立的PV

vgreduce vg0 /sdb#

第三步:

将其恢复成普通的硬盘或者分区:

pvremove /sdb#

 

 

 

 

各种命令的总结:

显示pv 信息

pvs :简要pv 信息显示

pvdisplay

  创建pv

pvcreate /dev/DEVICE

  显示卷组

vgs

vgdisplay

  创建卷组

vgcreate [-s #[kKmMgGtTpPeE]]VolumeGroupName

PhysicalDevicePath[PhysicalDevicePath...]

  管理卷组

vgextend VolumeGroupNamePhysicalDevicePath

[PhysicalDevicePath...]

vgreduce VolumeGroupNamePhysicalDevicePath [PhysicalDevicePath...] //就是将卷组中某个物理卷移除

逻辑卷管理器(LVM)_创建_77