本文为云贝教育 刘老师 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。
一、什么是LVM
LVM,全称为Logical Volume Manager(逻辑卷管理器),是一种在Linux操作系统和其他类Unix系统中用于管理磁盘和分区的高级机制。LVM提供了一种灵活的方式来管理存储,允许用户动态调整存储空间大小、创建和管理卷,而无需关心底层物理磁盘的具体布局。LVM通过在硬盘和分区之间添加一个抽象层,使得存储管理更加灵活和高效。
LVM的核心概念包括:
- 物理卷(Physical Volume, PV):这是LVM中的基础存储单元,通常对应一个硬盘或分区。在硬盘或分区上创建PV之前,它们必须被初始化为LVM格式。
- 卷组(Volume Group, VG):卷组是由一个或多个物理卷组成,构成了一个存储池。从这个存储池中可以创建逻辑卷。卷组的大小等于构成它的所有物理卷的总容量。
- 逻辑卷(Logical Volume, LV):逻辑卷是从卷组中分配的虚拟分区,对用户和应用程序来说,逻辑卷就像是常规的硬盘分区。用户可以在逻辑卷上创建文件系统并挂载使用。逻辑卷的大小可以动态调整,而不受物理磁盘布局的限制。
LVM的架构如下图所示:
二、为什么要使用LVM
使用Logical Volume Manager (LVM)的原因众多,它为存储管理提供了灵活性、可扩展性和易管理性,以下是LVM的主要优势:
- 动态卷管理:LVM允许在不中断服务的情况下动态调整存储卷的大小(扩大或缩小),这对于应对不可预测的数据增长或变化的需求非常有用。
- 存储资源整合:可以将多个物理磁盘或分区整合成一个或多个卷组(VG),从而跨越多个物理磁盘提供逻辑卷(LV),这有助于更高效地利用存储资源。
- 数据迁移与平衡:在不中断服务的情况下,可以方便地移动逻辑卷到不同的物理卷上,便于数据迁移或负载均衡。
- 易恢复性:在发生硬盘故障时,可以迅速将逻辑卷迁移到健康的物理卷上,减少数据丢失的风险,提高系统恢复速度。
- 快照功能:LVM支持创建卷的快照,这对于数据备份、系统测试和恢复策略非常重要,可以在不影响生产环境的情况下进行数据备份或测试操作。
- 高级数据布局:通过逻辑卷可以实现数据条带化(提升读写速度)和镜像(增加数据冗余),提升存储性能和可靠性。
- 管理便捷性:LVM提供了一个统一的管理接口,使得管理复杂的存储布局变得简单,无论是添加新硬盘、调整卷大小还是管理存储策略,都可以通过简单的命令完成。
- 适应云环境:在云环境中,LVM的灵活性和动态扩展能力与云服务的“按需分配”原则相契合,尤其在云原生数据库如TDSQL-C PostgreSQL版中,LVM的存算分离架构设计能进一步提升存储的弹性、可用性和性能。
三、使用示例
接下来,我们将在kylin v10版本中演示如何管理LVM
3.1 创建物理卷组
1)使用vmware添加两块磁盘
2)检查当前磁盘信息
lsblk
如果返回以下命令,则说明LVM可以使用实例上的sda和sdb磁盘创建可扩展的LV。
[root@db1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
sdb 8:16 0 20G 0 disk
sr0 11:0 1 1024M 0 rom
nvme0n1 259:0 0 100G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
└─nvme0n1p2 259:2 0 99G 0 part
├─klas-root 253:0 0 65.1G 0 lvm /
├─klas-swap 253:1 0 2G 0 lvm [SWAP]
└─klas-backup 253:2 0 31.8G 0 lvm
3)运行以下命令从磁盘创建 PV。
[root@db1 ~]# pvcreate /dev/sda /dev/sdb
Physical volume "/dev/sda" successfully created.
Physical volume "/dev/sdb" successfully created.
4) 查看当前的物理卷组
[root@db1 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/nvme0n1p2 klas lvm2 a-- <99.00g 0
/dev/sda vg_01 lvm2 a-- <20.00g <20.00g
/dev/sdb vg_01 lvm2 a-- <20.00g <20.00g
5)查看物理卷组详细信息
[root@db1 ~]# pvdisplay
--- Physical volume ---
PV Name /dev/nvme0n1p2
VG Name klas
PV Size <99.00 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 25343
Free PE 0
Allocated PE 25343
PV UUID kloVNL-U91m-IcuS-oiaG-Tb9z-pWv2-f6azHu
--- Physical volume ---
PV Name /dev/sda
VG Name vg_01
PV Size 20.00 GiB / not usable 4.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 5119
Free PE 0
Allocated PE 5119
PV UUID PXgoOr-8qDY-0Zmn-5K3E-JbJ1-f1kk-yvA6Nz
--- Physical volume ---
PV Name /dev/sdb
VG Name vg_01
PV Size 20.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 5119
Free PE 3838
Allocated PE 1281
PV UUID SLBB1J-RXyz-Rvbh-T8It-qIBH-CfU9-R1Wbad
3.2 创建卷组(VG)
1)创建名为 vg_01 的 VG,包含物理卷/dev/vdb 和 /dev/vdc。
[root@db1 ~]# vgcreate vg_01 /dev/sda /dev/sdb
Volume group "vg_01" successfully created
2)执行以下命令查询VG信息:
[root@db1 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
klas 1 3 0 wz--n- <99.00g 0
vg_01 2 0 0 wz--n- 39.99g 39.99g
VG的大小小于40GB,因为文件系统占用VG中的存储空间。
3.3 创建逻辑组(LV)
1)创建名为lv01的LV,大小为25g。
[root@db1 ~]# lvcreate -L 25g -n lv01 vg_01
Logical volume "lv01" created
2) 执行以下命令查询VG信息:
[root@db1 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
backup klas -wi-a----- <31.81g
root klas -wi-ao---- 65.14g
swap klas -wi-ao---- 2.04g
lv01 vg_01 -wi-a----- 25.00g
3.4 创建并挂载文件系统
1)获取LV的路径、名称、所属VG等信息。
[root@db1 ~]# lvdisplay
--- Logical volume ---
LV Path /dev/klas/swap
LV Name swap
VG Name klas
LV UUID 50EAfU-bLFl-CFp6-fmM9-XbU3-xI9V-LNRKdJ
LV Write Access read/write
LV Creation host, time localhost, 2024-07-02 01:36:10 +0800
LV Status available
# open 2
LV Size 2.04 GiB
Current LE 523
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:1
--- Logical volume ---
LV Path /dev/klas/backup
LV Name backup
VG Name klas
LV UUID XR09On-CHMm-SxTA-2qCP-DfYc-fRWq-vco0hN
LV Write Access read/write
LV Creation host, time localhost, 2024-07-02 01:36:10 +0800
LV Status available
# open 0
LV Size <31.81 GiB
Current LE 8143
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
--- Logical volume ---
LV Path /dev/klas/root
LV Name root
VG Name klas
LV UUID Lfmf68-y4FC-938i-TT5t-IBY8-9hpX-fQTNmY
LV Write Access read/write
LV Creation host, time localhost, 2024-07-02 01:36:10 +0800
LV Status available
# open 1
LV Size 65.14 GiB
Current LE 16677
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
--- Logical volume ---
LV Path /dev/vg_01/lv01
LV Name lv01
VG Name vg_01
LV UUID 4Z9OQ1-d73H-JTKd-HSHO-E4Zy-Pdi0-nSpQGS
LV Write Access read/write
LV Creation host, time db1, 2024-07-02 05:26:25 +0800
LV Status available
# open 0
LV Size 25.00 GiB
Current LE 6400
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:3
2) 格式化LV
[root@db1 ~]# mkfs.ext4 /dev/vg_01/lv01
mke2fs 1.45.6 (20-Mar-2020)
Creating filesystem with 6553600 4k blocks and 1638400 inodes
Filesystem UUID: 35d21ce0-d3c7-4252-86ba-329b0e953a91
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: done
Writing inode tables:
done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
3) 创建挂载点
mkdir /data
4)执行以下命令将文件系统挂载到挂载点:
mount /dev/vg_01/lv01 /data
5) 查看挂载情况
[root@db1 ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 954M 0 954M 0% /dev
tmpfs tmpfs 981M 16K 981M 1% /dev/shm
tmpfs tmpfs 981M 9.4M 972M 1% /run
tmpfs tmpfs 981M 0 981M 0% /sys/fs/cgroup
/dev/mapper/klas-root xfs 66G 7.8G 58G 12% /
tmpfs tmpfs 981M 4.0K 981M 1% /tmp
/dev/nvme0n1p1 xfs 1014M 176M 839M 18% /boot
tmpfs tmpfs 197M 32K 197M 1% /run/user/0
/dev/mapper/vg_01-lv01 ext4 25G 45M 24G 1% /data
3.5 配置自动挂载
注意:fstab里的挂载路径不要写错,否则重启OS将报错。
1)备份fstab
cp /etc/fstab /etc/fstab.bak
2) 配置fstab
• UUID方式
sh -c "echo `blkid /dev/vg_01/lv01 | awk '{print $2}' | sed 's/\"//g'` /data ext4 defaults 0 0 >> /etc/fstab"
• 路径方式
sh -c "echo /dev/mapper/vg_01-lv01 /data ext4 defaults 0 0 >> /etc/fstab"
3)验证自动挂载
[root@db1 ~]# umount /data
[root@db1 ~]# mount -a
4) 检验挂载情况
[root@db1 ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 954M 0 954M 0% /dev
tmpfs tmpfs 981M 16K 981M 1% /dev/shm
tmpfs tmpfs 981M 9.4M 972M 1% /run
tmpfs tmpfs 981M 0 981M 0% /sys/fs/cgroup
/dev/mapper/klas-root xfs 66G 7.8G 58G 12% /
tmpfs tmpfs 981M 4.0K 981M 1% /tmp
/dev/nvme0n1p1 xfs 1014M 176M 839M 18% /boot
tmpfs tmpfs 197M 32K 197M 1% /run/user/0
/dev/mapper/vg_01-lv01 ext4 25G 45M 24G 1% /data
四、总结
- 安全兼容性:麒麟V10操作系统强调与国产硬件的兼容性和安全性,使用国产LVM配置能够更好地与国产服务器、存储设备协同工作,确保数据安全性符合国家信息安全标准。
- 自主可控:通过使用国产操作系统进行LVM配置,减少对外部技术依赖,增强系统的自主可控能力,符合国家安全战略需求。
- 生态集成:麒麟V10支持的LVM配置与国产生态系统紧密集成,确保在政府、金融、教育等重要领域应用时,能够与其他国产软件和服务无缝对接。