一、传统的磁盘管理
其实在Linux操作系统中,我们的磁 盘管理机制和windows上的差不多,绝大多数都是使用MBR(Master Boot Recorder)都是通过先对一个硬盘进行分区,然后再将该分区进行文件系统的格式化,在Linux系统中如果要使用该分区就将其挂载上去即 可,windows的话其实底层也就是自动将所有的分区挂载好,然后我们就可以对该分区进行使用了。
但是这种传统的磁盘管理经常会带来很多 的问题,比如说当我们使用的一个分区,其空间大小已经不再够用了,这个时候我们没有办法通过拉伸分区来进行分区扩充,当然目前也有其他第三方的磁盘管理软 件可以进行磁盘的分区空间划分,但是这样会给我们的文件系统造成很大的伤害,有时会导致文件系统崩溃等问题。对于传统的磁盘管理如果说我们碰到当分区大小 不足的时候,我们只能通过增加新的硬盘,然后在新的硬盘上创建分区,对分区进行格式化以后,然后将之前分区的所有东西都拷贝到新的分区里面才行。但是新增加的硬盘是作为独立的文件系统存在的,原有的文件系统并没有得到任何的扩充,上层应用只能访问到一个文件系统。这 样的方式对个人的电脑来说可能还能接受,但是如果对于生产环境下的服务器来说,这是不可接受的。因为如果要把一个分区的内容都拷贝到另一个分区上去,势必 要首先卸载掉之前的那个分区,然后对整个分区进行拷贝,如果服务器上运行着一个重要的服务,比如说WWW或者FTP,其要求是 7*24 小时运行正常的,那么卸载掉分区这是不可想象的,同时如果该分区保存的内容非常非常的多,那么在对分区进行转移时时间可能会耗费很久,所以,这个时候我们 就会受到传统磁盘管理的限制,因为其不能够进行动态的磁盘管理。因此,为了解决这个问题,LVM技术就诞生了!!!
二、LVM的磁盘管理
正是因为传统的磁盘管理不能对我们的磁盘空间进行动态的管理,因此就诞生出了LVM这个技术,那么LVM到底是什么呢?它又是怎么对磁盘进行管理的呢?
LVM(Logical volume Manager)是逻辑卷管理的简称。它是Linux环境下对磁盘分区进行管理的一种机制。现在不仅仅是Linux系统上可以使用LVM这种磁盘管理机制,对于其它的类UNIX操作系统,以及windows操作系统都有类似与LVM这种磁盘管理软件。
LVM的工作原理其实很简单,它就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对 底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做 逻辑卷的东西来对其进行底层的磁盘管理操作。比如说我增加一个物理硬盘,这个时候上层的服务是感觉不到的,因为呈现给上次服务的是以逻辑卷的方式。
LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。我们如果新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性!!!
三、LVM的原理
要想理解好LVM的原理,我们必须首先要掌握4个基本的逻辑卷概念。
①PE (Physical Extend) 物理拓展
②PV (Physical Volume) 物理卷
③VG (Volume Group) 卷组
④LV (Logical Volume) 逻辑卷
我们知道在使用LVM对磁盘进行动态管理以后,我们是以逻辑卷的方式呈现给上层的服务的。所以我们所有的操作目的,其实就是去创建一个LV(Logical Volume),逻辑卷就是用来取代我们之前的分区,我们通过对逻辑卷进行格式化,然后进行挂载操作就可以使用了。那么LVM的工作原理是什么呢?所谓无图无真相,咱们下面通过图来对逻辑卷的原理进行解释!!
1.将我们的物理硬盘格式化成PV(Physical Volume)
我们看到,这里有两块硬盘,一块是sda,另一块是sdb,在LVM磁盘管理里,我首先要将这两块硬盘格式化为我们的PV(Physical Volume),也就是我们的物理卷,其实格式化物理卷的过程中LVM是将底层的硬盘划分为了一个一个的PE(Physical Extend),我们的LVM磁盘管理中PE的默认大小是4M大小,其实PE就是我们逻辑卷管理的最基本单位。比如说我有一个400M的硬盘,那么在将其格式化成PV的时候,其实际就是将这块物理硬盘划分成了100个的PE,因为PE默认的大小就是4M。这个就是我们的第一步操作。
2.创建一个VG(Volume Group)
在将硬盘格式化成PV以后,我们第二步操作就是创建一个卷组,也就是VG(Volume Group),卷组在这里我们可以将其抽象化成一个空间池,VG的作用就是用来装PE的,我们可以把一个或者多个PV加到VG当中,因为在第一步操作时就 已经将该硬盘划分成了多个PE,所以将多个PV加到VG里面后,VG里面就存放了许许多多来自不同PV中的PE,我们通过上面的图片就可以看到,我们格式 化了两块硬盘,每个硬盘分别格式化成了3个PE,然后将两块硬盘的PE都加到了我们的VG当中,那么我们的VG当中就包含了6个PE,这6个PE就是两个 硬盘的PE之和。通常创建一个卷组的时候我们会为其取一个名字,也就是该VG的名字。
3.基于VG创建我们最后要使用的LV(Logical Volume)
【注意】PV以及VG创建好以后我们是不能够直接使用的,因为PV、VG是我们逻辑卷底层的东西,我们其实最后使用的是在VG基础上创建的LV(Logical Volume),所以第三步操作就是基于VG来创建我们最终要使用的LV。
当我们创建好我们的VG以后,这个时候我们创建LV其实就是从VG中拿出我们指定数量的PE,还是拿上图来说,我们看到我们此时的VG里面已经拥有了6个PE,这时候我们创建了我们的第一个逻辑卷,它的大小是4个PE的大小,也就是16M(因为一个PE的默认大小是4M),而这4个PE有三个是来自于第一块硬盘,而另外一个PE则是来自第二块硬盘。当我们创建第二个逻辑卷时,它的大小就最多只有两个PE的大小了,因为其中的4个PE已经分配给了我们的第一个逻辑卷。
所以创建逻辑卷其实就是我们从VG中拿出我们指定数量的PE,VG中的PE可以来自不同的PV,我们可以创建的逻辑卷的大小取决于VG当中PE存在的数量,并且我们创建的逻辑卷其大小一定是PE的整数倍(即逻辑卷的大小一定要是4M的整数倍)。
4.将我们创建好的LV进行文件系统的格式化,然后挂载使用
在创建好LV以后,这个时候我们就能够对其进行文件系统的格式化了,我们最终使用的就是我们刚创建好的LV,其就相当于传统的文件管理的分区,我们首先要对其进行文件系统的格式化操作,然后通过mount命令对其进行挂载,这个时候我们就能够像使用平常的分区一样来使用我们的逻辑卷了。
我们在创建好LV以后,我们会在/dev 目录下看到我们的LV信息,例如 /dev/vgname/lvname, 我们每创建一个VG,其会在/dev目录下创建一个以该VG名字命名的文件夹,在该VG的基础上创建好LV以后,我们会在这个VG目录下多出一个以LV名字命名的逻辑卷。
下面我们来对整个LVM的工作原理进行一个总结:
(1)物理磁盘被格式化为PV,空间被划分为一个个的PE
(2)不同的PV加入到同一个VG中,不同PV的PE全部进入到了VG的PE池内
(3)LV基于PE创建,大小为PE的整数倍,组成LV的PE可能来自不同的物理磁盘
(4)LV现在就直接可以格式化后挂载使用了
(5)LV的扩充缩减实际上就是增加或减少组成该LV的PE数量,其过程不会丢失原始数据
我们看到,我们这里如果要对LV进行扩充,直接加进来一块sdc硬盘,然后将其格式化成PE,然后将该PV加入到了VG当中,这个时候我们就可以通过增加LV中PE的数量来动态的对LV进行扩充了,只要我们的LV的大小不要超过我们VG空余空间的大小就行了!!
Linux磁盘管理:LVM逻辑卷的创建及使用
一、创建LVM逻辑卷
我们通过图文并茂的方式来看看如何创建我们的LVM,在上一篇随笔中,我们已经熟悉了LVM的工作原理,首先是要将我们的物理硬盘格式化成PV,然后将多个PV加入到创建好的VG中,最后通过VG创建我们的LV。所以我们第一步就是将我们的物理硬盘格式化成PV(物理卷)
1.将物理硬盘格式化成PV(物理卷) 使用的是 pvcreate 命令
这里我已经事先虚拟化了3快物理硬盘,每块硬盘的大小为1G,通过 fdisk -l 命令可以查看
这里我们根据上面图所示,我们先将 /dev/sdb、 /dev/sdc 两块硬盘格式化成PV
[root@localhost ~]# pvcreate /dev/sdb /dev/sdc
Physical volume “/dev/sdb” successfully created
Physical volume “/dev/sdc” successfully created
创建完PV以后,我们可以使用pvdisplay(显示详细信息)、pvs命令来查看当前pv的信息
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 VolGroup lvm2 a– 9.51g 0
/dev/sdb lvm2 —? 1.00g 1.00g
/dev/sdc lvm2 —? 1.00g 1.00g
通过这两个命令我们可以看到我们已经创建好的PV的信息,两个PV都是1G,目前还没有使用,PFree都是1G.
2.创建卷组(VG),并将PV加入到卷组中 通过 vgcreate 命令
在创建完PV以后,这时候我们需要创建一个VG,然后将我们的PV都加入到这个卷组当中,在创建卷组时要给该卷组起一个名字
[root@localhost ~]# vgcreate teddy /dev/sdb /dev/sdc
Volume group “teddy” successfully created
同样,在创建好VG以后,我们也可以使用 vgdisplay 或者 vgs 命来来查看VG的信息
[codesyntax lang=”text”]
[root@localhost ~]# vgdisplay --- Volume group --- VG Name teddy #卷组名teddy System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 1 VG Accessread/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV2 #当前这里有两个PV,分别是我们的 /dev/sdb 和 /dev/sdc Act PV 2 VG Size 1.99 GiB # 当前VG的大小 PE Size 4.00 MiB #通过这个我们也可以看到我们LVM默认的PE大小就是4M Total PE 510 #因为VG里面存放的就是各个PV中的PE,所以PE的数量就是VG大小除以默认PE的大小 Alloc PE / Size 0 / 0?? Free? PE / Size 510 / 1.99 GiB VG UUID BL2xlv-2no3-V7qQ-pbpv-zObJ-tkpi-YIhw2g --- Volume group --- VG Name VolGroup System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 ? Cur LV 2 ? Open LV 2 ? Max PV 0 ? Cur PV? 1 ? Act PV1 ? VG Size 9.51 GiB ? PE Size 4.00 MiB ? Total PE 2434 ? Alloc PE / Size 2434 / 9.51 GiB ? Free? PE / Size 0 / 0 ? VG UUID8w6L55-WYYP-hCz2-fYC0-u0KQ-hCsM-vkdFZZ [root@localhost ~]# vgs VG #PV #LV #SN Attr?? VSize VFree VolGroup1 2 0 wz--n- 9.51g??? 0 teddy 2?? 0 0 wz--n- 1.99g 1.99g
[/codesyntax]
3.基于卷组(VG)创建逻辑卷(LV) 通过 lvcreate 命令
因为创建好的PV、VG都是底层的东西,我们上层使用的是逻辑卷,所以我们要基于VG创建我们的逻辑卷才行
[root@localhost ~]# lvcreate -n teddy_lv -L 500M teddy
Logical volume “teddy_lv” created.
通过 lvcreate 命令基于VG创建好我们的逻辑卷,名字为teddy_lv,大小为500M,同样我们可以使用 lvdisplay 或者 lvs 命令来查看创建好的逻辑卷的信息
说明:
[codesyntax lang=”text”]
[root@localhost ~]# lvdisplay --- Logical volume --- LV Path/dev/teddy/teddy_lv #逻辑卷的路径 LV Nameteddy_lv #逻辑卷的名称 VG Nameteddy #逻辑卷所属的卷组的名称 LV UUIDyQFerC-fGYf-G7tT-3bA9-B2Sy-LBp4-yPIJWH LV Write Access read/write LV Creation host, time localhost.localdomain, 2015-08-21 13:47:34 +0800 LV Status available # open 0 LV Size 500.00 MiB#逻辑卷的大小 Current LE 125 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:2 [root@localhost ~]# lvs LV VG Attr?????? LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv_root VolGroup -wi-ao---- 8.51g lv_swap VolGroup -wi-ao----?? 1.00g teddy_lv teddy -wi-a----- 500.00m
[/codesyntax]
这样子我们的逻辑卷也就已经创建好了,我们这个时候再通过 vgs 还有 pvs 命令查看一下我们的PV与VG的信息
[codesyntax lang=”text”]
[root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree VolGroup 1?? 2?? 0 wz--n- 9.51g 0 teddy 2 1 0 wz--n- 1.99g 1.50g # 我们看到LV的数量此时变成了1,因为我们刚创建好了一个LV,LVFree还有1.5G [root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda2 VolGroup lvm2 a--9.51g 0 /dev/sdb? teddy lvm2 a--? 1020.00m 520.00m #刚创建好的LV用的是 /dev/sdb这块硬盘的,所以这块硬盘的PFree还剩下520M /dev/sdc?? teddy lvm2 a--? 1020.00m 1020.00m
[/codesyntax]
二、格式化并使用我们的逻辑卷
我们已经创建好了我们的PV、VG以及LV,这时候我们如果要使用逻辑卷,就必须将其格式化成我们需要用的文件系统,并将其挂载起来,然后就可以像使用分区一样去使用逻辑卷了
mkfs.ext4 /dev/teddy/teddy_lv
格式化我们的逻辑卷以后,就可以使用 mount 命令将其进行挂载,我们将其挂载到 /a 目录下
[codesyntax lang=”text”]
[root@localhost ~]# mount /dev/teddy/teddy_lv /a [root@localhost ~]# mount /dev/mapper/VolGroup-lv_root on / type ext4 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0") /dev/sda1 on /boot type ext4 (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) /dev/mapper/teddy-teddy_lv on /a type ext4 (rw) [root@localhost ~]# df -h Filesystem??????????? Size? Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 8.3G? 4.5G? 3.4G? 57% / tmpfs 281M 0? 281M 0% /dev/shm /dev/sda1 477M 33M 419M 8% /boot /dev/mapper/teddy-teddy_lv 477M? 2.3M? 449M 1% /a
[/codesyntax]
三、删除逻辑卷
我们在创建好逻辑卷后可以通过创建文件系统,挂载逻辑卷来使用它,如果说我们不想用了也可以将其删除掉。
【注意:】对于创建物理卷、创建卷组以及创建逻辑卷我们是有严格顺序的,同样,对于删除逻辑卷、删除卷组以及删除物理卷也是有严格顺序要求的
①首先将正在使用的逻辑卷卸载掉 通过 umount 命令
②将逻辑卷先删除 通过 lvremove 命令
③删除卷组 通过 vgremove 命令
④最后再来删除我们的物理卷 通过 pvremove 命令
[codesyntax lang=”text” lines=”normal”]
[root@localhost ~]# umount /a [root@localhost ~]# df -h Filesystem??? ????????Size? Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root ????????????????????? 8.3G? 4.5G? 3.4G? 57% / tmpfs???????????????? 281M???? 0? 281M?? 0% /dev/shm /dev/sda1???????????? 477M?? 33M? 419M?? 8% /boot [root@localhost ~]# lvremove /dev/teddy/teddy_lv Do you really want to remove active logical volume teddy_lv? [y/n]: y ? Logical volume "teddy_lv" successfully removed [root@localhost ~]# vgremove teddy ? Volume group "teddy" successfully removed [root@localhost ~]# pvremove /dev/s [root@localhost ~]# pvremove /dev/sdb ? Labels on physical volume "/dev/sdb" successfully wiped
[/codesyntax]
此时我们的刚创建的逻辑卷 teddy_lv,卷组teddy以及物理卷 /dev/sdb 已经从我们当前操作系统上删除掉了,通过 lvs、vgs、pvs命令可以查看一下
一、拉伸一个逻辑卷
我们知道相比于传统磁盘管理方式的各种 问题,使用LVM逻辑卷来管理我们的磁盘,我们可以对其进行动态的管理。在传统的磁盘管理方式中,我们如果出现分区大小不足的情况下,我们此时只能通过加 入一块物理硬盘,然后对其进行分区,因为加入的硬盘作为独立的文件系统存在,所以对原有分区并没有影响,如果此时我们需要扩大分区,就只能先将之前的分区 先卸载掉,然后将所有的信息转移到新的分区下,最后再将新的分区挂载上去,如果是在生产环境下,这样是不可想象的,正因为如此,我们才出现了LVM的磁盘 管理方式,可以动态的对我们的磁盘进行管理。
我们首先来看下动态拉伸一个逻辑卷的示意图:
我们从上图可以看到,我们在对逻辑卷进行拉伸时,其实际就是向逻辑卷中增加PE的数量,而PE的数量是由VG中剩余PE的数量所决定的。
【注意:】逻辑卷的拉伸操作可以在线进行,不需要卸载掉我们的逻辑卷
这样的好处就是当我们的逻辑卷的大小不 够用时,我们不需要对其进行卸载,就可以动态的增加我们的逻辑卷的大小,并不会对我们的系统产生任何影响。例如如果我们的服务器上运行着一个重要的服务或 者数据库,并要求我们7*24小时不间断保持在线,那么这样的动态增加逻辑卷的大小就非常的有必要了。
接下来我们来看看拉伸逻辑卷的步骤:
因为我们的逻辑卷的拉伸操作是可以在线进行的,所以这里我们先将逻辑卷挂载上,并在使用情况下动态的拉伸我们的逻辑卷
[codesyntax lang=”text”]
[root@localhost /]# mount /dev/teddy/teddy-lv01 /a [root@localhost /]# cd /a [root@localhost a]# echo '1234567' >>test.txt [root@localhost a]# cat test.txt 1234567 [root@localhost a]# ll total 14 drwx------. 2 root root 12288 Aug 21 14:32 lost+found -rw-r--r--. 1 root root???? 8 Aug 21 14:34 test.txt
[/codesyntax]
- 查看当前VG的信息,保证VG中有足够的空闲空间 通过 vgdisplay 或者 vgs 命令
[codesyntax lang=”text”]
[root@localhost a]# vgdisplay ? --- Volume group --- ? VG Name?????????????? teddy ? System ID???????????? ? Format??????????????? lvm2 ? Metadata Areas??????? 2 ? Metadata Sequence No? 2 ? VG Access???????????? read/write ? VG Status???????????? resizable ? MAX LV??????????????? 0 ? Cur LV??????????????? 1 ? Open LV?????????????? 1 ? Max PV??????????????? 0 ? Cur PV??????????????? 2 ? Act PV??????????????? 2 ? VG Size?????????????? 1.99 GiB ? PE Size?????????????? 4.00 MiB ? Total PE????????????? 510 ? Alloc PE / Size?????? 125 / 500.00 MiB ? Free? PE / Size?????? 385 / 1.50 GiB???? #当前剩余的pe还有385个,空间还有1.5G ? VG UUID?????????????? tvb26i-8PCC-Y3KY-Qp16-rFZU-mKEO-DsyIgh
[/codesyntax]
在我们的VG中还有足够的空闲空间时,我们就可以动态的对逻辑卷进行拉伸操作了
②扩充逻辑卷 通过 lvextend 命令
比如我这里要对 mylv 逻辑卷扩充1.5G的大小,此时我们就可以使用lvextend -L +1.5G /dev/teddy/teddy-lv01命令来执行操作
[codesyntax lang=”text”]
[root@localhost a]# lvs ? LV???????? VG?????? Attr?????? LSize?? Pool Origin Data%? Meta%? Move Log Cpy%Sync Convert ? lv_root??? VolGroup -wi-ao----?? 8.51g??????????????????????????????????????????????????? ? lv_swap??? VolGroup -wi-ao----?? 1.00g????????? ?????????????????????????????????????????? ? teddy-lv01 teddy??? -wi-ao---- 500.00m??????????????????????????????????????????????????? [root@localhost a]# lvextend -L +1.5G /dev/teddy/teddy-lv01 ? Size of logical volume teddy/teddy-lv01 changed from 500.00 MiB (125 extents) to 1.99 GiB (509 extents). ? Logical volume teddy-lv01 successfully resized [root@localhost a]# lvs ? LV VG Attr?????? LSize Pool Origin Data%? Meta%? Move Log Cpy%Sync Convert ? lv_root??? VolGroup -wi-ao---- 8.51g ? lv_swap??? VolGroup -wi-ao---- 1.00g ? teddy-lv01 teddy??? -wi-ao---- 1.99g??
[/codesyntax]
③查看完扩充后LV大小 扩充完后我们可以使用 lvdisplay 或者 lvs 命令来查看一下当前lv的信息
[root@localhost a]# lvdisplay
— Logical volume —
LV Path /dev/teddy/teddy-lv01
LV Nameteddy-lv01
VG Name? teddy
LV UUIDVtMixc-yyoN-osxm-bmnH-0aqm-mr2v-cDdvnM
LV Write Accessread/write
LV Creation host, time localhost.localdomain, 2015-08-21 14:31:59 +0800
LV Status????????????? available
# open???????????????? 1
LV Size??????????????? 1.99 GiB
Current LE???? ????????509
Segments?????????????? 2
Allocation???????????? inherit
Read ahead sectors???? auto
– currently set to???? 256
Block device?????????? 253:2
这个时候我们发现拉伸以后我们的逻辑卷大小变成了2G了,此时我们正在使用我的逻辑卷,并没有卸载掉该逻辑卷,同时我们查看逻辑卷里面的内容,发现其里面的文件还在,并且没有受到一点损害
[root@localhost a]# ll
total 14
drwx——. 2 root root 12288 Aug 21 14:32 lost+found
-rw-r–r–. 1 root root???? 8 Aug 21 14:34 test.txt
④更新文件系统 通过 resize2fs 命令
我们在对逻辑卷进行拉伸以后,我们通过 df -h 命令可以查看一下当前的文件系统信息
[root@localhost a]# df -h
Filesystem??????????? Size? Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
8.3G? 4.5G? 3.4G? 57% /
tmpfs???????????????? 281M???? 0? 281M?? 0% /dev/shm
/dev/sda1???????????? 477M?? 33M? 419M?? 8% /boot
/dev/mapper/teddy-teddy–lv01
477M? 2.3M? 449M?? 1% /a
我们发现我们当前的挂载的逻辑卷的文件系统大 小还是2G,并没有变成3G,其原因就是我们的文件系统是在创建完LV以后就马上格式化的,此后我们对逻辑卷进行拉伸以后,其并不会改变当前的文件系统, 所以我们这个时候必须更新我们的文件系统,通过使用 resize2fs 命令
[root@localhost a]# resize2fs /dev/teddy/teddy-lv01
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/teddy/teddy-lv01 is mounted on /a; on-line resizing required
old desc_blocks = 2, new_desc_blocks = 8
Performing an on-line resize of /dev/teddy/teddy-lv01 to 2084864 (1k) blocks.
The filesystem on /dev/teddy/teddy-lv01 is now 2084864 blocks long.
[root@localhost a]# df -h
Filesystem??????????? Size? Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
8.3G? 4.5G? 3.4G? 57% /
tmpfs???????????????? 281M???? 0? 281M?? 0% /dev/shm
/dev/sda1???????????? 477M?? 33M? 419M?? 8% /boot
/dev/mapper/teddy-teddy–lv01
2.0G? 3.0M? 1.9G?? 1% /a
在实际的生产环境中,要实现开机自动挂载lvm的文件系统的分区
[codesyntax lang=”text”]
[root@localhost ~]# tail -1 /etc/rc.local /bin/mount /dev/teddy/teddy-lv01 /a
[/codesyntax]
此时我们发现,我们这时的文件系统也已经更新了,大小变成了2G.
我们通过上面的步骤可以发现,拉伸一个逻辑卷的其实是非常简单的,首先就是保持VG中有足够的空闲空间,其次就是对我们的逻辑卷进行动态的拉伸,最 后在拉伸完逻辑卷以后我们还必须要更新我们的文件系统。同时我们可以发现,在对逻辑卷进行拉伸时我们并不需要先卸载掉逻辑卷,可以在线进行,并且逻辑卷里 面的文件内容都不会发生变化。
二、拉伸一个卷组
上面介绍了如何拉伸一个逻辑卷,如果说此时我们的VG中PE的数量已经不足了,此时我们如果需要拉伸我们的逻辑卷,发现卷组中的空间已经不够用了, 这个时候我们就必须对我们的卷组进行拉伸,使得卷组中有足够的空闲空间,最后再来拉伸我们的逻辑卷。我们知道卷组其实就是将多块PV加入到VG当中,所以 卷组的拉伸也非常的简单,我们只需要增加一块物理硬盘,将其格式化成PV,然后再将这个PV加入到该卷组中即可。
这里我们首先模拟一下将VG中的剩余空间全部拉伸到我们的逻辑卷当中,然后我们通过增加一块物理硬盘,来对我们的卷组进行拉伸操作
[root@localhost a]# vgs
VG?????? #PV #LV #SN Attr?? VSize VFree
VolGroup?? 1?? 2?? 0 wz–n- 9.51g??? 0
teddy????? 2?? 1?? 0 wz–n- 1.99g 4.00m?????????? #只剩4M了
这个时候我们如果还要对逻辑卷进行扩充,但是此时我们的VG中空闲空间的大小已经不太够用了,我们这个时候就需要对我们的卷组进行动态的拉伸了
- 将要添加到VG的硬盘格式化成PV 通过 pvcreate 命令
[root@localhost a]# pvcreate /dev/sdd
Physical volume “/dev/sdd” successfully created
[root@localhost a]# pvs
PV???????? VG?????? Fmt? Attr PSize??? PFree
/dev/sda2? VolGroup lvm2 a–???? 9.51g??? 0
/dev/sdb?? teddy??? lvm2 a–? 1020.00m??? 0
/dev/sdc?? teddy??? lvm2 a–? 1020.00m 4.00m
? /dev/sddlvm2 —1.00g 1.00g #此时我们新加入的一块硬盘还没有添加到VG当中
②将新的PV添加到指定的VG当中 通过 vgextend 命令,即将/dev/sdd加入到teddy这个vg中
[codesyntax lang=”text”]
[root@localhost a]# pvs ? PV???????? VG?????? Fmt? Attr PSize??? PFree ? /dev/sda2? VolGroup lvm2 a--???? 9.51g??? 0 ? /dev/sdb?? teddy??? lvm2 a--? 1020.00m??? 0 ? /dev/sdc?? teddy??? lvm2 a--? 1020.00m 4.00m ? /dev/sdd??????????? lvm2 ---???? 1.00g 1.00g [root@localhost a]# vgextend teddy /dev/sdd ? Volume group "teddy" successfully extended [root@localhost a]# pvs ? PV???????? VG?????? Fmt? Attr PSize??? PFree?? ? /dev/sda2? VolGroup lvm2 a--???? 9.51g?????? 0 ? /dev/sdb?? teddy??? lvm2 a--? 1020.00m?????? 0 ? /dev/sdc?? teddy??? lvm2 a--? 1020.00m??? 4.00m ? /dev/sdd?? teddy? ??lvm2 a--? 1020.00m 1020.00m
[/codesyntax]
③查看当前VG的信息 通过 vgdisplay 或者 vgs 命令
[codesyntax lang=”text”]
[root@localhost a]# vgs ? VG?????? #PV #LV #SN Attr?? VSize VFree ? VolGroup?? 1?? 2?? 0 wz--n- 9.51g??? 0 ? teddy???? ?3?? 1?? 0 wz--n- 2.99g 1.00g [root@localhost a]# vgdisplay ? --- Volume group --- ? VG Name?????????????? teddy ? System ID???????????? ? Format??????????????? lvm2 ? Metadata Areas??????? 3 ? Metadata Sequence No? 4 ? VG Access???????????? read/write ? VG Status???????????? resizable ? MAX LV??????????????? 0 ? Cur LV??????????????? 1 ? Open LV?????????????? 1 ? Max PV??????????????? 0 ? Cur PV??????????????? 3 ? Act PV??????????????? 3 ? VG Size?????????????? 2.99 GiB ? PE Size?????????????? 4.00 MiB ? Total PE????????????? 765 ? Alloc PE / Size?????? 509 / 1.99 GiB ? Free? PE / Size?????? 256 / 1.00 GiB?? #此时我们发现我们VG的大小以及得到拉伸了
[/codesyntax]
这样我们就可以通过扩充逻辑卷,来增加系统容量的大小了
三、缩小一个逻辑卷
上面讲的都是如何对逻辑卷进行拉伸以及对卷组进行拉伸,其实逻辑卷还可以动态的对其进行缩小,虽然在实际情况中,我们几乎不会遇到缩小一个逻辑卷的这种情况。所以在这里就不说了。