当服务器中存储数据的分区磁盘空间不够了,我们正常的思路,是换一块较大的磁盘,但是不论多大的磁盘,总会有不够的时候,lvm就是用来解决这些问题的,可以实现动态的扩容。
正常的文件传输是在文件系统和磁盘之间,lvm做的就是在文件系统和磁盘之间添加新的一层逻辑层。它对文件系统屏蔽了下层的磁盘,它对磁盘进行了封装,从而使得文件系统面向逻辑卷,逻辑卷采用一定的方式对磁盘进行操作。也就是说,磁盘的扩展直接影响的是逻辑卷。给文件系统的赶紧就是逻辑卷变大了,仅此而已。
物理存储介质:也就是lvm可以操作的介质有:整个磁盘,磁盘分区,raid阵列,san磁盘。
pv:物理卷,就是存储介质加上lvm自己的一些信息
vg:多个pv组成
lv:建立在vg之上的,可以在lv上建立文件系统
pe:pv中最小的存储单元
le:lv中最小的存储单元。le=pe,因为lv是基于vg的,vg是由多个pv构成的,pv的存储单元是pe,lv的存储单元是le,所以他们相等。
名称 | 最小存储单元 |
---|---|
硬盘 | 扇区——512byte |
文件系统 | block——1k |
raid | chunk——512k |
lvm | le——4m |
使用卷组,使多个硬盘空间看起来像是一个大的硬盘
使用逻辑卷,可以跨多个硬盘空间的分区 sdb1 sdb2 sdc1 sdd2 sdf
在使用逻辑卷时,它可以在空间不足时动态调整它的大小
在调整逻辑卷大小时,不需要考虑逻辑卷在硬盘上的位置,不用担心没有可用的连续空间
可以在线对LV,VG 进行创建,删除,调整大小等操作。LVM上的文件系统也需要重新调整大小。
允许创建快照,可以用来保存文件系统的备份。
RAID+LVM一起用:LVM是软件的卷管理方式,而RAID是磁盘管理的方法。对于重要的数据,使用RAID来保护物理的磁盘不会因为故障而中断业务,再用LVM用来实现对卷的良性的管理,更好的利用磁盘资源。
多个存储介质——多个pv——合成卷组vg——从vg中划出lv——格式化lv并且进行挂载使用
#1使用fdisk对sde进行分区,分区过程如下
fdisk /dev/sde
#2创建pv
pvcreate /dev/sde{1,2,3,4}
#3查看物理卷的信息
pvdisplay /dev/sde1
#创建vg卷组
vgcreate vg01 /dev/sde1
#查看vg卷组的信息
vgdisplay vg01
#创建lv
lvcreate -n lv01 -L 16M vg01
#查看lv的信息
lvs
#查看pv的信息
pvdisplay /dev/sde1
分区类似如下的设置
设置如下的4个分区,大小一致,都为1G
pv逻辑卷的创建
pv逻辑卷的查看
创建vg卷组:
语法: vgcreate vg名字 pv的名字 可以跟多个pv
查看vg的信息
查看vg的详细信息
创建LV
lvcreate -n 指定新逻辑卷的名称 -L指定lv大小的SIZE(M,G) (-l:小l 指定LE的数量) vgname
查看vg01的信息
#查看刚才创建的lv01的目录
ll /etc/vg01/lv01
#格式化lv01,并且进行挂载
#之所以格式化为ext4的文件系统,是因为xfs不支持动态扩容。为了后期的例子,使用ext4这种文件格式。
mkfs.ext4 /dev/vg01/lv01
mkdir /raid01
mount /dev/vg01/lv01 /raid01
#查看磁盘信息
df -h
#设置开机自动挂载
echo "/dev/vg01/lv01 /lv01 ext4 defaults 0 0" >>/etc/fstab
查看逻辑卷的目录
格式化lv01并且进行挂载
先不进行挂载,然后设置为自动挂载
使用df进行查看,可以发现lv01已经出现。
指定PE大小用的参数: -s ,如果存储的数据都是大文件,那么PE尽量调大,读取速度快。可以使用s的参数来创建一个pe较大的vg来进行lv的创建,这样就使得读取大数据文件更快。
#首先查看vg的信息,我们的lv01是基于vg01进行创建的,同时lv不支持跨vg扩容。
vgs
#查看lv的信息
lvs
#进行扩容。扩容命令:lvextend和vgextend,参数有L,扩容30M:-L +30M,扩容到30M:-L 30M,因为这是lv的扩容,所以使用lvextend
#扩展30M
lvextend -L +30M /dev/vg01/lv01
#扩展到30M
#lvextend -L 30M /dev/vg01/lv01
#查看扩容后的lv01
lvs
#查看文件系统是否进行了扩展。
df -h
使用lvextend -L +30M /dev/vg01/lv01进行扩展,最后结果是lv01的大小进行了扩展,由16到48。这里的30是30M,然后pe的最小存储单元是4M,我们并没有进行修改lv01的大小,30除以4为7余2,剩下的2M,还需要一个pe进行存储,所以最后的大小为48,不是46
通过查看文件系统,得知,大小并没有发生变化。所以使用lv的扩容,扩容lv只是将lv的大小进行了扩展,而lv01之上的文件系统并没有进行扩展。现在进行扩展文件系统。接下来介绍3种扩展文件系统的方式。
ext4文件系统扩容使用命令语法: resize2fs 逻辑卷名称
xfs文件系统扩容使用命令语法: xfs_growfs 挂载点
lvextend 加上参数r就可以对lv扩容的同时,并且进行文件系统的扩容。r支持多种文件系统,推荐使用。
resize2fs和xfs_growfs 两者的区别是传递的参数不一样的,xfs_growfs是采用的挂载点;resize2fs是逻辑卷名称,而且resize2fs命令不能对xfs类型文件系统使用。
因为我们的文件系统是ext4,之前格式化的时候就格式化为ext4,所以我们接下来使用resize2fs进行文件系统的扩容。扩容结束可以进行查看
#进行ext4文件系统的挂载
resize2fs /dev/vg01/lv01
#查看磁盘的使用情况
df -h
#创建挂载点
mkdir /lv02
#创建指定大小的lv02
lvcreate -n lv02 -L 16M vg01
#进行挂载
mount /devvg01/lv02 /lv02
#查看当前磁盘的使用情况
df -h
#使用lvextend -r进行扩展
lvextend -r -L 30M /dev/vg01/lv02
#再次查看磁盘的使用情况,如果没有错误的话,lv02的磁盘应该已经扩展到30M
df -h
[root@break ~]# mkdir /lv02
[root@break ~]# lvcreate -n lv02 -L 16M vg01
Logical volume "lv02" created.
[root@break ~]# mount /dev/vg01/lv02 /lvo2^C
[root@break ~]# mkfs.ext4 /dev/vg01/lv02
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
4096 inodes, 16384 blocks
819 blocks (5.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=16777216
2 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
8193
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (1024 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
[root@break ~]# mount /dev/vg01/lv02 /lv02
[root@break ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 10G 4.4G 5.7G 44% /
devtmpfs 975M 0 975M 0% /dev
tmpfs 992M 0 992M 0% /dev/shm
tmpfs 992M 11M 981M 2% /run
tmpfs 992M 0 992M 0% /sys/fs/cgroup
/dev/sr0 4.2G 4.2G 0 100% /mnt
/dev/sda1 197M 135M 62M 69% /boot
tmpfs 199M 0 199M 0% /run/user/0
tmpfs 199M 32K 199M 1% /run/user/1000
/dev/mapper/mail-mail--lv 1014M 33M 982M 4% /mail-lv
/dev/mapper/vg01-lv01 46M 522K 43M 2% /lv01
/dev/mapper/vg01-lv02 15M 268K 14M 2% /lv02
[root@break ~]# lvextend -r -L 30M /dev/vg01/lv02
Rounding size to boundary between physical extents: 32.00 MiB.
Size of logical volume vg01/lv02 changed from 16.00 MiB (4 extents) to 32.00 MiB (8 extents).
Logical volume vg01/lv02 successfully resized.
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mapper/vg01-lv02 is mounted on /lv02; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mapper/vg01-lv02 is now 32768 blocks long.
[root@break ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 10G 4.4G 5.7G 44% /
devtmpfs 975M 0 975M 0% /dev
tmpfs 992M 0 992M 0% /dev/shm
tmpfs 992M 11M 981M 2% /run
tmpfs 992M 0 992M 0% /sys/fs/cgroup
/dev/sr0 4.2G 4.2G 0 100% /mnt
/dev/sda1 197M 135M 62M 69% /boot
tmpfs 199M 0 199M 0% /run/user/0
tmpfs 199M 32K 199M 1% /run/user/1000
/dev/mapper/mail-mail--lv 1014M 33M 982M 4% /mail-lv
/dev/mapper/vg01-lv01 46M 522K 43M 2% /lv01
/dev/mapper/vg01-lv02 30M 395K 28M 2% /lv02
#查看当前的vg01的信息
vgs
#创建物理卷
pvcreate /dev/sde3
#进行扩容
lvextend vg01 /dev/sde3
#查看扩容后的vg
vgs
#复制测试数据
cp -r /etc/* /lv01/
#数据转移
pvmove /dev/sde1 /dev/sde3
#这一步是需要上一步完全完成之后才可以,进行移除/dev/sde1这个分区
vgreduce vg01 /dev/sde1
#查看pv的信息
pvs
由图可以知道,我们已经完成了旧/dev/sde1分区的移除。
创建LVM流程:
pvcreate创建pv -> vgcreate创建卷组 -> lvcreate创建逻辑卷 -> mkfs.xfs lv 格式化-> mount挂载
删除LVM流程:
umount卸载 -> lvremove lv移出卷组中所有逻辑卷-> vgremove vg移出卷组-> pvremove 移出pv
#不挂载/lv01
umount /lv01
#移除lv
lvremove /dev/vgo1/lvo1
#移除vg
vgremove vg01
#移除pv
pvremove /dev/sde2
#最终查看lvs,pvs,vgs