GNU/Linux >> Linux の 問題 >  >> Linux

非常に大きな (100G) ファイルを圧縮する時間

--fast を使用して gzip の速度を変更できます --best または -# # は 1 ~ 9 の数値です (1 は最速ですが圧縮率は低く、9 は最も遅くなりますが圧縮率が高くなります)。デフォルトでは、gzip はレベル 6 で実行されます。


tar が gzip に比べて時間がかからない理由は、ファイルを 1 つのファイルにコピーする際の計算オーバーヘッドがほとんどないためです (これが tar の動作です)。一方、gzip は、実際には圧縮アルゴリズムを使用して tar ファイルを圧縮しています。

問題は、(あなたが発見したように) gzip が 1 つのスレッドに制限されていることです。

複数のスレッドを使用して圧縮を実行できる pigz を入力します。これを使用する方法の例:

tar -c --use-compress-program=pigz -f tar.file dir_to_zip

--use-compress-program オプションの簡潔な要約が姉妹サイトにあります。


<ブロック引用>

単一の CPU を約 100% 使用しているようです。

これは、I/O パフォーマンスの問題はなく、圧縮に 1 つのスレッドしか使用されていないことを意味します (これは gzip の場合に当てはまります)。

他のツールをインストールするために必要なアクセス/合意を達成することができれば、7zip はマルチコア CPU を利用するために複数のスレッドもサポートしますが、それが gzip 形式だけでなく独自のものにも拡張されるかどうかはわかりません.

当分の間 gzip だけを使用することに固執していて、圧縮するファイルが複数ある場合は、それらを個別に圧縮してみることができます。これにより、複数のプロセスを並行して実行することで、マルチコア CPU をより多く使用できます。 I/O サブシステムの容量に近づくとすぐにパフォーマンスが急激に (1 つのプロセス/スレッドを使用していた場合よりも低下する) 低下するため、無理をしないように注意してください。


Linux
  1. 大きなファイルの行数を数える

  2. nc を使用して大きなファイルを転送する

  3. 特定のファイルを除く tar/gzip

  1. Linuxで複数のファイルを圧縮する方法

  2. rsyncを使用してファイルを同期する

  3. Linux で gzip と bzip2 を使用してファイルとディレクトリを圧縮および抽出する方法

  1. Linuxでファイルを解凍する方法

  2. ディレクトリ内のすべてのファイルを解凍します

  3. Linuxで7zファイルをzipファイルに再パック