安装Linux系统时,我们第一个考虑的可能是如何给磁盘分区。Linux的分区工具如fdisk和parted等很难甚至是无法改变分区大小,一旦以后磁盘空间使用殆尽,当我们插上新磁盘后,将会发现我们不得不重新分区格式化,当然之前的数据是必须要备份的,但是这其中仍然存在这数据丢失的风险,有没有无需重新分区直接使用新加入磁盘的方法呢?LVM真是基于这样的需求被设计出来的。

LVM(Logical Volume Manager)逻辑卷管理是建立在硬盘和分区之上,文件系统之下的一个逻辑层。注意:不建议将boot放在逻辑卷中。

LVM的工作原理其实很简单,它就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。比如说我增加一个物理硬盘,这个时候上层的服务是感觉不到的,因为呈现给上层服务的是以逻辑卷的方式。LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。如果我们新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性。

Linux的逻辑卷管理(LVM)详解_lvm

PV:物理卷,处于LVM的最底层,他可以是实际的硬盘、分区或raid设备。和基本的物理存储介质相比,其中包含有与LVM相关的管理参数。

VG:卷组,建立在物理卷之上,必须有至少一个物理卷,在卷组建立之后可以动态的添加新的物理卷来扩容。

PE:每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是在VG过程中配置的,默认为4MB。

LV:逻辑卷,建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组。

PV管理工具:

pvs:显示简要的pv信息,pvdisplay:显示较详细的pv信息

pvscan:扫描并浏览所有的pv

pvchange:改变pv的属性

pvck:检查pv的元数据信息

pvmove:移动PE

pvremove:移除pv卷

pvresize:改变pv的大小

pvcreate /dev/DEVICE:创建pv

[root@linux ~]# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created
[root@linux ~]# pvcreate /dev/sdc
  Physical volume "/dev/sdc" successfully created
[root@linux ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree 
  /dev/sdb        lvm2 ---- 20.00g 20.00g
  /dev/sdc        lvm2 ---- 20.00g 20.00g
[root@linux ~]# pvdisplay 
  "/dev/sdb" is a new physical volume of "20.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name               
  PV Size               20.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               mNZepm-JrpU-4eRX-Hqis-mwXq-ZJFW-or9S2t
   
  "/dev/sdc" is a new physical volume of "20.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc
  VG Name               
  PV Size               20.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               P2fwdI-2eCR-rgwO-RnUA-4Wh1-62qT-B035Zz

VG管理工具

显示卷组:vgs,vgdisplay

创建卷组:vgcreate

选项:

-s:指定PE的大小,

-l:给该vg设置最大的lv数,可通过vgchange修改,lvm1默认最大为255个,lvm2则没有限制

[root@linux ~]# vgcreate IT /dev/sd{b,c}
  Volume group "IT" successfully created
[root@linux ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  IT     2   0   0 wz--n- 39.99g 39.99g
[root@linux ~]# vgdisplay
  --- Volume group ---
  VG Name               IT
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               39.99 GiB
  PE Size               4.00 MiB
  Total PE              10238
  Alloc PE / Size       0 / 0   
  Free  PE / Size       10238 / 39.99 GiB
  VG UUID               TxjZPe-CbN8-Edj3-EHE3-8g3G-cplW-7QFcTw
   
[root@linux ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree 
  /dev/sdb   IT   lvm2 a--u 20.00g 20.00g
  /dev/sdc   IT   lvm2 a--u 20.00g 20.00g

vgcfgbackup:备份vg的元数据信息

vgrename:改变vg名

vgsplit:将源vg中pv移到其他vg中

vgreduce:缩减vg大小

vgextent:扩展vg大小

vgremove:移除vg

LV管理工具

lvcreate:创建lv

选项:

-n:设置lv的名字

-L:指定lv的大小

-s:创建lv的快照,后面接源lv的路径或名字

lvs/lvdisplay:显示lv的信息

lvremove:移除lv

lvextent:扩展lv

lvreduce:缩减lv