Autoloader i freeBSD

Tym razem udostępniam (dla potrzebujących) skrypt (również mojego autorstwa) napisany w php, pomagający w operacjach na autoloaderze zamontowanym w systemie freeBSD.

Jak to działa? Skrypt potrzebuje max 2 parametrów wywołania. 1 – opcja, 2 – numer slotu autoloadera. To dopiero v1.0, więc jeszcze będą zmiany.

Generalnie uruchamiamy skrypt w taki sposób:

./backup_multi.php [option] [slot]

Przy czym opcjami mogą być:

backup – tworzy kopię na kasetce (cartridge) oznaczonej jako dany dzień tygodnia (albo z podaniem numeru kasetki)
list – wyświetla zawartość załadowanej lub wskazanej kasetki z taśmą (cartridge)
status – wyświetla status autoloadera
load – ładuje kasetkę z podanego slotu
unload – odkłada kasetkę do slotu, z którego została wcześniej pobrana
rewind – przewijanie taśmy do początku
erase – całkowite kasowanie taśmy

Skrypt ten ma następującą politykę tworzenia kopii zapasowych na tasiemkach w oparciu na istniejącym urzadzeniu o nazwie autoloader:

slot 1 – poniedziałek
slot 2 – wtorek
slot 3 – środa
slot 4 – czwartek
slot 5 – piątek
slot 6 – ostatni dzień co drugiego tygodnia (jeszcze nie działa)
slot 7 – ostatni dzień miesiąca (jeszcze nie działa)
slot 8 – ostatni dzień co trzeciego miesiąca (jeszcze nie działa)

Oto kod:

#! /usr/local/bin/php -f
# by Adam Kucza (c) 2007
<?
# the backup policy of this script
# slot 1 – monday
# slot 2 – tuesday
# slot 3 – wednesday
# slot 4 – thursday
# slot 5 – friday
# slot 6 – last day of every 2nd week
# slot 7 – last day of the month
# slot 8 – last day of every 3rd month

#settings
define („DATE”, date(„Y-m-d_H.i.s”));
define („DAY_OF_WEEK”, date(„N”));
define („LOGFILE”, „/var/log/backup/backup_”.DATE.”.log”);
define („TAPEDRIVE”, „-f /dev/sa0”);
define („CHANGER”, „/dev/pass1”);
define („TAR”, „/usr/bin/tar”);
define („MT”, „/usr/bin/mt”);
define („MTX”, „/usr/local/sbin/mtx”);
define („MAX_SLOTS”, „8”);
define („BACKUPLIST”, „/fox/ustawienia/backup/backup_multi.lst”);

$x = $_SERVER[„argv”];

//print_r($x);

if (count($x)==2 || count($x)==3)
{
$z = „”;

switch ($x[1])
{
case „status”:
# show changer status
$z = MTX.” -f „.CHANGER.” status”;
system($z);
break;

case „load”:
# load cartridge from slot numbered as current day of the week
# mtx -f /dev/pass1 load 1

// firstly free device -> unload cartridge (for sure & safety)
$z = $x[0].” unload”;
system ($z);

//secondly load cartridge (by default or by specified)
$z = MTX.” -f „.CHANGER.” load „;
if ($x[2] && $x[2]>=1 && $x[2]<=MAX_SLOTS) $z .= $x[2]; else $z .= DAY_OF_WEEK; system($z); break; case "unload": # unload cartridge into slot # mtx -f /dev/pass1 unload $z = MTX." -f ".CHANGER." unload"; system($z); break; case "rewind": # rewind the cartridge $z = MT." ".TAPEDRIVE." rewind"; system($z); break; case "erase": # erase the cartridge $z = MT." ".TAPEDRIVE." erase"; system($z); break; case "list": # list of contents of cartridge # tar -f /dev/sa0 -tv // if there is a slot if ($x[2] && $x[2]>=1 && $x[2]<=MAX_SLOTS) { // replace the cartridge $z = $x[0]." unload"; system ($z); $z = MTX." -f ".CHANGER." load ".$x[2]; system($z); } $z = TAR." -tv ".TAPEDRIVE; system($z); break; case "backup": # make backup on cartridge # tar -f /dev/sa0 -cv /etc // reload the cartridge from correct slot $z = MTX." -f ".CHANGER." load "; if ($x[2] && $x[2]>=1 && $x[2]<=MAX_SLOTS) $z .= $x[2]; else $z .= DAY_OF_WEEK; system($z); # backup data echo "\nstarting backup...\n"; $z = TAR." -cv ".TAPEDRIVE." -T ".BACKUPLIST; system($z); # put list of contents into logfile $z = $x[0]." list >> „.LOGFILE;
system($z);
break;

} //end of switch

echo $z;

}
else
{
echo „\nSimple AutoLoader BackUp Script v.1.0 by Adam Kucza (c) 2007\n\n”;

echo „\nThis script operates on autoloader existing in /dev location due to following backup policy:\n”;
echo ” slot 1 – monday\n”;
echo ” slot 2 – tuesday\n”;
echo ” slot 3 – wednesday\n”;
echo ” slot 4 – thursday\n”;
echo ” slot 5 – friday\n”;
echo ” slot 6 – last day of every 2nd week\n”;
echo ” slot 7 – last day of the month\n”;
echo ” slot 8 – last day of every 3rd month\n”;

echo „\nusage:\n”;
echo ” „.$x[0].” [option] [slot]\n”;
echo „\navailable options:\n”;
echo ” backup – make backup on the cartridge from slot due to day of week (by default)\n”;
echo ” list – display the list of contents on loaded cartridge\n”;
echo ” status – display autoloader status\n”;
echo ” load – load cartridge from slot (1-8) numbered as day of the week (by default)\n”;
echo ” unload – unload the cartridge into last used slot\n”;
echo ” rewind – rewind the cartridge (if any) to begin\n”;
echo ” erase – erase entire cartridge (if any, it takes time)\n”;
echo „\nexamples:\n”;
echo ” „.$x[0].” status\t\t- display status\n”;
echo ” „.$x[0].” backup [slot]\t- make backup (into [slot] if specified)\n”;
echo ” „.$x[0].” load [slot]\t- load cartridge (into [slot] – if specified)\n”;
echo ” „.$x[0].” unload\t\t- unload cartridge\n”;

}
echo „\n”;
?>