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/sdbCommand:nCommandactioneextendedpprimarypartition(1-4)pPartitionnumber(1-4):1Firstcylinder:Usingdefaultvalue1Lastcylinder,+cylindersor+size{K,M,G}:+3GCommand:nCommandactioneextendedpprimarypartition(1-4)pPartitionnumber(1-4):2Firstcylinder:Usingdefaultvalue394Lastcylinder,+cylindersor+size{K,M,G}:+4GCommand:nCommandactioneextendedpprimarypartition(1-4)pPartitionnumber(1-4):3Firstcylinder:Usingdefaultvalue917Lastcylinder,+cylindersor+size{K,M,G}:+5G#调整分区格式为8e,并查看Command:tPartitionnumber(1-4):1Hexcode:8eChangedsystemtypeofpartition1to8eCommand:tPartitionnumber(1-4):2Hexcode:8eChangedsystemtypeofpartition2to8eCommand:tPartitionnumber(1-4):3Hexcode:8eChangedsystemtypeofpartition3to8eCommand:pDisk/dev/sdb:21.5GB,21474836480bytes255heads,63sectors/track,2610cylindersUnits=cylindersof16065*512=8225280bytesSectorsize:512bytes/512bytesI/Osize:512bytes/512bytesDiskidentifier:0x49c5d108DeviceBootStartEndBlocksIdSystem/dev/sdb1139331567418eLinuxLVM/dev/sdb23949164200997+8eLinuxLVM/dev/sdb3917157052532558eLinuxLVM2、创建物理卷PV物理卷PhysicalVolume就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备,是LVM的基本存储逻辑块,但和基本的物理存储介质比较,却包含有与LVM相关的管理参数。

LVM(Logical Volume Manager),它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,可以弹性的增加或减小分区的大小,使得磁盘分区管理更具灵活性。LVM的实现示意图:

bubuko.com,布布扣

创建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

免责声明:文章转载自《Linux逻辑卷管理LVM学习总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux系统定时任务启动ThreadLoacl的反思下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Windos Linux(CentOS 7) opencv安装 tar.gz文件安装

前提: 版本为4.4.0 下载地址:https://github.com/opencv/opencv/releases windows 下载.exe 安装之后 复制2个文件: buildjavaopencv-440.jar, buildjavax64opencv_java440.dll 调用列子如下: //windows 版本...

磁盘的分区、格式化、与挂载

1、磁盘分区:fdisk 【-l】 设备名称 -l:输出后面接的设备所有的分区内容。 1 [root@iZ255cppmtxZ ~]# fdisk -l 2 3 Disk /dev/xvda: 42.9 GB, 42949672960 bytes, 83886080sectors 4 Units = sectors of 1 * 512 = 512byt...

基於tiny4412的Linux內核移植 --- 实例学习中断背后的知识(1)

作者:彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台tiny4412 ADK Linux-4.9   概述前面几篇博文列举了在有设备树的时候,gpio中断的用法示例。下面我们尝试分析一下Linux内核是如何做到的,如果哪写的有问题,欢迎大家批评指正,谢谢。 还是以GPIO中断为例分析,对于tiny4412,gpi...

红帽系列linux自行配置本地yum源

yum是红帽系列的一种包管理工具,能方便的自动解决安装包的依赖关系。以前用rpm包管理安装gcc时,rpm -ivh gcc.rpm ,一般会提示要安装gcc需要安装某某lib库,等你找到那个库的rpm时,又需要另外的...等。使用yum包管理器时,你只需要配置好yum源,只需要‘yum install gcc’命令执行,yum管理器会自动帮你解决好依赖关...

嵌入式Linux学习笔记(五) 通讯协议制定和下位机代码实现

目录 (1).参考资料 (2).协议制定 (3).数据的处理 (4).下位机串口通讯实现 (5).代码     通讯协议可以理解为约束多设备通讯的一套规则,像Modbus,TCP/IP, BLE都是在生产生活常用的协议。不过协议落实到实际应用后,就可以理解为对数据的结构化处理,我之前写的串口点亮LED的实现就涉及了简单的协议制定,对于嵌入式Linux来说,...

Linux下的shell与make

Linux下的shell与make 一、shell 1.1 什么是shell ● 用户与Linux的接口 ● 命令解释器 ● 支持多用户 ● 支持复杂的编程语言 ● Shell有很多种,如:csh,tcsh,pdksh,ash,sash,zsh,bash等。Linux的缺省Shell为bash(Bourne Again Shell)。 Shell是用户和操...