一、需求分析
1,当我们需要存储一个500G的不可分割文件时,但是我们设备上没有这么大的单个磁盘。
2,当我们在搭建一个服务,由于日常运转产生大量文件,磁盘容量不够用了,怎么办?添加磁盘,不行,换个大的,好像也不太合适。
3,由于磁盘损坏等各种原因,需要换磁盘,但是还不能停止服务,这个...有难度。
二、什么是LVM
LVM(Logical Volume Manager,逻辑卷管理),lvm将linux中物理磁盘虚拟化,这样以来,我们看到的和我们操作磁盘并非对应一个真正物理磁盘,而是将一块或多块物理磁盘虚拟之后组合在一起形成一个大容器,然后从这个大容器中虚拟出一块或多块硬盘出来供我们操作。这样就便于我们对磁盘进行扩展和管理,就可以轻松解决上面的各种需求。
LVM的组成结构分为三层,分别是物理卷,卷组还有逻辑卷。
物理卷(physical volume,PV):有物理磁盘或是RAID设备构成,一个物理卷和一块磁盘分区一一对应,用于构建卷组。
卷组(Volume Group,VG):由一个或者多个物理卷构成的大容器,这个容器不能直接使用,需要将它划分成区块使用。
逻辑卷(logical volume,LV):逻辑卷就是我们真正要使用的空间,它和使用普通磁盘分区没有任何区别,需要格式化、挂载后方可使用。
三、如何创建LVM
LVM创建步骤:
1.提供可供LVM使用物理磁盘分区
2.将物理磁盘分区转换为物理卷
3.将一个或多个物理卷创建为卷组
4.在创建好的卷组中创建逻辑卷
5.然后就是格式化和挂载了
我们来一步步创建LVM
1.创建LVM分区
[root@localhost ~]# fdisk /dev/sdbCommand (m for help): nCommand actione extendedp primary partition (1-4)pPartition number (1-4): 1First cylinder (1-6527, default 1):Using default value 1Last cylinder, +cylinders or +size{K,M,G} (1-6527, default 6527): +5GCommand (m for help): tSelected partition 1Hex code (type L to list codes): 8eChanged system type of partition 1 to 8e (Linux LVM)Command (m for help): w[root@localhost ~]# fdisk -l /dev/sdbDisk /dev/sdb: 53.7 GB, 53687091200 bytes255 heads, 63 sectors/track, 6527 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0xccb363d8Device Boot Start End Blocks Id System/dev/sdb1 1 654 5253223+ 8e Linux LVM[root@localhost ~]#
重复以上步骤创建三个LVM分区
2.将物理分区转换为逻辑分区
用到的命令为pvcreate,这个命令基本不需要什么选项
用法:pvcreate [选项] 物理磁盘(可多个)
[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdb2 /dev/sdb3Physical volume "/dev/sdb1" successfully createdPhysical volume "/dev/sdb2" successfully createdPhysical volume "/dev/sdb3" successfully created[root@localhost ~]#
就这样,三个物理卷就创建好了,要查看已经创建好的物理卷可以用pvs和pvdisplay两命令,pvs是简单列出所有物理卷,pvdisplay列出每个详细信息
[root@localhost ~]# pvsPV VG Fmt Attr PSize PFree/dev/sda2 vg_centos6464 lvm2 a-- 19.51g 0/dev/sdb1 lvm2 a-- 5.01g 5.01g/dev/sdb2 lvm2 a-- 5.01g 5.01g/dev/sdb3 lvm2 a-- 5.01g 5.01g[root@localhost ~]#
以上有四个物理,其中有三个是我们刚刚创建的
pvdisplay查看物理卷的详细信息
pvdisplay [选项] [指定物理卷]
[root@localhost ~]# pvdisplay /dev/sdb1"/dev/sdb1" is a new physical volume of "5.01 GiB"--- NEW Physical volume ---PV Name /dev/sdb1VG Name PV Size 5.01 GiBAllocatable NOPE Size 0 Total PE 0Free PE 0Allocated PE 0PV UUID 8hc2Yw-pM79-fS4E-223V-k5Ra-9GVp-EezZZV[root@localhost ~]#
3.将以创建的三个物理卷组合成卷组
创建卷组用vgcreate命令
vgcreate [选项] 卷组名称 物理卷(一个或多个)
常用选项-s,设置物理卷的扩展块大小(PhysicalExtentSize,PE),PE就相当于磁盘分区中的块大小,是逻辑卷伸缩的基本单位,默认为4MB,这个在至少是1K,而且是2的倍数。
[root@localhost ~]# vgcreate myvg /dev/sdb1 /dev/sdb2 /dev/sdb3Volume group "myvg" successfully created[root@localhost ~]#
和物理卷类似,查看卷组用vgs和vgdispaly命令。
[root@localhost ~]# vgsVG #PV #LV #SN Attr VSize VFreemyvg 3 0 0 wz--n- 15.02g 15.02gvg_centos6464 1 2 0 wz--n- 19.51g 0[root@localhost ~]#
4.在已经创建好的卷组中创建逻辑卷
创建逻辑卷用lvcreate命令
NAMElvcreate - create a logical volume in an existing volume groupSYNOPSISlvcreate [--addtag Tag] [--alloc AllocationPolicy] [-a|--activate [a|e|l]{y|n}][-A|--autobackup {y|n}] [-C|--contiguous {y|n}] [-d|--debug] [-h|-?|--help] [--noude-vsync] [--ignoremonitoring] [--monitor {y|n}] [-i|--stripes Stripes [-I|--stripesizeStripeSize]] {[-l|--extents LogicalExtentsNumber[%{VG|PVS|FREE}] | -L|--size Logi-calVolumeSize[bBsSkKmMgGtTpPeE]] | -V|--virtualsize VirtualSize[bBsSkKmMgGtTpPeE]}[-M|--persistent {y|n}] [--minor minor] [-m|--mirrors Mirrors [--nosync] [--mirrorlog{disk|core|mirrored} | --corelog] [-R|--regionsize MirrorLogRegionSize]] [-n|--nameLogicalVolume{Name|Path}] [-p|--permission {r|rw}] [-r|--readahead {ReadAheadSec-tors|auto|none}] [-t|--test] [-T|--thin [-c|--chunksize ChunkSize[bBsSkKmMgG]][--discards {ignore|nopassdown|passdown}] [--poolmetadatasize ThinPoolMetadata-Size[bBsSkKmMgG]]] [--thinpool ThinPoolLogicalVolume{Name|Path}] [--type SegmentType][-v|--verbose] [-Z|--zero {y|n}] VolumeGroup{Name|Path}[/ThinPoolLogicalVolumeName][PhysicalVolumePath[:PE[-PE]]...]
常用选项
-n name:指定逻辑卷名称
-l #:指定逻辑卷大小,#用PE个数表示,很少用
-L #:指定逻辑卷大小,#用K,M,G等单位表示,很常用
-p #:指定访问权限,#是r或者rw
[root@localhost ~]# lvcreate -p rw -L 10G -n mylv myvgLogical volume "mylv" created[root@localhost ~]#
和物理卷类似,使用lvs和lvdisplay查看所有逻辑卷
[root@localhost ~]# lvsLV VG Attr LSize Pool Origin Data% Movemylv myvg -wi-a---- 10.00g lv_root vg_centos6464 -wi-ao--- 15.60g lv_swap vg_centos6464 -wi-ao--- 3.91g [root@localhost ~]#
5.使用逻辑卷
到处为止,LVM创建已经搞定
值得注意的是逻辑卷的访问路径,每当成功创建一个逻辑卷,就会在/dev/中创建一个md-[数字]的设备文件,这个文件就是该逻辑卷的访问路径,但是不便于区分,与此同时,会在/dev/mapper/中创建一个软连接文件,还会在/dev/中创建一个与卷组名同名的目录,在这个目录中会创建与逻辑卷同名的软连接文件,这两个软连接文件都同时指向/dev/md-[数字]文件。
接下来的工作就是格式化和挂载
[root@localhost ~]# mke2fs -t ext4 /dev/mapper/myvg-mylvmke2fs 1.41.12 (17-May-2010)文件系统标签=操作系统:Linux块大小=4096 (log=2)分块大小=4096 (log=2)Stride=0 blocks, Stripe width=0 blocks655360 inodes, 2621440 blocks131072 blocks (5.00%) reserved for the super user第一个数据块=0Maximum filesystem blocks=268435456080 block groups32768 blocks per group, 32768 fragments per group8192 inodes per groupSuperblock backups stored on blocks:32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632正在写入inode表: 完成 Creating journal (32768 blocks): 完成Writing superblocks and filesystem accounting information: 完成This filesystem will be automatically checked every 24 mounts or180 days, whichever comes first. Use tune2fs -c or -i to override.[root@localhost ~]# mkdir /test[root@localhost ~]# mount /dev/mapper/myvg-mylv /test/[root@localhost ~]# ls /test/lost+found[root@localhost ~]#
五、调整LVM
1.为卷组扩容
首先创建一个物理卷,然后将这个物理卷添加至卷组
使用vgextend命令添加物理卷至卷组
vgextend VG_NAME PV_NAME(一个或者多个)
[root@localhost ~]# vgextend myvg /dev/sdb5No physical volume label read from /dev/sdb5Physical volume "/dev/sdb5" successfully createdVolume group "myvg" successfully extended[root@localhost ~]#
2.减小卷组容量,移除物理卷
由于上层逻辑卷的数据是分散存储在各个物理卷上,所以当需要移除物理卷时,需要将该物理卷的数据转移到别的物理卷上
a.移动数据用pvmove命令
pvmove PV_NAME(要移除的物理卷)
[root@localhost ~]# pvmove /dev/sdb1/dev/sdb1: Moved: 10.8%/dev/sdb1: Moved: 30.7%/dev/sdb1: Moved: 49.8%/dev/sdb1: Moved: 69.4%/dev/sdb1: Moved: 88.6%/dev/sdb1: Moved: 100.0%[root@localhost ~]#
b.用vgreduce命令移除物理卷
vgreduce VG_NAEM PV_NAME[root@localhost ~]# vgreduce myvg /dev/sdb1Removed "/dev/sdb1" from volume group "myvg"[root@localhost ~]#
3.为逻辑卷扩容
为逻辑卷扩容分为两部分,首页是扩展物理边界,然后是扩展逻辑边界。那么什么是物理边界,什么又是逻辑边界。
物理边界:新创建的逻辑卷,还没有格式化的,不能直接使用
逻辑边界:已经对逻辑卷格式化,格式化之后的大小才是我们可以真正使用的大小
所以我们需要先扩展物理边界,然后扩展逻辑边界
扩展物理边界使用lvextend
lvextend -L [+]SIZE LV_NAME
-L [+]SIZE:指定扩展大小,+表示增加多少,没有+表示增加到多少
在扩展之前如果该逻辑卷已经挂载,需要将它卸载
为了验证扩展容量不会丢失数据,我们先先创建一些数据
[root@localhost ~]# cp -R /etc/ /data[root@localhost ~]# ls /data/etc lost+found[root@localhost ~]#
然后我们卸载这个逻辑卷,然后对其扩展物理边界
[root@localhost ~]# umount /data[root@localhost ~]# lvextend -L +3G /dev/mapper/myvg-mylvExtending logical volume mylv to 13.00 GiBLogical volume mylv successfully resized[root@localhost ~]# lvsLV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convertmylv myvg -wi-a---- 13.00g lv_root vg_centos6464 -wi-ao--- 15.60g lv_swap vg_centos6464 -wi-ao--- 3.91g [root@localhost ~]# mount /dev/mapper/myvg-mylv /data/[root@localhost ~]# ls /data/etc lost+found[root@localhost ~]# df -h /data文件系统 容量 已用 可用 已用%% 挂载点/dev/mapper/myvg-mylv9.9G 179M 9.2G 2% /data[root@localhost ~]#
从上面的操作我们可以看出,我们已经成功扩展了逻辑边界,数据也没有丢失,但是真正可以使用的空间并没有扩大,这是我们就需要来扩展逻辑边界了
扩展逻辑边界使用resize2fs命令
resize2fs LV_NAME
扩展逻辑分区时,逻辑卷同样不能挂载
[root@localhost ~]# umount /data[root@localhost ~]# resize2fs /dev/mapper/myvg-mylvresize2fs 1.41.12 (17-May-2010)The filesystem is already 3407872 blocks long. Nothing to do![root@localhost ~]# mount /dev/mapper/myvg-mylv /data[root@localhost ~]# ls /data/etc lost+found[root@localhost ~]# !dfdf -h /data文件系统 容量 已用 可用 已用%% 挂载点/dev/mapper/myvg-mylv13G 182M 12G 2% /data[root@localhost ~]#
到此,逻辑卷扩容已经搞定了
4.减小逻辑卷容量
减小逻辑卷容量和逻辑卷扩展正好相反,先减小逻辑边界再减小物理边界,但是在缩减逻辑边界之前需要强制检查文件系统
强制检查文件系统使用e2fsck命令
e2fsck -f LV_NAME
[root@localhost ~]# e2fsck -f /dev/mapper/myvg-mylve2fsck 1.41.12 (17-May-2010)第一步: 检查inode,块,和大小第二步: 检查目录结构第3步: 检查目录连接性Pass 4: Checking reference counts第5步: 检查簇概要信息/dev/mapper/myvg-mylv: 2099/851968 files (0.0% non-contiguous), 99908/3407872 blocks[root@localhost ~]#
减小逻辑边界用resize2fs命令
resize2fs LV_NAME SIZE
[root@localhost ~]# resize2fs /dev/mapper/myvg-mylv 10Gresize2fs 1.41.12 (17-May-2010)Resizing the filesystem on /dev/mapper/myvg-mylv to 2621440 (4k) blocks.The filesystem on /dev/mapper/myvg-mylv is now 2621440 blocks long.[root@localhost ~]#
缩减物理分区用lvreduce命令
lvreduce -L [-]SIZE LV_NAME
缩减物理边界和扩展物理边界类似,指定大小时,-表示减少多少,没有-表示减少到多少
[root@localhost ~]# lvreduce -L -3G /dev/mapper/myvg-mylvWARNING: Reducing active logical volume to 10.00 GiBTHIS MAY DESTROY YOUR DATA (filesystem etc.)Do you really want to reduce mylv? [y/n]: yReducing logical volume mylv to 10.00 GiBLogical volume mylv successfully resized[root@localhost ~]#
我们来检验一下数据是否丢失
[root@localhost ~]# lvsLV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convertmylv myvg -wi-a---- 10.00g lv_root vg_centos6464 -wi-ao--- 15.60g lv_swap vg_centos6464 -wi-ao--- 3.91g [root@localhost ~]# mount /dev/mapper/myvg-mylv /data[root@localhost ~]# ls /data/etc lost+found[root@localhost ~]# df -h /data文件系统 容量 已用 可用 已用%% 挂载点/dev/mapper/myvg-mylv9.9G 179M 9.2G 2% /data[root@localhost ~]#
到此,逻辑卷缩减工作就已经搞定了
六、移除LVM
移除LVM就很简单了,但是,一定提醒大家,在移除LVM之前,请确保数据备份已经搞定
移除LVM分为以下几个步骤:
1.移除逻辑卷
2.移除卷组
3.移除物理卷
移除逻辑卷使用lvremove命令
lvremove LV_NAME
[root@localhost ~]# lvremove /dev/mapper/myvg-mylvDo you really want to remove active logical volume mylv? [y/n]: yLogical volume "mylv" successfully removed[root@localhost ~]#
移除卷组使用vgremove命令
vgremove VG_NAME[root@localhost ~]# vgremove myvgVolume group "myvg" successfully removed[root@localhost ~]#
移除物理卷使用pvremove
pvremove PV_NAME
[root@localhost ~]# pvsPV VG Fmt Attr PSize PFree/dev/sda2 vg_centos6464 lvm2 a-- 19.51g 0/dev/sdb1 lvm2 a-- 5.01g 5.01g/dev/sdb2 lvm2 a-- 5.01g 5.01g/dev/sdb3 lvm2 a-- 5.01g 5.01g/dev/sdb5 lvm2 a-- 5.01g 5.01g[root@localhost ~]# pvremove /dev/sdb5Labels on physical volume "/dev/sdb5" successfully wiped[root@localhost ~]# pvsPV VG Fmt Attr PSize PFree/dev/sda2 vg_centos6464 lvm2 a-- 19.51g 0/dev/sdb1 lvm2 a-- 5.01g 5.01g/dev/sdb2 lvm2 a-- 5.01g 5.01g/dev/sdb3 lvm2 a-- 5.01g 5.01g[root@localhost ~]#
LVM的创建、调整和移除就到此结束了,本文仅仅介绍了一个基本的流程,简单的使用没有什么问题了,关于LVM的更多详细使用还需要大家上网查阅详细资料,我也会在后期做一些补充,在阅读完本文后,希望能提出宝贵的意见,以帮助我更快的进步^_^
转载于:https://blog.51cto.com/becaning/1348365