#######do-backup############################ #!/usr/bin/perl -w use strict; use IPC::Open3; use IO::Handle; use File::Path; use File::Copy; $|=1; my $basename = 'root_full'; my $backupdir = '/tmp/dar'; my $backuploc = "$backupdir/$basename"; if (! -d $backupdir){ mkpath($backupdir) || die "no permission to $backupdir? $!"} my $lead = 'Adding file to archive: '; my $rx = qr/\Q$lead\E(.*)/; my $lead1 = 'Insert blank'; my $rxlog = qr/\Q$lead1\E(.*)/; my $darlog = 'dar.log'; open(LOG,">$darlog") or die $!; my @darvars = qq( -c $backuploc -s 50M -S 45M -v -E './cdwrite %p/%b.%n.dar %b %n' -b -z -R / -X "*~" -X ".*~" -X "*.e2fs" -X "*.dar" -P 1saves -P dev/pts -P proc -P 1 -P 1out -P bin -P boot -P c -P dev -P home -P lib -P mnt -P opt -P root -P sbin -P svr -P tmp -P usr -P var -Z tgz -Z gz -Z bz2 -Z zip -D); my $cmd = "dar @darvars"; my $pid = open3(Symbol::gensym, my($get_output),0,$cmd ); while(my $output = <$get_output>) { print "output->$output"; print LOG $1 . chr(1) if $output =~ /$rx/; if($output =~ /$rxlog/){LOG->autoflush(1);print LOG "\n"} } waitpid( $pid, 0 ) or die; $? and die; close LOG; print "\n\e[1;34mDone with slice creation Will create catalog now\e[0m\n\n"; createcat(); print "\e[1;34mFinished\e[0m\n"; exit; ######################################################################### sub createcat{ if (! -d 'etc/dar'){ mkpath('etc/dar') || die "no permission to /etc/dar ? $!"} print "\e[1;34mPlease insert cd number 1 Press Enter when ready\e[0m\n"; my $ok =<>; #system('mount', '-t','ext2','/dev/sr0',$backupdir); #for real writes system('mount', '-t','ext2','-o','loop','image1.e2fs',$backupdir); my $leadcat = 'The last file'; my $rxcat = qr/\Q$leadcat\E(.*)/; @darvars = qq(-A $backuploc -C $basename.'catalog'); $cmd = "dar @darvars"; my $pid1 = open3(Symbol::gensym, my($get_output),0,$cmd ); while(my $output = <$get_output>) { print "output->$output"; if($output =~ /$rxcat/){ system('eject','/dev/sr0'); system('umount','-f','-d',$backupdir); system('mount', '-t','ext2','-o','loop','image3.e2fs',$backupdir); print "\e[1;34mPlease insert last cd of set Press Enter when ready\e[0m\n"; } } waitpid($pid1, 0 ) or die; $? and die; move("$basename.catalog.1.dar","/etc/dar/$basename.catalog.1.dar"); system('umount','-f','-d',$backupdir); } #######__END__ of do-backup################################ ###########cdwrite###################################### #!/usr/bin/perl -w use strict; use File::Copy; use File::Path; $|=1; my $backupdir = '/tmp/dar'; my $numcopies = 1; my $filename =''; my $basename = ''; my $number = ''; unless ($filename = shift){die "no filename to burn $!\n"} unless ($basename = shift){die "no basename given $!\n"} unless ($number = shift){die "no cd number given $!\n"} print "\e[1;34mcdwrite->filename: $filename\e[0m\n"; print "\e[1;34mcdwrite->basename: $basename\e[0m\n"; print "\e[1;34mcdwrite->number: $number\e[0m\n"; my $count = 60; my $mntloc = 'tmp/dar/writemnt'; if (! -d $mntloc){ mkpath($mntloc) || die "no permission to $mntloc? $!"} #this seems to work for the 650m chunks print "\n\e[1;34mCreating empty image.e2fs \e[0m\n"; system ('dd','if=/dev/zero','of=image.e2fs','bs=1024k',"count=$count"); print "\n\e[1;34mMaking ext2 filesystem on image.e2fs\e[0m\n"; system ('/sbin/mke2fs','-F','-b 2048','image.e2fs'); print "\n\e[1;34mMounting image via loop\e[0m\n"; system ('mount','-text2','-oloop','image.e2fs',"$mntloc"); print "\n\e[1;34mCopying files to image.e2fs\e[0m\n"; foreach('./restore','dar_static'){ my $result = copy($_,"$mntloc/$_"); if($result == 0){last} } #system('cp',$filename,"$mntloc/$basename.$number.dar"); copy($filename,"$mntloc/$basename.$number.dar"); &cdwriteout(); #unlink 'image.e2fs'; #delete images and slices unless first slice #if($number > 1){unlink "$backupdir/$basename.$number.dar"} #(for catalog creation later) #####if you have room to save your images's my $old = 'image.e2fs'; my $new = 'image'.$number.'.e2fs'; rename $old,$new; #rmdir $mntloc or warn $!; exit; ###############################################################3 sub cdwriteout{ print "\n\e[1;34mDoing cdwrite\e[0m\n"; system('umount','-f','-d',$mntloc); for(1..$numcopies){ # system('eject','/dev/sr0'); print "\n\e[1;34mInsert blank cdrom labeled $number then press enter when drive is ready\e[0m\n"; { local *STDIN; open( STDIN, "< /dev/tty" ); my $ok = ; } #use -dummy to test #system('cdrecord','-v','-dummy','-eject','speed=40','dev=1,0,0','image.e2fs'); } }