逻辑卷轴管理员LVM (Logical Volume Manager)

2018-06-05 11:06:40

lvm的主要作用在于可以弹性的调整 filesystem 的容量,如果我们之前使用平常的对磁盘进行分区格式化后,那么分区的容量就定死了,那么下次当容量不够的时候,我们只能重新分大的区,然后再将数据拷贝过来。而使用 lvm 就可以避免这些。

LVM 可以整合多个实体分区在一起, 让这些分区看起来就像是一个磁盘一样!而且,还可以在未来新增或移除其他的实体分区到这个 LVM 管理的磁盘当中。 如此一来,整个磁盘空间的使用上是相当的具有弹性啊!

PV, PE, VG, LV解释

LVM 的作法是将几个实体的 partitions(或 disk) 通过软件组合成为一块看起来是独立的大磁盘 (VG) ,然后将这块大磁盘再经过分区成为可使用分区(LV) , 最终就能够挂载使用了。但是为什么这样的系统可以进行 filesystem 的扩充或缩小呢?其实与一个称为 PE 的项目有关! 下面我们就简单介绍下。

Physical Volume, PV, 实体卷轴
我们实际的 partition (或 Disk) 需要调整系统识别码 (system ID) 成为 8e00 (LVM 的识别码) ,然后再经过 pvcreate 的指令将他转成 LVM 最底层的实体卷轴 (PV) ,之后才能够将这些 PV 加以利用! 调整 system ID 的方是就是通过 gdisk

Volume Group, VG, 卷轴群组
所谓的 LVM 大磁盘就是将许多 PV 整合成VG!所以 VG 就是 LVM 组合起来的大磁盘!这么想就好了。 那么这个大磁盘最大可以到多少容量呢?这与下面要说明的 PE 以及 LVM 的格式版本有关喔~在默认的情况下, 使用 32位的 Linux 系统时,基本上 LV 最大仅能支持到 65534 个 PE 而已,若使用默认的 PE 为 4MB 的情况下, 最大容量则仅能达到约 256GB 而已~不过,这个问题在 64位的 Linux 系统上面已经不存在了!LV 几乎没有 啥容量限制了

Physical Extent, PE, 实体范围区块
LVM 默认使用 4MB 的 PE 区块,而 LVM 的 LV 在 32 位系统上最多仅能含有 65534 个 PE (lvm1 的格式) ,因此默认的 LVM 的 LV 会有 4M*65534/(1024M/G) =256G。PE是整个 LVM 最小的储存区块,也就是说,其实我们的文件数据都是借由写入 PE 来处理的。简单的说,这个 PE 就有点像文件系统里面的 block 大小。 所以调整 PE 会影响到 LVM 的最大容量喔!不过,在 CentOS 6.x 以后,由于 直接使用 lvm2 的各项格式功能,以及系统转为 64 位,因此这个限制已经不存在了

Logical Volume, LV, 逻辑卷轴
最终的 VG 还会被切成 LV,这个 LV 就是最后可以被格式化使用的类似于分区!既然 PE 是整个 LVM 的最小储存单位,那么 LV 的大小就与在此 LV 内的 PE 总数有关。 为了方便使用者利用 LVM 来管理其系统,因此 LV 的设备文件名通常指定为“ /dev/vgname/lvname ”的样式! 将原本 LV 内的 PE 移转到其他设备中以降低 LV 容量,或 将其他设备的 PE 加到此 LV 中以加大容量! VG、LV 与 PE 的关系有点像下图

如上图所示,VG 内的 PE 会分给虚线部分的 LV,如果未来这个 VG 要扩充的话,加上其他 的 PV 即可。 而最重要的 LV 如果要扩充的话,也是通过加入 VG 内没有使用到的 PE 来扩充。

通过 PV, VG, LV 的规划之后,再利用 mkfs 就可以将你的 LV 格式化成为可以利用的文件系统了!整个流程由基础到最终的结果可以这样看

如此一来,我们就可以利用 LV来进行系统的挂载了。那么我的数据写入这个 LV 时,到底他是怎么写入硬盘当中的? 依据写入机制的不同,有两种方式

线性模式 (linear)
假如我将 /dev/vda1, /dev/vdb1 这两个 partition 加入到 VG 当中, 并且整个 VG 只有一个 LV 时,那么所谓的线性模式就是:当/dev/vda1 的容量用完之 后,/dev/vdb1 的硬盘才会被使用到, 这是默认模式,这也是我们所建议的模式。

交错模式 (triped)
将一笔数据拆成两部分,分 别写入 /dev/vda1 与 /dev/vdb1 的意思,感觉上有点像 RAID 0!如此一来,一份数据用两颗硬盘来写入,理论上,读写的性能会比较好

基本上,LVM 最主要的用处是在实现一个可以弹性调整容量的文件系统上, 而不是在创建一 个性能为主的磁盘上,所以,我们应该利用的是 LVM 可以弹性管理整个 partition 大小的用途 上,而不是着眼在性能上的。因此, LVM 默认的读写模式是线性模式! 如果你使用 triped 模式,要注意,当任何一个 partition “归天”时,所有的数据都会“损毁”的! 所以啦,不是很适合使用这种模式啦!如果要强调性能与备份,那么就直接使用 RAID 即可, 不需要用到 LVM。

实例请参照 linux逻辑卷管理员命令-lvm

©著作权归作者所有
收藏
推荐阅读
  • err
    磁盘阵列

    磁盘阵列全名是“ Redundant Arrays of Inexpensive Disks, RAID ”,英翻中的意思是:容错式廉价磁盘阵列。 RAID可以通过一个技...

  • xfs文件系统

    CentOS 7 开始,默认的文件系统已经由原本的 EXT4 变成了 XFS 文件系统了! EXT最不好的就是格式化超慢! Ext采用的是预先规划出所有的 inode/block/meta data ...

  • err
    ext2文件系统

    我们知道,当磁盘被分区后还是不能使用,要经过格式化成相应格式的文件系统才能被操作系统正式使用。较新的操作系统的文件数据除了文件实际内容外, 通常含有非常多的属性,例如 L...

  • err
    BIOS与UEFI开机检测程序

    BIOSBIOS则是一个写入到主板上的一个固件(固件就是写入到硬件上的一个软件程序) 。这个BIOS就是在开机的时候,计算机系统会主动执行的第一个程序了。接下来BIOS会...

  • err
    磁盘分区格式mbr、gpt

    MSDOS(MBR)早期的Linux系统为了兼容于Windows 的磁盘,因此使用的是支持 Windows 的 MBR(Master Boot Record, 主要开机纪...

  • nginx模块 ngx_http_headers_module

    ngx_http_headers_module 模块是用来增加 Expires 和 Cache-control,或者是任意的响应头。Syntax: add_header name value [alw...

  • nginx模块 ngx_http_gunzip_module、ngx_http_gzip_module、ngx_http_gzip_static_module

    ngx_http_gunzip_module 模块将文件解压缩后并在响应头加上 "Content-Encoding: gzip" 返回给客户端。为了解决客户端不支持gzip压缩。编译的时候带上 --w...

  • nginx模块 ngx_http_flv_module、ngx_http_mp4_module

    ngx_http_flv_module模块提供了对 flv 视频的伪流支持。编译的时候带上 --with-http_flv_module。它会根据指定的 start 参数来指定跳过多少字节,并在返回数...

  • nginx模块 ngx_http_fastcgi_module

    ngx_http_fastcgi_module 模块使得nginx可以与 fastcgi 服务器通信。比如目前要使得 nginx 支持 php 就得使用 fastcgi技术,在服务器上装上 nginx...

  • nginx模块 ngx_http_autoindex_module

    ngx_http_autoindex_module 模块可以将uri以 / 结尾时,列出里面的文件和目录。Syntax: autoindex on | off; Default: autoindex ...

简介
天降大任于斯人也,必先苦其心志。