2016.3.16 制作了一套LVM,可以通过它扩大或缩小分区上空间的大小。同时可以在软件级别,将数据制作快照,对原始数据进行备份。它本身不能代替RAID,LVM的重点在于可以弹性调整文件系统的容量!而并非在于性能与数据保全上面。但根据Linux哲学思想:"存在即合理",今天决定系统的将它整理出来,并分享给大家,以备今后的工作学习之用。

    原理:LVM可以整合多个物理分区在一起,让这些分区看起来就像是一个磁盘一样,而且将来可以将这些分区从LVM中删除、或添加。

     作用:LVM的重点在于可以弹性调整文件系统的容量

z

LVM扩容制作流程:

    1、fdisk创建磁盘分区修改为8e,这里就不多解释了,详情可以参考磁盘管理部分。

    2、通过pvcreate将分区磁盘转成LVM最底层的物理卷"PV"(这里模拟4个分区)

#pvcreate /dev/sda{5,6,7,8}
#pvscan --->可以显示每个PV的信息,尤其是最后一行。
#pvdisplay --->可以更详细的列出PV的信息

    3、所谓LVM大磁盘就是将许多PV整合成VG,所以VG就是LVM组合起来的大磁盘。这个磁盘的容量取决于"PE"物理扩展块。因为每个VG最多包含65534个PE,如果使用LVM默认参数,则一个VG最大可达256G;(默认:4M)"PE"是整个LVM最小的存储单位,类似于文件系统里block大小。

 格式:vgcreate -s "PE大小" VGName PVName

#vgcreate -s 16M myvg /dev/sda{5,6,7}--->将/dev/sda5-7新建成一个VG,且指定PE大小为16MB
#vgscan--->查看系统上面是否有VG存在,此时会发现"myvg"已经存在了
#pvscan--->可以发现/dev/sda{5,6,7}三个PV被用掉,还有一个没有被用
#vgdisplay--->可以查看当前系统上VG的状态,包括VG大小、PE的使用量。


   4、最终VG还会被切成LV,这个LV就是最后可以被格式化使用的类似分区;LV的设备文件通常指定为"/dev/VGName/LVName"的样式。

 格式:lvcreate -L "PE大小" -n "LVName" "VGName"  也可将"L" 换为"l" 指定PE的个数vgdisplay可查

#lvcreate -L 4G -n mylv myvg --->指定LV大小为4G,名称为mylv 隶属于myvg这个卷用户组
#lvdisplay 显示查看系统上面LV的状态;

  5、格式化,挂载查看我们的LV

#mkfs -t ext3 /dev/myvg/mylv
#mkdir /mnt/lvm
#mount /dev/myvg/mylv /mnt/lvm
#df -lh

 6、放大LV容量;首先要先加物理磁盘、创建为PV卷、在VG内增加额外的PV、放大LV的空间、完整的将LV的容量扩充到整个文件系统。

    /dev/sda8我们还未使用,就这样加进去吧

#pvcreate /dev/sda8 创建PV
#pvscan
#vgextend myvg /dev/sda8 --->将PV加入到myvg中
#vgdisplay --->查看详细信息
#lvresize -L +2G /dev/myvg/mylv --->将新加入的PV内的PE加入mylv中
#df /mnt/lvm
#resize2fs /dev/myvg/mylv --->增加文件系统的容量
#df /mnt/lvm --->会发现空间扩容了而文件还在

 

LVM缩小容量:

    1、首先要降低文件系统的容量

#pvdisplay --->可以查看所有myvg下的磁盘,例如我们想减掉/dev/sda5
#pvscan --->我们会发现扣除/dev/sda5 则剩余的容量为7G左右
#resize2fs /dev/myvg/mylv 7000M ---> 注意此行代码含义为减到7000M ,注意不支持小数点位
#umount /mnt/lvm --->执行上一步需要先卸载
#resize2fs /dev/myvg/mylv 7000M --->此时会提示我们强行检查磁盘
#e2fsck -f /dev/myvg/mylv 
#resize2fs /dev/myvg/mylv 7000M ---执行成功

   2、其次要降低lv的容量

#lvresize -L 7000M  /dev/myvg/mylv --->将lv容量减到7000M;也可以-l -PE个数 /dev/myvg/mylv
#lvdisplay ---> 可以查看此时LV逻辑卷的大小,发现变小了

   3、接下来就要将/dev/sda5移除myvg这个VG之外,我们要先确认/dev/sda5 里面的PE完全不被使用后才能将其抽离。所以要这样玩!

#pvdisplay --->重点查看Totle PE 和Free PE 如果/dev/sda5 PE被占用要先移动到别的盘如下
#pvmove /dev/sda5 /dev/sda6 --->将sda5中的信息全部存入sda6中
#vgreduce myvg /dev/sda5 --->将sda5移除myvg中
#pvscan--->可以查看是否被移除
#pvremove /dev/sda5 ---> sda5 就彻底消失啦,就可以把这块儿磁盘拔下来了。


小插曲:CentOS-7的xfs文件系统扩容方法:

 在lvm扩展时,发现一个xfs文件系统的特点,与大家分享一下.
lvm扩展后使用resize2fs去扩展文件系统大小时,系统报错显示找不到文件系统的superblock,后来发现resize2fs只适用于ext系列文件系统。 而xfs文件系统在扩充lv之后,扩展文件系统大小的工具是:xfs_growfs
具体如下:
ext系列;
# lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
# resize2fs /dev/VG_NAME/LV_NAME
xfs系列:
# lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
# xfs_growfs /dev/VG_NAME/LV_NAME  



使用LVM制作快照:

    1、为mylv制作快照;要先查看PE剩余多少,如果不够要加磁盘制作VG

#vgdisplay --->主要查看myvg这个组剩余多少VG
#lvcreate -l 60 -s -n myss /dev/myvg/mylv 
格式:lvcreate -l "PE个数"  -s -n "快照名" /dev/myvg/mylv ---> -s 启用快照功能; -n 跟快照名称;
#lvdisplay --->重点看lv size:被快照的原LV磁盘容量;COW-table size:快照区实际容量
  COW-table LE : 快照区占用的PE数量

    2、接下来就创建目录挂载快照分区吧

#mkdir /mnt/snapshot --->snapshot快照的意思
#mount /dev/myvg/myss /mnt/snapshot  --->myss是创建快照时启的名字
#df --->会发现一个和LV逻辑卷一模一样的逻辑卷


LVM恢复快照:

    LVM快照恢复,是站在软件的高度去对数据进行恢复;与raid不同的是: raid磁盘坏了,可以通过镜像、校验码对数据进行恢复。

    而LVM所谓的快照,举例原文件中有123三个数字,我将1修改为0,这时候1就会被存入快照卷,只要磁盘没有损坏,随时都可以还原成修改之前的样子。

    恢复数据的方法可以通过创建一个目录,将快照打包存入该文件中,打包的过程快照会比对LVM逻辑卷和快照卷有什么不同,并将修改以前的数据存入到压缩包内。

然后卸载快照卷、逻辑卷;重新格式化逻辑卷并将备份的压缩包解压至:格式化之后的逻辑卷当中即可

#mkdir -p /backups 
#cd /mnt/snapshot --->进入到快照分区所挂载的磁目录下
#tar -jcv -f /backups/lvm.tar.bz2 *   --->此时你就有了一个备份资料了
#umount /mnt/snapshot --->卸载快照卷
#lvremove /dev/myvg/myss --->删除快照卷;不要害怕奔放一点,在格式化lvm卷组之后,它将丢掉所有数据。因为格式化之前会umount lvm组,它来不及备份
#umount /mnt/lvm 
#mkfs -t ext3 /dev/myvg/mylv
#mount /dev/vyvg/mylv /mnt/lvm
#tar -jxv -f /backups/lvm.tar.bz2 -C /mnt/lvm 会发现数据恢复了

为什么要备份呢,为什么额不直接格式化/dev/myvg/mylv然后将/dev/myvg/myss直接复制给mylv呢?要知道myss其实是mylv的快照,因此如果你格式化整个lv,原文件系统所有的数据都会被移到myss中,如果myss容量不够大,数据也就不再完整。



                                                Page:473