LVM卷管理

LVM简介

LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。

 

LVM的工作原理:

它就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。比如说我增加一个物理硬盘,这个时候上层的服务是感觉不到的,因为呈现给上层服务的是以逻辑卷的方式。

LVM架构

LVM卷管理

LVM特点

可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。如果我们新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性。

基本的逻辑卷管理概念

 PV(Physical Volume)- 物理卷
物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘,也可以是raid设备

 VG(Volumne Group)- 卷组
卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。

 LV(Logical Volume)- 逻辑卷
逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组。

LVM卷管理

LVM卷管理

磁盘准备

我们将模拟raid5、分区、物理硬盘三种类型设备创建VG,raid5 需要四块硬盘,分区和物理硬盘各一块硬盘,还有扩容时需要至少一块硬盘,所以在虚拟机里添加八块硬盘,每块5GB.

安装LVM管理工具

检查是否安装 # rpm -qa|grep lvm

如果未安装,则使用yum安装 # yum install -y lvm*

新建一个raid5设备

使用/dev/sdb, /dev/sdc, /dev/sdd, /dev/sde 四块物理硬盘做软raid模拟。

# mdadm -C /dev/md5 -ayes -l5 -n3 –x1 /dev/sd[b,c,d,e]

写入RAID配置文件/etc/mdadm.conf 并做适当修改。
# echo DEVICE /dev/sd{b,c,d,e} >> /etc/mdadm.conf
# mdadm –Ds >> /etc/mdadm.conf

新建一个分区

fdisk /dev/sdf

n

p

1

 

 

w

创建 PV

pvcreate /dev/md5 /dev/sdf1 /dev/sdg

查看PV # pvdisplay

也可以使用pvs和pvscan查看简略信息

创建 VG

vgcreat vg0 /dev/md5 /dev/sdf1 /dev/sdg

查看VG # vgdisplay

同样可使用使用vgs和vgscan查看

创建 LV

lvcreate -L 5G -n lv1 vg0

-L 指定创建的LV的大小

-l 指定创建的LV的PE数量

-n LV的名字

上面的命令是:从vg中分出5G的空间给lv1使用。

查看LV信息 # lvdisplay

LVM卷管理

格式化 LV

mkfs.ext4 /dev/vg0/lv1

挂载

mkdir /mnt/lv1

mount /dev/vg0/lv1 /mnt/lv1

LVM卷管理


提前在/mnt/lv1下准备好测试数据

LVM的扩容操作

LV的扩容

查看vg0的剩余容量,看还有多少可用

vgs

对lv1进行扩容

lvextend -L +1G /dev/vg0/lv1

在lv1原有基础上增加了1G

使用 vgs 查看vg0,发现减少了1G

再使用 lvs查看lv1,发现增加了1G

使用df -TH查看实际的磁盘容量,会发现没有变化,还需要

# resize2fs /dev/vg0/lv1

然后df -TH会发现可用容量增加到了5.9G

可以查看下测试数据,发现测试数据正常

VG的扩容

方法一:

创建PV。使用/dev/sdh来创建一个PV

# pvcreate /dev/sdh

扩容VG

# vgextend vg0 /dev/sdh

方法二:

向raid中新加入一块硬盘

mdadm /dev/md5 -a /dev/sdj1

mdadm -G /dev/md5 -n4 扩展活动盘

pvresize /dev/md5调整PV的大小


LVM的缩减操作

缩减操作需要离线处理。

LV的缩减

umount文件系统

umount /mnt/lv1

缩减文件系统

resize2fs /dev/vg0/lv1 4G

检查磁盘

e2fsck -f /dev/vg0/lv1

再次执行缩减操作

resize2fs /dev/vg0/lv1 4G

缩减LV

lvreduce /dev/vg0/lv1 -L 4G

挂在查看

mount /dev/vg0/lv1 /mnt/lv1

df -TH查看是否成功

VG的缩减

umount文件系统

umount /mnt/vg0

查看当前的PV详情

pvs

将/dev/sdg从vg0中移除

vgreduce /vg0 /dev/sdg

再次查看PV情况

pvs

发现sdg已经不属于vg0了

查看vg0的情况

vgs

vg0大小减少了5G,缩减成功

删除LVM

umount文件系统

umount /mnt/lv1

移除LV

lvs

lvreduce /dev/vg0/lv1

移除VG

vgs

vgreduce vg0

移除PV

pvs

pvreduce /dev/md5 /dev/sdf1 /dev/sdg /dev/sdh


LVM快照

LVM卷管理

创建快照

lvcreate -L 100M -s -n lv1snap /dev/vg0/lv1

将刚创建的快照挂载查看

mount /dev/vg0/lv1snap /mnt/snapshot

df会发现lv1和snapshot一模一样。

随便对lv1中的数据进行修改,或者直接rm删除

对snapshot里的资料进行打包备份,准备还原

cd /mnt/snapshot

tar cjf /tmp/lvm.tar.bz2 *

卸载并移除snapshot

umount /mnt/snapshot

lvreduce /dev/vg0/lv1snap

卸载并格式化/mnt/lv1,清空数据

umount /mnt/lv1

mkfs.ext4 /dev/vg0/lv1

恢复数据

mount /dev/vg0/lv1 /mnt/lv1

tar xjf /tmp/lvm.tar.bz2 -C /mnt/lv1