Linux系统管理之LVM逻辑卷管理

1、何为LVMnode

    LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4内核上实现。Linux用户安装Linux操做系统时遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。普通的磁盘分区管理方式在逻辑分区划分好以后就没法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件由于受上层文件系统的限制,也不能跨越多个分区来存放,因此也不能同时放到别的磁盘上。而遇到出现某个分区空间耗尽时,解决的方法一般是使用符号连接,或者使用调整分区大小的工具,但这只是暂时解决办法,没有从根本上解决问题。随着Linux的逻辑卷管理功能的出现,这些问题都迎刃而解,用户在无需停机的状况下能够方便地调整各个分区大小。bash

    LVM的大小能够在不卸载的时候随意扩展和收缩而不损坏里面存放的数据。
app


2、LVM的组成ide

wKiom1YJW-zwfDURAAFVqFhodiw260.jpg

①、Physical Volume, PV, 物理卷工具

    物理卷在逻辑卷管理系统最底层,可为整个物理硬盘或实际物理硬盘上的分区,咱们实际的 partition 须要调整系统识别码 (system ID) 成为 8e (LVM 的识别码),而后再通过 pvcreate 的命令将他转成 LVM 最底层的实体卷轴 (PV) ,以后才可以将这些 PV 加以利用!布局

物理卷布局

LVM 标签在第二个扇区,接下来是元数据区,以后是设备的可用空间。ui

一、物理卷标签包含:spa

  • 物理卷 UUID操作系统

  • 以字节为单位的块设备大小3d

  • 以 NULL 结尾的数据区域位置列表

  • 以 NULL 结尾的元数据区域位置列表

备注:默认状况下,pvcreate 命令会在第二个 512 字节扇区放置物理卷标签。这个标签可选择性地放在前四个扇区中的任意一个,由于扫描物理卷标签的 LVM 工具会检查前四个扇区。物理卷标签以字符串 LABELONE 开始。

二、元数据:卷组的配置详情被称为元数据,卷组的每一个物理卷元数据区域中均保存彻底相同的元数据副本。

  • 可使用 pvcreate 命令的 --metadatacopies 0 选项建立没有任何元数据副本的物理卷。默认状况下,卷组中的每一个物理卷中都会在其元数据区域保留一个同样的元数据副本。

  • 可以使用 pvcreate 命令的 --metadatasize 选项指定元数据区域的大小。对于包含数百个物理卷和逻辑卷的卷组来讲,默认大小可能过小。

备注:LVM 容许在每一个物理卷中保存 0、1 或者 2 个元数据副本。默认是保存一个副本。一旦设置了在物理卷中保存的元数据备份数目以后就没法再更改。第一个副本保存在设备的起始位置,紧挨着标签。若是有第二个副本,会将其放在设备的末尾。若是不当心写入了不一样于想要写入的磁盘,从而覆盖了磁盘的起始部分,那么可使用在设备末尾的元数据第二个副本恢复元数据。


②、Volume Group, VG, 卷组

    卷组创建在物理卷上,一卷组中至少要包括一物理卷,卷组创建后可动态的添加卷到卷组中,一个逻辑卷管理系统工程中可有多个卷组。所谓的 LVM 大磁盘就是将许多 PV 整合成这个 VG 的东西!因此 VG 就是 LVM 组合起来的大磁盘!每一个 VG 最多仅能包含 65534 个 PE。 若是使用 LVM 默认的参数,则一个 VG 最大可达 256GB 的容量

③、Physical Extend, PE, 物理扩展单元

    物理区域是物理卷中可用于分配的最小存储单元,物理区域大小在创建卷组时指定,一旦肯定不能更改,同一卷组全部物理卷的物理区域大小需一致,新的pv加入到vg后,pe的大小自动更改成vg中定义的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 就是最后能够被格式化挂载使用的!PE 是整个 LVM 的最小储存单位,那么 LV 的大小就与在此 LV 内的 PE 总数有关。 为了方便使用者利用 LVM 来管理其系统,所以 LV 的装置档名一般指定为『 /dev/vgname/lvname 』或『 /dev/mapper/vgname-lvname 』,此两个档名都是符号连接,真正的设备名为『 /dev/dm-#(1,2,3...) 』。

⑤、logical Extent,LE,逻辑扩展单元

    逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。


    注意:虽然PE是PV的单元。但PV刚刚建立时并无建立PE,只有加入到VG后才会生产指定大小的PE,全部PE的大小是由VG决定的。LV的大小是由PE决定的,分配多少个PE则LV就为全部PE的总大小。当PE分配到LV时称为LE。


3、LVM的建立及管理

wKioL1YJZPrjxhcyAABBcT0b7xo498.gif

①、PV的建立和管理

[root@wlw ~]# pv [tab][tab]
pvchange   pvcreate   pvmove     pvresize   pvscan     
pvck       pvdisplay  pvremove   pv
#使用pv加两个tab能够看到PV的相关命令

    pvcreate /dev/DEVICE : 将 partition 建立成为 PV 

[root@wlw ~]# pvcreate /dev/sda{6,7,8}
  Physical volume "/dev/sda6" successfully created
  Physical volume "/dev/sda7" successfully created
  Physical volume "/dev/sda8" successfully created

    pvscan :搜寻目前系统中的全部PV

[root@wlw ~]# pvscan 
  PV /dev/sda6         lvm2 [5.01 GiB]
  PV /dev/sda7         lvm2 [8.01 GiB]
  PV /dev/sda8         lvm2 [10.00 GiB]
  Total: 3 [23.02 GiB] / in use: 0 [0   ] / in no VG: 3 [23.02 GiB]

    pvs : 显示PV的简要信息

[root@wlw ~]# pvs /dev/sda6
  PV         VG   Fmt  Attr PSize PFree
  /dev/sda6       lvm2 ---  5.01g 5.01g
[root@wlw ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree 
  /dev/sda6       lvm2 ---   5.01g  5.01g
  /dev/sda7       lvm2 ---   8.01g  8.01g
  /dev/sda8       lvm2 ---  10.00g 10.00g
#不指定设备则列出全部的设备信息

    pvdisplay : 显示PV的详细信息

[root@wlw ~]# pvdisplay /dev/sda6
  "/dev/sda6" is a new physical volume of "5.01 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sda6
  VG Name               
  PV Size               5.01 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               t522PZ-Rvvy-2kvQ-BiYh-lzdq-RmPJ-fRp74C
#不指定设备则列出全部的设备信息

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

[root@wlw ~]# pvremove /dev/sda6
  Labels on physical volume "/dev/sda6" successfully wiped

    pvmove :将VG中的PV移除,在缩减VG的时候使用。


②、VG的建立和管理

[root@wlw ~]# vg [tab][tab]
vgcfgbackup    vgcreate       vgimport       vgremove
vgcfgrestore   vgdb           vgimportclone  vgrename
vgchange       vgdisplay      vgmerge        vgs
vgck           vgexport       vgmknodes      vgscan
vgconvert      vgextend       vgreduce       vgsplit
#使用vg加两个tab能够看到VG的相关命令

    vgcreate  [-s#[mMgGtT]] VolumeGroupName  PhysicalDevicePath : 建立vg

[root@wlw ~]# vgcreate -s 8M myvg /dev/sda6
  Physical volume "/dev/sda6" successfully created
  Volume group "myvg" successfully created
#-s指定PE的大小,单位指定格式为:kKmMgGtTpPeE

    vgscan :搜寻目前系统中的全部VG

    vgs : 显示VG的简要信息

    vgdisplay : 显示VG的详细信息

    vgextend :向 VG 中添加额外的 PV 

[root@wlw ~]# vgextend myvg /dev/sda7
  Volume group "myvg" successfully extended

    vgreduce :在 VG 内移除 PV

[root@wlw ~]# vgreduce myvg /dev/sda6
  Removed "/dev/sda6" from volume group "myvg"
#在移除PV时,切记要先执行pvmove /dev/sda6,让PV中的PE移动到其余PV中去,以避免数据丢失

    vgremove :删除 VG 


③、LV的建立和管理

[root@wlw ~]# lv [tab][tab]
lvchange     lvextend     lvmdiskscan  lvmsar       lvresize
lvconvert    lvm          lvmdump      lvreduce     lvs
lvcreate     lvmchange    lvmetad      lvremove     lvscan
lvdisplay    lvmconf      lvmsadc      lvrename  
#使用lv加两个tab能够看到LV的相关命令

    lvcreate {-L|-l} #[mMgGtT] -n NAME VolumeGroup : 建立LV

[root@wlw ~]# lvcreate -L 4G -n mylv myvg
  Logical volume "mylv" created.
#-L:指定LV大小,-n:指定LV的名字,-l:指定给LV分配多少个PE,默认PE大小为4M,这个时候就能够吧LV格式化并挂载使用了

    lvscan :搜寻目前系统中的全部LV

    lvs : 显示LV的简要信息

    lvdisplay : 显示LV的详细信息

    lvremove :删除 LV


添加LV容量

    lvextend {-L|-l} [+]#[mMgGtT]:扩展逻辑卷,向 LV 里面添加容量

[root@wlw ~]# lvextend -L +2G /dev/myvg/mylv 
  Size of logical volume myvg/mylv changed from 4.00 GiB (512 extents) to 6.00 GiB (768 extents).
  Logical volume mylv successfully resized
#这里给mylv添加了2G的大小,若是是指定-L 5G的话,则表明把mylv修改成5G。

    注意:这里咱们修改完LV以后,发现磁盘容量并无变化,这是由于逻辑卷大小确实扩张了,可是文件系统的大小仍是以前的大小并无变化,此时咱们须要从新调整文件系统的大小与逻辑卷大小相同。而无需从新挂载。下面咱们针对ext系统文件系统进行演示,若是是其余文件系统须要使用其对应的工具。

[root@wlw ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2             9.8G  4.6G  4.7G  50% /
tmpfs                 499M     0  499M   0% /dev/shm
/dev/sda1             976M   36M  890M   4% /boot
/dev/sr0              3.7G  3.7G     0 100% /mnt
/dev/mapper/myvg-mylv
                      3.9G   12M  3.7G   1% /mylvm
[root@wlw ~]# resize2fs /dev/myvg/mylv 
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/myvg/mylv is mounted on /mylvm; on-line resizing required
old desc_blocks = 2, new_desc_blocks = 3
Performing an on-line resize of /dev/myvg/mylv to 3145728 (2k) blocks.
The filesystem on /dev/myvg/mylv is now 3145728 blocks long.
#resize2fs后面若是没有指定大小则默认调整为整个设备的大小
[root@wlw ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2             9.8G  4.6G  4.7G  50% /
tmpfs                 499M     0  499M   0% /dev/shm
/dev/sda1             976M   36M  890M   4% /boot
/dev/sr0              3.7G  3.7G     0 100% /mnt
/dev/mapper/myvg-mylv
                      5.9G   12M  5.6G   1% /mylvm
#这里咱们能够看到,添加的2G已经添加到设备上了,无需从新挂载


缩减LV容量(缩减有风险,须要谨慎操做)

    一、umount /dev/VG_NAME/LV_NAME:卸载设备

[root@wlw ~]# umount /dev/myvg/mylv

    二、e2fsck -f /dev/VG_NAME/LV_NAME:强制检测文件系统

[root@wlw ~]# e2fsck -f /dev/myvg/mylv 
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
MYLV: 13/393216 files (0.0% non-contiguous), 87981/3145728 blocks

    三、resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]:缩减文件系统大小

[root@wlw ~]# resize2fs /dev/myvg/mylv 3G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/myvg/mylv to 1572864 (2k) blocks.
The filesystem on /dev/myvg/mylv is now 1572864 blocks long.
#缩减后文件系统的大小必须能容纳当前全部文件的大小,否则文件会损坏

    四、lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME

[root@wlw ~]# lvreduce -L 3G /dev/myvg/mylv 
  WARNING: Reducing active logical volume to 3.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv? [y/n]: y
  Size of logical volume myvg/mylv changed from 6.00 GiB (768 extents) to 3.00 GiB (384 extents).
  Logical volume mylv successfully resized


④、快照:snapshot

快照卷的原理:

    对原卷(逻辑卷)作快照就是某一刻当即建立对方的元数据的监视器,随时监视对方的元数据,而快照卷刚建立后是没有任何数据的,当咱们把快照卷挂载后是能够看到原卷的全部文件的,由于快照卷是原卷的另外一个访问路径而已,由于快照卷监视了全部的原卷的元数据,当原卷数据没有发生改变时,两个卷的数据是同样的,因为快照卷的监视器一直在监视原卷的全部文件,当监控原卷的某个文件要发生改变时,会先把原卷中即将修改的文件复制一份到快照卷中,当咱们须要恢复快照的时候,没有变化的数据是在原卷中存放的,变化的数据才在目标卷中恢复,因此只有修改过的文件才会复制到快照卷中,因此快照卷体积是很小的。快照卷和原卷必须在同一卷组中。


    lvcreate -L #[mMgGtT] -p r -s -n snapshot_lv_name original_lv_name:快照卷的建立

[root@wlw ~]# lvcreate -s -L 512M -p r -n mylv-snapshot /dev/myvg/mylv
  Logical volume "mylv-snapshot" created.
[root@wlw ~]# lvs
  LV            VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv          myvg owi-aos---   3.00g                                                    
  mylv-snapshot myvg swi-a-s--- 512.00m      mylv   0.00 
#-s指定此卷为快照卷,-p以只读的格式建立,-n指定快照卷名字。

    lvremove original_lv_name:快照卷的删除

[root@wlw /]# lvremove /dev/myvg/mylv-snapshot 
Do you really want to remove active logical volume mylv-snapshot? [y/n]: y
  Logical volume "mylv-snapshot" successfully removed


⑤、当肯定逻辑卷中数据已经备份,打算删除LVM拆除磁盘时

    一、umount /dev/VG_NAME/LV_NAME:卸载设备

[root@wlw /]# umount /dev/myvg/mylv

    二、lvremove lv_name:删除 LV

[root@wlw /]# lvremove /dev/myvg/mylv 
Do you really want to remove active logical volume mylv? [y/n]: y
  Logical volume "mylv" successfully removed

    三、vgremove vg_name:删除 VG

[root@wlw /]# vgremove myvg
  Volume group "myvg" successfully removed

    四、pvremove pv_name:删除 PE

[root@wlw /]# pvremove /dev/sda{6,7,8}
  Labels on physical volume "/dev/sda6" successfully wiped
  Labels on physical volume "/dev/sda7" successfully wiped
  Labels on physical volume "/dev/sda8" successfully wiped

    五、拆除磁盘或用于其余用途

相关文章
相关标签/搜索