linux pvcreate命令

警告: pvcreate 会销毁设备上的所有数据!操作前请务必备份重要数据,并确认操作对象正确。

一、Pvcreate 简介

pvcreate 是 LVM(Logical Volume Manager,逻辑卷管理器)工具集的一部分,用于将物理存储设备(如硬盘、分区)初始化为物理卷(Physical Volume,PV)。

LVM 基本概念
物理卷 (PV)
由 pvcreate 创建
卷组 (VG)
由 vgcreate 创建
逻辑卷 (LV)
由 lvcreate 创建
文件系统
由 mkfs 创建

二、基本语法

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 工具可以帮助你构建灵活、可扩展的存储解决方案。