简介
LVM2(Logical Volume Manager,Version:2)是LVM的第二个版本。LVM是一种Linux核心所提供的逻辑卷管理(Logical volume management)功能,它在硬盘的硬盘分区之上,又创建一个逻辑层,以方便对系统分区进行管理。
目的
使系统分区更加方便,灵活,可以在不丢失数据的情况下对系统分区进行扩容及收缩。(但因为数据由软件层控制,所以一旦丢失就难以找回,所以业界对于此分区方式一直存在争议。)
概念
先来看一张概念图(来自wiki):
PE:Physical Extent,组成LVM的最小单位,大小可由指定VG指定。
PV:Physical Volume,组成VG的物理卷单位,从物理分区进行创建。
VG:Volume Group,由PV组成的卷组,可通过PV的增加和缩减来改变容量,是创建逻辑分区的基石。
LV:Logical Volume,我们的主角逻辑分区,在VG上创建,在一定条件下可自由改变容量。
实现
PV管理工具:
1 | [hzz@magedu ~]$ pv |
VG管理工具:
1 | [hzz@magedu ~]$ vg |
LV管理工具:
1 | [hzz@magedu ~]$ lv |
注意:
VG和LV的缩减必须遵循规律进行。比如VG缩减前,必须先用pvmove进行pv的数据转移,才可以移除pv;LV缩减前,必须先umount分区,待缩减成功后再mount分区。PV,VG,LV相当于一个金字塔形结构,上层扩充和缩减的容量,必须以下层的已使用量为参考。
示例
使用三块5G的磁盘创建一个PE大小为4M的VG,并创建5G的LV用于挂载到/tmp/lvm-test目录。
创建分区:
1 | [hzz@magedu ~]$ sudo fdisk /dev/sdb |
创建PV:
此处要注意,如果磁盘曾经做过RAID,需要复用的话,在删除RAID后需要清理超级块,否则会出现“Device /dev/sdb1 not found (or ignored by filtering).
”报错无法加载。(我就被坑了一晚上。)
1 | sudo mdadm --misc --zero-superblock /dev/sdb |
删除软RAID过程详见《Linux RAID简介》
如果是使用当前磁盘的其他分区创建,则直接pvcreate /dev/sda3
就可以了,但是如果是跨磁盘创建,执行pvcreate
的时候也有可能会报错“Device /dev/sdb1 not found (or ignored by filtering).
”。此时要经过以下预处理:
1 | 查看sdb设备号 |
经过以上处理后,就能愉快地创建PV了。
1 | [hzz@magedu ~]$ sudo pvcreate /dev/sdb1 |
创建VG:
1 | [hzz@magedu ~]$ sudo vgcreate -s 4M myvg /dev/sdb1 /dev/sdc1 /dev/sdd1 |
创建LV
1 | [hzz@magedu ~]$ sudo lvcreate -L 5G -n mylv myvg |
格式化LV并挂载
1 | [hzz@magedu ~]$ sudo mkfs.xfs /dev/myvg/mylv |
创建快照
LVM可以给系统创建一个快照,由于使用了写入时复制(copy-on-write) 策略,相比传统的备份更有效率。 初始的快照只有关联到实际数据的inode的实体链接(hark-link)而已。只要实际的数据没有改变,快照就只会包含指向数据的inode的指针,而非数据本身。一旦你更改了快照对应的文件或目录,LVM就会自动拷贝相应的数据,包括快照所对应的旧数据的拷贝和你当前系统所对应的新数据的拷贝。这样的话,只要你修改的数据(包括原始的和快照的)不超过2G,你就可以只使用2G的空间对一个有35G数据的系统创建快照。
通俗点来说,就是新建一个逻辑分区(snap01
),并创建指定逻辑分区(vg0-pv
)所有文件的硬连接。当LVM检测到vg0-pv
上有文件变化时,便拷贝vg0-pv
上变化文件的旧文件到snap01
,确保snap01
上所指向的文件,都是创建snap01
时的版本。
因为snap01
上只保留了vg0-pv
上被更改的文件,其他的都是硬连接,所以其空间可设置成比vg0-pv
小。具体制定标准要预估vg0-pv
上文件变化的数量决定,在条件允许的情况下建议创建成和vg0-pv
一样的大小。
注意:snap01
和vg0-pv
必须在同一个VG中,确保vg0-pv
所在VG有足够的空间。
创建快照操作:
1 | lvcreate -L [mMgGtT] -p r -s -n snapshot_lv_name original_lv_name |
示例:创建/dev/myvg/mylv
的快照,要求大小为5G,挂载为/tmp/lvm-test-snap。
1 | [hzz@magedu ~]$ sudo lvcreate -L 5G -p r -s -n mylv-snap /dev/myvg/mylv |
更多参考
就这样,LVM2介绍完了,更多关于LVM的使用,可参考Arch Linux
文档上的一篇文章:LVM