首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

100个Linux命令(5)-LVM

这是100个命令的第58个命令,包含了LVM 中pvcreate、vgcreate、lvcreate 等命令的使用方法以及 LVM 的原理的简要介绍。

原理篇

概念

LVM(Logical Volume Manager)可以让 lvm 格式的分区容量变得弹性,可以随时扩大或缩减分区的大小。

  • PV(Physical Volume)物理卷 磁盘分区后(还未格式化为文件系统)使用 pvcreate 命令可以将硬盘分区创建为 pv,此分区的 systemID 为8e,即为 LVM 格式的系统标识符。
  • VG(Volume Group)卷组 将多个 PV 组合起来,使用 vgcreate 命令创建成卷组。卷组包含了多个 PV,相当于重新整合了多个分区后得到的硬盘。虽然 VG 整合了多个 PV,但是创建 VG 时会将所有空间根据指定 PE 大小划分为多个 PE,在 LVM 模式下的存储都是以 PE 为单元,类似于文件系统的 Block。
  • PE(Physical Extend)物理存储单元 PE 是 VG 中的存储单元。实际存储的数据都是在 PE 存储。
  • LV(Logical Volume)逻辑卷 如果说VG是整合分区为硬盘,那么 LV 就是把这个硬盘重新的分区,只不过该分区是通过 VG 来划分的。VG 中有很多 PE 单元,可以指定将多少 PE 划分给一个 LV,也可以直接指定大小来划分。划分 LV 后就相当于划分了分区,只需要对 LV 进行格式化即可变成普通的文件系统。
  • LE(Logical extent)逻辑存储单元 LE 则是逻辑存储单元,即 LV 中的逻辑存储单元,和 PE 的大小一样。从 VG 中划分 LV,实际上是从 VG 中划分 VG 中的 PE,只不过划分 LV 后它不在称为 PE,而是 LE。

LVM 之所以能够伸缩容量,实现的方法就是讲 LV 里空闲的 PE 移出,或向 LV 中添加空闲的 PE。

LVM 概念

写入机制

LV 是从 VG 中划分出来的,LV 中的 PE 很可能来自多个 PV。在向 LV 存储数据时,有多种存储机制:

  • 线性模式(linear):先写完来自于同一个 PV 的 PE,再写来自于下一个 PV 的 PE
  • 条带模式(striped):一份数据拆分成多份,分别写入该 LV对应的每个 PV 中,所以读写性能较好,类似于 RAID 0

尽管striped读写性能较好也不建议使用该模式,因为lvm的着重点在于弹性容量扩展而非性能,要实现性能应该使用RAID来实现,而且使用striped模式时要进行容量的扩展和收缩将比较麻烦。默认的是使用线性模式。

LVM 逻辑架构

LVM 架构

命令篇

当前系统/dev/sdb{1,2,3,4,5}有5个分区,其中1、2、3、5为 LVM 格式的标识,分区4在后面扩容时使用。

/dev/sdb 分区信息

管理 PV

功能

命令

创建 PV

pvcreate

扫描并列出所有 PV

pvscan

列出 PV 属性

pvdisplay {name|size}

移除 PV

pvremove

移动 PV 中的数据

pvmove

将上述 /dev/sdb{1,2,3,5}创建 PV:

创建 PV

使用 `pvscan`查看 pv 及其属性:

pvscan 查看 pv 信息

最后一行信息表示:PV 的总容量/已使用的 PV容量/空闲的 PV 容量

使用`pvdisplay`查看其中一个 PV 的属性信息:

pvdisplay 命令

选项

-m:查看指定设备中 PE 的使用分布图

(图和解析)

知道了 PE 的分布,就可以轻松的使用 pvmove 命令在设备之间进行 PE 数据移动。

使用`pvremove`移除 PV:

pvremove 删除 PV

管理 VG

功能

命令

创建 VG

vgcreate

扫描并列出所有 VG

vgscan

列出 VG 属性信息

vgdisplay

移除(删除)VG

vgremove

从 VG 中移除 PV

vgreduce

将 PV 添加到 VG 中

vgextend

修改 VG 属性

vgchange

创建 VG 需要对要创建的 VG 命名,VG 是属于磁盘层次的,而磁盘是需要有名称的,创建 VG 时 ,可以使用-

s 指定 PE 的大小,默认为4M:

创建 vg 名称为 firstvg

创建 VG 实际上是在 /dev 目录下管理了一个 VG 目录/dev/firstvg,不过要在创建了 LV 后该目录才会创建,在该 VG 中创建 LV,将会在该目录下生成链接文件指向/dev/dm 设备。

查看 VG 有多少个 PE:

vgdispaly 命令

从 VG 移除一个 PV,查看 VG 空间的变化,然后再添加一个 PV:

VG 的扩容和缩减

`vhchange`用于设置卷组的活动状态,卷组的激活状态主要影响 LV,使用-a 选项设置活动状态

将 firstvg 设置为活动状态:

代码语言:javascript
复制
vgchange -a y firstvg

将 firstvg 设置为非激活状态

代码语言:javascript
复制
vgchange -a n firstvg

管理 LV

功能

命令

创建 LV

lvcreate

扫描并列出所有 LV

lvscan

列出 LV 属性信息

lvdisplay

移除 LV

lvremove

缩小 LV 容量

lvreduce/lvresize

增大 LV 容量

lvextend/lvresize

调整 LV 容量

lvresize

`lvcreate`命令

一般用法:lvcreate [-L size(M/G) | -l PEnum] -n lv_name vg_name

选项:

-L:根据大小创建 LV,即分配多少空间给此 LV

-l:根据 PE 的数量来创建 LV,即分配多少个 PE 给此 LV

-n:指定 LV 名称

lvcreate

创建 LV 后,将在 /dev/firstvg 目录中创建对应 LV 名称的软链接文件,同时也在/dev/mapper 目录中创建软链接文件,它们都指向/dev/dm 设备

lv 在/dev目录中的提现

使用`lvscan`和`lvdisplay`查看 LV信息,如果要 lvdisplay 指定的 LV 需要指定其绝对路径,而不能仅指定 lv 名

格式化 lv 文件系统

格式化 LV

挂载逻辑卷,并查看逻辑卷的文件系统类型:

挂载逻辑卷

另外也可以使用 file -s 查看逻辑卷的文件系统类型,但是由于/dev/firstvg和/dev/mapper下的lv都是链接到/dev/下块设备的链接文件,所以只能对块设备进行查看,否则查看的结果也仅仅只是个链接文件类型:

通过 file -s 查看 lv 文件系统类型

当前/dev/sdb 的信息:

lsblk 查看sdb的信息

扩容 LVM

LVM最大的优势就是其可伸缩性,伸缩性有更加偏重与扩容。扩容的实质是将 VG 中的空闲 PE 添加到 LV 中,所以只要 VG 中有空闲的 PE,就可以进行扩容。即使没有空闲 PE,也可以添加PV,将PV加入到VG中增加空闲PE。

扩容的两个关键步骤:

(1)使用 lvextend 或 lvresize 添加更多的 PE 或容量到 LV

(2)使用 resize2fs命令(xfs 使用 xfs_growfs)将 LV 增加后的容量添加到对应的文件系统中(此过程是修改文件系统而非LVM内容)

示例:将/dev/sdb4作为 first_lv 的扩容来源。

将/dev/sdb4创建成 PV,然后加入 firstvg 中:

将扩容需要的 PV 添加到VG 中

查看 firstvg 中空闲的 PE 数量:

当前 VG 共有650个 PE 共10.16G 容量可用

将全部可用容量添加到 first_lv中:

代码语言:javascript
复制
umount /dev/first/first_lv
lvextend -L +5G /dev/firstvg/first_lv
vgdisplay firstvg | grep -i pe
lvextend -l +330 /dev/firstvg/first_lv
lvscan

也可以使用 lvresize 来增加 lv 容量:

代码语言:javascript
复制
lvresize -L +5G /dev/firstvg/first_lv
lvresize -l +330 /dev/firstvg/first_lv

如果现在将 lv 挂载,会发现容量并没有增加(df -hT /mnt),因为当前只是 lv 容量增加了,而文件系统的容量还没有增加,使用resize2fs工具来改变ext文件系统的大小,如果是xfs文件系统,则使用xfs_growfs。

`resize2fs`可用于增大和缩减已卸载的设备对应的文件系统大小,对于linux 2.6内核之后的版本,还支持在线resize而无需卸载,但在实验过程中好像不支持在线缩减,只能先卸载。

一般无需使用选项,直接使用resize2fs device的方式即可,如果失败则尝试使用-f选项强制改变大小。

代码语言:javascript
复制
resize2fs /dev/firstvg/first_lv
df -hT | grep -i /mnt

收缩 LVM

一般情况下也不会收缩 LVM,收缩 LVM 可以加深对 LVM 的理解。(待更新)

参考文档

http://www.cnblogs.com/f-ck-need-u/p/7049233.html

举报
领券