[alpha] robust portable file backup tool in Rust
Latest commit 99affa2 Jan 9, 2017 @sourcefrog committed on GitHub Remove extended description from Cargo
Seems like common style is to have just one sentence.
Failed to load latest commit information.


Conserve: a robust backup program


Linux build status Windows build status crates.io Join the chat at https://gitter.im/sourcefrog/conserve

Conserve's guiding principles:

  • Safe: Conserve is written in Rust, a fast systems programming language with compile-time guarantees about types, memory safety, and concurrency. Conserve uses a conservative log-structured format.

  • Robust: If one file is corrupted in storage or due to a bug in Conserve, or if the backup is interrupted, you can still restore what was written. (Conserve doesn't need a large transaction to complete for data to be accessible.)

  • Careful: Backup data files are never touched or altered after they're written, unless you choose to purge them.

  • When you need help now: Restoring a subset of a large backup is fast.

  • Always making progress: Even if the backup process or its network connection is repeatedly killed, Conserve can quickly pick up where it left off and make forward progress.

  • Ready for today: The storage format is fast and reliable on on high-latency, limited-capability, unlimited-capacity, eventually-consistent cloud object storage. Conserve is tested on Windows, Linux (x86 and ARM), and OS X.

Quick start guide

Conserve storage is within an archive directory created by conserve init:

conserve init /backup/home.cons

conserve backup copies a source directory into a new version within the archive. Conserve copies files, directories, and (on Unix) symlinks. If the conserve backup command completes successfully (copying the whole source tree), the backup is considered complete.

conserve backup /backup/home.cons ~

conserve versions lists the versions in an archive, whether or not the backup is complete, the time at which the backup started, and the time taken to complete it. Each version is identified by a name starting with b.

$ conserve versions /backup/home.cons
b0000                      complete   2016-11-19T07:30:09+11:00     71s
b0001                      incomplete 2016-11-20T06:26:46+11:00
b0002                      incomplete 2016-11-20T06:30:45+11:00
b0003                      complete   2016-11-20T06:42:13+11:00    286s
b0004                      complete   2016-12-01T07:08:48+11:00     84s
b0005                      complete   2016-12-18T02:43:59+11:00      4s

conserve ls shows all the files in a particular version. Like all commands that read a band from an archive, it operates on the most recent by default, and you can specify a different version using -b. (You can also omit leading zeros from the backup version.)

$ conserve ls -b b0 /backup/home.cons | less

conserve restore copies a version back out of an archive.

$ conserve restore /backup/home.cons /tmp/trial-restore


To build Conserve you need Rust and a C compiler that can be used by Rust. Then run

cargo build

Binaries for some platforms are available from https://github.com/sourcefrog/conserve/releases.

More documentation


Conserve is still in a pre-1.0 alpha. It can be used to make and restore backups, but there are some important performance and functional limitations, which will be fixed before 1.0.

Prior to 1.0, data formats may change on each minor version number change (0.x): you should restore using the same version that you used to make the backup.

For a longer list see the issue tracker and milestones.

Windows Defender and Windows Search Indexing can slow the system down severely when Conserve is making a backup. I recommend you exclude the backup directory from both systems.

Licence and non-warranty

Copyright 2012-2017 Martin Pool, mbp@sourcefrog.net.

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.