1 基本概念
LVM,logical volume manager,逻辑卷管理器,属于磁盘的一种使用方式,克服基本磁盘的弊端,相当于windows里面的动态磁盘。
PV(physical volume)物理卷:可以是一个磁盘或一个分区
VG(volume group)卷组:多个PV组成的一个组,至少要一个PV
PE物理块:PV加入VG中时会划分等大的物理块,这些物理块叫PE
LE逻辑块:与PE是映射关系,两者等大,且一一对应
LV逻辑卷:由LE组成,多个LE组成一个LV
LVM工作原理:在Linux中把分区或磁盘标识为PV,多个PV组成卷组,PV加入VG时会被划分成等大的物理块叫PE,PE与LE一一等大映射,多个LE组成LV,将LV挂载使用,数据存储在PE中,也就是存在磁盘中。当LV容量不够时,只需要随机划分PE即可。
2 LVM的使用
1)创建PV:pvcreate 分区或磁盘设备文件
pvcreate /dev/sda2 //pv名就是磁盘或分区所在目录
2)查看系统内PV的状态:pvs 或 pvdisplay 或 pvscan
3)创建VG:vgcreate VG名 PV名
例:vgcreate testvg /dev/sda1 //-s指定PE大小,如果不指定,默认大小就是4M
4)查看系统VG的状态:vgs 或者vgdisplay 或者vgscan
5)创建LV:lvcreate -L lv大小 –n lv名称 vg名
例如 : lvcreate -L 500M -n testlv testvg
6)格式化LV,挂载使用
mkfs –t 文件系统类型 /dev/vg名/lv名
创建挂载点 mkdir /mnt/目录名
挂载: mount /dev/vg名/lv名 /mnt/目录名
7)开机自动挂载LV
编辑配置文件 vim /etc/fstab
在末尾添加:/dev/vg名/lv名 挂载点 文件系统类型 权限 是否备份 是否检查
例如:vim /etc/fstab
/dev/testvg/testlv /mnt/testlv ext4 defaults 0 0
8)删除LVM
如果有挂载的LV,需要先卸载—— umount 挂载点
删除lv —— lvremove /dev/vg名/lv名
删除vg —— vgremove /dev/vg名
删除pv—— pvremove /dev/pv名
注意:删除过程不能更改。但是可以跳过删除lv,直接删除vg
9)LVM扩容与缩容
对象:VG LV
原理:VG扩容就是向VG中增加PV,VG缩容就是从VG中剔除PV。LV扩容就是向LV中增加LE,LV缩容就是从LV中剔除LE。LV的扩容需要VG有足够的空间
VG扩容与缩容
扩容: vgextend vg名 pv名 缩容: vgreduce vg名 pv名
LV的扩容与缩容
扩容: lvextend -L +扩充的容量 -f -r /dev/vg名/lv名
缩容: lvreduce -L -扩充的容量 -f -r /dev/vg名/lv名
注意:有+、-号时,就是在原有容量基础上加减多少,没有+、-号就是直接变成多少容量;
VG、LV的缩容可能会破坏数据,因此很少缩容;
LV需要进行格式化之后才能进行扩容与缩容操作。
3 条带化LV
1)条带化LV概念
磁盘阵列 raid:
raid0条带化,至少需要两块规格大小一样的磁盘,组成一个磁盘组。存储与读取文件时会多个磁盘多任务写入或读取。
raid1 镜像化,一个磁盘是另一个磁盘的备份,删掉一个磁盘里的数据,另一个磁盘也会删掉这个数据,但是如果一个磁盘损坏了,还可以通过另一个磁盘获取数据。
条带化LV和raid0原理一样。也是需要规格大小一样的PV。
2) 创建条带化LV:在VG中至少需要两块PV,PV的大小要一致
创建:lvcreate –l 100%FREE -I 2 –I 64 –n lv名 vg名
注:第一个参数为小写的L,用于指定创建lv使用的磁盘空间
第二个参数为小写的i,用于指定创建lv使用的磁盘数量
第三个参数为大写的i,用于指定条带化lv的带区大小
创建完成后,即可格式化、挂载使用
4 同时创建lv及其镜像
在vg中至少需要两块PV,PV的大小要一致
创建镜像LV:lvcreate -L lv的大小 -m1 -n lv名 vg名
注:LV的大小不能大于一块pv的大小;
-m1:创建LV时同时在vg中的另一块pv上创建其镜像
举例说明:
1)将/dev/sdb创建为pv,加入vg,创建LV,格式化后挂载到/mnt/aa,在/mnt/aa中创建f1
pvcreate /dev/sdb vgcreate vg /dev/sdb
lvcreate -L 500M -n lv vg
mkfs -t ext4 /dev/vg/lv mkdir /mnt/aa
mount /dev/vg/lv /mnt/aa touch /mnt/aa/f1
2) 添加pv /dev/sdc至vg中,创建LV的镜像至/dev/sdc中
vgextend vg /dev/sdc
lvconvert -m1 /dev/vg/lv /dev/sdc
3)破坏pv /dev/sdb ,确认f1文件仍然存在
dd if=/dev/zereo of=/dev/sdb count=10
查看被破坏的pv:pvs ,被破坏的pv显示unknown device
确认f1文件存在:find /mnt/aa -name f1
4)将损坏的pv从vg中剔除,并删除镜像关系
剔除pv: vgreduce --removemissing --force /dev/vg
删除镜像关系:lvconvert -m0 /dev/vg/lv
5)将新的pv /dev/sdd 加入vg,并重新创建LV的镜像
扩展vg:vgextend vg /dev/sdd
创建镜像: lvconvert -m1 /dev/vg/lv /dev/sdd
转载请注明出处,谢谢!