您的位置:首页 > 运维架构 > Linux

逻辑卷管理器(LVM)

2016-09-01 18:01 141 查看
逻辑卷管理器(LVM 逻辑卷在生产环境中有些企业里会用到,但有些企业呢觉得逻辑卷,他是一个逻辑上的软件的东西。他是建立在硬件分区,或者硬盘之上的软件的管理方式,所以觉得他,要是数据放在上面,数据损坏了,或者系统出故障了,我们恢复数据是比较难得。他不像分区,分区很简单,像有些数据中心的数据恢复工具,拿过来就可以直接恢复。但是逻辑卷是更上层的一个,就想RAID一样,我的数据分布的位置,我自己也不知道,不像磁盘分区,我的数据放在哪个分区里,就放在哪个分区里。而RAID我们都知道,他的数据可能分布在好几个成员里面。所以将来出故障,我要恢复的话,我的东找一块,西找一块,我的把他凑起来。所以这个难度就比较大,所以逻辑卷也有这样的隐患。但逻辑卷突出的优势就是,我们有逻辑卷,组织磁盘空间,他跟RAID类似,他把好几个硬盘或者分区,逻辑的组织在一起,组合在一块,我们在用的时候就感觉这是一块硬盘。这样的话,无形中磁盘容量就变大。
比如说我们前面讲的,ext4,或者说MBR的分区,最多分多大啊?
是不是2T,那如果说,我的一个文件就是很大,4T,MBR分不了,那怎么办?
那么这时我们就用逻辑卷,逻辑卷他可以把好几个分区组合在一块用。成了一个了,那是不是就可以突破2T的容量了?这时容量变大,这时逻辑捐的一个优点。另外我把逻辑卷组合在一起后,将来如果数据空间仍然不够,那我还可以扩展。怎么变大?买硬盘,把硬盘插上,加入到逻辑卷里面。把硬盘的容量加进去了,整的逻辑卷的容量就变大了。
当然我感觉这个硬盘没用了,把他一移走也可以。容量就缩减了,所以逻辑卷的容量可以增加,也可以缩减。他不像分区,分完了就固定下来了。这是他的突出优势。
说了半天,总结一下,逻辑卷其实就是有两个优点。
第一:逻辑卷可以讲多个硬盘逻辑上建立一个硬盘使用。
第二:逻辑卷的容量可以增加也可以缩减,是动态的。
下面咱们看逻辑卷是怎么实现的:
逻辑卷他的实现方式,需要三大步:



那么我们结合图分步实现。
第一步:
先把我们的硬盘或者分区,变成物理卷,名称为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




我拿硬盘或者分区都可以做。
我先把前面的sda整理一下



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



这样就同步了。
我们再看看b硬盘,



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



这样我们就把环境整理好了,接下来我们开始试验一下创建逻辑卷
我们那sda的一个分区,以及拿sdb的整个硬盘,即一个分区,一个硬盘。来做物理卷。
我先拿一个分区来做物理卷,那我现在sda上先分一个分区,






分完区后,这里也要注意,他也存在改ID的问题。在创建逻辑卷的时候,我们在进行第一步创建物理卷的时候,只要是分区,就要改ID,要是整块硬盘就不用改了。
因为我们这里是操作分区,所以改id,我们要记住,逻辑卷的id是8e
操作如下,












保存退出。
我们执行lsblk看一下分区表是否同步,不同步,因为这里是加分区,所以我们执行
#part -a /dev/sda //这一步很关键,因为不让内核识别他,那就不能进行常见物理卷。



发现同步了。
那接下来我把b硬盘直接拿过来用了,因为是硬盘,他就不存在,-t 跟改id的问题了。
第一步:
把物理的设备变成物理卷。所以用pvcreate,我们在执行创建物理卷之前,我们先用pvs来查看一下,当前系统中是否有了而存在的物理卷。



表示一个都没有。
我们还可以用pvdisplay看的更详细,



这也表示一个也没有。
接下来我们创建物理卷。



创建成功。
接下来我们再用pvs来查看



或者用pvdisplay来查看



我们从中可以看到,VG name 是空的,是因为我还没有创建卷组,没用将他们加入到卷组里面。
并且我们还可以看到有一个PE Size 是0,这就是我们说的物理的区域,在我们创建卷组的时候可以指定大小。在光创建PV的时候是没有的。
第二步:
我们把物理卷加到卷组里,加到卷组实际上就是创建卷组的名字。
在创建之前,同样我们看看有没有卷组,vgs ,或者 vgdisplay



空的,表示目前还没有卷组。
接下来,创建卷组,vgcreate 创建卷组,是不是要起名啊,那叫什么名字呢?例如叫vg0,这名字由我个人指定的,叫什么都行。然后我当然要指定成员啊,这个卷组里面是谁在啊,则 /sd{a7,b},这个时候把这两个成员加到vg0里面。也就意味着vg0创建出来了。
综合上述分析,我们可以



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



可以看到,有两个PV,里面没有逻辑卷,总共大小为25G.
我们在用pvs查看一下,发现两个物理卷已经在vg0里面了



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



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



这时候vg0相当于一个硬盘出来了,这个硬盘里没有分区相当于。接下来我们可以在vg0中选出一个区域来定义逻辑卷了。
在创建逻辑卷之前,lvs 或者lvdisplay 查看逻辑卷,应该都是空的。



第三步:
我们用lvcreate 创建逻辑卷
创建逻辑卷,要指定一个名字,这个随意指定,用选选项-n 指定。比如说叫lv0.然后要指定逻辑卷的大小,用选项-L 为什么要指定大小?卷组总共25G,我从中取多少?所以要指定大小。大小的话有两种单位,小写l和大写L
-l 就是数PE个数
-L 就是直接指定容量
(注意:用 -L指定容量,肯定不是那么准确,因为他必须是4M的整数倍。)
接下来就是指定从哪个卷组中取,在系统中可能有多个卷组。
创建逻辑卷如下:



表示创建成功。
我们再次查看vgdisplay



这时候我们可以查看lvdisplay



我们可以看到逻辑卷的名称为 /dev/vg0/lv0并且上面的LE其实就是PE,read/write表示可读可写。
但是我们要知道,这个设备名不是真正的设备名,他是一个软连接



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




这样,逻辑军建好了,就相当于分了区了,所以就可以该格式化了。
我们这时在centOS6上操作的,所以我们格式化xfs是不支持的,所以我们格式化为ext4
#mkfs.ext4 /dev/vg0/lv0 如下图所示:



分完区后,该挂载挂载:
vim /etc/fstab
我们的挂载设备名最好写UUID,这里我们写设备名称了就。如下图所示:



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



挂在上之后,我们就可以使用了,我们可以复制一些文件过去
#cp /etc/* .




这是正常的创建。
接下来我们看扩展,假设空间不够了,当然现在是够了,现在才是1%嘛



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



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



也就是说,我们要想扩,那我们应该先看看vg0里面还剩多少空间,没有了,那我们就不能扩了,那我们一看,还剩15个G,那我还能从这15个G中再取出来一些空间,当然我可以在这个vg0里面可以创建多个逻辑卷的,这里我就一个了
那现在我要扩展,就用lvextend
这时候扩展多大,也是有两个单位, -l 和 -L
-l 小写l是表示扩展到多少个PE,



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



一定注意 -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



表示成功加上10G。
我们查看一下是否添加成功



说明成功。
但是我们在查看逻辑卷时,发现还是10G,



这是因为df看的不是空间的东西,是看的文件系统的大小,什么是文件系统?就是ext4格式化的,我原来逻辑卷的10G是被格式化的,现在加上的10G,还没有格式化,也就是说上面还没有文件系统,所以要同步文件系统,把文件系统同步过去,我们才能用df看,
执行命令:
#resize2fs /dev/vg0/lv0
就是同步文件系统,注意这个命令只能同步ext系列的文件系统,



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



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

假设卷组没空间了,我们就加硬盘,先扩展卷组,再扩展逻辑卷。
这里我看到我有一个c盘,我直接将c盘加进去。



那么加硬盘怎么加?
首先我们把C盘变成物理卷,然后加入到卷组中。
这里先创建物理卷成功



然后我们要知道,我们现在创建的这个物理卷他不属于任何一个卷组,
可以用pvdisplay来查看



那这时我们将其加入到vg0卷组就行
使用命令:
#vgextend vg0 /dev/sdc



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



逻辑卷最大的优势就是,扩展的时候非常方便。
逻辑卷要想扩展,前提是,卷组中有剩余的空间,卷组中如果没有剩余的空间,则逻辑卷就无法动态扩建,而且也可以也可以将卷组进行扩充,卷组加硬盘,或加分区都可以。
我们可以先用命令df查看一下分区的挂在情况。可以看到,我们的挂载中已经有一个逻辑卷了。



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



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



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



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



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



如果想将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



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





下面我们来看磁盘的缩减:
我们用df命令来查看当前的逻辑卷的挂载情况:





发现有一个逻辑卷。大小是45G,那我们现在不想让lv0这个逻辑卷用这么大的空间,我想在vg0这个卷组中在创建一个逻辑卷,但是现在vg0所有空间都被lv0占用着,所以这是就用到了
缩减逻辑卷:
缩减逻辑卷,不能在线缩减,所以必须先将逻辑卷卸载,所以我们看到逻辑卷的缩减,会影响客户的使用。
用lvs或者lvdisplay查看一下lv0这个逻辑卷的组成等信息:





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



接下来,我们开始缩减逻辑卷。
步骤,分为五步,并且顺序一定不能错,不然会引起文件系统损坏,数据丢失。
缩减逻辑卷:
# 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



第二步,文件系统加测
e2fsck -f /dev/vg0/lv0



第三步:缩减文件系统:
resize2fs /dev/vg0/lv0 10G



第四步:缩减逻辑卷
lvreduce -L 10G /dev/vg0/lv0



第五步:重新挂载逻辑卷
mount -a
-a :自动挂载所有支持自动挂载的设备( 定义在了/etc/fstab
文件中,且挂载选项中有auto 功能)
然后我们执行一下vgdiplay看一下卷组vg0是否又恢复了,空闲空间35G,发现逻辑卷缩减成功。



再一个知识点,、
删除卷组的成员,即删除PV,或者说我们创建好逻辑卷后,突然感觉组成逻辑卷的硬盘有点小了,我想换掉小的硬盘,换成一个大硬盘。
那我们面临的问题就是,现在硬盘已经被做成了物理卷,那么我就需要将物理卷,那我们就要在不破坏卷组或者逻辑卷的情况下删除,这么这时候我们就应该想到,如果我们想要删掉的物理卷上正好存着数据,没存的直接用命令
#vgreduce vg0 /dev/sd*
但是现在我们想删除的硬盘所做的PV上存有数据,那么我们就需要先将数据移走,然后再删,比如说如下所示:





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




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





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



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

#vgreduce vg0 /dev/sdb



这时候发现sdb不属于卷组了。
我们再删除卷组sdv上的pv,上sdb恢复为一个硬盘:
#pvremove /dev/sdb 并查看一下,sdb已经是一块普通硬盘了,之后我们就可以将其移除,换成更大的硬盘,然后再该做pv,卷组,等等。



综合上述操作,做个总结:
我们要从逻辑卷中恢复一个硬盘或者分区,要经过三步:
第一步:
转移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...] //就是将卷组中某个物理卷移除

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 创建 逻辑卷