⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chg-iomega.pl

📁 开源备份软件源码 AMANDA, the Advanced Maryland Automatic Network Disk Archiver, is a backup system that a
💻 PL
字号:
#! @PERL@ -w# Catch for sh/csh on systems without #! ability.eval '(exit $?0)' && eval 'exec @PERL@ -S $0 ${1+"$@"}'        & eval 'exec @PERL@ -S $0 $argv:q'                if 0;# # This changer script is designed for IOMEGA or JAZZ disks of various sizes# as well as any other removable disk media.## This is a PURELY MANUAL changer. It requests insertion of disk media via# messages on /dev/tty. So it cannot be used via crontab.## Make sure you comply with any of the following.# - Add statements #         tpchanger "chg-iomega"#         tapedev "file:<mount_point_of_removable_disk>"#         # (e.g. tapedev "file:/mnt/iomega" )#         tapetype IOMEGA      ##         #         define tapetype IOMEGA {#             comment "IOMega 250 MB floppys"#             length 250 mbytes#             filemark 100 kbytes#             speed 1 mbytes#         }#   to your /etc/amanda/<backup_set>/amanda.conf file# - Add entry to /etc/fstab to specify mount point of removable disk#   and make this disk mountable by any user.# - Format all disks, add a "data" sub directory and label all disks#   by a call to amlabel.# - Be aware that as of version 2.4.4p1, amanda can't handle backups that are#   larger than the size of the removable disk media. So make sure#   /etc/amanda/<backup_set>/disklist specifies chunks smaller than the #   disk size.## This script is built up out of bits and pieces of other scripts, in# particular chg-chio.pl. That script was written by # Nick Hibma - nick.hibma@jrc.it# # Permission to freely use and distribute is granted (by me and was granted by# the original authors).## Christoph Pospiech <pospiech@de.ibm.com>#require 5.001;($progname = $0) =~ s#/.*/##;use English;use Getopt::Long;delete @ENV{'IFS', 'CDPATH', 'ENV', 'BASH_ENV', 'PATH'};$ENV{'PATH'} = "/usr/bin:/usr/sbin:/sbin:/bin";$| = 1;if (-d "@AMANDA_DBGDIR@") {	$logfile = "@AMANDA_DBGDIR@/changer.debug";} else {	$logfile = "/dev/null";}die "$progname: cannot open $logfile: $ERRNO\n"	unless (open (LOG, ">> $logfile"));## get the information from the configuration file#$prefix="@prefix@";$prefix=$prefix;		# avoid warnings about possible typo$exec_prefix="@exec_prefix@";$exec_prefix=$exec_prefix;	# Ditto$sbindir="@sbindir@";if ( "@USE_VERSION_SUFFIXES@" eq "yes" ) {    $SUF = "-@VERSION@";} else {    $SUF = "";}chomp ($tapeDevice = `$sbindir/amgetconf$SUF tapedev 2>&1`);die "tapedev not found in amanda.conf"	if !$tapeDevice or $tapeDevice eq "" or	    $tapeDevice =~ m/no such parameter/;chomp ($changerDevice = `$sbindir/amgetconf$SUF changerdev 2>&1`);chomp $changerDevice;die "changerdev not found in amanda.conf"	if !$changerDevice or $changerDevice eq "" or	    $changerDevice =~ m/no such parameter/;## Initialise a few global variables#$current_label = "";#$current_slot = 0;$max_slot = 1;@dow = ("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");@moy = ("Jan", "Feb", "Mar", "Apr", "May", "Jun",	"Jul", "Aug", "Sep", "Oct", "Nov", "Dec");sub do_time {	my (@t);	my ($r);	###	# Get the local time for the value.	###	@t = localtime (time ());	###	# Return the result.	###	$r = sprintf "%s %s %2d %2d:%02d:%02d %4d",	  $dow[$t[6]],	  $moy[$t[4]],	  $t[3],	  $t[2], $t[1], $t[0],	  1900 + $t[5];	return $r;}sub is_mounted {    my $device = shift @_;    my ($directory) = ($device =~ m/file\:(.*)$/);    if ( -d "$directory/data" ) { return 1;}    else {return 0;}}sub request {    my $label = shift @_;    my $answer;    open (TTY, "+</dev/tty") or die "Can't open tty.\n";    print TTY "Insert Disk with label $label\n";    read TTY,$answer,1;    close TTY;    return $answer;}sub print_label {    my $label = shift @_;    open (TTY, "+</dev/tty") or die "Can't open tty.\n";    print TTY "The current Disk has label $label\n";    close TTY;}sub get_label {    my $device = shift @_;    my ($directory) = ($device =~ m/file\:(.*)$/);    my @dir_list =  glob("$directory/data/*");    while ( ($_= shift(@dir_list)) ) {	if ( /0+\.([\w\d]+)/ ) {return $1;}    }    return "no label";}sub Load {    my $device = shift @_;    my ($directory) = ($device =~ m/file\:(.*)$/);    my $label;    print LOG &do_time(), ": enter: Load $device\n";    if ( ! &is_mounted($device) ) {	print LOG &do_time(), ": mounting $directory\n";	system "mount $directory";    }    $label = get_label $device;    &print_label($label);    print LOG &do_time(), ": current label: $label\n";    print LOG &do_time(), ": leave: Load\n";}sub Unload {    my $device = shift @_;    my ($directory) = ($device =~ m/file\:(.*)$/);    print LOG &do_time(), ": enter: Unload $device\n";    if ( &is_mounted($device) ) {	print LOG &do_time(), ": ejecting $directory\n";	system "eject $directory";    }    print LOG &do_time(), ": leave: Unload\n";}## Main program### Initialise#$opt_slot = 0;					# perl -w fodder$opt_info = 0;					# perl -w fodder$opt_reset = 0;					# perl -w fodder$opt_eject = 0;					# perl -w fodder$opt_search = 0;       				# perl -w fodder$opt_label = 0;					# perl -w fodderGetOptions("slot=s", "info", "reset", "eject", "search=s", "label=s"); if ( $opt_slot ) {    print LOG &do_time(), ": Loading slot $opt_slot requested\n";    if ( ! &is_mounted ($tapeDevice) ) {	&request ("any");	&Load ($tapeDevice);    }    $current_label = &get_label ($tapeDevice);    print LOG &do_time(), ": current label: $current_label\n";    print LOG &do_time(), ": 1 $tapeDevice\n";    print "1 $tapeDevice\n";    exit 0;}if ( $opt_info ) {    print LOG &do_time(), ": info requested\n";    $current_label = &get_label ($tapeDevice);    print LOG &do_time(), ": current label: $current_label\n";    print LOG &do_time(), ": 1 $max_slot 1 1\n";    print "1 $max_slot 1 1\n";    exit 0;}if ( $opt_reset ) {    print LOG &do_time(), ": reset requested\n";    &Unload ($tapeDevice);    &request ("any");    &Load ($tapeDevice);    $current_label = &get_label ($tapeDevice);    print LOG &do_time(), ": current label: $current_label\n";    print LOG &do_time(), ": 1 $tapeDevice\n";    print "1 $tapeDevice\n";    exit 0;}if ( $opt_eject ) {    print LOG &do_time(), ": eject requested\n";    &Unload ($tapeDevice);    print LOG &do_time(), ": 1 $tapeDevice\n";    print "1 $tapeDevice\n";    exit 0;}if ( $opt_search ) {    print LOG &do_time(), ": search label $opt_search requested\n";    $retry = 0;    $current_label = &get_label ($tapeDevice);    print LOG &do_time(), ": current label: $current_label\n";    while ( $opt_search ne $current_label && ++$retry < 5) {	&Unload ($tapeDevice);	&request ($opt_search);	&Load ($tapeDevice);	$current_label = &get_label ($tapeDevice);	print LOG &do_time(), ": search label: $opt_search\n";	print LOG &do_time(), ": current label: $current_label\n";    }    if ( $retry >= 5) {	print LOG &do_time(), ": disk not found\n";	print "disk not found\n";	exit 1;    } else {	print LOG &do_time(), ": 1 $tapeDevice\n";	print "1 $tapeDevice\n";	exit 0;    }}if ( $opt_label ) {    print LOG &do_time(), ": label $opt_label requested\n";    # no operation    print LOG &do_time(), ": 1 $tapeDevice\n";    print "1 $tapeDevice\n";    exit 0;}print "$progname: No command was received.  Exiting.\n";exit 1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -