web-dev-qa-db-ja.com

ビッグデータを複数の部分にアーカイブ

私はビッグデータに取り組んでおり、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 -

5
JoshThunar

圧縮アーカイブを保存するのに十分なスペースがある場合は、アーカイブを作成して一度に分割できます(GNU splitと仮定):

tar -c -vz -f - directory | split --additional-suffix=.gz.part -b 1G

これにより、xaa.gz.partxab.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を介して、大きなディレクトリを持つマシンからローカルマシンに転送され、分割されます。

2
Kusalananda

基本的なUNIXコマンドでは、既存のファイルを分割する以外に方法はありません。

しかし、starをインストールして、starのマルチボリューム機能を使用するのはどうですか?

これには、部品が正しい順序で供給されているかどうかのチェックがあるという利点があります。

0
schily