对于一块硬盘有三个分区100M,100M,200M,如果有一天100M装不下了怎么办?能不能把新添加硬盘的一些空间划分到这100M的空间里呢?

逻辑卷就可以实现,这样就表示我们可以动态的增大或减少卷(分区)的大小了。

LVM(logical volume manager),是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区的灵活性。lvm是在磁盘分区和文件系统之间添加的一个逻辑层,他提供了一个抽象的盘卷,之后在这个盘卷上创建文件系统。

相关知识:

1、物理存储介质:指硬盘(/dev/sda1, /dev/sdb ...)

2、物理卷(physical  volume):指硬盘分区,是LVM的基本存储逻辑块,包含相与LVM相关的参数。

3、卷组(volume group):类似于非LVM系统中的物理硬盘,由物理卷组成。可以在卷组上创建一个或多个LVM分区(逻辑卷),LVM卷组由一个或多个物理卷组成。

4、逻辑卷(logical volume):类似于非LVM系统中的硬盘分区,在逻辑卷上可以建立文件系统。

5、PE:物理区域块,是物理卷中最小的可分配的存储单元。

6、LE:逻辑区域块,是逻辑卷中可用于分配的最小储存单元。

建立逻辑卷的过程:物理卷-->卷组-->逻辑卷

1、创建LVM分区,可以用系统带的fdisk来创建,创建方法与正常分区一样,区别就是把分区类型改成LINUX LVM,即:8E

2、创建物理卷

用pvcreate来创建,把希望添加到卷组的分区或磁盘创建成物理卷,供LVM管理。

如:pvcreate  /dev/sdb1 #把这个分区创建成物理卷

3、创建卷组

用vgcreate来创建,vgcreate 卷组名  物理卷 ...

如:vgcreate vg0  /dev/sdb1

在创建卷组时,系统会使用大小为4MB的块作为PE的大小。块的大小决定了单个逻辑卷最大容量,PE的大小范围是8KB-512MB,并且总是2的倍数。

逻辑卷的大小由PE的大小为单位进行扩充或缩减,如果想使单个逻辑卷拥有更大的空间,则需要手动指定,如:

vgcreate -s 8M vg0  /dev/sdb1

4、激活卷组

vgchange -ay 卷组名

-ay表示active yes,即激活。如果-an则表示关闭激活。

5、创建逻辑卷

lvcreate -L 逻辑卷的大小  -n 逻辑卷的名称   卷组名

表示在某个卷组里创建一个逻辑卷,大小由-L指定,注意大小应该是PE的倍数,也可以用-l 块的个数来表示大小。

如:lvcreate -n boot -L 256M

创建完逻辑卷之后,需要格式化才可以使用。mkfs.ext3 /dev/vg0/boot

6、添加新的物理卷到卷组中。

vgextend 卷组名  物理卷

如:vgextend vg0 /dev/sdb2

7、扩展逻辑卷的容量

lvextend -l +PE块的个数  逻辑卷名。

-l 后面跟上块数,可以用vgdisplay查看卷组还有多少块空间,之后分配到指定的逻辑卷中.当然也可以指定-L +容量大小的方式添加空间。

如:lvextend -l +5 /dev/vg0/boot #由于PE大小为8M,所以添加了40M的空间

8、减少逻辑卷的容量

lvreduce -L -容量  逻辑卷名

-容量表示从当前逻辑卷中减少的容量。

如:

lvreduce -L -10G  /dev/vg0/boot  #给boot分区减少10G空间.

如果不指定减号,就变成10G大小了,而不是减少10G

9、删除逻辑卷

lvremove  逻辑卷名

如:lvremove /dev/vg0/boot

10、删除卷组

vgremove  卷组名

如:vgremove /dev/vg0/boot

11、删除物理卷

pvremove  物理卷名

如:pvremove /dev/sda1

删除的时候,要从逻辑卷->卷组->物理卷的顺序进行,而添加时正好相反。

虚拟机中测试:

有两块硬盘都是500G, /dev/sda, /dev/sdb

一、创建/dev/sda分区(用fdisk完成)

Device Boot      Start         End      Blocks   Id  System

/dev/sda1            2048   419432447   209715200   8e  Linux LVM

/dev/sda2       419432448   838862847   209715200   8e  Linux LVM

/dev/sda3       838862848  1048575999   104856576   8e  Linux LVM

注意 :id是8e,其它的无所谓了。

二、创建PV物理卷

root@ubuntu:/dev# pvcreate  /dev/sda1 /dev/sda2 /dev/sda3

Physical volume "/dev/sda1" successfully created

Physical volume "/dev/sda2" successfully created

Physical volume "/dev/sda3" successfully created

三、创建卷组

root@ubuntu:/dev# vgcreate  -s 8M vg0 /dev/sda1 /dev/sda2

Volume group "vg0" successfully created

这里面创建的卷组PE块大小为8M,卷组的名称为vg0,把物理卷sdad1,sda2放到卷组里,sda3并没有放入。

四、创建逻辑卷

root@ubuntu:~# lvcreate -n boot -L 256M vg0

The link /dev/vg0/boot should had been created by udev but it was not found. Falling back to direct link creation.

Logical volume "boot" created

root@ubuntu:~# mkfs.ext4 /dev/vg #格式化逻辑卷(分区)

按照这种方法,创建其它逻辑卷

lvcreate -n root -L 100G vg0

lvcreate -n home -L 299G vg0

关于卷组还有多少空间可以用vgdisplay进行查看。

root@ubuntu:~# vgdisplay

--- Volume group ---

VG Name               vg0

System ID

Format                lvm2

Metadata Areas        2

Metadata Sequence No  6

VG Access             read/write

VG Status             resizable

MAX LV                0

Cur LV                3

Open LV               0

Max PV                0

Cur PV                2

Act PV                2

VG Size               399.98 GiB #可用的VG总大小。

PE Size               8.00 MiB #块大小为8M

Total PE              51198 #PE总块数

Alloc PE / Size       51198 / 399.98 GiB #51198表示分配的块

Free  PE / Size       0 / 0   #自由空间剩于0块,表示已经全分完了

VG UUID               jnxPsp-74TB-u7Wu-XRLA-1xD4-iuf4-mJrp2l

五、添加/dev/sda3到卷组vg0中

root@ubuntu:~# vgextend  vg0 /dev/sda3

Volume group "vg0" successfully extended

再次显示卷组信息,发现free空间有了99G,这表示可以随时添加进来的。

六、扩展逻辑卷大小

root@ubuntu:~# lvextend -l +12799 /dev/vg0/boot

Extending logical volume boot to 99.99 GiB

Logical volume boot successfully resized

用lvdisplay /dev/vg0/boot可以查出容量增加了。

此文作者安装了 ubuntu server,之后把第二块硬盘添加到VG里成功。并调整了分区大小,看来这功能真的很牛啊。