专栏首页Linux知识积累LVM原理及实现过程

LVM原理及实现过程

**参考文档:https://www.cnblogs.com/shawnloong/p/3722469.html ** LVM 的重点在于『可以弹性的调整 filesystem 的容量!』而并非在于效能与数据保全上面。需要文件的读写效能或者是数据的可靠性,可使用RAID。LVM 可以整合多个实体 partition 在一起, 让这些 partitions 看起来就像是一个磁碟一样!而且,还可以在未来新增或移除其他的实体 partition 到这个 LVM 管理的磁碟当中。如此一来,整个磁碟空间的使用上,实在是相当的具有弹性啊!

什么是 LVM:PV, PE, VG, LV 的意义

LVM 的全名是 Logical Volume Manager,中文可以翻译作逻辑卷轴管理员。之所以称为『卷轴』可能是因为可以将 filesystem 像卷轴一样伸长或缩短之故吧!LVM 的作法是将几个实体的 partitions (或 disk) 透过软件组合成为一块看起来是独立的大磁碟 (VG) ,然后将这块大磁碟再经过分割成为可使用分割槽 (LV), 最终就能够挂载使用了。但是为什么这样的系统可以进行 filesystem 的扩充或缩小呢?其实与一个称为 PE 的项目有关!底下我们就得要针对这几个项目来好好聊聊!

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

Volume Group, VG, 卷轴群组 所谓的 LVM 大磁碟就是将许多 PV 整合成这个 VG 的东西就是啦!所以 VG 就是 LVM 组合起来的大磁碟!这么想就好了。那么这个大磁碟最大可以到多少容量呢?这与底下要说明的 PE 有关喔~因为每个 VG 最多仅能包含 65534 个 PE 而已。如果使用 LVM 默认的参数,则一个 VG 最大可达 256GB 的容量啊!(参考底下的 PE 说明)

Physical Extend, PE, 实体延伸区块 LVM 默认使用 4MB 的 PE 区块,而 LVM 的 VG 最多仅能含有 65534 个 PE ,因此默认的 LVM VG 会有 4M*65534/(1024M/G)=256G。这个 PE 很有趣喔!他是整个 LVM 最小的储存区块,也就是说,其实我们的文件数据都是藉由写入 PE 来处理的。简单的说,这个 PE 就有点像文件系统里面的 block 大小啦。这样说应该就比较好理解了吧?所以调整 PE 会影响到 VG 的最大容量喔!

Logical Volume, LV, 逻辑卷轴 最终的 VG 还会被切成 LV,这个 LV 就是最后可以被格式化使用的类似分割槽的咚咚了!那么 LV 是否可以随意指定大小呢?当然不可以!既然 PE 是整个 LVM 的最小储存单位,那么 LV 的大小就与在此 LV 内的 PE 总数有关。为了方便使用者利用 LVM 来管理其系统,因此 LV 的装置档名通常指定为『 /dev/vgname/lvname 』的样式!

此外,我们刚刚有谈到 LVM 可弹性的变更 filesystem 的容量,那是如何办到的?其实他就是透过『交换 PE 』来进行数据转换, 将原本 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/hda1, /dev/hdb1 这两个 partition 加入到 VG 当中,并且整个 VG 只有一个 LV 时,那么所谓的线性模式就是:当 /dev/hda1 的容量用完之后,/dev/hdb1 的硬盘才会被使用到, 这也是我们所建议的模式。
  • 交错模式 (triped):那什么是交错模式?很简单啊,就是我将一笔数据拆成两部分,分别写入 /dev/hda1 与 /dev/hdb1 的意思,感觉上有点像 RAID 0 啦!如此一来,一份数据用两颗硬盘来写入,理论上,读写的效能会比较好。

基本上,LVM 最主要的用处是在实现一个可以弹性调整容量的文件系统上, 而不是在创建一个效能为主的磁碟上。因此,LVM 默认的读写模式是线性模式。 如果使用交错模式,要注意,当任何一个分区“归天”时,所有的数据都会“损坏”。所以,不是很合适使用这种模式。 如果要强调性能与备份,那么就直接使用 RAID 即可,不需要使用 LVM。

LVM测试

关于PV命令 pvcreate:将物理分区制作成 物理卷 PV pvscan:搜索当前系统里所有的具有 PV 属性的磁盘 pvdisplay:显示当前系统上的 PV 状态 pvremove:将 PV 属性删除,让其不具有 PV 属性,成为一般的分区

关于VG下命令 vgcreate:建立 VG 。它的参数比较多,一会儿详细介绍 vgscan:搜索当前系统里有多少个卷组 VG 存在 vgdisplay:显示当前系统里指定的 VG 或所有 VG 的信息 vgextend:在卷组 VG 中增加额外的物理卷 PV vgreduce:在卷组 VG 中删除 物理卷 PV vgchange:设置 VG 是否启动(active) vgremove:删除一个卷组 VG 本身

创建LV分区

格式化LV分区并挂载

扩展lv分区,可以在线扩展,不需要umount分区

减少分区大小,要注意一定卸载分区

检查分区文件系统正确性

这里两边指定的分区大小要一致,不然会造成分区错误

lv命令 lvcreate:用来建立 LV lvscan:查询系统上的 LV lvdisplay:显示系统上的 LV 状态 lvextend:在 LV 里增加容量 lvreduce:在 LV 里减少容量 lvremove:删除一个 LV 本身 lvresize:对 LV 进行容量大小的调整

本文分享自微信公众号 - Linux知识积累(LinuxLearning365)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 初识kafka中的生产者与消费者

    7. broker判断是否消息失败,成功则直接返回元数据【可选】,失败判断是否重试,对应做相应处理

    爬蜥
  • 如何阅读jdk源码?

    这篇文章主要讲述jdk本身的源码该如何阅读,关于各种框架的源码阅读我们后面再一起探讨。

    彤哥
  • 死磕 java集合之CopyOnWriteArrayList源码分析

    CopyOnWriteArrayList是ArrayList的线程安全版本,内部也是通过数组实现,每次对数组的修改都完全拷贝一份新的数组来修改,修改完了再替换掉...

    彤哥
  • CVPR 2019 | 图鸭科技 CLIC 图像压缩挑战赛冠军方案全解读

    AI 科技评论按:在 CVPR 2019 CLIC 图像压缩挑战赛中,图鸭科技所提出的算法 TucodecSSIM 夺得了 MS-SSIM 和 MOS 两项指标...

    AI科技评论
  • 突破Java面试(34)-Dubbo支持的协议

    在上一篇文章,我们说到dubbo的基本工作原理,那是你必须知道的,至少知道dubbo分成哪些层,然后平时怎么发起rpc请求的,注册、发现、调用,这些是最基本的。

    JavaEdge
  • iOS开发:字符串大小写相互转换的使用,汉字转拼音,字符串类型的判断

    在iOS开发过程中,有些时候需要用到这种情况,把获取到的英文字符串转换成想要的大小写类型;还有些时候是需要把获取到的汉字字符串转换成汉语拼音的形式;还有些时候来...

    三掌柜
  • 干货 | 聚焦「信息压缩」,IBM 携手 MIT 再解读「信息瓶颈」理论

    AI 科技评论按:深度学习的发展带给人工智能领域的影响可谓是革命性的,然而该领域目前还存在很多未解决的问题,其中就包括不可解释性等问题。而希伯来大学计算机科学家...

    AI科技评论
  • Instagram:如何提升音乐音频质量?

    Instagram在形成有意义的社区方面起着至关重要的作用,这是因为人们可以在Instagram上相互联系彼此并分享对他们来说最感兴趣的事情。为了帮助更好地促进...

    LiveVideoStack
  • BATJ 常考的 21 条 Linux 命令

    (它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径) cd /home 进入 '/ home' 目录 cd .. ...

    lyb-geek
  • 分布式文件系统监控

    分布式文件系统用来存储各种非结构化数据,例如海量的图片,海量的视频,海量的xml等数据。在这种分布式存储中,是不支持随机的读写的,要么直接覆盖,要么删除然后再...

    SRE运维实践

扫码关注云+社区

领取腾讯云代金券