磁带 SCSI 设备驱动程序

用途

支持顺序存取大容量存储介质设备驱动程序。

语法

#include  <sys/devinfo.h>
#include  <sys/scsi.h>
#include  <sys/tape.h>
注: /dev/rmt0 /dev/rmt255 特殊文件提供对磁带的访问。 磁带主要用于备份,文件归档和其他离线存储。

与设备相关的子例程

大多数磁带操作是使用 关闭 子例程实现的。 但是,如果要以 "诊断" 方式打开设备,那么必须使用 奥佩克斯 子例程。

打开和关闭子例程

奥佩克斯 子例程是供诊断命令和实用程序使用的。 执行需要相应的权限。 在没有适当授权的情况下试图执行该子程序,会导致该子程序返回 -1 值,并将 errno 全局变量设置为 EPERM

奥佩克斯 子例程允许设备驱动程序进入 "诊断" 方式并禁用命令重试逻辑。 此操作允许执行 ioctl 操作,这些操作执行与诊断处理相关的特殊功能。 其他 奥佩克斯 功能 (例如,强制打开和保留的预留) 也可用。

传递给 奥佩克斯 子例程的 扩展 参数将选择要用于目标设备的操作。 ext 参数在 /usr/include/sys/scsi.h 文件中定义。 此参数可以包含以下标志值的任意组合以逻辑方式一起 OR 运算:

标志值 描述
SC_DIAGNOSTIC 将所选设备置于诊断方式。 此方式是单入方式。 当设备处于诊断方式时,将在 关闭 操作期间执行 SCSI 操作并禁用错误日志记录。 在诊断方式下,仅接受 关闭 和 ioctl 操作。 所有其他设备支持的子程序返回 -1 值, errno 全局变量设置为 EACCES 值。

仅当目标设备当前未打开时,才能以诊断方式打开该设备。 如果尝试在诊断模式下打开设备,而目标设备已经打开,则返回 -1 值,并将 errno 全局变量设置为 EACCES

SC_FORCED_OPEN 强制总线设备复位 (BDR) ,而不考虑另一个启动器是否保留了该设备。 在 序列开始之前,会将 SCSI 总线设备复位发送至该设备。 否则, 操作将正常执行。
SC_RETAIN_RESERVATION 在执行 关闭 操作后,通过不发出发行版来保留设备的保留。 此标志阻止其他发起方使用该设备,除非它们破坏主机的预留。

内核扩展和设备支持编程概念 中的 "openx 子例程的 SCSI 选项" 提供了有关开放式操作的更多具体信息。

ioctl 子例程

STIOCMD ioctl 操作提供了将 SCSI 命令直接发送到磁带设备的方法。 这使应用程序能够发出特定 SCSI 命令,这些命令不受磁带设备驱动程序直接支持。

要使用 STIOCMD 操作,必须以 "诊断" 方式打开设备。 如果在设备未处于诊断模式时尝试此命令,将返回 -1 值,并将 errno 全局变量设置为 EACCES 值。 STIOCMD 操作用于传递 scsi_iocmd 结构的地址。 该结构在 /usr/include/sys/scsi_buf.h 文件中定义。

有关发出参数的信息,请参阅 小型计算机系统接口 (SCSI) 规范 以获取适用的设备。

错误情况

除了列出的那些错误之外,针对此设备的 ioctl , 子例程在以下情况下不成功:

错误 描述
EACCES 指示已向不处于诊断方式的设备发出诊断命令。
EAGAIN 指示已尝试打开已经打开的设备。
EBUSY 指示目标设备已由另一个发起方保留。
EINVAL 指示提供了 O_APPEND 值作为打开方式。
EINVAL 指示由 操作提供的 nbyte 参数不是块大小的倍数。
EINVAL 指示 ioctl 操作的某个参数无效。
EINVAL 指示所请求的 ioctl 操作在当前设备上不受支持。
EIO 指示磁带机已复位或磁带已被更改。 如果先前对磁带执行的操作在关闭时使磁带超出磁带开始位置,那么打开时将返回此错误。
EIO 指示设备无法将指定的记录数向前移动或反向移动st_count迂到 EOM (介质结束) 或文件标记之前的字段。
EMEDIA 指示磁带设备迂到了不可恢复的介质错误。
电子文件 指示已尝试对已具有允许的最大打开设备数的 SCSI 适配器执行 操作。
ENOTREADY 指示磁带机中没有磁带,或者磁带机未准备就绪。
ENXIO 指示已尝试写入到 EOM 处的磁带。
EPERM 指示此子例程需要适当的权限。
ETIMEDOUT 指示某个命令已超时。
EWRPROTET 指示在只读磁带上尝试了请求读/写方式的 操作。
EWRPROTET 指示已在只读磁带上尝试执行影响介质的 ioctl 操作。

可靠性和可维护性信息

从磁带设备返回的错误如下所示:

错误 描述
异常中止命令 指示设备已结束命令。
空白检查 指示读取命令迂到了空白磁带。
数据保护 指示在受写保护的磁带上尝试了写操作。
良好完成 表示命令成功完成。
硬件错误 指示在命令执行期间或自测试期间发生了不可恢复的硬件故障。
非法的请求 指示非法命令或命令参数。
介质错误 指示该命令已终止,但出现未恢复的介质错误情况。 此情况可能是由磁带缺陷或脏头引起的。
未就绪 指示逻辑单元处于脱机状态。
已恢复的错误 指示在应用某些恢复后该命令成功。
单元辅助操作请求 指示设备已重置或已打开电源。

每次发生上述列表中的介质,硬件和异常终止命令错误时,都将记录这些错误。 异常中止命令 错误可能是可恢复的,但如果恢复失败,那么将记录该错误。 对于 已恢复错误 和已恢复的 异常中止命令 错误类型,将保留阈值; 超过这些阈值时,将记录错误。 然后将清除阈值。

注: 每次发生与设备相关的适配器错误时都会记录这些错误。

磁带设备介质错误的错误记录值

在错误记录模板中为磁带设备介质错误定义的字段为:

字段 描述
Comment 等于磁带介质错误。
Class 等于 H ,表示发生硬件错误。
Report 等于 TRUE ,表示在生成错误报告时应包含此错误。
Log 等于 TRUE ,指示在发生此错误时应创建错误日志条目。
Alert 等于 FALSE ,表示此错误不可警告。
Err_Type 等于 PERM ,表示永久性失败。
Err_Desc 等于 1332 ,指示磁带操作发生故障。
Prob_Causes 等于 5003 ,表示磁带介质。
User_Causes 等于 5100 和 7401 ,分别表示源自磁带和有缺陷的介质的原因。
User_Actions 等于 1601 和 0000 ,分别表明应更换可移动介质并重试操作,并应执行问题确定过程。
Inst_Causes 无。
Inst_Actions 无。
Fail_Causes 等于 5003 ,表示磁带介质。
Fail_Actions 等于 1601 和 0000 ,分别表示应更换可移动介质并重试操作,并应执行问题确定过程。

Detail_Data字段包含命令类型,设备和适配器状态,以及来自发生错误的特定设备的请求检测信息。 该Detail_Data字段包含在 err_rec 结构中。 此结构在 /usr/include/sys/errids.h 文件中定义。 sc_error_log_df 结构,它描述了包含在Detail_Data字段在 /usr/include/sys/scsi.h 文件中定义。

有关特定请求检测信息的格式,请参阅 小型计算机系统接口 (SCSI) 规范 以获取适用的设备。

错误-磁带或硬件异常终止命令错误的记录值

err_hdr 结构中的字段 (如 /usr/include/sys/erec.h 文件中针对硬件错误和异常中止的命令错误所定义) 为:

字段 描述
Comment 等于磁带硬件或异常中止命令错误。
Class 等于 H ,表示发生硬件错误。
Report 等于 TRUE ,表示在生成错误报告时应包含此错误。
Log 等于 TRUE ,指示在发生此错误时应创建错误日志条目。
Alert FALSE ,指示此错误不可警醒。
Err_Type 等于 PERM ,表示永久性失败。
Err_Desc 等于 1331 ,表示磁带机出现故障。
Prob_Causes 等于 6314 ,指示磁带机发生错误。
User_Causes 无。
User_Actions 等于 0000 ,指示应该执行问题确定过程。
Inst_Actions 无。
Fail_Causes 等于 5003 和 6314 ,表明故障原因分别是磁带和磁带机。
Fail_Actions 等于 0000 以执行问题确定过程。

Detail_Data字段包含命令类型,设备和适配器状态,以及来自发生错误的特定设备的请求检测信息。 该Detail_Data字段包含在 err_rec 结构中。 此结构在 /usr/include/sys/errids.h 文件中定义。 sc_error_log_df 结构,它描述了包含在Detail_Data字段在 /usr/include/sys/scsi.h 文件中定义。

有关特定请求检测信息的格式,请参阅 小型计算机系统接口 (SCSI) 规范 以获取适用的设备。

错误-已超过磁带的记录值-已恢复错误阈值

err_hdr 结构中定义的字段 (如 /usr/include/sys/erec.h 文件中针对已超过阈值计数器的已恢复错误所定义) 为:

字段 描述
Comment 指示已超过磁带已恢复的错误阈值。
Class 等于 H ,表示发生硬件错误。
Report 等于 TRUE ,表示在生成错误报告时应包含此错误。
Log 等于 TRUE ,指示在发生此错误时应创建错误日志条目。
Alert 等于 FALSE ,表示此错误不可警告。
Err_Type 等于 PERM ,表示永久性失败。
Err_Desc 等于 1331 ,表示磁带机出现故障。
Prob_Causes 等于 5003 和 6314 ,指示可能原因分别是磁带机和磁带机。
User_Causes 等于 5100 和 7401 ,分别表示介质有缺陷,读/写头很脏。
User_Actions 等于 1601 和 0000 ,表示应分别更换可移动介质和重试操作,并执行问题确定过程。
Inst_Causes 无。
Inst_Actions 无。
Fail_Causes 等于 5003 和 6314 ,指示原因分别是磁带机和磁带机。
Fail_Actions 等于 0000 ,以执行问题确定过程。

Detail_Data字段包含命令类型,设备和适配器状态,以及来自发生错误的特定设备的请求检测信息。 此字段包含在 err_rec 结构中。 err_rec 结构在 /usr/include/sys/errids.h 文件中定义。 该Detail_Data字段还指定超过阈值的错误类型。 sc_error_log_df 结构,它描述了包含在Detail_Data字段在 /usr/include/sys/scsi.h 文件中定义。

有关特定请求检测信息的格式,请参阅 小型计算机系统接口 (SCSI) 规范 以获取适用的设备。

磁带 SCSI 适配器的错误记录值-检测到错误

/usr/include/sys/erec.h 文件中为适配器检测到的错误定义的 err_hdr 结构中的字段为:

字段 描述
Comment 等于磁带 SCSI 适配器检测到的错误。
Class 等于 H ,表示发生硬件错误。
Report 等于 TRUE ,表示在生成错误报告时应包含此错误。
Log 等于 TRUE ,指示在发生此错误时应创建错误日志条目。
Alert 等于 FALSE ,表示此错误不可警告。
Err_Type 等于 PERM ,表示永久性失败。
Err_Desc 等于 1331 ,表示磁带机出现故障。
Prob_Causes 等于 3300 和 6314 ,分别表示适配器和磁带机出现故障。
User_Causes 无。
User_Actions 等于 0000 ,指示应该执行问题确定过程。
Inst_Causes 无。
Inst_Actions 无。
Fail_Causes 等于 3300 和 6314 ,分别表示适配器和磁带机出现故障。
Fail_Actions 等于 0000 ,以执行问题确定的过程。

Detail_Data字段包含命令类型和适配器状态。 此字段包含在 err_rec 结构中,该结构由 /usr/include/sys/err_rec.h 文件定义。 请求-检测信息不可用,并带有此类错误。 sc_error_log_df 结构描述包含在以下内容中的信息:Detail_Data字段,在 /usr/include/sys/scsi.h 文件中定义。

有关特定请求检测信息的格式,请参阅 小型计算机系统接口 (SCSI) 规范 以获取适用的设备。

错误-记录磁带机清洁错误的值

某些磁带机在需要清洁时返回错误。 在此类下对需要清洁的驱动器进行分组时发生的错误。

字段 描述
Comment 指示磁带机需要进行清洁。
Class 等于 H ,表示发生硬件错误。
Report 等于 TRUE ,表示在生成错误报告时应包含此错误。
Log 等于 TRUE ,指示在发生此错误时应创建错误日志条目。
Alert 等于 FALSE ,表示此错误不可警告。
Err_Type 等于 TEMP ,指示发生临时故障。
Err_Desc 等于 1332 ,表示磁带操作错误。
Prob_Causes 等于 6314 ,表示可能原因是磁带机。
User_Causes 等于 7401 ,表示脏的读/写头。
User_Actions 等于 0000 ,指示应该执行问题确定过程。
Inst_Causes 无。
Inst_Actions 无。
Fail_Causes 等于 6314 ,表示原因为磁带机。
Fail_Actions 等于 0000 ,表示要执行问题确定过程。

Detail_Data字段包含命令类型和适配器状态,以及来自发生错误的特定设备的请求检测信息。 此字段包含在 err_rec 结构中,该结构由 /usr/include/sys/errids.h 文件定义。 sc_error_log_df 结构描述包含在以下内容中的信息:Detail_Data字段,在 /usr/include/sys/scsi.h 文件中定义。

有关特定请求检测信息的格式,请参阅 小型计算机系统接口 (SCSI) 规范 以获取适用的设备。

错误-记录未知错误的值

由于未知原因而发生的错误将在此类中进行分组。 数据保护错误将属于此类。 这些由磁带设备驱动程序检测到的错误从未在磁带机中出现过。

未知错误的 err_hdr 结构描述了以下字段:

字段 描述
Comment 等于磁带未知错误。
Class 等于所有错误类。
Report 等于 TRUE ,表示在生成错误报告时应包含此错误。
Log 等于 TRUE ,指示在发生此错误时应该创建错误日志条目。
Alert 等于 FALSE ,表示此错误不可警告。
Err_Type 等于 UNKN ,指示错误类型是未知的。
Err_Desc 等于 0xFE00,指示错误描述是未知的。
Prob_Causes 无。
User_Causes 无。
User_Actions 无。
Inst_Causes 无。
Inst_Actions 无。
Fail_Causes 等于 0xFFFF,表示失败原因未知。
Fail_Actions 等于 0000 ,指示应该执行问题确定过程。

Detail_Data字段包含命令类型和适配器状态,以及来自发生错误的特定设备的请求检测信息。 该Detail_Data字段包含在 err_rec 结构中。 此字段包含在 /usr/include/sys/errids.h 文件中。 sc_error_log_df 结构描述包含在以下内容中的信息:Detail_Data字段,在 /usr/include/sys/scsi.h 文件中定义。

有关特定请求检测信息的格式,请参阅 小型计算机系统接口 (SCSI) 规范 以获取适用的设备。

文件

/dev/rmt0, /dev/rmt0.1, /dev/rmt0.2, ..., /dev/rmt0.7,

/dev/rmt1, /dev/rmt1.1, /dev/rmt1.2, ..., /dev/rmt1.7,...,

描述
/dev/rmt255, /dev/rmt255.1, /dev/rmt255.2, ..., /dev/rmt255.7 提供一个接口,以允许 SCSI 设备驱动程序访问 SCSI 磁带机。