lvm_querypv 子例程
用途
查询物理卷并返回所有的相关信息。
库
逻辑卷管理器库 (liblvm.a)
语法
描述
lvm_querypv 子例程返回有关由 PV_ID 参数指定的物理卷的信息。
在 lvm.h 文件中定义的 querypv 结构包含以下字段:
struct querypv {
long ppsize;
long pv_state;
long pp_count;
long alloc_ppcount;
long pvnum_vgdas;
struct pp_map *pp_map;
char hotspare;
struct unique_id pv_id;
long freespace;
}
struct pp_map {
long pp_state;
struct lv_id lv_id;
long lp_num;
long copy;
struct unique_id fst_alt_vol;
long fst_alt_part;
struct unique_id snd_alt_vol;
long snd_alt_part;
}
| 字段 | 描述 |
|---|---|
| ppsize | 指定物理分区的大小,该大小对于卷组中的所有分区都是相同的。 物理分区的大小 (以字节为 2) 为 2。ppsize. |
| pv_state | 包含该物理卷的当前状态。 |
| pp_count | 包含该物理卷上的物理分区总数。 |
| alloc_ppcount | 包含物理卷上已分配的物理分区数。 |
| pp_map | 指向具有该物理卷的每个物理分区的条目的阵列。 此数组中的每个条目都将包含pp_state它指定物理分区 (LVM_PPFREE, LVM_PPALLOC或 LVM_PPSTALE) 的状态,并lv_id,字段,这是它所属的逻辑卷的标识。 该pp_map阵列还包含物理卷标识 (fst_alt_vol和snd_alt_vol) 和物理分区号 (fst_alt_part和snd_alt_part)对于物理分区的第一个和第二个备用副本,以及逻辑分区号 (lp_num)物理分区所对应。 如果物理分区可用 (即,未分配) ,那么其 pp_map 字段中的 全部 将为零。
|
| pvnum_vgdas | 包含位于指定物理卷上的卷组描述符区域 (0,1 0 2) 的数目。 |
| hotspare | 指定物理卷是一个 hotspare。 |
| pv_id | 指定物理卷标识。 |
| freespace | 指定卷组中的物理分区的数目。 |
PVName 参数使用户能够从特定物理卷上的卷组描述符区域进行查询,而不是从描述符区域的逻辑卷管理器 (LVM) 最新的内存副本中进行查询。 仅当卷组脱机时,才应使用此方法。 不保证返回的数据是最新的或正确的,并且它可以反映出一个后级描述符区域。
PVname 参数应指定包含要查询的描述符区域的物理卷的完整路径名,或者指定必须驻留在 /dev 目录中的单个文件名 (例如, rhdisk1)。 此字段必须是 1 到 LVM_NAMESIZ 个字节 (包括 1 字节) 的以 null 结束的字符串,并且表示原始设备或字符设备。 如果未对 PVName 参数指定原始设备或字符设备,那么 LVM 将向文件名添加 R ,以便具有原始设备名称。 如果不存在此名称的原始设备条目,那么 LVM 将返回 LVM_NOTCHARDEV 错误代码。 如果指定了 PVName ,那么表示卷组标识,VG_ID,将由 LVM 通过用户传递的 VG_ID 参数来返回。 如果用户希望从 LVM 内存中副本进行查询,那么应该将 PVName 参数设置为空。 使用此查询方法时,卷组必须已联机,否则将返回错误。
除了 PVName 参数外,调用者还传递 VG_ID 参数,指示包含要查询的物理卷的卷组,要查询的物理卷的唯一标识, PV_ID 参数以及类型为 QueryPV的指针的地址。 LVM 将单独为 奎雷普夫 结构和 struct 分配足够的空间pp_map数组并返回传入的 QueryPV 指针中 querypv 结构的地址。 用户负责释放空间,方法是释放 struct pp_map 指针,然后释放 QueryPV 指针。
参数
| 项 | 描述 |
|---|---|
| VG_ID | 指向 unique_id 结构,该结构指定要查询的物理卷是其成员的卷组。 |
| PV_ID | 指向用于指定要查询的物理卷的 unique_id 结构。 |
| QueryPV | 指定指向 奎雷普夫 结构的指针所在的地址。 |
| PVname | 指定要从其中使用卷组描述符区域进行查询的物理卷。 此参数可以为空。 |
返回值
lvm_querypv 子例程在成功完成时返回值 0。
错误代码
如果 lvm_querypv 子例程失败,它将返回下列其中一个错误代码:
| 项 | 描述 |
|---|---|
| LVM_ALLOCERR | 例程无法为完整缓冲区分配足够的空间。 |
| lvm_invalid_param | 传递到例程中的参数无效。 |
| LVM_INV_DEVENT | 物理卷的设备项无效,无法进行检查以确定它是否为原始卷。 |
| LVM_OFFLINE | 指定的卷组处于脱机状态,并且应该处于联机状态。 |
如果查询源自联机卷组的当前卷组描述符区域,那么可能会返回下列其中一个错误代码:
| 项 | 描述 |
|---|---|
| LVM_DALVOPN | 无法打开该卷组保留的逻辑卷。 |
| LVM_MAPFBSY | 由于卷组上的系统管理正在由另一个进程执行,因此该卷组当前已锁定。 |
| LVM_MAPFOPN | 无法打开映射文件 (它包含用于对卷组进行更改的卷组描述符区域的副本)。 |
| LVM_MAPFRDWR | 无法读取映射的文件,或者无法写入该文件。 |
如果已传递物理卷名称,请求查询源自特定物理卷,那么可能会返回下列其中一个错误代码:
| 项 | 描述 |
|---|---|
| LVM_BADBDIR | 无法读取或写入坏块目录。 |
| LVM_LVMRECERR | 无法读取 LVM 记录 (其中包含有关卷组描述符区域的信息)。 |
| LVM_NOPVVGDA | 此物理卷上没有任何卷组描述符区域。 |
| LVM_NOTCHARDEV | 某个设备不是原始设备或字符设备。 |
| LVM_NOTVGMEM | 物理卷不是某个卷组的成员。 |
| LVM_PVDAREAD | 当尝试从指定的物理卷读取卷组描述符区域时发生错误。 |
| LVM_PVOPNERR | 未能打开该物理卷设备。 |
| LVM_VGDA_BB | 在位于为查询指定的物理卷上的卷组描述符区域中找到坏区。 因此,无法从指定的物理卷完成查询。 |