文章目录
- LVM实战应用
- LVM原理
- 一、传统的磁盘管理
- 二、LVM的磁道管理
- 三、LVM的架构体系
- 四、LVM创建和管理命令
- LVM实践
- 一、实践准备
- 二、LVM创建PV、VG、LV
- 1、使用选择/dev/sdb和/dev/sdc制作物理卷:
- 2、创建卷组
- 3、逻辑卷创建
- 4、创建文件系统并挂载
- 三、逻辑卷LV扩容
- 四、LV缩容
- 五、LV快照
- 六、PV、VG和LV删除
LVM实战应用
LVM原理
一、传统的磁盘管理
在Linux操作系统中,磁盘管理机制和windows上的差不多,绝大多数都是使用MBR(Master Boot Recorder)都是通过先对一个硬盘进行分区,然后再将该分区进行文件系统的格式化,在Linux系统中如果要使用该分区就将其挂载上去即可,windows的话其实底层也就是自动将所有的分区挂载好,然后我们就可以对该分区进行使用了。
但是这种传统的磁盘管理经常会带来很多的问题,比如说当我们使用的一个分区,其空间大小已经不再够用了,这个时候我们没有办法通过拉伸分区来进行分区扩充,当然目前也有其他第三方的磁盘管理软件可以进行磁盘的分区空间划分,但是这样会给我们的文件系统造成很大的伤害,有时会导致文件系统崩溃等问题。
对于传统的磁盘管理如果说我们碰到当分区大小不足的时候,我们只能通过增加新的硬盘,然后在新的硬盘上创建分区,对分区进行格式化以后,然后将之前分区的所有东西都拷贝到新的分区里面才行。但是新增加的硬盘是作为独立的文件系统存在的,原有的文件系统并没有得到任何的扩充,上层应用只能访问到一个文件系统。这样的方式对个人的电脑来说可能还能接受,但是如果对于生产环境下的服务器来说,这是不可接受的,所以,这个时候我们就会受到传统磁盘管理的限制,因为其不能够进行动态的磁盘管理。因此,为了解决这个问题,LVM技术就诞生了!!!
二、LVM的磁道管理
LVM(Logical volume Manager)是逻辑卷管理的简称。它是Linux环境下对磁盘分区进行管理的一种机制。现在不仅仅是Linux系统上可以使用LVM这种磁盘管理机制,对于其它的类UNIX操作系统,以及windows操作系统都有类似与LVM这种磁盘管理软件。
LVM的工作原理其实很简单,它就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。比如说我增加一个物理硬盘,这个时候上层的服务是感觉不到的,因为呈现给上次服务的是以逻辑卷的方式。
LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。我们如果新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性!!!
三、LVM的架构体系
①PE (Physical Extend) 物理拓展
②PV (Physical Volume) 物理卷 即实际存在的硬盘、分区或者RAID
③VG (Volume Group) 卷组 是由多个物理卷组合形成的大的整体的卷组
④LV (Logical Volume) 逻辑卷 是从卷组上分割出来的,可以使用使用的逻辑存储设备
在使用LVM对磁盘进行动态管理以后,我们是以逻辑卷的方式呈现给上层的服务的。所以我们所有的操作目的,其实就是去创建一个LV(Logical Volume),逻辑卷就是用来取代我们之前的分区,我们通过对逻辑卷进行格式化,然后进行挂载操作就可以使用了。
原理结构如下:
具体LVM划分原理可以参考:
https://zhuanlan.zhihu.com/p/62597195
四、LVM创建和管理命令
功能/命令 | 物理卷管理 | 卷组管理 | 逻辑卷管理 |
---|---|---|---|
扫描 | pvscan | vgscan | lvscan |
建立 | pvscan | vgcreate | lvcreate |
显示 | pvdisplay | vgdisplay | lvdispaly |
删除 | pvremote | vgremote | lvremote |
扩展 | 物理卷不能扩展 | vgextend | lvextend |
缩小 | 物理卷不能缩小 | vgreduce | lvreduce |
LVM实践
一、实践准备
实践工具:Vmware虚拟机(CentOS7)
实践目标:建立LVM,并进行LV的扩容、缩容、快照、删除等实验
虚机准备:首先创建CentOS7虚机,并为虚机新增两块硬盘便于实验
查看确认新增的硬盘已经增加成功
本实验中使用/dev/sdb和/dev/sdc进行实验
二、LVM创建PV、VG、LV
1、使用选择/dev/sdb和/dev/sdc制作物理卷:
创建命令如下:
pvcreate /dev/sdb /dev/sdc
2、创建卷组
vgcreate storage /dev/sdb /dev/sdc
其中storage为新创建卷组的名称
3、逻辑卷创建
创建一个大小为10G的逻辑卷,在创建逻辑卷时,lvcreate命令常用参数如下:
-L 指定逻辑卷的大小(实际大小,如1G、512M等,该大小必须为4M的整数倍,否则大小会自动增大称为成4M整数倍)
-l 指定逻辑卷的大小(基本单元个数,-l后面数字乘4M为实际逻辑卷的大小)
-n 表示逻辑卷名称
逻辑卷创建命令如下:
lvcreate -n custom -L 10G storage
4、创建文件系统并挂载
创建命令如下:
mkfs.xfs /dev/storage/custom //mkfs.xfs磁盘名称:将此磁盘格式化成xfs文件系统。mkfs.ext4格成ext4文件系统
mkdir -p /custom // -p参数是能直接创建一个不存在的目录下的子目录
mount /dev/storage/custom /custom
格式化磁盘
挂载文件系统并查看:
可以将挂载信息写入/etc/fstab文件中,便于下次重启后直接挂载:
三、逻辑卷LV扩容
当原先分配的硬盘分区不够使用,这时就需要对硬盘进行扩容。LVM的逻辑卷可以方便的进行扩容。LV扩容步骤如下所示:
lvextend -L 15G /dev/storage/custom //对LVM的逻辑卷进行扩容,-L表示扩容后的大小而不是增加的大小(使用+15G则表示增加的大小),也可以使用-l参数指定大小(LE数)
xfs_growfs /dev/storage/custom //在创建xfs系统后,让xfs系统随着LV的增大而增大
查看扩展情况:
注意:
- 在进行扩容前,需要确保LVM的卷组内有足够的空间支持扩容。
- 如果在LV扩容的时候,还没有创建文件系统,则可以省略上述第二条命令。
- 如果是xfs系统扩容,可以不用umount,如果是ext4系统扩容,则必须使用umount。
四、LV缩容
一般情况下,不允许对磁盘设备进行缩容,因为这可能造成数据丢失的风险。尽管如此,LVM还是提供了LV缩容的方法。然而,xfs系统不允许缩容,如果是ext4系统,缩容配置如下:
e2fsck -f /dev/storage/custom //对文件系统进行缩容
resize2fs /dev/storage/custom 10G //LVM的卷组进行缩容
mount -a //重新挂载
或者使用lvreduce命令减少LVM逻辑卷占用的空间大小:
使用lvreduce命令收缩逻辑卷的空间大小有可能会删除逻辑卷上已有的数据,所以在操作前必须进行确认。
lvreduce -L -50M /dev/storage/custom //将逻辑卷的空间大小减少50M
五、LV快照
LVM具备快照的功能,该功能类似于Vmware中的快照,LVM可以创建一个快照卷,快照卷就如同一个LV的备份。在操作中可以使用快照卷将LV的状态还原到某个节点的状态。
首先创建一个逻辑卷,在完成文件系统创建和挂载后,向该LV中写入一个实验性文件,命令如下:
lvcreate -n lv0 -L 1G storage
mkfs.ext4 /dev/storage/lv0
mkdir /
mount /dev/storage/lv0 /LVM
echo “LVM snapshot” > /LVM/test.txt
创建快照卷,在lvcreate命令中,使用-s参数创建快照卷 :
lvcreate -L 1G -s -n lvsnap /dev/storage/lv0
使用快照卷的恢复功能,方法是删掉刚才在lv0中创建的testt.txt文件,然后恢复快照卷,查看新的lv0中test文件是否存在。命令如下:
rm -rf /LVM/test.txt
umount /LVM
lvconvert --merge /dev/storage/lvsnap
mount /dev/storage/lv0 /LVM
ll /custom
cat /custom/test
六、PV、VG和LV删除
PV、VG和LV的删除比较简单,只要简单的使用pvremove、vgremove和lvremove进行删除即可,但是在删除时一定要注意,先解除挂载再删除LV,先删除LV再删除VG,先删除PV最后删除PV。
unount /lvm
lvremove /dev/storage/lv0
vgremove /dev/storage
pvremove /dev/sdb /dev/sdc