linux-存储管理_LVM
1. 为何要用LVM
我们在对磁盘分区的大小进行规划时,往往不能确定每个分区使用的空间大小,只能凭经验分配一个大小,而我们通常使用的fdisk、gdisk等工具对磁盘分区后,每个分区的大小就固定死了,这么做的问题是
(1)如果分区设置的过大,就白白浪费磁盘空间
(2)如果磁盘设置的过小,就会导致磁盘空间不够用的情况
方法一:重新对磁盘进行分区,
方法二:通过软连接的方式将此分区的目录链接到另外一个分区。这样做虽然能够临时解决问题,但是给管理带来了麻烦。
2. 什么是LVM
逻辑卷管理LVM是硬盘的一个系统工具,无论是linux系统还是类似的其他系统,都是非常好用。传统的分区使用固定大小分区,重新调整大小十分麻烦。LVM可以创建和管理逻辑卷,而不是直接使用物理磁盘。可以弹性的管理逻辑卷的扩大缩小,操作简单,而不损坏已存储的数据。可以随意将新的硬盘添加到LVM,以直接扩展已经存在的逻辑卷。
通过lvm技术,可以屏蔽掉磁盘分区的底层差异,在逻辑上给文件系统提供了一个卷的概念,然后在这些卷上建立相应的文件系统。
下面是LVM中主要涉及的一些概念。
1、物理卷PV:
(physical volume),把常规的磁盘设备通过PVcreate命令对其进行初始化,形成了物理卷。其实就是硬盘或分区(面粉)
2、卷组VG:
(volume group),把多个物理卷组成一个逻辑的整体,这样卷组的大小是多个硬盘之和。或者理解为由一个或者多个PV组成的一个整体(面团)
3、逻辑卷LV
(logical volume),从卷组中划分需要的空间大小出来,用户仅需要对其格式化然后即可挂载使用,从VG中切割的空间用于创建文件系统。(切成馒头)
4、基本单元PE
(physical extend),分配的逻辑大小的最小单元,默认为4M的基本块(假设分配100M逻辑空间,则需要创建25个PE)
3. LVM优缺点总结:
优点:
1、可以在系统运行的状态下动态的扩展文件系统的大小,
2、文件系统可以跨多个磁盘,因此文件系统大小不会受物理磁盘的限制,
3、可以增加新的磁盘到LVM的存储中
4、可以以镜像的方式冗余重要的数据到多个物理磁盘。
5、可以方便的导出整个卷组到另外一台机器。
缺点:
1、加入额外的操作,存取性能受到影响
2、当卷组中的一个磁盘损坏时,整个卷组都会受影响
方案:底层用RAID+ 上层LVM=既有冗余又有动态扩展
在从卷组中移除一个磁盘的时候必须使用reducevg命令(该命令只能在root权限下使用,并不允许快照卷组的使用)
4. LVM的基本使用
(1)下载安装包:
yum install -y lvm2
(2)制作PV:可以对分区做,也可以对整块盘做
1、制作PV
[root@egon ~]
[root@egon ~]
2、查看
[root@egon ~]
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 --- 1.00g 1.00g
/dev/sdb2 lvm2 --- 1.00g 1.00g
(3)制作VG:将pv划入到vg中
[root@egon ~]
Volume group "vg1" successfully created
[root@egon ~]
VG
vg1 2 0 0 wz--n- 20.99g 20.99g
(4)创建逻辑攒LVM
从vg1中分出逻辑卷lv1_from_vg1、lv2_from_vg1
[root@egon ~]
[root@egon ~]
[root@egon ~]
LV VG Attr LSize Pool Origin Data% Meta% Move Log
Cpy%Sync Convert
lv1_from_vg1 vg1 -wi-a----- 100.00m
lv2_from_vg1 vg1 -wi-a----- 200.00m
(5)格式与挂载
[root@egon ~]
[root@egon ~]
[root@egon ~]
[root@egon ~]
df
5. 在线动态扩容
在线动态扩容的意思就是:
再不用卸载的情况下完成扩容。
命令如下:
lvextend -L [+]MGT /dev/VG_NAME/VL_NAME
(1)新增一块盘或者一个分区
fdisk /dev/sdb ......
partprobe
ls /dev/sdb4
(2)新增一个PV
[root@egon ~]
(3)把新增的PV扩到vg1里
[root@egon ~]
[root@egon ~]
(4)接下来对lv1_from_vg1扩容
[root@egon ~]
[root@egon ~]
6. 在线动态缩容与删除
(1)xfs不支持缩容
lvreduce -L [-]MGT /dev/VG_NAME/LV_NAME 缩减逻辑卷
(2)删除
1、删除lv之前需要先卸载挂载点
[root@egon ~]
[root@egon ~]
2、删除vg
[root@egon ~]
3、删pv:只能删掉哪些不属于任何vg的pv
[root@egon ~]
[root@egon ~]
7. 快照
1. 简介
LVM机制提供了对lv做快照的功能,也就是可以给文件系统做一个备份,lvm的快照采用复制技术(copy-on-write,cow)这比传统的备份技术的效率要高很多。
LVM采用的写时复制,是指当LVM快照创建的时候,仅创建实际数据的inode的硬链接(hard-link)。只要实际的数据没有改变,快照就只包含指向数据的inode指针,而非数据本身。快照会跟踪原始卷中的块的改变,一旦你更改了快照对应的文件或目录,这个时候原试卷上将要改变的数据就会改变之前拷贝到快照预留的空间。
创建快照实际上也是创建一个逻辑卷,只不过改卷的属性与普通逻辑卷的属性有点不一样,我们可以通过上图来理解快砸数据卷(图中的实线框表示快照区域,虚线框表示文件系统)
强调:
由于快照区与LV共享很多的PE区块,因此快照区与被快照的LV必须是同一个VG上头
1、VG中需要预留放快照本身的空间,不能全部占满
2、快照所在的VG需要与被备份的LV相同,不然会导致创建快照失败
总结:
快照的本质是一个特殊的LV,创建快照后,如果源数据中的文件被更新了,会将老数据给快照的空间,这就要求快照的空间也是够用的。一般设置生与开始的LV的空间大小相同即可。
2. 利用快照恢复单个文件
(1)准备好初始数据
[root@egon ~]
(2)查看vg1容量是够充足
lv1_from_vg1 属于卷组vg1,而vg1有足够的容量来分配给快照卷
vgs
(3)在vg1卷组里创建一个lv1_from_vg1的逻辑卷 《-L 指定拍照的分区的大小》 《-s 将文件设置成snapshot》
[root@egon ~]
(4)查看
lvs 可以查看新建的逻辑卷及快照lv
(5)修改文件/test/1.txt
[root@egon ~]
[root@egon ~]
(6)恢复数据
挂载快照:注意:快照在挂载的时候由于和原来的lvm是同一个uuid,而xfs是不允许相同uuid的文件系统挂载,所以需要加选项-o nouuid
[root@egon ~]
[root@egon ~]
hello egon
[root@egon ~]
cp:是否覆盖"/test1/1.txt"? y
[root@egon ~]
hello egon
fp: 如果要恢复的文件个数过多,可以直接合并
mount /dev/vg1/lv1_from_vg1 /test1/
echo hello egon > /test1/1.txt
lvcreate -L 1G -s -n lv1_from_vg1_snap /dev/vg1/lv1_from_vg1
touch /test1/2.txt
echo longge >>/test1/1.txt
mount -o nouuid /dev/vg1/lv1_from_vg1_snap /opt/
[root@egon ~]
hello egon
[root@egon ~]
[root@egon ~]
[root@egon ~]
merge 合并 convert 转变转换
[root@egon ~]
[root@egon ~]
hello egon