将 tar 存档写入磁带,然后提取单个文件

将 tar 存档写入磁带,然后提取单个文件

我想将 tar 存档写入磁带,同时将每个文件的块偏移量存储在查找表中。然后,当我想从存档中恢复单个文件时,我会寻找磁带上的相应块并单独恢复该文件。

tar 是否支持以这种方式恢复文件?即当磁带未位于档案的开头时。

请注意,我不会使用任何压缩。

如果 tar 不支持这个我怎么能完成这个? (也许使用 dd ?)

答案1

tar在这里对您没有帮助,因为您不知道去哪里寻求帮助,但是已经有一个类似的解决方案,该解决方案在项目中使用了大约 20SAMFS/QFSHSM

在该解决方案中,起始块号被存档在单独的数据库中。

这里的问题是磁带查找不是基于 512 字节块,而是基于更大的磁带记录大小。因此,实现此功能的唯一方法是查找文件的磁带块号,mt fsr xxx在磁带上使用,然后tarignore checksum errors模式启动。

这可以工作,但它有一个问题,因为tar在成功提取指定文件后不会退出,并且您需要等到当前磁带文件结束。

如果您尝试过这个方法并相信它是值得的,我可以添加一个相关选项以star让它在文件被提取后 exit() 。

star已经有一个选项-block-number(与 一起-v)在模式下打印基于 512 字节的块编号-c。如果将这些数字除以分块因子(使用整数算术对结果进行舍入),您将获得mt fsf向前查找所需的参数。

star(in )的下一个版本schilytools将于下周的某一天准备就绪。它将包括一个新选项-one-filé和另一个选项iskip=offset,允许从读取数据的第一个块中跳过指定数量的数据。这将使您避免该-i选项。

从今天起,schilytools-2020-06-09 已发布并star添加了以下选项:

  • -one-file如果在提取模式下使用此选项并且文件匹配,则star在处理此文件后退出。

  • iseek=#是在查找存档头之前在第一个读取的磁带块中跳过的字节偏移量。

  • mtseek=#这是一个基于 512 字节的块偏移量,基于 打印的数字star -cv -block-offset ...。如果存档是普通文件,则在开始读取之前先对该偏移量star执行操作。lseek()如果存档是磁带,star则将块偏移参数除以磁带阻塞因子,并首先发出ioctl()将磁带转发到该位置的命令,然后隐式计算余数作为iseek第一个读取块中的偏移量。

  • 如果使用star -xp mtseek=# -one-file pat=* ...星号转发磁带,则读取文件并在恢复文件后退出。

相关内容