大容量の小さなファイル(合計1TB)を圧縮して転送するときのメモリの問題

大容量の小さなファイル(合計1TB)を圧縮して転送するときのメモリの問題

約1TBのストレージ容量を占める500万のファイルがあります。このファイルを第三者に転送する必要があります。

最良のアプローチは何ですか?サイズを減らすために.tar.gzを試しましたが、コンピュータに8 GBのRAMがあるにもかかわらず、「システムメモリ不足」エラーが発生しました。

通常のメールでファイルを送信するのが最善の解決策ですか?

答え1

コメントに記載されている追加情報は、OPがGUIメソッドを使用してファイルを生成していることを示します.tar.gz

GUIソフトウェアは、同じコマンドラインと比較してより多くの量を含むか、またはいくつかの「追加」機能(たとえば、進行状況バー)のために追加の不要なタスクを実行することがよくあります。 GUIソフトウェアがメモリ内のすべてのファイル名のリストを収集しようとすると、私は驚かないでしょう。プロファイルを作成するためにこれを行う必要はありません。プロのツールは間違いなくストリーミング入力と出力を処理するように設計されてtarいますgzip。つまり、メモリよりもはるかに大きい入力と出力を処理できます。

tarGUIプログラムを使用していない場合は、次のように完全に日常的な呼び出しを使用してこのアーカイブを作成できます。

tar czf foo.tar.gz foo

その中には、foo500万個のファイルがすべて入っているディレクトリがあります。

この質問に対する他の答えは、tar結果を複数の部分に分割したい場合に試すことができるいくつかの追加の代替コマンドを提供します。

答え2

「500万個」ファイル、合計1TB?これにより、ファイルは非常に小さくなければなりません。私は試してみたいだけですrsync

rsync -alPEmivvz /source/dir remote.host.tld:/base/dir

いずれかがない場合、またはユースケースで許可されていない場合は、rsync少なくとも7zあなたのデータで動作していることを確認します。おそらくそうではないかもしれませんが、それでも試してみる価値があると思います。

7z a archive.7z /source/dir

または不快な場合は、7z少なくとも.tar.xzアーカイブを作成してください。

tar cJv archive.tar.xz /source/dir

(以前のバージョンではアーカイブをtar作成しませんが、スイッチを使用するとアーカイブを作成することに注意してください。以前のバージョンでもこのフラグを完全にはサポートしていません。).tar.xz.tar.lzmaJtarJ


これらのファイルを生成するためにGUIプログラムを使用しているので、コマンドラインインターフェイスを使用することは少し不便であると仮定します。

コマンドラインインターフェイスでアーカイブの作成、管理、および抽出を容易にするために、次の小さなユーティリティがあります。atool。それは私が見たほとんどすべての一般的なディストリビューションで動作し、非常にあいまいなアーカイブを除いて、私が偶然見つけたほとんどすべてのアーカイブで動作します。

atool作業環境にいる場合は、ディストリビューションがすでにリポジトリにあることを確認するか、管理者にインストールを依頼してください。

atool複数のシンボリックリンクを独自にインストールするので、パッケージングとアンパッキングが非常に簡単です。

apack archive.tar.xz <files and/or directories>

アーカイブを作成します。

aunpack archive.7z

拡張アーカイブ。

als archive.rar

ファイルの内容を一覧表示します。

どの種類のアーカイブが作成されるかは、コマンドラインからatoolアーカイブのファイル拡張子として識別できます。

答え3

25:1よりも優れた性能を発揮できない限り、サードパーティと交換できるハードウェアテープ形式の種類がなければ、メールで送信する前に圧縮すると何の利点も得られません。

最大の共通ストレージは、約40GBを提供するBlu-rayです。データを適切にするには、データを25:1に圧縮する必要があります。第三者がDVDのみを持っている場合は、125:1(約)が必要です。

その圧縮番号を一致させることができない場合は、通常のディスクを使用してコピーして第三者にメールで送信してください。この場合、1Tbドライブより小さく、圧縮が必要な製品を出荷することは不可能です。

事前圧縮やtarなしでネットワーク経由でファイルをコピーするためにssh -C(標準圧縮)を使用するか、圧縮を使用するものと比較するだけです。rsync1Tbをネットワーク経由で送信することは不可能ではありませんが、少し時間がかかります。

答え4

7zは私の選択です。アーカイブの自動分割が可能で、マルチスレッド圧縮をサポートします。いいえ、xzいいえ、ヘルプメッセージに何が表示されていてもかまいません。以下を試してください。

7za a -v100m -m0=lzma2 -mx=9 -ms=on -mmt=$THREADS archive.7z directory/

出力は100MBチャンクに分割されます(スイッチに変更されます-v)。

唯一の欠点は、7zがUnixメタデータ(権限や所有者など)を保存しないことです。必要に応じてtar出力をパイプします7zaman 7zaいくつかの例を参照)。

関連情報