複数のtarコマンドを並列に実行するには?

複数のtarコマンドを並列に実行するには?

シェルスクリプトを使用して、多くの小さなファイルを含む4つのディレクトリを圧縮したいと思います。このスクリプトは実行に時間がかかりすぎるため、利用可能なリソースをより活用するために、シェルスクリプトを使用して4つのtarコマンドを並列に実行したいと思います。

現在使用しているコマンドは次のとおりです。

tar cf - /ebs/uat/uatappl | gzip -c > /ebs/backup/uatappl.tar.gz
tar cf - /ebs/uat/uatcomn | gzip -c > /ebs/backup/uatcomn.tar.gz
tar cf - /ebs/uat/uatora | gzip -c > /ebs/backup/uatora.tar.gz
tar cf - /ebs/uat/uatdata | gzip -c > /ebs/backup/uatdata.tar.gz

答え1

次のように、すべてのtarをバックグラウンドに配置できます。

tar cf - /ebs/uat/uatappl | gzip -c > /ebs/backup/uatappl.tar.gz &
tar cf - /ebs/uat/uatcomn | gzip -c > /ebs/backup/uatcomn.tar.gz &
tar cf - /ebs/uat/uatora | gzip -c > /ebs/backup/uatora.tar.gz &
tar cf - /ebs/uat/uatdata | gzip -c > /ebs/backup/uatdata.tar.gz &

ただし、十分なプロセッサ性能と高速ディスクが必要です。それ以外の場合、並行性により、合計実行時間が順次実行時間より長くなります。

答え2

&コマンドラインの最後にaを追加すると問題が発生しますか?

tar cf - /ebs/uat/uatappl | gzip -c > /ebs/backup/uatappl.tar.gz &
tar cf - /ebs/uat/uatcomn | gzip -c > /ebs/backup/uatcomn.tar.gz &
tar cf - /ebs/uat/uatora | gzip -c > /ebs/backup/uatora.tar.gz &
tar cf - /ebs/uat/uatdata | gzip -c > /ebs/backup/uatdata.tar.gz &

wait

waitジョブが完了するまで待ちます。

答え3

タスクを並列に実行するためのツールであるGNU Parallelを使用できます。私は次のことをテストし、この行がうまくいくと思います。

ls -1 /ebs/uat | parallel 'tar cf - /ebs/uat/{} | gzip -c > /ebs/backup/{}.tar.gz'

Webページはここにあります:https://www.gnu.org/software/parallel/、そして高速なGoogleは、利用可能なSolarisパッケージがあることを示すように見えるので、手動でインストールする必要さえありません。

答え4

これでSolarisタグを追加したので、どのバージョンを使用していますか?そして、どのファイルシステムを使用していますか? UFSの場合は、UFSよりも小さいファイルを処理するZFSに移動できます。おそらくRocheはこれをベンチマークしたでしょう。

例:ZFSを使用している場合は、各ホームディレクトリ用のデータセットを作成し、それを他のファイルシステムまたはより高い圧縮設定レベルを持つシステムにコピーできます。可能な重複排除が含まれます。

ディレクトリ構造によると、すべてのファイルはバックアップしたい同じFSにあるようです。したがって、CPUリソースよりもIOが制限要因になると予想されるため、並列オプションはおそらく役に立ちません。

@Romeo Ninovが提案したように、タスクをバックグラウンドに配置できます。あるいは、各ディレクトリのスクリプトを生成して同時に実行することもできます。結局のところ、さまざまなオプションを試してテストするだけで、あなたのニーズに最も適したオプションを見つけるのに役立つ可能性があるかどうかを判断できます。さまざまなアーカイバと圧縮アルゴリズムが含まれています。

たとえば、速度がより重要な場合、またはでより低い圧縮レベルをgzip試してください。compresszip

また、CPUが問題ではないと考え、CPUが2つ以上ある場合は、Pigz(gzipの並列実装)を使用して役に立つかどうかを確認できます。 pkgはv11用のサポートリポジトリにありますが、ソースコードを入手して以前のバージョンのSolaris用にコンパイルする必要があります。

Recoはtimexディレクトリの1つである可能性があるため、すべてのコマンドの前に来ます。あなたに遅いを取得します。その場合は、最適化に取り組んでください。

関連情報