最近总是在做LVM网上看了很多文章,写的不怎么滴。于是痛下决心,自己做一个简单明了的和大家分享一下。
一、LVM简介
LVM是 LogicalVolume Manager(逻辑卷管理)的简写,它由HeinzMauelshagen在Linux 2.4内核上实现。LVM将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性。
优点:与传统的磁盘与分区相比,LVM为计算机提供了更高层次的磁盘存储。它使系统管理员可以更方便的为应用与用户分配存储空间。在LVM管理下的存储卷可以按需要随时改变大小与移除(可能需对文件系统工具进行升级)。LVM也允许按用户组对存储卷进行管理,允许管理员用更直观的名称(如"sales'、'development')代替物理磁盘名(如'sda'、'sdb')来标识存储卷。
知识点:
PV 、VG、 LV三者关系
PV:是物理的磁盘分区
VG:LVM中的物理的磁盘分区,也就是PV,必须加入VG,可以将VG理解为一个仓库或者是几个大的硬盘。
LV:也就是从VG中划分的逻辑分区
pv --> vg --> lv
主要关键点、注意点:
关键点:
存储空间边界:物理边界、逻辑边界
注意点:
扩展:物理边界 --> 逻辑边界
缩减:逻辑边界 --> 物理边界(缩减不能少于已经存储的所有数据空间的大小)
缩减时,先缩减文件系统,并要执行强制检测:e2fsck -f
涉及命令:
pv:pvcreate, pvs, pvdisplay, pvremove, pvmove, pvscan
vg: vgcreate, vgs, vgdisplay, vgremove, vgextend, vgreduce,vgscan
lv: lvcreate, lvs, lvdisplay, lvremove, lvextend, lvreduce,lvscan
目录:
本博主要讲LVM创建、在线扩容、在线缩减、快照和删除
废话不多说,看看实际操作:
准备环境:添加一块未使用过的磁盘/dev/sdb,使用fdisk从其中分出两个5G的分区,并且将其分区类型该为8e
[root@whb ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x5e9ab9d4
Device Boot Start End Blocks Id System
/dev/sdb1 1 654 5253223+ 8e Linux LVM
/dev/sdb2 655 1308 5253255 8e Linux LVM
[root@whb ~]#
一:LVM创建
1、创建物理卷PV
物理卷Physical Volume就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。pvcreate 命令将希望添加到卷组的所有分区或者磁盘创建为物理卷。
创建物理卷PV(Physical Volume)
[root@whb ~]# pvcreate /dev/sdb1
Physical volume"/dev/sdb1" successfully created
[root@whb ~]# pvcreate /dev/sdb2
Physical volume"/dev/sdb2" successfully created
查看一下:
[root@whb ~]# pvscan
PV /dev/sdb1 lvm2 [5.01 GiB]
PV /dev/sdb2 lvm2 [5.01 GiB]
或者:
[root@whb ~]# pvdisplay /dev/sdb1
--- Physical volume ---
PV Name /dev/sdb1
VG Name testvg
PV Size 5.01 GiB / not usable 2.10 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 1282
Free PE 1282
Allocated PE 0
PV UUID HKjj00-Gkth-MikJ-8tQ4-TpGI-y5e0-ctD3R3
2、创建卷组VG
卷组Volume Group是由多个PV整合而成的,VG最多可以有65534个PE(PhysicalExtent)组成,每一个物理卷被划分为称为PE的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认的PE块是4M,默认VG最大是256G{由默认的PE块大小计算:4M*65534/(1024M/G)=256G}。
[root@whb ~]# vgcreate testvg /dev/sdb1
Volume group"testvg" successfully created
查看:
[root@whb ~]# vgs testvg
VG #PV #LV #SN Attr VSize VFree
testvg 1 0 0 wz--n- 5.01g 5.01g
扩展pv:
[root@whb ~]# vgextend testvg /dev/sdb2
Volume group"testvg" successfully extended
[root@whb ~]# vgdisplay testvg
--- Volume group ---
VG Name testvg
System ID
Format lvm2
Metadata Areas 2
Metadata SequenceNo 2
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 10.02 GiB
PE Size 4.00 MiB
Total PE 2564
Alloc PE / Size 0 / 0
Free PE / Size 2564 / 10.02 GiB
VG UUID dHcETg-pshe-TR1h-tPnv-H0JQ-foWZ-0jjPJB
缩减pv:
缩减前要先将要移除硬盘上的数据迁移:
[root@whb ~]# pvmove /dev/sdb1
[root@whb ~]# vgreduce testvg /dev/sdb1
Removed"/dev/sdb1" from volume group "testvg"
查看:
[root@whb ~]# vgs
VG #PV #LV #SN Attr VSize VFree
testvg 1 0 0 wz--n- 5.01g 5.01g
3、创建逻辑卷LV
创建逻辑卷Logical Volume,就像硬盘上的分区一样,LV的大小是PE的整数倍。LV的访问路径: /dev/vgname/lvname或/dev/mapper/vgname-lvname
Lvcreate参数: -L:创建LV的大小, -n 创建LV的名字
e.g. lvcreate -L5G -n testlv testvg
其中-L容量的指定也可以用-l选项,指定PE的个数。
[root@whb ~]# lvcreate -L 2G -n testlv testvg
Logical volume"testlv" created
查看:
[root@whb ~]# lvdisplay testvg
--- Logical volume ---
LV Path /dev/testvg/testlv
LV Name testlv
VG Name testvg
LV UUID cqNyAR-QLxf-9H7M-280z-2h2h-X6A0-O2LWG6
LV Write Access read/write
LV Creation host, timewhb, 2014-07-25 18:52:19 +0800
LV Status available
# open 0
LV Size 5.00 GiB
Current LE 1280
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:4
大功告成,LVM 创建完成,可以使用了
使用:
格式化、挂载逻辑卷testlv:
格式化:
[root@whb ~]# mke2fs -t ext4 /dev/testvg/testlv
挂载:
[root@whb ~]# mkdir /mnt/lvm
[root@whb ~]# mount /dev/testvg/testlv /mnt/lvm/
查看:
[root@whb ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/testvg-testlv 5.0G 138M 4.6G 3% /mnt/lvm
LV的在线扩展和缩减
扩展逻辑卷的步骤:
1、创建新的分区,并修改分区类型为8e
2、创建物理卷PV
3、将新创建的PV添加到要扩展的逻辑卷所在的卷组
4、用命令lvextend或者lvresize来将新加入的PE添加到要扩展的逻辑卷中
5、用命令resize2fs扩展文件系统的容量
如果卷组中有多余的空间足够扩展逻辑卷,可以直接从第4步开始。
lv扩展到6G
[root@whb mnt]# lvextend -L 5G /dev/testvg/testlv
扩展物理边界:
[root@whb mnt]# resize2fs /dev/testvg/testlv
详解过程:
创建1个新分区/dev/sdb3,并修改分区类型为8e,创建之后的新分区:
Device Boot Start End Blocks Id System
/dev/sdb3 917 1570 525325
将分区信息写入分区表:
[root@whb ~]# kpartx -af /dev/sdb
[root@whb ~]# partx -a /dev/sdb
新硬盘创建pv:
[root@whb ~]# pvcreate /dev/sdb3
dev_is_mpath: failed to get device for 18:02
Physical volume "/dev/sdb3" successfully created
扩展VG:
[root@whb ~]# vgextend testvg /dev/sdb3
Volume group "testvg" successfully extended
扩展LV:
[root@whb ~]# lvextend -L 10G /dev/testvg/testlv
Extending logical volume testlv to 10.00 GiB
Logical volume testlv successfully resized
物理边界扩展完成,下面扩张文件系统边界:
[root@whb ~]# resize2fs /dev/testvg/testlv
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/testvg/testlv is mounted on /mnt/lvm; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/testvg/testlv to 3407872 (4k) blocks.
The filesystem on /dev/testvg/testlv is now 3407872 blocks long.
[root@whb ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/testvg-testlv 10G 141M 10G 2% /mnt/lvm
缩减逻辑卷的步骤:
缩减逻辑卷一定要先离线
1、先卸载文件系统,然后强制执行检测e2fsck -f
2、然后确定要移除的物理卷的大小,有多少个PE。然后用命令resize2fs缩减文件系统大小,然后重新挂载逻辑卷
3、用命令lvreduce或者lvresize缩减指定个数的PE, 也可以计算出相应的大小来缩减
4、LV缩减之后,通过命令pvdisplay查看,指定要移除的PV,如果要移除的PV有PE在用,用pvmove转移PE到空闲的PV。pvmove可以指定要转移的PE
pvmove /dev/sdb1:1000-1999/dev/sdc1
or
pvmove /dev/sdb1:1000-1999/dev/sdc1:0-999
5、用命令vgreduce缩减指定要从卷组冲移除的物理卷,然后用pvremove命令移除物理卷
下面我们将sdb1移除详细步骤:
卸载文件系统:
[root@whb ~]# umount /mnt/lvm
强制检测文件系统:
[root@whb ~]# e2fsck -f /dev/testvg/testlv
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
缩减文件系统:
[root@whb ~]# resize2fs /dev/testvg/testlv 9.7G
resize2fs 1.41.12 (17-May-2010)
resize2fs: Invalid new size: 9.7G
查看要移除的PV是否有占用的PE
[root@whb ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sdb1
VG Name testvg
PV Size 3.01 GiB / not usable 2.75 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 770
Free PE 519
Allocated PE 251
PV UUID xNUWFa-1FdZ-Ctkj-rvJp-dACa-FnJw-mJf6Sc
--- Physical volume ---
PV Name /dev/sdb3
VG Name testvg
PV Size 1.01 GiB / not usable 3.41 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 258
Free PE 258
Allocated PE 0
PV UUID 8esNBR-k4zM-sQW6-Z71N-hKBX-0YlT-Egb1o5
#可以看出/dev/sdb1有251个PE被分配,而/dev/sdb3的258个PE都是空闲的,所以通过pvmove命令来转移被分配的PE到/dev/sdb3
[root@whb ~]# pvmove /dev/sdb1 /dev/sdb3
/dev/sdb1: Moved: 0.0%
/dev/sdb1: Moved: 31.5%
/dev/sdb1: Moved: 74.5%
/dev/sdb1: Moved: 100.0%
转移之后:
[root@whb ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sdb1
VG Name testvg
PV Size 3.01 GiB / not usable 2.75 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 770
Free PE 770
Allocated PE 0
PV UUID xNUWFa-1FdZ-Ctkj-rvJp-dACa-FnJw-mJf6Sc
--- Physical volume ---
PV Name /dev/sdb3
VG Name testvg
PV Size 1.01 GiB / not usable 3.41 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 258
Free PE 7
Allocated PE 251
PV UUID 8esNBR-k4zM-sQW6-Z71N-hKBX-0YlT-Egb1o5
/dev/sdb1中的数据全部都已经转移到/dev/sdb3中了.呵呵
将sdb1从testvg中移除:
[root@whb ~]# vgreduce testvg /dev/sdb1
Removed "/dev/sdb1" from volume group "testvg"
[root@whb ~]# pvremove /dev/sdb1
Labels on physical volume "/dev/sdb1" successfully wiped
[root@whb ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 vg0 lvm2 a-- 59.99g 7.99g
/dev/sdb2 testvg lvm2 a-- 4.00g 0
/dev/sdb3 testvg lvm2 a-- 5.01g 0
/dev/sdb5 testvg lvm2 a-- 1.01g 28.00m
大功告成!!!!!
LVM快照系统
快照就是将当时的系统资料记录下来,就好像照相记录一般。未来若有任何数据更动了,则原始数据会被搬移到快照区,没有被更动的区域则由快照区与文件系统共享。
以创建逻辑卷testlv的快照为例:
命令格式:
lvcreate -s命令创建快照
#lvcreate -L 快照区大小 -s -n 快照名 被快照的逻辑卷
创建快照:
[root@whb ~]# lvcreate –L 1G -s -n testlv-snap/dev/testvg/testlv
Logical volume "testlv-snap" created
查看:
[root@bogon ~]# lvdisplay
--- Logical volume ---
LV Path /dev/testvg/testlv
LV Name testlv
VG Name testvg
LV UUID zi5txf-3qCY-n70x-pAq6-hfUv-OBo6-4fdFtg
LV Write Access read/write
LV Creation host, time bogon, 2014-07-21 14:32:32 +0800
LV snapshot status source of
testlv-snap [active]
LV Status available
# open 1
LV Size 9.00 GiB
Current LE 2304
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:2
挂载快照:
[root@bogon ~]# mount /dev/testvg/testlv-snap /mnt/snapshot
删除LVM
以删除之前创建的LVM为例:
删除前先卸载:
[root@whb ~]# umount /mnt/lvm
[root@whb ~]# umount /mnt/snapshot
[root@whb ~]# lvremove /dev/testvg/testlv-snap
Do you really want to remove active logical volume testlv-snap? [y/n]: y
Logical volume "testlv-snap" successfully removed
[root@whb ~]# lvremove /dev/testvg/testlv
Do you really want to remove active logical volume testlv? [y/n]: y
Logical volume "testlv" successfully removed
取消激活状态的卷组:
[root@whb ~]# vgchange -a n testvg
[root@whb ~]# vgremove testvg
Volume group "testvg" successfully removed
删除PV:
[root@whb ~]# pvremove /dev/sdb{2,3}
Labels on physical volume "/dev/sdb2" successfully wiped
Labels on physical volume "/dev/sdb3" successfully wiped[root@whb ~]# pvs
PV VG Fmt Attr PSize PFree