Harman Patil (Editor)

Duplicati

Updated on
Edit
Like
Comment
Share on FacebookTweet on TwitterShare on LinkedInShare on Reddit
Original author(s)
  
Kenneth Skovhede

Development status
  
Active

Developer(s)
  
Kenneth Skovhede

Duplicati

Initial release
  
June 1, 2008; 8 years ago (2008-06-01)

Stable release
  
1.3.4 / February 2, 2013; 4 years ago (2013-02-02)

Preview release
  
2.0.1.17 / September 6, 2016; 5 months ago (2016-09-06)

Duplicati is a backup client that securely stores encrypted, incremental, compressed remote backups of local files on cloud storage services and remote file servers. Duplicati supports not only various online backup services like OneDrive, Amazon S3, Rackspace Cloud Files, Tahoe LAFS, Google Docs but also any servers that support SSH/SFTP, WebDAV, or FTP.

Contents

Duplicati uses standard components such as rdiff, zip, AESCrypt and GnuPG. This allows to recover backup files even if Duplicati is not available. Released under the terms of the GNU Lesser General Public License (LGPL), Duplicati is free software.

Technology

Duplicati is written mostly in C# and implemented completely within the CLR, which enables it to be cross-platform. It runs well on 32bit and 64bit versions on Windows, Mac OS X and Linux using either Microsoft.NET or Mono.

Duplicati has both a graphical user interface with a wizard style interface as well as a commandline version for use in headless environments. Both interfaces use the same core and thus have the same set of features and capabilities. The commandline version is similar to the Duplicity interface.

Duplicati has some unique features that are usually only found in commercial systems, such as remote verification of backup files, disk snapshots, and backup of open files. The disk snapshots are performed with VSS on Windows and LVM on Linux.

History

The original Duplicati project was started in June 2008 and intended to produce a graphical user interface for the Duplicity program. This included a port of the Duplicity code for use on Windows, but was dropped in September 2008 where work on a clean re-implementation began. This re-implementation includes all the sub-programs found in Duplicity, such as rdiff, ftp, etc. This initial version of Duplicati saw an initial release in June 2009.

Implementation

The Duplicati GUI and commandline interface both call a common component called Main which serves as a binding point for all the operations supported. Currently the encryption, compression and storage component are considered subcomponent and are loaded at runtime, making it possible for a third party developer to inject a subcomponent into Duplicati without access to the source, or any need to modify Duplicati itself. The license type is also flexible enough to allow redistribution of Duplicati with a closed source storage provider. Duplicati is designed to be as independent of the provider as possible, which means that any storage medium that supports the common commands GET/PUT/LIST/DELETE can work with Duplicati.

The Duplicity model, on which Duplicati is based, relies heavily on components in the system, such as librdiff, TcFTP and others. Since Duplicati is intended to be cross platform, and it is unlikely that all those components are available on all platforms, Duplicati re-implements the components instead. Most notably, Duplicati features an rdiff and AESCrypt implementation that work on any system that supports a CLR runtime.

Limitations

The Duplicati GUI is intended to be used on a single machine with a display attached. Because of this, it is not currently possible to use Duplicati as a Windows service or Linux Daemon. A workaround is possible by using the commandline version, but that complicates monitoring of backup status. Work to solve this is in progress.

Since Duplicati produces incremental backups, a corrupt or missing volume can render an entire backup chain useless.

Duplicati only stores the file modification date, not metadata like permissions and attributes. This feature is planned for version 2.0.

References

Duplicati Wikipedia