私たちはデータアーカイブシステムを構築しており、さまざまな種類のストレージ(テープ/ディスク/クラウド)にデータの重複コピーを保存することを選択し、tar、zipなどのさまざまなアーカイブ形式を使用するオプションもあります。 。
多くのファイルがかなり大きく(50GB以上)、保存されたデータは変更されません。我々はテープがこのユースケースに最適であることを知りました。各アーカイブファイルのブロックオフセットをデータベースに保存し、テープがほぼいっぱいになると、すべてのファイルブロックオフセットのインデックスを最後に書き込んでそれを「完了」します(それで自己説明的です)。
フォーマットされていないハードドライブ(つまり、ファイルシステムなし)で同じことを行い、ブロックデバイスに読み書きできるかどうか疑問に思います。最初のブロックから始めて、ディスクにアーカイブを追加し、ディスクがほぼいっぱいになるまですぐに、あるアーカイブを別のアーカイブに書き込みます。これにより、ファイルの断片化の問題を回避し、ディスク容量を最大限に活用し、読み取り/書き込みを高速化し、必要に応じてデータの回復を容易にします。
テープを使用すると、記録されたデータの終わりを簡単に見つけることができますが、ディスクを使用すると、最後に使用されたブロックの番号を記録し、次のブロックから次のアーカイブ書き込みを開始する必要があると思います。以前に作成されたデータを上書きしないように厳密な方法で計算できる方法を知りたいです。
ddを使用すると、検索オプションを使用すると、これは非常に簡単になると思いました。しかし、ファイルを中間アーカイブ(一時ディスク上にある)にコピーするのにかかる時間を避けるために、アーカイブツール(tar、zipなど)を使用してデータをディスクに直接書き込みたい(テープを使用するのと同じ)。 )、次にddを使用してこのファイルをアーカイブディスクに書き込みます。しかし、tar、zipにはddなどのオプションはありません。私の考えでは、彼らはブロックデバイスを開いて最初から書き込むと思います。
以前に同様のことをしたことがある人、またはこのアイデアについて他の意見/考えを持っている人がいるかどうか疑問に思います。特に注意すべき潜在的な落とし穴があります。また、何も書き込む前にドライブをゼロで埋める必要がありますか?
答え1
「tar」はオプションで標準出力に出力でき、次に他のプログラム(たとえば「dd」)にパイプして目的のデバイスに移動できます。
数年前、私はテープと光バックアップメカニズムを製造する会社で働いていました。光学デバイス用のドライバを作成すると、残りのバックアップソフトウェアに対してテープデバイスのように動作します。