Backup

Uit SlowTrainWiki

Ga naar: navigatie, zoeken

Zie ook artikelen Python, Robocopy en Xcopy.

Voor privégebruik en klein zakelijk gebruik, lijken er voornamelijk twee methodes te zijn voor het maken van backups: Online backups, en backups op externe harde schijven. Dit artikel behandelt voornamelijk deze laatste methode.

Uitgangspunten:

  • Terugzetten: Archiveren is niet het punt, terugzetten is het punt. Terugzetten van backups blijft vaak gecompliceerder van verwacht, en wordt daarnaast vaak niet geverifiëerd. Daarom is het handig dat gearchiveerde gegevens in een gemakkelijk toegankelijk formaat beschikbaar zijn. Als bv. backups gemaakt worden met een exotisch backup-programma, dat bij terugzetten niet meer blijkt te bestaan, heb je een probleem, en dat gebeurt waarschijnlijk sneller dan je denkt. Ander voorbeeld: Thunderbird slaat e-mail op in mbox-formaat, dat werkt met klare tekst, terwijl Outlook een gesloten formaat gebruikt. Bij het terughalen van e-mail uit een oud gearchiveerd Outlook-bestand, heb je waarschijnlijk een werkende versie van Outlook uit die jaren nodig. Voor het terughalen van e-mail uit een gearchiveerd Thunderbird-bestand, kun je daarintegen volstaan met elke willekeurige editor.
  • Historie: Het is belangrijk om niet alleen backups van één moment te bewaren, maar een reeks van backups zodat je terugkunt in de tijd. Als bv. blijkt dat een paar dagen geleden een bestand beschadigd is geraakt, heb je niet zo veel aan een backup van gisteren, maar wel aan een backup van een week geleden;
  • Meerdere datadragers: Een externe harde schijf is een relatief storingsgevoelig medium. Daarnaast is de kans aanwezig dat wanneer de te archiveren computer een storing heeft, een aangesloten externe harde schijf dezelfde storing zal ondervinden (bv. waterschade, brand, diefstal). Daarom is het verstandig om met minimaal twee harde schijven te archiveren, waarbij één van de harde schijven zich op een andere locatie bevindt;
  • Simpel: Mensen vertrouwen blindelings op hun backup, en dat jaren lang. Daarnaast: Een backup is vaak nodig op het meest ongeschikte moment, zodat het belangrijk is dat terugzetten van data zo ongecompliceerd mogelijk is. Daarom moet de backup-infrastructuur simpel, robuust en intuïtief zijn. Daarom kan het bv. handig zijn dat mensen zelf een actie moeten doen voor archiveren, zodat ze gevoel voor de materie krijgen;
  • Vertrouwelijkheid: Vertrouwelijkheid is één van de aspecten aan informatiebeveiliging. Het betekent dat alleen die mensen toegang tot gegevens krijgen, die dat ook moeten hebben. In situaties waarin informatiebeveiliging van belang is, speelt dat bepaalt een rol bij het maken van backups op een externe harde schijf, omdat zo'n harde schijf kwijt kan raken. Die data moet er daarom waarschijnlijk versleuteld op staan. Voor bv. advocatenkantoren of medische organisaties met meerdere behandelaars, moet waarschijnlijk de data van de verschillende behandelaars met verschillende sleutels vercijferd worden. Wellicht kan dat bereikt worden door gegevens in wachtwoord-beschermde gecomprimeerde archiefbestanden op te slaan;
  • Copiëren: Wat je daadwerkelijk nodig hebt bij copiëren van gegevens:
    • Alleen bestanden copiëren als ze nieuwer zijn dan de versie in het archief;
    • Doorgaan bij fouten;
    • Recursief;
    • Bestanden die verdwenen zijn op de bronlocatie, behouden op de doellocatie;
    • Rapportage, bv. per e-mail.

Inhoud

Bash+rsync ahv. dag-van-de-week

Zie ook Redirection (Linux) en Nail

In januari 2011 hebben we met behulp van rsync en een Bash-script van één regel een backup van een Ubuntu-machine geconfigureerd. Onder Windows kostte dit een halve pagina aan programmeercode, plus dat een batch-file niet volstond: Er was een aparte taal voor nodig zoals Python.

Basis

Deze routine copiëert de complete home-directory van de actieve gebruiker, inclusief .dot-files naar een extern medium met de naam SAMSUNG (een SAMSUNG draagbare harde schijf), in de map die correspondeert met de dag van de week. Na een week worden oude backups weer overschreven. Met één externe harddisk kun je dus één week aan backups behouden. Met een tweede harde schijf kun je twee weken terug.

#! /bin/sh

echo "De Vliegende Backup"

rsync -auv ~/ /media/SAMSUNG/`date '+%u'`

Met foutlogbestand

Het betreffende logbestand staat in dezelfde map als het backupscript. Het logbestand wordt steeds overschreven.

#! /bin/sh

echo "De Vliegende Backup"

echo "**** Foutlog van De Vliegende Backup *** \n `date` \n" > ./DeVliegendeBackup.log

rsync -auv ~/ /media/KlantBackupDisk/Test`date '+%u'` 2>> ./DeVliegendeBackup.log

echo "*** Einde van het log ***" >> ./DeVliegendeBackup.log

Met ge-e-mailed foutlogbestand

Het summum van archiveren:


#! /bin/sh

echo "De Vliegende Backup"

LogFile="/media/KlantBackupDisk/DeVliegendeBackup.log"

echo "**** Foutlog van De Vliegende Backup *** \n `date` \n" > $LogFile

rsync -auv ~/ /media/KlantBackupDisk/Test`date '+%u'` 2>> $LogFile

echo "\n *** Einde van het log ***" >> $LogFile

nail -r "info@devliedendebrigade.nl" -s "Backup-foutlog `date`" -S smtp=smtp.xs4all.nl info@devliedendebrigade.nl < $LogFile

Details:

  • In een van de eerste regels wordt in de variabele LogFile het logbestand gespecificeerd;
  • De gewone output wordt naar het scherm gestuurd;
  • Foutmeldingen worden naar het logbestand gestuurd;
  • Het logbestand wordt ge-e-mailed. Om alles te e-mailen is nogal overkill: Dan moet de gebruiker de fouten er uithalen, en dat is niet handig.

rsync

Zie artikel rsync

Simpele niet-automatische backup (Windows)

Dit betreft backup op een externe harde schijf. De gebruiker wordt gevraagd om het device-letter van deze externe harde schijf in te voeren. Het script maakt gebruik van Robocopy voor het daadwerkelijke copieren.

import os
from subprocess import Popen, PIPE
from subprocess import call
 
print ("Welkom bij EyeGlass, routine voor dagelijks backuppen")
print ("\n")
backupdevice=input("Wat is de device-letter van de externe harde schijf? ")
print ("\n")
string1='robocopy "d:\\Mijn documenten" "'
string3=':\\Mijn documenten" /s /R:0'

executestring=string1+backupdevice+string3

print ("Nu wordt uitgevoerd: ",executestring)

resultaat=call((executestring))

Let op:

  • Backslashes moeten un-escaped worden
  • Je hebt allerlei libraries nodig, als is niet duidelijk welke precies
  • De laatste tekens in string1 zijn: " "'

Backup ahv. dag van de week

Dit script is bedoeld om aangeroepen te worden door Task Scheduler. Vervolgens bepaalt het de dag van de week, en maakt een backup in de bijbehorende map. En passant wordt Outlook be-eindigd, omdat je .pst-bestanden niet zomaar kunt backuppen. Let op: Dit script gaat er altijd van uit dat backups op device I gemaakt worden.

Dit script raad ik af: killen van Outlook zorgt voor beschadigingen.

import os
from subprocess import Popen, PIPE
from subprocess import call
from datetime import date
 
# Welkom

print ('*** Welkom bij EyeGlass, routine voor backups')

# Initieer variabelen

source='"C:\\Users\\JanKlaas"'
options='/s /R:0' 

# Outlook afsluiten

killstring='taskkill /f /im OUTLOOK.EXE'
print ('   Outlook wordt nu afgesloten...')
# call(killstring)

# Bepaal target ahv. dag-van-de-week

if date.isoweekday(date.today())==1:
   print('   Het is maandag')
   target='I:\\Maandag'
elif date.isoweekday(date.today())==2:
   print ('   Het is dinsdag')
   target='I:\\Dinsdag'
elif date.isoweekday(date.today())==3:
   print ('   Het is woensdag')
   target='I:\\Woensdag'
elif date.isoweekday(date.today())==4:
   print ('   Het is donderdag')
   target='I:\\Donderdag'
elif date.isoweekday(date.today())==5:
   print ('   Het is vrijdag')
   target='I:\\Vrijdag'
elif date.isoweekday(date.today())==6:
   print ('   Het is zaterdag')
   target='I:\\Zaterdag'
elif date.isoweekday(date.today())==7:
   print ('   Het is zonderdag')
   target='I:\\Zondag'    
else:
   print('   Lukt niet om de dag van de week te bepalen')

# Creer uiteindelijke string

executestring='robocopy '+source+' '+target+' '+options

print ('   Uit te voeren commando: ',executestring)

resultaat=call((executestring))

print ('  Resultaat: ',resultaat)
print ('\n')
print ('   Klaar.')
input ('  Geef Enter om af te sluiten.')

Automatischere backup ahv. dag van de week (Windows)

In dit geval moet het backup-script in de root van het backup-medium staan, want dan heb je gelijk de goede working directory. Daardoor hoeft het script niet om de doel-device-letter te vragen!

print ("Welkom bij EyeGlass, routine voor dagelijks backuppen")
print ("\n")

string1='robocopy "c:\\Documents and Settings" '

# Bepaal target ahv. dag-van-de-week

if date.isoweekday(date.today())==1:
   print('   Het is maandag')
   target='.\\Maandag'
elif date.isoweekday(date.today())==2:
   print ('   Het is dinsdag')
   target='.\\Dinsdag'
elif date.isoweekday(date.today())==3:
   print ('   Het is woensdag')
   target='.\\Woensdag'
elif date.isoweekday(date.today())==4:
   print ('   Het is donderdag')
   target='.\\Donderdag'
elif date.isoweekday(date.today())==5:
   print ('   Het is vrijdag')
   target='.\\Vrijdag'
elif date.isoweekday(date.today())==6:
   print ('   Het is zaterdag')
   target='.\\Zaterdag'
elif date.isoweekday(date.today())==7:
   print ('   Het is zonderdag')
   target='.\\Zondag'    
else:
   print('   Lukt niet om de dag van de week te bepalen')

string3=' /s /R:0'

executestring=string1 + target + string3

print ("Nu wordt uitgevoerd: ",executestring)

resultaat=call((executestring))

Backup ahv. de dag van de maand

Als hierboven, maar nu met een aparte map voor elke dag van de maand

import os
from subprocess import Popen, PIPE
from subprocess import call
import datetime
#
# Welcome to De Vliegende Backup,
# a routine for daily backup, made as simple as possible.
#
# Publiced under GNU Public Licence
# Jeroen Strompf - September 2010
# Slow Train Coming
 
# Welcome
#
print ('*** De Vliegende Backup ***')

################
# Define command
################
#
CommandString='robocopy '

###############
# Define source
###############
#
Source='"C:\\Documents and Settings"'

####################
# Define destination
####################
#
NumberOfToday=str(datetime.datetime.now().day);

Destination='.\\' + NumberOfToday

# print (NumberOfToday);
# print (destination);

################
# Define options
################
#
Options=' /s /R:0'

#####################
# Define whole string
#####################
#
ExecuteString=CommandString + Source + ' ' + Destination + Options

print (ExecuteString);

#########
# Execute
#########
#
Result=call((ExecuteString))

Tweedagelijks xcopy met meerdere harde schijven (Windows)

Dit is een scenario dat een klant van ons toepast:

  • Twee personen maken backups. Beide personen hebben hiervoor twee externe harde schijven. Ze maken meerdere backups per dag, vanwege de grote kosten bij zelfs maar een halve dag verlies;
  • Backups worden handmatig gemaakt. Het voordeel is dat ze daardoor betrokken zijn bij de backups. Het nadeel is dat dit discipline vereist;
  • Op de backup-harde schijf staat een routine genaamd backup.bat. Die wordt aangeroepen;
  • backup.bat copiëert data vanaf een vaste locatie (in hun geval een map op een server, die altijd bereikbaar is als n:\, en copiëert deze data naar 'zichzelf'. Op die manier hoeft niet uitgezocht te worden wat de device-letter van de backup-harde schijf is;
  • Geopende Outlook-bestanden zijn niet te backuppen. In de tijd dat ze Outlook gebruikten, maakte Outlook zelf backup van 't .pst-bestand, en plaatste die automatisch op de server;
  • Bestand backup.bat bevat het volgende commando:
     xcopy n:\*.* \backups /s /d /c /y 

Evaluatie:

Erg goed verzorgd. Handige oplossing voor Outlook. Alleen is xcopy niet al te betrouwbaar. Waarschijnlijk is het beter om robocopy te gebruiken. Daarnaast is het verstandig om meerdere backups naast elkaar te hebben, zodat er terug in de tijd kan worden gegaan.

Windows Backup (Windows Vista)

Windows Backups is het standaard meegeleverde backupprogramma van Microsoft in Windows Vista en nieuwere Windows-versies. Het is te bereiken via Configuration.

Windows Vista kent uitgebreide DRM: Digital Rights Management. Bij copiëren wordt voor alle bestanden gecontroleerd of de bijbehorende rechten aanwezig zijn. Dat maakt copiëren en dus ook archiveren, heel langzaam. Al snel wordt dit nachtwerk.

Voordelen

  • Historie: Er worden verschillende backups naast elkaar bewaard;
  • Schaduw-copie: Het maakt een schaduw-copie aan van de te archiveren data: Normaliter kun je op Windows geopende bestanden niet archiveren. Dit is een beperking van het bestandssysteem. Dit is altijd een lastig punt bij het configureren van backups. Windows Backup maakt eerst een schaduw-copie aan van te archiveren data, wat de standaardmanier is om dit probleem te omzeilen;
  • Standaard meegeleverd: Het wordt meegeleverd met Windows. Dat is erg handig;
  • Ongecompliceerd: Mijn eigen oplossing met Robocopy en Python is complexer en vereist meer verificatie;
  • Bestandsformaat: Archieven zijn reguliere zip-bestanden en kunnen zelfs op niet-Windows-computers geopened worden.

Nadelen

  • Geen automatisering: De versie die wordt meegeleverd met Windows Vista Home kan niet geautomatiseerd worden;
  • Maar één script: Je kunt geen verschillende scripts naast elkaar gebruiken, bv. voor twee externe harde schijven twee scripts;

Overig

Ik weet niet wat er gebeurd als er geen ruimte meer is op de doellocatie.

Windows Backup (Windows 7 Home Premium)

Windows Backup voor Windows 7 Home Premium lijkt een geschikt product te zijn om backups te maken:

  • Scheduling: Je kunt een rooster voor bv. dagelijkse backups aanmaken;
  • Restoring: Gearchiveerde data kan ik zelfs op een Ubuntu-computer uitlezen;
  • Historie: Backups worden naast elkaar bewaard;
  • Eenvoudig: Het werkt eenvoudig;
  • Schaduwkopie; Geopende bestanden (vb. Outlook) worden ook gearchiveerd.

Daarnaast kun je een system image aanmaken. Interessante optie om hierop te standaardiseren.

Onbekend

  • Wat gebeurd er als de harde schijf vol raakt?
  • Kun je verschillende harde schijven gebruiken?
Persoonlijke instellingen