私はフォルダーを圧縮し、バックアップを保存するために、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
) を追加して、メディア アクセスをさらに最適化することもできます。