web-dev-qa-db-ja.com

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

500万のファイルがあり、約1TBのストレージ容量を占めています。これらのファイルをサードパーティに転送する必要があります。

これを行う最良の方法は何ですか? .tar.gzを使用してサイズを小さくしようとしましたが、コンピューターに8 GBのRAMがあるにもかかわらず、「システムメモリ不足」エラーが発生します。

ファイルを郵送する最善の解決策はありますか?

15
oshirowanen

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

GUIソフトウェアには、同等のコマンドライン同等のソフトウェアよりも多くの膨らみが含まれている場合や、プログレスバーなどの「特別な」機能のために追加の不要なタスクを実行する場合があります。 GUIソフトウェアがメモリ内のすべてのファイル名のリストを収集しようとしても、驚かないでしょう。アーカイブを作成するためにこれを行う必要はありません。専用ツールtargzipは、ストリーミングの入出力を処理するように設計されているため、メモリよりもはるかに大きな入出力を処理できます。

GUIプログラムを回避する場合は、次のような完全に通常の毎日のtar呼び出しを使用して、このアーカイブを生成することができます。

tar czf foo.tar.gz foo

ここで、fooは500万個のファイルすべてを含むディレクトリです。

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

27
Celada

「500万」ファイル、合計1 TB?その場合、ファイルは非常に小さくなければなりません。私は単に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スイッチを使用すると、Jの古いバージョンでは_.tar.xz_アーカイブは作成されませんが、_.tar.lzma_アーカイブは作成されます。 tarJフラグを完全にサポートしない。)


これらのファイルを作成するためにGUIプログラムを使用しているので、コマンドラインインターフェイスを使用して少し不快に感じていると思います。

コマンドラインインターフェイスからのアーカイブの作成、管理、および抽出を容易にするために、 atool と呼ばれる小さなユーティリティがあります。それは私が見たほとんどすべての一般的なディストリビューションで利用可能であり、絶望的にあいまいなものを除いて、私が遭遇したほぼすべての単一のアーカイブで機能します。

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

atoolは、それ自体への多数のシンボリックリンクをインストールするため、パックとアンパックが簡単になります。

_apack archive.tar.xz <files and/or directories>
_

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

_aunpack archive.7z
_

アーカイブを展開します。

_als archive.rar
_

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

どのような種類のアーカイブが作成されるか、atoolは、コマンドラインでのアーカイブのファイル名拡張子によってそれを識別します。

15
polemon

25:1を超える圧縮を実行できない限り、第三者と交換できるハードウェアテープ形式がない限り、カタツムリの郵送前にこれを圧縮しても何も得られない可能性があります。

最大の一般的なストレージはブルーレイであり、おおよそ40Gbになります。データをそれに合わせるには、データを25対1で圧縮する必要があります。サードパーティがDVDしか持っていない場合は、125:1(大体)が必要です。

これらの圧縮数を一致させることができない場合は、通常のディスクを使用して、それをコピーしてサードパーティに郵送します。その場合、圧縮を必要とする1Tbドライブよりも小さいものを出荷するのは狂気です。

ssh -C(標準圧縮)を使用する場合と比較するだけでよく、できればrsyncを圧縮してネットワーク経由でファイルをコピーします。事前に圧縮してtarする必要はありません。 1Tbはネット上を移動することは不可能ではありませんが、少し時間がかかります。

8
Anthon

急流を検討しましたか?ピアツーピアは、インターネット経由の転送に最適なオプションです。

  • 少なくとも他のインターネット転送と同じ速さ:アップロード速度が転送速度を決定します
  • データ破損はありません
  • 最初に転送するファイルを選択してください
  • 追加のローカル/クラウドストレージスペースは不要
  • 自由

使用しているOSはわかりませんでしたが、tar.gz圧縮について話しているので、GNU/LinuxのようなOSを使用していると想定します。そのために Transmission をお勧めします。これは、MacとLinuxで動作するオープンソースの急流ソフトウェアです。開発者はそれをサポートするすべてのGUIクライアントにネイティブにすることに努力を傾けたので、それが好きです。クロスプラットフォーム言語はありません。

この方法と圧縮を組み合わせることができますが、転送の一部に優先順位を付ける機能が失われます。

6
LaX

7zが私の選択です。アーカイブの自動分割を可能にし、マルチスレッド圧縮をサポートします。いいえ、ヘルプメッセージの内容にかかわらず、xzは機能しません。試してみてください:

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

出力は100MBのブロックに分割されます(-vスイッチで変更してください)。

唯一の真の欠点は、7zがUNIXメタデータ(権限や所有者など)を保持しないことです。必要な場合は、代わりにtar出力を7zaにパイプしてください(いくつかの例については、man 7zaを参照してください)。

3

フォルダを右クリックして[アーカイブを作成]をクリックし、.tar.gzオプションを選択しました。ディレクトリ構造は深く、500,000を超えるディレクトリ

うん、それをパッケージ化するのに幸運を。そして、GUIツールは同じボリュームでこれを実行しようとします。つまり、a)1Tbの空き領域がさらに必要であり、b)1つのファイルを読み取り、それをアーカイブに追加するヘッドスラッシングは、ドライブにとって正常ではありません。

私は2つの可能性を考えています。

1)コンピュータからサードパーティへのrsync。どちらか一方には、頻繁に変更されないグローバルIPアドレスが必要になります。 rsyncのhugeの利点は、何らかの理由で中断された場合に、中断したところから再開できることです。 1Tb tarballのコピーは成功するか失敗するかのどちらかです

2)1Tb外付けドライブを購入し、それにコピーして、ドライブを納品します。待ち時間は長いですが、到着時の帯域幅は非常に良好です。これに対するさまざまなオンラインバックアップサービスは、初期バックアップ用です。

3
paul

次のようなものを使用することをお勧めします:

tar -c -L 104857600 -f file1.tar -f file2.tar -f file3.tar -f file4.tar -f file5.tar -f file6.tar -f file7.tar -f file8.tar -f file9.tar -f file10.tar 
gzip file*.tar

これにより、最大100GBのファイルが10個作成されます。しかし、tarは読み取り/書き込みでストリーミングすることになっているため、ボトルネックが明らかにgzipであるため、「OOM」の問題に答えることはできません。

1
mveroone

どのようにそのことについて:

find /path | tar -T - -czf - | ssh remotehost "cd /target/dir/; tar xzf -"
  • find searchsはディレクトリツリーをリストします
  • tar -T - stdinからリストを読み取ります
  • -czf -はアーカイブを作成してstdoutに書き込み、zはストリームをgzipします
  • ssh remotehostsshを使用してリモートホストにログインします
  • cd /target/dir/ターゲットディレクトリに移動します
  • tar xzf -入力ストリームをstdinから抽出します
0
chaos

Fexsendを使用すると、任意の数とサイズのファイルをその場で任意の受信者に送信できます。以下を参照してください。

http://fex.rus.uni-stuttgart.de:8080/usecases/downunder.html

もちろん、F * EXサーバーが必要ですが、無料です。

http://fex.rus.uni-stuttgart.de:8080/

0
Framstag