LVM(Logical Volume Manager),它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,可以弹性的增加或减小分区的大小,使得磁盘分区管理更具灵活性。LVM的实现示意图:
创建LVM实例:
1、首先创建3个准备组成卷组VG的物理分区,并且把分区格式改为8e。以/dev/sdb1、/dev/sdb2、/dev/sdb3为例:
#在/dev/sdb磁盘上创建分区/dev/sdb1、/dev/sdb2、/dev/sdb3,大小分别为3G、4G、5G [root@localhost~]#fdisk/dev/sdb Command(mforhelp):n Commandaction eextended pprimarypartition(1-4) p Partitionnumber(1-4):1 Firstcylinder(1-2610,default1): Usingdefaultvalue1 Lastcylinder,+cylindersor+size{K,M,G}(1-2610,default2610):+3G Command(mforhelp):n Commandaction eextended pprimarypartition(1-4) p Partitionnumber(1-4):2 Firstcylinder(394-2610,default394): Usingdefaultvalue394 Lastcylinder,+cylindersor+size{K,M,G}(394-2610,default2610):+4G Command(mforhelp):n Commandaction eextended pprimarypartition(1-4) p Partitionnumber(1-4):3 Firstcylinder(917-2610,default917): Usingdefaultvalue917 Lastcylinder,+cylindersor+size{K,M,G}(917-2610,default2610):+5G #调整分区格式为8e,并查看 Command(mforhelp):t Partitionnumber(1-4):1 Hexcode(typeLtolistcodes):8e Changedsystemtypeofpartition1to8e(LinuxLVM) Command(mforhelp):t Partitionnumber(1-4):2 Hexcode(typeLtolistcodes):8e Changedsystemtypeofpartition2to8e(LinuxLVM) Command(mforhelp):t Partitionnumber(1-4):3 Hexcode(typeLtolistcodes):8e Changedsystemtypeofpartition3to8e(LinuxLVM) Command(mforhelp):p Disk/dev/sdb:21.5GB,21474836480bytes 255heads,63sectors/track,2610cylinders Units=cylindersof16065*512=8225280bytes Sectorsize(logical/physical):512bytes/512bytes I/Osize(minimum/optimal):512bytes/512bytes Diskidentifier:0x49c5d108 DeviceBootStartEndBlocksIdSystem /dev/sdb1139331567418eLinuxLVM /dev/sdb23949164200997+8eLinuxLVM /dev/sdb3917157052532558eLinuxLVM
2、创建物理卷PV
物理卷Physical Volume就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘 等)比较,却包含有与LVM相关的管理参数。pvcreate 命令将希望添加到卷组的所有分区或者磁盘创建为物理卷。
#pvcreate /dev/sdb ,将整个磁盘创建为物理卷。
#pvcreate /dev/sdb1 ,将单个分区创建为物理卷。
#创建物理卷 pvcreate/dev/sdb{1,2,3} 查看物理卷 [root@localhost~]#pvs PVVGFmtAttrPSizePFree /dev/sda2vg0lvm2a--59.99g7.99g /dev/sdb1lvm2a--3.01g3.01g /dev/sdb2lvm2a--4.01g4.01g /dev/sdb3lvm2a--5.01g5.01g [root@localhost~]#pvscan PV/dev/sda2VGvg0lvm2[59.99GiB/7.99GiBfree] PV/dev/sdb1lvm2[3.01GiB] PV/dev/sdb2lvm2[4.01GiB] PV/dev/sdb3lvm2[5.01GiB] Total:4[72.02GiB]/inuse:1[59.99GiB]/innoVG:3[12.03GiB]
3、创建卷组VG
卷组Volume Group是由多个PV整合而成的,VG最多可以有65534个PE(Physical Extent)组成,每一个物理卷被划分为称为PE的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认的PE块是 4M,默认VG最大是256G{由默认的PE块大小计算:4M*65534/(1024M/G)=256G}。
#创建卷组testvg,由sdb1、sdb2和sdb3整合而成 [root@localhost~]#vgcreatetestvg/dev/sdb{1,2,3} Volumegroup"testvg"successfullycreated [root@localhost~]#vgs VG#PV#LV#SNAttrVSizeVFree testvg300wz--n-12.02g12.02g vg0140wz--n-59.99g7.99g #从卷组testvg中移除/dev/sdb2,查看testvg的容量减小了 [root@localhost~]#vgreducetestvg/dev/sdb2 Removed"/dev/sdb2"fromvolumegroup"testvg" [root@localhost~]#vgs VG#PV#LV#SNAttrVSizeVFree testvg200wz--n-8.02g8.02g vg0140wz--n-59.99g7.99g #重新把/dev/sdb2添加到卷组testvg之中 [root@localhost~]#vgextendtestvg/dev/sdb2 Volumegroup"testvg"successfullyextended [root@localhost~]#vgs VG#PV#LV#SNAttrVSizeVFree testvg300wz--n-12.02g12.02g vg0140wz--n-59.99g7.99g
4、创建逻辑卷LV
创建逻辑卷Logical Volume,就像硬盘上的分区一样,LV的大小是PE的整数倍。LV的块设备文件通常是/dev/vgname/lvname和/dev/mapper/vgname-lvname
lvcreate简单格式:lvcreate -L 容量 -n LVname VGname
e.g. lvcreate -L 5G -n testlv1 testvg
其中-L容量的指定也可以用-l选项,指定PE的个数。
#创建testlv1,指定大小为5G [root@localhost~]#lvcreate-L5G-ntestlv1testvg Logicalvolume"testlv1"created #查看是否创建成功 [root@localhost~]#lvs LVVGAttrLSizePoolOriginData%MoveLogCpy%SyncConvert testlv1testvg-wi-a-----5.00g rootvg0-wi-ao----20.00g swapvg0-wi-ao----2.00g usrvg0-wi-ao----10.00g varvg0-wi-ao----20.00g #查看testlv1的设备文件 [root@localhost~]#ls-l/dev/testvg/testlv1 lrwxrwxrwx1rootroot7Jul2014:32/dev/testvg/testlv1->../dm-2 [root@localhost~]#ls-l/dev/mapper/testvg-testlv1 lrwxrwxrwx1rootroot7Jul2014:32/dev/mapper/testvg-testlv1->../dm-2
格式化逻辑卷testlv1并挂载
[root@localhost~]#mke2fs-text4/dev/testvg/testlv1 [root@localhost~]#mount/dev/testvg/testlv1/mnt/lvm
扩展和缩减逻辑卷
扩展逻辑卷的步骤
1、创建新的分区,并修改分区类型为8e
2、创建物理卷PV
3、将新创建的PV添加到要扩展的逻辑卷所在的卷组
4、用命令lvextend或者lvresize来将新加入的PE添加到要扩展的逻辑卷中
5、用命令resize2fs扩展文件系统的容量
如果卷组中有多余的空间足够扩展逻辑卷,可以直接从第4步开始。
实例: 将testlv1扩展到13G
#创建1G新分区/dev/sdb5,并修改分区类型为8e,创建之后的新分区: DeviceBootStartEndBlocksIdSystem /dev/sdb1139331567418eLinuxLVM /dev/sdb23949164200997+8eLinuxLVM /dev/sdb3917157052532558eLinuxLVM /dev/sdb41571261083538005Extended /dev/sdb5157117021060258+8eLinuxLVM [root@localhost~]#kpartx-af/dev/sdb [root@localhost~]#partx-a/dev/sdb #将分区/dev/sdb5创建为物理卷 [root@localhost~]#pvcreate/dev/sdb5 dev_is_mpath:failedtogetdevicefor8:21 Physicalvolume"/dev/sdb5"successfullycreated [root@localhost~]#pvs PVVGFmtAttrPSizePFree /dev/sda2vg0lvm2a--59.99g7.99g /dev/sdb1testvglvm2a--3.01g3.01g /dev/sdb2testvglvm2a--4.00g4.00g /dev/sdb3testvglvm2a--5.01g8.00m /dev/sdb5lvm2a--1.01g1.01g #将/dev/sdb5添加至testvg卷组中 [root@localhost~]#vgextendtestvg/dev/sdb5 Volumegroup"testvg"successfullyextended [root@localhost~]#vgs VG#PV#LV#SNAttrVSizeVFree testvg410wz--n-13.03g8.03g vg0140wz--n-59.99g7.99g #可以看到testvg的大小已经增加到13G,然后扩展逻辑卷的testlv1至13G [root@localhost~]#lvextend-L13G/dev/testvg/testlv1 Extendinglogicalvolumetestlv1to13.00GiB Logicalvolumetestlv1successfullyresized [root@localhost~]#lvs LVVGAttrLSizePoolOriginData%MoveLogCpy%SyncConvert testlv1testvg-wi-ao----13.00g rootvg0-wi-ao----20.00g swapvg0-wi-ao----2.00g usrvg0-wi-ao----10.00g varvg0-wi-ao----20.00g [root@localhost~]#vgs VG#PV#LV#SNAttrVSizeVFree testvg410wz--n-13.03g28.00m vg0140wz--n-59.99g7.99g #上面可以看到逻辑卷已经扩展至13G,接下来进行文件系统扩展 [root@localhost~]#resize2fs/dev/testvg/testlv1 resize2fs1.41.12(17-May-2010) Filesystemat/dev/testvg/testlv1ismountedon/mnt/lvm;on-lineresizingrequired olddesc_blocks=1,new_desc_blocks=1 Performinganon-lineresizeof/dev/testvg/testlv1to3407872(4k)blocks. Thefilesystemon/dev/testvg/testlv1isnow3407872blockslong. [root@localhost~]#df-h FilesystemSizeUsedAvailUse%Mountedon /dev/mapper/vg0-root20G427M19G3%/ tmpfs495M0495M0%/dev/shm /dev/sda1194M30M155M16%/boot /dev/mapper/vg0-usr9.9G2.0G7.4G22%/usr /dev/mapper/vg0-var20G371M19G2%/var /dev/mapper/testvg-testlv113G141M13G2%/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命令移除物理卷
实例: 缩减逻辑卷并从卷组中移除物理卷/dev/sdb1
#首先卸载文件系统 [root@localhost~]#umount/mnt/lvm #强制检测/dev/testvg/testlv1 [root@bogon~]#e2fsck-f/dev/testvg/testlv1 e2fsck1.41.12(17-May-2010) Pass1:Checkinginodes,blocks,andsizes Pass2:Checkingdirectorystructure Pass3:Checkingdirectoryconnectivity Pass4:Checkingreferencecounts Pass5:Checkinggroupsummaryinformation /dev/testvg/testlv1:11/851968files(0.0%non-contiguous),89440/3407872blocks #用命令pvdisplay查看/dev/sdb1的大小以及PE个数 [root@localhost~]#pvdisplay/dev/sdb1 ---Physicalvolume--- PVName/dev/sdb1 VGNametestvg PVSize3.01GiB/notusable2.75MiB Allocatableyes(butfull) PESize4.00MiB TotalPE770 FreePE0 AllocatedPE770 PVUUIDxNUWFa-1FdZ-Ctkj-rvJp-dACa-FnJw-mJf6Sc #可以看出/dev/sdb1大小为3.01G,一共770个PE。testlv1一共13G,移除/dev/sdb1后是10G,这里用9.7G,容量用小数无效,所以使用9700M,其实比9.7G更小 [root@localhost~]#resize2fs/dev/testvg/testlv19.7G resize2fs1.41.12(17-May-2010) resize2fs:Invalidnewsize:9.7G [root@localhost~]#resize2fs/dev/testvg/testlv19700M resize2fs1.41.12(17-May-2010) Resizingthefilesystemon/dev/testvg/testlv1to2483200(4k)blocks. Thefilesystemon/dev/testvg/testlv1isnow2483200blockslong. #重新挂载逻辑卷 [root@localhost~]#mount/dev/testvg/testlv1/mnt/lvm #用命令lvreduce通过指定PE个数或者大小来缩减逻辑卷 [root@localhost~]#lvreduce-l-770/dev/testvg/testlv1 WARNING:Reducingactiveandopenlogicalvolumeto9.99GiB THISMAYDESTROYYOURDATA(filesystemetc.) Doyoureallywanttoreducetestlv1?[y/n]:y Reducinglogicalvolumetestlv1to9.99GiB Logicalvolumetestlv1successfullyresized #查看缩减后的LV,缩减到了9.99G [root@localhost~]#lvs LVVGAttrLSizePoolOriginData%MoveLogCpy%SyncConvert testlv1testvg-wi-ao----9.99g rootvg0-wi-ao----20.00g swapvg0-wi-ao----2.00g usrvg0-wi-ao----10.00g varvg0-wi-ao----20.00g #用pvdisplay命令查看指定要移除的PV是否有占用的PE [root@localhost~]#pvdisplay ---Physicalvolume--- PVName/dev/sdb1 VGNametestvg PVSize3.01GiB/notusable2.75MiB Allocatableyes PESize4.00MiB TotalPE770 FreePE519 AllocatedPE251 PVUUIDxNUWFa-1FdZ-Ctkj-rvJp-dACa-FnJw-mJf6Sc ---Physicalvolume--- PVName/dev/sdb5 VGNametestvg PVSize1.01GiB/notusable3.41MiB Allocatableyes PESize4.00MiB TotalPE258 FreePE258 AllocatedPE0 PVUUID8esNBR-k4zM-sQW6-Z71N-hKBX-0YlT-Egb1o5 #可以看出/dev/sdb1有251个PE被分配,而/dev/sdb5的258个PE都是空闲的,所以通过pvmove命令来转移被分配的PE到/dev/sdb5 [root@localhost~]#pvmove/dev/sdb1:0-250/dev/sdb5:0-250 /dev/sdb1:Moved:0.0% /dev/sdb1:Moved:31.5% /dev/sdb1:Moved:74.5% /dev/sdb1:Moved:100.0% #查看转移之后PE状况 [root@localhost~]#pvdisplay ---Physicalvolume--- PVName/dev/sdb1 VGNametestvg PVSize3.01GiB/notusable2.75MiB Allocatableyes PESize4.00MiB TotalPE770 FreePE770 AllocatedPE0 PVUUIDxNUWFa-1FdZ-Ctkj-rvJp-dACa-FnJw-mJf6Sc ---Physicalvolume--- PVName/dev/sdb5 VGNametestvg PVSize1.01GiB/notusable3.41MiB Allocatableyes PESize4.00MiB TotalPE258 FreePE7 AllocatedPE251 PVUUID8esNBR-k4zM-sQW6-Z71N-hKBX-0YlT-Egb1o5 #可以看出/dev/sdb1中被分配的PE都已经转移到/dev/sdb5中了 #然后再用vgreduce来缩减VG,并用pvremove移除物理卷/dev/sdb1 [root@localhost~]#vgreducetestvg/dev/sdb1 Removed"/dev/sdb1"fromvolumegroup"testvg" [root@localhost~]#pvremove/dev/sdb1 Labelsonphysicalvolume"/dev/sdb1"successfullywiped [root@localhost~]#pvs PVVGFmtAttrPSizePFree /dev/sda2vg0lvm2a--59.99g7.99g /dev/sdb2testvglvm2a--4.00g0 /dev/sdb3testvglvm2a--5.01g0 /dev/sdb5testvglvm2a--1.01g28.00m
LVM快照系统
快照就是将当时的系统资讯记录下来,就好像照相记录一般! 未来若有任何数据更动了,则原始数据会被搬移到快照区,没有被更动的区域则由快照区与文件系统共享。
实例: 创建逻辑卷testlv1的快照
#lvcreate-s命令创建快照 #lvcreate-L快照区大小-s-n快照名被快照的逻辑卷 [root@bogon~]#lvcreate-L1G-s-ntestlv-snap/dev/testvg/testlv1 Logicalvolume"testlv-snap"created [root@bogon~]#lvdisplay ---Logicalvolume--- LVPath/dev/testvg/testlv1 LVNametestlv1 VGNametestvg LVUUIDzi5txf-3qCY-n70x-pAq6-hfUv-OBo6-4fdFtg LVWriteAccessread/write LVCreationhost,timebogon,2014-07-2014:32:32+0800 LVsnapshotstatussourceof testlv-snap[active] LVStatusavailable #open1 LVSize9.00GiB CurrentLE2304 Segments2 Allocationinherit Readaheadsectorsauto -currentlysetto256 Blockdevice253:2 #挂载快照 [root@bogon~]#mount/dev/testvg/testlv-snap/mnt/snapshot
删除LVM
实例:删除之前创建的LVM
[root@localhost~]#umount/mnt/lvm [root@localhost~]#umount/mnt/snapshot [root@localhost~]#lvremove/dev/testvg/testlv-snap Doyoureallywanttoremoveactivelogicalvolumetestlv-snap?[y/n]:y Logicalvolume"testlv-snap"successfullyremoved [root@localhost~]#lvremove/dev/testvg/testlv1 Doyoureallywanttoremoveactivelogicalvolumetestlv1?[y/n]:y Logicalvolume"testlv1"successfullyremoved ####取消激活状态的卷组#### [root@localhost~]#vgchange-antestvg [root@localhost~]#vgremovetestvg Volumegroup"testvg"successfullyremoved ####删除PV#### [root@localhost~]#pvremove/dev/sdb{2,3,5} Labelsonphysicalvolume"/dev/sdb2"successfullywiped Labelsonphysicalvolume"/dev/sdb3"successfullywiped Labelsonphysicalvolume"/dev/sdb5"successfullywiped [root@localhost~]#pvs PVVGFmtAttrPSizePFree /dev/sda2vg0lvm2a--59.99g7.99g
最后用fdisk将各物理分区的类型8e改回83
参考资料:
http://www.cnblogs.com/gaojun/archive/2012/08/22/2650229.html
http://blog.csdn.net/seteor/article/details/6708025