LVM:Logical Volume Manager,逻辑卷管理器。它是在Liunx环境下对磁盘分区管理的一种机制。屏蔽了底层磁盘布局,便于动态调整磁盘容量。也可以在RAID上创建使用,增加了其冗余性。但是/boot用于存放引导文件,不能应用LVM机制。
其工作机制则在,把底层多个物理卷(PV,可以是多块磁盘,也可以是多个物理分区)组合为一个卷组(VG),再在卷组创建一个或多个逻辑分区(LV),逻辑分区(LV)可以实现动在不损坏数据前提下态调整分区大小,便于磁盘的管理。各个卷详情如下:
PV:Physical Volume,物理卷
指整个磁盘或用fdisk等工具建立的普通分区,也可以是在逻辑上与磁盘分区有相同功能的RAID。它是LVM基本存储逻辑块。
每一块物理卷PV都是由多个大小等同的物理基本块(PE:Phsical Extent)组成,类似于普通磁盘的扇区。每个PE都有唯一编号,它是可以被LVM寻址的最小单元,其大小可以在创建卷组VG时自行配置,默认为4MB。
VG:Volume Group,卷组
它是由一个或多个PV物理卷组合而成的一个整个。可以在卷组上创建一个或多个逻辑卷(LV)。
LV:Logical Volume,逻辑卷
类似于非LVM系统中的磁盘分区,是从卷组VG中分出的一块空间,用于创建文件系统。由多个大小等同的逻辑基本块(LE:Logical Extent)组成,是LV可被寻址的基本单元,其大小和PE相同,并且一一对应。
dm:device mapper,设备映射
将一个或多个底层块设备组织成一个逻辑设备的模块,其设备路径为:/dev/dm-#
LVM设备文件存储路径:/dev/mapper/VG_NAME-LV_NAME或/dev/VG_NAME/LV_NAME,这两个路径文件都是指向/dev/dm-#的链接文件。
创建管理:
一、创建分区:
先用fdisk等分区创建工具创建分区,方法同创建普通分区一样,但是需要将分区类型设置为 8e(Linux LVM)。创建过程不理详述,创建结果如下:
在/dev/sdb磁盘上创建了4块大小为10G的逻辑分区,/dev/sdb5 /dev/sdb6 /dev/sdb7 /dev/sdb8,分区类型为:Linux LVM。
二、物理卷PV管理
创建PV:pvcreate /dev/DEVICE
创建单个分区:pvreate 命令直接加分区就行
pvcreate /dev/sdb5
创建多个分区:pvreate 命令后多个分区以空格隔开
pvcreate /dev/sdb5 /dev/sdb6 /dev/sdb7 /dev/sdb8
查看PV信息:
查看简要信息:pvs /dev/DEVICE
查看详细信息:pvdisplay /dev/DEVICE
不加具体分区则是查看系统内全部PV信息;
例如:将/dev/sdb5 /dev/sdb6 /dev/sdb7 /dev/sdb8四个分区都创建为PV。
创建过程和结果如下:查看PV详细信息只以查看/dev/sdb5为例。
删除PV:pvremove /dev/DEVICE
可删除单个分区,也可删除多个分区, 用法同创建PV命令,不再详述。
移除PV:pvmove /dev/DEVICE
注意区分删除PV,只是移除PV上的数据,用于卷组VG容量缩减,可先了解,
到VG缩减时再详述。
三、卷组VG管理
创建VG:vgcreate [-s #[kKmMgGtTpPeE]] VG_Name PV_Path [PV_Path...]
将单个PV创建为一个卷组:vgcreate VG_Name PV_Path
如:vgcreate myvg /dev/sdb5
将多个PV创建为一个卷组:vgcreate VG_Name PV_Path PV_Path... 多个PV空格隔开
如:vgcreate myvg /dev/sdb5 /dev/sdb6 /dev/sdb7
-s #[kKmMgGtTpPeE]:表示指定物理基本块PE大小,默认为4MB。
查看VG信息:
查看简要信息:vgs VG_Name;
查看详细信息:vgdisplay VG_Name
不加VG_Name则表示查看系统内全部VG信息;
例如:创建由/dev/sdb5 /dev/sdb6 /dev/sdb7三个分区组成的名为myvg的VG。
要求PE大小为4MB。创建过程及结果如下:
现在可再可看PV,会发现/dev/sdb5 /dev/sdb6 /dev/sdb7这三个分区已属于myvg的卷组,
查看结果如下:
删除VG:vgremove VG_Name
vgremove命令后加VG_Name就可把相应VG删除,很简单,不再多述。
四、VG的扩展和缩减
当VG的容量不够用时,可对VG容量做扩展,也可以对VG容量做缩减,但要注意缩减时需先移除
PV中的数据(当然是其它PV剩余容量可容纳移除PV内的数据的前提下),否则会损坏原有数据。
具体操作如下:
1、扩展VG:vgextend VG_Name PV_Path [PV_Path...]
扩展时跟前面一样,需要事先创建分区并创建PV,可将单个分区扩展至Vg,也可同时将
多个分区扩展至VG。
例如:将/dev/sdb8(已事先做好分区并创建了PV)扩展至名为myvg的VG中。
扩展过各及结果如下;
可看到myvg的PV数量由原来的3块已变为4块,容量由于原来30G已扩展至40G。
查看/dev/sdb8的PV,已经是属于myvg的VG了。扩展成功。
2、缩减VG:vgreduce VG_Name PV_Path [PV_Path...]
缩减VG时,也可缩减单个分区,也可同时缩减多个分区。但是缩减前一定要先移除PV数据
例如:把/dev/sdb8从名为myvg的VG中缩减。缩减过程和结果如下:
可以看到myvg的PV块数由4块变为了3块,容量也由40G变为30G。查看/dev/sdb8,已不属于
myvg的VG中。
注意:在移除/dev/sdb8数据时提示“No date to move for myvg”,是因为原/dev/sdb8
甚至整个myvg的VG中都无数据,所以无数据可移除,但是在生产环境中一定要事先移除PV数据
再做VG缩减,以免对原有数据造成损坏。
五、逻辑卷LV管理
创建LV:lvcreate -L #[mMgGtT] -n LV_Name VG_Name
-L #[mMgGtT]:指定LV的空间大小,最大可与VG空间容量相同,但不可超过VG空间容量
-n LV_Name:指定LV的名字。
查看LV信息:
查看简要信息:lvs [/dev/VG_Name/LV_Name|/dev/mapper/VG_Name-LV_Name]
查看详细信息:lvdisplay [/dev/VG_Name/LV_Name|/dev/mapper/VG_Name-LV_Name]
不加LV路径时则表示可看系统内所有LV信息;
例如:在myvg卷组中创建大小为10G的逻辑卷mylv。创建过程及结果如下:
LV创建完成后,在LV上创建文件系统和完成挂载后,LV便可正常使用。
例如:对mylv的LV创建ext4格式的文件系统,卷标为MYLV,并挂载至/mylvm目录。
操作过程和结果如下:
可复制文件到/mylvm目录,并查看/mylvm目录,验证挂载成功,操作如下:
成功将/etc/fstaby文件复制到/mylvm目录下,并且/mylvm下存有lost+fonud目录,挂载成功
删除LV:lvremove /dev/VG_Name/LV_Name
lvremove命令后加LV路径,可直接删除LV,不再详述。但要注意,需先卸载。
六、LV的扩展和缩减
LV同VG一样,也可以根据需求对其进行扩展或缩减,可动态调整LV容量大小。但不建议对LV
进行容量缩减操作,这非常容易造成现有数据损坏。具体如下:
1、扩展LV:lvextend -L [+]#[mMgGtT] /dev/VG_Name/LV_Name
-L [+]#[mMgGtT]:表示扩展LV容量大小,带“+”表示扩展多大,不带“+”表示扩展
至多大。
注意:重新调整LV容量后,还需用resize2fs命令更新其大小,否则LV还是原有容量。
例如:扩展mylv至15G,要求原有文件不能丢失;扩展过程和结果如下:
扩展LV并更新:
查看扩展结果:
查看原有文件:
2、缩减LV:lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME
-L [-]#[mMgGtT]:表示缩减LV容量大小,带“-”表示缩减多大,不带“-”表示缩减
至多大。
注意:(1)一般不建议对LV进行容量缩减操作,这非常容易造成现有数据损坏;
(2)保证缩减后的容量一定要比现有数据所占用的容量要大,否则会损坏数据;
(3)缩减前需先卸载设备,并强制检测文件系统;
(4)需先更新逻辑容量大小(即resize2fs命令),再缩减LV;
例如:缩减mylv至10G,要求原有文件不能丢失。具体操作和结果如下:
卸载设备和检测文件系统:
缩减LV:
挂载并查看原有文件:
挂载成功,原有文件无损坏。
七、快照
LVM中拥有快照功能,所谓快照就是在某个时间点对指定数据的一个备份,主要作用就是能够
进行在线数据的备份与恢复。主要的工作机制就是写时复制(copy-on-write,COW),其实快照
所复制的并非原始数据本身,而是复制了原始数据物理位置的元数据,所以快照创建非常快,
可以瞬间完成。只有当原始数据块发生改变时,快照会在原始数据块发生改变前将原始数据块复
制并保存下来,这样我们访问快照卷上数据仍是原始数据,保证了备份数据的一致性。其实快照
并非真正意义上的备份,而为备份提供了一份访问原始数据的通道。
LVM中快照的实现:
lvcreate -s -n snapshot_lv_name -L #[mMgGtT] -p [r|rw] original_lv_name
-s:表示创建LV为快照;
-n snapshot_lv_name:快照名称;
-L #[mMgGtT]:表示快照大小;
快照大小可由原始卷数据变化量和计划快照存活时间来预估快照大小。快照过大,
会造成空间浪费,快照过小,则会造成快照备份失败。最大为原始卷一样大小。
-p:表示权限,可以是r(只读)或rw(读写);
original_lv_name:表示原始卷名称,也可以是目录或文件;
注意:1、快照其实也是一个逻辑卷;
2、快照只能对逻辑卷LVM进行备份,并且只能对同一个卷组的逻辑卷进行备份;
例如:对mylv创建快照,并尝试基于快照备份数据,验正快照的功能;
1、对mylv创建快照mysnap,并格查看结果:
注意:创建快归进无需再对快照进行分区格式化。
2、将mysnap挂载至/mysnap目录,查看目录是否有mylv卷中数据:
发现快照内有mylv卷中数据。
3、对mylv中fstab文件作更改,并再复制/etc/passwd文件到mylv卷内:
/mylvm目录下有了passwd文件,且fstab最后一行加了#hell内容。
4、查看快照内内容是否有变化:
快照/mysnap目录下文件内容无变化。
5、将快照复制到~/back_mylv目录下,并恢复mylv数据:
备份:
恢复:
发现mylv中的fstab文件恢复。注意:mylvm中passwdy文件还在,因为此处只恢复了
fstab文件。若要是mylv分区损坏后再恢复时,只有快照当时文件,并无之后修改或新增的
文件。
6、删除快照:
快照已删除,快照使命结束。