LVM
1.1 lvm的应用场景及其弊端
- 应用场景:
随着公司的发展,数据增长较快,最初规划的磁盘容量不够用了 - 弊端:数据不是直接存放在硬盘上,而是在硬盘的上面又虚拟出来一层逻辑卷存放数据,故而增加了磁盘数据恢复的难度
物理卷、卷组、逻辑卷
物理卷(多块硬盘初始化) > 卷组(虚拟)> 逻辑卷 (进行格式化挂载)
- 物理卷(PV)︰把常规的块设备(硬盘,分区等可以读写数据的设备)通过
pvcreate
命令对其进行初始化,就成了物理卷 - 卷组(VG):把多个物理卷的容量组成一个逻辑整体,可以从里面灵活分配容量
- 逻辑卷(LV):从卷组中划分部分空间成为一个可以读写数据的逻辑单元。需要对其格式化然后挂载使用
LVM
- 部署lvm
- 添加物理磁盘
- 创建卷组,将物理磁盘加入卷组
- 再卷组中划分逻辑卷
- 格式化逻辑卷
- 挂载使用
- 添加物理磁盘
pvcreate 硬盘的位置
[root@system_rookie ~]# pvcreate /dev/nvme0n2
WARNING: dos signature detected on /dev/nvme0n2 at offset 510. Wipe it? [y/n]: y
Wiping dos signature on /dev/nvme0n2.
Physical volume "/dev/nvme0n2" successfully created.
[root@system_rookie ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/nvme0n1p2 rhel lvm2 a-- <19.00g 0
/dev/nvme0n2 lvm2 --- 20.00g 20.00g
- 创建卷组,将物理磁盘加入卷组
vgcreate 卷组名字 物理卷的位置
[root@system_rookie ~]# vgcreate vg0 /dev/nvme0n2
Volume group "vg0" successfully created
[root@system_rookie ~]# vgs
VG #PV #LV #SN Attr VSize VFree
rhel 1 2 0 wz--n- <19.00g 0
vg0 1 0 0 wz--n- <20.00g <20.00g
- 创建逻辑卷
lvcreate -n逻辑卷名字-L逻辑卷大小(+10G)卷组的名字
[root@system_rookie ~]# lvcreate -n lv0 -L +10G vg0
WARNING: xfs signature detected on /dev/vg0/lv0 at offset 0. Wipe it? [y/n]: y
Wiping xfs signature on /dev/vg0/lv0.
Logical volume "lv0" created.
[root@system_rookie ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rhel -wi-ao---- <17.00g
swap rhel -wi-ao---- 2.00g
lv0 vg0 -wi-a----- 10.00g
pvs 查看物理卷的信息
[root@system_rookie ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/nvme0n1p2 rhel lvm2 a-- <19.00g 0
/dev/nvme0n2 vg0 lvm2 a-- <20.00g <10.00g
- 格式化逻辑卷
[root@system_rookie ~]# mkfs.xfs /dev/vg0/lv0
meta-data=/dev/vg0/lv0 isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=2621440, 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, rtexten
- 查看逻辑卷UUID,开启开机自动挂载
[root@system_rookie ~]# blkid /dev/vg0/lv0
/dev/vg0/lv0: UUID="7c4cdb2a-08ce-42b6-a7ea-ef588af937a3" TYPE="xfs"
[root@system_rookie ~]# cat /etc/fstab |tail -1
UUID=7c4cdb2a-08ce-42b6-a7ea-ef588af937a3 /dev/lvm xfs defaults 0 0
/dev/mapper/vg0-lv0 xfs 10G 104M 9.9G 2% /dev/lvm
卷组管理
创建物理卷
[root@system_rookie ~]# pvcreate /dev/nvme0n3
WARNING: dos signature detected on /dev/nvme0n3 at offset 510. Wipe it? [y/n]: y
Wiping dos signature on /dev/nvme0n3.
Physical volume "/dev/nvme0n3" successfully created.
查看已经创建的物理卷
[root@system_rookie ~]# pvs
查看物理卷详细信息
[root@system_rookie ~]# pvdisplay /dev/nvme0n3
扩充卷组
[root@system_rookie ~]# vgextend vg0 /dev/nvme0n3
Volume group "vg0" successfully extended
[root@system_rookie ~]# vgs
VG #PV #LV #SN Attr VSize VFree
rhel 1 2 0 wz--n- <19.00g 0
vg0 2 1 0 wz--n- 39.99g 29.99g
缩减卷组
- vgreduce 卷组名字 物理卷的位置
[root@system_rookie ~]# vgreduce vg0 /dev/nvme0n3
Removed "/dev/nvme0n3" from volume group "vg0"
删除卷组
vgremove 卷组名(卸载状态下才能删除,否则无法删除)
[root@system_rookie ~]# vgremove vg0
Do you really want to remove volume group "vg0" containing 1 logical volumes? [y/n]: y
Do you really want to remove active logical volume vg0/lv0? [y/n]: y
Logical volume "lv0" successfully removed
Volume group "vg0" successfully removed
查看已经创建的卷组
[root@system_rookie ~]# vgs
查看已经创建卷组的详细信息
[root@system_rookie ~]# vgdisplay vg0
逻辑卷管理
- 逻辑卷的扩展取决于逻辑卷组的容量,逻辑卷扩展的容量不能超过逻辑卷组的容量
注意
:扩充后挂载的容量并没有变大,需要启用后才能使用;
扩充逻辑卷组容量
[root@system_rookie ~]# lvextend -L +10G /dev/vg0/lv0
Size of logical volume vg0/lv0 changed from 10.00 GiB (2560 extents) to 20.00 GiB (5120 extents).
Logical volume vg0/lv0 successfully resized.
[root@system_rookie ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rhel -wi-ao---- <17.00g
swap rhel -wi-ao---- 2.00g
lv0 vg0 -wi-ao---- 20.00g
- 查看文件系统类型
```bash
[root@system_rookie ~]# blkid /dev/vg0/lv0
/dev/vg0/lv0: UUID="7c4cdb2a-08ce-42b6-a7ea-ef588af937a3" TYPE="xfs"
缩减逻辑卷
[root@system_rookie ~]# lvreduce -L 5G /dev/vg0/lv0
WARNING: Reducing active logical volume to 5.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg0/lv0? [y/n]: y
Size of logical volume vg0/lv0 changed from 10.00 GiB (2560 extents) to 5.00 GiB (1280 extents).
Logical volume vg0/lv0 successfully resized.
[root@system_rookie ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rhel -wi-ao---- <17.00g
swap rhel -wi-ao---- 2.00g
lv0 vg0 -wi-a----- 5.00g
删除删除逻辑卷
[root@system_rookie ~]# lvremove /dev/vg0/lv0
Do you really want to remove active logical volume vg0/lv0? [y/n]: y
Logical volume "lv0" successfully removed
[root@system_rookie ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rhel -wi-ao---- <17.00g
swap rhel -wi-ao---- 2.00g
注意
:以上的删除操作和缩减下面的缩减容量扩充操作都只能在卸载情况
下使用
启用逻辑卷容量扩充(xfs文件系统类型
)
从上一步可以看到文件系统类型为:xfs,所以应该用xfs_growsfs
命令
可能会遇到这样的报错情况
[root@system_rookie ~]# xfs_growsfs /dev/vg0/lv0
xfs_growfs: /dev/vg0/lv0 is not a mounted XFS filesystem
这是由于xfs_growsfs版本不同导致的
解决办法:将目标文件系统改为挂载点
[root@system_rookie ~]# xfs_growsfs /dev/lvm
[root@system_rookie ~]# df -hT|tail -1
/dev/mapper/vg0-lv0 xfs 25G 211M 25G 1% /dev/lvm
xfs文件系统
不支持缩减启用空间
- 如果是
ext4的文件系统类型
,应该用resize2fs
重新获取大小
- 将逻辑卷扩充到15G
[root@system_rookie ~]# lvextend -L 15G /dev/vg0/lv0
Size of logical volume vg0/lv0 changed from 10.00 GiB (2560 extents) to 15.00 GiB (3840 extents).
Logical volume vg0/lv0 successfully resized.
[root@system_rookie ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rhel -wi-ao---- <17.00g
swap rhel -wi-ao---- 2.00g
lv0 vg0 -wi-ao---- 15.00g
[root@system_rookie ~]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 887M 0 887M 0% /dev
tmpfs tmpfs 904M 8.8M 895M 1% /run
tmpfs tmpfs 904M 0 904M 0% /sys/fs/cgroup
/dev/mapper/rhel-root xfs 17G 4.1G 13G 25% /
tmpfs tmpfs 181M 0 181M 0% /run/user/0
/dev/nvme0n1p1 xfs 1014M 176M 839M 18% /boot
/dev/mapper/vg0-lv0 ext4 9.8G 36M 9.6G 1% /dev/lvm
- 使用
resize2fs
启动扩容空间
[root@system_rookie ~]# resize2fs /dev/vg0/lv0
resize2fs 1.44.6 (5-Mar-2019)
/dev/vg0/lv0 上的文件系统已被挂载于 /dev/lvm;需要进行在线调整大小
old_desc_blocks = 2, new_desc_blocks = 2
/dev/vg0/lv0 上的文件系统现在为 3932160 个块(每块 4k)。
[root@system_rookie ~]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 887M 0 887M 0% /dev
tmpfs tmpfs 904M 8.8M 895M 1% /run
tmpfs tmpfs 904M 0 904M 0% /sys/fs/cgroup
/dev/mapper/rhel-root xfs 17G 4.1G 13G 25% /
tmpfs tmpfs 181M 0 181M 0% /run/user/0
/dev/nvme0n1p1 xfs 1014M 176M 839M 18% /boot
/dev/mapper/vg0-lv0 ext4 15G 40M 15G 1% /dev/lvm
数据迁移
pvmove 需要迁移数据的磁盘路径
[root@system_rookie ~]# pvmove /dev/nvme0n2
/dev/nvme0n2: Moved: 1.52%
/dev/nvme0n2: Moved: 100.00%
注意
:数据会随机迁移到其他磁盘中,不需要指定磁盘
- 迁移前
[root@system_rookie ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/nvme0n1p2 rhel lvm2 a-- <19.00g 0
/dev/nvme0n2 vg0 lvm2 a-- <20.00g <10.00g
/dev/nvme0n3 vg0 lvm2 a-- <20.00g <20.00g
- 迁移后
[root@system_rookie ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/nvme0n1p2 rhel lvm2 a-- <19.00g 0
/dev/nvme0n2 vg0 lvm2 a-- <20.00g <20.00g
/dev/nvme0n3 vg0 lvm2 a-- <20.00g <10.00g
对ext4文件系统的逻辑卷裁剪容量
- 缩减启用空间(
只能在卸载情况下进行
)
##[root@system_rookie ~]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 887M 0 887M 0% /dev
tmpfs tmpfs 904M 8.8M 895M 1% /run
tmpfs tmpfs 904M 0 904M 0% /sys/fs/cgroup
/dev/mapper/rhel-root xfs 17G 4.1G 13G 25% /
tmpfs tmpfs 181M 0 181M 0% /run/user/0
/dev/nvme0n1p1 xfs 1014M 176M 839M 18% /boot
/dev/mapper/vg0-lv0 ext4 9.8G 36M 9.3G 1% /dev/lvm
- 卸载文件系统
[root@system_rookie ~]# umount /dev/vg0/lv0
- 检测文件系统一致性
[root@system_rookie ~]# e2fsck -f /dev/vg0/lv0
e2fsck 1.44.6 (5-Mar-2019)
第 1 步:检查inode、块和大小
第 2 步:检查目录结构
第 3 步:检查目录连接性
第 4 步:检查引用计数
第 5 步:检查组概要信息
/dev/vg0/lv0:11/655360 文件(0.0% 为非连续的), 66744/2621440 块
- 预判扩容空间(
预测能够保存原有文件的容量
)
[root@system_rookie ~]# resize2fs /dev/vg0/lv0 5G
resize2fs 1.44.6 (5-Mar-2019)
将 /dev/vg0/lv0 上的文件系统调整为 1310720 个块(每块 4k)。
/dev/vg0/lv0 上的文件系统现在为 1310720 个块(每块 4k)。
- 裁剪逻辑卷
[root@system_rookie ~]# lvreduce -L 5G /dev/vg0/lv0
WARNING: Reducing active logical volume to 5.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg0/lv0? [y/n]: y
Size of logical volume vg0/lv0 changed from 10.00 GiB (2560 extents) to 5.00 GiB (1280 extents).
Logical volume vg0/lv0 successfully resized.
- 检查文件系统
[root@system_rookie ~]# e2fsck -f /dev/vg0/lv0
e2fsck 1.44.6 (5-Mar-2019)
第 1 步:检查inode、块和大小
第 2 步:检查目录结构
第 3 步:检查目录连接性
第 4 步:检查引用计数
第 5 步:检查组概要信息
/dev/vg0/lv0:11/327680 文件(0.0% 为非连续的), 45158/1310720 块
- 挂载文件系统
[root@system_rookie ~]# mount /dev/vg0/lv0 /dev/lvm/
[root@system_rookie ~]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 887M 0 887M 0% /dev
tmpfs tmpfs 904M 8.8M 895M 1% /run
tmpfs tmpfs 904M 0 904M 0% /sys/fs/cgroup
/dev/mapper/rhel-root xfs 17G 4.1G 13G 25% /
tmpfs tmpfs 181M 0 181M 0% /run/user/0
/dev/nvme0n1p1 xfs 1014M 176M 839M 18% /boot
/dev/mapper/vg0-lv0 ext4 4.9G 33M 4.6G 1% /dev/lvm
缩减逻辑卷注意事项:
8. 不能在线缩减,得先卸载;
9. 确保缩减后的空间大小依然能存储原有的所有数据;
10. 在缩减之前应该先强行检查文件,以确保文件系统处于一致性状态。使用命令e2fsck -f /PATH/TO/LV