在Linux系统中,逻辑卷(Logical Volume,LV)是LVM(Logical Volume Manager,逻辑卷管理器)的核心组件之一,它允许用户灵活地管理磁盘空间,突破传统分区的限制,实现动态扩容、缩减等操作,创建LV的过程涉及物理卷(PV)、卷组(VG)和逻辑卷(LV)的层层管理,下面将详细介绍完整的操作步骤及相关注意事项。
LVM基础概念
在创建LV之前,需先理解LVM的核心组件及其关系:
- 物理卷(Physical Volume,PV):底层物理存储设备,可以是磁盘分区、整块磁盘或LUN(逻辑单元号),PV通过初始化加入LVM管理,其空间会被划分为多个物理扩展(Physical Extent,PE),默认PE大小为4MB(可自定义)。
- 卷组(Volume Group,VG):由一个或多个PV组成,类似一个“存储池”,将分散的物理空间整合为统一的逻辑资源,VG中的PE会统一编号和管理。
- 逻辑卷(Logical Volume,LV):从VG中划分出的逻辑设备,用户可直接格式化并挂载使用,LV的大小由若干PE组成,可根据需求动态调整。
创建LV的完整步骤
准备物理设备
创建LV前需先准备物理设备,可以是未分区的整块磁盘或磁盘分区(类型需为“Linux LVM”,ID为8e),以/dev/sdb
整块磁盘为例(若使用分区,如/dev/sdb1
,操作类似):
# 查看磁盘信息(确认磁盘未挂载且无重要数据) fdisk -l | grep /dev/sdb # 若磁盘已有分区,需先删除(注意:操作会清空数据!) fdisk /dev/sdb # 进入fdisk交互界面,输入'd'删除分区,'w'保存退出
创建物理卷(PV)
使用pvcreate
命令将物理设备初始化为PV:
pvcreate /dev/sdb
执行后可通过以下命令验证PV创建结果:
pvdisplay # 显示PV详细信息 pvscan # 扫描系统中的PV
创建卷组(VG)
使用vgcreate
命令将一个或多个PV组成VG,需指定VG名称和PV路径,可自定义PE大小(默认4MB,通过-s
参数调整):
# 基本语法:vgcreate [VG名称] [PV路径] vgcreate myvg /dev/sdb # 自定义PE大小(如8MB) vgcreate -s 8M myvg /dev/sdb
验证VG创建结果:
vgdisplay # 显示VG详细信息(如PE大小、总PE数等) vgscan # 扫描系统中的VG
创建逻辑卷(LV)
使用lvcreate
命令从VG中划分LV,需指定LV名称、大小(-L
指定绝对大小,-l
指定PE数)及所属VG:
# 基本语法:lvcreate -n [LV名称] -L [大小] [VG名称] # 示例1:创建10GB的LV(名称:mylv) lvcreate -n mylv -L 10G myvg # 示例2:基于PE数创建(假设VG的PE大小为8MB,100个PE=800MB) lvcreate -n mylv -l 100 myvg # 创建精简逻辑卷(Thin Provisioning,适用于超分配场景) # 先创建精简池(Thin Pool),再从池中创建精简LV lvcreate -n mypool -L 20G myvg # 创建20GB精简池 lvcreate -n mythinlv -V 5G -T myvg/mypool # 从精简池创建5GB精简LV
验证LV创建结果:
lvdisplay # 显示LV详细信息(如路径:/dev/myvg/mylv) lvscan # 扫描系统中的LV
格式化LV
创建的LV是空白设备,需格式化文件系统才能使用,常用文件系统为ext4或xfs:
# 格式化为ext4 mkfs.ext4 /dev/myvg/mylv # 格式化为xfs(支持在线扩容,无需调整文件系统) mkfs.xfs /dev/myvg/mylv
挂载LV并设置开机挂载
创建挂载点并挂载LV,同时配置/etc/fstab
实现开机自动挂载:
# 创建挂载点 mkdir /data # 挂载LV mount /dev/myvg/mylv /data # 验证挂载(df -h) df -h | grep /data # 配置开机挂载(编辑/etc/fstab) echo "/dev/myvg/mylv /data ext4 defaults 0 0" >> /etc/fstab # 若为xfs文件系统,替换为:"/dev/myvg/mylv /data xfs defaults 0 0"
LV管理操作(扩容与缩减)
扩容LV
扩容需分两步:先扩容LV本身,再扩容文件系统(ext4需手动调整,xfs支持在线调整)。
-
扩容LV:
# 增加容量(如+5GB) lvextend -L +5G /dev/myvg/mylv
-
扩容文件系统:
# ext4文件系统(需先卸载或在线挂载时使用-L参数) resize2fs /dev/myvg/mylv # 或在线扩容:resize2fs -L +5G /dev/myvg/mylv # xfs文件系统(支持在线扩容) xfs_growfs /data # 挂载点路径
缩减LV
注意:缩减LV有数据丢失风险,操作前务必备份! 需先卸载LV,检查文件系统,再缩减LV和文件系统(仅ext4支持缩减,xfs不支持在线缩减且操作复杂)。
# 1. 卸载LV umount /dev/myvg/mylv # 2. 检查文件系统(ext4) e2fsck -f /dev/myvg/mylv # 3. 缩减文件系统(如缩减到8GB) resize2fs /dev/myvg/mylv 8G # 4. 缩减LV lvreduce -L 8G /dev/myvg/mylv # 5. 重新挂载并验证 mount /dev/myvg/mylv /data df -h | grep /data
常用LVM命令速查表
命令 | 功能描述 | 示例 |
---|---|---|
pvcreate |
初始化物理卷 | pvcreate /dev/sdb |
pvdisplay |
显示PV详细信息 | pvdisplay /dev/sdb |
vgcreate |
创建卷组 | vgcreate myvg /dev/sdb |
vgdisplay |
显示VG详细信息 | vgdisplay myvg |
lvcreate |
创建逻辑卷 | lvcreate -n mylv -L 10G myvg |
lvdisplay |
显示LV详细信息 | lvdisplay /dev/myvg/mylv |
lvextend |
扩容LV | lvextend -L +5G /dev/myvg/mylv |
lvreduce |
缩容LV | lvreduce -L 8G /dev/myvg/mylv |
pvremove |
删除物理卷(需先从VG移除) | pvremove /dev/sdb |
vgreduce |
从VG中移除PV | vgreduce myvg /dev/sdb |
vgremove |
删除卷组(需先删除所有LV) | vgremove myvg |
lvremove |
删除逻辑卷 | lvremove /dev/myvg/mylv |
注意事项
- 数据备份:LVM操作(尤其是缩减、删除)可能导致数据丢失,操作前务必备份重要数据。
- 文件系统兼容性:ext4支持在线扩容和缩减(需卸载),xfs仅支持在线扩容,不支持缩减。
- PE大小选择:PE大小影响LV的最小分配粒度和VG空间利用率,默认4MB适用于大多数场景,大容量存储可适当增大(如16M)。
- 精简逻辑卷:精简池允许分配超过实际物理容量的空间,但需监控使用率,避免因空间耗尽导致数据损坏。
相关问答FAQs
问题1:创建LV时提示“Failed to find physical volume “/dev/sdb””,如何解决?
解答:该错误通常是因为物理设备未初始化为PV,需先执行pvcreate /dev/sdb
创建PV,再创建VG和LV,若设备正在使用(如已挂载),需先卸载:umount /dev/sdb
(若为分区,则卸载对应分区)。
问题2:LV扩容后,文件系统大小未变化(df -h显示未扩容),如何处理?
解答:这是因为LV扩容后仅增加了逻辑空间,文件系统未同步调整,需根据文件系统类型执行对应命令:
- ext4:
resize2fs /dev/myvg/mylv
(若在线挂载,可加-L
指定新大小); - xfs:
xfs_growfs /data
(挂载点路径,支持在线扩容)。
若仍无变化,检查VG是否有足够剩余空间(vgdisplay myvg
查看“Free PE”),若不足需先扩容VG(添加新PV并vgextend
)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/38239.html