您的位置:首页 > 运维架构 > Linux

LVM详解;Linux逻辑卷管理

2018-02-27 11:22 696 查看
目录:

LVM技术的产生原因

LVM术语介绍

LVM快照原理

案例精析
步骤分析

实操

LVM技术的产生原因

LVM是存储的一种管理方式。

LVM全称是逻辑卷管理,LogicalVolumeManager(逻辑卷管理) ​

我们在部署服务器的时候最底层是存储设备磁盘,上层是文件系统​,我们不管是做RADI还是做LVM都是为了创建文件系统,所以RAID和lvm都是为了让咱们管理存储更加方便。通过下面两幅图我们能够看到他们之间的关系





使用LVM的优点有哪些?

文件系统可以跨多个磁盘,因此文件系统大小不会受物理磁盘的限制。

可以在系统运行的状态下动态的扩展文件系统的大小。

可以增加新的磁盘到LVM的存储池中。

可以以镜像的方式冗余重要的数据到多个物理磁盘。

可以方便的导出整个卷组到另外一台机器。

LVM术语介绍

物理卷Physical Volume(PV):可以在上面建立卷组的媒介,可以是硬盘分区,也可以是硬盘本身或者回环文件(loopback file)。物理卷包括一个特殊的header,其余部分被切割为一块块物理区域(physical extents)

卷组Volume Group(VG):由一个或多个物理卷PV组成。可以在卷组上创建一个或多个LV(逻辑卷)

逻辑卷Logical Volume(LV):虚拟分区,由物理区域(physical extents)组成

物理区域Physical Extent(PE):硬盘可供指派给逻辑卷的最小单位(通常为4MB)

逻辑区域Logical Extent(LE):跟PE一样,只不过站在LV的视角上是叫LE,而在VG的视角上则是叫PE,其本质是一样的

注解:分区的大小为物理边界。文件系统的大小为逻辑边界或文件系统边界

以上这些专业术语之间的逻辑关系如下图所示



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建立流程:

建立PV

建立VG,将PV加入到VG中。

建立LV,并设置LV大小。

格式化LV或LP成你需要的文件系统。

LV删除流程:

umountFS

删除LV。

将PV从所在的VG中删除。

删除VG。

实操

练习:

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并没有挂载到该目录中。也许,在真正的生产环境中,每做一个操作,都要进一步的设置,以保证这个操作不仅当前有效,而且服务器重启之后依然有效。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: