Lvm是基于内核中的dm模块开发的。目前常用的lvm版本为2.
Lvm作用:将多个底层块设备PV,组合成一个逻辑块设备VG,在这个逻辑块上创建分区LV
VG类似于扩展分区
有一组工具可作用于dm模块来管理LVM
LV有两个边界:逻辑边界:可使用的文件系统大小
物理边界:可使用的PV大小
LV可以跨磁盘,可以有几个磁盘分区,raid组成;可以动态的扩大,缩小。
PE(物理盘区):在创建VG时需要指定,为LVM的最小存储单元,给LV分配多少个PE来作为LV的可用空间。
LE(逻辑盘区):PE一旦分配给LV,就成为LE
逻辑卷主要功能:快照----作用:用于(数据库服务器)的数据备份----与cp不同,快照对原卷在同一卷组内,创建一个快照卷:1)以后访问原卷有两条路径:一,将原卷挂载作为访问入口。二,把快照卷挂载作为访问入口----(若原卷文件未修改,则到原卷下访问文件;原卷下如果要修改某文件,会将该文件复制一份到快照卷然后再修改,因此如果要访问的文件已被修改,则访问快照卷中的文件。)-----快照的含义就是将所有文件的某一时刻的状态保存下来,因此它不用和原卷一样大,因为它只需要保存原卷中被修改的文件的原始文件。问题是:****如果快照卷有100M大,但是原卷中被修改的文件已经超过了100M,快照卷放不下了,因此快照卷会崩溃------*****因此,快照卷的空间至少要保证在一定时间范围内能容纳所有的变化过的文件的空间,快照卷是作为临时备份的访问路径的,备份完成后,此快照可以删除,为了防止快照卷因为空间不够而崩溃,应该在创建快照卷后,尽快完成备份!!
然后删除快照卷。
-----------例如:mysql数据库有多种备份方式,其中基于LVM的快照备份也是重要的备份方式。
LVM的两大功能
1) LV大小可以便捷的调整
2) 支持快照
马哥建议:根文件系统应该放在LV上
Pv:可以是任何物理块设备;分区;raid设备
Vg:将多个PV组合起来,类似扩展分区,必须再次划分才能使用,一个vg可以创建多个lv,1个lv可以跨越多个pv,也可以只占用1个pv的1部分。
一、创建LV的大致过程:
1) 创建PV
2) 创建vg,将pv加入vg
3) 为lv指定大小,并创建lv
示例:
1) 建PV #fdisk/dev/sdb +5G t 8e.#fdisk /dev/sdc +5G t 8e#partx|partprobe|reboot#pvcreate /dev/sd{b,c}5#(查看pv命令为如下)pvs#pvdisplay
2) 建VG语法格式#vgcreateVGNAME /dev/sdb5 -s(指定PE大小,范围从8K-16G,默认为4M)#实例#vgcreate testvg /dev/sd{b,c}5#(查看vg命令为如下两条)#vgs#vgdisplay
3) 建LV语法格式#lvcreate -L SIZE -n LV_NAME VGNAME -l PE个数(lv设备文件名称一般有2个(1)/dev/VGNAME/LVNAME(2)/dev/mapper/vgname-lvname这两个文件都链接到/dev/dmXX文件,XX为LV的编号)#实例#lvcreate -l 5G -n mylv testvg #(查看lv命令为如下两条)#lvs#lvdisplay /dev/testvg/mylv
4) 格式化LV#mke2fs -t ext4 /dev/testvg/mylv
5) 挂载LV#mount /dev/testvg/mylv /mnt
二、扩展VG
1)准备一个新的PV #fdisk /dev/sdb t 8e (2)pvcreate /dev/sdb6
2)#vgs#vgextend testvg /dev/sdb6 #vgs #pvs(查看此pv属于哪个vg)
三、缩减VG(1,确定要移除的PV 2,将此PV上数据转移至其他PV 3从VG中将此PV删除)
1)#pvs#pvmove/dev/sdb5(转移此PV上的数据至其他PV*!前提:确定VG中的剩余容量大于此PV数据量!!)
2)vgreduce testvg /dev/sdb5 #vgs
3)删除PV#pvremove /dev/sdb4
四、扩展LV(1,先扩展物理边界,确定扩展多大;2,扩展前确定当前LV所在VG有足够的空闲空间!!!)
1)扩展LV的物理边界#lvextend -L [+]SIZE /path/to/LV(带+号表示加上多少空间,不带加号表示扩展到多大空间)#vgs(确定vg空闲空间)#lvextend �CL +3G /dev/testvg/mylv #df �Clh
2)扩展LV的逻辑边界#resize2fs /path/to/device #resize2fs /dev/testvg/mylv#df �Clh
***扩展LV后可能会引发文件系统的问题,因此要进行文件系统检测(fsck/e2fsck)(一般扩展LV不用检查,缩减LV必须检查!!!)
检查文件系统命令的语法格式:fsck -a(自动修复检测到的错误) �Cf(强行检测)-t(指定fs类型) /path/to/device
3)检测LV文件系统#卸载LV#umount/mnt#e2fsck /dev/testvg/mylv
五,缩减LV(先确定缩减为多大;!前提:确定LV已有数据量小于LV缩减后的容量)
1) 卸载并强行检测fs#umount /mnt ##e2fsck �Cf /dev/testvg/mylv
2) 缩减逻辑边界#resize2fs /dev/testvg/mylv 3G(将LV mylv的逻辑边界缩小为3G大小)
3) 缩减物理边界#lvreduce�CL 3G /dev/testvg/mylv (出现提示输入y,回车)
4) 再检查fs##e2fsck �Cf /dev/testvg/mylv
5) 挂载#mount /dev/testvg/mylv /mnt #cat /mnt/xxx #df -lh
六、创建快照卷((1),只能与要创建快照卷的原卷在同一VG上,因此创建快照卷不用指定VG;(2),需指定:1对哪个LV做快照,2定义快照卷的权限为只读;因为:快照卷只是访问原卷的一个通道,不能被修改)
语法格式:lvcreate -L SIZE -s(指定原卷) �Cp r (限制快照卷为只读访问) -n LVNAME(指定快照卷的名称,任何一个LV都需要一个名称)
示例如下:
1)lvcreate -L 50M �Cs �Cp r �Cn mylv_snap /dev/testvg/mylv(实际给它分配的大小为52M,因为LV的大小单位最小为PE,默认1个PE单位是4M)
2)#lvs#mount �Coro /dev/testvg/mylv_snap /media#ls /media
3)测试,修改原卷中的数据,加一行到xxx中#cat /media/xxx 发现依然是以前的文件样子#cp yyy/mnt#ls /media发现内容没有变
4)快照卷的目的为备份,建立快照卷,挂载,将原卷中的数据备份好,就可以将快照卷删除,因为此时快照卷已经没有意义了。
5)快照卷的特点:快照卷与cp不同,快照卷保存的文件状态一定是同一时刻的。
6)备份:tar Jcf /tmp/backup.tar.xz /media/{fstab,inittab} #ls /tmp
7)卸载删除快照卷#umount /media#lvremove /dev/testvg/mylv_snap(出现提示输入y,回车)#lvs
***备份快照要及时,等原卷被修改的文件容量大于快照卷的容量,导致快照卷崩溃就来不及了。
七、移除逻辑卷(1,确保它确实没用了;2,卸载它;3,lvremove /path/to/lv)
1)Umount /mnt
2)lvremove /dev/testvg/mylv (出现提示输入y,回车)
问题,用raid1存储数据,还要不要备份?
答:要!raid1只是保证数据不会因为硬件损坏而丢失;人为误操作等因素也有可能导致数据丢失。
问题,快照卷只能备份一个时间点的数据,那么那个时间点以后发生变化的数据如何备份?
答:会在将mysql时提到这个问题的解决方案,这需要通过其他策略来实现。
八、移除VG(1,LV都没用了;2,LV都删完了;3,vgremove VGNAME)
1)umount /mnt#fuser �Cv /mnt#fuser �Ckm/mnt#umount /mnt
2)lvremove /dev/testvg/mylv(出现提示输入y,回车)#lvs(确定vg中无任何lv了)
3)vgremove testvg #vgs #pvs #移除PV可用命令#pvremove /dev/sdc6#pvremove /dev/sdc5