Often we need to backup some files on the servers on regular basis. There are 2 important things about backups which you should keep in mind and use:
- store backups on another server (not on the same where files are located);
- test restore scenario.
In order to store backups on another servers you may use online storages, like box.com, dropbox, Google drive, MS SkyDrive and others. Also many cloud hosting providers have own backup solutions, for example Rackspace Cloud Backup, which requires installation of additional backup agent on the server (it is free). It is really convenient solution, because you don’t need to have separate server image which is not cheap. However cloud storages are also not free and in most cases you have to pay as much as many megabytes you use. So in order to reduce costs at first you need to take care about deleting old backups from the cloud. Some cloud providers have own solutions for it. E.g. currently Rackspace Cloud Storage contains 3 options to delete old backups:
- store backups 30 days;
- store backups 60 days;
- store backups infinitely.
Also some backups software have option to delete files from backups using configurable rules. At second you need to decrease file size which is stored in the cloud storage. Many backup programs also can do that, but it can be done only by using Windows built-in features. In order to do it you may use simple cmd script which copies original file from its folder to folder for backup (in order to not affect work of the programs which use this file) and archives it to zip:
1: xcopy C:\source_folder\source_file.dat C:\target_backup_folder\temp /y
2: CScript zip.vbs C:\target_backup_folder\temp C:\target_backup_folder\backup.zip
As you can see it copies file using xcopy command (line 1) and then packages it to zip archive (line 2) using second script zip.vbs. If you will google for this script you will find many references, however not all of them work. Here is the script which works for me:
1: Set Args = Wscript.Arguments
2: source = Args(0)
3: target = Args(1)
4:
5: ' make sure source folder has \ at end
6: If Right(source, 1) <> "\" Then
7: source = source & "\"
8: End If
9:
10: Set objFSO = CreateObject("Scripting.FileSystemObject")
11: Set zip = objFSO.OpenTextFile(target, 2, vbtrue)
12: ' this is the header to designate a file as a zip
13: zip.Write "PK" & Chr(5) & Chr(6) & String( 18, Chr(0) )
14: zip.Close
15: Set zip = nothing
16:
17: wscript.sleep 500
18:
19: Set objApp = CreateObject( "Shell.Application" )
20: intSkipped = 0
21:
22: ' Loop over items within folder and use CopyHere to put them into the zip folder
23: For Each objItem in objApp.NameSpace( source ).Items
24: If objItem.IsFolder Then
25: Set objFolder = objFSO.GetFolder( objItem.Path )
26: ' if this folder is empty, then skip it as it can't compress empty folders
27: If objFolder.Files.Count + objFolder.SubFolders.Count = 0 Then
28: intSkipped = intSkipped + 1
29: Else
30: objApp.NameSpace( target ).CopyHere objItem
31: End If
32: Else
33: objApp.NameSpace( target ).CopyHere objItem
34: End If
35: Next
36:
37: intSrcItems = objApp.NameSpace( source ).Items.Count
38: wscript.sleep 250
39:
40: ' delay until at least items at the top level are available
41: Do Until objApp.NameSpace( target ).Items.Count + intSkipped = intSrcItems
42: wscript.sleep 200
43: Loop
44:
45: 'cleanup
46: Set objItem = nothing
47: Set objFolder = nothing
48: Set objApp = nothing
49: Set objFSO = nothing
It has 2 parameters: first is folder which has to be archived and second is path to output zip file. Unfortunately I found it quite long time ago and can’t provide the link to the original site, where I found it. But all credits goes to its author.
After that you need to setup scheduler task which will run this cmd script by schedule, e.g. daily. And the remaining thing is to setup copy of zip archive to your cloud storage. Using this technique you will be able to reduce the costs which you have to pay for storing backups in the cloud.
No comments:
Post a Comment