首页 > 代码库 > 8.Linux的LVM使用详解

8.Linux的LVM使用详解

                   8.Linux的LVM使用详解

  1. 命令概览:所使用的命令(#代表是数字)
    pvcreate /dev/sd[xx]
    vgcreate -s # vgname /dev/sd[]
    -s 指定PE的大小   默认大小为4M
    vgextend vgname /dev/sd[xx]
    lvcreate -n lvname -L # /dev/vgname
    扩容
    lvs
    lvextend -L # /dev/vgname/lvname
    resize2fs /dev/vgname/lvname
    lvs
    缩减
    umount /dev/vgname/lvname
    e2fsck /dev/vgname/lvname
    resize2fs /dev/vgname/lvname #
    lvreduce -L # /dev/vgname/lvname
    mount
    快照
    lvcreate -L # -s -n snapshot /dev/vgname/lvname
    卸载逻辑卷
    umount /dev/vgname/lvname
    lvremove /dev/vgname/lvname
    vgremove /dev/vgname
    pvremove /dev/sd[xx]

  2. LVM的使用

    LVM(Logical Volume Manager)叫做逻辑卷管理器,有两个版本,早期是LVM1(现在很少使用了),LVM2。

    PV (Physical Volume)物理卷,在分区时需要调整系统 ID为8e(LVM的标识符),使用pvcreate来创建物理卷。

    VG (Volume Group)卷组,是将一个或多个PV组合成一个VG,可以通过vgcreate来实现。

    LV (Logical Volume)逻辑卷,将VG划分成一个或多个LV,可以通过lvcreate来实现。

    LVM2使用dm模块来实现将一个或多个底层块设备组织成一个逻辑设备的工具。它能够将一个或多个底层块设备从某种意义上来映射成一个逻辑设备,通过在其上面附加一个逻辑层使得上层看起来像一个设备一样,而且在其之上,还可以再划分逻辑分区。将底层的块设备(VG)进一步分隔成了一个一个可以存储数据空间的块(PE),这种块也称为PE(Physical Extend),再将VG上多个PE组合成一个或多个

LV。也就是说LV的大小是由PE的个数决定的,LVM默认使用4M的PE块,而LVM的VG最多仅能含有65534个PE,因此默认的LVM VG会有4M*65534(1024M/G)=256G,它是整个LVM最小的存储块,也就是说,文件
数据都是由写入PE来处理的。以下就是LVM的简单架构:

技术分享

     在数据写入LV时,LVM有两种实现方式:
     a.线性模式(liner)  就是把其中一块硬盘都使用完后,才使用另外一块硬盘
     b.交错模式(triped) 把要存储的数据分块,第一块写入到LV中的第一个硬盘,第二块写入到LV
中的第二块硬盘如此这样,依次存储,可以提升读写性能,但是注意此时只要出现一个硬盘损坏,那么数据都会丢失,如果要提升读写性能还是使用RAID更佳。

     LVM还可以实现动态调整容量,当空间不足时,可在线添加容量;当容量过大,也可以缩减容量。而且还提供了快照功能,能方便的实现备份。下面就来详细讲解他们的实现过程。


3.LVM的使用

    实际上LVM使用的设备是放置到/dev/mapper/目录下的

技术分享   

    PV,VG,LV他们各自都有一组命令

输入pv按两次tab键就可以看到以pv开头的命令

[root@linux_basic scripts]#pv
pvchange   pvck       pvcreate   pvdisplay  pvmove     pvremove   pvresize   pvs        pvscan  

其他vg,lv也是一样

[root@linux_basic scripts]#vg
vgcfgbackup    vgck           vgdisplay      vgimport       vgmknodes      vgrename       vgsplit        
vgcfgrestore   vgconvert      vgexport       vgimportclone  vgreduce       vgs            
vgchange       vgcreate       vgextend       vgmerge        vgremove       vgscan         
[root@linux_basic scripts]#lv
lvchange     lvdisplay    lvmchange    lvmdump      lvmsar       lvrename     lvscan       
lvconvert    lvextend     lvmconf      lvmetad      lvreduce     lvresize     
lvcreate     lvm          lvmdiskscan  lvmsadc      lvremove     lvs

这里我们就说明使用pvcreate,vgcreata的格式

创建物理卷

pvcreate — initialize a disk or partition for use by LVM  初始化磁盘或分区使用LVM

pvcreate /dev/sd[a-z]|/dev/sd[a-z][1-9] ... 可跟多个磁盘或分区,注意此处使用的磁盘分区应该调整其系统标识符为8e,通过fdisk命令

创建卷组

vgcreate — create a volume group  创建一个卷组

vgcreate [-s PESIZE(pe的大小)]  VolumeGroupName(卷组的名字) PhysicalDevicePath [PhysicalDevicePath...](指定刚创建的物理卷)

-s, --physicalextentsize PhysicalExtentSize[bBsSkKmMgGtTpPeE]
   Sets  the physical extent size on physical volumes of this volume group.

创建逻辑卷

lvcreate - create a logical volume in an existing volume group

lvcreate -n lvname -L # /dev/vgname

 -n, --name LogicalVolume{Name|Path}
     Sets the name for the new logical volume.  设置这个逻辑卷名

-L, --size LogicalVolumeSize[bBsSkKmMgGtTpPeE] 指定逻辑卷的大小,单位可以是K,M,G,T等
     Gives  the  size  to allocate for the new logical volume.  A size suffix of B for bytes, S for sectors as 512 bytes, K for kilobytes, M for megabytes, G for gigabytes, T  for  terabytes,  Pfor petabytes or E for exabytes is optional.
    Default unit is megabytes. 默认单位

技术分享

扩展逻辑卷,需要先扩展物理卷再扩展逻辑卷,可在线扩容

如何扩展逻辑卷:
a、先确定扩展的目标大小;并确保对应的卷组中有足够的空闲空间可用;
          

b、扩展物理边界  仅能在当前卷组中进行扩展
lvextend -L # /dev/vgname/lvname


c、扩展逻辑边界

resize2fs  /dev/vgname/lvname

技术分享

技术分享

[root@linux_basic test]#df -hP /mnt/test
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/vg_lvm-test  4.9G  6.6M  4.7G   1% /mnt/test  扩展成功
[root@linux_basic test]#du -sh /mnt/test
2.6M    /mnt/test    扩展后内容为改变

缩减逻辑卷,需要先缩减逻辑卷在缩减物理卷

缩减很危险!!!!
缩减需要离线
a、先确定缩减后的目标大小;并确保对应的目标逻辑卷大小中有足够的空间可容纳原有所有数据;
b、先卸载文件系统,并要执行强制检测
  e2fsck -f
c、缩减逻辑边界
  resize2fs DEVICE #
  [root@linux_basic ~]#resize2fs -help
  resize2fs 1.41.12 (17-May-2010)
  Usage: resize2fs [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [new_size]
d、缩减物理边界
   lvreduce -L # /dev/vg_xx/xxx

技术分享

技术分享

创建快照卷:
  lvcreate
    -L   #指定快照卷大小
    -n   指定快照卷名字
    -s 指定快照卷
    -p r 只读

    注意:快照卷是对某逻辑卷进行的,因此必须跟目标逻辑卷在同一个卷组中;无须指明卷组;
它只备份又被改动的数据,文件系统内没有被更改的数据依旧保持在原本的区块内,但是LVM快照
功能会知道那些数据放置在哪里,因此“快照”当时的文件系统就得以“备份”下来,且快照所占用的
容量又非常小。       
由于快照区与原本的LV共享很多PE区块,因此快照区与被快照的LV必须要在同一个VG上面。

技术分享

技术分享

 LV snapshot status     active destination for test
  LV Status              available
  # open                 1
  LV Size                2.00 GiB
  Current LE             64
  COW-table size         512.00 MiB
  COW-table LE           16
  Allocated to snapshot  0.07%
  快照区已经被使用了0.07%,因为原数据改变了
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:5


利用快照区恢复原系统
复原的系统数据量不能够高于快照区所能负载的实际容量。由于原始数据会被
移到快照区,如果快照区不够大,若原始数据被改动的实际数据量比快照区大,
那么快照区当然容纳不了,这时候快照功能会失效。

技术分享

技术分享

技术分享

技术分享


本文出自 “快乐就好” 博客,请务必保留此出处http://wdllife.blog.51cto.com/6615958/1599979

8.Linux的LVM使用详解