一、简介
LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。
LVM的工作原理是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。
LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。如果我们新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性。
基本的逻辑卷管理概念:
PV(Physical Volume)- 物理卷
物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘,也可以是raid设备。
VG(Volumne Group)- 卷组
卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。
LV(Logical Volume)- 逻辑卷
逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组。
关系图如下:
PE(Physical Extent)- 物理块
LVM 默认使用4MB的PE区块,而LVM的LV最多仅能含有65534个PE (lvm1 的格式),因此默认的LVM的LV最大容量为4M*65534/(1024M/G)=256G。PE是整个LVM 最小的储存区块,也就是说,其实我们的资料都是由写入PE 来处理的。简单的说,这个PE 就有点像文件系统里面的block 大小。所以调整PE 会影响到LVM 的最大容量!
二,系统环境及磁盘准备
系统平台:CentOS release 7
LVM版本:lvm2-2.02.130-5.el7.x86_64
设备类型:分区、物理磁盘
磁盘准备:新增一块磁盘做实验
三,安装LVM管理工具
1,检查系统中是否安装了LVM管理工具
# rpm -qa | grep lvm
2,如果未安装,则使用yum方式安装
# yum -y install lvm*
[root@localhost ~]# rpm -qa lvm2 lvm2-2.02.130-5.el7.x86_64
四,新建一个分区
1,使用/dev/sdb模拟分区
# fdisk /dev/sdb
文件系统类型为:8e (Linux LVM)
# fdisk -l /dev/sdb
五,创建PV
命令介绍:
# pvcreate 将物理分区新建成为PV
# pvscan 查询目前系统里面任何具有PV的磁盘
# pvdisplay 显示出目前系统上面的PV状态
# pvremove 将PV属性移除,让该分区不具有PV属性
1,查询目前系统里面是否有PV的磁盘
2,将/dev/sdb5-/dev/sdb8新建成为PV格式
3,查询目前系统里面任何具有PV的磁盘
六,创建VG
命令介绍:
# vgcreate 新建VG
vgcreate [-s N[mgt]] VG名称 VG名称
-s 接PE的大小
# vgscan 查询目前系统里面是否有VG的磁盘
# vgdisplay 显示出目前系统上面的VG状态
# vgextend 在VG内增加额外的PV
# vgreduce 在VG内删除PV
# vgchange 设置VG是否启动(active)
# vgremove 删除一个VG
PV的名称是分区的设备文件名字,VG名称可以自定义的,我将VG的名称定义为myvg
1,将/dev/sdb5-/dev/sdb7新建为一个VG,且指定PE为15MB
2,查看系统上的VG状态
3,显示出目前系统上面的VG状态
# vgdisplay
4,新增PV给myvg
5,显示出目前系统上面的VG状态
# vgdisplay
七,创建LV
命令介绍:
# lvcreate 新建LV
lvcreate [-L N[mgt]] [-n LV名称] VG名称
lvcreate [-l N] [-n LV名称] VG名称
注意: -L 后面接容量,最小单位为PE, 数量必须是PE的倍数,若不相符,系统会自行计算最相近的容量
-l 后面接PE的“个数”,而不是数量
-n 后面接LV的名称
# lvscan 查询系统LV
# lvdisplay 显示系统LV状态
# lvextend 在LV里增加容量
# lvreduce 在LV里减少容量
# lvremove 删除一个LV
# lvresize 对LV进行容量大小的调整
1,将整个myvg全部分配给mglv
实验中报错,说是空闲空间不够,可以接受545个,但只有544个,其原因是-L选项后面接的容量必须是PE的倍数,一个PE的容量为15M,总容量为7.97G,不能被15整除,故报错,下面的是 解决方法,只要将总容量改为能被15整除的数就好,因为PE的大小已经确定,VG的容量是由若干个PE组成的,故VG的大小可以改变
2,查看LV情况
3,进行格式化与挂载
# mke2fs -t ext4 /dev/myvg/mglv
# mkdir /mnt/lvm
# mount /dev/myvg/mglv /mnt/lvm
4,复制文件
八,放大LV容量
步骤:
1,利用fdisk设置新的额具有8e /systemID的分区
2,利用pvcreate构建PV
3,利用vgextend将PV加进myvg
4,利用lvresize将新加入的PV内的PE加入mglv中
5,通过resize2fs将文件系统的容量增加
1,原先已经创建好/dev/sdb9分区
2,新建新的PV
3,增加VG容量
4,增加LV容量
5,查看
6,将LV的容量扩充到整个文件系统
# dumpe2fs /dev/myvg/mglv 查看文件系统内的superblock记录情况
# resize2fs [-f] [device] [size] 将LV的容量扩充到整个文件系统
7,查看
九,缩小LV容量
1,先卸载
2,降低文件系统的容量
3,重新挂载并查看容量大小
4,降低LV容量,抽离/dev/sdb5,这个PV有136个PE
5,查看容量大小
6,将/dev/sdb5从mgvg中移除
总结:
1,LVM最主要的用处是在实现一个可以弹性调整容量的文件系统上,而不是在新建一个性能为主的磁盘上。LVM默认的读写模式是线性模式
2,实现的流程:
3,删除系统内的LVM
1)先卸载系统上面的 LVM 文件系统(包括快照与所有LV)
2)使用 lvremove 删除 LV
3)使用 vgchange -an VGname 让 VGname 这个 VG 不具有 Active 的标志
4)使用 vgremove 删除VG
5)使用 pvremove 删除PV
6)使用 fdisk 将 ID 修改回来
4,PV, VG, LV 常用命令的总结
作业:
1:创建一个可用空间为1G的RAID1设备,文件系统为ext4,有一个空闲盘,开机可自动挂载至/backup目录
[root@localhost ~]# fdisk /dev/sdb fdisk /dev/sdc fdisk /dev/sdd /dev/sdb1 20975616 23072767 1048576 fd Linux raid autodetect /dev/sdc1 23074816 25171967 1048576 fd Linux raid autodetect /dev/sdd1 25174016 27271167 1048576 fd Linux raid autodetect [root@localhost ~]# mdadm -C /dev/md0 -a yes -l 1 -n 2 -x 1 /dev/sdb1 /dev/sdc1 /dev/sdd1 Number Major Minor RaidDevice State 0 8 21 0 active sync /dev/sdb1 1 8 22 1 active sync /dev/sdc1 2 8 23 - spare /dev/sdd1 [root@localhost ~]# mke2fs -j /dev/md0 [root@localhost ~]# mke2fs -t ext4 /dev/md0 [root@localhost ~]# mount /dev/md0 /backup [root@localhost ~]# cat /etc/fstab UUID=1026f9f2-27e5-4e34-be98-6e75eb1e633d /backup ext4 defaults 0 0
2:创建由三块硬盘组成的可用空间为2G的RAID5设备,要求其chunk大小为256k,文件系统为ext4,开机可自动挂载至/mydata目录
[root@localhost ~]# fdisk /dev/sdb fdisk /dev/sdc fdisk /dev/sdd /dev/sdb5 20975616 25169919 2097152 fd Linux raid autodetect /dev/sdc6 25171968 29366271 2097152 fd Linux raid autodetect /dev/sdd7 29368320 33562623 2097152 fd Linux raid autodetect [root@localhost ~]# mdadm -C /dev/md1 -a yes -l 5 -n 3 -c 256 /dev/sdb5 /dev/sdc6 /dev/sdd7 [root@localhost ~]# mke2fs -j /dev/md1 [root@localhost ~]# mke2fs -t ext4 /dev/md1 [root@localhost ~]# mount /dev/md1 /mydata [root@localhost ~]# mdadm -D /dev/md1 [root@localhost ~]# cat /etc/fstab UUID=3ef9776c-97dc-4b28-991b-43086a06b3ed /mydata ext4 defaults 0 0
1、创建一个至少有两个PV组成的大小为20G的名为testvg的VG;要求PE大小为16MB,而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录
[root@localhost ~]# fdisk /dev/sdb [root@localhost ~]# pvcreate /dev/sdb1 [root@localhost ~]# pvcreate /dev/sdb2 [root@localhost ~]# vgcreate -s 16M testvg /dev/sdb{1,2} [root@localhost ~]# lvcreate -n textlv -L 5G /dev/testvg [root@localhost ~]# mkfs.ext4 /dev/testvg/testlv [root@localhost ~]# mkdir /users [root@localhost ~]# mount /dev/testvg/testlv /users/
2、新建用户archlinux,要求其家目录为/users/archlinux,后su切换至archlinux用户,复制/etc/pam.d目录至自己的家目录中
[root@localhost ~]# useradd -d /users/archlinux archlinux [root@localhost ~]# su - archlinux [archlinux@localhost ~]$ pwd /users/archlinux [archlinux@localhost ~]$ cp -r /etc/pam.d . [archlinux@localhost ~]# ll pam.d/ | wc 46 419 2386
3、扩展testlv至7G,要求archlinux用户的文件不能丢失
[root@localhost ~]# lvextend -L 7G /dev/testvg/textlv [root@localhost ~]# resize2fs /dev/testvg/textlv [root@localhost ~]# su - archlinux [archlinux@localhost ~]$ ll pam.d/ | wc 46 419 2836
4、收缩testlv至3G,要求archlinux用户的文件不能丢失
[root@localhost ~]# umount /dev/testvg/testlv [root@localhost ~]# e2fsck -f /dev/testvg/testlv [root@localhost ~]# resize2fs /dev/testvg/testlv 3G [root@localhost ~]# lvreduce -L 3G /dev/testvg/testlv [root@localhost ~]# mount /dev/testvg/testlv /users/ [root@localhost ~]# ll /users/archlinux/pam.d/ | wc
46 419 2836
5、对testlv创建快照,并尝试基于快照备份数据,验正快照的功能
[root@localhost ~]# lvcreate -L 1G -p r -s -n testlv-snap /dev/testvg/testl [root@localhost ~]# mkdir /mnt/snap [root@localhost ~]# mount /dev/testvg/testlv-snap /mnt/snap/ [root@localhost ~]# rm -f /users/archlinux/pam.d/c* [root@localhost ~]# ls /users/archlinux/pam.d/c* ls: cannot access /users/archlinux/pam.d/c*: No such file or directory [root@localhost ~]# ls /mnt/snap/archlinux/pam.d/c* /mnt/snap/archlinux/pam.d/chfn /mnt/snap/archlinux/pam.d/crond /mnt/snap/archlinux/pam.d/chsh /mnt/snap/archlinux/pam.d/cups /mnt/snap/archlinux/pam.d/config-util
原创文章,作者:pingsky,如若转载,请注明出处:http://www.178linux.com/43716