最大サイズのチャンクに分割してtarアーカイブを作成します。

最大サイズのチャンクに分割してtarアーカイブを作成します。

かなり大きなディレクトリをバックアップする必要がありますが、個々のファイルのサイズによって制限があります。tar.(gz|bz2)最大200 MBのサイズのアーカイブに分割されたアーカイブを作成したいと思います。 Clonezilla は、次のようにイメージのバックアップを分割して同様の操作を実行します。

sda1.backup.tar.gz.aa
sda1.backup.tar.gz.ab
sda1.backup.tar.gz.ac

1つのコマンドでこれを行う方法はありますか?コマンドの使い方を理解していますsplitが、大規模なアーカイブを作成してからそれを小さなアーカイブに分割したくありません。なぜなら、最初にアーカイブを作成するのに必要なディスク容量が2倍になるからです。

答え1

tarを分割コマンドにパイプできます。

tar cvzf - dir/ | split --bytes=200MB - sda1.backup.tar.gz.

一部の *nix システム (OS X など) では、次のエラーが表示される場合があります。

split: illegal option -- -

この場合は、以下を試してください(注-b 200m)。

tar cvzf - dir/ | split -b 200m - sda1.backup.tar.gz.

FAT32形式のドライブに合わせてファイルを分割する場合は、バイト制限4294967295を使用してください。たとえば、

tar cvzf - /Applications/Install\ macOS\ Sierra.app/ | \
split -b 4294967295 - /Volumes/UNTITLED/install_macos_sierra.tgz.

ファイルを抽出するには、次のコマンドを使用します(@Naftuli Kayが述べたように)。

cat sda1.backup.tar.gz.* | tar xzvf -

答え2

tar分割アーカイブ

私はこれが次の理由で最善の解決策だと思いました。

  • インタラクションなしで部品を作成し、自動的に部品名を指定します。
  • 必要な圧縮、一般的なtarオプションを使用できます。
  • 必要外部なし分割またはマージコマンド
  • 追加のディスク容量を使用しない(中級)
  • 各アーカイブがそうであるように、すべてのDeararchiverはそれを簡単に処理できます。独立
  • 各アーカイブが独立しており、ファイルが複数のアーカイブにまたがっていないため、セキュリティが向上しました。

このコマンドは圧縮せずに2GBブロックを生成します。

tar -cv --tape-length=2097000 --file=my_archive-{0..50}.tar file1 file2 dir3
  • 作成に使用
  • V詳細については、アーカイブに追加されたファイルのリストを参照してください。
  • --テープ長ブロックサイズです。サフィックスを追加でき、省略するとKB単位と見なされます(したがって2GBは200万)。
  • - 文書私たちの場所魔法的にブロック名を作成する:ランダムに50個を与えましたが、十分に大きい数字を入力でき、必要なものだけが使用されます。
  • アーカイブに含めるファイルとディレクトリのリスト

同様に、このコマンドは1GBチャンクを生成します。アーカイブ圧縮:

tar -czv --tape-length=2097000 --file=my_archive-{0..50}.tar.gz file1 file2 dir3

答え3

macOSでは、splitコマンドは少し異なる動作をします。

$ tar cvzf - foo | split -b 2500m - foo.tgz.

答え4

serega@serega-sv:~$ tar -c  -M --tape-length=1024 --file /tmp/pseudo-tape.tar --new-volume-script=/tmp/new-volume.sh --volno-file=/tmp/volno /tmp/stuff-to-archive 
tar: Removing leading `/' from member names
moving /tmp/pseudo-tape.tar to /tmp/archive.1
moving /tmp/pseudo-tape.tar to /tmp/archive.2
moving /tmp/pseudo-tape.tar to /tmp/archive.3

pseudo-tape.tar ファイルを新しい名前に自動的に移動するには、スクリプトが必要です。

serega@serega-sv:~$ cat /tmp/new-volume.sh 
dir="/tmp"
base_name="pseudo-tape.tar"
next_volume_name=`echo -n "archive."; cat $dir/volno`
echo "moving $dir/$base_name to $dir/$next_volume_name"
mv "$dir/$base_name" "$dir/$next_volume_name"

関連情報