一、LVM工作原理 

1.使用LVM,硬盘驱动器或硬盘驱动器集合就会分配给一个或多个物理卷(physical volumes)物,理卷无法跨越一个以上驱动器。 

2.物理卷被合并成逻辑卷组(logical volume group),唯一的例外是 /boot 分区。/boot 分区不能位于逻辑卷组,因为引导装载程序无法读取它。如果你想把 / 分区放在逻辑卷上,你需要创建一个分开的 /boot分区,它不属于卷组的一部分。 

  由于物理卷无法跨越多个驱动器,如果你想让逻辑卷组跨越多个驱动器,你就应该在每个驱动器上创建一个或多个物理卷。 

二、LVM基本概念

LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。以下LVM相关术语:

(1) 物理存储介质(The physical media

这里指系统的存储设备:硬盘,如:/dev/hda1、/dev/sda等等,是存储系统最低层的存储单元。 

(2) 物理卷(physical volume

物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。 

(3) 卷组(Volume Group

LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。 

(4)逻辑卷(logical volume

LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。 

(5) PEphysical extent

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

(6) LElogical extent

逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。 

wKiom1arL9jR22eYAABTyOiAHa8173.png

图1 

从图1可以看到,PE和LE有着一一对应的关系。一个卷组由一个或多个物理卷组成,逻辑卷建立在卷组上。首先可以看到,物理卷(PV)被由大小等同的基本单元PE组成。逻辑卷就相当于非LVM系统的磁盘分区,可以在其上创建文件系统。

和非LVM系统将包含分区信息的元数据保存在位于分区的起始位置的分区表中一样,逻辑卷以及卷组相关的元数据也是保存在位于物理卷起始处的VGDA(卷组描述符区域)中。VGDA包括以下内容: PV描述符、VG描述符、LV描述符、和一些PE描述符 。

系统启动LVM时激活VG,并将VGDA加载至内存,来识别LV的实际物理存储位置。当系统进行I/O操作时,就会根据VGDA建立的映射机制来访问实际的物理位置。我们也可以按照图2简单地去理解。

wKioL1arMA6wCeHrAACJ6Gkd-9o568.png 

图2 

三、逻辑卷的配置使用

1>.创建和使用新的LVM逻辑卷的步骤:

建立LVM类型的分区   (fdisk)

l 建立LVM物理卷     (pv)

l 建立LVM卷组      (vg)

l 建立LVM逻辑卷     (lv)

l 建立文件系统     (mkfs.ext2,3,4)

l 挂载文件系统      (mount)

使用文件系统

2>.相关命令:

  (1)物理卷相关命令:

     pvcreate :创建物理卷

   pvscan:在系统的所有磁盘中搜索已存在的物理卷;

     pvdisplay显示指定物理卷的属性;

     pvremove:将数据移到某pv上;

     pvmove:删除某pv

  (2)卷组相关命令

     vgcreate:创建一个新的vg;

   vgmove:删除卷组;

   vgscan:查看总卷组;

   vgdisplay:查看单个卷组的详细情况;

     vgextend:把物理卷加入卷组(扩展卷组);

     vgreduce:从卷组中删除某pv(缩减卷组)

  (3)逻辑卷相关命令:

     lvcreate:创建lv

   lvscan:查看逻辑卷;

   lvdisplay:显示逻辑卷的详细信息; 

     lvremove:删除逻辑卷

     lvextend:扩展逻辑卷大小

     lvreduce:缩减逻辑卷大小

  (4)创建快照卷:snapshot

    #Lvcreate  -L  #[nMgGtT] –p r –s –n snapshot_lv_name original_lv_name

-s: 创建快照卷;

-n快照卷名字

练习:

1.使用fdisk -l 查看分区信息,可以看得到已经有/dev/sda5,/dev/sda6,/dev/sda7,/dev/sda8已经被分区好了
   [root@chang ~]# fdisk -l
      Disk /dev/sda: 128.8 GB, 128849018880 bytes
   255 heads, 63 sectors/track, 15665 cylinders
   Units = cylinders of 16065 * 512 = 8225280 bytes
   Sector size (logical/physical): 512 bytes / 512 bytes
   I/O size (minimum/optimal): 512 bytes / 512 bytes
   Disk identifier: 0x00089c7b
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1         128     1024000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2             128        1403    10240000   83  Linux
/dev/sda3            1403        2040     5120000   82  Linux swap / Solaris
/dev/sda4            2040       15665   109444088+   5  Extended
/dev/sda5            2040        2301     2097727   8e  Linux LVM
/dev/sda6            2302        2563     2104483+  8e  Linux LVM
/dev/sda7            2564        3217     5253223+  8e  Linux LVM
/dev/sda8            3218        3610     3156741   8e  Linux LVM
2.创建物理卷:
  [root@chang ~]# pvdisplay /dev/sda5
  Failed to find device "/dev/sda5"
  [root@chang ~]# pvcreate /dev/sda5
  Device /dev/sda5 not found (or ignored by filtering).  
发现创建失败;原因新建分区么有写进内核;上一步的时候少一个执行命令。解决办法:
  [root@chang ~]# partx -a
  call: partx -opts [device] wholedisk
  [root@chang ~]# partx -a /dev/sda
  BLKPG: Device or resource busy
  error adding partition 1
  BLKPG: Device or resource busy
  error adding partition 2
  BLKPG: Device or resource busy
  error adding partition 3
  [root@chang ~]# partx -a /dev/sda      //partx  -a  要用两次
    此时再创建新的物理卷,会看创建成功;
  [root@chang ~]# pvdisplay /dev/sda5
   Failed to find physical volume "/dev/sda5"
  [root@chang ~]# pvcreate /dev/sda5
   Physical volume "/dev/sda5" successfully created
  [root@chang ~]# pvcreate /dev/sda6
   Physical volume "/dev/sda6" successfully created
 3.查看两个物理卷。
  [root@chang ~]# pvscan 
   PV /dev/sda5         lvm2 [2.00 GiB]
   PV /dev/sda6         lvm2 [2.01 GiB]
   Total: 2 [4.01 GiB] / in use: 0 [0   ] / in no VG: 2 [4.01 GiB]
4.创建卷组:
  [root@chang ~]# vgcreate  changvg   /dev/sda{5,6}
  Volume group "changvg" successfully created
   5.查看卷组:
  [root@chang ~]# vgscan
    Reading all physical volumes.  This may take a while...
    Found volume group "changvg" using metadata type lvm2
  [root@chang ~]# pvscan
    PV /dev/sda5   VG changvg   lvm2 [2.00 GiB / 2.00 GiB free]
    PV /dev/sda6   VG changvg   lvm2 [2.00 GiB / 2.00 GiB free]
    Total: 2 [4.00 GiB] / in use: 2 [4.00 GiB] / in no VG: 0 [0   ]
此时发现物理卷/dev/sda5,/dev/sda6属于卷组changvg
6.从卷组中删除一个物理卷:
  [root@chang ~]# pvmove /dev/sda6     //删除物理卷的时候先把之前PV的数据移走
      No data to move for changvg
  [root@chang ~]# vgreduce changvg /dev/sda6    // pvmove只是将数据移走,但是物理卷还在VG中此时只需使用删除命令把物理卷从VG中删除就ok啦
   Removed "/dev/sda6" from volume group "changvg"
     [root@chang ~]# pvscan
   PV /dev/sda5   VG changvg   lvm2 [2.00 GiB / 2.00 GiB free]
   PV /dev/sda6                lvm2 [2.01 GiB]
   PV /dev/sda7                lvm2 [5.01 GiB]
   Total: 3 [9.01 GiB] / in use: 1 [2.00 GiB] / in no VG: 2 [7.02 GiB]
使用pvscan可以知道/dev/sda6已经从卷组changvg中删除
8.增加一个物理卷:
 [root@chang ~]# vgextend changvg /dev/sda7
   Volume group "changvg" successfully extended
 [root@chang ~]# pvscan
   PV /dev/sda5   VG changvg   lvm2 [2.00 GiB / 2.00 GiB free]
   PV /dev/sda7   VG changvg   lvm2 [5.01 GiB / 5.01 GiB free]
   PV /dev/sda6                lvm2 [2.01 GiB]
   Total: 3 [9.01 GiB] / in use: 2 [7.00 GiB] / in no VG: 1 [2.01 GiB] 
9.创建逻辑卷(单位:M):
  [root@chang ~]# lvcreate -L 2G -n changlv changvg
   Logical volume "changlv" created
  [root@chang ~]# lvscan
   ACTIVE            '/dev/changvg/changlv' [2.00 GiB] inherit
 以同样的方式在guptVG1上建立guptLV2和guptLV3:
  [root@chang ~]# lvcreate -L 2G -n changlv1 changvg
  Logical volume "changlv1" created
  [root@chang ~]# lvcreate -L 2G -n changlv2 changvg     //–L 100m是逻辑卷的大小,-n后面跟的是逻辑卷的名字。
      Logical volume "changlv2" created
  [root@chang ~]# lvscan 
   ACTIVE            '/dev/changvg/changlv' [2.00 GiB] inherit
   ACTIVE            '/dev/changvg/changlv1' [2.00 GiB] inherit
   ACTIVE            '/dev/changvg/changlv2' [2.00 GiB] inherit
10.建文件系统(格式化):
 [root@chang ~]# mkfs.ext4 /dev/changvg/changlv
 [root@chang ~]# mkfs.ext4 /dev/changvg/changlv1
 [root@chang ~]# mkfs.ext4 /dev/changvg/changlv2
    11.挂载逻辑卷:
先在/tmp下创建changlv,changlv1,changlv2:
 [root@chang ~]# mkdir   /tmp/changl{v,v1,v2}
再把changlv挂载到/tmp/changlv,把changlv1和changlv2挂载到/tmp/changlv1和/tmp/changlv2上并查看挂载情况:
 [root@chang ~]# mount /dev/changvg/changlv   /tmp/changlv
 [root@chang ~]# mount /dev/changvg/changlv1   /tmp/changlv1
 [root@chang ~]# mount /dev/changvg/changlv2   /tmp/changlv2
 [root@chang ~]# mount 
 /dev/sda2 on / type ext4 (rw)
 proc on /proc type proc (rw)
 sysfs on /sys type sysfs (rw)
 devpts on /dev/pts type devpts (rw,gid=5,mode=620)
 /dev/sda1 on /boot type ext4 (rw)
 tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
 /dev/sr0 on /mnt type iso9660 (ro)
 /dev/mapper/changvg-changlv on /tmp/changlv type ext4 (rw)
 /dev/mapper/changvg-changlv1 on /tmp/changlv1 type ext4 (rw)
 /dev/mapper/changvg-changlv2 on /tmp/changlv2 type ext4 (rw)
12.自动加载文件系统
在/etc/fstab这个文件中加入以下内容:
 [root@chang ~]# cat /etc/fstab 
 
 #
 # /etc/fstab
 # Created by anaconda on Sun Sep  6 02:18:09 2015
 #
 # Accessible filesystems, by reference, are maintained under '/dev/disk'
 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
 #
 UUID=d5509200-4641-4e0c-a7ff-d424bdc56001 /                       ext4    defaults        1 1
 UUID=fb394fa9-e2a8-4ed2-8cb1-c3728d685f10 /boot                   ext4    defaults        1 2
 UUID=1a25e5fc-d479-445c-a4b4-e01208932468 swap                    swap    defaults        0 0
 tmpfs                   /dev/shm                tmpfs   defaults        0 0
 devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
 sysfs                   /sys                    sysfs   defaults        0 0
 proc                    /proc                   proc    defaults        0 0
 /dev/changvg/changlv    /tmp/changlv            ext4    defaults        0 0
 /dev/changvg/changlv1   /tmp/changlv1           ext4    defaults        0 0 
 /dev/changvg/changlv2   /tmp/changlv2           ext4    defaults        0 0
13.删除一个逻辑卷     
注意在删除前要先卸载这个逻辑卷。操作如下:
   
 [root@chang ~]# umount /tmp/changlv1
 [root@chang ~]# lvremove  /dev/changvg/changlv1
 Do you really want to remove active logical volume changlv1? [y/n]: y
   Logical volume "changlv1" successfully removed
 [root@chang ~]# lvscan
   ACTIVE            '/dev/changvg/changlv' [2.00 GiB] inherit
   ACTIVE            '/dev/changvg/changlv2' [2.00 GiB] inherit
14.扩展、缩减逻辑卷大小
 [root@chang ~]# lvextend -L  +1G  /dev/changvg/changlv
   Size of logical volume changvg/changlv changed from 2.00 GiB (512 extents) to 3.00 GiB (768 extents).
   Logical volume changlv successfully resized
 [root@chang ~]# lvscan 
   ACTIVE            '/dev/changvg/changlv' [3.00 GiB] inherit
   ACTIVE            '/dev/changvg/changlv2' [2.00 GiB] inherit       //以为只是使用扩展命令就行了吗。错了,这只是扩展了逻辑卷,并没有把物理卷给扩展
     [root@chang ~]# e2fsck -f /dev/changvg/changlv     //强制检查lv
 [root@chang ~]# resize2fs /dev/changvg/changlv       //重新定义分区大小
     把changlv增少100MB:  缩减逻辑卷恰好跟扩展逻辑卷相反
 [root@chang ~]# e2fsck -f /dev/changvg/changlv      //强制检查lv
 [root@chang ~]# resize2fs /dev/changvg/changlv 100M    //缩减逻辑卷
    
 [root@chang ~]# lvreduce -L -100M -n /dev/changvg/changlv   //缩减物理边界
 WARNING: Reducing active logical volume to 2.90 GiB
 THIS MAY DESTROY YOUR DATA (filesystem etc.)
 Do you really want to reduce changlv? [y/n]: y      //此时会出现一个对话框(因为缩减逻辑卷有风险)
  Size of logical volume changvg/changlv changed from 3.00 GiB (768 extents) to 2.90 GiB (743 extents).
 Logical volume changlv successfully resized
 [root@chang ~]# lvscan
  ACTIVE            '/dev/changvg/changlv' [2.90 GiB] inherit
 ACTIVE            '/dev/changvg/changlv2' [2.00 GiB] inherit
然后挂载便可使用:
  [root@chang ~]# mount 
  /dev/sda2 on / type ext4 (rw)
  proc on /proc type proc (rw)
  sysfs on /sys type sysfs (rw)
  devpts on /dev/pts type devpts (rw,gid=5,mode=620)
  /dev/sda1 on /boot type ext4 (rw)
  tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
  /dev/sr0 on /mnt type iso9660 (ro)
  /dev/mapper/changvg-changlv2 on /tmp/changlv2 type ext4 (rw)
  /dev/mapper/changvg-changlv on /tmp/changlv type ext4 (rw)
 
15.创建快照卷:
    
 [root@chang changlv]# cp  /etc/fstab  ./
 [root@chang changlv]# cp  /etc/passwd  ./ 
 [root@chang changlv]# ls
 fstab  lost+found  passwd
先在之前的逻辑卷添加点东西
创建快照卷:
  [root@chang ~]# lvcreate -L 100M -s -n snap  /dev/changvg/changlv
  Logical volume "snap" created
  [root@chang ~]# lvscan
  ACTIVE   Original '/dev/changvg/changlv' [2.90 GiB] inherit
  ACTIVE            '/dev/changvg/changlv2' [2.00 GiB] inherit
  ACTIVE   Snapshot '/dev/changvg/snap' [100.00 MiB] inherit
挂载快照卷:
   
  [root@chang ~]# mkdir  /tmp/snap
   [root@chang ~]# mount  /dev/changvg/snap   /tmp/snap
   [root@chang ~]# ls  /tmp/snap
   fstab  lost+found  passwd      //可以看得到快照卷已成功
   [root@chang changlv]# rm -rf  fstab     //  破坏原卷内容
   [root@chang changlv]# ls
   lost+found  passwd
   [root@chang tmp]# cd snap/
   [root@chang snap]# ls
   fstab  lost+found  passwd         //可以看得到虽然原卷已经被破坏了,但是快照卷里面的东西还在此时只需要回复快照卷就ok了。