在 Linux 平台中,第三方的软件安装位置通常是:/usr/local/ 和 /srv ,随着咱们的应用渐渐增多。万一这些目录所在的分区使用完了。可是,这时候咱们又须要安装新的应用软件,怎么办呢?node
Linux 系统中 /usr/share目录是存放帮助手册的,一般该目录所占用的磁盘空间比较大,使用rpm包安装的应用,帮助手册通常会安装到 /usr/share 目录中。分区操做那时没有作到充分全面地考虑,随着咱们的应用的增多,该目录全部的分区日渐用尽的状况是有可能的。咱们想到最简单的方法就是扩大该目录所在的分区。可是磁盘的分区是不能扩展的。在对磁盘进行分区那一刻分区大小就固定下来了。之后不再能改变的了。数据库
数据是企业的命脉,数据安全由为重要。RAID保证不会由于磁盘故障而致使业务中断;备份保证了,因误操做或******致使数据的损坏丢失。可以从备份中把数据恢复还原回来。安全
咱们的应用服务不少使用到数据库服务器(如MySQL),为了避免影响业务的正常运行,咱们都要在线备份数据的,也就是热备份。商业的热备工具都很贵。有没有一种廉价的解决方案呢?bash
这时 LVM(逻辑卷),带来了福音。它能够动态地缩减边界的大小;它还有“快照snapshot”的功能,该功能作数据的全备份且是热备(实际上是类热备),速度很快。 服务器
LVM (LogicalVolumn Manage)逻辑卷。有两个版本:LVM和LVM2。它有三部分组成:app
1、PV层ide
PV由块设备组成,能够是分区、raid.工具
对空间大小无要求,只要求是块设备。大数据
2、VG层ui
做用是把多个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@Node1 07.11_job]# fdisk -l /dev/sdb Device Boot Start End Blocks Id System /dev/sdb1 1 66 530113+ 8e Linux LVM /dev/sdb2 67 198 1060290 8e Linux LVM /dev/sdb3 199 460 2104515 8e Linux LVM
把分区 /dev/sdb1和/dev/sdb3建立成pv
[root@Node1 ~]# pvcreate /dev/sdb1 /dev/sdb3 Physical volume "/dev/sdb1" successfully created Physical volume "/dev/sdb3" successfully created [root@Node1 07.11_job]# pvdisplay /dev/sdb3 "/dev/sdb3" is a new physical volume of "2.01 GiB" ---NEW Physical volume --- PVName /dev/sdb3 VGName PVSize 2.01 GiB Allocatable NO PESize 0 Total PE 0 Free PE 0 Allocated PE 0 PVUUID cIL2HD-TqAV-6ICp-iCkX-BJrW-JYZd-AoKhJV
说明:
在PV没有加入VG以前,PE的各项参数都显示为0的。PE的大小,在建立VG的时候设置的。默认是:4M.其实PE就是数据的存储最小单元。相似于block.
一、 建立VG
命令格式:
Vgcreate [option] 卷组名称 指定加入到卷组的pv
建立卷组的时候只把 /dev/sdb3 加入该卷组
[root@Node1 07.11_job]# vgcreate –s 8M myvg /dev/sdb3 Volume group "myvg" successfully created [root@Node1 07.11_job]# vgdisplay myvg ---Volume group --- VGName myvg System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 1 VGAccess read/write VGStatus resizable MAXLV 0 CurLV 0 Open LV 0 MaxPV 0 CurPV 1 ActPV 1 VGSize 2.00 GiB PESize 8.00 MiB Total PE 256 Alloc PE / Size 0 / 0 Free PE / Size 256 / 2.00 GiB VGUUID fG0uMm-ipew-DrQu-oXGI-ssGq-tYZq-0YxNbH [root@Node1 07.11_job]# pvdisplay /dev/sdb3 ---Physical volume --- PVName /dev/sdb3 VGName myvg PVSize 2.01 GiB / not usable7.19 MiB Allocatable yes PESize 8.00 MiB Total PE 256 Free PE 256 Allocated PE 0 PVUUID cIL2HD-TqAV-6ICp-iCkX-BJrW-JYZd-AoKhJV
操做VG使用到的命令:
vgcreate vg的建立 vgdisplay 显示VG相关的信息 vgextend vg的扩展。 vgreduce vg的缩减 vgscan 扫描当前系统上有什么卷组
第3步:建立逻辑卷LV
格式: Lvcreate -L 逻辑卷的大小 -n 逻辑卷名称 在哪一个卷中建立逻辑卷
建立大小为2G的逻辑卷 mylv
[root@Node1 ~]# lvcreate -L 2G -n mylv myvg Logical volume "mylv" created
看看建立的逻辑卷的大小是否是2GB?
[root@Node1 ~]# lvscan | grep"mylv\>" ACTIVE '/dev/myvg/mylv' [2.00 GiB] inherit
操做LV 使用的命令:
lvcreate 建立逻辑卷 lvdisplay 显出逻辑卷的信息,若是想显示指定的逻辑卷的信息,要指定逻辑卷的设备名称 # lvdisplay /dev/myvg/mylv lvextend 扩展逻辑卷 lvreduce 缩减逻辑卷 lvscan 列出当前系统上全部的逻辑卷
第4步:格式化并挂载
一、 格式化逻辑卷 mylv
[root@Node1~]# mke2fs -t ext4 /dev/myvg/mylv mke2fs1.41.12 (17-May-2010) Filesystemlabel= OS type:Linux Blocksize=4096 (log=2) Fragmentsize=4096 (log=2) Stride=0blocks, Stripe width=0 blocks 131072inodes, 524288 blocks 26214blocks (5.00%) reserved for the super user Firstdata block=0 Maximumfilesystem blocks=536870912 16 blockgroups 32768blocks per group, 32768 fragments per group 8192inodes per group Superblockbackups stored on blocks: 32768, 98304, 163840, 229376, 294912 Writinginode tables: done Creatingjournal (16384 blocks): done Writingsuperblocks and filesystem accounting information: done Thisfilesystem will be automatically checked every 39 mounts or 180 days,whichever comes first. Use tune2fs -c or-i to override.
[root@Node1~]# echo $? 0
二、 挂载
Linux 的哲学思想之一是:一切皆文件。挂载设备要指定被挂载的设备,而设备在Linux系统中表现为文件(它是咱们访问设备的入口)。设备文件存放在 /dev 目录上。先要找到设备文件而后才可使用【mount】命令挂载之。
逻辑卷的设备名称通常是:
[root@Node1 ~]# ll /dev/dm- dm-0 dm-1 dm-2 dm-6 dm-7
而表示逻辑卷的设备文件有两个,因此挂载的时候使用那个设备名称均可以的
[root@Node1 ~]# ll /dev/myvg/mylv lrwxrwxrwx. 1 root root 7 Jul 16 13:04 /dev/myvg/mylv ->../dm-2 [root@Node1 ~]# ll /dev/mapper/myvg-mylv lrwxrwxrwx. 1 root root 7 Jul 16 13:04 /dev/mapper/myvg-mylv-> ../dm-2
挂载逻辑卷 mylv
[root@Node1 ~]# mount -t ext4 /dev/myvg/mylv /mydata/ [root@Node1 ~]# mount | grep "mylv\>" /dev/mapper/myvg-mylv on /mydata type ext4 (rw)
或
[root@Node1 ~]# mount -t ext4 /dev/mapper/myvg-mylv /mydata/ [root@Node1 ~]# mount | grep "mylv\>" /dev/mapper/myvg-mylv on /mydata type ext4 (rw)
2、假如,逻辑卷 mylv 没有多少剩余空间了,怎么扩展它的大小呢?
扩展条件:
卷组myvg必需有足够大的剩余空间提供给扩展使用 不然的话就要扩展卷组的大小了。 作逻辑卷扩展时,要先扩展物理边界,再扩展逻辑边界。
扩展逻辑卷的步骤以下图如示:
一、 先查看卷组myvg的使用状况?
root@Node1 ~]# vgdisplay myvg | grep "VG[[:space:]]Size" VG Size 2.00 GiB [root@Node1 ~]# lvdisplay /dev/myvg/mylv | grep"LV[[:space:]]Size" LV Size 2.00 GiB
二、 假如,咱们要把逻辑卷mylv扩展为 4GB 大小。
从上面能够看得出卷组myvg已经使用完了,咱们必需先扩展卷组myvg,再扩展逻辑卷 mylv.
先往该卷组中加入PV
[root@Node1 ~]# pvcreate /dev/sdb4 Physical volume "/dev/sdb4" successfully created
把刚建立的pv加入到卷组myvg中来:
未加入前,myvg的大小
[root@Node1 ~]# vgdisplay myvg | grep "VG[[:space:]]Size" VG Size 2.00 GiB
把/dev/sdb4加入卷组myvg
[root@Node1 ~]# vgextend myvg /dev/sdb4 Volume group"myvg" successfully extended
加入用户的PV后,卷组的大小
[root@Node1 ~]# vgdisplay myvg | grep "VG[[:space:]]Size" VGSize 18.47 GiB
三、 卷组myvg已经有足够的剩余空间了。接下来进行逻辑卷的扩展
(1)、首先扩展逻辑卷 mylv的物理边界
[root@Node1 ~]# lvextend -L 4G/dev/myvg/mylv Extending logical volume mylv to 4.00 GiB Logical volume mylv successfully resized [root@Node1 ~]# lvdisplay/dev/myvg/mylv | grep"LV[[:space:]]Size" LVSize 4.00 GiB
可是查看实际可用的磁盘空间仍是2GB.
[root@Node1 ~]# df -h | grep -A 1"mylv\>" /dev/mapper/myvg-mylv 2.0G 67M 1.9G 4% /mydata
(2)、物理边界扩展成功之后才能够扩展逻辑卷mylv的逻辑边界
[root@Node1 ~]# resize2fs -p /dev/myvg/mylv resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/myvg/mylv is mounted on/mydata; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of/dev/myvg/mylv to 1048576 (4k) blocks. The filesystem on /dev/myvg/mylv is now1048576 blocks long. [root@Node1 ~]# echo $? 0
扩展逻辑边界之后,看看是否扩展成功
[root@Node1 ~]# df -h | grep -A 1"mylv\>" /dev/mapper/myvg-mylv 4.0G 771M 3.0G 21% /mydata
3、使用逻辑卷的“快照”功能进行在线备份
其实,建立快照的过程就是备份数据的过程。
假如,咱们建立快照耗时 10S, 而咱们的应用每秒钟会增长100M的数据量。
那么,咱们的快照卷大小至少须要:原卷的数据大小 + 10*100M
建立快照卷的条件:
快照卷必须要和原卷在同一个卷组当中。 卷组有足够的剩余空间使用 快照卷是只读的,为了保证数据的一致性,在建立快照卷时指定是只读的 挂载快照卷以只读方式挂载
建立快照卷的方法:
lvcreate -L 快照卷的大小 -s -p r -n 快照卷名称 对哪一个逻辑卷进行快照 -p 指定权限。读写 -n 快照卷的名字 -s 表示建立的是快照卷
[root@Node1 ~]# mount -o remount,ro /dev/myvg/mylv /mydata/ \ lvcreate -L 4G -n back-snap -p r -s/dev/myvg/mylv \ mount -oremount,rw /dev/myvg/mylv /mydata Logical volume"back-snap" created
说明:
建立快照卷要先对原卷施加读锁,而后再建立快照卷。等到快照卷建立完成之后再对原卷施加读写锁。建立快照卷的时间很短,对在线业务几乎没有影响。咱们称这种备份数据的方法为:温备。
挂载并查看,快照卷的数据大小和原卷是否是同样?
[root@Node1 ~]# mount -r/dev/mapper/myvg-back--snap /backup/ [root@Node1 ~]# df -h | grep -A 1"myvg" /dev/mapper/myvg-mylv 4.0G 1.8G 2.1G 47% /mydata /dev/mapper/myvg-back--snap 4.0G 1.8G 2.1G 47% /backup