公共的块头(MTF_DB_HDR) 结构可以在每个 DBLK 的开头找到。 MTF_DB_HDR 包含了每个 DBLK 需要的概要信息以及描述了 DBLK 的类型的成员,它的属性(连续性,压缩,MBC 呈现技术,等),操作系统相关信息以及 DBLK 定义的对象的可显示大小(比如:文件大小)。
偏移 | 字段名 | 类型 | 大小 |
---|---|---|---|
0 00h | DBLK Type | UINT32 | 4 字节 |
4 04h | Block Attributes | UINT32 | 4 字节 |
8 08h | Offset To First Event | UINT16 | 2 字节 |
10 0Ah | OS ID | UINT8 | 1 字节 |
11 0Bh | OS Version | UINT8 | 1 字节 |
12 0Ch | Displayable Size | UINT64 | 8 字节 |
20 14h | Format Logical Address | UINT64 | 8 字节 |
28 1Ch | Reserved for MBC | UINT16 | 2 字节 |
30 1Eh | Reserved | - - - | 6 字节 |
36 24h | Control Block ID | UINT32 | 4 字节 |
40 28h | Reserved | - - - | 4 字节 |
44 2Ch | OS Specific Data | MTF_TAPE_ADDRESS | 4 字节 |
48 30h | String Type | UINT8 | 1 字节 |
49 31h | Reserved | - - - | 1 字节 |
50 32h | Header Checksum | UINT16 | 2 字节 |
DBLK Type {4 bytes}
DBLK Type 成员用于指定 DBLK 的类型(MTF_SSET,MTF_VOLB,等)。 开发者可以添加他们自己的 DBLK Type 但他们必须先被 MTF Review Committee批准并且实现。 应用程序必须可以处理那些未知的 DBLKs。 如果遇到一个未知的 DBLK Type,应用程序应该使用 MTF_DB_HDR部分的信息去跳过和那个DBLK关联的信息。
注意: IDs 的值被选出来了,因此当你查看它的 16 进制的值时,可以容易通过 ASCII 部分来分辨出来,并且通过描述中的缩写可以知道它的由来。
DBLK 名称 | 描述 | 四字母 ID | 十六进制值 |
---|---|---|---|
MTF_TAPE | 磁带头 描述块 | 'TAPE' | 0x45504154 |
MTF_SSET | 数据集起始描述块 | 'SSET' | 0x54455353 |
MTF_VOLB | 卷描述块 | 'VOLB' | 0x424C4F56 |
MTF_DIRB | 目录描述块 | 'DIRB' | 0x42524944 |
MTF_FILE | 文件描述块 | 'FILE' | 0x454C4946 |
MTF_CFIL | 损坏对象描述块 | 'CFIL' | 0x4C494643 |
MTF_ESPB | 填充结束描述块 | 'ESPB' | 0x42505345 |
MTF_ESET | 数据集结束描述块 | 'ESET' | 0x54455345 |
MTF_EOTM | 磁带标记结束描述块 | 'EOTM' | 0x4D544F45 |
MTF_SFMB | 软卷标描述块 | 'SFMB' | 0x424D4653 |
Block Attributes {4 bytes}
Block Attributes 是一个用于指定 DBLK 的属性的 32 比的成员。 下表显示和描述了这个成员中每一位的定义。 这些属性和磁带格式问题有直接的关联。
低16位(BIT0 - BIT15)是通用语所有类型的 DBLK 而高16位(BIT16 - BIT31)是特定类型的 DBLK 才有用的。 这种方法可以使得同一个比特的含随 DBLK 的不同而有不同含义。 需要注意的是一些在 DBLK 类型一栏值为 any 的比特不一定在所有的DBLK中都有效,只是可以用于不止一种类型。 下表中没有列出的比特保留下来作为将来扩展之用。
名称 | 描述 | DBLK 类型 | 值 |
---|---|---|---|
MTF_CONTINUATION | Bit set if DBLK is a continuation from the previous tape. | any | BIT0 |
MTF_COMPRESSION | Bit set if compression may be active. | any | BIT2 |
MTF_EOS_AT_EOM | Bit set if the End Of Medium was hit during end of set processing. | any | BIT3 |
MTF_SET_MAP_EXISTS | Bit set if an Media Based Catalog Set Map can be found on the tape. | MTF_TAPE | BIT16 |
MTF_FDD_ALLOWED | Bit set if an attempt will be made to put a Media Based Catalog File/Directory Detail section on the tape. | MTF_TAPE | BIT17 |
MTF_FDD_EXISTS | Bit set if a Media Based Catalog File/Directory Detail section has been successfully put on the tape for this Data Set. | MTF_SSET | BIT16 |
MTF_ENCRYPTION | Bit set if encryption is active for the data streams within this Data Set. | MTF_SSET | BIT17 |
MTF_FDD_ABORTED | Bit set if a Media Based Catalog File/Directory Detail section was aborted for any reason during the write operation. | MTF_ESET | BIT16 |
MTF_END_OF_FAMILY | Bit set if the Media Based Catalog Set Map has been aborted. This condition means that additional Data Sets cannot be appended to the tape. | MTF_ESET | BIT17 |
MTF_ABORTED_SET | Bit set if the Data Set was aborted while being written. This can happen if a fatal error occurs while writing data, or if the user terminates the data management operation. An MTF_ESET DBLK containing this flag is put at the end of the Data Set even if it was aborted. | MTF_ESET | BIT18 |
MTF_NO_ESET_PBA | Bit set if no Data Set ends on this tape (i.e. continuation tape must follow this tape). | MTF_EOTM | BIT16 |
MTF_INVALID_ESET_PBA | Bit set if the Physical Block Address (PBA) of the MTF_ESET is invalid because the tape drive doesn't support physical block addressing. | MTF_EOTM | BIT17 |
注意: BIT0 - BIT31 表示这个 32 位的值中的一个单独的比特。 BIT0 指最低位的比特而 BIT31 指最高位的比特。
Offset To First Event {2 bytes}
Offset To First Event 字段用于指定第一个和 DBLK 关联的数据流的偏移(从 DBLK 的开始地址算起)。 如果没有数据流和 DBLK 关联,那么这个成员将包含下一个 DBLK 的偏移。
注意:这是为了和 MTF Version 1.0 草案之前的版本向下兼容。 MTF Version 1.00a 指定了所有的 DBLKs 至少有一个数据流和它关联以及最后一个数据流为 SPAD 数据流。
OS ID {2 bytes}
OS ID 指定这个和 DBLK 关联的操作系统的信息。 目前在 附录 A 操作系统的相关数据 中列出了这个成员以及 OS Version 成员预定义的值。 开发者可以增加这个成员中的值,但是新的值必须先“注册”。
OS Version {2 bytes}
OS Version 成员定义了在 OS ID 成员定义的特定操作系统的版本。 在这里指定的“版本号”并不是操作系统的发布版本号(例如Windows NT Version 3.5)而是用于在 DBLK 中表现特定 OS 信息的结构的版本。 查看 附录 A 操作系统的相关数据 来获取更多的信息。
Displayable Size {8 bytes}
Displayable Size 成员使用 UINT64 结构去指定 DBLK 中可以被应用程序显示的大小。 例如:一个文件被保存在 文件描述块 中。 可以显示的大小或许和文件的物理大小不一样,因此仅用于显示的目的。
Format Logical Address {8 bytes}
Format Logical Address 成员同样使用 UINT64 结构来指定这个DBLK的FLA。 查看 3.4 小节获取更多关于 FLA 的信息。
Reserved for MBC {2 bytes}
Reserved for Media Based Catalog(MBC) 成员用于在 第二类 MBC-SLO Set Map 和 FDD 中保存应用程序相关的信息。 如果不是 第二类 MBC-SLO Set Map 和 FDD 这个结构为 0。
Control Block ID {4 bytes}
Control Block ID 成员用于错误恢复。 MTF SSET DBLK 中的 Control Block ID 的值为0。 数据集中所有后续的 DBLKs 中的 Conrol Block ID 的值都是后面的比前面的大。 这个成员只有在数据集中 MTF_SSET 之后以及 MTF_ESET 之前的 DBLKs 有定义。
OS Specific Data {4 bytes}
OS Specific Data 成员使用 MTF_TAPE ADDRESS 结构来指定 操作系统相关结构 中的位置和大小。 这个结构的值依赖于 OS ID 和 OS Version 成员的值以及 DBLK 的类型。 鉴定操作系统以及版本号的结构在附录 C 中定义。
String Type {1 byte}
String Type 是一个用于指定这个 DBLK 中存储的字符串格式的单字节的成员。 下表列出了这个成员可能的值。
名称 | 描述 | 值 |
---|---|---|
NO_STRINGS | 指明没有字符串和 DBLK 关联 | 0 |
ANSI_STR | 指明字符串是单字节的 ANSI 字符 | 1 |
UNICODE_STR | 指明字符串是双字节的 Unicode | 2 |
Header Checksum {2 bytes}
Header Checksum 成员是一个在 MTF_DB_HDR 中的除了它本身外的其他的成员的 16 比特的字的异或(XOR)和。 这个成员用于检测磁带中的数据是否损坏。
Reserved {1 byte}
Reserved 成员用于预留出来作为将来使用,因此现在这个成员不应该用来存储信息。 这个成员应该用 0 填充。
除了 DBLK 的头 中的 attribute 成员外,还有一个存在于除了 MTF_EOTM 和 MTF_ESPB 之外的其他 DBLK 包含在 block specific section 中的 attribute 成员。 这些属性属于数据的内容,而不是磁带这一层。 例如,在MTF_SSET DBLK 中的 attributes 成员中有一个比特指定了创建数据集所用的数据管理操作的类型(传输,拷贝,普通备份,增量备份,等。)。 在 MTF_DIRB 和 MTF_FILE DBLKs 中这些比特用于指定这个目录或者文件是否是只读,隐藏,系统或者自从上次备份以来有没有修改过。
可以在下面关于单独的 DBLK 的描述中找到 特定 DBLK 的比特 的定义以及作用。 目前并不是所有包含这个成员的 DBLKs 都定义了这些比特。 这些成员预先添加作为将来使用。
对于所有 特定 DBLK specific attribute 成员来说有一个共同点。 这个 32 比特成员的高位字节(BIT24 - BIT31)用于销售商特定(vendor specific)的属性。 这些比特不需要注册。 需要注意的是,为了保护数据的可交换性,这些销售商特定的比特 不应该 包含任何与恢复数据有关的数据。
DBLKs中的字符串的长度由 MTF_TAPE_ADDRESS 结构中的 Size 成员来决定。 除非特别指出,这些字符串并 不是 以 NULL 结尾并且由 DBLK 中的 MTF_DB_HDR 中的 String Type 成员指定字符串类型。