【Linux】LVM理论介绍、实战操作

一、LVM理论介绍

1.1 标准分区与LVM的基本概念

标准分区(Standard Partition) 是直接创建在物理磁盘上的传统分区方式,包括主分区、扩展分区和逻辑分区。它们是静态的,一旦创建后大小就固定不变(除非使用特殊工具调整)。

逻辑卷管理(Logical Volume Manager, LVM) ,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。

LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。如果我们新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性。

1.2 标准分区与LVM的区别

1.3 标准分区与LVM的架构对比

  • 标准分区架构
bash 复制代码
物理磁盘 → 分区表(MBR/GPT) → 主分区/扩展分区 → 文件系统

MBR分区表最多支持4个主分区(或3个主分区+1个扩展分区),而GPT分区表则突破了这一限制,同时支持更大的磁盘容量。
  • LVM架构
bash 复制代码
物理磁盘 → 物理卷(PV) → 卷组(VG) → 逻辑卷(LV) → 文件系统

1.4 LVM基本概念

  • PV (Physical Volume):物理卷
    物理卷是LVM的基本存储单元。它可以是一个完整的物理磁盘或磁盘分区。物理卷是LVM中用于创建卷组的基础元素。
  • VG (Volume Group):卷组
    卷组是由一个或多个物理卷组成的存储池。卷组将物理卷的存储空间整合在一起,为逻辑卷的创建提供统一的存储资源。卷组可以动态地添加或移除物理卷,以调整其存储容量。一个卷组中至少要包括一个物理卷。
  • LV (Logical Volume):逻辑卷
    逻辑卷是从卷组中分配出来的存储空间。它类似于传统分区,但具有更大的灵活性。逻辑卷可以动态地调整大小,而不会影响其中的数据。逻辑卷可以用于创建和管理文件系统,从而方便地扩展或缩小存储空间。多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组。
  • PE (Physical Extent):物理扩展
    物理扩展是卷组内的最小分配单元。每个物理卷在被加入卷组时都会被划分成若干个大小相等的PE。
    逻辑卷也是由这些PE组成的。PE使得LVM可以灵活地管理和分配存储空间。
    PE的大小是可配置的,默认为4MB。PE的大小一旦确定将不能改变,同一个卷组中的所有物理卷的PE的大小是一致的。
    LVM最多可以创建出65534个PE,因此LVM最大的VG卷组是256G。

1.5 LVM原理图

1.6 LVM常用的部署命令

二、LVM创建

2.1 服务器新增两块磁盘

服务器新添加两块磁盘后,Linux系统并不能直接识别到,因为连接存储设备的SCSI总线需要重新扫描,才能识别到这些新的存储设备。

bash 复制代码
# 查看主机总线号 
ls /sys/class/scsi_host/   

# 重新扫描SCSI总线来添加设备
echo "- - -" > /sys/class/scsi_host/host0/scan
echo "- - -" > /sys/class/scsi_host/host1/scan
echo "- - -" > /sys/class/scsi_host/host2/scan

# 查看新添加的磁盘
lsblk

2.2 安装lvm相关软件包

bash 复制代码
yum install lvm2 lvm2-libs -y

2.3 创建物理卷

powershell 复制代码
# 创建PV
pvcreate /dev/sdb /dev/sdc

# 查看PV信息
pvdisplay
pvs
pvscan

2.4 创建卷组

powershell 复制代码
# 创建VG(默认PE大小为4MB)
vgcreate vg_data /dev/sdb /dev/sdc

# 指定PE大小
vgcreate -s 16M vg_data /dev/sdb1

# 查看VG信息
vgdisplay
vgs

2.5 创建逻辑卷

powershell 复制代码
# 创建第一个LV,容量为5G
lvcreate -L 5G -n lv_data1 vg_data

# 创建第二个LV,-l 指定PE个数,一个PE默认为4MB
lvcreate -l 200 -n lv_data2 vg_data

# 创建第三个LV,将剩余的全部的100%空间分给它
lvcreate -l 100%FREE -n lv_data3 vg_data

# 查看LV信息
lvdisplay
lvs

2.6 创建文件系统

powershell 复制代码
# xfs文件系统
mkfs.xfs /dev/vg_data/lv_data1
mkfs.xfs /dev/vg_data/lv_data2
mkfs.xfs /dev/vg_data/lv_data3

# ext4文件系统
mkfs.ext4 /dev/vg_data/lv_data1

2.7 挂载逻辑卷

powershell 复制代码
# 创建挂载点
mkdir {/data1,/data2,/data3}

# 手动挂载
mount /dev/vg_data/lv_data1 /data1
mount /dev/vg_data/lv_data2 /data2
mount /dev/vg_data/lv_data3 /data3

# 开机自动挂载
echo "/dev/vg_data/lv_data1  /data1 xfs defaults 0 0 " >> /etc/fstab
echo "/dev/vg_data/lv_data2  /data2 xfs defaults 0 0 " >> /etc/fstab
echo "/dev/vg_data/lv_data3  /data3 xfs defaults 0 0 " >> /etc/fstab
mount -a

⚠️ /dev/vg_data/lv_data1 和 /dev/mapper/vg_data-lv_data1 属于软链接关系,两者指向同一 LVM 逻辑卷设备,仅访问路径形式不同。

三、LVM扩容

3.1 扩展VG

  • 新增加一块磁盘/dev/sdc
powershell 复制代码
# 1. 创建PV
pvcreate /dev/sdc

# 2. 扩展VG
vgextend vg_data /dev/sdc

# 3. 查看扩展后的VG
vgdisplay vg_data

3.2 扩展LV

powershell 复制代码
# 扩展 LV 大小(增加10G)
lvextend -L+10G /dev/vg_data/lv_data1

# 或指定LV大小
lvextend -L 30G /dev/vg_data/lv_data2

3.3 扩展文件系统

powershell 复制代码
# 对于 XFS
xfs_growfs /dev/vg_data/lv_data1

# 对于 ext4
resize2fs /dev/vg_data/lv_data1

⚠️XFS文件系统原生不支持「在线缩容」,也无官方缩容工具(仅支持扩容),直接缩容会导致文件系统损坏!若必须缩容,需通过「备份数据 → 卸载并删除文件系统 → 缩容逻辑卷 → 重建 XFS 文件系统 → 恢复数据」的流程实现。

相关推荐
ITKEY_22 分钟前
emacs 文件管理Dired, the Directory Editor
linux·编辑器·emacs
源图客26 分钟前
解决CentOS操作系统网络异常问题
linux·运维·centos
HideF10 小时前
Linux sudo
linux
FlightYe11 小时前
视界原理之3D视频(四):裸眼、眼镜和头显
android·linux·c++·3d·ffmpeg·音视频
蹊黎11 小时前
Linux 下用 C 语言实现进度条
linux·c语言·单片机
牛马鸡niumasi13 小时前
【Linux】C语言文件操作
linux
say_fall13 小时前
【Linux系统编程】Ext 文件系统:磁盘与存储、文件与目录、现代计算机究竟如何寻找文件
linux·运维·服务器·数据库·c++
wacsii14 小时前
【Linux进程(一)】Linux 进程初探:操作系统如何管理进程?fork() 为什么返回两次?
linux·运维·服务器
AI+程序员在路上14 小时前
RV1126B 上支持的模型及全流程应用--从CNN及语音到 LLMVLM 与跨平台选型
linux·c语言·人工智能
默|笙14 小时前
【Linux网络】传输层协议TCP(1)---TCP报文介绍
linux·网络·tcp/ip