ubuntu 的 LVM 逻辑卷
什么是 LVM逻辑卷?
在此之前,传统的linux的磁盘管理 和 window 的磁盘管理大同小异,都是使用MBR磁盘分区方式,通过磁盘分区、再去创建文件系统;
问题:
当分区的空间不够用时无法扩展其大小,只能通过添加硬盘、创建新的分区来扩充空间,但是新添加进来的硬盘是作为独立文件系统存在的,原有的文件系统并未得到扩充,上层应用很多时候只能访问一个文件系统。所以只能让现有磁盘下线,换上新的磁盘之后,再将原始数据导入。
如果在实际生产环境的服务器中,出现这种分区已用完的时,我们是很难对原有分区处理扩容的,处理的方式就是我们不得不先扩容更大的新分区,然后停止项目的运行,移动项目到新的扩容分区中;非常麻烦~
虽然有第三方解决方案对原有分区进行扩容,但是这些第三方的扩容解决方案实践起来后是非常不稳定的,很容易引起数据的丢失、丢盘的情况发生;
LVM 就很好的解决了上面分区扩容麻烦的问题;
LVM(Logical volume Manager) 逻辑卷管理:通过将底层物理硬盘抽象地封装起来,以逻辑卷的形式表现给上层系统。逻辑卷的大小可以动态调整,而且不会丢失现有的数据。新加入的硬盘也不会改变现有上层的逻辑卷。
作为一种 动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性!
我们能操作的只是 逻辑卷,逻辑卷说白了,就是可伸缩的 "分区卷",其分区大小可以动态调节,而不受制于原始的固定分区大小;
LVM 的底层概念
上图中,我们最终能使用和操作的就是 LV逻辑卷,所做的很多操作都是为了 LV逻辑卷;逻辑卷就是为取代原先的分区
一句话概括:物理磁盘被格式化为PV(physical volume),空间被分为一个个PE(physical extend)【大小为 4 MB,为逻辑卷的最小单位】。不同的PV加入同一个VG(volume group),不同PV的PE全部进入VG的PE池内。LV(logical volume)基于PE创建,大小为PE的整数倍,组成LV的PE可能来自于不同的物理磁盘。LV现在就能挂载使用了。
详解:
假如有一块硬盘,我们使用LVM技术时,将硬盘插入服务器中,将该硬盘条带化(格式化)成物理卷PV,即把硬盘空间划分为以4M的基准切割N多个PE;比如一个硬盘容量为400M,那么一共就有 100(400/4) 个PE;(PE是逻辑卷空间管理的最基本单位,PE默认是4M大小)
创建一个卷组VG,可以理解为空间池(或者说 地址池),作用是用来装 PE 的,如上图,多个硬盘的PE装入到了 VG 中;VG 必须有名称的;VG的大小由多少个PE来决定;
基于卷组VG来创建我们每个逻辑卷LV(相当于传统的分区),从VG拿出来多少个PE到LV中,这个LV的空间就有多大;我们把创建好的逻辑卷格式化,然后挂载,就可以用了;LV 必须有名称的;LV的大小由多少个PE来决定;
当创建好卷组VG时,会创建目录 /dev/卷组名/
;而当逻辑卷创建好时,会创建文件 /dev/卷组名/逻辑卷名
;
注意:组成逻辑卷的PE可以来自不同的硬盘,如上图,sda的PE是灰色的,而 sdb的PE是白色的,lV有3个灰1个白的PE:
我们不需要关心也不能操作 VG、PV 和 PE,我们只能操作 LV逻辑卷;
当我们对LV拉伸活收缩时,实际上就是增加活减少PE,来达到伸缩LV逻辑卷的目的;
对 卷组VG 的伸缩,就是加减硬盘;
LVM逻辑卷 是一个动态磁盘管理的工具,原理非常简单~
总结:
- 物理磁盘被格式化为PV,空间被分为一个个PE
- 不同的PV加入同一个VG,不同PV的PE全部进入VG的PE池内
- LV基于PE创建,大小为PE的整数倍,组成LV的PE可能来自不同物理磁盘
- LV现在就直接可以格式化后挂载使用了
- LV的扩充缩减实际上就是增加或减少组成该LV的PE的数量。其过程不丢失原始数据
LVM逻辑卷 的 基本管理操作
先检查新硬盘是否插入: fdisk -l
或者 df -h
或者 lsblk
创建LVM
1、将物理磁盘设备初始化为物理卷
pvcreate /dev/sdb /dev/sdc
查看物理卷信息:pvdispaly
或者 pvs
2、创建卷组,并将上面两个PV加入卷组juanzuming中
vgcreate juanzuming /dev/sdb /dev/sdc
3、基于卷组juanzuming创建2G大小空间的逻辑卷
lvcreate -n mylv -L 2G juanzuming
查看卷组信息:vgdisplay
或者 vgs
4、为创建好的逻辑卷格式化创建文件系统
mkfs.ext4 /dev/juanzuming/mylv
查看逻辑卷信息:lvdisplay
或者 lvs
5、将格式化好的逻辑卷挂载使用
mount/dev/juanzuming/mylv /mnt
将逻辑卷挂载到 /mnt 中
一定要按照上面顺序一步步下来
卷组VG 和 逻辑卷LV 可以有多个,主要是为了方便管理和维护;
上面命令全部运行完后,其在目录 /dev/juanzuming/mylv
中多一个设备;但是,执行 mount 时,显示的lv逻辑卷的位置是在 /dev/mapper/juanzuming-mylv
中的;答:/dev/juanzuming/mylv
只是一个链接,实际是在 /dev/mapper
这目录里面;
删除 LVM
0、卸载已经挂载
umount /nmt
1、删除LV
lvremove /dev/juanzuming/mylv
2、删除 VG
vgremove juanzuming
3、删除物理卷
pvremove /dev/sdb
一定要按照上面顺序一步步下来
LVM 逻辑卷的 扩大 与 缩小(动态伸缩磁盘分区卷空间)
拉伸LV逻辑卷
逻辑卷的 拉伸操作 可以在线执行,不需要卸载逻辑卷,数据不会丢失
逻辑卷的 缩小 操作,必须先卸载逻辑卷
1、保证VG中有足够的空闲空间
vgdisplay
2、扩充mylv逻辑卷,增加1G空间
lvextend -L +1G /dev/juanzuming/mylv
3、查看扩充后LV大小
lvdisplay
4、更新文件系统(必须的,否则 df -h
还是显示原来的空间大小)
resize2fs /dev/juanzuming/mylv
5、查看更新后文件系统
df-h
为什么要需要更新文件系统?因为LV逻辑卷是个底层的东西,操作系统需要使用任何的底层的空间,都要对其进行格式化(即创建文件系统),而文件系统在创建的时候大小就已经固定了,我们拉伸的底层空间,但是没有更新mylv这个逻辑卷的文件系统~,所以,系统并没有识别到拉伸出来的空间,所以
df -h
还是显示原来的空间大小;
拉伸VG卷组
1、将要添加到VG的硬盘格式化为PV
pvcreate /dev/sdd
2、将新的PV添加到指定卷组中
vgextend juanzuming /dev/sdd
3.查看扩充后VG大小
vgdisplay
缩小LV逻辑卷
逻辑卷的缩小操作必须离线执行,要卸载逻辑卷
1、卸载已经挂载的逻辑卷
umount /dev/juanzuming/mylv
2、缩小文件系统,缩小到1G
(会提示需要运行fsck检查文件系统)
resize2fs /dev/juanzuming/mylv 1G
3、缩小LV
lvreduce -L -1G /dev/juanzuming/mylv
4、查看缩小后的LV
lvdisplay
5、挂载
mount /dev/juanzuming/mylv /mnt
注意一定要按照上面顺序执行
缩小LV是比较危险的事,如果设置空间大小不对,那么会导致数据的丢失
缩小VG卷组
即:拿走一个硬盘的情景;
1、将一个PV从制定卷组中移除
vgreduce juanzuming /dev/sdc
2、查看缩小后的卷组大小
vgdisplay
注意,卷组的大小必须比要拿走硬盘的空间大小还大!否则会造成数据丢失的风险;
完