首页 > 系统服务 > 详细

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

时间:2015-09-29 08:45:22      阅读:518      评论:0      收藏:0      [点我收藏+]

一、何为LVM

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

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


二、LVM的组成

技术分享

①、Physical Volume, PV, 物理卷轴

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

②、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。


三、LVM的创建及管理

技术分享

①、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容量(缩减有风险,需要谨慎操作)

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

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

    2、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

    3、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.
#缩减后文件系统的大小必须能容纳当前所有文件的大小,不然文件会损坏

    4、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




本文出自 “马尔高” 博客,请务必保留此出处http://kgdbfmwfn.blog.51cto.com/5062471/1698986

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

原文:http://kgdbfmwfn.blog.51cto.com/5062471/1698986

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!