]> git.sesse.net Git - backup.sh/commitdiff
Initial revision
authorroot <empty>
Thu, 16 Mar 2000 00:57:31 +0000 (00:57 +0000)
committerroot <empty>
Thu, 16 Mar 2000 00:57:31 +0000 (00:57 +0000)
backup.sh [new file with mode: 0755]

diff --git a/backup.sh b/backup.sh
new file mode 100755 (executable)
index 0000000..b82b8bf
--- /dev/null
+++ b/backup.sh
@@ -0,0 +1,155 @@
+#!/bin/bash
+
+PATH=/local/bin:$PATH
+export PATH
+
+echo -n "Starter... "
+date
+
+#newgrp itk
+umask 027
+
+#liste over maskinene vi tar backup av. (space mellom maskinnavn)
+computers="cirkus backup josef"
+#for debug
+#computers="josef"
+###
+
+#disse bør kunne varieres fra fs til fs
+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
+###
+
+#lager datovariabeler
+DATE=`date "+%Y%m%d%H%M"`            #passer for bruk med touch
+DATEs=`date "+%Y-%m-%d %H:%M"`       #passer for bruk med tar
+###
+
+#selve backupen
+# krever at noen variabler er satt
+# krever at vi er i rett katalog
+backup()
+{
+
+ if [ "$backuplevel" = "daglig" ]
+ then
+  forrige=`cat ../.dato`
+  forrigecmd=--newer=\"$forrige\"
+ else
+  forrigecmd=""
+ fi
+
+ if `ssh $computer "cd $filesystem ;\
+     tar cfl - . $forrigecmd \
+      --exclude=\"tmp\" \
+      --exclude=\".netscape/cache\" \
+      --exclude=\"core\" \
+      --exclude=\"*.rar\" \
+      --exclude=\"*.mp3\" \
+      --exclude=\"*.MP3\" \
+      --exclude=\"*.iso\" \
+      --exclude=\"*.rar\" \
+        | 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
+
+  #oppdatere datofil
+  echo $DATEs > ../.dato
+  touch -t $DATE ../.dato
+
+  #fikse rettigheter
+  chmod 600 *tgz
+  chmod 644 *sdx *idx
+
+ else
+  #Det gikk ikke bra
+  rm $DATE.tmp
+  echo "$backuplevel backup av $computer:$filesystem gikk ikke bra"
+ fi
+}
+
+for computer in $computers
+do
+ #tømmer variabelen for sikkerhets skyld
+ filesystems=""
+
+ #Sjekker nest siste felt i fstab. Om det er 0 tar vi ikke backup
+ filesystems=`ssh -n $computer "cat /etc/fstab" \
+  | grep -v nfs \
+  | grep -v ^# \
+  | awk '{ if ( $(NF-1) != "0" ) print $2}' `
+
+ #for debugging
+ #filesystems="/"
+
+ for filesystem in $filesystems
+ do
+  #lager en variant uten tegnet "/"
+  sfilesystem=`echo $filesystem | tr '/' '_'`
+
+  #
+  echo $filesystem > /backup/$computer/$sfilesystem.navn
+  chmod 644 /backup/$computer/$sfilesystem.navn
+
+  #standard backuplevel. full og daglig er eneste muligheter
+  backuplevel=daglig
+  #backuplevel=full
+
+  #lager det som trengs av kataloger
+  mkdir -m 755 -p /backup/$computer/$sfilesystem/{full,daglig} 2>/dev/null
+
+  #Bør bare skje ved første gangs kjøring for dette fs
+  if [ ! -f /backup/$computer/$sfilesystem/.dato ]
+  then
+   backuplevel=full
+   echo $DATEs > /backup/$computer/$sfilesystem/.dato
+   echo "$computer:$filesystem datofil laget"
+   echo "$computer:$filesystem trenger full pga ingen fra foer"
+  fi
+
+  #sjekker om det er på tide med en full
+  if 
+ [ -z `find /backup/$computer/$sfilesystem/full/ -name \*tgz -mtime -$dagermellomfulle` ]
+  then
+   echo "$computer:$filesystem trenger full pga lenge siden sist"
+   backuplevel=full
+  fi
+  #gå ned i rett katalog
+  cd /backup/$computer/$sfilesystem/$backuplevel
+
+  #selve backupen
+  backup
+
+  echo "$computer:$filesystem sletter fulle slik at vi ikke har mer enn 2"
+  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"
+   rm $prefix*
+  done
+  echo "$computer:$filesystem ferdig med slett av fulle"
+
+  echo "$computer:$filesystem slette daglige eldre enn eldste fulle"
+  eldste=`ls -t1 /backup/$computer/$sfilesystem/full/*tgz | tail -1`
+  find \
+     /backup/$computer/$sfilesystem/daglig \
+     \! -newer $eldste \
+     -print \
+     -exec rm {} \;
+  echo "$computer:$filesystem ferdig med slett av gamle daglige"
+
+ done
+
+done
+
+echo -n "Ferdig... "
+date