linux pvcreate命令
警告: pvcreate 会销毁设备上的所有数据!操作前请务必备份重要数据,并确认操作对象正确。
一、Pvcreate 简介
pvcreate 是 LVM(Logical Volume Manager,逻辑卷管理器)工具集的一部分,用于将物理存储设备(如硬盘、分区)初始化为物理卷(Physical Volume,PV)。
二、基本语法
pvcreate [选项] 物理设备...
三、常用选项
| 选项 |
说明 |
-f, --force |
强制创建,跳过确认 |
-u, --uuid UUID |
指定物理卷UUID |
-y, --yes |
对所有问题回答yes |
-Z, --zero y|n |
是否在开始时擦除前4个扇区 |
--dataalignment 大小 |
对齐数据区域到指定大小 |
--dataalignmentoffset 偏移 |
数据区域偏移量 |
--labelsector 扇区 |
指定LVM标签扇区(默认1) |
--metadatasize 大小 |
元数据区域大小 |
--metadataignore y|n |
是否忽略元数据区域 |
--bootloaderareasize 大小 |
引导加载程序区域大小 |
--pvmetadatacopies 0|1|2 |
元数据副本数量 |
--metadatacopies 0|1|2 |
元数据副本数量(已弃用) |
--setphysicalvolumesize 大小 |
设置物理卷大小(覆盖检测) |
-M1, --metadatatype 1 |
使用LVM1元数据格式 |
-M2, --metadatatype 2 |
使用LVM2元数据格式(默认) |
--norestorefile |
不创建恢复文件 |
--restorefile 文件 |
使用指定的恢复文件 |
四、常用实例
1. 创建物理卷
# 创建单个物理卷
sudo pvcreate /dev/sdb
# 创建多个物理卷
sudo pvcreate /dev/sdc /dev/sdd
# 强制创建(跳过警告)
sudo pvcreate -f /dev/sdb
# 对所有问题回答yes
sudo pvcreate -y /dev/sdb
2. 创建分区为物理卷
# 将分区初始化为物理卷
sudo pvcreate /dev/sdb1
# 创建多个分区为物理卷
sudo pvcreate /dev/sdb1 /dev/sdb2 /dev/sdb3
# 查看创建结果
sudo pvs
sudo pvdisplay
3. 使用特定UUID创建
# 指定UUID创建物理卷
sudo pvcreate -u "12345678-1234-1234-1234-123456789012" /dev/sdb
# 查看UUID
sudo pvdisplay /dev/sdb | grep UUID
4. 设置对齐参数
# 设置4K对齐(对SSD优化)
sudo pvcreate --dataalignment 4096K /dev/sdb
# 设置1MB对齐
sudo pvcreate --dataalignment 1M /dev/sdb
# 设置对齐和偏移
sudo pvcreate --dataalignment 1M --dataalignmentoffset 512K /dev/sdb
5. 设置元数据参数
# 设置元数据大小
sudo pvcreate --metadatasize 100M /dev/sdb
# 设置元数据副本数量
sudo pvcreate --pvmetadatacopies 2 /dev/sdb
# 忽略元数据区域(某些特殊用途)
sudo pvcreate --metadataignore y /dev/sdb
6. 擦除扇区设置
# 不擦除前4个扇区
sudo pvcreate -Z n /dev/sdb
# 擦除前4个扇区(默认)
sudo pvcreate -Z y /dev/sdb
五、完整LVM配置流程
场景1:基本LVM配置
#!/bin/bash
# 完整LVM配置流程
DEVICE="/dev/sdb"
echo "=== Step 1: 创建物理卷 ==="
sudo pvcreate "$DEVICE"
echo "=== Step 2: 创建卷组 ==="
sudo vgcreate vg_data "$DEVICE"
echo "=== Step 3: 创建逻辑卷 ==="
sudo lvcreate -L 100G -n lv_data vg_data
echo "=== Step 4: 创建文件系统 ==="
sudo mkfs.ext4 /dev/vg_data/lv_data
echo "=== Step 5: 挂载使用 ==="
sudo mkdir -p /mnt/data
sudo mount /dev/vg_data/lv_data /mnt/data
echo "=== Step 6: 配置自动挂载 ==="
echo "/dev/vg_data/lv_data /mnt/data ext4 defaults 0 0" | sudo tee -a /etc/fstab
echo "=== 配置完成 ==="
sudo df -h /mnt/data
场景2:多磁盘LVM配置
#!/bin/bash
# 多磁盘LVM配置
DEVICES=("/dev/sdb" "/dev/sdc" "/dev/sdd")
echo "=== 创建多个物理卷 ==="
for DEVICE in "${DEVICES[@]}"; do
echo "初始化 $DEVICE ..."
sudo pvcreate "$DEVICE"
done
echo "=== 创建卷组 ==="
sudo vgcreate vg_storage "${DEVICES[@]}"
echo "=== 查看卷组信息 ==="
sudo vgdisplay vg_storage
echo "=== 创建逻辑卷 ==="
sudo lvcreate -l 100%FREE -n lv_data vg_storage
echo "=== 创建文件系统 ==="
sudo mkfs.xfs /dev/vg_storage/lv_data
echo "=== 挂载使用 ==="
sudo mkdir -p /storage
sudo mount /dev/vg_storage/lv_data /storage
场景3:SSD优化配置
#!/bin/bash
# SSD优化配置
SSD_DEVICE="/dev/nvme0n1"
echo "=== SSD优化配置 ==="
# 使用4K对齐
echo "创建物理卷(4K对齐)..."
sudo pvcreate --dataalignment 4096K "$SSD_DEVICE"
# 创建卷组
sudo vgcreate vg_ssd "$SSD_DEVICE"
# 创建逻辑卷(使用 thin provisioning)
sudo lvcreate --type thin-pool -L 100G -n thin_pool vg_ssd
# 创建thin逻辑卷
sudo lvcreate -V 50G -n lv_ssd --thinpool vg_ssd/thin_pool
# 创建支持TRIM的文件系统
sudo mkfs.ext4 -E discard /dev/vg_ssd/lv_ssd
echo "SSD优化配置完成"
六、物理卷管理
1. 查看物理卷信息
# 查看所有物理卷
sudo pvs
# 详细查看物理卷信息
sudo pvdisplay
# 查看特定物理卷
sudo pvdisplay /dev/sdb
# 查看物理卷段
sudo pvsegdisplay /dev/sdb
# 查看物理卷元数据
sudo pvck /dev/sdb
2. 物理卷扩展
# 添加新物理卷到现有卷组
sudo pvcreate /dev/sde
sudo vgextend vg_data /dev/sde
# 查看扩展后的卷组
sudo vgdisplay vg_data
3. 物理卷迁移
# 迁移物理卷数据
sudo pvmove /dev/sdb /dev/sde
# 从卷组中移除物理卷
sudo vgreduce vg_data /dev/sdb
# 删除物理卷
sudo pvremove /dev/sdb
4. 物理卷恢复
# 恢复丢失的物理卷
sudo pvscan --cache
# 激活卷组
sudo vgchange -ay vg_data
# 修复物理卷
sudo pvck --repair /dev/sdb
七、高级配置
1. 创建带标签的物理卷
# 使用pvcreate创建后设置标签
sudo pvcreate /dev/sdb
sudo pvchange --addtag fast_storage /dev/sdb
# 查看标签
sudo pvs -o +pv_tags /dev/sdb
2. 使用恢复文件
# 创建时生成恢复文件
sudo pvcreate --restorefile /etc/lvm/backup/vg_data /dev/sdb
# 从恢复文件恢复
sudo pvcreate --restorefile /etc/lvm/backup/vg_data --uuid "original-uuid" /dev/sdb
3. 设置物理卷大小限制
# 设置物理卷大小(覆盖自动检测)
sudo pvcreate --setphysicalvolumesize 500G /dev/sdb
# 验证设置
sudo pvdisplay /dev/sdb | grep "PV Size"
八、故障排除
# 原因:设备可能已被使用或格式错误
# 解决方法:
# 1. 检查设备是否已挂载
sudo mount | grep /dev/sdb
sudo umount /dev/sdb* 2>/dev/null
# 2. 检查设备是否已有文件系统
sudo blkid /dev/sdb
# 3. 检查设备是否已有LVM签名
sudo pvscan /dev/sdb
# 4. 擦除LVM签名(如果存在)
sudo wipefs -a /dev/sdb
# 5. 强制创建
sudo pvcreate -f /dev/sdb
# 6. 检查设备是否可用
sudo lsblk /dev/sdb
sudo fdisk -l /dev/sdb
# 原因:设备被LVM过滤器过滤
# 解决方法:
# 1. 检查LVM过滤器配置
cat /etc/lvm/lvm.conf | grep filter
# 2. 临时修改过滤器(测试)
sudo pvcreate --config 'devices { filter = [ "a|.*|" ] }' /dev/sdb
# 3. 永久修改过滤器
# 编辑 /etc/lvm/lvm.conf,修改filter行
# filter = [ "a|^/dev/sdb$|", "r|.*|" ]
# 4. 重新加载配置
sudo vgscan --cache
# 5. 检查设备权限
ls -la /dev/sdb
# 原因:需要明确指定大小参数
# 解决方法:
# 1. 查看设备实际大小
sudo blockdev --getsize64 /dev/sdb
# 2. 使用正确的格式指定大小
sudo pvcreate --setphysicalvolumesize 500G /dev/sdb
# 3. 使用字节单位指定
sudo pvcreate --setphysicalvolumesize 536870912000B /dev/sdb
# 4. 或者不使用该参数,让pvcrate自动检测
sudo pvcreate /dev/sdb
# 5. 检查是否指定了其他冲突参数
# 如 --dataalignment 可能会影响大小计算
九、相关命令对比
| 命令 |
用途 |
关联命令 |
| pvcreate |
创建物理卷 |
pvremove, pvscan |
| vgcreate |
创建卷组 |
vgextend, vgreduce |
| lvcreate |
创建逻辑卷 |
lvextend, lvreduce |
| pvscan |
扫描物理卷 |
vgscan, lvscan |
| pvmove |
迁移物理卷数据 |
pvdisplay, pvs |
十、最佳实践
LVM 使用建议
- 操作前备份重要数据
- 为生产环境规划合理的存储架构
- 使用有意义的名字命名卷组和逻辑卷
- 对于SSD,使用4K对齐优化性能
- 考虑使用RAID提供数据冗余
- 定期备份LVM配置:
vgcfgbackup
- 使用监控工具跟踪存储使用情况
- 为不同用途使用不同的卷组
十一、LVM 工具集
物理卷命令
pvcreate - 创建物理卷
pvremove - 删除物理卷
pvscan - 扫描物理卷
pvdisplay - 显示物理卷信息
pvmove - 迁移数据
卷组命令
vgcreate - 创建卷组
vgremove - 删除卷组
vgextend - 扩展卷组
vgreduce - 缩小卷组
vgdisplay - 显示卷组信息
逻辑卷命令
lvcreate - 创建逻辑卷
lvremove - 删除逻辑卷
lvextend - 扩展逻辑卷
lvreduce - 缩小逻辑卷
lvdisplay - 显示逻辑卷信息
十二、生产环境配置示例
1. 数据库服务器LVM配置
#!/bin/bash
# 数据库服务器LVM配置
DEVICES=("/dev/sdb" "/dev/sdc" "/dev/sdd")
echo "=== 数据库存储配置 ==="
# 1. 创建物理卷
for DEVICE in "${DEVICES[@]}"; do
sudo pvcreate --dataalignment 1M "$DEVICE"
done
# 2. 创建卷组(使用条带化)
sudo vgcreate vg_db "${DEVICES[@]}"
# 3. 创建条带化逻辑卷(提高IO性能)
sudo lvcreate -i 3 -I 64 -L 500G -n lv_mysql_data vg_db
# 4. 创建日志逻辑卷
sudo lvcreate -L 50G -n lv_mysql_log vg_db
# 5. 创建文件系统(使用noatime优化)
sudo mkfs.ext4 -O dir_index,extent /dev/vg_db/lv_mysql_data
sudo mkfs.ext4 /dev/vg_db/lv_mysql_log
# 6. 挂载配置
sudo mkdir -p /var/lib/mysql
sudo mount -o noatime,nodiratime,data=ordered /dev/vg_db/lv_mysql_data /var/lib/mysql
sudo mkdir -p /var/log/mysql
sudo mount /dev/vg_db/lv_mysql_log /var/log/mysql
2. 备份服务器LVM配置
#!/bin/bash
# 备份服务器LVM配置
DEVICE="/dev/sdb"
echo "=== 备份存储配置 ==="
# 1. 创建物理卷
sudo pvcreate "$DEVICE"
# 2. 创建卷组
sudo vgcreate vg_backup "$DEVICE"
# 3. 创建快照可用的逻辑卷
sudo lvcreate -L 2T -n lv_backup vg_backup
# 4. 创建文件系统(支持快照)
sudo mkfs.xfs /dev/vg_backup/lv_backup
# 5. 挂载配置
sudo mkdir -p /backup
sudo mount /dev/vg_backup/lv_backup /backup
# 6. 配置快照预留空间(20%)
sudo lvcreate -L 400G -n lv_snapshot vg_backup
提示: LVM 提供了强大的存储管理能力,包括在线扩展、快照、条带化等高级功能。掌握 pvcreate 和其他 LVM 工具可以帮助你构建灵活、可扩展的存储解决方案。