I use a scheduled task to kick off ntbackup on my WinXP box every morning. Mondays, I do a full backup. Tues-Sun I do a differential. I had to invest some time writing some VBscript to keep 3 weeks worth of backups, but ntbackup is free in the box. The script has largely been problem-free for me, and the cost can't be beat. I back up to a hard drive on another machine on my home network. Since I know your next question is going to ask for my VBScript, here it is, slightly edited. (It looks line line wraps have been mangled; you'll have to edit these yourself.) ===== Option Explicit 'Matt's VB Script to back up his machines to his server. 'This script is dumb as a rock and has little to no error checking. '============================= 'hardcoded settings. Change these to suit your needs. This is all that should need to be changed by the user. dim ServerName, ShareName, ReportEmailAddress, fullbackupday, weeksofbackupstokeep, MailServerName, strEmailFromAddress, strEmailToAddress, strSMTPServer ServerName = "" MailServerName = "" ShareName = "" fullbackupday = 2 'Which day of the week to do a full backup. Sunday = 1 weeksofbackupstokeep = 2 'How many weeks of backups to keep strEmailFromAddress = "" strEmailToAddress = "" strSMTPServer = "" '============================= dim ScriptStartTime, MachineStartUpTime ScriptStartTime = Now() 'Get local computer name dim objWshNetwork, localMachineName on error resume next set objWshNetwork = Wscript.CreateObject("Wscript.Network") on error goto 0 if err.number <> 0 then wscript.echo "Error instantiating wscript.network object. Error: " & err.number end if localMachineName = objWshNetwork.ComputerName 'Open tempLogFile dim LogFile, tempLogFile dim myFSO set myFSO = createobject("scripting.filesystemobject") on error resume next 'set LogFile = myFSO.OpenTextFile("\\" & servername & "\" & sharename & "\BackupScriptLog.txt", 8, true) set tempLogFile = myFSO.OpenTextFile("\\" & servername & "\" & sharename & "\" & localmachinename & "_BackupScriptLog.txt", 8, true) wscript.echo "Error creating log file: " & err.number on error goto 0 'now we can log stuff. LogEvent "Backup script started on machine " & LocalMachineName & ".", false 'Parse command line arguments dim cmdLineDoFullBackup,cmdLineDoHibernateWhenDone, cmdLineDoPowerOffWhenDone, cmdLineDetailLog dim i for i = 0 to wscript.arguments.count-1 if ucase(wscript.arguments(i)) = "/FULL" then cmdLineDoFullBackup = true LogEvent "full backup specified on command line.", false end if if ucase(wscript.arguments(i)) = "/HIBERNATE" then cmdLineDoHibernateWhenDone = true LogEvent "hibernate when done specified on command line.", false end if if ucase(wscript.arguments(i)) = "/POWEROFF" then cmdLineDoPowerOffWhenDone = true LogEvent "power off when done specified on command line.", false end if if ucase(wscript.arguments(i)) = "/DETAILLOG" then cmdLineDetailLog = true LogEvent "detailed log will be made", false end if next dim backupType on error resume next if (datepart("w", scriptstarttime) = fullbackupday) or (cmdLineDoFullBackup = true) then backupType = "normal" LogEvent ("Doing normal (full) backup."), true else backupType = "differential" LogEvent ("Doing differentail backup."), true end if on error goto 0 'backuptype = "normal" 'if backupType = "normal" then if (datepart("w", scriptstarttime) = fullbackupday) then on error resume next 'age existing files dim folder set folder = myFSO.GetFolder(pathToFiles & CStr(weeksofbackupstokeep) & " weeks") LogEvent ("Attempting to delete folder " & folder.Name), true folder.delete LogEvent ("folder.delete returned error " & Err.number & ":" & Err.Description), true LogEvent ("Entering folder rename loop."), true if (weeksofbackupstokeep > 0) then for i = weeksofbackupstokeep-1 to 1 step -1 set folder = myFSO.GetFolder(pathtoFiles & cstr(i) & " weeks") folder.move (pathtofiles & cstr(i+1) & " weeks") next end if LogEvent ("Exited folder rename loop."), true set folder = myFSO.GetFolder(pathtoFiles & "current") LogEvent ("Renaming 'current' folder"), true folder.move (pathtofiles & "1 weeks") LogEvent ("Rename returned error " & err.number & ":" & Err.Description), true on error goto 0 dim foldercollection set folder = myFSO.getfolder(pathtofiles) set foldercollection = folder.subfolders LogEvent ("Creating new 'current' folder."), false foldercollection.add ("Current") LogEvent ("Folder creation returned error " & err.number), false end if 'Start backup dim cmdString cmdString = "ntbackup.exe" cmdString = cmdString & " backup" cmdString = cmdString & " " & chr(34) & "@\\" & ServerName & "\" & sharename & "\" & LocalMachineName & "_backupset.bks" & chr(34) cmdString = cmdString & " /n " & chr(34) & weekdayname(datepart("W", ScriptStartTime)) & "_backup" & chr(34) cmdString = cmdString & " /j " & chr(34) & weekdayname(datepart("W", ScriptStartTime)) & "_backup" & chr(34) cmdString = cmdString & " /f " & chr(34) & "\\" & servername & "\" & sharename & "\" & LocalMachineName & "\current\" & weekdayname(datepart("w", ScriptStartTime)) & ".bkf" & chr(34) cmdString = cmdString & " /v:yes" cmdString = cmdString & " /r:no" if cmdLineDetailLog = true then cmdString = cmdString & " /l:f" else cmdString = cmdString & " /l:s" end if cmdString = cmdString & " /m " & backupType cmdString = cmdString & " /hc:on" cmdString = cmdString & " /SNAP:on" 'cmdString = "calc.exe" LogEvent ("Command line to execute: " & cmdString), false dim wshShell set wshShell = CreateObject("wscript.shell") dim RetVal retVal = wshShell.run (cmdString,,true) LogEvent ("Backup finished; return value = " & retVal), false dim PathToBackupLogs, objShell set objShell = createobject("Shell.Application") set folder = objShell.Namespace(28).items.item pathtobackuplogs = Folder.path & "\microsoft\windows nt\ntbackup\data" dim lastmodifiedtime, objfile, thelastlogfile lastmodifiedtime = dateadd("yyyy", -3, Now()) 'three years ago set folder = myfso.GetFolder(pathtobackuplogs) for each objfile in folder.files if objfile.datelastmodified > lastmodifiedtime then thelastlogfile = objfile.path lastmodifiedtime = objfile.datelastmodified end if next dim myfile set myfile = myfso.GetFile(thelastlogfile) LogEvent ("Copying backup log file: " & thelastlogfile), false myfile.copy "\\" & servername & "\" & sharename & "\" & LocalMachineName & "\current\" & weekdayname(datepart("w", ScriptStartTime)) & ".log" LogEvent ("Copy operation returned " & err.number), false 'Email backup log to email address dim objMessage Set objMessage = CreateObject("CDO.Message") objMessage.Subject = "Backup job on " & LocalMachineName & " completion report" objMessage.Sender = strEmailFromAddress objMessage.To = strEmailToAddress dim strEmailTxt strEmailTxt = "The backup job on computer: " & LocalMachineName & " completed." strEmailTxt = strEmailTxt & vbCrLf strEmailTxt = strEmailTxt & "The job was started at: " & ScriptStartTime strEmailTxt = strEmailTxt & vbCrLf strEmailTxt = strEmailTxt & "The job was finished at " & Now() strEmailTxt = strEmailTxt & vbCrLf strEmailTxt = strEmailTxt & "A " & backupType & " backup was performed." strEmailTxt = strEmailTxt & vbCrLf strEmailTxt = strEmailTxt & vbCrLf strEmailTxt = strEmailTxt & "The backup log file is attached. (" & theLastLogFile & ")" & vbcrlf & vbcrlf 'Look for the following words in the backup log: 'FAIL, ERROR, DIFFERENT 'and add them to the email body. dim myBackupFile, strLineOfText, strUCaseLineOfText, bAddLineToEmailBody LogEvent "opening file: " & theLastLogFile, false set myBackupFile = myFSO.OpenTextFile(theLastLogFile, 1, false, -1) LogEvent "ERROR: " & Err.Number, false while not myBackupFile.AtEndOfStream bAddLineToEmailBody = false strLineOfText = myBackupFile.ReadLine() strUCaseLineOfText = UCase(strLineOfText) if Instr(strUCaseLineOfText, "ERROR") > 0 then bAddLineToEmailBody = true if Instr(strUCaseLineOfText, "FAIL") > 0 then bAddLineToEmailBody = true if Instr(strUCaseLineOfText, "DIFFERENT") > 0 then bAddLineToEmailBody = true if bAddLineToEmailBody = true Then strEmailTxt = strEmailTxt & strLineOfText & vbcrlf end if wend objMessage.TextBody = strEmailTxt objMessage.AddAttachment theLastLogFile objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSMTPServer objMessage.Configuration.Fields.Update objMessage.Send LogEvent "Sent email.", false 'figure out how to put the machine into hibernation if we need to. if cmdLineDoHibernateWhenDone = true then LogEvent "hibernating the machine.",false cmdString = "hibernate.exe" wscript.echo "Running: " & cmdString retVal = wshShell.run (cmdString,,true) end if stop private sub LogEvent (theString, setResumeNext) On Error Resume Next tempLogFile.WriteLine Now() & " " & LocalMachineName & " " & theString if (instr(wscript.fullname,"cscript")) > 0 then wscript.echo Now() & " " & theString end if if setResumeNext = false then On Error Goto 0 end if end sub ===== You'll need to create a backup set for the machine you're using (done within ntbackup) and save it to the same location as the script file. It also requires an executable, hibernate.exe, that I wrote, if you want to hibernate the machine after the backup runs. To run the backup: cscript.exe \\servername\sharename\backupscript.vbs [/Full][/Hibernate][/PowerOff][/Detaillog] /Full does a full backup, even if an incremental is scheduled today /Hibernate hibernates the machine when done. /PowerOff powers off the machine when done. /Detaillog tells ntbackup to create a detailed backup log ----- Original Message ----- From: "Vitaliy" To: "Microcontroller discussion list - Public." Sent: Tuesday, June 26, 2007 5:12 PM Subject: Re: [OT]: Backup strategies (was Re: [OT]: Filesyncronization/SyncToy) > Gerhard Fiedler wrote: >> At the end of a week, I start a new backup cycle with a new base line >> (full) backup. Each day during the week I add an incremental backup to >> that. I keep two full weeks of these daily backups, plus a selection of >> baseline backups that go back at least two months. Every week I take a >> copy >> of all this to an offsite location. One drive is internal and is where I >> do >> my backups to. Another drive has a copy of that (to be taken offsite at >> the >> end of the week), and still another drive is offsite during the week >> (coming onsite at the end of the week). >> >> (Ok, that offsite thing is on hold until I get to the US the next time >> and >> buy a couple of USB 2 external drives, but the idea is as good as done :) > > :) > > What software do you use for incremental backups? What OS do you run on > your > server? > >>> It seems to me that a hybrid system (drives for short-term stuff, tapes >>> for long term) is the best solution, from POV of >>> cost/reliability/simplicity. >> >> Maybe, maybe not. >> >> I don't like tapes for simplicity. I used to think that they were a good >> idea, but my experiences were that they never worked well. YMMV, of >> course, >> and I didn't have the real high-end stuff. (But if you have, cost becomes >> a >> major factor.) I think there are few other media that are as simple to >> use >> as hard disks. >> >> I'm not sure tapes are as reliable as hard disks for long term storage. >> I'm >> pretty sure that a hard disk can be read in ten years; I wouldn't be so >> sure with tapes. (I'm not talking about interface and protocol issues, >> just >> about media.) The only damaging factor where they have an advantage is >> shock, but that can usually be prevented, and generally will be noticed >> right away if it happens and can be taken care of. >> >> And cost... are you sure that your cost per GB is lower with tapes than >> it >> would be with hard disks? > > Well, right now each tape is a full backup (no increments), so if we > replaced each tape with a hard drive, it would get pretty expensive. > > But your system makes sense, I'm just curious how realiable and convenient > it is. > > How hard is it to get the Tuesday version of a particular file? > > And if I understand correctly, if your hard drive gets zapped on Friday, > you > lose an entire week? > > Vitaliy > > -- > http://www.piclist.com PIC/SX FAQ & list archive > View/change your membership options at > http://mailman.mit.edu/mailman/listinfo/piclist -- http://www.piclist.com PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist