码迷,mamicode.com
首页 > 其他好文 > 详细

LVM

时间:2019-12-15 18:34:49      阅读:542      评论:0      收藏:0      [点我收藏+]

标签:cin   lvm   line   row   gre   备份   使用   partition   不同的   

(整理自《鸟哥的Linux私房菜》基础篇)

 

LVM 可以整合多个实体 partition 在一起, 让这些 partitions 看起来就像是一个磁盘一样!而且,还可以在未来新增或移除其他的实体 partition 到这个 LVM 管理的磁盘当中。

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

1.1 Physical Volume, PV, 物理卷

我们实际的 partition (或 Disk) 需要调整系统标识符 (system ID) 成为 8e (LVM 的标识符),然后再经过 pvcreate 的指令将他转成 LVM 最底层的物理卷 (PV) ,之后才能够将这些 PV 加以利用。

1.2   Volume Group, VG, 卷组

VG 就是 LVM 组合起来的大磁盘。

1.3   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 的最大容量!

1.4   Logical Volume, LV, 逻辑卷

最终的 VG 还会被切成 LV,这个 LV 就是最后可以被格式化使用的类似分区槽的东西了!那么 LV 是否可以随意指定大小呢? 当然不可以!既然 PE 是整个 LVM 的最小储存单位,那么 LV 的大小就与在此 LV 内的 PE 总数有关。

 那么 LVM 可弹性的变更 filesystem 的容量,那是如何办到的?其实他就是透过『交换 PE 』来进行数据转换, 将原本 LV 内的 PE 移转到其他装置中以降低 LV 容量,或将其他装置的 PE 加到此 LV 中以加大容量! VG、LV 与 PE 的关系有点像下图:

 技术图片

 

 

 2.LVM 实作流程

 技术图片

 

 还有一个问题,我的数据写入这个 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 默认的读写模式是线性模式。

 

假设现在有 5 个可用的分区槽,现在,我们实作 LVM 有点像底下的模样:

•        使用 4 个 partition ,每个 partition 的容量均为 1GB 左右,且 system ID 需要为 8e;

•        全部的 partition 整合成为一个 VG,VG 名称设定为 vbirdvg;且 PE 的大小为 16MB;

•        建立一个名为 vbirdlv 的 LV,容量大约 2G 好了!

•        最终这个 LV 格式化为 xfs 的文件系统,且挂载在 /srv/lvm 中

 2.1. Disk 阶段 (实际的磁盘)

 技术图片

 

 上面的 /dev/vda{5,6,7,8} 这 4 个分区槽就是我们的实体分区槽!也就是底下会实际用到的信息!至于 /dev/vda9 则先保留下来不使用。 注意看,那个 8e 的出现会导致 system 变成『 Linux LVM 』.

2.2PV 阶段

要建立 PV 其实很简单,只要直接使用 pvcreate 即可!我们来谈一谈与 PV 有关的指令吧!

•        pvcreate :将实体 partition 建立成为 PV ;

•        pvscan :搜寻目前系统里面任何具有 PV 的磁盘;

•        pvdisplay :显示出目前系统上面的 PV 状态;

pvremove :将 PV 属性移除,让该 partition 不具有 PV 属性。

2.3 VG 阶段

建立 VG 及 VG 相关的指令也不少,我们来看看:

•        vgcreate :就是主要建立 VG 的指令啦!他的参数比较多,等一下介绍。

•        vgscan :搜寻系统上面是否有 VG 存在?

•        vgdisplay :显示目前系统上面的 VG 状态;

•        vgextend :在 VG 内增加额外的 PV ;

•        vgreduce :在 VG 内移除 PV;

•        vgchange :设定 VG 是否启动 (active);

•        vgremove :删除一个 VG 啊!

与 PV 不同的是, VG 的名称是自定义的

2.4 LV 阶段

假设我要将刚刚那个 vbirdvg 磁盘,分区成为 vbirdlv ,整个 VG 的容量都被分配到 vbirdlv 里面去!先来看看能使用的指令:

•        lvcreate :建立 LV 啦!

•        lvscan :查询系统上面的 LV ;

•        lvdisplay :显示系统上面的 LV 状态啊!

•        lvextend :在 LV 里面增加容量!

•        lvreduce :在 LV 里面减少容量;

•        lvremove :删除一个 LV !

•        lvresize :对 LV 进行容量大小的调整!

 LV 的名称必须使用全名

2.5   文件系统阶段

 技术图片

 

 

3.放大 LV 容量

如果要放大 LV 的容量时, 该如何进行完整的步骤呢? 需要底下这些流程的:

1.     VG 阶段需要有剩余的容量:因为需要放大文件系统,所以需要放大 LV,但是若没有多的 VG 容量, 那么更上层的 LV 与文件系统就无法放大的。因此,你得要用尽各种方法来产生多的 VG 容量才行。一般来说,如果 VG 容量不足, 最简单的方法就是再加硬盘!然后将该硬盘使用上面讲过的 pvcreate 及 vgextend 增加到该 VG 内即可!

2.     LV 阶段产生更多的可用容量:如果 VG 的剩余容量足够了, 此时就可以利用 lvresize 这个指令来将剩余容量加入到所需要增加的 LV 装置内!

3.     文件系统阶段的放大:我们的 Linux 实际使用的其实不是 LV 啊!而是 LV 这个装置内的文件系统! 所以一切最终还是要以文件系统为依归!目前在 Linux 环境下,鸟哥测试过可以放大的文件系统有 XFS 以及 EXT 家族! 至于缩小仅有 EXT 家族,目前 XFS 文件系统并不支持文件系统的容量缩小喔!要注意!要注意!XFS 放大文件系统透过简单的 xfs_growfs 指令即可!

 

4 使用 LVM thin Volume 让 LVM 动态自动调整磁盘使用率

过程:

1.     由 vbirdvg 的剩余容量取出 1GB 来做出一个名为 vbirdtpool 的 thin pool LV 装置,这就是所谓的磁盘容量储存池 (thin pool)

2.     由 vbirdvg 内的 vbirdtpool 产生一个名为 vbirdthin1 的 10GB LV 装置

3.     将此装置实际格式化为 xfs 文件系统,并且挂载于 /srv/thin 目录内!

 

5.LVM 的 LV 磁盘快照

什么是 LV 磁盘快照啊?快照就是将当时的系统信息记录下来,就好像照相记录一般! 未来若有任何资料更动了,则原始资料会被搬移到快照区,没有被更动的区域则由快照区与文件系统共享。如图:

 技术图片

 

 左图为最初建置 LV 磁盘快照区的状况,LVM 会预留一个区域 (左图的左侧三个 PE 区块) 作为数据存放处。 此时快照区内并没有任何数据,而快照区与系统区共享所有的 PE 数据, 因此你会看到快照区的内容与文件系统是一模一样的。 等到系统运作一阵子后,假设 A 区域的数据被更动了 (上面右图所示),则更动前系统会将该区域的数据移动到快照区, 所以在右图的快照区被占用了一块 PE 成为 A,而其他 B 到 I 的区块则还是与文件系统共享。

照这样的情况来看,LVM 的磁盘快照是非常棒的『备份工具』,因为他只有备份有被更动到的数据,文件系统内没有被变更的数据依旧保持在原本的区块内,但是 LVM 快照功能会知道那些数据放置在哪里, 因此『快照』当时的文件系统就得以『备份』下来,且快照所占用的容量又非常小,所以特别适合用作备份。

 

那么快照区要如何建立与使用呢?首先,由于快照区与原本的 LV 共享很多 PE 区块,因此快照区与被快照的 LV 必须要在同一个 VG 上头。

大致流程为:

•        预计被拿来备份的原始 LV 为 /dev/vbirdvg/vbirdlv 这个东西~

•        使用传统方式快照建置,原始碟为 /dev/vbirdvg/vbirdlv,快照名称为 vbirdsnap1,容量为 vbirdvg 的所有剩余容量

然后是利用快照区复原系统,不过你要注意的是,你要复原的数据量不能够高于快照区所能负载的实际容量。

 

6 LVM 相关指令汇整与 LVM 的关闭

任务

PV 阶段

VG 阶段

LV 阶段

filesystem

(XFS / EXT4)

搜寻(scan)

pvscan

vgscan

lvscan

 

lsblk, blkid

建立(create)

pvcreate

vgcreate

lvcreate

mkfs.xfs

mkfs.ext4

列出(display)

pvdisplay

vgdisplay

lvdisplay

df, mount

增加(extend)

  

vgextend

lvextend (lvresize)

 

 

xfs_growfs

resize2fs

减少(reduce)

  

vgreduce

lvreduce (lvresize)

 

 

不支援

resize2fs

删除(remove)

pvremove

vgremove

lvremove

umount, 重新格式化

改变容量(resize)

  

  

lvresize

xfs_growfs

resize2fs

改变属性(attribute)

pvchange

vgchange

lvchange

/etc/fstab, remount

如何将 LVM 的装置关闭并移除?依据以下的流程来处理即可:

1.     先卸除系统上面的 LVM 文件系统 (包括快照与所有 LV);

2.     使用 lvremove 移除 LV ;

3.     使用 vgchange -a n VGname 让 VGname 这个 VG 不具有 Active 的标志;

4.     使用 vgremove 移除 VG:

5.     使用 pvremove 移除 PV;

6.     最后,使用 fdisk 修改 ID 回来。

LVM

标签:cin   lvm   line   row   gre   备份   使用   partition   不同的   

原文地址:https://www.cnblogs.com/ericz2j/p/12045232.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!