フォルダを圧縮しますが、特定のファイルタイプは圧縮せず、gz ファイルに含める

フォルダを圧縮しますが、特定のファイルタイプは圧縮せず、gz ファイルに含める

私はフォルダーを圧縮し、バックアップを保存するために、tar と pigz を使用しています。このフォルダーのサイズは約 250 GB 以上です。このフォルダーには、多数のテキスト ファイル、ログ ファイル、ISO、およびさまざまなサブフォルダー内の zip ファイルなど、さまざまなコンテンツが含まれています。このフォルダーを完全に圧縮するには、約 1 時間 (場合によってはそれ以上) かかります。現時点では、これをスクリプトで使用しています。

tar -cf - <data_folder> | pigz -1 > <output_file>.tar.$

ISO および zip ファイルの圧縮を除外して、圧縮時間を短縮したいと考えています。ISO および zip ファイルをそのまま (圧縮されていない状態で) gzip ファイルに含めるようにしたいと考えています。

私の質問は次のとおりです:タイプに基づいてファイルを選択的に圧縮し、圧縮されていないファイルを gzip 出力に含めることは可能ですか? これを試すにはどうすればよいでしょうか?

答え1

いいえ、できません。少なくとも直接はできません。

tarは圧縮を行いません。単に (仮想) ファイル システムの一部を読み取り、そこから 1 つのまとまったストリームを生成します。このストリームは、多くの場合、gzip/libz などの圧縮ツール/ライブラリに渡されます。圧縮部分は、個々のファイルを認識しません。によって生成されたストリームを圧縮するだけですtar。したがって、現在のアプローチに選択的な圧縮を追加することはできません。

実行できることは、各ファイルを個別に圧縮し、それを tar アーカイブに追加することで、tar アーカイブを段階的に構築することです。そうすることで、(たとえば) 圧縮されていない iso イメージをアーカイブに追加することを選択できます。ただし、tar アーカイブ自体は圧縮されないことに注意してください。したがって、tar を解凍した後、必要に応じて各ファイルを個別に解凍する必要があります。

ISO および ZIP ファイルを圧縮すると、実際にどのくらいの時間がかかりますか?tar | pigz > <file>ストリーム処理なので、それほど多くの時間は失われないと思います。ディスクに書き込まれるブロックがあり、その間に次のブロックが圧縮され、その間にストリームが構築されます。これは並行して行われます。

戦略を最適化できるかもしれません:

すべての iso および zip ファイルを専用のディレクトリに配置し、残りの tar および圧縮、iso ディレクトリの追加、zip ディレクトリの追加という 3 つの手順でアーカイブを構築できます。作成されたアーカイブには、外部アーカイブを解凍し、次に内部アーカイブを解凍して解凍するという長い抽出手順が必要です。ただし、これは個々のファイルを解凍するよりも実行可能です。

または、コマンドを調整します。ファイル システムの tar アーカイブにする必要がありますか、それともddパーティション全体をバックアップするために使用できますか? パーティション全体をバックアップすると、ディスクから連続的に読み取ることができるという利点があり、ファイル システムで作業するよりも高速になる可能性があります。isopigzファイルや zip ファイルが問題である場合は、より大きなチャンクで作業するように調整して、速度を向上させることができるはずです。また、結果をディスクに書き込む前にバッファリング (例mbuffer) を追加して、メディア アクセスをさらに最適化することもできます。

関連情報