当前位置: 首页 > java >正文

运维实施36-逻辑卷管理 (LVM)

逻辑卷介绍

逻辑卷是使用逻辑卷组管理(Logic Volume Manager)创建出来的设备。

要了解逻辑卷,首先需要理解LVM中的几个核心概念:

  • 物理卷(Physical Volume, PV):物理磁盘分区 ==fdisk==。

  • 卷组(Volume Group, VG):PV的集合,是物理存储资源的池。

  • 逻辑卷(Logic Volume, LV):从VG中划分出来的一块逻辑磁盘空间。

  • 物理区域(Physical Extent, PE):每个物理卷被划分为大小相同的基本单元,默认4MB,是LVM可寻址的最小单位。

  • 逻辑区域(Logical Extent, LE):逻辑卷的基本单位,与PE大小相同并一一对应。

逻辑卷的工作流程:物理磁盘或磁盘分区转换为物理卷,一个或多个物理卷组成卷组,从卷组中划分出逻辑卷。

为什么使用逻辑卷

相比直接使用物理磁盘分区,逻辑卷主要有两个优势:

  • 大容量存储管理:可以将多个小容量的物理磁盘聚合为一个大的逻辑磁盘。例如,需要30TB的/data存储,单个物理磁盘无法满足,但多个物理磁盘组成的逻辑卷可以。

  • 动态调整容量:业务初期难以准确预估所需磁盘空间,使用逻辑卷可以根据实际需求灵活扩展或收缩容量。

磁盘与LVM的关系

逻辑卷管理中的各层次关系:

  • 硬盘 -> 分区(part) → 物理卷(PV) → 卷组(VG) → 逻辑卷(LV) → 格式化 → 挂载使用

数据块大小对比:

  • 硬盘读取数据最小单位:1个扇区 = 512字节

  • 操作系统读取数据最小单位:1个数据块 = 4KB = 8个扇区

  • LVM寻址最小单位:1个PE = 4MB = 1024个数据块

逻辑卷LVM应用

创建逻辑卷的思路

  1. 准备物理设备(fdisk)

  2. 将物理设备转换为物理卷

  3. 创建卷组并将物理卷加入

  4. 在卷组上创建逻辑卷

  5. 格式化逻辑卷

  6. 挂载使用

逻辑卷创建实例

需求:创建一个2.5G大小的逻辑卷

首先,将两个物理分区转换为物理卷:

==pvcreate== ==pvs== ==pvdisplay==

# 将/dev/sdb1转换为物理卷
[root@localhost ~]# pvcreate /dev/sdb1Physical volume "/dev/sdb1" successfully created.# 将/dev/sdb2转换为物理卷
[root@localhost ~]# pvcreate /dev/sdb2Physical volume "/dev/sdb2" successfully created.

 查看物理卷信息:

# 查看所有物理卷的简要信息
[root@localhost ~]# pvsPV         VG     Fmt  Attr PSize   PFree/dev/sda2  centos lvm2 a--  <19.00g    0/dev/sdb1         lvm2 ---    2.00g 2.00g/dev/sdb2         lvm2 ---    2.00g 2.00g# 查看指定物理卷的详细信息
[root@localhost ~]# pvdisplay /dev/sdb1"/dev/sdb1" is a new physical volume of "2.00 GiB"--- NEW Physical volume ---PV Name               /dev/sdb1VG NamePV Size               2.00 GiBAllocatable           NOPE Size               0Total PE              0Free PE               0Allocated PE          0PV UUID               nrgMce-USoG-nEyH-6YT1-f2y7-V4y1-zsdRnS

创建卷组并将物理卷加入:

==vgcreate== ==vgs==

# 创建名为vg01的卷组,包含两个物理卷
[root@localhost ~]# vgcreate vg01 /dev/sdb1 /dev/sdb2Volume group "vg01" successfully created# 查看卷组信息
[root@localhost ~]# vgsVG     #PV #LV #SN Attr   VSize   VFreecentos   1   2   0 wz--n- <19.00g    0vg01     2   0   0 wz--n-   3.99g 3.99g

创建逻辑卷:

==lvcreate== ==lvs== ==lvdisplay==

# 在vg01卷组上创建名为lv01的2.5G逻辑卷
[root@localhost ~]# lvcreate -n lv01 -L 2.5G vg01Logical volume "lv01" created.# 查看逻辑卷信息
[root@localhost ~]# lvsLV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convertroot centos -wi-ao---- <17.00gswap centos -wi-ao----   2.00glv01 vg01   -wi-a-----   2.50g# 查看块设备信息,可以看到逻辑卷的结构
[root@localhost ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk
|-sda1            8:1    0    1G  0 part /boot
`-sda2            8:2    0   19G  0 part|-centos-root 253:0    0   17G  0 lvm  /`-centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   10G  0 disk
|-sdb1            8:17   0    2G  0 part
| `-vg01-lv01   253:2    0  2.5G  0 lvm
`-sdb2            8:18   0    2G  0 part`-vg01-lv01   253:2    0  2.5G  0 lvm
sr0              11:0    1  9.6G  0 rom

格式化逻辑卷为ext4文件系统:

[root@localhost vg01]# mkfs.ext4 /dev/vg01/lv01
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
163840 inodes, 655360 blocks
32768 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=671088640
20 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:32768, 98304, 163840, 229376, 294912Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

查看文件系统UUID并挂载:

# 查看逻辑卷的UUID和文件系统类型
[root@localhost vg01]# blkid /dev/vg01/lv01
/dev/vg01/lv01: UUID="ba4cc7c2-6190-41a0-8808-20a8312ae2a1" TYPE="ext4"# 创建挂载点并挂载逻辑卷
[root@localhost vg01]# mkdir /u01
[root@localhost vg01]# mount /dev/vg01/lv01 /u01# 确认挂载成功
[root@localhost vg01]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk
|-sda1            8:1    0    1G  0 part /boot
`-sda2            8:2    0   19G  0 part|-centos-root 253:0    0   17G  0 lvm  /`-centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   10G  0 disk
|-sdb1            8:17   0    2G  0 part
| `-vg01-lv01   253:2    0  2.5G  0 lvm  /u01
`-sdb2            8:18   0    2G  0 part`-vg01-lv01   253:2    0  2.5G  0 lvm  /u01
sr0              11:0    1  9.6G  0 rom
创建逻辑卷的选项说明

逻辑卷创建时有两种指定大小的方式:

  • -L:直接指定容量大小,如-L 2.5G

  • -l:指定PE个数或剩余空间百分比

    • PE是LVM最小单位,1PE=4MB,如-l 100创建400MB的逻辑卷

    • 百分比使用,如-l 100%free使用全部剩余空间

查看卷组详细信息,了解PE分配情况:

[root@localhost vg01]# vgdisplay vg01--- Volume group ---VG Name               vg01System IDFormat                lvm2Metadata Areas        2Metadata Sequence No  2VG Access             read/writeVG Status             resizableMAX LV                0Cur LV                1Open LV               1Max PV                0Cur PV                2Act PV                2VG Size               3.99 GiBPE Size               4.00 MiBTotal PE              1022Alloc PE / Size       640 / 2.50 GiBFree  PE / Size       382 / 1.49 GiBVG UUID               oOMYwR-okaZ-Cbaj-FbCa-vsE2-8urR-MM9fB1

创建使用指定PE数量和全部剩余空间的逻辑卷:

# 创建100个PE大小的逻辑卷lv02
[root@localhost vg01]# lvcreate -n lv02 -l 100 vg01Logical volume "lv02" created.
[root@localhost vg01]# lvsLV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convertroot centos -wi-ao---- <17.00gswap centos -wi-ao----   2.00glv01 vg01   -wi-ao----   2.50glv02 vg01   -wi-a----- 400.00m# 查看卷组剩余空间
[root@localhost vg01]# vgsVG     #PV #LV #SN Attr   VSize   VFreecentos   1   2   0 wz--n- <19.00g    0vg01     2   2   0 wz--n-   3.99g 1.10g# 创建使用全部剩余空间的逻辑卷lv03
[root@localhost vg01]# lvcreate -n lv03 -l100%free vg01Logical volume "lv03" created.
[root@localhost vg01]# lvsLV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convertroot centos -wi-ao---- <17.00gswap centos -wi-ao----   2.00glv01 vg01   -wi-ao----   2.50glv02 vg01   -wi-a----- 400.00mlv03 vg01   -wi-a-----   1.10g

删除逻辑卷组件

删除逻辑卷相关组件的命令:

  • lvremove:删除逻辑卷

  • vgremove:删除卷组

  • pvremove:删除物理卷

示例:删除逻辑卷lv03

[root@localhost vg01]# lvremove /dev/vg01/lv03
Do you really want to remove active logical volume vg01/lv03? [y/n]: yLogical volume "lv03" successfully removed

注意事项:

  • 如果逻辑卷正在使用中,需要先取消挂载再删除

  • 删除物理卷前,如存在对应卷组,需使用vgreduce从卷组中移除:vgreduce vg01 /dev/sdb2

逻辑卷动态扩容

需求:将/u01目录动态扩容到3G

扩容思路:

  1. 查看/u01目录对应的逻辑卷

  2. 检查该逻辑卷所在卷组的剩余空间是否足够

  3. 如卷组空间不够,先扩容卷组,再扩容逻辑卷

  4. 如卷组空间足够,直接扩容逻辑卷

检查当前挂载和空间情况:

[root@localhost vg01]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 3.8G     0  3.8G   0% /dev
tmpfs                    3.9G     0  3.9G   0% /dev/shm
tmpfs                    3.9G   13M  3.8G   1% /run
tmpfs                    3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/mapper/centos-root   17G  9.7G  7.4G  57% /
/dev/sda1               1014M  187M  828M  19% /boot
tmpfs                    781M   12K  781M   1% /run/user/42
tmpfs                    781M     0  781M   0% /run/user/0
/dev/mapper/vg01-lv01    1.5G  4.5M  1.4G   1% /u01

使用空闲物理设备扩容卷组:

[root@localhost vg01]# vgextend vg01 /dev/sdb2Physical volume "/dev/sdb2" successfully created.Volume group "vg01" successfully extended

扩容逻辑卷:

[root@localhost vg01]# lvextend /dev/vg01/lv01 -L +1.5GSize of logical volume vg01/lv01 changed from 1.50 GiB (384 extents) to 3.00 GiB (768 extents).Logical volume vg01/lv01 successfully resized.[root@localhost vg01]# lvsLV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convertroot centos -wi-ao---- <17.00gswap centos -wi-ao----   2.00glv01 vg01   -wi-ao----   3.00g

调整文件系统大小以匹配逻辑卷:

[root@localhost ~]# resize2fs /dev/vg01/lv01
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vg01/lv01 is mounted on /u01; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/vg01/lv01 is now 786432 blocks long.[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 3.8G     0  3.8G   0% /dev
tmpfs                    3.9G     0  3.9G   0% /dev/shm
tmpfs                    3.9G   13M  3.8G   1% /run
tmpfs                    3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/mapper/centos-root   17G  9.7G  7.4G  57% /
/dev/sda1               1014M  187M  828M  19% /boot
tmpfs                    781M  8.0K  781M   1% /run/user/42
tmpfs                    781M     0  781M   0% /run/user/0
/dev/mapper/vg01-lv01    3.0G  4.5M  2.8G   1% /u01

完成扩容后,可以看到/u01目录已从1.5G扩容到3.0G,而且是在线扩容,无需卸载文件系统。

http://www.xdnf.cn/news/8506.html

相关文章:

  • 【国产OS】国产麒麟OS部署个人方法汇总
  • VirtualBox 4.3.10 经典版安装教程 - Windows 7/10 下载与设置指南
  • GESP编程等级认证C++三级8-字符串1
  • 【Day34】
  • 一文详解 HLS
  • siparmyknife:SIP协议渗透测试的瑞士军刀!全参数详细教程!Kali Linux教程!
  • Python 训练营打卡 Day 33
  • AI浪潮下,媒体内容运营的五重变奏
  • 安卓新建项目时,Gradle下载慢下载如何用国内的镜像
  • 什么是Express
  • MCP Server 实践之旅第 3 站:MCP 协议亲和性的技术内幕
  • Vue组件化与生命周期:打造灵活高效的前端积木世界
  • 低代码平台搭建
  • VueRouter路由组件的用法介绍
  • Seismic source model -- Brune model ( ω^2 model)
  • 有两个Python脚本都在虚拟环境下运行,怎么打包成一个系统服务,按照顺序启动?
  • 班迪录屏--解决视频剪辑时声音和画面不同步的问题
  • 【COMSOL超材料和超表面仿真设计】
  • Gemma 3n:更智能、更快速、随时离线的AI新纪元
  • leetcode3434. 子数组操作后的最大频率-medium
  • Google Play 账号创建及材料准备
  • 详解MySQL锁机制
  • Python实现栈和队列及其应用场景解析
  • 继续对《道德经》第57章至第81章进行数学形式化建模
  • 高压电工工作内容详解
  • 【PhysUnits】8 关联常量泛型(constant/mod.rs)
  • Oracle 11g导出数据库结构和数据
  • 基于Java的仓库库存管理系统的设计与实现|参考|1w字+
  • 每日一练,冲进国赛!全国青少年信息素养大赛-图形化编程—省赛真题——小鸡吃东西
  • Java注解运行时访问与处理技术详解