LVM (Logic Volume Management,逻辑卷管理),是传统商业Unix就带有的一项高级磁盘管理工具,异常强大。后来LVM移植到了Linux操作系统上,尽管不像原来Unix版本那么强大,但瘦死的骆驼比马大,Linux的LVM仍然非常强大,可以在生产运行系统上面直接在线扩展硬盘分区,可以把分区umount以后收缩分区大小,还可以在系统运行过程中把一个分区从一块硬盘搬到另一块硬盘上面去等等,简直就像变魔术,而且这一切都可以在一个繁忙运行的系统上面直接操作,不会对你的系统运行产生任何影响,很安全。 

 
还是拿JavaEye的网站服务器随便举个小例子吧。话说今天晚上我登录JavaEye网站服务器随便这么一查看磁盘使用状况: 
 
C代码  
df -h  
 
df -h
 
竟然发现/home分区的磁盘消耗的很快 
C代码  
Filesystem                Size  Used  Avail Use%   Mounted on   
/dev/mapper/system-home    40G   32G    8G  80%    /home  
 
Filesystem                Size  Used  Avail Use%   Mounted on
/dev/mapper/system-home    40G   32G    8G  80%    /home
 
有点出乎意料,已经使用了80%,如果用光了,可就有点麻烦了,所以为了安全,把/home分区扩大5GB,多给它点硬盘空间,敲入两条shell命令 
 
C代码  
lvextend -L +5G /dev/system/home   
resize_reiserfs -s +5G /dev/system/home   
 
lvextend -L +5G /dev/system/home
resize_reiserfs -s +5G /dev/system/home 
先把逻辑卷扩大5GB,再把上面的reiserfs文件系统扩大5GB,前后耗时不超过3秒钟。再df -h查看一下: 
C代码  
Filesystem                Size  Used  Avail Use%   Mounted on   
/dev/mapper/system-home    45G   32G    13G  71%    /home  
 
Filesystem                Size  Used  Avail Use%   Mounted on
/dev/mapper/system-home    45G   32G    13G  71%    /home
 
哈哈,/home立刻多了5GB,搞定收工,这是不是很像变戏法,我没停任何服务,没重起服务器,大家没有任何感觉,就一切搞定,说实话我也一直觉得LVM很cool,所以我一直是LVM+Reiserfs的忠实拥趸。有兴趣学习LVM的同学可以下载后面的附件,这可是我珍藏多年的LVM秘籍! 
 
另外强烈推荐Daniel Robbins在IBM DW网站上面关于LVM的系列文章:
 
 

一、LVM系统分区
#安装系统的时候采用LVM分区
#先划分一个/boot分区

#将剩余空间划为一个物理卷(PV),创建一个名VolGroup00卷组(VG)
#并在VolGroup00卷组修建逻辑卷(LV)


二、LVM分区创建、大小调整
1、新添加一块硬盘,使用LVM对这个磁盘进行分区管理
#检测所有存储设备
lvmdiskscan   #或者使用fdisk -l

#创建物理分区(将整块硬盘划为一个物理分区)
fdisk /dev/sdb


#创建物理卷(PV)
pvcreate /dev/sdb1

#创建卷组(VG)
#创建一个名为VolGroup01的卷组,并将/dev/sdb1这个刚创建的特理卷加放该卷组中
vgcreate VolGroup01 /dev/sdb1

当多个物理卷组合成一个卷组后时,LVM会在所有的物理卷上做类似格式化的工作,将每个物理卷切成一块一块的空间,这一块一块

的空间就称为PE(Physical Extent ),它的默认大小是4MB。

由于受内核限制的原因,一个逻辑卷(Logic Volume)最多只能包含65536个PE(Physical Extent),所以一个PE的大小就决定了

逻辑卷的最大容量,4 MB 的PE决定了单个逻辑卷最大容量为 256 GB,若希望使用大于256G的逻辑卷,则创建卷组时需要指定更大

的PE。在Red Hat Enterprise Linux AS 4中PE大小范围为8 KB 到 16GB,并且必须总是 2 的倍数。

例如,如果希望使用 64 MB 的PE创建卷组,这样逻辑卷最大容量就可以为4 TB,命令如下:
vgcreate - 64MB VolGroup01 /dev/sdb1

#查看卷组
  
[root@LVM ~]# vgdisplay
  --- Volume group ---
  VG Name               VolGroup01    #卷组名
  System ID            
  Format                lvm2     #格式
  Metadata Areas        1
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0      #最大逻辑卷的个数,0为不限制
  Cur LV                1      #当前逻辑卷的个数
  Open LV               0 #当前可用的逻辑卷个数
  Max PV                0 
  Cur PV                1 #当前卷组中物理卷的个数
  Act PV                1 #当前卷组中有一个活动的物理卷
  VG Size               149.05 GB #卷组的总容量27.96G
  PE Size               4.00 MB  #卷组的最小I/O单位
  Total PE              38156  #卷组中的桩点数
  Alloc PE / Size       25600 / 100.00 GB #当前用掉的桩点和磁盘大小
  Free  PE / Size       12556 / 49.05 GB #当前可用的桩点和磁盘大小
  VG UUID               7SPylC-awq8-t48R-1Yn5-UKxM-pd2C-VS4p1s

#创建逻辑卷(LV)
lvcreate -L 100G -n LogVol11 VolGroup01
#其中-L 100G表示这个LV的空间是100G
#-n LogVol11表示这个LV名字为LogVol11
#VolGroup01表示这个LV所在的VG

lvcreate -L 49G -n LogVol12 VolGroup01

#LV检测
lvscan

#格式化LV(格式化成ext3格式)
mkfs.ext3 /dev/VolGroup01/LogVol11
mkfs.ext3 /dev/VolGroup01/LogVol12

#挂载到普通目录上
mkdir /data1
mkdir /data2
mount /dev/VolGroup01/LogVol11 /data1
mount /dev/VolGroup01/LogVol12 /data2

#修改/etc/fstab可以在启动时候自动挂载到相应位置
vi /etc/fstab

#查看分区情况
df -h

2、调整LV的大小
#首先取消挂载
umount /data1
umount /data2

#/dev/VolGroup01/LogVol12减少10
e2fsck -f /dev/VolGroup01/LogVol12
resize2fs /dev/VolGroup01/LogVol12 39G       #39G为调整后的磁盘空间大小
lvreduce -L-10G /dev/VolGroup01/LogVol12  #10G为减少的磁盘空间大小
resize2fs /dev/VolGroup01/LogVol12

#/dev/VolGroup01/LogVol11增加10G
lvextend -L+10G /dev/VolGroup01/LogVol11
e2fsck -f /dev/VolGroup01/LogVol11
resize2fs /dev/VolGroup01/LogVol11

#重新挂载
mount /dev/VolGroup01/LogVol11 /data1
mount /dev/VolGroup01/LogVol12 /data2


#再来查看下分区情况
df -h