web-dev-qa-db-ja.com

最速の方法は、多くのファイルを1つに結合する(tar czfは遅すぎる)

現在、tar czfを実行してバックアップファイルを結合しています。ファイルは特定のディレクトリにあります。

しかし、ファイルの数は増え続けています。 tzr czfの使用には時間がかかりすぎます(20分を超えて数える)。

ファイルをより迅速かつスケーラブルな方法で組み合わせる必要があります。

genisoimagereadommkisofsが見つかりました。しかし、どれが最速で、それぞれにどのような制限があるのか​​はわかりません。

26

ほとんどの時間がCPUまたはI/Oに費やされているかどうかを確認する必要があります。いずれにせよ、それを改善する方法があります:

A:圧縮しない

要件のリストで「圧縮」について言及しなかったので、引数リストから「z」を削除してみてください:tar cf。これは少しスピードアップするかもしれません。

「-N」を使用して以前にバックアップしたファイルをスキップするなど、プロセスを高速化する他の手法があります。

B:パーティション全体をddでバックアップ

または、パーティション全体をバックアップする場合は、代わりにディスクイメージ全体のコピーを作成してください。これにより、処理とlotのディスクヘッドシーク時間を節約できます。 tarおよびより高いレベルで動作する他のすべてのプログラムには、ディレクトリエントリとiノードを読み取って処理し、ファイルの内容がどこにあるかを見つけ、より多くのヘッドを実行するというオーバーヘッドがありますdisk seeks、ディスクから別の場所から各ファイルを読み取る。

基礎となるデータをはるかに高速にバックアップするには、以下を使用します。

dd bs=16M if=/dev/sda1 of=/another/filesystem

(これは、RAIDを使用していないことを前提としています。これにより、状況が少し変わる可能性があります)

28
Yves Junqueira

他の人が言ったことを繰り返すには、バックアップされているファイルについてもっと知る必要があります。ここでは、いくつかの前提を説明します。

Tarファイルに追加する

ファイルがディレクトリにのみ追加される場合(つまり、ファイルが削除されない場合)は、毎回再作成するのではなく、既存のtarファイルに追加するようにしてください。これを行うには、tarコマンドで、新しいファイルの代わりに既存のアーカイブファイル名を指定します(または古いファイルを削除します)。

別のディスクに書き込む

書き込み先の同じディスクから読み取ると、パフォーマンスが低下する場合があります。別のディスクに書き込んで、I/O負荷を分散させてください。アーカイブファイルを元のファイルと同じディスク上に置く必要がある場合は、後で移動します。

圧縮しない

@Yvesの発言を繰り返すだけです。バックアップファイルが既に圧縮されている場合、再度圧縮する必要はほとんどありません。 CPUサイクルを浪費しているだけです。

8
Barry Brown

のようなlz4 crompressionでtarを使用する

tar cvf - myFolder | lz4 > myFolder.tar.lz4

両方の長所を提供します(かなり良い圧縮と速度)。データにバイナリファイルが含まれている場合でも、約3の圧縮率を期待します。

さらに読む: 圧縮アルゴリズムの比較lz4でtarする方法

4
StefanQ

ダンプと復元について誰も言及していないことに驚いています。ファイルシステムに空き容量がある場合、ddよりもはるかに高速になります。

問題のファイルシステムによっては、さまざまなツールが必要になる場合があります。

  • ext2/3/4-dumpおよびrestore(RH --Debianのパッケージdump
  • XFS-xfsdumpおよびxfsrestore(RH/Debianのパッケージxfsdump
  • ZFS-zfs sendおよびzfs recv
  • BTRFS-btrfs sendおよびbtrfs receive

一部のプログラムには圧縮が組み込まれていないことに注意してください(ダンプを除くすべて)-stdoutにパイプし、必要に応じてpigzを使用します。 ;-)

2
Lester Cheung