LVM是 Logical Volume Manager(逻辑卷管理)的简写,是Linux环境下对磁盘分区进行管理的一种机制,由Heinz Mauelshagen在Linux 2.4内核上实现。LVM可以实现用户在无需停机的情况下动态调整各个分区大小。
LVM本质上是一个虚拟设备驱动,是在内核中块设备和物理设备之间添加的一个新的抽象层次。它将几块磁盘(物理卷,PhysicalVolume)组合起来形成一个卷组(VolumeGroup)。LVM可以每次从卷组中划分出不同大小的逻辑卷(LogicalVolume)创建新的逻辑设备。底层的原始的磁盘不再由内核直接控制,而由LVM层来控制。对于上层应用来说卷组替代了磁盘块成为数据存储的基本单元。LVM管理着所有物理卷的物理盘区,维持着逻辑盘区和物理盘区之间的映射。LVM逻辑设备向上层应用提供了和物理磁盘相同的功能,如文件系统的创建和数据的访问等。但LVM逻辑设备不受物理约束的限制,逻辑卷不必是连续的空间,它可以跨越许多物理卷,并且可以在任何时候任意的调整大小。相比物理磁盘来说,更易于磁盘空间的管理。
从用户态应用来看,LVM逻辑卷相当于一个普通的块设备,对其的读写操作和普通的块设备完全相同。而从物理设备层来看,LVM相对独立于底层的物理设备,并且屏蔽了不同物理设备之间的差异。因而在LVM层上实现数据的连续保护问题,可以不需要单独考虑每一种具体的物理设备,避免了在数据复制过程中因物理设备之间的差异而产生的问题。从LVM的内核实现原理上看,LVM是在内核通用块设备层到磁盘设备驱动层的请求提交流之间开辟的另外一条路径,即在通用块设备层到磁盘设备驱动层之间插入了LVM管理映射层用于截获一定的请求进行处理。
用户通过lvm提供接口,依靠内核创建一系列LVM逻辑卷,所有对lvm逻辑卷的读写操作最终都会由LVM在通用块设备层下方截获下来,进行更进一步的处理。这里的进一步处理主要指的是完成写请求的映射,是将请求的数据根据实际情况进行一些拆分和重定位操作,从而可以将请求和数据分发到实际的物理设备中去。
LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的存储卷,在存储卷上建立文件系统。首先我们讨论以下几个LVM术语:
物理存储介质(PhysicalStorageMedia)
物理存储设备,如:/dev/hda、/dev/sda等,是存储系统最底层的存储单元。
物理卷(Physical Volume,PV)
磁盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块。但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
卷组(Volume Group,VG)
类似于非LVM系统中的物理磁盘,其由一个或多个物理卷组成。可以在卷组上创建一个或多个逻辑卷。
逻辑卷(Logical Volume,LV)
类似于非LVM系统中的磁盘分区,逻辑卷建立在卷组之上。在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。
物理块(Physical Extent,PE)
PE是物理卷的基本划分单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。所以物理卷(PV)由大小等同的基本单元PE组成。
逻辑块(Logical Extent,LE)
逻辑卷也被划分为可被寻址的基本单位,称为LE。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
和非LVM系统将包含分区信息的元数据保存在位于分区的起始位置的分区表中一样,逻辑卷及卷组相关的元数据也是保存在位于物理卷起始处的VGDA(卷组描述符区域)中。VGDA包括:PV描述符、VG描述符、LV描述符、和一些PE描述符。
系统启动LVM时激活VG,并将VGDA加载至内存,来识别LV的实际物理存储位置。当系统进行I/O操作时,就会根据VGDA建立的映射机制来访问实际的物理位置。
LVM通常用于装备大量磁盘的系统,但它同样适于仅有一、两块硬盘的小系统。
传统的文件系统是基于分区的,一个文件系统对应一个分区。这种方式比较直观,但不易改变:
当采用LVM时:
在使用很多硬盘的大系统中,使用LVM主要是方便管理、增加了系统的扩展性。
在一个有很多不同容量硬盘的大型系统中,对不同的用户的空间分配是一个技巧性的工作,要在用户需求与实际可用空间中寻求平衡。
用户/用户组的空间建立在LVM上,可以随时按要求增大,或根据使用情况对各逻辑卷进行调整。当系统空间不足而加入新的硬盘时,不必把用户的数据从原硬盘迁移到新硬盘,而只须把新的分区加入卷组并扩充逻辑卷即可。同样,使用LVM可以在不停服务的情况下。把用户数据从旧硬盘转移到新硬盘空间中去。
(1) 对磁盘分区和格式化
(2) 创建PV
pvcreate 分区名
(3) 创建VG 组
vgcreate 卷组名 关联的分区
(4) 创建和格式化LV逻辑卷
lvcreate -L 大小 -n 逻辑卷名
(5) mount到需要的挂载点
示例
(1) 对磁盘分区和格式化
root@pc2:~# fdisk /dev/sdb
Command (m for help): n [新建分区]
Partition number (1-4, default 2): [默认]
First sector (10487808-41943039, default 10487808): [默认 (起始扇区)]
Last sector, +/-sectors or +/-size{K,M,G,T,P} (10487808-41943039, default 41943039): [+5G/默认/或根据大小 (结束扇区)]
Command (m for help): t [ 转换分区格式 ]
Partition number (1,2, default 2): 2 [选择要转换的分区]
Hex code (type L to list all codes): 8e [ 8e Linux LVM ]
Command (m for help): w [保存]
root@pc2:~# fdisk -l
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 10487807 10485760 5G 8e Linux LVM
/dev/sdb2 10487808 41943039 31455232 15G 8e Linux LVM
mkfs.ext4 /dev/sdb1 [格式化]
mkfs.ext4 /dev/sdb2 [格式化](2) 创建PV
root@pc2:pvcreate /dev/sdb1
root@pc2:~# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 --- 5.00g 5.00g(3) 创建VG 组
root@pc2:~# vgcreate vg_0 /dev/sdb1
root@pc2:~# vgs
VG #PV #LV #SN Attr VSize VFree
vg_0 1 0 0 wz--n- <5.00g <5.00g(4) 创建和格式化LV逻辑卷
root@pc2:lvcreate -L 2G -n lv_0
root@pc2:~# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_0 vg_0 -wi-a----- 2.00g
root@pc2:~# mkfs.ext4 /dev/vg_0/lv_0(5) mount到需要的挂载点
root@pc2:~# mount /dev/vg_0/lv_0 /usr/lvm_tt/
(1) 对磁盘分区和格式化
(2) 创建PV
pvcreate 分区名
(3) 扩展PV
vgextend 卷组名 新增PV
(4) 扩展逻辑卷
方法1:lvextend -L 扩展容量 lv设备路径
方法2:lvextend -l +百分比FREE lv设备路径 0
(5) 刷新文件系统
resize2fs lv完整路径 (或者上一步,加上选项[ -r ])
示例
fdisk -l 或 lvs 查看lv大小变化
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
df -h 查看扩展后大小 (1)扩展PV
root@pc2:vgextend vg_0 /dev/sdb2(2)扩展逻辑卷并刷新文件系统
方法1:lvextend -L +10G /dev/vg_0/lv_0 /dev/sdb2
方法2:lvextend -l +100%FREE /dev/vg_0/lv_0 -r (3)查看扩展后大小
root@pc2:~# vgs
VG #PV #LV #SN Attr VSize VFree
vg_0 2 1 0 wz--n- 19.99g 0
查看PE pes、pedisplay
查看PV pvs、pvdisplay
查看VG vgs、vgdisplay
查看LV lvs、lvdisplay
查看分区 fdisk -L
创建PV pvcreate 设备路径
创建VG vgcreate VG名 pv
创建LV lvcreate -n 名字 -L 大小 vg名
格式化LV mkfs.ext4 lv完整路径 (mkfs.文件系统格式或-t 文件系统格式)
挂载 mount lv完整路径 挂载点 (也可以使用/etc/fstab或autofs)
卸载 umount
删lv lvremove lv完整路径
删vg vgremove vg名
删PV pvremove 设备完整路径 去硬盘
lvextend
首先进行卸载 umount 检查文件系统:e2fsck -f lv完整路径
减少文件系统:resize2fs lv完整路径 减少到的大小
减少lv卷大小:lvreduce -L -减少量的大小 lv的完整路径
挂载使用
**注意:**减小需谨慎,文件系统的减小后大小一定要和lv卷最终大小相等
上一篇:Cordova