
当社にはデュアルDell LTO-7ドライブがあります。最近、2つのテープを順次自動バックアップできることがわかりました。
tar -cv --multi-volume --file=/dev/nst0 --file=/dev/nst1 gigantic10TBfile.bin
素晴らしい。各テープのデフォルト容量は6 TBで、gigantic10TBfile.bin
テープがいっぱいになると、席を離れることなく/dev/nst0
自動的にtarがテープの上を移動します。/dev/nst1
実際には1つの巨大なファイルではなく、何千もの小さなファイルです。tee
状況がどのように進行したかを確認するために、tarの出力をログファイルに保存しました。複数のテープにわたって転送する場合は、「テープが変更されました」というエントリをこのログファイルに追加したいと思います。
入力(または文書--new-volume-script
とも呼ばれる)--info-script
-F
ここ)。うん。実行されない限り。もっと管理しやすい例を作りましょう。
tar -cvlp --multi-volume --new-volume-script="./new_volume_script.sh" --file=tarball1.tar --file=tarball2.tar --tape-length=4M 10MBrandom.bin
この例を実行すると、--new-volume-script
一度だけ実行されtarball1.tar
生成さtarball2.tar
れ、tarはターゲットファイルで「実行」されます。
tarball1.tar
だから私の質問は、書き込みとの間でスクリプトを実行するオプションはありますかtarball2.tar
?
答え1
実際にはターゲットファイルが使い果たされた場合にのみ実行されるため、ボリュームが作成tar
されるたびにスクリプトを実行するには、コマンドに1つのターゲットファイルを使用する必要があります。
tar -cv -M -F './my_script.sh' --file=/dev/nst1 --tape-length=4M 10MBrandom.bin
スクリプトに別のアーカイブを作成させます。スクリプトはtar
シェル環境を継承し、環境変数を介して追加のデータを渡します。例:
TAR_ARCHIVE処理中の
アーカイブの名前tar
。TAR_VOLUME起動するボリュームのシリアル番号
。tar
新しいボリューム名tar
を。
だからこんなスクリプト
#! /bin/bash
echo Preparing volume $TAR_VOLUME of $TAR_ARCHIVE.
name=${TAR_ARCHIVE%?}
echo ${name}$TAR_VOLUME >&$TAR_FD
他のアーカイブが作成および作成されるたびに実行されます/dev/nst2
。 (/dev/nst3
つまり、コマンドで指定された初期ボリュームを介して)TAR_VOLUME
から始まります。連続した番号のアーカイブを使用するには、ボリューム名を渡すときに減算する必要があります。たとえば、最後の行を次のように変更します。1
--file=
--file=/dev/nst0
1
TAR_VOLUME
TAR_FD
echo ${name}$((TAR_VOLUME - 1)) >&$TAR_FD
常に名前付きの2つのテープドライブのみがあり、どちらかが初期引数として使用されているときにスクリプトが機能するようにするには、現在の/dev/nst0
値からドライブ文字を抽出し、次の別のドライブ文字を使用できます。次のアーカイブ名を次に書きます。/dev/nst1
--file
TAR_ARCHIVE
TAR_FD
#! /bin/bash
echo Preparing volume $TAR_VOLUME of $TAR_ARCHIVE.
drive=${TAR_ARCHIVE: -1}
case "$drive" in
0) other=1 ;;
1) other=0 ;;
*) exit 1
esac
echo "${TAR_ARCHIVE%?}${other}" >&$TAR_FD
これにより、2つのアーカイブが作成され、/dev/nst1
その逆も同様です/dev/nst0
。最初のアーカイブは、コマンドラインで指定したアーカイブです。--file
ちなみに、以下はマニュアルの引用です(セクション9.6.1)ここに提供されているサンプルスクリプトを含みます。
最も柔軟な方法は、ファイル記述子に新しいアーカイブ名を書き込むボリュームスクリプトを使用することです
$TAR_FD
。たとえば、次のボリュームスクリプトは、次の一連のアーカイブファイルを生成します。 「アーカイブボリューム」、どこファイル作成されるアーカイブの名前(--file
オプションとして提供)ロール生成されるアーカイブのシリアル番号。
#! /bin/bash
# For this script it's advisable to use a shell, such as Bash,
# that supports a TAR_FD value greater than 9.
echo Preparing volume $TAR_VOLUME of $TAR_ARCHIVE.
name=`expr $TAR_ARCHIVE : '\(.*\)-.*'`
case $TAR_SUBCOMMAND in
-c) ;;
-d|-x|-t) test -r ${name:-$TAR_ARCHIVE}-$TAR_VOLUME || exit 1
;;
*) exit 1
esac
echo ${name:-$TAR_ARCHIVE}-$TAR_VOLUME >&$TAR_FD