一、LVM简介
LVM是逻辑卷管理(Logical Volume Manager)的简写,它最早是IBM为自己的AIX系统研发的存储管理机制。Heinz Mauelshagen于1998年在Linux2.4内核上实现了LVM,它是在物理硬盘和分区直接之间建立一个逻辑层,以此来提高硬盘分区管理的灵活性,比如动态扩容和缩减。
完美解决磁盘动态扩容缩减的方法应该是在零停机前提下可以自如对文件系统的大小进行调整,可以方便实现文件系统跨越不同磁盘和分区。幸运的是Linux提供的逻辑盘卷管理(LVM,LogicalVolumeManager)机制就是一个完美的解决方案。
二、LVM相关术语介绍
物理存储介质(The physical media):指系统的存储设备,如硬盘等,是最低层的存储单元。
物理卷(physical volume,PV):物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,包含有与LVM相关的管理参数。
卷组(Volume Group,VG):LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
逻辑卷(logical volume,LV):LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。
PE(physical extent,PE):每一个物理卷被划分为称为PE(PhysicalExtents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。
LE(logical extent,LE):逻辑卷也被划分为被称为LE(LogicalExtents)的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
三、LVM的创建
LVM的结构:
上图所示:LV是创建在VG之上,而VG则是由一个个的PV组成。
一)PV的创建:
构成PV的可以是硬盘的物理分区,也可以是自行创建的RAID卷。本文先以分区为例进行说明,待后续介绍了RAID后再做补充。
1)格式化硬盘
在创建PV之前先要对硬盘进行分区,详细的分区步骤如下所示:
[root@Domain01 ~]# fdisk /dev/sdb #对/dev/sdb进行分区 Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0x38607615. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) 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) p #选择分区类型,如果主分区已不够用,请选e来创建扩展分区 Partition number (1-4): 1 #主分区1 First cylinder (1-15665, default 1): #直接回车默认从剩余的第一个磁柱开始 Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-15665, default 15665): +20G #选择大小为20G Command (m for help): t #调整为LVM的ID号 Selected partition 1 #如果只要一个分区的时候会默认选择 Hex code (type L to list codes): 8e #LVM的ID号 Changed system type of partition 1 to 8e (Linux LVM) Command (m for help): n #继续新增分区 Command action e extended p primary partition (1-4) p Partition number (1-4): 2 First cylinder (2613-15665, default 2613): Using default value 2613 Last cylinder, +cylinders or +size{K,M,G} (2613-15665, default 15665): +20G Command (m for help): t Partition number (1-4): 2 Hex code (type L to list codes): 8e Changed system type of partition 2 to 8e (Linux LVM) Command (m for help): w #保存并退出 The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@Domain01 ~]# partx -a /dev/sdb #让内核读到分区信息,多执行几次 BLKPG: Device or resource busy error adding partition 1 BLKPG: Device or resource busy error adding partition 2 [root@Domain01 ~]# cat /proc/partitions #内核已读到/dev/sdb的分区信息 major minor #blocks name 8 0 125829120 sda 8 1 307200 sda1 8 2 123489280 sda2 8 3 2031616 sda3 8 16 125829120 sdb 8 17 20980858 sdb1 8 18 20980890 sdb2 8 32 125829120 sdc
以相同的方法对/dev/sdc进行分区得到/dev/sdc1和/dev/sdc2。
2)创建PV
创建物理卷,物理卷(Physical Volumes)简称PV,是在磁盘的物理分区或与磁盘分区具有同样功能的设备(如RAID)上创建而来。它只是在物理分区中划出了一个特殊的区域,用于记载与LVM相关的管理参数。创建PV的命令:pvcreate 很直白也很好记忆。
[root@Domain01 ~]# pvcreate --help pvcreate: Initialize physical volume(s) foruse by LVM #用于将物理硬盘分区初始化为物理卷,以便被LVM使用 pvcreate [--norestorefile] [--restorefile file] [-d|--debug] #调试,基本用不到 [-f[f]|--force [--force]] #强制创建物理卷,无需用户确认,慎用。 [-h|-?|--help] #获取帮助 [--labelsector sector] [-M|--metadatatype 1|2] [--pvmetadatacopies #copies] [--metadatasize MetadataSize[bBsSkKmMgGtTpPeE]] [--dataalignment Alignment[bBsSkKmMgGtTpPeE]] [--dataalignmentoffset AlignmentOffset[bBsSkKmMgGtTpPeE]] [--setphysicalvolumesize PhysicalVolumeSize[bBsSkKmMgGtTpPeE] [-t|--test] [-u|--uuid uuid] #指定设备的UUID [-v|--verbose] [-y|--yes] [-Z|--zero {y|n}] 是否利用前面四个扇区 [--version] PhysicalVolume [PhysicalVolume...] [root@Domain01 ~]# pvcreate /dev/sd[bc][12] #将格式化出来的物理磁盘分区创建为PV Physical volume "/dev/sdb1"successfully created Physical volume "/dev/sdb2"successfully created Physical volume "/dev/sdc1"successfully created Physical volume "/dev/sdc2"successfully created
[root@Domain01 ~]# pvdisplay "/dev/sdb1"is a new physical volume of "20.01 GiB" --- NEW Physical volume --- PV Name /dev/sdb1 VG Name PV Size 20.01 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID FVz2es-Db5F-vEYN-AjVk-f4Ft-puB5-ATTpww
至此PV创建成功。
3)删除PV
删除PV使用pvremove。
[root@server ~]# pvremove /dev/sdb3 Labels on physical volume "/dev/sdb3" successfully wiped