一、LVM简介
LVM(Logical Volume Manager,逻辑卷管理器) 是Linux下对磁盘分区进行管理的一种机制。LVM是建立在磁盘分区和文件系统之间的一个逻辑层,利用LVM可以在磁盘不用重新分区的情况下动态调整分区的大小。
LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。通过LVM系统管理员可以轻松管理磁盘分区,如:将若干个磁盘分区连接为一个整块的卷组(volume group),形成一个存储池。管理员可以在卷组上随意创建逻辑卷组(logical volumes),并进一步在逻辑卷组上创建文件系统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配,例如按照使用用途进行定义:“DBdata”和“DBSoft”,而不是使用物理磁盘名“sda”和“sdb”或”hda”和”hdb”。而且当系统添加了新的磁盘,通过LVM管理员就不必将磁盘的文件移动到新的磁盘上以充分利用新的存储空间,而是直接扩展文件系统跨越磁盘即可,架构可以参考如下图:
为什么使用逻辑卷?
逻辑卷和逻辑卷管理有助于更加轻松地管理磁盘空间。如果文件系统需要更多的空间 , 可以将其卷组的可用空间分配给逻辑卷 ,并且可以调整文件系统的大小。如果磁盘开始出现错误 , 可以通过卷组将替换磁盘注册为物理卷 , 并且逻辑卷的范围可迁移到新磁盘。
- PV(Physical Volume,物理卷):硬盘分区或从逻辑上看和硬盘分区类似的设备。
- VG(Volume Group,卷组):一个LVM卷组由一个或多个物理卷(PV)组成。
- LV(Logical Volume,逻辑卷):逻辑卷建立在卷组上,可以在LV上创建文件系统。
- PE(Physical Extent,物理扩展):PV中可以分配的最小存储单元,默认为4MB。
- LE(Logical Extent,逻辑扩展):LV中可以分配的最小存储单元,同一卷组中,LE的大小和PE是一样的,且一一对应。
二、LVM的制作
1、划分lvm所用到的设备(功能id必须是linux LVM)
步骤如下:
<1>fdisk /dev/vdb ##新建分区,分区功能id是linux LVM
GPT分区Linux LVM功能id为15
DOS分区Linux LVM功能id为8e
<2>partprobe ##更新分区表
<3>cat /proc/partitions ##查看分区信息
2、lvm建立
pvcreate /dev/vdb1 ##把物理分区做成物理卷
pvs|pvdisplay ##查看物理卷
vgcreate vg0 /dev/vdb1 ##用制作好的/dev/vdb1这个物理卷制作一个物理卷组vg0
vgs|vgdisplay ##查看物理卷组
lvcreate -L 200M -n lv0 vg0 ##在vg0这个组中建立出lv0设备 -L 指定设备大小 -n 指定设备名字
lvs|lvdisplay ##对逻辑卷设备进行查看
mkfs.xfs /dev/vg0/lv0 ##格式化
mount /dev/vg0/lv0 /mnt ##挂载
实例:
watch -n 1 'pvs;vgs;lvs;df -h /mnt'
<1>物理分区做成物理卷
<2>用制作好的/dev/vdb1这个物理卷制作一个物理卷组vg0
<3>在vg0这个组中建立出lv0设备
<4>格式化、挂载
[root@localhost ~]# mkfs.xfs /dev/vg0/lv0 ##格式化成/mnt文件
[root@localhost ~]# mount /dev/vg0/lv0 /mnt/ ##挂载
[root@localhost ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 10473900 7061164 3412736 68% /
devtmpfs 469344 0 469344 0% /dev
tmpfs 484932 140 484792 1% /dev/shm
tmpfs 484932 12808 472124 3% /run
tmpfs 484932 0 484932 0% /sys/fs/cgroup
/dev/sr0 3704296 3704296 0 100% /run/media/root/RHEL-7.3 Server.x86_64
/dev/mapper/vg0-lv0 98988 5280 93708 6% /mnt
三、lvm设备的扩大
mount ##查看当前文件系统
针对xfs文件系统
xfs文件系统只能扩大不能缩减。
1、lvm扩大(当vg中的容量够用时)
lvextend —L 500M /dev/vg0/lv0 ##扩大lvm设备到500M
xfs_growfs /dev/vg0/lv0 ##扩大xfs文件系统到设备大小
2、vg扩大(当vg中的容量不够用时)
pvcreate /dev/vdb2 ##在pv中增加一块设备/dev/vdb2
vgextend vg0 /dev/vdb2 ##把新建立的/dev/vdb2添加到vg0中
lvextend -L 2000M /dev/vg0/lv0 ##扩大lvm设备到500M
xfs_growfs /dev/vg0/lv0 ##扩大xfs文件系统到设备大小
实例:
<1>lvm扩大
[root@localhost ~]# lvextend -L 500M /dev/vg0/lv0 ##lv0扩展到500M
[root@localhost ~]# xfs_growfs /dev/vg0/lv0 ##文件系统扩展
<2>vg扩大
若使lvm扩大到2G,现有的vg0已不足以lvm扩大,此时需在pv中增加一块设备/dev/vdb2
[root@localhost ~]# pvcreate /dev/vdb2 ##创建pv
Physical volume "/dev/vdb2" successfully created
[root@localhost ~]# vgextend vg0 /dev/vdb2 ##创建vg
[root@localhost ~]# lvextend -L 2000M /dev/vg0/lv0 ##lv0扩展到2G
[root@localhost ~]# xfs_growfs /dev/vg0/lv0 ##文件系统扩展
针对ext文件系统
ext文件系统可以扩大也可以缩减
将文件系统由xfs转换为ext
umount /mnt/ ##卸载
mkfs.ext4 /dev/vg0/lv0 ##直接格式化为ext4文件系统
1、lvm扩大
lvextend —L 2G /dev/vg0/lv0 ##扩大lvm设备到2G
umount /dev/vg0/lv0 ##卸载设备,因为文件系统缩减不支持在线操作
resize2fs /dev/vg0/lv0 ##设定文件系统大小和设备同步
2、vg扩大
pvcreate /dev/vdb3 ##在pv中增加一块设备/dev/vdb3
vgextend vg0 /dev/vdb3 ##把新建立的/dev/vdb2添加到vg0中
3、lvm缩减
umount /dev/vg0/lv0 ##卸载设备,因为文件系统缩减不支持在线操作
e2fsck -f /dev/vg0/lv0 ##检测文件系统,确定文件系统中已有数据大小防止过度缩减
resize2fs /dev/vg0/lv0 1G ##把文件系统缩减到1G
lvreduce -L 1G /dev/vg0/lv0 ##设备缩减到1G
实例:
<1>文件系统缩减到500M
<2>设备缩减到500M
四、vg缩减
在vg缩减时只能缩减没有被占用的设备
pvmove 设备1 设备2 ##把设备1上的所有数据移动到设备2上
vgreduce vg0 /dev/vdb1 ##把vg0中的/dev/vdb1删除
pvremove /dev/vdb1 ##把/dev/vdb1上的lvm管理信息删除
实例:
<1>把设备2上的所有数据移动到设备1上
<2>把vg0中的/dev/vdb2删除
<3>把/dev/vdb2上的lvm管理信息删除
五、 lvm丢失设备的删除
[root@westos ~]# vgreduce --removemissing vg0 ##删除vg0中丢失的设备
1、设备丢失
2、删除丢失的设备
六、 lvm快照##
当快照设备里的数据被更改,如果想还原,删除快照设备,在重新建立快照即可
lvcreate -L 20M -n lv0-backup -s /dev/vg0/lv0 ##给/dev/vg0/lv0建立快照,-L 指定快照大小,-n指定快照名字 -s指定快照模板设备
mount /dev/vg0/lv0-backup /userdate
实例:
lvm快照
[root@localhost ~]# lvcreate -L 100M -n lv0backup -s /dev/vg0/lv0 ##创建快照lv0backup
Logical volume "lv0backup" created
[root@localhost ~]# mount /dev/vg0/lv0backup /mnt ##快照挂载到/mnt
[root@localhost ~]# rm -fr /mnt/* ##将/mnt下所有文件删除
[root@localhost ~]# umount /mnt ##卸载
[root@localhost ~]# lvremove /dev/vg0/lv0backup ##删除快照(坏快照)
Do you really want to remove active logical volume lv0backup? [y/n]: y
Logical volume "lv0backup" successfully removed
[root@localhost ~]# lvcreate -L 100M -n lv0backup -s /dev/vg0/lv0 ##重新快照
Logical volume "lv0backup" created
[root@localhost ~]# mount /dev/vg0/lv0backup /mnt ##重新挂载新快照
[root@localhost ~]# ls /mnt ##/mnt下数据依旧存在
六、lvm删除
删除顺序:
lvremove---->vgremove----->pvremove