X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=backup.sh;h=9edfe425e6f14f5024b4211e02a9b28b7257d764;hb=645e17cfd5189a7a1d59e26bef752d9ee0f8cff8;hp=7457a34fdcebc5a73037886c459180329a10fe4c;hpb=a43c445820a18e5acec38aba996c82b3c1363e94;p=backup.sh diff --git a/backup.sh b/backup.sh index 7457a34..9edfe42 100755 --- a/backup.sh +++ b/backup.sh @@ -17,13 +17,12 @@ echo #newgrp itk umask 027 -#liste over maskinene vi tar backup av. (space mellom maskinnavn) -computers="cirkus backup josef" -#for debug -#computers="josef" -### +#Maskiner vi skal ta backup av +unixcomputers=`cat /home/backup/computers.unix` +ntcomputers=`cat /home/backup/computers.nt` -#disse bør kunne varieres fra fs til fs +#disse bør kunne varieres fra fs til fs? +#disse bør flyttes ut i egen fil som kan editeres fra web kanskje? maksantallfulle=2 #hvor mange fulle vi tar vare på #maksantalldaglige=30 #hvor mange daglige vi tar vare på dagermellomfulle=30 #antall dager før det er på tide med ny full @@ -40,6 +39,8 @@ DATEs=`date "+%Y-%m-%d %H:%M"` #passer for bruk med tar backup() { + echo "$computer:$filesystem tar $backuplevel backup" + if [ "$backuplevel" = "daglig" ] then forrige=`cat ../.dato` @@ -48,21 +49,22 @@ backup() forrigecmd="" fi + #Prøver å ta backup med tar if `ssh $computer "cd $filesystem ;\ tar cfl - . $forrigecmd \ - --exclude-from=$exclude \ + --exclude-from=/tmp/.backup/exclude \ | gzip" \ | dd of=$DATE.tmp 2>/dev/null` then #Det gikk kanskje bra mv $DATE.tmp $DATE.tgz - #lage listefil - tar tvfz $DATE.tgz > $DATE.idx 2>&1 - grep -v ^d $DATE.idx | sort -n -r +2 > $DATE.sdx + #lage listefil og oppdater datofil om det gikk greit + tar tvfz $DATE.tgz > $DATE.idx 2>&1 && + echo $DATEs > ../.dato && + touch -t $DATE ../.dato - #oppdatere datofil - echo $DATEs > ../.dato - touch -t $DATE ../.dato + #lage sortert listefil + grep -v ^d $DATE.idx | sort -n -r +2 > $DATE.sdx #fikse rettigheter chmod 600 *tgz @@ -73,9 +75,11 @@ backup() rm $DATE.tmp echo "$backuplevel backup av $computer:$filesystem gikk ikke bra" fi + } -for computer in $computers +#Løper gjennom listen av unixmaskiner som vi skal ta backup av +for computer in $unixcomputers do #tømmer variabelen for sikkerhets skyld @@ -87,13 +91,27 @@ do | grep -v ^# \ | awk '{ if ( $(NF-1) != "0" ) print $2}' ` - #for debugging - #filesystems="/" + #Renske opp i katalogen vår på klienten + ssh $computer "rm -rf /tmp/.backup ; mkdir -m 700 /tmp/.backup" + + #Prøver å kopiere over $exclude til $computer + scp $exclude $computer:/tmp/.backup/exclude || + echo "Vi klarte ikke kopiere over exclude.txt til $computer :(" + + #Prøver å kopiere over preeexec og postexec om de finnes + [ -f /backup/$computer/.preexec ] && + scp /backup/$computer/.preexec $computer:/tmp/.backup/preexec + [ -f /backup/$computer/.postexec ] && + scp /backup/$computer/.postexec $computer:/tmp/.backup/postexec + + #Prøver å kjøre preexec om den finnes + ssh $computer "[ -f /tmp/.backup/preexec ] && + /bin/bash -x /tmp/.backup/preexec" for filesystem in $filesystems do - #lager en variant uten tegnet "/" - sfilesystem=`echo $filesystem | tr '/' '_'` + #lager en variant uten tegnet "/" eller $ (gjelder NT) + sfilesystem=`echo $filesystem | tr '\/\$' '__'` # echo $filesystem > /backup/$computer/$sfilesystem.navn @@ -129,32 +147,37 @@ do #selve backupen backup - echo "$computer:$filesystem sletter fulle slik at vi ikke har mer enn 2" + #Sjekker om det er på tide å slette noen fulle backuper mf=$(($maksantallfulle+1)) for full in `ls -1t /backup/$computer/$sfilesystem/full/*tgz | tail +$mf` do prefix=`echo $full|cut -d . -f 1` - echo "$computer:$filesystem sletter $prefix" + echo "$computer:$filesystem sletter full $prefix (for mange)" rm $prefix* done - echo "$computer:$filesystem ferdig med slett av fulle" - echo "$computer:$filesystem slette daglige eldre enn eldste fulle" + #Sjekker om det er på tide å slette noen daglige backuper eldste=`ls -t1 /backup/$computer/$sfilesystem/full/*tgz | tail -1` find \ /backup/$computer/$sfilesystem/daglig \ \! -newer $eldste \ - -print \ + -printf "$computer:$filesystem sletter daglig %f (for gammel)\n" \ -exec rm {} \; - echo "$computer:$filesystem ferdig med slett av gamle daglige" done + #Prøver å kjøre postexec om den finnes + ssh $computer "[ -f /tmp/.backup/postexec ] && + /bin/bash -x /tmp/.backup/postexec" + done #Finne de backupene som har tryna og #lage en webside med de /home/backup/finn_ufullstendige.sh +#Lage søkbar indeks over listefilene +/home/backup/indekser.sh + echo -n "Ferdig... " date