Backups sind wohl eines der wichtigsten Dinge auf einem Server und so darf es natürlich auch nicht auf meinem Server fehlen. Statt einer Software Solution habe ich mir meine mit Hilfe von Shell selbst geschrieben. Das Script ist relativ schmal gehalten, erledigt aber alles mit bravour. Es hat eine Vorhalte Zeit von 5 Tagen welches in der Variable mindir abgespeichert ist. Es werden also insgesamt die letzten 5 Backups beibehalten, die älteren Backups werden automatisch gelöscht. Die For Schleife beinhaltet alle Ordner die gesichert werden sollen.
Das Interessante ist der find Aufruf, um die ältesten Backups zu finden und diese aufzulisten
`find ${dir} -maxdepth 1 -type d -printf '%T+ %p\n' | sort -n | head -n ${t} | awk '{print $2}'`
Dieser Befehl geht in das Verzeichnis, welches in der Variable „dir“ angegeben worden ist. Mit maxdepth ist die Tiefe angegeben. Der Befehl bleibt also nur im obersten Ordner. Mit type suchen wir nur nach Ordnern. Anhand printf wird das Format der Ausgabe festgelegt. Diese Informationen werden nach sort gepiped, wo die Informationen noch sortiert werden, währen head dann die Ordner heraussucht, die gelöscht werden dürfen. Das awk sucht dann nur noch den Ordnerpfad aus dem String heraus.
Ich habe im ganzen Code noch jede Stelle einzeln kommentiert, damit es besser verstanden werden kann.
#!/bin/sh #where to save the backup dir="/root/backup/" #min number of backups to keep mindir=5 d=`date +%Y%m%d` #get the current number of the backup existing curnumber=`find /root/backup -maxdepth 1 -type d | wc -l` #check if root backup dir exists if [ ! -d "${dir}" ] then #if not create mkdir ${dir} echo "backupfolder does not exists - created" >> /var/log/backup.log fi #check if backupfolder exists if [ ! -d "${dir}${d}" ] then #if not create mkdir ${dir}${d}/ echo "create folder ${d}" >> /var/log/backup.log #add folders to be backed up here. Loop iterates over the folders then to back them up for f in "/root/Projekte/" "/root/client-configs/" "/root/openvpn-ca/" do #copy defined folders into the backup folder cp -p -R -P ${f} ${dir}${d} echo "cp -p -R -P ${f} ${dir}${d}" >> /var/log/backup.log done fi #to not overblowing the server capacity the backup system only keeps the last ${mindir} backups. # checks if the current number is greater than or equal to ${mindir} if [ $(($curnumber - 1 )) -ge ${mindir} ] then #get the numbers of how many backups can be deleted t=$((${curnumber} - ${mindir} -1 )) #find the last ${t} backups lastbackup=`find ${dir} -maxdepth 1 -type d -printf '%T+ %p\n' | sort -n | head -n ${t} | awk '{print $2}'` echo "backups to delete: ${lastbackup}" >> /var/log/backup.log #delete those backups rm -r -f ${lastbackup} fi exit 0
Dieses Script kann dann z.B. als Cronjob angelegt werden, damit regelmäßig Backups gemacht werden. Bei mir läuft das Script z.B. jeden Tag um 0:55, dies ist jedem allerdings selbst überlassen.
Die Ausführung, bzw. die Ausgaben des Scripts werden dann unter /var/log/backup.log abgespeichert. Somit kann im Fehlerfall überprüft werden, was denn zu dem Fehler geführt hat. Diese Log Datei befindet sich in einer sogenannten Rotation, damit die Log nicht aufgebläht wird.