各ファイルのブロックオフセットをルックアップテーブルに保存しながら、テープにtarアーカイブを書きたいです。その後、アーカイブから単一のファイルを回復したい場合は、テープでそのブロックを見つけて、そのファイルを個別に回復します。
tarはこのようにファイルの回復をサポートしていますか?これは、テープがアーカイブの先頭にない場合です。
圧縮を使用しません。
tarがそれをサポートしていない場合、どうすればこれを行うことができますか? (おそらくddを使用していますか?)
答え1
tar
どこで助けを求めるのか分からないので、ここでは役に立ちません。しかし、すでに約20SAMFS/QFS
年間プロジェクトで使用されてきた同様のソリューションがありますHSM
。
このソリューションでは、開始ブロック番号が別々のデータベースに保持されます。
ここでの問題は、テープ検索が512バイトブロックではなく、より大きなテープレコードサイズに基づいていることです。したがって、これを達成する唯一の方法は、ファイルのテープブロック番号を見つけてmt fsr xxx
テープで使用してからモードtar
で起動することですignore checksum errors
。
tar
これはうまくいきますが、指定されたファイルを正常に抽出した後でも終了せず、現在のテープファイルが終了するのを待つ必要があるため、問題があります。
この方法を試しても価値があると思われる場合は、star
ファイルを抽出して終了するオプションを追加できます。
star
モードで512バイトベースのブロック番号を印刷するオプション-block-number
(とともに)はすでにあります。この数値をブロック要素で除算すると(整数算術を使用して結果を丸める)、前方検索に必要なパラメータを取得できます。-v
-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=* ...
ファイルを読み取り、ファイルを復元して終了します。