2010年2月9日火曜日

[Linux]: Linuxでコマンドラインからテープバックアップ

昔書いたテープバックアップのスクリプト.PHPだけど.
商用のバックアップソフトなどを使わないフリーソフトのみの構成.

  1. mtコマンドのためにmt-stパッケージをインストールする
  2. テープデバイスのデバイスファイルを確認する(ここでは/dev/nst0)
  3. mt -f /dev/nst0 statしてきちんとデバイス情報が取れるかを確認
  4. 以下のスクリプトを実行.TAPE_DEV, BACKUP_DIRは必要に応じて書き換える

#!/usr/local/bin/php
<?php
define('MT', '/bin/mt');
define('TAPE_DEV', '/dev/nst0');
define('BACKUP_DIR', '/home');

$descriptorspec = array(
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
);

$cwd = BACKUP_DIR;
$process = proc_open(MT.' -f '.TAPE_DEV.' stat', $descriptorspec, $pipes, $cwd);
$onlineFlag = false;

if (is_resource($process)) {
while($buff = fgets($pipes[1], 4096)){
if(strpos($buff, "ONLINE") !== false){
$onlineFlag = true;
}
}

if($onlineFlag){
ini_set('max_execution_time', 0);
system("tar zcf ".TAPE_DEV." ".BACKUP_DIR);
system(MT." -f ".TAPE_DEV.' eject');
}

$return_value = proc_close($process);

echo "command returned $return_value\n";
}
?>

ちなみにこのスクリプトではnst0を対象としているので,書き込んだ後テープは自動で巻き戻されない(no rewindのn).
毎回巻き戻しをしたければ,st0を対象にすれば良い.

0 件のコメント:

コメントを投稿