目录:
LVM是存储的一种管理方式。
LVM全称是逻辑卷管理,LogicalVolumeManager(逻辑卷管理)
我们在部署服务器的时候最底层是存储设备磁盘,上层是文件系统,我们不管是做RADI还是做LVM都是为了创建文件系统,所以RAID和lvm都是为了让咱们管理存储更加方便。通过下面两幅图我们能够看到他们之间的关系
使用LVM的优点有哪些?
文件系统可以跨多个磁盘,因此文件系统大小不会受物理磁盘的限制。
可以在系统运行的状态下动态的扩展文件系统的大小。
可以增加新的磁盘到LVM的存储池中。
可以以镜像的方式冗余重要的数据到多个物理磁盘。
我们知道LVM可以弹性的调整文件系统的大小,其实LVM除了可以调整文件系统的大小之外,还有另一个功能就是系统快照。
所谓系统快照就是将某一时刻文件系统中的数据记录到快照区中,这里的某一时刻指的是在原始数据被改变的那一瞬间,原始数据会移到快照区里。而其他没有改变的数据,快照区和文件系统共享。所以刚建立快照时快照区内容和文件系统的内容一样。
由于只有当数据发生改变是才会将原始数据移动到快照区,因此快照区中保存的内容比较少。
快照区的原理图如下:
在刚创建快照的时候,文件系统和快照区共享所有的PE,也就是说此时的快照区和文件系统的内容是一样的。并且在快照区中保留的一些区块,这些区块用于存储数据的(如左图的左侧三个区块)。当文件系统的某个区块的数据将要发生改变时,则会将这个区块中的原始数据移动到快照区的空留处。而那些没有被修改的区块,仍然与文件系统共享。在上图中,区块A的数据将要发生改变,所以就将区块A的数据移动到快照区中,而B到I之间的区块没有修改,仍然和文件系统共享。由此可以看出,LVM的系统快照功能也是一个备份工具。
当一个snapshot创建的时候,仅拷贝原始卷里数据的元数据(meta-data)。创建的时候,并不会有数据的物理拷贝,因此snapshot的创建几乎是实时的,当原始卷上有写操作执行时,snapshot跟踪原始卷块的改变,这个时候原始卷上将要改变的数据在改变之前被拷贝到snapshot预留的空间里,因此这个原理的实现叫做写时复制(copy-on-write)。
在写操作写入块之前,将原始数据移动到 snapshot空间里,这样就保证了所有的数据在snapshot创建时保持一致。而对于snapshot的读操作,如果是读取数据块是没有修改过的,那么会将读操作直接重定向到原始卷上,如果是要读取已经修改过的块,那么就读取拷贝到snapshot中的块。
创建snapshot的大小并不需要和原始卷一样大,其大小仅仅只需要考虑两个方面:从shapshot创建到释放这段时间内,估计块的改变量有多大;数据更新的频率。一旦 snapshot的空间记录满了原始卷块变换的信息,那么这个snapshot立刻被释放,从而无法使用,从而导致这个snapshot无效。
LV建立流程:
LV删除流程:
练习:
1)创建一个至少有两个PV组成的大小为20G的名为testvg的VG;要求PE大小为16MB, 而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录
1. 创建pv
[root@localhost ~]# pvcreate /dev/sda6 /dev/sdb1
//这两个分区一块儿是16G的,一块儿是4G的。
//查看pv(pvs,pvdisplay)
[root@centos ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda6 lvm2 ---- 16.00g 16.00g
/dev/sdb1 lvm2 ---- 4.01g 4.01g
[root@centos ~]# pvdisplay
"/dev/sda6" is a new physical volume of "16.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sda6
VG Name
PV Size 16.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID Qj8AC0-3o4k-AWRc-vZti-daND-wdR3-ncYX9V
"/dev/sdb1" is a new physical volume of "4.01 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 4.01 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID d9AIXC-iQH8-Aqfg-HgI2-8cBs-zYne-77JIJk
2.创建VG
[root@centos ~]# vgcreate -s 16M testvg /dev/sdb1 /dev/sda6
Volume group "testvg" successfully created
//查看vg
[root@centos ~]# vgdisplay
3.创建lv
[root@centos ~]# lvcreate -L 5G -n testlv testvg
Logical volume "testlv" created.
[root@centos ~]# lvdisplay
//查看lv
4.格式化lv与挂载
[root@centos ~]# mke2fs -t ext4 /dev/testvg/testlv
//格式化
[root@centos ~]# mount /dev/testvg/testlv /usrs/
//挂载
2)新建用户archlinux,要求其家目录为/users/archlinux,而后su切换至archlinux用户,复制/etc/pam.d目录至自己的家目录
[root@centos /usrs]# useradd -d /usrs/archlinux archlinux
//添加用户
[root@centos /usrs]# cp -r /etc/pam.d/ ./archlinux/
//拷贝文件到家目录中
3)扩展testlv至7G,要求archlinux用户的文件不能丢失
//1.扩展逻辑卷标
[root@centos /usrs]# lvextend -L 7G /dev/testvg/testlv
//2.扩展文件系统
[root@centos /usrs]# resize2fs /dev/testvg/testlv
//3.查看之前存储内容
[root@centos /usrs]# ls ./archlinux/
4)对testlv创建快照,并尝试基于快照备份数据,验证快照的功能
[root@centos /usrs]# lvcreate -L 100M -s -n snap_20180227 -p r /dev/testvg/testlv
//创建快照
[root@centos /usrs]# mount /dev/testvg/snap_20180227 /mnt/
//挂载快照
[root@centos /usrs]# rm -rf /usrs/*
//删除源文件内容
[root@centos /usrs]# cp -a /mnt/* /usrs/
//将快照内容拷贝回源文件
[root@centos /usrs]# ls /usrs/
//查看现在源文件的内容
[root@centos /usrs]# umount /mnt/
//卸载快照
[root@centos /usrs]#lvremove /dev/testvg/snap_20180227
//删除快照
【注解:】在做实验的时候,第一天做了一半儿,剩下的一半儿是第二天做的,然后服务器直接重启了,这就导致了一个问题。我的/usrs目录中没有任何内容,后来排查之后发现是LV并没有挂载到该目录中。也许,在真正的生产环境中,每做一个操作,都要进一步的设置,以保证这个操作不仅当前有效,而且服务器重启之后依然有效。