Linux LVM(逻辑卷管理器)

LVM是Logical Volume Manager(逻辑卷管理器)的缩写,特点是可以动态扩容和缩容,很灵活。所以使用得很广泛。


LVM原理:

  1. 将一块或者多块硬盘逻辑上组合在一起形成要给存储池,这个存储池就叫作VG(卷组),存储池的空间大小等于所有硬盘空间的总和。

  2. 将存储池(VG)中的空间进行重新划分,每个划分出来的空间就叫做逻辑卷(LV)

  3. 创建好逻辑卷后,可以在上面创建文件系统,进行挂载和正常使用。逻辑卷的大小后面也可以动态调整。


相关概念:

  • 物理卷:组成VG(卷组)的物理硬盘就叫作物理卷

  • 卷组(VG):多个物理卷的存储空间逻辑上组合成一个大的存储池

  • 逻辑卷(LV):可以理解为VG这个逻辑上大硬盘的一个分区

  • 物理盘区(PE):是逻辑卷中负责分配空间的最小单位,扩容和缩容都是以PE为单位来操作的。PE大小默认为4M

就是将一块或多块硬盘或分区逻辑的组合在一起形成一个大的硬盘,


创建逻辑卷

要使用逻辑卷,首先就需要将物理硬盘组合成一个大的VG,然后在这个大的VG上切割指定空间出来作为LV,切割的单位是PE。

实现步骤:

1、先将需要加入VG的物理硬盘标记为物理卷,目的就是标识该硬盘要作为物理卷使用了

# 需要安装lvm2这个软件包才有这些命令
sudo pvcreate /dev/sdb

2、将物理卷指定为一个大的卷组

# sudo vgcreate 卷组名称  硬盘1 硬盘2 ...

sudo vgcreate vg0  /dev/sdb /dev/sdc

3、在大的卷组里面划分指定空间的逻辑卷,相当于在于给逻辑硬盘里面创建指定大小空间的分区

# sudo lvcreate -L 分配空间大小 -n  逻辑卷的名称  从哪个VG中割取空间

sudo lvcreate -L 10G -n lv1 vg0

说明:也可以使用 -l(小写)来指定PE的个数,默认一个PE是4M大小,但是这样太麻烦了。直接 -L(大写)指定大小就行了

4、到此逻辑卷就算创建好了,我们可以知道逻辑卷有三个名称你可以用,一个真名,两个软链接。

  • 真名: /dev/dm-X(X是一个数字,数字根据创建的顺序和系统中存在的设备映射设备数量来递增)

说明:dm: device mapper,将一个或多个底层块设备组织成一个逻辑设备的模块

软链接:

  1. /dev/VG_name/lv_name

  2. /dev/mapper/VG_name-lv_name

这三个名字一般用 /dev/VG_name/lv_name这个,这个最直观。

5、逻辑卷创建好了,也知道了对应的文件名字,就可以进行格式化和挂载使用了。

格式化:

sudo mkfs.ext4 /dev/vg0/lv1

挂载:

sudo mount /dev/vg0/lv1  /mnt/VG/

说明:

  1. 创建swap空间,分区的id要改为82,创建逻辑卷,物理设备分区的id要改成8e fdisk的t选项,如果是使用硬盘的话,就不存在改ID的问题了。

  2. 通过vgcreate命令创建VG的时候,可以通过-s可以指定PE的大小,不指定默认大小就是4M,一般不用指定。


LV(逻辑卷)扩容

比如原来分了一个LV空间大小是10G,但是即将不够用了,就可以通过扩容的方式增大这个空间。
扩展逻辑卷需要经历两个步骤,空间扩展和文件系统扩展,空间扩展了,还需要将扩展的空间格式化才能正常使用。

实现步骤:

1、空间扩展,使用lvextend这个工具来扩展物理逻辑卷的空间。

# 扩容到指定空间
lvextend -L  具体大小(mMgGtT) /dev/VG_NAME/LV_NAME

# 增加指定空间
lvextend -L  +具体大小(mMgGtT) /dev/VG_NAME/LV_NAME

# 将所有可用空间都分配给逻辑卷
sudo lvextend -l +100%FREE /dev/VG_NAME/LV_NAME

# 在原有空间+5G空间
sudo lvextend  -L +5G /dev/vg0/lv1

2、将扩展的空间格式化

# resize2fs:对ext系列的文件系统进行扩容,把文件系统同步到空间里面去

# 格式:resize2fs /dev/VG_NAME/LV_NAME

sudo resize2fs /dev/vg0/lv1

说明:

  • 如果是xfs格式的逻辑卷,使用xfs_growfs来进行格式化

  • 不是所有的文件系统都支持在线扩容,但是ext系列和xfs系列肯定支持

除了上面这种操作方法,还有种简单的方法,就是通过lvextend的 -r 参数来让它自动调整文件系统

# 扩展逻辑卷到100GB,并自动调整文件系统:
sudo lvextend -r -L 100G /dev/VG_NAME/LV_NAME

# 使用所有卷组中的可用空间扩展逻辑卷,并自动调整文件系统:
sudo lvextend -r -l +100%FREE /dev/VG_NAME/LV_NAME

VG(卷组)扩容

VG扩容就是将新的物理硬盘加入到指定的卷组中去。实现步骤就是先给物理硬盘通过pvcreate打上标记,如果是分区还要改分区的ID号,然后再通过vgextend将物理硬盘加入到卷组中就行了。

实现步骤:

1、通过pvcreate给物理硬盘打上标记

2、通过vgextend将物理硬盘加入到卷组中


缩减LV(逻辑卷)

有数据丢失的风险,建议先备份数据再缩减

实现步骤

#xfs文件系统不支持缩减

#五个步骤:
	1.卸载
	2.检查文件系统完整性(不管是否完整必须)
	3.缩减文件系统
	4.缩减逻辑卷大小
	5.重新挂载

# 1.卸载:
umount /dev/VG_NAME/LV_NAME #首先卸载

# 2.检查文件系统完整性
e2fsck -f /dev/VG_NAME/LV_NAME

# 3.缩减文件系统
resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT](缩减后的大小,例如2G表示缩减到2G)

# 4.缩减逻辑卷大小
lvreduce -L  [-]#[mMgGtT](这个大小要和上面的大小相匹配) /dev/VG_NAME/LV_NAME(对谁进行缩减)

# 5.重新挂载
mount /dev/VG_NAME/LV_NAME mountpoint

拆除PV(物理卷)

有可能会出现某个PV设备损坏的情况,这个时候就需要将其移除。移除PV设备的前提就是需要将当前PV设备上的数据移到VG中别的PV上去。

实现步骤:

1、查看当前VG中有哪些PV

pvs

1、移动指定pv设备上的所有被占用的pe移动到同一卷组的其他成员上面

sudo pvmove /dev/sdd

2、将这个pv设备从VG卷组中移走

# vgreduce [卷组名] [物理卷路径]

sudo vgreduce vg0  /dev/sdd

3、取消物理硬盘的pv标识

# pvremove 指定的设备
pvremove /dev/sdd

删除LV(逻辑卷)

1、取消挂载

2、使用lvremove删除指定逻辑卷即可


LVM的信息查看

  • 物理卷信息查看:pvdisplay和pvs

  • 卷组信息查看:vgdisplay和vgs

  • 逻辑卷信息查看:lvdisplay和lvs

说明:pvs、vgs和lvs只是提供了简短的摘要信息,xxdisplay是显示详细的信息


LV的快照功能

快照就是将当前的状态做一个备份,逻辑卷的快照是瞬间将逻辑卷做一个备份。这样数据丢失的时候可以利用逻辑卷进行还原。

LV快照的工作逻辑

  1. 对某个逻辑卷创建快照,会在该逻辑卷所处的卷组中创建一个具有特殊属性的逻辑卷,以此分配一片空间。

  2. 这块空间会指向原始数据块的引用,采用写实复制的技术,当原始LV的某个数据块第一次被修改时,这个数据块的原始内容(修改之前的内容)会被复制到快照空间。

  3. 从快照LV读取数据时,LVM会检查所需的数据是否在快照空间中。如果在快照空间中,它会从那里读取。如果不在,它意味着那块数据自从创建快照以来没有被修改,LVM会直接从原始LV读取那块数据


LV快照的创建步骤

1、因为快照也是一块逻辑卷,所以创建快照的方法和创建逻辑卷的方法一样

lvcreate -L size -n snapshot_name -s  lv_name

# -s :表示创建的是快照,不加s表示创建的是普通逻辑卷
# lv_name :表示指定的是谁的快照(原始逻辑卷的名称)

2、快照创建好后,可以进行挂载(如果想直接访问快照中的数据,查看或复制它,你需要将快照挂载到文件系统的某个点上。)

  • 创建快照后,不需要像普通逻辑卷一样进行格式化,因为快照是原始逻辑卷(LV)的一个精确、只读的复制。因为它包含了原始LV在创建快照时的数据,所以已经有了与原始LV相同的文件系统和数据

  • 步骤1把快照创建好了后,就已经能捕捉和保持原始LV的变化

3、快照创建好了后,如果数据有发生变化,会自动存入创建的快照里面的

说明:

    在创建快照之后原始逻辑卷的数据发生了大量更改,可能会导致快照空间被完全使用完,如果发生了大量数据更改,以至于快照空间不足以容纳这些更改,那么快照将会“填满”或“溢出”,此时快照将不再有效,并且可能会自动被LVM系统删除或变为不可用状态。

解决方法:
    (1)初始分配的时候就分配足够的空间给快照,但是这样浪费空间

    (2)快照容量快满了的时候主动扩容

4、如果要使用快照来恢复数据

  • 数据恢复前,需要确保快照没有被挂载,如果已经挂载了就是用umount进行卸载。

  • 恢复数据的时候,挂载的逻辑卷也需要进行卸载。

# 格式
lvconvert --merge /dev/vg0/data-snapshot

lvconvert --merge /dev/vg0/lv1_snapshot
# 还原以后,快照会自动删除

数据还原后,快照就被删除了

posted on 2022-07-03 11:29  背对背依靠  阅读(553)  评论(0编辑  收藏  举报