linux vgcreate命令
vgcreate 是 LVM(Logical Volume Manager,逻辑卷管理器)工具集的一部分,用于将多个物理卷(PV)组合成一个卷组(VG),形成统一的存储池。
一、Vgcreate 简介
vgcreate 命令用于创建 LVM 卷组。卷组是 LVM 架构中的核心组件,它将一个或多个物理卷组合成一个逻辑存储池,为创建逻辑卷(LV)提供空间。
二、基本语法
vgcreate [选项] 卷组名称 物理卷...
三、常用选项
| 选项 |
说明 |
-l, --maxlogicalvolumes 数量 |
最大逻辑卷数量 |
-p, --maxphysicalvolumes 数量 |
最大物理卷数量 |
-s, --physicalextentsize 大小 |
设置物理区域(PE)大小 |
--alloc 策略 |
分配策略:contiguous, cling, normal, anywhere |
--autobackup y|n |
是否自动备份元数据 |
--metadatatype 类型 |
元数据类型:lvm1 或 lvm2 |
--vgmetadatacopies 数量 |
元数据副本数量(0, 1, 2) |
--addtag 标签 |
为卷组添加标签 |
--dataalignment 大小 |
数据对齐大小 |
--dataalignmentoffset 偏移 |
数据对齐偏移量 |
--setautoactivation y|n |
设置自动激活 |
--zero y|n |
是否清零元数据区域 |
-f, --force |
强制创建,跳过确认 |
-v, --verbose |
详细输出 |
-q, --quiet |
安静模式 |
--version |
显示版本信息 |
-h, --help |
显示帮助信息 |
四、物理区域(PE)大小说明
物理区域(Physical Extent,PE)是 LVM 中的最小分配单位,所有逻辑卷空间都以 PE 为单位进行分配和管理。
| PE 大小 |
推荐用途 |
最大卷组大小 |
| 1MB(默认) |
小规模存储,兼容性好 |
256GB |
| 4MB |
一般用途,平衡性能 |
1TB |
| 8MB |
中等规模存储 |
2TB |
| 16MB |
大规模存储,减少元数据开销 |
4TB |
| 32MB |
超大存储,最少元数据 |
8TB |
| 64MB |
巨型存储系统 |
16TB |
五、常用实例
1. 创建基本卷组
# 创建包含单个物理卷的卷组
sudo vgcreate vg_data /dev/sdb
# 创建包含多个物理卷的卷组
sudo vgcreate vg_storage /dev/sdb /dev/sdc /dev/sdd
# 查看创建结果
sudo vgs
sudo vgdisplay vg_data
2. 设置物理区域(PE)大小
# 设置PE大小为4MB(默认为4MB)
sudo vgcreate -s 4M vg_data /dev/sdb
# 设置PE大小为16MB
sudo vgcreate -s 16M vg_large /dev/sde
# 设置PE大小为64MB(适合超大存储)
sudo vgcreate -s 64M vg_huge /dev/sdf
3. 设置限制参数
# 设置最大逻辑卷数量
sudo vgcreate -l 256 vg_data /dev/sdb
# 设置最大物理卷数量
sudo vgcreate -p 32 vg_data /dev/sdb
# 同时设置多个参数
sudo vgcreate -s 8M -l 128 -p 16 vg_data /dev/sdb
4. 设置分配策略
# 设置分配策略为contiguous(连续分配)
sudo vgcreate --alloc contiguous vg_data /dev/sdb
# 设置分配策略为cling(粘附分配)
sudo vgcreate --alloc cling vg_data /dev/sdb
# 设置分配策略为normal(普通分配)
sudo vgcreate --alloc normal vg_data /dev/sdb
# 设置分配策略为anywhere(任意分配)
sudo vgcreate --alloc anywhere vg_data /dev/sdb
5. 设置元数据参数
# 设置元数据副本数量为2(提高可靠性)
sudo vgcreate --vgmetadatacopies 2 vg_data /dev/sdb
# 设置自动备份元数据
sudo vgcreate --autobackup y vg_data /dev/sdb
# 设置不自动备份元数据
sudo vgcreate --autobackup n vg_data /dev/sdb
# 设置LVM1格式元数据(兼容旧系统)
sudo vgcreate --metadatatype lvm1 vg_data /dev/sdb
六、完整LVM配置流程
场景1:标准LVM配置
#!/bin/bash
# 完整的LVM配置流程
DEVICES=("/dev/sdb" "/dev/sdc")
VG_NAME="vg_data"
LV_NAME="lv_data"
MOUNT_POINT="/data"
echo "=== Step 1: 准备物理卷 ==="
for DEVICE in "${DEVICES[@]}"; do
echo "创建物理卷: $DEVICE"
sudo pvcreate "$DEVICE"
done
echo "=== Step 2: 创建卷组 ==="
sudo vgcreate -s 4M "$VG_NAME" "${DEVICES[@]}"
echo "=== Step 3: 查看卷组信息 ==="
sudo vgdisplay "$VG_NAME"
echo "=== Step 4: 创建逻辑卷 ==="
sudo lvcreate -L 100G -n "$LV_NAME" "$VG_NAME"
echo "=== Step 5: 创建文件系统 ==="
sudo mkfs.ext4 "/dev/$VG_NAME/$LV_NAME"
echo "=== Step 6: 挂载使用 ==="
sudo mkdir -p "$MOUNT_POINT"
sudo mount "/dev/$VG_NAME/$LV_NAME" "$MOUNT_POINT"
echo "=== Step 7: 配置自动挂载 ==="
echo "/dev/$VG_NAME/$LV_NAME $MOUNT_POINT ext4 defaults 0 0" | sudo tee -a /etc/fstab
echo "=== 配置完成 ==="
sudo df -h "$MOUNT_POINT"
场景2:多磁盘条带化配置
#!/bin/bash
# 多磁盘条带化配置(提高性能)
DEVICES=("/dev/sdb" "/dev/sdc" "/dev/sdd")
VG_NAME="vg_fast"
LV_NAME="lv_fast"
MOUNT_POINT="/fast"
echo "=== 高性能条带化配置 ==="
# 创建物理卷
for DEVICE in "${DEVICES[@]}"; do
sudo pvcreate "$DEVICE"
done
# 创建卷组(大PE大小减少元数据开销)
sudo vgcreate -s 16M "$VG_NAME" "${DEVICES[@]}"
# 创建条带化逻辑卷(3个条带,64KB条带大小)
sudo lvcreate -i 3 -I 64 -L 500G -n "$LV_NAME" "$VG_NAME"
# 创建XFS文件系统(高性能)
sudo mkfs.xfs "/dev/$VG_NAME/$LV_NAME"
# 挂载并优化挂载选项
sudo mkdir -p "$MOUNT_POINT"
sudo mount -o noatime,nodiratime,allocsize=1G "/dev/$VG_NAME/$LV_NAME" "$MOUNT_POINT"
echo "条带化配置完成"
sudo vgdisplay "$VG_NAME"
场景3:卷组标签和属性配置
#!/bin/bash
# 卷组标签和属性配置
DEVICE="/dev/sdb"
VG_NAME="vg_backup"
echo "=== 高级卷组配置 ==="
# 创建物理卷
sudo pvcreate "$DEVICE"
# 创建卷组并添加标签
sudo vgcreate --addtag "backup" --addtag "important" "$VG_NAME" "$DEVICE"
# 设置卷组属性
sudo vgchange --autobackup y "$VG_NAME"
sudo vgchange --alloc anywhere "$VG_NAME"
# 设置卷组激活模式
sudo vgchange --setautoactivation y "$VG_NAME"
# 查看卷组信息
echo "卷组标签:"
sudo vgs -o vg_tags "$VG_NAME"
echo "卷组属性:"
sudo vgdisplay "$VG_NAME" | grep -E "VG Status|VG Access|VG Tags"
七、卷组管理操作
1. 查看卷组信息
# 查看所有卷组摘要信息
sudo vgs
# 详细查看所有卷组
sudo vgdisplay
# 查看特定卷组信息
sudo vgdisplay vg_data
# 查看卷组标签
sudo vgs -o +vg_tags
# 查看卷组物理卷
sudo pvs -o +pv_tags
# 查看卷组元数据信息
sudo vgck vg_data
2. 扩展卷组
# 添加新物理卷到卷组
sudo pvcreate /dev/sde
sudo vgextend vg_data /dev/sde
# 同时添加多个物理卷
sudo vgextend vg_data /dev/sde /dev/sdf
# 查看扩展后的卷组
sudo vgdisplay vg_data
3. 缩小卷组
# 从卷组中移除物理卷(确保没有数据)
sudo pvmove /dev/sdb
sudo vgreduce vg_data /dev/sdb
# 强制移除物理卷(可能有数据丢失风险)
sudo vgreduce --removemissing vg_data
# 查看缩小后的卷组
sudo vgdisplay vg_data
4. 修改卷组属性
# 修改卷组名称
sudo vgrename vg_old vg_new
# 修改卷组PE大小(需要先卸载逻辑卷)
sudo vgchange -s 8M vg_data
# 添加卷组标签
sudo vgchange --addtag "production" vg_data
# 移除卷组标签
sudo vgchange --deltag "test" vg_data
# 激活/停用卷组
sudo vgchange -a y vg_data # 激活
sudo vgchange -a n vg_data # 停用
5. 卷组备份与恢复
# 备份卷组配置
sudo vgcfgbackup vg_data
# 备份到指定文件
sudo vgcfgbackup -f /backup/vg_data.conf vg_data
# 查看备份文件
ls -l /etc/lvm/backup/
# 从备份恢复卷组
sudo vgcfgrestore -f /etc/lvm/backup/vg_data vg_data
# 导出卷组配置
sudo vgexport vg_data
# 导入卷组配置
sudo vgimport vg_data
八、高级配置
1. 创建精简配置卷组
#!/bin/bash
# 创建精简配置(Thin Provisioning)卷组
VG_NAME="vg_thin"
POOL_NAME="thin_pool"
DEVICE="/dev/sdb"
# 创建物理卷
sudo pvcreate "$DEVICE"
# 创建卷组
sudo vgcreate "$VG_NAME" "$DEVICE"
# 创建精简池(Thin Pool)
sudo lvcreate --type thin-pool -L 100G -n "$POOL_NAME" "$VG_NAME"
# 创建精简逻辑卷
sudo lvcreate -V 50G -n lv_thin1 --thinpool "$VG_NAME/$POOL_NAME"
sudo lvcreate -V 50G -n lv_thin2 --thinpool "$VG_NAME/$POOL_NAME"
# 查看精简配置信息
sudo lvs -a "$VG_NAME"
2. 创建缓存卷组
#!/bin/bash
# 创建缓存卷组(SSD缓存加速)
SSD_DEVICE="/dev/nvme0n1"
HDD_DEVICE="/dev/sdb"
VG_NAME="vg_cache"
# 创建物理卷
sudo pvcreate "$SSD_DEVICE" "$HDD_DEVICE"
# 创建卷组
sudo vgcreate "$VG_NAME" "$SSD_DEVICE" "$HDD_DEVICE"
# 创建缓存逻辑卷
sudo lvcreate -L 100G -n lv_cache "$VG_NAME" "$SSD_DEVICE"
sudo lvcreate -L 1T -n lv_data "$VG_NAME" "$HDD_DEVICE"
# 将SSD缓存附加到HDD逻辑卷
sudo lvconvert --type cache --cachepool "$VG_NAME/lv_cache" "$VG_NAME/lv_data"
echo "缓存卷组配置完成"
sudo lvs -a "$VG_NAME"
3. 卷组镜像配置
#!/bin/bash
# 卷组镜像配置(数据冗余)
DEVICES=("/dev/sdb" "/dev/sdc" "/dev/sdd")
VG_NAME="vg_mirror"
LV_NAME="lv_mirror"
# 创建物理卷
for DEVICE in "${DEVICES[@]}"; do
sudo pvcreate "$DEVICE"
done
# 创建卷组
sudo vgcreate "$VG_NAME" "${DEVICES[@]}"
# 创建镜像逻辑卷(2个镜像副本)
sudo lvcreate --type mirror -m 1 -L 100G -n "$LV_NAME" "$VG_NAME"
# 查看镜像状态
sudo lvs -a "$VG_NAME" -o +devices
# 监控镜像同步
sudo lvs "$VG_NAME/$LV_NAME" -o sync_percent
九、故障排除
# 原因:卷组名称已存在
# 解决方法:
# 1. 检查现有卷组
sudo vgs
sudo vgdisplay
# 2. 删除已存在的卷组(如果不再需要)
sudo vgremove vg_data
# 3. 或者使用不同的卷组名称
sudo vgcreate vg_data_new /dev/sdb
# 4. 检查LVM缓存
sudo vgscan --cache
# 5. 如果卷组已导出,需要先导入
sudo vgimport vg_data
# 原因:多种可能原因
# 解决方法:
# 1. 检查物理卷是否存在
sudo pvs
sudo pvdisplay /dev/sdb
# 2. 检查物理卷是否已属于其他卷组
sudo pvdisplay /dev/sdb | grep "VG Name"
# 3. 检查设备是否可用
sudo lsblk /dev/sdb
sudo fdisk -l /dev/sdb
# 4. 检查LVM过滤器配置
cat /etc/lvm/lvm.conf | grep filter
# 5. 强制创建(谨慎使用)
sudo vgcreate -f vg_data /dev/sdb
# 6. 检查磁盘空间
sudo pvcreate /dev/sdb
sudo pvdisplay /dev/sdb
# 原因:物理卷空间不足或PE大小设置不当
# 解决方法:
# 1. 检查物理卷可用空间
sudo pvdisplay /dev/sdb | grep "Free PE"
# 2. 检查PE大小设置
# 如果PE太大,可能导致空间浪费
# 3. 调整PE大小(重新创建卷组)
sudo vgremove vg_data
sudo vgcreate -s 4M vg_data /dev/sdb
# 4. 添加更多物理卷
sudo pvcreate /dev/sdc
sudo vgextend vg_data /dev/sdc
# 5. 清理物理卷空间
# 如果物理卷有残留数据,可能需要擦除
sudo wipefs -a /dev/sdb
sudo pvcreate /dev/sdb
十、相关命令对比
| 命令 |
用途 |
关联命令 |
| vgcreate |
创建卷组 |
vgextend, vgreduce |
| pvcreate |
创建物理卷 |
pvremove, pvscan |
| lvcreate |
创建逻辑卷 |
lvextend, lvreduce |
| vgextend |
扩展卷组 |
pvcreate, vgs |
| vgreduce |
缩小卷组 |
pvmove, vgdisplay |
十一、最佳实践
卷组配置建议
- 规划PE大小:根据存储规模选择合适的PE大小(4MB或8MB适合大多数场景)
- 命名规范:使用有意义的卷组名称,如
vg_data, vg_backup
- 卷组标签:为卷组添加标签,便于管理和筛选
- 元数据备份:启用自动元数据备份(
--autobackup y)
- 冗余配置:生产环境考虑使用镜像或RAID提供数据冗余
- 性能优化:对于高IO场景,考虑使用条带化或缓存加速
- 监控告警:监控卷组空间使用,设置自动告警阈值(如80%)
- 测试环境:生产环境变更前在测试环境验证
十二、卷组配置示例
Web服务器存储
# Web服务器卷组配置
sudo pvcreate /dev/sdb
sudo vgcreate -s 8M \
--alloc normal \
--autobackup y \
vg_web /dev/sdb
# 创建逻辑卷
sudo lvcreate -L 100G -n lv_www vg_web
sudo lvcreate -L 50G -n lv_logs vg_web
数据库服务器存储
# 数据库卷组配置
sudo pvcreate /dev/sdb /dev/sdc
sudo vgcreate -s 16M \
--alloc cling \
vg_db /dev/sdb /dev/sdc
# 创建条带化逻辑卷
sudo lvcreate -i 2 -I 64 \
-L 500G -n lv_mysql vg_db
提示: 卷组是 LVM 架构的核心,合理的卷组规划可以为后续的逻辑卷管理打下良好基础。掌握 vgcreate 命令及其高级选项,可以帮助你构建灵活、可扩展的存储解决方案。