Monday, July 25, 2011

Announcing ShadowSpawn

One of the great things about working at Relevance is having every Friday to work on non-client work. I've been spending mine on various open-source projects, like Artifact and a core.logic port of The Reasoned Schemer. But I haven't forgotten my Windows roots entirely. One of the things I've been trying to do is to continue to improve hobocopy, the open-source backup tool I wrote that can copy in-use files. I initially released it about five years ago, and in that time it has been downloaded something like 100,000 times. In the half year since I re-launched it on github, it has been downloaded around 15,000 times. So clearly, people are using it, and this is a reasonably successful open source project. 

But as the project has picked up steam again I've noticed that the things people want tend to fall into two categories: 1) fixes for mysterious issues with the Volume Shadow Service that I can't do much about, and 2) feature requests around the copying part of hobocopy. I'm sort of stuck on #1, but on #2 I could actually roll up my sleeves and implement copying of streams, or correctly enabling the SE_BACKUP privilege, or any one of the myriad other things that go into correctly copying a file from point A to point B; it's a surprising complex problem. 

Or I could cheat. 

For a long time now, I've been contemplating an alternate approach. Rather than have a piece of software that would make a shadow copy of a volume and then make copies out of it, I thought it would be handy to have a piece of software that would simply make a shadow copy, temporarily make it available on some drive letter, and then run an arbitrary command [1].  If that arbitrary command happens to be Robocopy, then you've got all the advanced copying ability you could ever want. But you could just as easily use notepad if all you wanted to do was look at a file that was locked. 

Thus was born ShadowSpawn. I worked with the ever-excellent Kim Wolk, and this last Friday we got everything to the point where it works reasonably well. We've slapped a 0.1.0 version label on it and made it available for download. I'm not using it in my nightly backups at home yet, the way I do with hobocopy (I plan to make the switch soon), so consider it to be beta: we expect issues, but it should generally work.

Here's a simple example of how to use it: 

shadowspawn C:\some\directory Q: robocopy Q: D:\some\other\directory

That would snapshot your C: drive, mount the snapshotted version of C:\some\directory at Q:, run the robocopy command against it, and remove the Q: mapping when robocopy finished. More details are available at the website.

Anyway, we hope you find it useful. Feel free to ask for help on the mailing list, or to make a feature request or bug report on the issue tracker.

[1] Indeed, a tool called VShadow lets you do exactly that, albeit in a slightly different way. But I had additional reasons for wanting to take on this project.