lvdd 特殊文件

用途

提供对逻辑卷设备驱动程序的访问。

描述

逻辑卷设备驱动程序提供对逻辑卷的字符 (原始) 访问。 逻辑卷管理器将主数字与每个卷组 (VG) 关联,并将次数字与卷组中的每个逻辑卷关联。

逻辑卷特殊文件名可以由系统的管理员指定。 但是,通常选择的名称为 /dev/lv1/dev/lv2/dev/rlv1/dev/rlv2

执行字符 I/O 时,每个请求必须在逻辑卷的逻辑块边界上启动。 逻辑卷的逻辑块大小是该卷组中物理卷的块大小。 这意味着,对于逻辑卷设备的字符 I/O ,提供给 寻求 子例程的偏移量必须指定逻辑块大小的倍数。 此外,提供给 子例程的要读或写的字节数必须是逻辑块大小的倍数。

使用注意事项

注: 如果使用块特殊文件访问支持页面调度,逻辑卷或已安装文件系统的设备,那么将发生数据损坏,数据丢失或系统完整性丢失 (系统崩溃)。 块特殊文件是针对操作系统上的逻辑卷和磁盘设备提供的,并且仅用于系统管理文件系统,页面调度设备和逻辑卷。 不得将其用于其他目的。 有关使用特殊文件的其他信息可以在 "了解通过特殊文件进行 I/O 访问"内核扩展和设备支持编程概念中获取。

打开和关闭子例程

无特殊注意事项。

readx 和 writex 子例程的扩展字规范

扩展 I/O 子例程的 扩展 参数指示特定物理或逻辑操作,或同时指示这两者。 扩展 参数的上限为 4 位,保留供内部 LVDD 使用。 ext 参数的值由以下列表中的逻辑 OR 值定义,如 /usr/include/sys/lvdd.h 文件中所定义:

描述
writev 对此请求执行物理写验证。 此操作只能与 子例程一起使用。
RORELOC 对于此请求,仅对已重定位的现有缺陷执行重定位。 不应重新定位新检测到的缺陷。
MWC_接收_操作 镜像-写-一致性恢复操作。 此选项由恢复软件使用,以便使在崩溃时未完成写操作的所有镜像保持一致。
NOMWC 仅禁止针对此请求进行镜像写一致性恢复。 此操作只能与 子例程一起使用。
AVOID_C1, AVOID_C2, AVOID_C3 对于此请求,请避免使用指定的镜像。 此操作只能与 子例程一起使用。
RESSYNC_OP 对于此请求,请同步指定的逻辑磁道组 (LTG)。 此操作只能与 子例程配合使用,并且必须是唯一的操作。 同步条带化逻辑卷时,由于未按条带化方式读取逻辑磁道组,因此返回的数据无法由应用程序使用。
LV_读取备份 请仅读取指定为备份镜像副本的镜像副本。
LV_WRITE_BACKUP 请仅写入指定为备份镜像副本的镜像副本。
LV_READ_ONLY_C1 仅读取其中一个数据副本。
LV_READ_ONLY_C2 仅读取数据的两个副本。
LV_READ_ONLY_C3 仅读取数据的三个副本。
LV_READ_STALE_C1 即使数据已过时,也只需要复制其中一个数据。
LV_READ_STALE_C2 仅读取数据的两个副本,即使该数据已过时。
LV_READ_STALE_C3 仅读取数据的三个副本,即使该数据已过时。

使用此操作时存在一些限制。 要对整个逻辑分区 (LP) 进行同步,必须执行一系列使用 RESSYNC_OP 操作的 子例程。 系列必须从分区中的第一个逻辑磁道组 (LTG) 开始,并按顺序前进到最后一个 LTG。 与此值的任何偏差都将导致错误。 为每个 操作提供的长度必须正好为 128KB (LTG 大小)。

RESSYNC_OP 进行期间,可以在逻辑分区中的任何位置同时执行正常 I/O。 如果返回了错误,那么必须从第一个 LTG 重新启动该系列。 仅当对任何逻辑分区的每个旧物理分区副本进行再同步失败时,才会返回错误。 因此,在同步 LP 结束时仍然可以使用旧的物理分区。

正常的 I/O 操作不需要提供 扩展 参数,并且可以使用 子例程。

IOCINFO ioctl 操作

IOCINFO ioctl 操作返回 devinfo 结构,该结构在 /usr/include/sys/devinfo.h 文件中定义。 逻辑卷的逻辑块大小是该卷组中物理卷的块大小。 对于对逻辑卷设备驱动程序的请求,此结构中返回的值定义如下:

描述
DEVTYPE 等于 DD_DISK (如 devinfo.h 文件中所定义)
标志 等于 DF_RAND
开发子类型 等于 DS_LVDS_LVZDS_LVZ devsubtype 指示逻辑卷控制块不会占用逻辑卷的第一个块,因此空间可用于应用程序数据。 对于 oldvg 格式的卷组,逻辑卷的 devsubtype 始终为 DS_LV。 对于 bigvg 格式的卷组,如果 mklv -T 0 用于创建逻辑卷,那么逻辑卷的 devsubtype 将为 DS_LVZ 。 对于可扩展格式卷组,逻辑卷的 devsubtype 始终是 DS_LVZ (无论是否使用 mklv -T 0 标志来创建逻辑卷)。
拜特普塞克 逻辑卷的每个块的字节数
塞克普特尔克 每个逻辑磁道组的块数
特尔克采勒 每个分区的逻辑磁道组数
麻木尔克斯 逻辑卷中的逻辑块数

XLATE ioctl 操作

XLATE ioctl 操作将逻辑地址 (逻辑块号和镜像号) 转换为物理地址 (该设备上的物理设备和物理块号)。 调用者提供 xlate_arg 结构中的逻辑块号和镜像号,该结构在 /usr/include/sys/lvdd.h 文件中定义。 逻辑卷的逻辑块大小是该卷组中物理卷的块大小。 该结构包含以下字段:

描述
要转换的逻辑块号
mirror 要为其返回 (磁盘上的物理块号) 的副本的编号。 可能的值为:
1 副本 1 (主)
2 副本 2 (辅助)
3 副本 3 (第三版)
p_devt 物理dev_t(磁盘的主号/次号)
磁盘上的物理块号

XLATE64 ioctl 操作

XLATE64 ioctl 操作的功能与 XLATE 操作相同,只是它使用 xlate_arg64 结构,在此结构中,逻辑和物理块号以及设备 (主/次) 号字段的宽度为 64 位。

PBUFCNT ioctl 操作

PBUFCNT ioctl 操作会增加 LVM 用于逻辑至物理请求转换的物理缓冲区头 普布夫池的大小。 此池的大小由系统中的活动磁盘数确定,尽管该池是为向所有磁盘发出请求而共享的。

可以向任何活动卷组特殊文件 (例如 /dev/VolGrpName) 发出 PBUFCNT ioctl 操作。 传递给此 ioctl 的参数是一个指向包含 pbufs-每个磁盘 值的无符号整数的指针。 有效范围为 16-128。 缺省值为 16。 此值只能增大,并在 IPL 时复位为缺省值。 当系统中的活动磁盘数减少时, 普布夫 池的大小不会减小。

PBUFCNT ioctl 操作返回以下内容:

描述
EINVAL 指示无效参数值。 该值大于所允许的最大值,或者小于或等于当前值。
EFAULT 指示该参数的拷贝失败。
低电压检测错误 为其他缓冲区头分配空间时发生错误。
LVDD_成功 指示 ioctl 操作成功。

LV_INFO ioctl 操作

LV_INFO ioctl 操作返回有关逻辑卷的信息。

调用者在系统开放式调用中提供逻辑卷特殊文件,并通过 lv_info 结构返回信息,如 /usr/include/sys/lvdd.h 文件中所定义。 该结构包含以下字段:

描述
vg_id 逻辑卷是其成员的卷组标识
major_num 逻辑卷的主数目
minor_num 逻辑卷的次编号
MAX_lps 此逻辑卷允许的最大逻辑分区数
当前 lps Lofical 卷的当前大小 (按逻辑分区计算)
镜像策略 指定镜像的类型 (如果已镜像逻辑卷)。 有效值为 parallel , sequential , striped 和 striped_parallel。
许可权 指定逻辑卷是只读的还是读写的
bb_迁移 指定是否为逻辑卷激活坏区重定位
写入验证 指定是否强制对逻辑卷执行写验证命令以执行写操作
块数 构成逻辑卷的逻辑块的数目。 逻辑卷的逻辑块大小是该卷组中物理卷的块大小。 此值不包括镜像逻辑卷。
Mwcc 指定设置哪个镜像写一致性检查算法 (如果它处于活动状态)。
MWCC_非活动
对此逻辑卷禁用 mwcc
MWCC_活动模式
为此逻辑卷设置的 ACTIVE mwcc 算法
MWCC_被动模式
为此逻辑卷设置了 PASSIVE mwcc 算法
MWCC_被动恢复
在系统中断后进行 PASSIVE mwcc 恢复的逻辑镜像
mirr_able 指定逻辑卷是否能够进行镜像
Num_mirror 此逻辑卷的镜像副本数
条纹宽度 在其中对该逻辑卷进行条带分割的驱动器数
stripe_exp 分割块指数值
备份镜像 备份镜像掩码将为零,表示没有处于活动状态的备份副本。
AVOID_C1
对于第一个副本
AVOID_C2
对于第二个副本
AVOID_C3
对于第三个副本。

LV_INFO ioctl 操作返回以下内容:

描述
EFAULT 指示复制参数失败。

用于修改单个逻辑卷的 LVM ioctl 操作

描述
LV_QRYBKPCOPY 查询指定的备份镜像副本。
LV_SETBKPCOPY 指定备份镜像副本。
LV_FSETBKPCOPY 强制为备份镜像副本指定新名称。 当在活动镜像或备份镜像上存在旧分区时使用。
SET_SYNC_ON_RED 导致逻辑卷进入 MWCC_PASSIVE_RECOVERY 方式。 从一个镜像副本进行的所有读取都将导致非读镜像副本执行同步写入。
CLR_SYNC_ON_RED 清除逻辑卷的 MWCC_PASSIVE_RECOVERY 方式 (如果存在)。 如果无法保证镜像一致性,那么不应执行此操作。

LV_INFO64 ioctl 操作

LV_INFO64 ioctl 操作的功能与 LV_INFO 操作相同,只不过它使用 lv_info64 结构,其中 major_numminor_num 字段各为 32 位宽, num_blocks 字段为 64 位宽。

LVM_CFG_ASSIST ioctl 操作

LVM_CFG_ASSIST ioctl 操作将返回逻辑卷的性能统计信息。 它返回在 /usr/include/sys/lvdd.h 文件中定义的 cfg_assist 结构。 该结构包含以下字段:
描述
吞吐量 (throughput) 逻辑卷中磁盘的平均吞吐量 (以 KB/ 秒为单位)。 对于受支持的存储设备,将从设备获取吞吐量; 否则,将返回逻辑卷的运行时吞吐量。
等待时间 (latency) 逻辑卷中磁盘的平均等待时间 (以毫秒计)。 对于受支持的存储设备,将从设备获取吞吐量; 否则,将返回逻辑卷的运行时等待时间。
标志 要使用的标记。 有关有效标记的列表,请参阅 /usr/include/sys/lvdd.h 文件。
vg_max_transfer 卷组 (VG) 的最大传送大小(以 KB 计)。 vg_max_transfer 字段值是可在一个 I/O 请求中传送至卷组的磁盘的最大数据量。
写原子性 写入原子性(以字节计)。 write_atomicity 字段值是在对齐的边界上完成写入操作时未中断的最大字节数。
LVM_CFG_ASSIST ioctl 操作仅针对受支持的存储设备返回以下参数; 否则,它将返回空值。
描述
atomicWriteAlignment 写原子性的必需对齐 (以 KB 为单位)。
理想顺序读取大小 磁盘在文件系统下理想的、连续的读取大小(以 KB 计)。
理想顺序写入大小 磁盘在文件系统下理想的、连续的写入大小(以 KB 计)。
理想随机读取大小 磁盘在文件系统下理想的、随机的读取大小(以 KB 计)。
理想随机写入大小 磁盘在文件系统下理想的、随机的写入大小(以 KB 计)。
Stripsize 文件系统下磁盘的条带大小 (以 KB 为单位)。 这是 RAID 阵列中单个主轴上连续的数据量。
Stripesize Stripesize 以 KB 为单位。 (Stripesize = stripsize x num spindles in raid array-parity.)
并行性 组成 RAID 设备的主轴数,可以并行读取和写入 RAID 设备。

返回值

当完成此操作时,会返回值 0。 如果该操作失败,那么会返回值 -1 并且会将 errno 全局变量设为下列其中一个值:
描述
EFAULT 指示复制参数失败。
ENOMEM 指示分配内存失败。
再一次 指示运行时统计信息对于逻辑卷中的任何物理卷都不可用。 在向逻辑卷发出更多 I/O 后,请重试。

FORCEOFF_VG ioctl 操作

您可以通过 FORCEOFF_VG ioctl 操作来强制卷组脱机。 您可以向任何活动卷组特殊文件 (例如 /dev/VolGrpName 文件) 发出此操作。 传递到此 ioctl 的参数是一个指向整数的指针,该整数包含 /usr/include/sys/lvdd.h 文件中定义的值 FORCE_VG_OFF

强制卷组脱机时,后续逻辑卷将打开,并且卷组配置的 I/O 请求和更改将失败。 您必须将卷组脱机,然后再次将其联机以清除强制脱机状态。

如果此操作已完成,那么将返回值 0。 否则,将返回值, -1 并将全局变量errno 设置为以下值之一:
描述
EFAULT 指示此参数的复制失败。
EINVAL 指示此参数值无效。

错误代码

除了 ioctl 子例程返回的可能一般错误之外,还可以从特定 ioctl 操作类型返回下列错误。

描述
ENXIO 该逻辑卷不存在。 (此错误类型与 IOCINFOXLATE ioctl 和 XLATE64 操作有关。)
ENXIO 逻辑块号大于逻辑卷的大小。 (此错误类型仅与 XLATE ioctl 和 XLATE64 ioctl 操作有关。)
ENXIO 复制 (镜像) 号小于 1 或大于实际复制数。 (此错误类型仅与 XLATE ioctl 和 XLATE64 ioctl 操作有关。)
ENXIO 未将任何物理分区分配给此副本 (镜像)。 (此错误类型仅与 XLATE ioctl 和 XLATE64 ioctl 操作有关。)