跳到主要内容

30、Linux 教程:LVM和SELinux简介

LVM和SELinux简介

逻辑滚动条管理员Logical Volume Manager

如果出现磁盘空间不够用的情况,那就需要加入新的磁盘,一般情况下会重新分区、格式化,把原磁盘的数据完整的复制过来,卸载原挂载点进行重新挂载,这个过程过于繁琐,LVM就可以解决这个问题。

LVM(Logical Volume Manager)可以弹性调整文件系统的容量,通过软件将多个分区(或多个磁盘)整合在一起,看起来像是一个磁盘一样。

几个重要概念

1、 PhysicalVolume,PV,实体滚动条;

实际的分区或磁盘需要调整系统标识符(systemID)为8e,然后通过pvcreate命令将它转成LVM最底层的实体滚动条PV,这是使用LVM的准备工作,查看和修改系统标识符需要用gdisk或fdisk:

 

2、 VolumeGroup,VG,滚动条群组;

LVM就是将许多PV整合成VG,VG相当于整合起来的大磁盘。

3、 PhysicalExtent,PE,实体范围区块;

PE是LVM的最小储存区块,写入LVM实际上就是写入PE,调整PE会影响到LVM的最大容量。

4、 LogicalVolume,LV,逻辑滚动条;

VG最终会被切成LV,这个LV就是可扩展的分区槽了,但是它并不是可以随意指定大小的,这个大小必须是PE的整数倍,因为PE才是LVM的最小储存单位。所谓弹性调整文件系统,其实本质上是LV之间交换PE的操作,PE可以自由的加入或退出某个LV,如下图所示:

 

设置LVM的基本流程

建立LVM的基本流程就是,首先修改systemid建立PV、然后以PV建立VG,从VG分离出LV,最后格式化挂载使用,如下图:

 

数据写入方式

数据写入LV时有两种方式:

1、 线性模式(linear):两个分区或磁盘加入LVM时,文件写入会先写入其中一个,写满后再写入另外一个;

2、 交错模式(triped):两个分区或磁盘加入LVM时,文件会拆成两部分写入两个区域,类似RAID0,这样读写效率会提升;

LVM默认采用线性模式,因为后一个模式下一个分区出问题就会造成文件损坏,考虑到LVM的主要用处是弹性调整文件系统容量,而不是提高读写性能,故默认用第一种。

动态调整的机理

设置好LVM时要调整已有的LV,需要几个前提条件:

1、 VG阶段必须要有剩余的容量,LV才能被放大;

2、 XFS文件系统不支持文件系统的容量缩小,只能放大;

动态调整LV实质上就是在改变文件系统,LV的放大缩小通过的是增加或减少文件系统中的block group来完成的,放大文件系统后,会格式化新增的部分,然后将格式化后的数据信息写入文件系统的superblock。

LVM thin volume

这是一个特殊的LV,由一个thin pool分配而来,这个thin pool可能只有1GB,但是可以分配一个10GB的LV装置,当这个LV的空间被占用时,会从thin pool中取得实际所需要的容量,但是实际使用容量不能超过thin pool的最大实际容量,突破该容量可能导致其中的文件损坏。

通过这种方式,一个小磁盘可以仿真出很多容量,本来磁盘使用率已经超过50%了,使用了LVM thin volume后磁盘占用率可以降低到5%甚至1%,但仅仅是名义上的数字,并没有实际多出存储空间。

LV磁盘快照

LV磁盘快照就像照相记录一样记录当时的系统信息,是非常强大的备份工具。

 

如上图所示,最初建立LV磁盘快照时,LVM会预留一个快照区(上图中为3个PE),此时快照区内没有数据,而快照区和系统区共享所有的PE数据,即A-I。等系统运作了一段时间后,假设A区域的数据被变动了,则数据变动前系统会将该区域的数据移动到快照区,快照区被占用了一块PE,而系统共享区变为了B-I。

综上所述,LVM磁盘快照只备份修改的数据,没有修改的数据还在原来的位置与快照区共享,这就使得快照占用的容量很小。

使用LV磁盘快照的前提条件是快照区和被快照的LV必须在同一个VG中。

为了保证快照区能正常恢复系统,要求快照区的大小必须大于被改动的数据量,否则就会造成快照区容纳不下原始数据,导致快照功能失效。

快照除了恢复以外,还可以进行对比前后数据的差异。

快照是测试非常重要的工具,即使出现重大错误也可以用快照恢复,非常方便快捷。

SELinux简介

DAC和MAC

SELinux(Security Enhanced Linux)是进行进程、文件等细部权限设定依据的一个核心模块。早期人们发现,由外部发动的攻击很少,系统经常出现问题的原因是内部员工的资源误用,而且主要是权限设计问题,因此开发了SELinux模块。

传统的文件权限与账号关系采用的是自主式访问控制DAC(Discretionary Access Control),此时各种权限设定是对root无效的,主要依据进程的拥有者和文件资源的rwx权限来决定有无存取能力,SELinux引入了委任式访问控制(Mandatory Access Control),root在使用不同的进程时不一定能取到所有的权限,而要看进程的设置,每个文件对不同进程也有不同的权限控制。下图是设置SELinux前后的差别:

 

DAC存取时,只要root主导apache进程,它就能在这三个目录下做任何文件的修改和新增;MAC管理时,即使root控制apache进程运行,但是也只能针对部分目录修改和新增。

几个重要的概念

MAC控制的主体是进程,主体(Subject)就是进程,目标(Object)是文件系统,SElinux提供三个主要的政策:

1、 targeted,针对网络服务限制较多,针对本机限制较少,这也是预设的政策;

2、 minimum,仅对选择的进程进行保护;

3、 mls,完整的SELinux限制,限制方面较为严格;

主体能不能存取目标,取决于政策指定,此外还需要主体与目标的安全性本文必须一致,如果安全性本文对比失败则无法存取目标。文件的安全性本文一般存在inode中,进程的安全性本文存在内存中。