流数据紧跟着流头的校验字段。 本部分说明了不同流 ID 类型的流数据格式。
本部分说明了与操作系统无关的数据流。
名称 | 说明 | 值 |
---|---|---|
STANDARD_DATA_STREAM | 标准的文件数据流。 | 'STAN' |
PATH_NAME_STREAM | 放在流的目录名。 | 'PNAM' |
FILE_NAME_STREAM | 支持扩展长度的文件名。 | 'FNAM' |
CHECKSUM_STREAM | 前一个数据的校验。 | 'CSUM' |
CORRUPT_STREAM | 前一个流是损坏的。 | 'CRPT' |
PAD_STREAM | 填充到下一个 DBLK 流。 | 'SPAD' |
SPARSE_STREAM | 稀疏流。 | 'SPAR' |
MBC_LMO_SET_MAP_STREAM | 查看 第一类 MBC。 | 'TSMP' |
MBC_LMO_FDD_STREAM | 查看 第一类 MBC。 | 'TFDD' |
MBC_SLO_SET_MAP_STREAM | 查看 第二类 MBC。 | 'MAP2' |
MBC_SLO_FDD_STREAM | 查看 第二类 MBC。 | 'FDD2' |
当流头的流 ID 字段设为 'STAN' 时表示数据流为标准数据流。 标准数据流包含普通的文件数据。
Window NT 注意事项: 当使用 Win32 BackupRead API 的时候,与读对象关联的每个数据流都有一个 Win32 流头在前面。这个 Win32 流头应该拿来填充 MTF 流头的信息,但不需要作为数据流的一部分写到媒介中。
对于标准数据,WIN32_STREAM_ID 的 dwStreamId 字段应该设为 BACKUP_DATA。
当流头的流 ID 字段设为 'PNAM' 时表示数据流为在流的目录名。 MTF 的 DBLK 大小在 MTF_TAPE DBLK 格式化的逻辑块大小限制。 如果由于添加目录名到 MTF_DIRB DBLK 会导致新的大小超过了 格式化的逻辑块大小的话,目录名会放在和 MTF_DIRB DBLK 关联的第一个数据流中。 在 MTF_DIRB DBLK 的目录属性中 PATH_IN_STREAM 必须设置。
注意:当发生跨越时,在流中的目录名必须与续集的 MTF_DIRB DBLK 关联。
当流头的流 ID 字段设为 'FNAM' 时表示数据流为在流的文件名。 MTF 的 DBLK 大小在 MTF_TAPE DBLK 格式化的逻辑块大小限制。 如果由于添加文件名到 MTF_FILE DBLK 会导致新的大小超过了 格式化的逻辑块大小的话,文件名会放在和 MTF_FILE DBLK 关联的第一个数据流中。 在 MTF_FILE DBLK 的目录属性中 FILE_IN_STREAM 必须设置。
注意:当发生跨越时,在流中的文件名必须与续集的 MTF_FILE DBLK 关联。
当流头的流 ID 字段设为 'CSUM' 时表示数据流为校验流。 校验流用于验证流数据的一致性。 每个和 DBLK 关联的数据流都可以有一个校验流。 如果一个数据流要校验数据的一致性,流头的流媒介格式属性必设置 STREAM_CHECKUMED 比特并且紧跟在数据流后面的必须是校验流(CSUM)。
校验是一个线性流数据的 32位(4 字节)的 异或 和。 和流数据如何分段无关,用于生成 32 位校验和的软件算法必须保持一致。 比如,如果流数据是分段为 1,2,3 或 4 字节,算法应该生成同样的 32位校验。
当流头的流 ID 字段设为 'CRPT' 时表示数据流为损坏流。 损坏流和 MTF_CFIL DBLK 联合起来表示流是损坏的。 MTF_CFIL DBLK 有只能标识单个数据流是损坏的限制。 损坏流和损坏的数据流一一对应。 损坏流没有任何流数据。
当流头的流 ID 字段设为 'SPAD' 时表示数据流为填充流。 填充流通常是与 DBLK 关联的最后一个流。 填充流用于指示没有其的数据流和 DBLK 关联并且填充到对齐下一个格式化的逻辑块,使得下一个 DBLK 或者 卷标 可以放置。 如果填充流刚好在卷标前面,填充流同时需要填充到对齐物理块边界。 填充流的数据需要设置为 NULL(二进制的 0)来维持 C2 安全级别。
注意:前期的 MTF Version 1.0 specification 不需要填充流。 在这种情况下,MTF_DB_HDR 的 Offset To First Event 字段 会指向 DBLK 而不是数据流。 在这种情况下,你应该读取流头的大小然后验证校验。 如果校验和预计的一样,那么这是一个流头。 如果不相等,那么需要读取 MTF_DB_HDR 的大小然后检查校验和。 如果校验符合,那么这是一个 DBLK。 如果不符合,需要尝试恢复错误以及寻找下一个 DBLK。
当流头的流 ID 字段设为 'SPAR' 时表示数据流为稀疏流。 稀疏帧头紧跟在流头,并且在流长包含。 稀疏帧头指定稀疏文件的偏移。 稀疏数据的长度是流长度减去稀疏帧头。
偏移 | 内容 | 类型 | 大小 |
---|---|---|---|
0 0h | 稀疏文件的偏移 | UINT64 | 8 字节 |
本节说明了特定于 Windows NT 操作系的数据流。 大多数的 NT 流是基于使用 Win32 BackupRead API。 在数据前面的是 Win32 流头(WIN32_STREAM_ID) 来指定跟随的数据的类型。 Win32 流头用于填充 MTF 流头,但是不作为流数据的一部分。
名称 | 说明 | 值 |
---|---|---|
STANDARD_DATA_STREAM | 查看上面关于 Windows NT 的问题。 | 'STAN' |
SPARSE_STREAM | Windows NT 稀疏文件。BACKUP_SPARSE_DATA 使用平台无关的 SPARSE_STREAM。 | 'SPAR' |
NTFS_ALT_STREAM | NT 备用数据流。 | 'ADAT' |
NTFS_EA_STREAM | NT 扩展信息数据流。 | 'NACL' |
NT_SECURITY_STREAM | NT 特定的安全数据流。 | 'NACL' |
NT_ENCRYPTED_STREAM | NT 加密数据流。 | 'NTED' |
NT_QUOTA_STREAM | NT 配额数据流。 | 'NTQU' |
NT_PROPERTY_STREAM | NT 属性数据流。 | 'NTPR' |
NT_REPARSE_STREAM | NT 重分析数据流。 | 'NTRP' |
NT_OBJECT_ID_STREAM | NT 对象 ID 数据流。 | 'NTOI' |
当流头的流 ID 字段设为 'ADAT' 时表示数据流为 Windows NT 备用数据流。 对于 Windows NT 备用数据流来说,WIN32_STREAM_ID 字段的 dwStreamId 需要设置为 BACKUP_ALTERNATE_DATA。
在 MTF 中,Windows NT 备用数据流需要一些特殊的处理。 对这些流来说 MTF 流头和平常一样,流类型字段为 'ADAT'。 但是,一个 4 字节的流名称大小字段以及流名称字段需要放在 MTF 数据流真正数据的前面,MTF 的流头的大小字段包括了 4 字节流名称大小字段和跟着的流名称。 这个名称的字符类型是 UNICODE,而大小是字节大小,不包括 NULL 结束符。
当流头的流 ID 字段设为 'NTEA' 时表示数据流为 Windows NT 扩展属性信息数据流。 对于 Windows NT 扩展属性信息来说,WIN32_STREAM_ID 字段的 dwStreamId 需要设置为 BACKUP_EA_DATA。
当流头的流 ID 字段设为 'NACL' 时表示数据流为 Windows NT 安全数据。 对于 Windows NT 安全数据来说,WIN32_STREAM_ID 字段的 dwStreamId 需要设置为 BACKUP_SECURITY_DATA。
注意:流头的流文件系统属性字段必须设置 STREAM_CONTAINS_SECURITY 比特。
当流头的流 ID 字段设为 'NTED' 时表示数据流为 Windows NT 加密数据。 数据通过 Windows NT 加密 APIs 而不是 BackupRead 获取。
当流头的流 ID 字段设为 'NTQU' 时表示数据流为 Windows NT 配额数据。 数据通过 Windows NT 配额 APIs 而不是 BackupRead 获取。
当流头的流 ID 字段设为 'NTPR' 时表示数据流为 Windows NT 属性数据。 对于 Windows NT 属性数据,WIN32_STREAM_ID 字段的 dwStreamId 字段的值应该设为 BACKUP_PROPERTY_DATA。
当流头的流 ID 字段设为 'NTRP' 时表示数据流为 Windows NT 重分析数据。 对于 Windows NT 重分析数据,WIN32_STREAM_ID 字段的 dwStreamId 字段的值应该设为 BACKUP_REPARSE_DATA。
当流头的流 ID 字段设为 'NTOI' 时表示数据流为 Windows NT 对象 ID 数据。 对于 Windows NT 对象 ID 数据,WIN32_STREAM_ID 字段的 dwStreamId 字段的值应该设为 BACKUP_OBJECT_ID。
略
略
略
略