对于一块硬盘有三个分区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里成功。并调整了分区大小,看来这功能真的很牛啊。