LVM--逻辑卷管理

一、LVM简介

    很多Linux用户安装Red Hat Linux操作系统时都会为如何划分各个分区的磁盘空间大小,以满足操作系统未来需要这样一个问题而烦恼。而当分区划分完成后出现某个分区空间耗尽的情况时,解决的方法往往只能是使用符号链接,或者使用调整分区大小的工具(如parted等),但这些都只是临时的解决办法,没有根本解决问题。随着 LVM(Logical Volume Manager,逻辑盘卷管理的简称)的出现,这些问题都迎刃而解,用户在无需停机的情况下方便地调整各个分区大小。

二、LVM版本 :

    在 Linux 2.4 内核上提供了 Linux 的 LVM 实现。目前 Linux 2.6 内核支持 LVM2,Redhat 官方网站目前提供最新下载版本(sources.redhat.com/lvm2/);如果需要最新或者其它版本,请参考网页。本文配置采用版本lvm2-2.02.100-8.el6.x86_64。

查看系统中 LVM 版本:

1 [root@stu19 ~]# uname -a 2 Linux stu19.magedu.com 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux 3 [root@stu19 ~]# rpm -qa |grep lvm* 4 mesa-private-llvm-3.3-0.3.rc3.el6.x86_64 5 lvm2-libs-2.02.100-8.el6.x86_64 6 lvm2-2.02.100-8.el6.x86_64 7 [root@stu19 ~]# rpm -qi lvm2 8 Name : lvm2 Relocations: (not relocatable) 9 Version : 2.02.100 Vendor: CentOS 10 Release : 8.el6 Build Date: Sun 24 Nov 2013 12:25:40 AM CST 11 Install Date: Mon 30 Jun 2014 12:39:29 PM CST Build Host: c6b9.bsys.dev.centos.org 12 Group : System Environment/Base Source RPM: lvm2-2.02.100-8.el6.src.rpm 13 Size : 1561629 License: GPLv2 14 Signature : RSA/SHA1, Mon 25 Nov 2013 03:32:37 AM CST, Key ID 0946fca2c105b9de 15 Packager : CentOS BuildSystem <http://bugs.centos.org> 16 URL : http://sources.redhat.com/lvm2 17 Summary : Userland logical volume management tools 18 Description : 19 LVM2 includes all of the support for handling read/write operations on 20 physical volumes (hard disks, RAID-Systems, magneto optical, etc., 21 multiple devices (MD), see mdadd(8) or even loop devices, see 22 losetup(8)), creating volume groups (kind of virtual disks) from one 23 or more physical volumes and creating one or more logical volumes 24 (kind of logical partitions) in volume groups.

三、LVM优点:

比起正常的硬盘分区管理,LVM更富于弹性:

  • 使用卷组(VG),使众多硬盘空间看起来像一个大硬盘。
  • 使用逻辑卷(LV),可以创建跨越众多硬盘空间的分区。
  • 可以创建小的逻辑卷(LV),在空间不足时再动态调整它的大小。
  • 在调整逻辑卷(LV)大小时可以不用考虑逻辑卷在硬盘上的位置,不用担心没有可用的连续空间。
  • 可以在线(online)对逻辑卷(LV)和卷组(VG)进行创建、删除、调整大小等操作。
  • 无需重新启动服务,就可以将服务中用到的逻辑卷(LV)在线(online)/动态(live)迁移至别的硬盘上。
  • 允许创建快照,可以保存文件系统的备份,同时使服务的下线时间(downtime)降低到最小。

 

四、LVM基本组成块与结构

    LVM是Linux操作系统对磁盘分区进行管理的一种机制。LVM利用Linux内核的device-mapper来实现存储系统的虚拟化(系统分区独立于底层硬件)。 通过LVM,你可以实现存储空间的抽象化并在上面建立虚拟分区(virtual partitions),可以更简便地扩大和缩小分区,可以增删分区时无需担心某个硬盘上没有足够的连续空间,LVM是用来方便管理的,不会提供额外的安全保证。通过它,系统管理员可以轻松地管理磁盘分区。在LVM中每个磁盘分区就是一个物理卷(physical volume,PV),若干个物理卷可以组成为一个卷组(volume group,VG),形成一个存储池。系统管理员可以在卷组上创建逻辑卷(logical volumes,LV),并在逻辑卷组上创建文件系统。

 

LVM的基本组成块(building blocks):

    PV(physical volume):物理卷在逻辑卷管理系统最底层,可为整个物理硬盘或实际物理硬盘上的分区。
    VG(volume group):卷组建立在物理卷上,一卷组中至少要包括一物理卷,卷组建立后可动态的添加卷到卷组中,一个逻辑卷管理系统工程中可有多个卷组,它类似于非LVM系统中的物理硬盘。
    LV(logical volume):逻辑卷建立在卷组基础上,是个虚拟分区。卷组中未分配空间可用于建立新的逻辑卷,逻辑卷建立后可以动态扩展和缩小空间。
    PE(physical extent):物理区域是物理卷中可用于分配的最小存储单元,物理区域大小在建立卷组时指定,一旦确定不能更改,同一卷组所有物理卷的物理区域大小需一致,新的pv加入到vg后,pe的大小自动更改为vg中定义的pe大小。默认为4MB,也可以是8MB,16MB等。
    LE(logical extent):逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。
    卷组描述区域:卷组描述区域存在于每个物理卷中,用于描述物理卷本身、物理卷所属卷组、卷组中逻辑卷、逻辑卷中物理区域的分配等所有信息,它是在使用pvcreate建立物理卷时建立的。

LVM 逻辑卷管理_center

                      LVM结构

常用命令:

  • pv:    pvcreate, pvs, pvdisplay, pvremove, pvmove, pvscan
  • vg:    vgcreate, vgs, vgdisplay, vgremove,vgchange, vgextend, vgreduce, vgscan
  • lv:    lvcreate, lvs, lvdisplay, lvremove, lvextend, lvreduce, lvscan

所有 LVM 命令都接受 -v 参数,它可多次输入来提高输出的详细程度。也可以跟-vv,-vvv,-vvvv

可以使用man command 或者command --help获取命令的帮助信息。

 

五、实例

1.创建物理卷

使用pvcreate命令可以创建物理卷,可以在整个磁盘上创建物理卷,也可以在一个磁盘分区上创建物理卷。本文针对分区进行相关的操作。

如果要在磁盘分区上创建PV,首先要使用分区工具fdisk在磁盘上面创建分区,然后把分区的系统号码改为8e,即Linux LVM。

分区/dev/sdb1大小 2G 分区 /dev/sdb2大小 3G

a、首先对硬盘分区结果如下:

1 [root@stu19 ~]# fdisk /dev/sdb 2 3 Command (m for help): p 4 5 Disk /dev/sdb: 21.5 GB, 21474836480 bytes 6 255 heads, 63 sectors/track, 2610 cylinders 7 Units = cylinders of 16065 * 512 = 8225280 bytes 8 Sector size (logical/physical): 512 bytes / 512 bytes 9 I/O size (minimum/optimal): 512 bytes / 512 bytes 10 Disk identifier: 0x0297d04b 11 12 Device Boot Start End Blocks Id System 13 /dev/sdb1 1 262 2104483+ 8e Linux LVM #LVM的分区类型为8e 14 /dev/sdb2 263 655 3156772+ 8e Linux LVM

b、让内核重读其分区表:kpartx -af /dev/sdb ,然后查看硬盘分区信息cat /proc/partitions.

c、使用pvcreate命令创建物理卷

1 [root@stu19 ~]# pvcreate /dev/sdb1 2 Physical volume "/dev/sdb1" successfully created 3 [root@stu19 ~]# pvcreate /dev/sdb2 4 Physical volume "/dev/sdb2" successfully created

2、查看已创建的物理卷

1 [root@stu19 Packages]# pvs 2 PV VG Fmt Attr PSize PFree 3 /dev/sda2 vg0 lvm2 a-- 59.99g 7.99g 4 /dev/sdb1 lvm2 a-- 2.01g 2.01g 5 /dev/sdb2 lvm2 a-- 3.01g 3.01g 6 [root@stu19 Packages]# pvdisplay 7 --- Physical volume --- //已创建好的PV,且有所属VG 8 PV Name /dev/sda2 //PV名称 9 VG Name vg0 //PV所属的VG名称 10 PV Size 60.00 GiB / not usable 8.00 MiB //PV的大小 11 Allocatable yes //是否可分配 12 PE Size 8.00 MiB //物理块大小,默认为4MB, 13 Total PE 7679 //总的物理块数 14 Free PE 1023 //空闲的物理块数 15 Allocated PE 6656 //已分配PE 16 PV UUID ix9dHd-HL1u-LicC-uLzw-DtD5-Cm3X-74i671 //PV的UUID 17 --- NEW Physical volume --- //另一个新PV的信息 18 PV Name /dev/sdb1 19 VG Name 20 PV Size 2.01 GiB //PV的大小为2.01GB 21 Allocatable NO 22 PE Size 0 //在创建完VG后就会有 23 Total PE 0 24 Free PE 0 25 Allocated PE 0 26 PV UUID YOkg7H-uUnO-9VvH-JyrF-wCTe-pxt9-oEq12t 27 28 "/dev/sdb2" is a new physical volume of "3.01 GiB" 29 --- NEW Physical volume --- 30 PV Name /dev/sdb2 31 VG Name 32 PV Size 3.01 GiB 33 Allocatable NO 34 PE Size 0 35 Total PE 0 36 Free PE 0 37 Allocated PE 0 38 PV UUID ErK6cN-xxmG-aRp2-e16x-79m1-cX2L-BCs9WE 39 40 [root@stu19 Packages]#

3、创建卷组VG

将物理卷(pv)/dev/sdb1和/dev/sdb2,创建为卷组(vgcreate),名为luovg

可以加选项-s 改变PE的大小,或者使用vgchange -s 命令修改。

1 [root@stu19 ~]# vgcreate luovg /dev/sdb1 /dev/sdb2 2 Volume group "luovg" successfully created

4、查看已创建卷组VG

1 [root@stu19 ~]# vgs 2 VG #PV #LV #SN Attr VSize VFree 3 luovg 2 0 0 wz--n- 5.01g 5.01g 4 vg0 1 4 0 wz--n- 59.99g 7.99g 5 [root@stu19 ~]# vgdisplay 6 --- Volume group --- 7 VG Name luovg //VG名称 8 System ID 9 Format lvm2 10 Metadata Areas 2 //元信息区域 11 Metadata Sequence No 1 12 VG Access read/write //访问许可,可读写 13 VG Status resizable //VG状态 14 MAX LV 0 //最大的LV数 15 Cur LV 0 //当前的LV数 16 Open LV 0 //打开的LV数 17 Max PV 0 //最大的PV数 18 Cur PV 2 //当前的PV数 19 Act PV 2 //活动的PV数 20 VG Size 5.01 GiB //VG的大小为5.01G 21 PE Size 4.00 MiB //物理块的大小为4MB 22 Total PE 1283 //VG的物理块总数为1283 23 Alloc PE / Size 0 / 0 //已经使用的物理块数量和大小 24 Free PE / Size 1283 / 5.01 GiB //空闲的物理块数和大小 25 VG UUID XPvkQ6-g8IY-zbQz-dhL1-BHgS-LzPz-GgErGM 26

5、在卷组VG里创建逻辑卷LV,并格式化、挂载

格式 : lvcreate -n lv_name -L #UNIT {mMgGtT} [-l LogicalExtentsNumber ] VG_NAME

1 [root@stu19 ~]# lvcreate -n mylv -L 2G luovg //在luovg卷组里创建一个2G的名称为mylv的LV 2 Logical volume "mylv" created 3 4 [root@stu19 ~]# lvs //查看已创建的LV 5 LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert 6 mylv luovg -wi-a----- 2.00g 7 root vg0 -wi-ao---- 20.00g 8 swap vg0 -wi-ao---- 2.00g 9 usr vg0 -wi-ao---- 10.00g 10 var vg0 -wi-ao---- 20.00g 11 [root@stu19 ~]# lvdisplay //查看已创建的LV的详细信息 12 --- Logical volume --- 13 LV Path /dev/luovg/mylv //逻辑卷LV的路径 14 LV Name mylv //逻辑卷LV的名称 15 VG Name luovg //逻辑卷LV所属的卷组 16 LV UUID ZkWuff-qENX-yLhv-SNno-0M2O-s69c-3QfBbb 17 LV Write Access read/write //访问许可为可读写 18 LV Creation host, time stu19.magedu.com, 2014-07-27 11:17:37 +0800 //LV创建主机时间 19 LV Status available //LV 状态 20 # open 0 21 LV Size 2.00 GiB //逻辑卷的大小 22 Current LE 512 //逻辑卷的逻辑块数 23 Segments 1 24 Allocation inherit 25 Read ahead sectors auto 26 - currently set to 256 27 Block device 253:4 28 29

lv的访问路径:
1、/dev/VG_NAME/LV_NAME
2、/dev/mapper/VG_NAME-LV_NAME

此两者均为符号链接,指向的文件为/dev/dm-#

1 [root@stu19 ~]# ll /dev/luovg/mylv 2 lrwxrwxrwx 1 root root 7 Jul 27 11:17 /dev/luovg/mylv -> ../dm-4 3 [root@stu19 ~]# ll /dev/mapper/luovg-mylv 4 lrwxrwxrwx 1 root root 7 Jul 27 11:17 /dev/mapper/luovg-mylv -> ../dm-4 5 [root@stu19 ~]# ls /dev/dm-4 6 /dev/dm-4

挂载逻辑卷

1 [root@stu19 ~]# mke2fs -t ext4 /dev/luovg/mylv //格式化逻辑卷 2 [root@stu19 ~]# mkdir /luodata 3 4 [root@stu19 ~]# mount /dev/luovg/mylv /luodata/ //把逻辑卷mylv挂载在/luodata目录 5 [root@stu19 ~]# mount |grep luodata 6 /dev/mapper/luovg-mylv on /luodata type ext4 (rw) 7 8 [root@stu19 /]# cd /luodata/ //可正常使用 9 [root@stu19 luodata]# touch a 10 [root@stu19 luodata]# ls 11 a lost+found 12 13 [root@stu19 luodata]# df -Th //查看文件系统硬盘空间使用信息 14 Filesystem Type Size Used Avail Use% Mounted on 15 /dev/mapper/vg0-root ext4 20G 1.5G 18G 8% / 16 tmpfs tmpfs 495M 0 495M 0% /dev/shm 17 /dev/sda1 ext4 194M 49M 135M 27% /boot 18 /dev/mapper/vg0-usr ext4 9.9G 7.4G 2.0G 79% /usr 19 /dev/mapper/vg0-var ext4 20G 380M 19G 2% /var 20 /dev/sr0 iso9660 4.2G 4.2G 0 100% /media/cdrom 21 22 // /dev/mapper/luovg-mylv ext4 2.0G 67M 1.9G 4% /luodata

6、扩展卷组VG

发现卷组空间不够,我们扩大卷组空间#vgextend,新添加个大小为1G的分区/dev/sdb3,系统id改为8e

1 [root@stu19 luodata]# pvcreate /dev/sdb3 //增加物理卷 /dev/sdb3 2 Physical volume "/dev/sdb3" successfully created 3 4 [root@stu19 luodata]# pvs //查看物理卷信息 5 PV VG Fmt Attr PSize PFree 6 /dev/sda2 vg0 lvm2 a-- 59.99g 7.99g 7 /dev/sdb1 luovg lvm2 a-- 2.00g 4.00m 8 /dev/sdb2 luovg lvm2 a-- 3.01g 3.01g 9 /dev/sdb3 lvm2 a-- 1.01g 1.01g 10 11 [root@stu19 luodata]# vgextend luovg /dev/sdb3 //扩展卷组,新增PV /dev/sdb3 12 Volume group "luovg" successfully extended 13 14 [root@stu19 luodata]# vgs //查看VG信息 15 VG #PV #LV #SN Attr VSize VFree 16 luovg 3 1 0 wz--n- 6.02g 4.02g //luovg卷组由之前的2个PV变为3个PV,大小也相应增加 17 vg0 1 4 0 wz--n- 59.99g 7.99g 18

7、扩展逻辑卷

可在线进行扩展。

扩展逻辑卷步骤:
1、先确定扩展的目标大小;并确保对应的卷组中有足够的空闲空间可用;
2、扩展物理边界 # lvextend -L 4G /dev/myvg/mylv 4G是扩展到4G,+4G是在原有之上增加了4G
3、扩展逻辑边界,扩大文件系统的容量 # resize2fs /dev/myvg/mylv

1 [root@stu19 luodata]# lvextend -L +1G /dev/luovg/mylv //扩展LV,在原来2G的基础上增加1G 2 Extending logical volume mylv to 3.00 GiB 3 Logical volume mylv successfully resized 4 5 [root@stu19 luodata]# lvs //查看LV信息LSize 大小为3G 6 LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert 7 mylv luovg -wi-ao---- 3.00g 8 root vg0 -wi-ao---- 20.00g 9 swap vg0 -wi-ao---- 2.00g 10 usr vg0 -wi-ao---- 10.00g 11 var vg0 -wi-ao---- 20.00g 12 13 [root@stu19 luodata]# resize2fs -p /dev/luovg/mylv //通过resize2fs文件系统扩展 14 resize2fs 1.41.12 (17-May-2010) 15 Filesystem at /dev/luovg/mylv is mounted on /luodata; on-line resizing required 16 old desc_blocks = 1, new_desc_blocks = 1 17 Performing an on-line resize of /dev/luovg/mylv to 786432 (4k) blocks. 18 The filesystem on /dev/luovg/mylv is now 786432 blocks long. 19 20 [root@stu19 luodata]# df -h //查看磁盘信息 21 Filesystem Size Used Avail Use% Mounted on 22 /dev/mapper/vg0-root 20G 1.5G 18G 8% / 23 tmpfs 495M 0 495M 0% /dev/shm 24 /dev/sda1 194M 49M 135M 27% /boot 25 /dev/mapper/vg0-usr 9.9G 7.4G 2.0G 79% /usr 26 /dev/mapper/vg0-var 20G 380M 19G 2% /var 27 /dev/sr0 4.2G 4.2G 0 100% /media/cdrom 28 //# /dev/mapper/luovg-mylv 3.0G 67M 2.8G 3% /luodata

8、缩减逻辑卷

缩减很危险!!!! 缩减要离线!!!

缩减逻辑卷步骤:
1、先确定缩减后的目标大小;并确保对应的目标逻辑卷大小中有足够的空间可容纳原有所有数据;
2、卸载文件系统,并要执行强制检测,以确保文件系统处于一至性状态 e2fsck -f
3、缩减逻辑边界 resize2fs DEVICE
4、缩减物理边界 lvreduce

1 [root@stu19 luodata]# df -h //查看可用空间 2 [root@stu19 ~]# umount /luodata/ //卸载文件系统 3 4 [root@stu19 ~]# e2fsck -f /dev/luovg/mylv //强制执行检测,确保不报错 5 e2fsck 1.41.12 (17-May-2010) 6 Pass 1: Checking inodes, blocks, and sizes 7 Pass 2: Checking directory structure 8 Pass 3: Checking directory connectivity 9 Pass 4: Checking reference counts 10 Pass 5: Checking group summary information 11 /dev/luovg/mylv: 12/196608 files (0.0% non-contiguous), 29500/786432 blocks 12 13 [root@stu19 ~]# resize2fs /dev/luovg/mylv 2G //缩减逻辑边界大小,即缩减文件系统到2G 14 resize2fs 1.41.12 (17-May-2010) 15 Resizing the filesystem on /dev/luovg/mylv to 524288 (4k) blocks. 16 The filesystem on /dev/luovg/mylv is now 524288 blocks long. 17 18 [root@stu19 ~]# lvreduce -L 2G /dev/luovg/mylv //缩减物理边界大小,缩减至2G 19 WARNING: Reducing active logical volume to 2.00 GiB 20 THIS MAY DESTROY YOUR DATA (filesystem etc.) 21 Do you really want to reduce mylv? [y/n]: y 22 Reducing logical volume mylv to 2.00 GiB 23 Logical volume mylv successfully resized 24 25 [root@stu19 ~]# mount /dev/luovg/mylv /luodata/ //挂载文件系统 26 27 [root@stu19 ~]# df -lh //查看文件系统空间 28 Filesystem Size Used Avail Use% Mounted on 29 /dev/mapper/luovg-mylv 2.0G 67M 1.9G 4% /luodata 30 31 [root@stu19 luodata]# ls /luodata/ //查看原文件不受影响 32 a lost+found

9、缩减磁盘空间

发现物理磁盘空间空闲太多,可将其中一块硬盘或分区去掉。

  • pvmove /dev/sdb3 /dev/sdb4 #将/dev/sdb3上存储的数据移到其它空闲的物理卷中

  • vgreduce luovg /dev/sdbc #将/dev/sdb3从luovg卷组中移除

  • pvremove /dev/sdb3 #将/dev/sdb3从物理卷上移除

    1 [root@stu19 luodata]# pvs #查看物理卷信息 2 PV VG Fmt Attr PSize PFree 3 /dev/sda2 vg0 lvm2 a-- 59.99g 7.99g 4 /dev/sdb1 luovg lvm2 a-- 2.00g 4.00m 5 /dev/sdb2 luovg lvm2 a-- 3.01g 3.01g 6 /dev/sdb3 luovg lvm2 a-- 1.01g 1.01g 7 8 [root@stu19 luodata]# pvmove /dev/sdb3 #将/dev/sdb3上存储的数据移到其它物理卷中 9 No data to move for luovg 10 11 [root@stu19 luodata]# vgreduce luovg /dev/sdb3 #将/dev/sdb3从luovg卷组中移除 12 Removed "/dev/sdb3" from volume group "luovg" 13 14 [root@stu19 luodata]# pvremove /dev/sdb3 #将/dev/sdb3从物理卷上移除 15 Labels on physical volume "/dev/sdb3" successfully wiped 16 17 [root@stu19 luodata]# pvs #g再次查看物理卷信息,已移除 18 PV VG Fmt Attr PSize PFree 19 /dev/sda2 vg0 lvm2 a-- 59.99g 7.99g 20 /dev/sdb1 luovg lvm2 a-- 2.00g 4.00m 21 /dev/sdb2 luovg lvm2 a-- 3.01g 3.01g 22

10、创建快照卷
LVM 的快照性能为您提供了在某个特定时刻,在不导致服务中断的情况下创建设备的虚拟映射可能性。
在提取快照后,当对原始设备进行修改时,快照特性会和在修改前提取快照一样提供一个修改了的数据
区域的副本,以便重建设备的状态。

如果快照已满,那么就会停止提取快照,因此需要确定源文件系统有足够的空间。您可以常规监控快照的大小。

快照是可以重新设定大小的,因此如果您有额外的存储容量,您可以增大快照卷容量以避免漏掉快照。

相反,如果您发现快照卷超过您的需要,您可以减小它来为其它逻辑卷最大限度释放空间。

注意:

1、文件系统的快照副本是虚拟副本,不是文件系统的真实介质备份。快照不是备份过程的替代行为。

2、因为快照在源卷有变化时会增大,所以常规使用 lvs 命令监控快照卷的比例以确定它还没有被填
满是很重要的。使用了 100% 的快照卷会完全丢失,因为写入源卷中不修改的部分的操作如果不
破坏快照是无法成功的。

使用 lvcreate 命令的 -s 参数创建快照卷。快照卷是可写入的。

命令格式:#lvcreate -L 快照区大小 -s -n 快照名 被快照的逻辑卷

1 root@stu19 luodata]# lvcreate -L 512M -s -n mylv-snap /dev/luovg/mylv #为逻辑卷mylv创建一个大小512M名字为mylv-snap的快照 2 Logical volume "mylv-snap" created 3 4 [root@stu19 luodata]# mount /dev/luovg/mylv-snap /tmp/snap/ #挂载快照卷 5 6 [root@stu19 luodata]# lvs |grep mylv #查看逻辑卷信息 7 LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert 8 mylv luovg owi-aos--- 2.00g 9 mylv-snap luovg swi-aos--- 512.00m mylv 0.00