rhdisk 特殊文件
用途
提供对物理卷 (固定磁盘) 设备驱动程序的原始 I/O 访问。
描述
rhdisk 特殊文件为物理磁盘的物理磁盘设备驱动程序提供原始 I/O 访问和控制功能。 通过 /dev/rhdisk0, /dev/rhdisk1提供原始 I/O 访问权, ... , 字符特殊文件。
应避免通过块特殊文件直接访问物理磁盘。 此类访问可能会影响性能,还会导致块 I/O 缓冲区高速缓存中的数据与系统页面中的数据之间存在数据一致性问题。 /dev/hdisk 块特殊文件保留供系统用于管理文件系统,页面调度设备和逻辑卷。
特殊文件名上的 r 前缀指示要将驱动器作为原始设备而不是块设备进行访问。 使用固定磁盘执行原始 I/O 需要所有数据传输都是磁盘块大小的倍数。 此外,对原始磁盘设备驱动程序执行的所有 lseek 子例程都必须生成一个文件指针值,该值是磁盘块大小的倍数。
使用注意事项
打开和关闭子例程
openx 子例程提供了打开序列的其他函数。 此子例程需要适当的许可权才能执行。 未经适当许可尝试执行此操作将导致返回 -1 值为,同时全局变量errno 被设置为EPERM。
读写子例程
readx 和 writex 子例程提供了影响原始数据传输的其他参数。 ext 参数指定适用于正在发出的请求的特定选项。 这些选项通过逻辑上 ORing 零个或多个以下值来构造。
| 项 | 描述 |
|---|---|
| writev | 对此请求执行物理写验证。 |
| HWRELOC | 在写入块之前执行指定块的硬件重定位。 仅当磁带机支持安全重定位时,才会执行此操作。 安全重定位可确保重定位一旦启动,无论是否停电,都将安全完成。 |
| UNSAFEREL | 在写入块之前执行指定块的硬件重定位。 如果磁带机支持任何类型的重定位 (安全或不安全) ,那么将执行此操作。 |
ioctl 子例程
仅为使用 ioctl 子例程的所有设备驱动程序定义了一个 ioctl 操作 IOCINFO。 其余 ioctl 操作都特定于物理磁盘设备。 IOCINFO 操作不需要诊断方式。
IOCINFO ioctl 操作返回设备类型 DD_DISK的结构。 此结构在 /usr/include/sys/devinfo.h 文件中定义。
错误代码
除了针对 ioctl, open, read和 write 子例程列出的错误外,还可能存在以下其他错误代码:
| 项 | 描述 |
|---|---|
| EACCES | 已在诊断方式下对设备进行 open 子例程调用。 |
| EACCES | 已对已打开的设备进行诊断 openx 子例程调用。 |
| EACCES | 未处于诊断方式时,已尝试执行诊断 ioctl 操作。 |
| EINVAL | read 或 write 子例程的 nbyte 参数不是磁盘块大小的倍数。 |
| EINVAL | 尝试了不受支持的 ioctl 操作。 |
| EINVAL | 尝试了不受支持的 readx 或 writex 子例程。 |
| EMEDIA | 目标设备已指示未恢复的介质错误。 |
| ENXIO | ioctl 子例程的参数无效。 |
| ENXIO | 已尝试在磁盘结束后执行 read 或 write 子例程。 |
| EIO | 找不到目标设备或目标设备未响应。 |
| EIO | 目标设备指示了未恢复的硬件错误。 |
| EMFILE | 已尝试对已具有最大允许打开设备数的适配器使用 open 子例程。 |
| EPERM | 调用者缺少相应的特权。 |
文件
| 项 | 描述 |
|---|---|
| /dev/hdisk0, /dev/hdisk1, ... /dev/hdiskn | 提供对物理卷 (固定磁盘) 设备驱动程序的块 I/O 访问。 |