私はビッグデータに取り組んでおり、64テラバイトを超えるディレクトリをアーカイブする必要があります。ファイルシステムにそのような大きなファイル(アーカイブ)を作成できません。残念ながら、Linuxでマルチパートアーカイブを作成するために提案されたすべてのソリューションでは、最初にアーカイブを作成してから、split
コマンドを使用してそれを小さなファイルに分割することをお勧めします。
私はそれが可能であることを知っています7Zipですが、残念ながらRedHat 6に組み込まれているツールを使用せざるを得ません-tar、gzip、bzip2 ...
ユーザーに最大ボリュームサイズを要求するスクリプトを作成することについて考えていました。これは、gzipを使用してすべてのファイルをアーカイブし、それらのファイルを分割します。これらのファイルは大きすぎて、選択したサイズの多数のtarに手動でマージします。それは良い考えですか?
基本的なLinuxコマンドで大きなアーカイブ分割を達成する他の可能性はありますか?
更新:
制限された最大ファイルサイズでソリューションをファイルシステムでテストしましたが、うまくいきました。 tar
出力をsplit
コマンドに直接リダイレクトするパイプは、意図したとおりに機能しています。
tar -czf - HugeDirectory | split --bytes=100GB - MyArchive.tgz.
作成されたファイルは既に小さく、それらを一緒にマージするとき、スーパーサイズのファイルは作成されません:
cat MyArchive.tgz* | tar -xzf -
圧縮アーカイブを保存するのに十分なスペースがある場合は、アーカイブを作成して一度に分割できます(GNU split
と仮定):
tar -c -vz -f - directory | split --additional-suffix=.gz.part -b 1G
これにより、xaa.gz.part
、xab.gz.part
などのファイルが作成され、各ファイルはtar
アーカイブの1G圧縮ビットになります。
アーカイブを抽出するには:
cat x*.gz.part | tar -x -vz -f -
ファイルシステムが圧縮アーカイブを保存できない場合は、アーカイブの部分を、リモートの場所ではなく、別のファイルシステムに書き込む必要があります。
そのリモートの場所で、たとえば:
ssh user@serverwithfiles tar -c -vz -f - directory | split --additional-suffix=.gz.part -b 1G
これにより、圧縮されたアーカイブがssh
を介して、大きなディレクトリを持つマシンからローカルマシンに転送され、分割されます。
基本的なUNIXコマンドでは、既存のファイルを分割する以外に方法はありません。
しかし、star
をインストールして、star
のマルチボリューム機能を使用するのはどうですか?
これには、部品が正しい順序で供給されているかどうかのチェックがあるという利点があります。