LVM逻辑卷基本概念及LVM的工作原理及实践

一、传统的磁盘管理

其实在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的工作原理是什么呢?所谓无图无真相,咱们下面通过图来对逻辑卷的原理进行解释!!

QQ20151007175043

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中,不同PVPE全部进入到了VGPE池内

(3)LV基于PE创建,大小为PE的整数倍,组成LVPE可能来自不同的物理磁盘

(4)LV现在就直接可以格式化后挂载使用了

(5)LV的扩充缩减实际上就是增加或减少组成该LVPE数量,其过程不会丢失原始数据

QQ20151007175254

我们看到,我们这里如果要对LV进行扩充,直接加进来一块sdc硬盘,然后将其格式化成PE,然后将该PV加入到了VG当中,这个时候我们就可以通过增加LV中PE的数量来动态的对LV进行扩充了,只要我们的LV的大小不要超过我们VG空余空间的大小就行了!!

Linux磁盘管理:LVM逻辑卷的创建及使用

一、创建LVM逻辑卷

QQ20151007175454

我们通过图文并茂的方式来看看如何创建我们的LVM,在上一篇随笔中,我们已经熟悉了LVM的工作原理,首先是要将我们的物理硬盘格式化成PV,然后将多个PV加入到创建好的VG中,最后通过VG创建我们的LV。所以我们第一步就是将我们的物理硬盘格式化成PV(物理卷)

1.将物理硬盘格式化成PV(物理卷)  使用的是 pvcreate 命令

这里我已经事先虚拟化了3快物理硬盘,每块硬盘的大小为1G,通过 fdisk -l 命令可以查看

QQ20151007175617

这里我们根据上面图所示,我们先将 /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的信息

QQ20151007175722

[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 命令来查看创建好的逻辑卷的信息

QQ20151007180430

说明:

 

[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

QQ20151007181038

格式化我们的逻辑卷以后,就可以使用 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命令可以查看一下

QQ20151007181334

 

一、拉伸一个逻辑卷

我们知道相比于传统磁盘管理方式的各种 问题,使用LVM逻辑卷来管理我们的磁盘,我们可以对其进行动态的管理。在传统的磁盘管理方式中,我们如果出现分区大小不足的情况下,我们此时只能通过加 入一块物理硬盘,然后对其进行分区,因为加入的硬盘作为独立的文件系统存在,所以对原有分区并没有影响,如果此时我们需要扩大分区,就只能先将之前的分区 先卸载掉,然后将所有的信息转移到新的分区下,最后再将新的分区挂载上去,如果是在生产环境下,这样是不可想象的,正因为如此,我们才出现了LVM的磁盘 管理方式,可以动态的对我们的磁盘进行管理。

我们首先来看下动态拉伸一个逻辑卷的示意图:

QQ20151007181543

我们从上图可以看到,我们在对逻辑卷进行拉伸时,其实际就是向逻辑卷中增加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]

 

 

这样我们就可以通过扩充逻辑卷,来增加系统容量的大小了

三、缩小一个逻辑卷

上面讲的都是如何对逻辑卷进行拉伸以及对卷组进行拉伸,其实逻辑卷还可以动态的对其进行缩小,虽然在实际情况中,我们几乎不会遇到缩小一个逻辑卷的这种情况。所以在这里就不说了。

LVM逻辑卷基本概念及LVM的工作原理及实践
Scroll to top