Giter Club home page Giter Club logo

frost's Introduction

Frost

A backup program that does deduplication, compression, encryption. It's based on the ideas of Syncany, but reimplemented in C++, using state of art compression (BSC library), no dependency on anything except libcrypto. It provides a console mode that has been tested on both Linux and MacOSX. It allows saving backups to a remote server that's considered hostile, with no modification to the remote server software required.

Because of deduplication, space saving is considerable between backup and in a backup itself. Then even more data is preserved with compression (using either zLib or BSC library), and compressed data is encrypted in local files (or remote files if you mounted then beforehand).

More info, documentation and encryption algorithm description here. Blog post describing the features here

With version 2 and the Fuse implementation, it shows an interface on the filesystem that is equivalent to Time Machine (tm) by Apple, on any (decent) Posix system. You can browse by date and see the captured read only the file hierarchy from the backup. It's feature equivalent, yet more efficient thanks to deduplication (so if you change 10 bytes on a 1GB file, with Time Machine, the complete new file is saved, with Frost, only the change) and provides compression and encryption.

frost's People

Contributors

x-ryl669 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

frost's Issues

Installation instructions

Hi,

I would like to try this backup program, but I don't know how to compile it.

When I run make it outputs:

make: *** No rule to make target `ClassPath/src/Utils/Dump.cpp', needed by `build/./ClassPath/Externals/ebsc/EBSC.o'.  Stop.

Can you please somekind of installation instructions.
The best if you will also provide somekind of test cases.

Regards

Dedupe appears to not work as expected?

I might be missing something, but Frost appears to not use a rolling hash.

I setup the following test. I'm using macOS 10.12 and Frost 'Current version: 2 build 568.'

  • Downloaded 'The Raven' UTF8 text from Project Gutenberg.
  • Put this single file in a folder named test
  • Ran Frost to backup the file to a new local folder
    Frost --backup ~/Desktop/test --remote ~/Desktop/test2

This resulted in the following chunk list (according to --dump)

  Chunk 0 with UID: 1 and offset 0
  Chunk 1 with UID: 2 and offset 6182
  Chunk 2 with UID: 3 and offset 10932
  Chunk 3 with UID: 4 and offset 17940
  Chunk 4 with UID: 5 and offset 25022
  Chunk 5 with UID: 6 and offset 27012
  Chunk 6 with UID: 7 and offset 28985
  Chunk 7 with UID: 8 and offset 33570
  Chunk 8 with UID: 9 and offset 36464
  Chunk 9 with UID: 10 and offset 39457
  Chunk 10 with UID: 11 and offset 44362
  Chunk 11 with UID: 12 and offset 46341
  Chunk 12 with UID: 13 and offset 48572
  Chunk 13 with UID: 14 and offset 51622
  Chunk 14 with UID: 15 and offset 54318
  Chunk 15 with UID: 16 and offset 60003
  Chunk 16 with UID: 17 and offset 66212
  • I then modified the file by inserting 'hello world' immediately after the UTF8 BOM (offset 3), and reran Frost.

Instead of creating 1 or 2 new chunks. Frost created new chunks for the whole file again.

Notice the offsets are completely different. I expected the first few to be different, but then they should have normalized to 11 bytes different than the original and the chunk UIDs of the original should have been reused.

Frost also says both revisions are basically the same size instead of rev2 being smaller:

Revision 2 happened on Sun, 05 Nov 2017 23:43:26 GMT, linked 1 files and 1 directories, cumulative size 64.8KB (backup is 25.8KB, saved 61%)
...
Revision 1 happened on Sun, 05 Nov 2017 23:34:55 GMT, linked 1 files and 1 directories, cumulative size 64.8KB (backup is 25.7KB, saved 61%)

As I said I might be missing something interpreting the dump output, so could you explain what's going on for me?

  Chunk 0 with UID: 18 and offset 0
  Chunk 1 with UID: 19 and offset 3015
  Chunk 2 with UID: 20 and offset 5133
  Chunk 3 with UID: 21 and offset 7616
  Chunk 4 with UID: 22 and offset 10086
  Chunk 5 with UID: 23 and offset 16141
  Chunk 6 with UID: 24 and offset 18143
  Chunk 7 with UID: 25 and offset 22442
  Chunk 8 with UID: 26 and offset 24875
  Chunk 9 with UID: 27 and offset 27383
  Chunk 10 with UID: 28 and offset 30116
  Chunk 11 with UID: 29 and offset 36142
  Chunk 12 with UID: 30 and offset 38412
  Chunk 13 with UID: 31 and offset 40672
  Chunk 14 with UID: 32 and offset 45051
  Chunk 15 with UID: 33 and offset 49120
  Chunk 16 with UID: 34 and offset 51485
  Chunk 17 with UID: 35 and offset 55326
  Chunk 18 with UID: 36 and offset 59357
  Chunk 19 with UID: 37 and offset 63352
  Chunk 20 with UID: 38 and offset 66506

Thanks

Delete, access permissions and restoring issue

Few issues I found so far:

  1. For some reason it haven't restored the file:
$ ./Frost --restore ./ex/ last  --remote ./test22/  --index index_path/ --keyid 12323
Password:
Restore: ./ex/ [1/10]                                                     
Restore: ./ex/Frost 97%:70.7KB/s (rem: 662.0ms) [2/10]            Can't restore the backup: Can not decompress data from multichunk: 02AFAC197B6A61287B434483E8DACF723D371432DA0E28969E569CE8C3F234A6.#
  1. It's not restoing the (chmod) access permissions.

  2. For some cases it's not restoring the filesystem as it was, for example I had added files in rev. 1, then I've deleted one file in rev. 2, then I've added another file in rev 3. When I'm restoring the rev. 2 it restores with deleted file.

Hope that can help to improve software.

Feature request: consider using a keyed MAC instead of the plain hash

According to documentation Frost is using "MAC then Encrypt" scheme. But plain SHA256 is used as a MAC. Better use proper MAC, like HMAC-SHA256 keyed with a separate key derived from the master key. This will avoid leaking hashes of unencrypted data to the adversary, which could compromise data confidentiality.

borgbackup missing on your comparison list

Hi,

borgbackup developer here (borg is a fork of attic, with lots of fixes and some new features).

Just found your stuff, looks like we share some common goals / opinions about backup software, so it might be interesting to add borgbackup to your comparison list of backup tools.

If you want to have a look, easiest way is to use our binary build for testing.

https://github.com/borgbackup/borg/releases

Cheers, Thomas

Missing Timeout.hpp

ClassPath/include/File/File.hpp needs ClassPath/include/Time/Timeout.hpp, which is absent, so can not compile.

Bug: spaces in backup dir name

./Frost --backup dir\ name --compression bsc --index index --remote remote --multichunk 10M

error: Bad argument for backup, the --backup parameter is not a folder

Bug: multichunk size

I have found a bug:
./Frost --backup dir --compression bsc --index index --remote remote

Compressing multichunk *** Error in `./Frost': munmap_chunk(): invalid pointer: 0x00000000040e23c0 ***
======= Backtrace: =========
/usr/lib/libc.so.6(+0x7198e)[0x7f2c499c698e]
/usr/lib/libc.so.6(+0x76dee)[0x7f2c499cbdee]
./Frost[0x4403ac]
./Frost[0x41a435]
./Frost[0x41c731]
./Frost[0x41ccfb]
./Frost[0x495218]
./Frost[0x4320c0]
./Frost[0x46ae6b]
./Frost[0x499691]
./Frost[0x494498]
./Frost[0x494964]
./Frost[0x4714d8]
./Frost[0x48408b]
./Frost[0x486364]
/usr/lib/libc.so.6(__libc_start_main+0xf0)[0x7f2c49975800]
./Frost[0x405d99]
======= Memory map: ========
00400000-0054f000 r-xp 00000000 08:11 9569354 /home/trung/data/tmp/Frost
0074e000-00751000 rw-p 0014e000 08:11 9569354 /home/trung/data/tmp/Frost
00751000-00755000 rw-p 00000000 00:00 0
00c37000-0608e000 rw-p 00000000 00:00 0 [heap]
7f2c46f97000-7f2c48898000 rw-p 00000000 00:00 0
7f2c48898000-7f2c488cd000 r-xp 00000000 08:01 3432553 /usr/lib/libpng16.so.16.16.0
7f2c488cd000-7f2c48acc000 ---p 00035000 08:01 3432553 /usr/lib/libpng16.so.16.16.0
7f2c48acc000-7f2c48acd000 r--p 00034000 08:01 3432553 /usr/lib/libpng16.so.16.16.0
7f2c48acd000-7f2c48ace000 rw-p 00035000 08:01 3432553 /usr/lib/libpng16.so.16.16.0
7f2c48ace000-7f2c48add000 r-xp 00000000 08:01 3414129 /usr/lib/libbz2.so.1.0.6
7f2c48add000-7f2c48cdc000 ---p 0000f000 08:01 3414129 /usr/lib/libbz2.so.1.0.6
7f2c48cdc000-7f2c48cde000 rw-p 0000e000 08:01 3414129 /usr/lib/libbz2.so.1.0.6
7f2c48cde000-7f2c48d4c000 r-xp 00000000 08:01 3418627 /usr/lib/libpcre.so.1.2.4
7f2c48d4c000-7f2c48f4b000 ---p 0006e000 08:01 3418627 /usr/lib/libpcre.so.1.2.4
7f2c48f4b000-7f2c48f4c000 r--p 0006d000 08:01 3418627 /usr/lib/libpcre.so.1.2.4
7f2c48f4c000-7f2c48f4d000 rw-p 0006e000 08:01 3418627 /usr/lib/libpcre.so.1.2.4
7f2c48f4d000-7f2c48f62000 r-xp 00000000 08:01 3414137 /usr/lib/libz.so.1.2.8
7f2c48f62000-7f2c49161000 ---p 00015000 08:01 3414137 /usr/lib/libz.so.1.2.8
7f2c49161000-7f2c49162000 r--p 00014000 08:01 3414137 /usr/lib/libz.so.1.2.8
7f2c49162000-7f2c49163000 rw-p 00015000 08:01 3414137 /usr/lib/libz.so.1.2.8
7f2c49163000-7f2c4917f000 r-xp 00000000 08:01 3432568 /usr/lib/libgraphite2.so.3.0.1
7f2c4917f000-7f2c4937e000 ---p 0001c000 08:01 3432568 /usr/lib/libgraphite2.so.3.0.1
7f2c4937e000-7f2c49380000 r--p 0001b000 08:01 3432568 /usr/lib/libgraphite2.so.3.0.1
7f2c49380000-7f2c49381000 rw-p 0001d000 08:01 3432568 /usr/lib/libgraphite2.so.3.0.1
7f2c49381000-7f2c4943d000 r-xp 00000000 08:01 3410372 /usr/lib/libfreetype.so.6.11.4
7f2c4943d000-7f2c4963d000 ---p 000bc000 08:01 3410372 /usr/lib/libfreetype.so.6.11.4
7f2c4963d000-7f2c49643000 r--p 000bc000 08:01 3410372 /usr/lib/libfreetype.so.6.11.4
.......................

I can post the complete trace if you want, while, e.g., --multichunk 10M works.

Bug: spaces in backup dir name

I still get the error
./Frost --backup /path/to/dir\ name --compression bsc --index index --remote remote --multichunk 10M

error: Bad argument for backup, the --backup parameter is not a folder

Frost 579 fails to create a new backup

Trying to setup a new backup:

$ ls -l ~/Desktop/test
total 136
-rw-r--r--  1 brian  501  66383 Dec  8 14:41 raven.txt
$ ls -l ~/Desktop/test2
ls: /Users/brian/Desktop/test2: No such file or directory
$ ./build/Frost -vv --backup ~/Desktop/test --remote ~/Desktop/test2
error: Bad argument for backup, index path does not exists

Frost (C) Copyright 2017 - Cyril RUSSO (This software is BSD licensed) 
Frost is a tool used to efficiently backup and restore files to/from a remote
place with no control other the remote server software.
No warranty of any kind is provided for the use of this software.
Current version: 3 build 579. 
...

Key store is empty:

$ ls ~/.frost/

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.