Sunday, February 13, 2011

AnyBackup Beta 1

I've been working on this side project for a little while now, it's called AnyBackup (as the title may have indicated). It's written in perl with wxWidgets as the GUI toolkit. Despite being written in perl, it is by no means platform independent, it's very much windows only for the time being. I built this program because there just doesn't seem to be a good solution out there for backing up multiple volumes to multiple volumes, especially to dynamic drives -- that is, drives that may or may not be connected and may or may not retain the same drive letter, a very real concern when your backup drives are being hooked up via USB! AnyBackup identifies your drives via a combination of the volume name (a volume must be named before being added, AnyBackup will refuse to add unnamed volumes) and the volume serial number. The bottom line, it's fairly stable and mostly works, I have not had it eat any data, and I've use it to keep my content drives in sync with my backup drives, I've even used it to restore some missing data. There are a few areas which need more intelligent handling as you can still get into a few situations with full drives that would require manual intervention to resolve.

  • Backup any number / sized volumes to any number / sized volumes
  • Restore missing files or backup new files / delete old files
  • Search through files on any of your content and backup drives
  • An easy to navigate gui interface for navigating the indexed content of your drives
  • Backup volumes don't all have to be connected at once
    • The idea here is that if you're connecting your backup drives via usb, you can connect them one at a time, AnyBackup will prompt you for the specific volume it needs (this is ideal if you're using a USB/eSATA dock to connect your backup drives)
  • Allows you to specify a list of file extensions you wish to backup (so if you only wanted to backup mp3's, for instance, you could go to  Edit -> Edit Lists (or Ctrl+E) and select valid extensions from the drop down, and add "mp3" to the list. To index all files you could add ".*" to the list of valid extensions
  • Allows you to specify regular expressions for files to avoid indexing
  • Will semi-intelligently backup content and attempt to cluster content together
    • By this I mean if you had a folder for your favorite band, say, The Beatles, and you have sub folders for all the albums (i.e. The White Album, Abbey Road, etc) which then contain audio files, when backing up each audio file it will look to see if a backup volume already contains its parent folder (i.e. The White Album) or its parent's parent (The Beatles) and if a backup volume already contains either, it will choose that backup volume as its destination.
Known Issues
  • If a backup volume is full but there is new content to backup that prefers this full volume (due to the above backup logic based on parent folders), it will still choose this full volume as the destination and then throw an error that there isn't enough space on the destination volume.
    • The workaround is obvious, move files off the full volume to a less full volume and then refresh both the backup volumes so AnyBackup will be aware of the changes.
    • I'm leaning towards a solution that involves taking the parent folder and moving it to a different volume that has sufficient space and then copying the new content there too (obviously after performing a check that the new destination drive has enough space for the parent folder size + the new content size)
  • For some reason when running a new backup, AnyBackup will often leave a few old files (that is, files that are no longer found on your content drives -- meaning they've been deleted / renamed / written to) -- this normally has no negative repercussions, but I'll figure out what's causing this eventually. 
  • If you have multiple network drives mounted to the same share but at different levels (i.e. X: is mounted to \\server\share\dir1 and Z: is mounted to \\server\share\dir2) AnyBackup has no way of differentiating between the two as they'll have the same volume name and volume serial number, so it will refuse to add X when Z is already added in the above example. There are no plans to change this, my suggestion is to create separate shares so that, at the very least, the volume name will change between the two.
  • Some people are having issues launching the exe packaged version of AnyBackup, I'm not sure what's causing the issue, I've been using Cava Packager to create the exe's + installers and it runs perfectly on my test machines. I'll put up an archive of the raw perl later for those that have issues -- the downside to using the raw perl is that you'll need to have a valid perl install with all the packages I use.
  • AnyBackup will create folders on backup drives even if there are no valid files inside it -- so basically any folders present on the content drives will make it to one of the backup volumes, even if they have no valid file types, I actually prefer this, but I may add an option to toggle the behavior later.
Enough talk, pictures now!

Without further adieu, I give you the download information.

AnyBackup Beta 1 -- Win32 Packaged EXE 
AnyBackup Beta 1 -- Perl Source 
(Please note, when using the Perl Source above, you'll need to install several additional perl packages: Win32::API, Win32::DriveInfo, Cava::Packager -- this needs to be done via the Cava Packager program, and finally wxPerl -- this can take a while to install!)

Also note,  I have not had a chance to add the GPL license to the above source, but please note that ALL code posted here is released under the GPL license! The GPL license can be viewed  here for those that are interested!

No comments:

Post a Comment