我们在工作中经常遇到服务器存储数据的分区磁盘空间不够的情况,尤其是当我们的业务是视频的时候,大批量用户上传和下载视频,磁盘空间需要不停的调整。如果我们作为运维每天的工作就是加硬盘是不是有点扯,而且换硬盘的速度也太慢了。
LVM是通过底层的物理硬盘封装起来,然后以逻辑卷的方式呈现给上层应用的。
分区是在一个硬盘上的连续空间,RAID具有容错功能,不过我们设想一个场景:如果一个分区sdb有100GB,当空间不够的时候,分区就毫无用武之地了。
如果我们新添加一块硬盘,如图:
新加进来的/dev/sdb1是一个独立的文件系统,无法和sda2合并。 那我们一般需要把sda2的大部分数据,转移到sdb1,然后在运行,当数据量特别大的时候,导数据的时间也会很长,而且即使我们把数据导到了sdb1有时候也会遇到问题。
LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。管理员利用LVM可以在磁盘不用重新分区的情况下动态调整文件系统的大小,并且利用LVM管理的文件系统可以跨越磁盘,当服务器添加了新的磁盘后,管理员不必将原有的文件移动到新的磁盘上,而是通过LVM可以直接扩展文件系统跨越磁盘。
我们可以理解为: LVM是将一个或者多个硬盘的分区在逻辑上整合成一个大的硬盘来使用,当硬盘的空间不够使用的时候,可以将其他硬盘的分区加入其中,这样实现磁盘空间的动态管理。
注意: 逻辑卷的大小是可以动态调整的,而且不会丢失数据, 新加入的硬盘也不会改变上层的逻辑卷。
物理卷可以是分区可以是磁盘
备注: 最小存储单元总结
名称 | 最小存储单元 |
---|---|
硬盘 | 扇区(512字节) |
文件系统 | block(4k) |
raid | chunk(512K) |
LVM | PE(4M) |
物理磁盘被格式化为PV,(空间被划分为一个个的PE) #PV包含PE
不同的PV加入到同一个VG中,(不同PV的PE全部进入到了VG的PE池内) #VG包含PV
在VG中创建LV逻辑卷,基于PE创建,(组成LV的PE可能来自不同的物理磁盘) #LV基于PE创建
LV直接可以格式化后挂载使用 #格式化挂载使用
LV的扩充缩减实际上就是增加或减少组成该LV的PE数量,其过程不会丢失原始数据
本次实验实现四个分区 这四个分区就是pv(物理卷)
root@zfl ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x6a964dd2 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+5G
分区 1 已设置为 Linux 类型,大小设为 5 GiB
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 10487807 5242880 83 Linux
/dev/sdb2 10487808 20973567 5242880 83 Linux
/dev/sdb3 20973568 31459327 5242880 83 Linux
/dev/sdb4 31459328 41943039 5241856 83 Linux
[root@zfl ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 49G 0 part
├─centos-root 253:0 0 44G 0 lvm /
└─centos-swap 253:1 0 5G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 5G 0 part
├─sdb2 8:18 0 5G 0 part
├─sdb3 8:19 0 5G 0 part
└─sdb4 8:20 0 5G 0 part
sr0 11:0 1 4.3G 0 rom /mnt/cdrom
[root@zfl ~]# pvcreate /dev/sdb{1,2,3,4}
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdb2" successfully created.
Physical volume "/dev/sdb3" successfully created.
Physical volume "/dev/sdb4" successfully created.
[root@zfl ~]# pvdisplay /dev/sdb1
"/dev/sdb1" is a new physical volume of "5.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 5.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID vVkGXM-CvrA-s7U2-Rdvl-dxhq-RH0s-kyz32P
[root@zfl ~]#
语法: vgcreate vg名字 pv的名字 可以跟多个pv
[root@zfl ~]# vgcreate vg01 /dev/sdb1 /dev/sdb2
Volume group "vg01" successfully created
[root@zfl ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <49.00g 0
vg01 2 0 0 wz--n- 9.99g 9.99g
[root@zfl ~]#
[root@zfl ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <49.00g 0
/dev/sdb1 vg01 lvm2 a-- <5.00g <5.00g
/dev/sdb2 vg01 lvm2 a-- <5.00g <5.00g
/dev/sdb3 lvm2 --- 5.00g 5.00g
/dev/sdb4 lvm2 --- <5.00g <5.00g
[root@zfl ~]# vgdisplay vg01
--- Volume group ---
VG Name vg01
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 9.99 GiB
PE Size 4.00 MiB
Total PE 2558
Alloc PE / Size 0 / 0
Free PE / Size 2558 / 9.99 GiB
VG UUID yYwZYo-i4g4-4QHb-SzIt-Sa6S-85N4-AiyoW5
lvcreate -n 指定新逻辑卷的名称 -L指定lv大小的SIZE(M,G) (-l:小l 指定LE的数量) vgname
[root@zfl ~]# lvcreate -n lv01 -L 8G vg01
Logical volume "lv01" created.
[root@zfl ~]#
[root@zfl ~]# lvs 查看逻辑卷信息
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <44.00g
swap centos -wi-ao---- 5.00g
lv01 vg01 -wi-a----- 8.00g
[root@zfl ~]# vgs 查看卷组信息
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <49.00g 0
vg01 2 1 0 wz--n- 9.99g 1.99g
在卷组下的逻辑卷
[root@zfl ~]# ls /dev/vg01/lv01
/dev/vg01/lv01
[root@zfl ~]#
[root@zfl ~]# mkfs.xfs /dev/vg01/lv01 格式化为XFS系统
meta-data=/dev/vg01/lv01 isize=512 agcount=4, agsize=524288 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=2097152, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@zfl ~]#
[root@zfl ~]# blkid /dev/vg01/lv01
/dev/vg01/lv01: UUID="b5376889-fdec-4131-a5c4-44d94ac8002b" TYPE="xfs"
[root@zfl ~]#
[root@zfl ~]# mkdir /lv01 #创建挂载目录
[root@zfl ~]#
[root@zfl ~]# mount /dev/vg01/lv01 /lv01
[root@zfl ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 44G 8.1G 36G 19% /
devtmpfs 2.5G 0 2.5G 0% /dev
tmpfs 2.5G 0 2.5G 0% /dev/shm
tmpfs 2.5G 12M 2.5G 1% /run
tmpfs 2.5G 0 2.5G 0% /sys/fs/cgroup
/dev/sr0 4.3G 4.3G 0 100% /mnt/cdrom
/dev/sda1 1014M 147M 868M 15% /boot
tmpfs 506M 0 506M 0% /run/user/0
/dev/mapper/vg01-lv01 8.0G 33M 8.0G 1% /lv01
[root@zfl ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 44G 8.1G 36G 19% /
devtmpfs devtmpfs 2.5G 0 2.5G 0% /dev
tmpfs tmpfs 2.5G 0 2.5G 0% /dev/shm
tmpfs tmpfs 2.5G 12M 2.5G 1% /run
tmpfs tmpfs 2.5G 0 2.5G 0% /sys/fs/cgroup
/dev/sr0 iso9660 4.3G 4.3G 0 100% /mnt/cdrom
/dev/sda1 xfs 1014M 147M 868M 15% /boot
tmpfs tmpfs 506M 0 506M 0% /run/user/0
/dev/mapper/vg01-lv01 xfs 8.0G 33M 8.0G 1% /lv01
扩容前确认下是否有可扩容空间,空间是从VG创建的。
任何逻辑卷的容量扩大都是先要扩充卷组容量
扩容命令是: extend vgextend lvgextend
因为VG01 还有1.9G空间
[root@zfl ~]# lvextend -L +1G /dev/vg01/lv01
Size of logical volume vg01/lv01 changed from 8.00 GiB (2048 extents) to 9.00 GiB (2304 extents).
Logical volume vg01/lv01 successfully resized.
使lv01逻辑卷变为9g
[root@zfl ~]# df -Th /lv01
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vg01-lv01 xfs 8.0G 33M 8.0G 1% /lv01
[root@zfl ~]#
但是这会还是8g
扩容后应该通知内核,否则看到的还是原来的旧大小
刷新文件系统容量
[root@zfl ~]# xfs_growfs /dev/vg01/lv01
meta-data=/dev/mapper/vg01-lv01 isize=512 agcount=4, agsize=524288 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=2097152, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 2097152 to 2359296
[root@zfl ~]# df -Th /lv01
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vg01-lv01 xfs 9.0G 33M 9.0G 1% /lv01
[root@zfl ~]#
[root@zfl ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <49.00g 0
vg01 2 1 0 wz--n- 9.99g 1016.00m
[root@zfl ~]#
[root@zfl ~]# pvcreate /dev/sdb3 /dev/sdb4
Physical volume "/dev/sdb3" successfully created.
Physical volume "/dev/sdb4" successfully created.
[root@zfl ~]#
[root@zfl ~]# vgextend vg01 /dev/sdb3
Volume group "vg01" successfully extended
[root@zfl ~]# vgs vg01
VG #PV #LV #SN Attr VSize VFree
vg01 3 1 0 wz--n- <14.99g <5.99g
[root@zfl ~]#
我们可以看到之前的vg01从10个g变成15个g了