LVM(Logical Volume Manager,逻辑磁区管理员)
原先用于 IBM AIX 系统,后来移植到 Linux 系统,使 Linux 系统也具备了弹性分割磁碟的功能。
lvm 能够合并多个分割区或是实体磁碟(lvm 称其为 PV),成为一个大的磁区群组(lvm 称其为 VG)。此时这个磁区群组可视为一个虚拟磁碟,可以如同分割实体硬碟一样,将磁区群组分割为多个逻辑磁区(LVM 称其为 LV)。
PV:Physical Volume 实体磁区。不论是实体硬碟或是已经设定好的分割区,LVM 都会将其视为一个 PV。
VG:Volume Group 磁区群组。一个以上的 PV 能够组成一个 VG,可将 VG 视为一个庞大的虚拟硬碟。
LV:Logical Volume 逻辑磁区。一个 VG 能分割为数个 LV,可以将 LV 视为虚拟的分割区。
PE:Physical Extent,lvm 在建立 VG 时,会将其中的 PV 切割为许多大小相等的区块,这些区块称为 PE,预设大小为 4 MB。
LE:Logical Extent,lvm 在建立 LV 时,会将其切割为许多大小相等的区块,这些区块称为 LE。LE 的大小必须是 PE 的倍数,不过一般都设定为两者大小相等。
检查安装 lvm
# rpm -qa|grep lvm
lvm2-2.02.56-8.el5
system-config-lvm-1.1.5-4.el5
启动与关闭 LVM
完成事先的准备工作后,便可以启动 lvm,第一次使用 lvm 时,请使用下面指令扫描并建立初始化环境:
# vgscan
如果之前会经使用 lvm 建立虚拟磁碟,执行下面指令便可以启动目前系统上的所有 VG:
# vgchange –ay
若要关闭目前系统上所有 VG,请执行下面指令:
# vgchange –an
大多数发行版于开机时便会自动执行 vgscan 与 vgchange -ay,所以通常不需要特别执行启动的指令。不过稍后建立虚拟磁区时,若是出现 lvm 未启动之类的讯息,请自行执行启动 LVM。
~~~~~~~~~~~~~
新增与移除 PV
~~~~~~~~~~~~~
当启动 LVM 之后,便可以开始建立虚拟磁区。首先必须建立 PV,前面已经提到 PV 可以由分割区或是实体磁碟组成,如果想要将实体硬碟建立为 PV,请直接如下使用 pvcreate 指令即可:
# pvcreate /dev/hdd
若想要将分割区建立为 PV,必须多一个设定分割区的动作。例如想要将 /dev/hda7 建立为 PV,则如下操作:
# fdisk /dev/had
Command (m for help): p ----->列出硬碟的分割区状态
Command (m for help): t ----->重新设定系统代号
Partition number (1-4): 7 ----->选择第 7 号分割区
Hex code (type L to list codes): 8e ----->输入 8e 此为 LVM 的系统代号
# pvcreate /dev/hda7
PV 建立后,使用 pvdisplay 指令可观察系统上的 PV:
# pvdisplay
"/dev/sdb" is a new physical volume of "20.00 GB"
--- NEW Physical volume ---
PV Name /dev/sdb ---------->PV 的名称
VG Name ---------->隶属于哪一个 VG
PV Size 20.00 GB ---------->PV 的容量大小
Allocatable NO ---------->此 PV 是否已经被系统使用
PE Size (KByte) 0 ---------->每个 PE 的大小
Total PE 0 ---------->总有多少 PE
Free PE 0 ---------->可用的 PE 数量
Allocated PE 0 ---------->已用的 PE 数量
PV UUID E783x2-1Xg0-p0tC-xAug-DgX8-wmq5-Hi1TQ2
若要移除 PV,则请如下使用 pvremove 指令:
# pvremove /dev/hda7
~~~~~~~~~~~~~~
新增与移除 VG
~~~~~~~~~~~~~~
例如,已经建立了 /dev/hda7 与 /dev/hdd5 两个 PV,想要将这两个 PV 合并为一个 VG,此时可以如下使用 vgcreate 指令建立 VG:
# vgcreate home_vg /dev/hda7 /dev/hdd5
建立 VG 后,可以如下使用 vgdisplay 观察系统中的 VG:
# vgdisplay -v home_vg
--- Volume group ---
VG Name home_vg ----->VG 的名称
System ID
Format lvm2 ----->VG 的格式
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 20.76 GB ----->VG 的容量大小
PE Size 4.00 MB ----->VG 内每个 PE 的大小
Total PE 5315 ----->VG 内 PE 总数量
Alloc PE / Size 0 / 0 ----->VG 内已用 PE 数量与已用的容量大小
Free PE / Size 5315 / 20.76 GB --->VG 内可用 PE 数量与可用的容量大小
注意:若不加 VG 名称,只执行 vgdisplay 或 vgdisplay -v 的话,将显示系统上所有 VG 的资讯。
若要移除 VG,请如下操作:
# vgchange -a n home_vg ----->关闭名称为 home_vg 的 VG
# vgremove home_vg
~~~~~~~~~~~~~~
新增与移除 LV
~~~~~~~~~~~~~~
使用 lvcreate 指令,在名称为 home_vg 的 VG 上,建立两个 LV:
# lvcreate -L5000 -n home1_lv home_vg
-L 参数指定 LV 的大小为 5000MB,也可以使用“2.5G”表示 2.5GB,或是“15000K”代表“15000KB”
-n 参数设定此 LV 的名称
如果没有使用“-n”参数指定 LV 名称,LVM 将自动依序使用 lvol0、lvol2 等名称命名:
# lvcreate -L500 home_vg
可以使用 lvrename 指令,更改现有 LV 的名称:
# umount /dev/home_vg/lvol0
# lvrename /dev/home_vg/lvol0 var_lv
建立了 LV 后,可以如下使用 lvdisplay 观察系统中的 LV:
# lvdisplay
--- Logical volume ---
LV Name /dev/home_vg/home1_lv ----->LV 的名称
VG Name home_vg ----->所属的 VG 名称
LV Size 1.00 GB ----->LV 的容量大小
Current LE 256 ----->LV 的 LE 个数
Segments 2 ----->此 LV 共跨越两个 PV
LV 建立之后,便可以当成一般分割区使用:
# mkfs.ext3 /dev/home_vg/home1_lv 或者 # mke2fs -j /dev/home_vg/home2_lv
# mount /dev/home_vg/home1_lv /home
# df –h
/dev/mapper/home_vg-home1_lv
1008M 34M 924M 4% /home
若想移除 LV,请如下使用 lvremove 指令:
# umount /dev/home_vg/home1_lv
# lvremove /dev/home_vg/home1_lv
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
正在运作的 VG 中新增或移除 PV
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
当 VG 容量不够时,可以添加一颗硬碟,或是从现有的硬碟中寻找可用的分割区,然后将其建立 PV,接着将此新 PV 加入 VG 中,便可以立刻增加 VG 的容量。
例如:想要将 /dev/hda8 加入名称为 home_vg 的 VG,则先使用 fdisk 更改 /dev/hda8 分割区的系统代码,然后执行如下:
# pvcreate /dev/hda8
# vgextend home_vg /dev/hda8
# vgdisplay -v home_vg
~~~~~~~~~~~~~~~~~~~~~~~~~~
正在运作的 VG 中移除 PV
~~~~~~~~~~~~~~~~~~~~~~~~~~
当硬碟使用已久需要更换,或是想要将某一个分割区移作他用,此时便必须将 PV 从正运作的 VG 中移除。
# pvdisplay
--- Physical volume ---
PV Name /dev/sdb
VG Name home_vg
PV Size 20.00 GB / not usable 4.00 MB
Allocatable yes
PE Size (KByte) 4096
Total PE 5119
Free PE 4482 ----->可用的 PE 数量
Allocated PE 637 ----->已用的 PE 数量为 637
--- Physical volume ---
PV Name /dev/sdc1
VG Name home_vg
PV Size 784.39 MB / not usable 402.50 KB
Allocatable yes
PE Size (KByte) 4096
Total PE 196
Free PE 196
Allocated PE 0 ----->已用 PE 为 0
如果想要移除 /dev/sdc1,因为其已用 PE 为 0,也就是其空间没有尚未被任何档案所使用,则可以如下直接使用 vgreduce 指令将其移除:
# vgreduce home_vg /dev/sdc1
若需要移除的是 /dev/hdd5,由于其空间已经被档案所使用,所以会得到下面的错误讯息:
# vgreduce home_vg /dev/hdd5
Physical volume "/dev/hdd5" still in use -->正在使用中,无法直接移除
此时必须先将 /dev/hdd5 内的档案搬移到其他 PV 后,才能将其移除。
如果 /dev/hdd5 所属的 VG(home_vg)仍有足够的可用空间,便可以使用 pvmove 指令搬移 /dev/hdd5 内的档案至其他 PV。
# vgdisplay -v home_vg
......
Free PE / Size 9600 / 37.50 GB
......
# pvmove -v /dev/hdd5 --->搬移 /dev/hdd5 内的档案
pvmove 指令会自动寻找 VG 中可用的 PV,然后将档案搬移过去。也可以如下指定将 /dev/hdd5 搬移到 /dev/hda8:
# pvmove -v /dev/hdd5 /dev/hda8
~~~~~~~~~~~~~~~~~~~~~~~~
扩大与缩小 LV 的容量
~~~~~~~~~~~~~~~~~~~~~~~~
在 VG 中加入新的 PV,扩充 VG 总容量后,可能会想要将新增的容量加入现有的 LV,此时可以如下使用 lvextend 指令扩大 LV 容量:
# lvextend -L+1G /dev/home_vg/home1_lv
Extending logical volume home1_lv to 2.00 GB
Logical volume home1_lv successfully resized
# lvextend -L2G /dev/home_vg/home2_lv
Extending logical volume home2_lv to 20.00 GB
Logical volume home2_lv successfully resized
-L2G 将 /dev/home_vg/home2_lv 的容量调整为 2GB,也可以使用“M”表示 MB,“K”代表“KB”,或是“-L+1G”表示增加 1 GB
注意:
虽然 LV 的空间已经扩大了,但是 LV 内的档案系统仍然需要调整,依照档案系统不同,使用修改程序将档案系统扩大。(查看扩大与缩小 Linux 分割区)
如果需要缩小 LV 的容量,先将 LV 内的档案系统缩小,然后才能调整 LV。下面以简要说明步骤,例如想要缩小 /dev/home_vg/home1_lv,而目前其所使用的档案系统为 ext3,所以先如下操作缩小档案系统:
# umount /dev/home_vg/home1_lv
# e2fsck -f /dev/home_vg/home1_lv
# resize2fs /dev/home_vg/home1_lv 3G
缩小档案系统后,便可以如下使用 lvreduce 指令调整 LV 的容量:
# lvreduce -L3G /dev/home_vg/home1_lv
将 /dev/home_vg/home1_lv 的容量调整为 3GB,也可以使用“M”表示 MB,“K”代表“KB”,或是“-s-500M”代表减少 500MB
缩小 LV 时,LV 变更后的容量务必大于或等于其档案系统容量,否则将造成档案系统的错误。