LVM:Logical Volume Manager 。LVM利用Linux内核的device-mapper功能来实现存储系统的虚拟化(系统分区独立于底层硬件)。 通过LVM,你可以实现存储空间的抽象化并在上面建立虚拟分区(virtual partitions),可以更简便地扩大和缩小分区,可以增删分区时无需担心某个硬盘上没有足够的连续空间,避免为正在使用的磁盘重新分区的麻烦、为调整分区而不得不移动其他分区的不便。
LVM的基本组成部分如下:
物理卷 (PV):一个可供存储LVM的块设备. 例如: 一块硬盘, 一个MBR或GPT分区, 一个回环文件, 一个被内核映射的设备 (例如 dm-crypt).它包含一个特殊的LVM头。
卷组 (VG):物理卷的一个组,作为存放逻辑卷的容器。 PEs are allocated from a VG for a LV.
逻辑卷 (LV):"虚拟/逻辑卷"存放在一个卷组中并由物理块组成。是一个类似于物理设备的块设备,例如,你可以直接在它上面创建一个文件系统文件系统。
物理块 (PE):一个卷组中最小的连续区域(默认为4 MiB),多个物理块将被分配给一个逻辑卷。你可以把它看成物理卷的一部分,这部分可以被分配给一个逻辑卷。
创建lvm步骤
1、fdisk进行分区,并将磁盘分区格式调整成lvm。(如果是某个分区需要此步骤,如果是某块硬盘略过此步)
#fdisk
t
8e
2、创建pv物理卷(可以将某个分区划分为pv,也可以将某块硬盘化为pv)
查看pv命令
# pvdisplay
# pvs
创建pv步骤
# pvcreate /dev/sda3(某分区) /dev/sdb(某硬盘)
注意:如创建某个硬盘如/dev/sda创建的pv时报错(如下): Device /dev/sda excluded by a filter 原因:此硬盘已经分区,存在分区表,可以将某个分区划分为pv如/dev/sda1等,如果要将/dev/sda整个硬盘划分为pv可以破坏硬盘/dev/sda的分区表,然后再创建 破坏分区表的两种方法: # dd if=/dev/urandom of=/dev/sda bs=512 count=1 # wipefs -a /dev/sda |
3、创建vg卷组
查看vg命令:
# vgs
# vgdisplay
创建vg步骤1:
# vgcreate [-s 16M] VG_Name /dev/sda3 /dev/sdb
-s 16M #指定PE大小为16M,如不指定默认为4M
步骤2(扩展vg时用):
# vgextend VG_Name /dev/sda4
4、创建lv逻辑卷
查看lv命令
# lvs
# lvdisplay
创建lv步骤1:
# lvcreate -L #[mMgGtT] -n LV_Name VG_Name
-l 3000 # 3000为pe的个数
-L 8G # 8G为实际容量容量,建议采用此方法
步骤2:对创建好的lv逻辑卷生成文件系统
# mke2fs -t ext4 /dev/VG_Name/LV_Name
步骤3:将lv挂载
# mount /dev/VG_Name/LV_Name /media
5、扩大lv逻辑卷
方法一:
步骤1:扩大逻辑卷
# lvextend -L [+]#[mMgGtT] -n /dev/VG_Name/LV_Name
-l +100%FREE #将所有剩余空间都进行扩展
步骤2:将扩大的逻辑卷空间进行文件系统扩展调整
(1)ext系列扩展文件系统采用此命令
# resize2fs /dev/VG_Name/LV_Name
(2)xfs系列扩展文件系统采用此命令,注意:要接挂载的目录/media
# xfs_growfs /media
方法二:
可通过一条命令直接扩展文件系统,替代步骤1和步骤2,包括ext,xfs
# lvextend -r -L [+]#[mMgGtT] -n /dev/VG_Name/LV_Name
6、缩减lv逻辑卷:只有ext系列支持缩减,xfs不支持缩减
步骤一:取消挂载
# umount /dev/VG_Name/LV_Name
步骤2:检查文件系统完整性
# e2fsck -f /dev/VG_Name/LV_Name
步骤3:缩减文件系统容量
# resize2fs /dev/VG_Name/LV_Name #[mMgGtT]
步骤4:缩减逻辑卷容量
# lvreduce -L [-]#[mMgGtT] /dev/ VG_Name/LV_Name
步骤5:重新挂载缩减好的逻辑卷
# mount /dev/VG_Name/LV_Name /media
7、快照:创建快照相当于针对某个逻辑卷lv创建了还原点。快照卷和原逻辑卷lv在同一个卷组vg中。
需要查看vg中空间是不是够创建快照,创建快照也相当于创建一个lv
创建快照:
# lvcreate -L #[mGgGtT] -p r -s -n snapshot_lv_name /dev/VG_Name/LV_Name
-p r # 设置快照为只读属性
-s # 创建快照
示例:
# lvcreate -L 1G -p r -s -n kuaizhao /dev/VG_Name/LV_Name
注意:快照可以像一般的lv一样挂载,xfs的快照挂载的时候需要给mount加扩展选项 # mount -o nouuid,ro
快照还原:
步骤1:取消快照和逻辑卷的挂载
# umount /users
步骤2:将快照合并到源lv上,注意还原后快照自动删除
# lvconvert --merge /dev/VG_Name /kuaizhao
lvm创建举例:
1) 创建一个至少有两个PV组成的大小为20G的名为testvg的VG;要求PE大小 为16MB, 而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录 # pvcreate /dev/sdb /dev/sdc #创建pv # vgcreate -s 16M testvg /dev/sdb /dev/sdc #创建vg # lvcreate -L 5G -n testlv testvg #创建lv # mkfs.ext4 /dev/testvg/testlv #创建lv的文件系统 # mkdir /users #创建挂载目录 # mount /dev/testvg/testlv /users/ #挂载 2) 扩展testlv至7G,要求archlinux用户的文件不能丢失 # cp -a /etc/ /users/ #复制测试文件 # lvextend -r -L 7G -n /dev/testvg/testlv #扩展lv到7G 3) 收缩testlv至3G,要求archlinux用户的文件不能丢失 # umount /users/ #卸载 # e2fsck -f /dev/testvg/testlv #检查文件系统 # resize2fs /dev/testvg/testlv 3G #缩减文件系统 # lvreduce -L 3G /dev/testvg/testlv #缩减lv容量 # mount /dev/testvg/testlv /users/ #挂载 4) 对testlv创建快照,并尝试基于快照备份数据,验证快照的功能 # lvcreate -L 1G -p r -s -n kuaizhao /dev/testvg/testlv #创建快照 # rm /users/etc/passwd #删除文件测试 # umount /users/ # lvconvert --merge /dev/testvg/kuaizhao #快照恢复 # mount /dev/testvg/testlv /users/ #重新挂载恢复后的lv # ls /users/etc/passwd #查看文件是否恢复