lvcreate命令详解
一、命令概述
lvcreate
是 lvm(逻辑卷管理)工具集中用于创建逻辑卷(lv) 的核心命令,支持创建多种类型的逻辑卷,包括线性卷、条带化卷、镜像卷、raid卷、快照卷、瘦池(thin pool)及缓存池(cache pool)等。
其核心功能是从卷组(vg)中分配物理扩展(pe),为新逻辑卷分配空间,并根据指定类型配置存储策略(如条带化提升性能、raid提供冗余),适用于灵活管理存储资源、满足不同性能和可靠性需求的场景。
二、语法格式
lvcreate
的语法根据逻辑卷类型不同而有所变化,基本结构如下:
lvcreate [选项]... 卷组名[\/逻辑卷名]
参数说明:
选项
:控制逻辑卷的类型、大小、分配策略、激活状态等(详细选项见下文)。卷组名
:目标卷组(vg)的名称,新逻辑卷将在该卷组中创建。逻辑卷名
:可选,通过-n|--name
指定,未指定时默认生成以lvol
为前缀的名称(如lvol0
)。
三、核心功能
lvcreate
支持创建多种类型的逻辑卷,适配不同存储需求,核心类型及特点如下:
逻辑卷类型 | 特点与用途 |
---|---|
线性卷(linear) | 最基础的lv类型,空间连续分配,适用于普通存储场景。 |
条带化卷(striped) | 数据分散存储在多个物理卷(pv)上,提升读写性能,适合大文件频繁访问场景。 |
raid卷(raid) | 支持raid1/4/5/6/10等级别,提供数据冗余或性能优化(如raid1镜像、raid5奇偶校验)。 |
镜像卷(mirror) | 数据同步到多个镜像副本,提供高可用性(传统实现,推荐优先使用raid1)。 |
快照卷(snapshot) | 基于源lv创建只读/可写快照,用于备份或测试(分为cow快照和瘦快照)。 |
瘦池(thin-pool) | 支持瘦 provisioning(按需分配空间),提高存储利用率,适合动态扩展场景。 |
缓存池(cache-pool) | 结合高速存储(如ssd)加速慢速存储(如hdd)的访问,提升读写性能。 |
四、选项详解
1. 基本配置选项(必选)
选项 | 长选项 | 说明 |
---|---|---|
-l 大小 | --size 大小 | 指定逻辑卷的实际大小(如 10g、500m),单位支持 k(kib)、m(mib)、g(gib)等(基础2进制单位)。 |
-l 数量[%] | --extents 数量[%] | 以逻辑扩展(le)数指定大小,可搭配百分比: - 100%vg:使用卷组全部空间; - 50%free:使用卷组空闲空间的50%; - 20%origin(快照用):使用源lv大小的20%作为cow空间。 |
-n 名称 | --name 名称 | 指定新逻辑卷的名称(如 -n data_lv)。 |
2. 类型与功能选项(核心)
选项 | 长选项 | 说明 |
---|---|---|
--type 类型 | - | 指定逻辑卷类型: - linear:线性卷(默认); - striped:条带化卷; - raid1/5/6/10:raid卷; - mirror:镜像卷; - snapshot:快照卷; - thin:瘦卷; - thin-pool:瘦池; - cache/cache-pool:缓存卷/缓存池。 |
-i 数量 | --stripes 数量 | 条带化卷或raid卷的条带数(即分散的pv数量),如 -i 3 表示数据分散到3个pv。 |
-i 大小 | --stripesize 大小 | 条带化卷或raid卷的条带大小(如 64k),即每个pv上连续写入的数据量。 |
-m 数量 | --mirrors 数量 | 镜像卷或raid1的镜像副本数(不含原始数据),如 -m 1 表示1个副本(共2份数据)。 |
-s | --snapshot | 创建快照卷,需指定源lv(如 lvcreate -s vg00/origin_lv)。 |
-v 大小 | --virtualsize 大小 | 瘦卷(thin lv)的虚拟大小(实际空间按需分配),如 -v 100g 表示虚拟100gib。 |
--thinpool 瘦池名 | - | 为瘦卷指定关联的瘦池(如 --thinpool tp01)。 |
3. 激活与分配选项
选项 | 长选项 | 说明 |
---|---|---|
-a y|n|ay | --activate y|n|ay | 控制新lv的激活状态: - y:创建后立即激活(默认); - n:不激活; - ay:自动激活(仅匹配 lvm.conf 配置的lv)。 |
--alloc 策略 | - | 物理扩展(pe)的分配策略: - normal:默认策略(避免条带在同一pv); - contiguous:连续分配; - anywhere:允许任意分配(可能降低性能)。 |
4. 高级选项(特定场景)
选项 | 长选项 | 说明 |
---|---|---|
-c 大小 | --chunksize 大小 | 快照、瘦池或缓存池的块大小(如 64k),影响空间分配粒度。 |
--mirrorlog core|disk | - | 镜像卷的日志类型: - disk:持久化日志(需额外pv); - core:内存日志(重启后需重新同步)。 |
--nosync | - | 创建raid或镜像卷时跳过初始同步(加快创建速度,适用于空卷)。 |
-z y|n | --zero y|n | 是否清零lv的前4kib空间(默认 y,避免挂载时系统挂起)。 |
五、使用示例
1. 创建逻辑卷(lv)
1.1 创建线性逻辑卷
lvcreate -l <size> -n <lvname> <vg>
功能:创建线性逻辑卷(数据按顺序存储)。
参数:
-l|--size <size>
:指定逻辑卷的大小(单位:k/m/g/t)。-n|--name <lvname>
:指定逻辑卷的名称。<vg>
:指定卷组名称。
示例:
lvcreate -l 10g -n my_lv vg0
1.2 创建条带化(striped)逻辑卷
lvcreate -i <stripes> -i <stripesize> -l <size> -n <lvname> <vg>
功能:创建条带化逻辑卷(数据跨多个物理卷分布)。
参数:
-i|--stripes <stripes>
:指定条带数量(使用的物理卷数)。-i|--stripesize <stripesize>
:指定条带大小(单位:k)。
示例:
lvcreate -i 3 -i 64k -l 50g -n striped_lv vg0
1.3 创建镜像(mirror)或 raid1 逻辑卷
lvcreate --type mirror -m <mirrors> -l <size> -n <lvname> <vg> # 或 lvcreate --type raid1 -m <mirrors> -l <size> -n <lvname> <vg>
功能:创建镜像(mirror
)或 raid1 逻辑卷。
参数:
-m|--mirrors <mirrors>
:指定镜像副本数(如1
表示两副本)。--type mirror/raid1
:指定逻辑卷类型。
示例:
lvcreate --type mirror -m 1 -l 20g -n mirror_lv vg0
1.4 创建 raid 逻辑卷(raid5/raid6/raid10)
lvcreate --type raid5 -i <stripes> -i <stripesize> -l <size> -n <lvname> <vg> lvcreate --type raid6 -i <stripes> -i <stripesize> -l <size> -n <lvname> <vg> lvcreate --type raid10 -i <stripes> -m <mirrors> -l <size> -n <lvname> <vg>
功能:创建 raid5、raid6 或 raid10 逻辑卷。
参数:
-i|--stripes <stripes>
:指定数据条带数(raid5/raid6 需满足设备数要求)。-m|--mirrors <mirrors>
:指定镜像副本数(raid10 使用)。
示例:
lvcreate --type raid5 -i 3 -i 64k -l 100g -n raid5_lv vg0
1.5 创建快照(snapshot)
1.5.1 创建 cow 快照
lvcreate --snapshot -s -l <size> -n <snapname> <originlv>
功能:创建基于原卷的 copy-on-write 快照。
参数:
-s|--snapshot
:指定快照类型。-l|--size <size>
:快照预留空间大小。<originlv>
:原逻辑卷路径(如vg0/origin_lv
)。
示例:
lvcreate --snapshot -s -l 10g -n snap_lv vg0/origin_lv
1.5.2 创建稀疏快照(sparse snapshot)
lvcreate --snapshot -s -v <virtualsize> -l <size> -n <snapname> <vg>
功能:创建稀疏快照(虚拟空间与实际空间分离)。
参数:
-v|--virtualsize <virtualsize>
:虚拟空间大小。
示例:
lvcreate --snapshot -s -v 1t -l 100m -n sparse_snap vg0
1.6 创建薄配置(thin provisioning)
1.6.1 创建薄池(thin pool)
lvcreate --type thin-pool -l <poolsize> -n <poolname> <vg>
功能:创建薄池(用于管理薄逻辑卷)。
参数:
--type thin-pool
:指定薄池类型。
示例:
lvcreate --type thin-pool -l 100g -n thin_pool vg0
1.6.2 创建薄逻辑卷
lvcreate --type thin -v <virtualsize> --thinpool <poolname> -n <thinlvname> <vg>
功能:基于薄池创建薄逻辑卷。
参数:
--type thin
:指定薄逻辑卷类型。--thinpool <poolname>
:关联的薄池名称。
示例:
lvcreate --type thin -v 50g --thinpool thin_pool -n thin_lv vg0
1.7 创建缓存(cache)逻辑卷
1.7.1 创建缓存池(cache pool)
lvcreate --type cache-pool -l <cachesize> -n <cachepoolname> <vg>
功能:创建缓存池(用于加速逻辑卷性能)。
参数:
--type cache-pool
:指定缓存池类型。
示例:
lvcreate --type cache-pool -l 10g -n cache_pool vg0
1.7.2 创建缓存逻辑卷
lvcreate --type cache -l <size> --cachepool <cachepoolname> -n <cachelvname> <vg>
功能:将缓存池与标准逻辑卷结合,创建缓存逻辑卷。
参数:
--type cache
:指定缓存逻辑卷类型。--cachepool <cachepoolname>
:关联的缓存池名称。
示例:
lvcreate --type cache -l 50g --cachepool cache_pool -n cache_lv vg0
2. 高级选项
2.1 指定分配策略
lvcreate --alloc <policy> <其他参数>
功能:控制物理卷分配策略。
参数:
<policy>
:可选值为normal
(默认)、contiguous
(连续分配)、anywhere
(任意分配)等。
示例:
lvcreate --alloc anywhere -l 10g -n any_lv vg0
2.2 设置读取超前(read ahead)
lvcreate -r <readaheadsize> <其他参数>
功能:设置逻辑卷的读取超前大小。
参数:
-r|--readahead <readaheadsize>
:指定读取超前大小(单位:扇区)。
示例:
lvcreate -r 128 -l 10g -n readahead_lv vg0
2.3 设置 raid 同步区域大小
lvcreate -r <regionsize> <其他参数>
功能:调整 raid 同步区域的大小。
参数:
-r|--regionsize <regionsize>
:指定同步区域大小(单位:m)。
示例:
lvcreate -r 512k --type raid1 -l 20g -n raid1_lv vg0
3. 常见操作示例
3.1 创建 raid5 逻辑卷
lvcreate --type raid5 -i 3 -i 64k -l 100g -n raid5_lv vg0
- 说明:创建 3 条带、64k 条带大小的 raid5 卷。
3.2 创建薄快照
lvcreate --type thin -v 50g --thinpool thin_pool -n thin_snap vg0
- 说明:基于薄池
thin_pool
创建 50g 虚拟空间的薄快照。
3.3 创建缓存逻辑卷
lvcreate --type cache -l 50g --cachepool cache_pool -n cache_lv vg0
- 说明:将缓存池
cache_pool
与 50g 逻辑卷结合,创建缓存卷。
六、注意事项
- 空间分配:创建lv前需确保卷组(vg)有足够空闲空间,可通过
vgs
命令检查。 - raid要求:不同raid级别需特定数量的pv(如raid5需至少3个pv,含1个奇偶校验)。
- 快照管理:cow快照的大小需根据源lv的预期写入量设置,空间不足时会失效(可通过
lvextend
扩展)。 - 瘦池特性:瘦卷的虚拟大小可远大于实际分配空间,但需监控瘦池使用率,避免满空间导致i/o错误。
- 性能权衡:条带化提升并行读写性能,但增加pv负载;raid提供冗余但消耗额外空间。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论