我想将 tar 存档写入磁带,同时将每个文件的块偏移量存储在查找表中。然后,当我想从存档中恢复单个文件时,我会寻找磁带上的相应块并单独恢复该文件。
tar 是否支持以这种方式恢复文件?即当磁带未位于档案的开头时。
请注意,我不会使用任何压缩。
如果 tar 不支持这个我怎么能完成这个? (也许使用 dd ?)
答案1
tar
在这里对您没有帮助,因为您不知道去哪里寻求帮助,但是已经有一个类似的解决方案,该解决方案在项目中使用了大约 20SAMFS/QFS
年HSM
。
在该解决方案中,起始块号被存档在单独的数据库中。
这里的问题是磁带查找不是基于 512 字节块,而是基于更大的磁带记录大小。因此,实现此功能的唯一方法是查找文件的磁带块号,mt fsr xxx
在磁带上使用,然后tar
以ignore 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=* ...
星号转发磁带,则读取文件并在恢复文件后退出。