1、LVM简介
LVM(LogicalVolume Manager),中文翻译过来叫逻辑卷管理员,台湾的有些教材上翻译成逻辑滚动条管理员。最初由IBM在AIX实现,后来由Mauelshagen在Linux上实现,现在已经是Linux的一部分。
LVM为系统中大容量分区提供了一种更有弹性的解决方案。一般来说,我们在安装系统的时候,会按照一定的比例,并结合自己的使用经验,给各个分区划分恰当的容量。但是,随着系统在实际生产环境中不断运行,我们发现某些分区的容量并不能满足我们的需求。尽管我们可以通过某些方法解决这些问题(比如创建连接),但是这些方法还是不够优雅。于是LVM就出现了。LVM是一种抽象化存储技术,它在硬盘的分区之上,又创建一个逻辑层,以方便对硬盘分区系统进行管理。
2、LVM中经常会遇到的名词
PV:物理卷,可以是独立的磁盘分区系统或者是RAID也可以。物理卷可以不依赖于LVM系统而独立存在。
VG:卷组,LVM 上层的设备把它当作物理设备来使用,实际是一个逻辑上的抽象层,负责协调上层的逻辑卷与下层的物理块。
LV:逻辑卷,类似于非LVM系统中的分区的概念,在LVM系统中被当作独立的分区来使用。
PE:物理块,是每一个逻辑卷被划分的基本单元,也是LVM系统最小的寻址单元。
3、如何实现LVM功能
第一步:创建pv,使用pvcreate命令。准备一块硬盘,并将其任意分为几个独立的分区,并将分区的类型调整为8e。我已经在该物理磁盘上划分了3块大小为1G的分区,效果如下(PS:至于如何划分分区,我在这里不再赘述):
[root@localhost ~]# fdisk -l /dev/hda
Disk /dev/hda: 21.4 GB, 21474836480 bytes
15 heads, 63 sectors/track, 44384 cylinders
Units = cylinders of 945 * 512 = 483840 bytes
Device Boot Start End Blocks Id System
/dev/hda1 1 2068 977098+ 8e Linux LVM
/dev/hda2 2069 4136 977130 8e Linux LVM
/dev/hda3 4137 6204 977130 8e Linux LVM
接下来就开始创建物理卷:
[root@localhost ~]# pvcreate /dev/hda{1,2,3}
Writing physical volume data to disk "/dev/hda1"
Physical volume "/dev/hda1" successfully created
Writing physical volume data to disk "/dev/hda2"
Physical volume "/dev/hda2" successfully created
Writing physical volume data to disk "/dev/hda3"
Physical volume "/dev/hda3" successfully created
使用pvs命令可以查看物理卷的详细信息,我这里显示的可用空间没有达到原始大小是因为LVM需要保存一些元数据:
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/hda1 lvm2 a-- 954.20M 954.20M
/dev/hda2 lvm2 a-- 954.23M 954.23M
/dev/hda3 lvm2 a-- 954.23M 954.23M
/dev/sda2 VolGroup00 lvm2 a-- 19.88G
另外,使用怕pvdisplay可以查看物理卷的更详细的信息,使用pvscan可以查看一共创建了多少个pv。
第二步:创建vg,使用vgcreate命令。
l -s选项可以指定物理盘区的大小,默认为4M
[root@localhost ~]# vgcreate myvg /dev/hda{1,2,3}
Volume group "myvg" successfully created
使用vgremove命令可以移除vg:
[root@localhost ~]# vgremove myvg
Volume group "myvg" successfully removed
扩展vg,首先准备好一个pv分区:
12345 [root@localhost ~]# pvcreate /dev/hda5
Writing physical volume data to disk "/dev/hda5"
Physical volume "/dev/hda5" successfully created
[root@localhost ~]# vgextend myvg /dev/hda5
Volume group "myvg" successfully extended
移除一块底层的磁盘的做法:首先要使用pvmove命令,作数据迁移的操作:
[root@localhost ~]# pvmove /dev/hda3
No data to move for myvg
然后使用vgreduce命令移除逻辑卷:
[root@localhost ~]# vgreduce myvg /dev/hda3
Removed "/dev/hda3" from volume group "myvg"
最后使用pvremove命令移除物理卷:
[root@localhost ~]# pvremove /dev/hda3
Labels on physical volume "/dev/hda3" successfully wiped