📄 tapeload.pl
字号:
!/usr/bin/perl########################## tapeload ############################ This script uses mtx 1.2.9pre2 to load a tape based # on its volume tag. You can# specify a tape drive by number, but if you don`t, it puts the# tape in the first available drive and returns the number of that drive,# both from the standard output and as the exit value.# A negative exit value indicates an error.# If volume tags are missing from any full slot, bar codes are rescanned# automatically. ## usage: # tapeload TAPE_LABEL_1 # Loads tape with label TAPE_LABEL_1 into a drive# or# tapeload TAPE_LABEL_1 1 # Loads tape with label TAPE_LABEL_1 into drive #1## Set this variable to your mtx binary and proper scsi library device.$MTXBIN="/usr/local/bin/mtx -f /dev/sga" ; # Additions and corrections are welcome.# This software comes with absolutely no warranty and every other imaginable# disclaimer.# -- Frank Samuelson sam@milagro.lanl.gov##################################################################@wt= &mdo("status"); #slurp in the list of slots# Check to be certain that every full slot has a volume tagfor ($i=0; $i< $#wt; $i++) { # look through every line if ( $wt[$i] =~ /Full/ && $wt[$i] !~ /VolumeTag/ ) { # if the element is full, but there is no volume tag, do inventory @wt= &mdo("inventory status"); break; }}#try to find our tape$slot=-1;for ($i=0; $i< $#wt; $i++) { # look through every line if ($wt[$i] =~ / *Storage Element (d*):Full :VolumeTag=(.*)/ ) { if ($ARGV[0] eq $2) { # We found the tape $slot=$1; # set the slot number break; # stop reading the rest of the file. } }}if ( $slot>0) { # we found the tape you wanted. $drivefound=-1; # set flag to bad value for ($i=0; $i< $#wt; $i++) { # look through every line # if this is a tape drive if ($wt[$i] =~ / *Data Transfer Element (d*):(.*)/ ) { #parse the line $drive=$1; $state=$2;# print STDERR "$wt[$i] $drive $state"; if ($state =~ /Full/) { # This drive is full. # if we are looking for a particular drive and this is it if ( $#ARGV==1 && $drive == $ARGV[1]) { print STDERR " ERROR: Specified drive $ARGV[1] is full."; print STDERR @wt; exit(-6); } } elsif ($state =~ /Empty/) { #This is a tape drive and it`s empty. if ( $#ARGV==1 ) { # If we want a particular drive if ($drive == $ARGV[1]) { # and this is it, $drivefound=$drive; # mark it so. break; } } else { # If any old drive will do $drivefound=$drive; # Mark it. break; } } else { # This is a tape drive, but what the heck is it? print STDERR " Cannot assess drive status in line"; print STDERR $wt[$i]; exit(-7); } } } if ( $drivefound < 0 ) { # specified drive was not found print STDERR "Error: Specified drive $ARGV[1] was not found"; print STDERR @wt; exit(-8); } # Now we actually load the tape. @dump=&mdo(" load $slot $drivefound "); print "$drivefound"; exit($drivefound); # The end. } else { print STDERR " Ug. Tape $ARGV[0] is not in the library."; print STDERR @wt; exit(-4);}sub mdo # a subroutine to call mtx ;{# print STDERR "$_[0]"; if (!open(FD,"$MTXBIN $_[0] |")) { #call mtx function print STDERR " ERRKK. Could not start mtx "; exit (-9); } @twt= <FD>; # slurp in the output if (! close(FD)) { # if mtx exited with a nonzero value... print STDERR " Mtx gave an error. Tapeload is exiting... "; exit (-10); } @twt;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -