LVM2


一.LVM2简单介绍

  LVM2:LVM是逻辑卷管理(Logical Volume Manager)的缩写,它最大的作用就是动态的扩展或缩减文件系统的使用空间,以此来提高磁盘分区管理的灵活性。将多块物理磁盘组织成一个逻辑设备,这个逻辑设备在用户看来就是一个大的存储设备。但更像是扩展分区,要想使用的话,得在上面建立逻辑分区。虽然它能实现简单快速的扩展和缩减,但并不能实现文件系统。 封装底层的物理存储设备,并向上提供一个统一的界面或接口。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。比如说我增加一个物理硬盘,这个时候上层的服务是感觉不到的,因为呈现给上层服务的是以逻辑卷的方式。逻辑卷才是真正意义上可以动态扩展或缩减的设备。而这设备本身有两种边界,物理边界和逻辑边界(文件系统边界)。所以,一个逻辑卷就相当于一个文件系统,当做一个分区来使用。

 

二.LVM基本概念

PV(Physical Volume,物理卷):LVM由3层构成,最底层的是PV。创建PV时,可以是分区,磁盘或是RAID,只要是块设备就行。逻辑卷完全可以创建在硬件RAID上(在软RAID上体现不出来优势)。


VG(Volume Group,卷组):卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,PV组合起来的大小就是VG的大小。在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。将一个PV放进VG后,就意味着将PV提供的存储空间划分为一个个的存储单元,叫做PE(物理盘区,逻辑存储单位),类似于RAID中的chunk。在创建卷组时,可以指定PE大小。因此,可以说VG是由一大堆PE组成的。而在逻辑卷上,叫做LE(逻辑盘区)。一个逻辑卷里的PE很可能来自不同物理卷里的PE,因此逻辑卷里存储的数据很可能是来自于不同的磁盘上的。所以,当某个磁盘损坏时,很可能会影响到某个逻辑卷。


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




三.创建LVM2

  1. 准备好磁盘



2.安装LVM管理工具

# rpm -qa | grep "lvm"

# yum install lvm*


3.创建分区并调整分区类型为8e

# fdisk /dev/sdb

[root@localhost ~]# fdisk /dev/sdb
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
e
Partition number (1-4): 3
First cylinder (1309-7832, default 1309): 
Using default value 1309
Last cylinder, +cylinders or +size{K,M,G} (1309-7832, default 7832): 
Using default value 7832
Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (1309-7832, default 1309): 
Using default value 1309
Last cylinder, +cylinders or +size{K,M,G} (1309-7832, default 7832): +5G
Command (m for help):

创建了2个5G大小的分区,然后再调整分区类型为8e

Command (m for help): t
Partition number (1-6): 5
Hex code (type L to list codes): 8e
Changed system type of partition 5 to 8e (Linux LVM)
Command (m for help): t
Partition number (1-6): 6
Hex code (type L to list codes): 8e
Changed system type of partition 6 to 8e (Linux LVM)
Command (m for help): p
Disk /dev/sdb: 64.4 GB, 64424509440 bytes
255 heads, 63 sectors/track, 7832 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: 0xbf6e8224
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         654     5253223+  fd  Linux raid autodetect
/dev/sdb2             655        1308     5253255   fd  Linux raid autodetect
/dev/sdb3            1309        7832    52404030    5  Extended
/dev/sdb5            1309        1962     5253223+  8e  Linux LVM
/dev/sdb6            1963        2616     5253223+  8e  Linux LVM
Command (m for help):


4.创建PV
# pvcreate /dev/sd{5,6}

# pvdisplay | pvs | pvscan

[root@localhost ~]# pvcreate /dev/sdb{5,6}
  Physical volume "/dev/sdb5" successfully created
  Physical volume "/dev/sdb6" successfully created
[root@localhost ~]#

 


5.创建VG

# vgcreate -s 32 myvg2 /dev/sdb{5,6}

[root@localhost ~]# vgcreate -s 32 /dev/myvg2 /dev/sdb{5,6}
  Volume group "myvg2" successfully created
[root@localhost ~]#

 


6.创建LV

# lvcreate -L 5G -n testlv myvg2

[root@localhost ~]# lvcreate -L 5G -n testlv myvg2
  Logical volume "testlv" created
[root@localhost ~]#


7.格式化LV并挂载

# mke2fs -t ext4 /dev/myvg2/testlv

# moutn /dev/myvg2/testlv /mnt

# df -lh

[root@localhost ~]# mke2fs -t ext4 /dev/myvg2/testlv
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1310720 blocks
65536 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1342177280
40 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
32768, 98304, 163840, 229376, 294912, 819200, 884736
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@localhost ~]# mount /dev/myvg2/testlv /mnt
[root@localhost ~]# df -lh
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg0-root   20G  290M   19G   2% /
tmpfs                 935M     0  935M   0% /dev/shm
/dev/sda1             190M   33M  148M  19% /boot
/dev/mapper/vg0-usr   9.8G  2.1G  7.2G  23% /usr
/dev/mapper/vg0-var    20G  204M   19G   2% /var
/dev/md0              9.8G   23M  9.3G   1% /backup
/dev/mapper/myvg2-testlv
                      4.8G   10M  4.6G   1% /mnt
[root@localhost ~]#

 

这样一个逻辑卷就可以被挂载使用了。

 



四.VG扩容

1.新创建一个PV

# pvcreate /dev/sdb7

[root@localhost ~]# pvcreate /dev/sdb7
  Device /dev/sdb7 not found (or ignored by filtering).
[root@localhost ~]# partx -a /dev/sdb
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
BLKPG: Device or resource busy
error adding partition 5
BLKPG: Device or resource busy
error adding partition 6
[root@localhost ~]# partx -a /dev/sdb            # 让内核识别下新建的分区
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
BLKPG: Device or resource busy
error adding partition 5
BLKPG: Device or resource busy
error adding partition 6
BLKPG: Device or resource busy
error adding partition 7
[root@localhost ~]# clear
[root@localhost ~]# pvcreate /dev/sdb7
  Physical volume "/dev/sdb7" successfully created
[root@localhost ~]#

 


2.扩容VG

# vgs

# vgextend myvg2 /dev/sdc

# vgs

[root@localhost ~]# vgextend myvg2 /dev/sdb7
  Volume group "myvg2" successfully extended
[root@localhost ~]#


如果PV中有RAID设备时,对VG进行扩容时,可以通过扩展RAID设备的容量来间接对VG进行扩容。注意:RAID设备/dev/md#大小变化后,需要调整PV大小,操作如下:

# pvresize /dev/md#


以下的VG缩减,LV扩展,移除和删除一个LVM和上面内容大同小异,只需执行相关命令即可。




五.VG缩减

1.卸载文件系统

# umount /mnt

# pvs


2.移除PV

# vgreduce myvg2 /dev/sdb5

# pvs

# vgs




六.LV扩展

1.先扩展物理边界

# lvs

# lvextend -L +5G /dev/myvg2/testlv

# lvs


2.扩展逻辑边界

# resize2fs -p /dev/myvg2/testlv



七.LV缩减

1.先卸载文件系统

# umount /mnt


2.对文件系统进行检测

# fsck -t ext4 /dev/myvg2/testlv


3.先缩减逻辑边界

# resize2fs /dev/myvg2/testlv 3G        # 这里将testlv缩减到3G


4.后缩减物理边界

# lvreduce -L 3G /dev/myvg2/testlv

# mount /dev/myvg2/testlv /mnt



八.删除一个LVM

1.卸载文件系统

# umount /mnt


2.移除LV

# lvs

# lvremove /dev/myvg22/testlv

# lvs


3.移除VG

# vgs

# vgremove myvg2

# vgs


4.移除PV

# pvs

# pvremove /dev/sd{5,6,7}

# pvs



九.LVM2常用命令总结

pv常用命令:

pvs:简要pv信息显示

pvdisplay:显示pv的详细信息

pvcreate /dev/DEVICE: 创建pv

pvremove:移除一个PV并抹掉其上的数据。

pvmove:将某个PV上的数据移动到其它PV上。

pvscan: 扫描当前系统上的PV设备


vg常用命令:

vgs:显示vg简要信息

vgdisplay:列出vg详细信息

vgcreate  [-s #[kKmMgGtTpPeE]] VolumeGroupName  PhysicalDevicePath                               [PhysicalDevicePath...]

                  该选项指定PE大小(物理盘区大小),默认为4MB,红帽官方默认是32MB。                          将PV加入到VG中后,PV自动会有PE大小。

vgextend  VolumeGroupName  PhysicalDevicePath [PhysicalDevicePath...]

                  该选项对vg进行扩容

vgreduce  VolumeGroupName  PhysicalDevicePath [PhysicalDevicePath...]                               缩减vg(缩减VG的过程,就是拿掉一个或多个PV)。先做pvmove

vgremove:当VG上创建有LV时,不能随便移除VG。


lv常用命令:

lvs:显示逻辑卷简要信息

lvdisplay:显示逻辑卷详细信息

lvcreate -L #[mMgGtT] -n NAME VolumeGroup

         -l # 该选项还可以指定创建的LV的PE数量

lvremove /dev/VG_NAME/LV_NAME

                    移除一个逻辑卷  

lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME      该命令扩展物理边界

resize2fs /dev/VG_NAME/LV_NAME                     该命令扩展逻辑边界

 -p:能扩展到多大就扩展多大。

lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME      该命令缩减物理边界



快照功能:snapshot 

lvcreate -L #[mMgGtT] -p r -s -n snapshot_lv_name original_lv_name 

                  -p 该选项指明快照卷权限(一般为 r ,表示只读)

                  -s 指明创建的是快照卷




注意:扩展一个逻辑卷风险比较小,不会影响到原有的文件,并且逻辑卷不用卸载就能进行扩展。

      一般在扩展或缩减逻辑卷前,都应该先检查下文件系统。


      而缩减逻辑卷风险比较大:

(1):不能在线缩减,得先卸载。

(2):确保缩减后的空间大小依然能存储原有的所有数据。

(3):在缩减之前应该先强行检查文件,以确保文件系统处于一致性状态。



快照卷特点:

        (1):生命周期为整个数据时长:在这段时长内,数据的增长量不能超出快照卷大小。                  超出的话,快照卷自动损坏。

(2):快照卷和原卷必须在一个卷组内。

(3):快照卷一般不允许修改。

(4):所有原卷里的改变不会影响到快照卷里的改变。