在 Linux 平台中,第三方的软件安装位置一般是:/usr/local/ 和 /srv ,随着我们的应用渐渐增多。万一这些目录所在的分区使用完了。但是,这时候我们又需要安装新的应用软件,怎么办呢?
Linux 系统中 /usr/share目录是存放帮助手册的,通常该目录所占用的磁盘空间比较大,使用rpm包安装的应用,帮助手册一般会安装到 /usr/share 目录中。分区操作那时没有做到充分全面地考虑,随着我们的应用的增多,该目录所有的分区日渐用尽的情况是有可能的。我们想到最简单的方法就是扩大该目录所在的分区。但是磁盘的分区是不能扩展的。在对磁盘进行分区那一刻分区大小就固定下来了。以后再也不能改变的了。
数据是企业的命脉,数据安全由为重要。RAID保证不会因为磁盘故障而导致业务中断;备份保证了,因误操作或黑客攻击导致数据的损坏丢失。能够从备份中把数据恢复还原回来。
我们的应用服务很多使用到数据库服务器(如MySQL),为了不影响业务的正常运行,我们都要在线备份数据的,也就是热备份。商业的热备工具都很贵。有没有一种廉价的解决方案呢?
这时 LVM(逻辑卷),带来了福音。它可以动态地缩减边界的大小;它还有“快照snapshot”的功能,该功能做数据的全备份且是热备(其实是类热备),速度很快。
LVM (LogicalVolumn Manage)逻辑卷。有两个版本:LVM和LVM2。它有三部分组成:
1、PV层
PV由块设备组成,可以是分区、raid.
对空间大小无要求,只要求是块设备。
2、VG层
作用是把多个PV组合成一体。
PV加入VG的时候,PV被划分成一个个逻辑单元(PE)PageExtend。因为PE的大小是在在创建VG的时候指定的。所以刚创建PV的时候,查看PV的信息的时候显示PE总数为0、PE大小也为零。PE的大小默认是4MB。PE也就是我们存储数据的最小单元,类似于磁盘的block块,所以设置PE大小的时候,也要根据实际应用:是存储大数据文件呢还是存储小文件数据呢。我们可以这样理解:VG就一块磁盘。
3、LV层
VG可以理解成整个磁盘,那么创建LV的过程,可以理解为创建分区的过程。创建分区以后要在分区上创建文件系统,并把它挂载才可以使用的。LV也一样要创建文件系统,且使用的命令都一样,还要挂载才可以使用。只是在/dev目录下的设备文件不一样。
LVM的逻辑组成结构如下图:
创建逻辑卷的过程是从下到上一层层创建的:PV — VG —-à LV
一、创建逻辑卷并挂载使用
1、 先创建PV
操作pv使用到的命令
PV:pvcreate创建pvdisplay显示pvmove移动数据。在删除PV的时候,把存放在该PV的数据移动到其它的PV上。pvremove移(删)除卷pvscan扫描当前系统所有的PV并显示。
准备了三个分区用来创建PV。
[root@Node107.11_job]#fdisk-l/dev/sdbDeviceBootStartEndBlocksIdSystem/dev/sdb1166530113+8eLinuxLVM/dev/sdb26719810602908eLinuxLVM/dev/sdb319946021045158eLinuxLVM
把分区 /dev/sdb1和/dev/sdb3创建成pv
[root@Node1~]#pvcreate/dev/sdb1/dev/sdb3Physicalvolume"/dev/sdb1"successfullycreatedPhysicalvolume"/dev/sdb3"successfullycreated[root@Node107.11_job]#pvdisplay/dev/sdb3"/dev/sdb3"isanewphysicalvolumeof"2.01GiB"---NEWPhysicalvolume---PVName/dev/sdb3VGNamePVSize2.01GiBAllocatableNOPESize0TotalPE0FreePE0AllocatedPE0PVUUIDcIL2HD-TqAV-6ICp-iCkX-BJrW-JYZd-AoKhJV
说明:
在PV没有加入VG之前,PE的各项参数都显示为0的。PE的大小,在创建VG的时候设置的。默认是:4M.其实PE就是数据的存储最小单元。类似于block.
1、 创建VG
命令格式:
Vgcreate[option]卷组名称指定加入到卷组的pv
创建卷组的时候只把 /dev/sdb3 加入该卷组
[root@Node107.11_job]#vgcreate–s8Mmyvg/dev/sdb3Volumegroup"myvg"successfullycreated[root@Node107.11_job]#vgdisplaymyvg---Volumegroup---VGNamemyvgSystemIDFormatlvm2MetadataAreas1MetadataSequenceNo1VGAccessread/writeVGStatusresizableMAXLV0CurLV0OpenLV0MaxPV0CurPV1ActPV1VGSize2.00GiBPESize8.00MiBTotalPE256AllocPE/Size0/0FreePE/Size256/2.00GiBVGUUIDfG0uMm-ipew-DrQu-oXGI-ssGq-tYZq-0YxNbH[root@Node107.11_job]#pvdisplay/dev/sdb3---Physicalvolume---PVName/dev/sdb3VGNamemyvgPVSize2.01GiB/notusable7.19MiBAllocatableyesPESize8.00MiBTotalPE256FreePE256AllocatedPE0PVUUIDcIL2HD-TqAV-6ICp-iCkX-BJrW-JYZd-AoKhJV
操作VG使用到的命令:
vgcreatevg的创建vgdisplay显示VG相关的信息vgextendvg的扩展。vgreducevg的缩减vgscan扫描当前系统上有什么卷组
第3步:创建逻辑卷LV
格式:Lvcreate-L逻辑卷的大小-n逻辑卷名称在哪个卷中创建逻辑卷
创建大小为2G的逻辑卷 mylv
[root@Node1~]#lvcreate-L2G-nmylvmyvgLogicalvolume"mylv"created
看看创建的逻辑卷的大小是不是2GB?
[root@Node1~]#lvscan|grep"mylv\ "ACTIVE'/dev/myvg/mylv'[2.00GiB]inherit
操作LV 使用的命令:
lvcreate创建逻辑卷lvdisplay显出逻辑卷的信息,如果想显示指定的逻辑卷的信息,要指定逻辑卷的设备名称#lvdisplay/dev/myvg/mylvlvextend扩展逻辑卷lvreduce缩减逻辑卷lvscan列出当前系统上所有的逻辑卷
第4步:格式化并挂载
1、 格式化逻辑卷 mylv
[root@Node1~]#mke2fs-text4/dev/myvg/mylvmke2fs1.41.12(17-May-2010)Filesystemlabel=OStype:LinuxBlocksize=4096(log=2)Fragmentsize=4096(log=2)Stride=0blocks,Stripewidth=0blocks131072inodes,524288blocks26214blocks(5.00%)reservedforthesuperuserFirstdatablock=0Maximumfilesystemblocks=53687091216blockgroups32768blockspergroup,32768fragmentspergroup8192inodespergroupSuperblockbackupsstoredonblocks:32768,98304,163840,229376,294912Writinginodetables:doneCreatingjournal(16384blocks):doneWritingsuperblocksandfilesystemaccountinginformation:doneThisfilesystemwillbeautomaticallycheckedevery39mountsor180days,whichevercomesfirst.Usetune2fs-cor-itooverride.
[root@Node1~]#echo$?0
2、 挂载
Linux 的哲学思想之一是:一切皆文件。挂载设备要指定被挂载的设备,而设备在Linux系统中表现为文件(它是我们访问设备的入口)。设备文件存放在 /dev 目录上。先要找到设备文件然后才可以使用【mount】命令挂载之。
逻辑卷的设备名称一般是:
[root@Node1~]#ll/dev/dm-dm-0dm-1dm-2dm-6dm-7
而表示逻辑卷的设备文件有两个,所以挂载的时候使用那个设备名称都可以的
[root@Node1~]#ll/dev/myvg/mylvlrwxrwxrwx.1rootroot7Jul1613:04/dev/myvg/mylv- ../dm-2[root@Node1~]#ll/dev/mapper/myvg-mylvlrwxrwxrwx.1rootroot7Jul1613:04/dev/mapper/myvg-mylv- ../dm-2
挂载逻辑卷 mylv
[root@Node1~]#mount-text4/dev/myvg/mylv/mydata/[root@Node1~]#mount|grep"mylv\ "/dev/mapper/myvg-mylvon/mydatatypeext4(rw)
或
[root@Node1~]#mount-text4/dev/mapper/myvg-mylv/mydata/[root@Node1~]#mount|grep"mylv\ "/dev/mapper/myvg-mylvon/mydatatypeext4(rw)
二、假如,逻辑卷 mylv 没有多少剩余空间了,怎么扩展它的大小呢?
扩展条件:
卷组myvg必需有足够大的剩余空间提供给扩展使用否则的话就要扩展卷组的大小了。做逻辑卷扩展时,要先扩展物理边界,再扩展逻辑边界。
扩展逻辑卷的步骤如下图如示:
1、 先查看卷组myvg的使用情况?
root@Node1~]#vgdisplaymyvg|grep"VG[[:space:]]Size"VGSize2.00GiB[root@Node1~]#lvdisplay/dev/myvg/mylv|grep"LV[[:space:]]Size"LVSize2.00GiB
2、 假如,我们要把逻辑卷mylv扩展为 4GB 大小。
从上面可以看得出卷组myvg已经使用完了,我们必需先扩展卷组myvg,再扩展逻辑卷 mylv.
先往该卷组中加入PV
[root@Node1~]#pvcreate/dev/sdb4Physicalvolume"/dev/sdb4"successfullycreated
把刚创建的pv加入到卷组myvg中来:
未加入前,myvg的大小
[root@Node1~]#vgdisplaymyvg|grep"VG[[:space:]]Size"VGSize2.00GiB
把/dev/sdb4加入卷组myvg
[root@Node1~]#vgextendmyvg/dev/sdb4Volumegroup"myvg"successfullyextended
加入用户的PV后,卷组的大小
[root@Node1~]#vgdisplaymyvg|grep"VG[[:space:]]Size"VGSize18.47GiB
3、 卷组myvg已经有足够的剩余空间了。接下来进行逻辑卷的扩展
(1)、首先扩展逻辑卷 mylv的物理边界
[root@Node1~]#lvextend-L4G/dev/myvg/mylvExtendinglogicalvolumemylvto4.00GiBLogicalvolumemylvsuccessfullyresized[root@Node1~]#lvdisplay/dev/myvg/mylv|grep"LV[[:space:]]Size"LVSize4.00GiB
但是查看实际可用的磁盘空间还是2GB.
[root@Node1~]#df-h|grep-A1"mylv\ "/dev/mapper/myvg-mylv2.0G67M1.9G4%/mydata
(2)、物理边界扩展成功以后才可以扩展逻辑卷mylv的逻辑边界
[root@Node1~]#resize2fs-p/dev/myvg/mylvresize2fs1.41.12(17-May-2010)Filesystemat/dev/myvg/mylvismountedon/mydata;on-lineresizingrequiredolddesc_blocks=1,new_desc_blocks=1Performinganon-lineresizeof/dev/myvg/mylvto1048576(4k)blocks.Thefilesystemon/dev/myvg/mylvisnow1048576blockslong.[root@Node1~]#echo$?0
扩展逻辑边界以后,看看是否扩展成功
[root@Node1~]#df-h|grep-A1"mylv\ "/dev/mapper/myvg-mylv4.0G771M3.0G21%/mydata
三、使用逻辑卷的“快照”功能进行在线备份
其实,创建快照的过程就是备份数据的过程。
假如,我们创建快照耗时 10S, 而我们的应用每秒钟会增加100M的数据量。
那么,我们的快照卷大小至少需要:原卷的数据大小 + 10*100M
创建快照卷的条件:
快照卷必需要和原卷在同一个卷组当中。卷组有足够的剩余空间使用快照卷是只读的,为了保证数据的一致性,在创建快照卷时指定是只读的挂载快照卷以只读方式挂载
创建快照卷的方法:
lvcreate-L快照卷的大小-s-pr-n快照卷名称对哪个逻辑卷进行快照-p指定权限。读写-n快照卷的名字-s表示创建的是快照卷
[root@Node1~]#mount-oremount,ro/dev/myvg/mylv/mydata/\lvcreate-L4G-nback-snap-pr-s/dev/myvg/mylv\mount-oremount,rw/dev/myvg/mylv/mydataLogicalvolume"back-snap"created
说明:
创建快照卷要先对原卷施加读锁,然后再创建快照卷。等到快照卷创建完成以后再对原卷施加读写锁。创建快照卷的时间很短,对在线业务几乎没有影响。我们称这种备份数据的方法为:温备。
挂载并查看,快照卷的数据大小和原卷是不是一样?
[root@Node1~]#mount-r/dev/mapper/myvg-back--snap/backup/[root@Node1~]#df-h|grep-A1"myvg"/dev/mapper/myvg-mylv4.0G1.8G2.1G47%/mydata/dev/mapper/myvg-back--snap4.0G1.8G2.1G47%/backup
一直开到梦的尽头。你曾经说,