Tar

將 tar 存檔寫入磁帶,然後提取單個文件

  • June 9, 2020

我想將 tar 存檔寫入磁帶,同時將每個文件的塊偏移儲存在查找表中。然後,當我想從存檔中恢復單個文件時,我會尋找磁帶上的相應塊並單獨恢復該文件。

tar 是否支持以這種方式恢復文件?即當磁帶未位於存檔的開頭時。

請注意,我不會使用任何壓縮。

如果 tar 不支持這一點,我怎麼能做到這一點?(也許使用dd?)

tar在這裡對您沒有幫助,因為您不知道去哪裡尋找,但是已經有一個類似的解決方案正在使用中。在項目中 20 年SAMFS/QFS作為HSM.

在該解決方案中,起始塊編號存檔在單獨的數據庫中。

這裡的問題是磁帶查找不能基於 512 字節塊工作,而是在更大的磁帶記錄大小基礎上工作。因此,完成這項工作的唯一方法是查找文件的磁帶塊號,mt fsr xxx在磁帶上使用,然後以tar模式啟動ignore checksum errors

這可能有效,但它有一個問題,因為tar它在成功提取命名文件後不會退出,您需要等到目前磁帶文件結束。

如果您對這種方法進行了一些嘗試並相信它是值得的,我可以添加一個相關的選項來star讓它在文件被提取後退出()。

star已經有一個選項-block-number(與 一起-v)在-c模式下列印基於 512 字節的塊編號。如果您將這些數字除以阻塞因子(使用整數運算來舍入結果),您將獲得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 ...。如果存檔是普通文件,starlseek()在開始讀取之前對該偏移量執行一次。如果存檔是磁帶,star則將塊偏移參數除以磁帶阻塞因子,並首先發出ioctl()將磁帶轉發到該位置的 an,然後隱含地將餘數計算為iseek第一個讀取塊中的偏移量。
  • 如果您使用star -xp mtseek=# -one-file pat=* ...星號轉發磁帶,讀取文件並在恢復文件後退出。

引用自:https://unix.stackexchange.com/questions/590820