Skip to content

F.A.Q

Why not use ... ?

There are many software solutions for computer backup:

  • BackupPC: My favorite.

    But I wanted to make a backup of each device's backup on a USB drive (to store in another location) and I wanted to access it without untarring an archive. To do this, I used a personal script that mounts the USB drive, mounts the BackupPC pool with backuppcfs-v4.pl and performs rsync.

    However, when using backuppcfs-v4.pl, I encountered problems with permissions on Windows client backups (I had to modify the script to deactivate permission handling), and issues when copying large files (e.g., 260GB)

  • UrBackup: Another source of inspiration. UrBackup is able to use Btrfs to manage snapshots.

  • Borg: I love the concept, but I wanted the server to be able to decrypt the backup to archive it on a USB drive (along with all other backups).

    I also wanted a nice UI to list host backups in a centralized way.

  • There are many backup applications that work when launched from the client computer to a USB drive or over the network, but it's the responsibility of the client to set them up.

So I decided to write my own backup program. Because why not.

Why the name Woodstock backup?

Because finding a name for an application is the most complicated part of the development process. When I started to write this application, I was watching the first episode of season 4 of Legends of Tomorrow and I found the name fun 😃

The backups are stored as chunks in the pool directory. This also makes me think of a stock of wood.

Why use Node.JS?

Short: Because.

Long: I hesitated between Go, NodeJS, and others. I initially started writing the program in C++ for performance, but thread management made creating a proof of concept complicated. So I started to write it in NodeJS because it is easier to quickly write a proof of concept.

After some testing, I encountered performance problems with NodeJS. So I rewrote the core of the program in Rust. I wrote the client in Rust too. The only parts of the program that remain in JavaScript are the front-end, the controller, and the resolver.

Maybe someday I'll rewrite the program entirely in Rust.