pvcreate命令是Linux系统中LVM(Logical Volume Manager,逻辑卷管理器)的核心命令之一,用于将物理磁盘分区或整个磁盘初始化为LVM物理卷(Physical Volume,简称PV)。
其中物理卷是LVM架构中的最底层存储单元,它可以是:
1.整个硬盘设备(如 /dev/sdb、/dev/sdc)
2.硬盘上的一个分区(如 /dev/sdb1、/dev/sdc1)
3.RAID 设备
4. 回环设备(loop device)
只有经过pvcreate初始化后的设备,才能加入到卷组(Volume Group,VG)中,最终才能在卷组之上创建逻辑卷(Logical Volume,LV)。
pvcreate会在指定设备的开头写入LVM元数据签名,标记该设备为LVM物理卷。
LVM三层架构:
PV(物理卷):最底层,由pvcreate创建
VG(卷组):由一个或多个PV组成,存储池
LV(逻辑卷):从VG中划分,用户最终使用的存储单元
语法:pvcreate [参数] [设备路径…]
常用参数:
参数 | 说明 |
-f,--force | 强制创建物理卷,即使设备上已有文件系统或分区表 |
-y,--yes | 对所有询问自动回答"yes",适合脚本使用 |
-u,--uuid <UUID> | 指定物理卷的 UUID(通常用于恢复场景) |
-Z,--zero {y|n} | 是否将设备前 4 个扇区清零(默认为 y),n 可保留数据 |
--labelsector <sector> | 指定 LVM 标签写入的扇区位置(默认 0) |
元数据参数:
参数 | 说明 |
-M,--metadatatype <type> | 指定元数据类型(lvm1 或 lvm2,默认 lvm2) |
--metadatasize <size> | 设置元数据区域的大小(默认4MiB) |
--metadataignore {y|n} | 是否忽略此物理卷的元数据(默认n) |
--pvmetadatacopies <0-2> | 元数据副本数量(0、1 或 2,默认 2) |
其它参数:
参数 | 说明 |
--restorefile <file> | 从备份文件恢复物理卷元数据 |
--norestorefile | 不创建恢复文件 |
--setphysicalvolumesize <size> | 设置物理卷的大小(覆盖自动检测) |
--reportformat {json|basic} | 输出格式(json 或 basic,默认 basic) |
-v,--verbose | 显示详细执行过程 |
-h,--help | 显示帮助信息 |
三、实战
1、创建单个物理卷
将/dev/sdb1分区初始化物理卷,先看一下/dev/sdb的分区情况。
[root@CentOS7 ~]# lsblk|grep sdbsdb 8:16 0 10G 0 disk └─sdb1 8:17 0 1G 0 part
[root@CentOS7 ~]# pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully created.
2、同时创建多个物理卷
在日常工作中,如果想一次性创建多个物理卷,可以使用以下方法。
[root@CentOS7 ~]# pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1 Physical volume "/dev/sdb1" successfully created. Physical volume "/dev/sdc1" successfully created. Physical volume "/dev/sdd1" successfully created.
3、对整个磁盘创建PV(不分区)
如果不想分区把整个磁盘创建一个PV卷,pvcreate也是支持的。如下:
[root@CentOS7 ~]# pvcreate /dev/sdb
注: 用这种方式会覆盖整个磁盘的分区表,适用于专门用作LVM的数据盘情况。
4、强制创建(覆盖已有数据)
如果设备上已有文件系统或其他签名,创建时加上“-f”参数可以进行强制创建:
[root@CentOS7 ~]# pvcreate -f /dev/sdb1
5、测试模式(不实际写入)
验证命令是否能成功执行,不修改磁盘:
[root@CentOS7 ~]# pvcreate --test /dev/sdb1
[root@CentOS7 ~]# pvcreate -v /dev/sdb1 Wiping signatures on new PV /dev/sdb1. Set up physical volume for"/dev/sdb1" with 2097152 available sectors. Zeroing start of device /dev/sdb1. Writing physical volume data to disk "/dev/sdb1". Physical volume "/dev/sdb1" successfully created.
创建完物理卷后,如果想查看创建的情况,可以使用以下命令进行查:
[root@CentOS7 ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda2 rootvg lvm2 a-- 49.53g 0 /dev/sdb1 lvm2 --- 1.00g 1.00g
这个只是简单的查看,如果想查看更详细的内容,可以使用display进行查看。如下:
[root@CentOS7 ~]# pvdisplay --- Physical volume --- PV Name /dev/sda2 VG Name rootvg PV Size 49.53 GiB / not usable 3.00 MiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 12680 Free PE 0 Allocated PE 12680 PV UUID 594n6H-Jdvy-o4de-nhCM-pwBK-Cq2V-meaphI "/dev/sdb1" is a new physical volume of "1.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb1 VG Name PV Size 1.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID Q7fbKf-DxW5-UOh9-PQu8-DoQ8-3nFr-5s3vRj
如果想扫描所有的物理卷组(pv)可以使用pcscan进行查看。如下:
[root@CentOS7 ~]# pvscan PV /dev/sda2 VG rootvg lvm2 [49.53 GiB / 0 free] PV /dev/sdb1 lvm2 [1.00 GiB] Total: 2 [50.53 GiB] / in use: 1 [49.53 GiB] / in no VG: 1 [1.00 GiB]
1、设备正在使用中
日常工作中创建对应的物理卷时,报:Can't open /dev/sdb1 exclusively. Mounted filesystem?
解决方案:
1.检查设备是否挂载
mount |grep /dev/sdb1
2.检查发现已挂载,需要先卸载
umount /dev/sdb1
3.反之没有挂载,可以再检查是否能其它进程在占用,或是没有退出挂载点的目录。
lsof /dev/sdb1或fuser /dev/sdb1
lsof和fuser的具体使用方法,可以参照:
Linux命令大全-lsof命令
Linux命令大全-fuser命令
2、设备已有文件系统签名
在已创建好的文件系统上再次创建,报: /dev/sdb1: appears to contain an existing filesystem
解决方案:
1.确认数据已备份后,使用强制模式
pvcreate -f /dev/sdb1
2.或是先清空设备签名,再创建
wipefs -a /dev/sdb1
pvcreate /dev/sdb1
3、权限不足
创建时,报:/dev/sdb1: open failed: Permission denied
解决方案:
切换到root用户操作
喜欢古诗词的同学们,欢迎移步「纸间有糖」,愿这里的文字甜到你心里。