Commit Graph

582 Commits

Author SHA1 Message Date
Thomas Waldmann ee80db4eb2 add commandline argument --sparse
default is to not create sparse files.

if you give --sparse, it will create a hole in the sparse output file when a all-zero chunk is extracted.
2015-04-17 22:28:40 +02:00
Thomas Waldmann a2bf2aea22 simple sparse file support, made chunk buffer size flexible
Implemented sparse file support to remove this blocker for people backing up lots of
huge sparse files (like VM images). Attic could not support this use case yet as it would
have restored all files to their fully expanded size, possibly running out of disk space if
the total expanded size would be bigger than the available space.

Please note that this is a very simple implementation of sparse file support - at backup time,
it does not do anything special (it just reads all these zero bytes, chunks, compresses and
encrypts them as usual). At restore time, it detects chunks that are completely filled with zeros
and does a seek on the output file rather than a normal data write, so it creates a hole in
a sparse file. The chunk size for these all-zero chunks is currently 10MiB, so it'll create holes
of multiples of that size (depends also a bit on fs block size, alignment, previously written data).

Special cases like sparse files starting and/or ending with a hole are supported.

Please note that it will currently always create sparse files at restore time if it detects all-zero
chunks.

Also improved:
I needed a constant for the max. chunk size, so I introduced CHUNK_MAX (see also
existing CHUNK_MIN) for the maximum chunk size (which is the same as the chunk
buffer size).

Attic still always uses 10MiB chunk buffer size now, but it could be changed now more easily.
2015-04-15 16:29:18 +02:00
Jonas Borgström bbc8886bfe Updated CHANGES
Closes #163.
2015-04-13 23:29:29 +02:00
Jonas Borgström 27012a50e5 Merge remote-tracking branch 'adept/patch-1' 2015-04-13 23:28:28 +02:00
Jonas Borgström 70af748363 Added Thomas Waldmann to AUTHORS and updated CHANGES 2015-04-13 23:12:30 +02:00
Jonas Borgström 8227e4788a Merge remote-tracking branch 'tw/fix_pipe' 2015-04-13 23:08:05 +02:00
Jonas Borgström 20026e58aa Fix incorrect behaviour with two character directory names.
Independetely found and fixed by both Thomas Waldemann and
Cam Hutchison. Closes #265 and #268.
2015-04-13 22:44:14 +02:00
Jonas Borgström 7198929bae cache: Warn user before accessing relocated repositories
This also closes #225
2015-04-13 22:42:32 +02:00
Jonas Borgström 78f9ad1fab Require approval before accessing previously unknown unencrypted repositories
Closes #271
2015-04-06 23:07:10 +02:00
Dmitry Astapov 6be2734b7e Do not create items_buffer and chunker unless we are creating new archive
Listing repositories with lots of archives on low-memory systems would cause attic to run out of memory due to items_buffer and chunker being created for each visited archive.

See https://github.com/jborg/attic/issues/163
2015-03-18 12:42:28 +00:00
Thomas Waldmann cbbe0fcc9b serve: use os.write(stdout_fd, ...), fixes #233
this way, serve() is more consistent with the other code, which always uses os.read/write (not sys.std*.buffer.read/write).

also: reduce code duplication a bit.
2015-03-14 19:45:01 +01:00
Jonas Borgström 4ab4ecc7af hashindex: Fix issue with file sizes larger than 2GB.
See: http://librelist.com/browser//attic/2015/1/6/does-attic-have-an-upper-data-size-limit/
2015-01-06 22:28:04 +01:00
Jonas Borgström df6324b725 Include missing pyx files in dist file.
Closes #168
2015-01-04 22:25:11 +01:00
Jonas Borgström 77bd65aa03 Merge pull request #165 from brodul/docs
Fix documentation 'snapshot' to 'checkpoint'
2015-01-03 23:14:13 +01:00
Jonas Borgström b5a9085717 Fix Python 3.2 compatibility issue with noatime open().
Closes #164.
2015-01-03 23:12:47 +01:00
Andraz Brodnik 6d64a1c76b Fix documentation 'snapshot' to 'checkpoint'
In the code the string `checkpoint` is appended.
./attic/archive.py:137
2014-12-25 13:23:30 +01:00
Jonas Borgström f342621dff Preparing release 2014-12-17 23:19:22 +01:00
Jonas Borgström add59e4ab3 Prepare for future payload format change 2014-12-17 21:55:33 +01:00
Jonas Borgström e9c27e8e6d Added missing changelog entry 2014-12-14 14:30:41 +01:00
Jonas Borgström 18641ae687 xattr: Fix issue with empty (0 bytes) xattr values.
Closes #106
2014-12-14 14:28:33 +01:00
Jonas Borgström 53f6738090 Merge pull request #111 from c4rlo/patch-1
fix typo in comment
2014-12-08 21:48:36 +01:00
Jonas Borgström 5d96434abd Merge pull request #113 from c4rlo/noatime
open files with O_NOATIME if possible
2014-12-08 21:48:04 +01:00
Jonas Borgström 7e15abd29c hashindex: Fix issue with indicies larger than 2GB 2014-11-22 14:41:24 +01:00
Jonas Borgström 5c699b30a7 Merge pull request #129 from kannes/master
fixing two typos
2014-11-20 21:29:29 +01:00
kannes aee2983c6e fixing two typos 2014-11-19 13:09:53 +01:00
Jonas Borgström ca177aba60 Merge pull request #126 from dfries/master
limit create file permissions
2014-11-12 20:01:43 +01:00
David Fries f22b62c1a4 limit create file permissions
Be safe by default, create files so that other users can't read them,
at least until the original permissions are set.
2014-10-31 20:02:12 -05:00
Jonas Borgström 678fdd1d42 Fix "Number of files" output for attic info.
Closes #124
2014-10-27 22:00:56 +01:00
Jonas Borgström 547fa0a590 Speed up initial repository access
Use os.listdir() instead of os.walk() to avoid unnecessary
stat() calls.

Closes #119
2014-10-10 21:01:55 +02:00
Jonas Borgström 7b9d129bcd Remove dead code 2014-10-09 20:43:58 +02:00
Jonas Borgström 5a69f58823 Introduce a separate exception for missing repository objects 2014-10-09 20:41:47 +02:00
Carlo Teubner f4804c07ca open files with O_NOATIME if possible 2014-09-12 22:22:08 +01:00
c4rlo ec73e45ae2 fix typo in comment 2014-09-07 13:54:18 +01:00
Jonas Borgström 21e03af56b Fix minor location parser bug.
Make sure the entire input is parsed.
2014-08-08 23:34:27 +02:00
Jonas Borgström 9f64e39d9f Reuse chunker buffer between files. 2014-08-03 15:04:41 +02:00
Jonas Borgström 193fb1fcd5 Added support for stripping leading path segments
closes #95
2014-08-02 22:15:21 +02:00
Jonas Borgström 8f4e0f7506 acl: Added workaround for old Linux systems
Really old Linux systems do not have extended_file_no_follow()
2014-08-01 15:50:18 +02:00
Jonas Borgström 0741aef880 Add MacPorts' path to the default openssl search path
Closes #101
2014-08-01 14:48:49 +02:00
Jonas Borgström 1b0e21b95a Fixed typo 2014-07-10 15:44:29 +02:00
Jonas Borgström 2f72b9f960 HashIndex: Switch to a non-mmap based implementation
This eliminates unnecessary IO on low memory systems
2014-07-10 15:32:29 +02:00
Jonas Borgström 4b2dae29d4 Fix incorrect detect of follow_symlinks support
This only affects system with Python 3.3+ and a really old libc
2014-07-01 21:28:07 +02:00
Jonas Borgström 7a950be929 Preparing release 2014-06-29 14:28:02 +02:00
Jonas Borgström 7ce3290fb2 docs: Added link to prebuilt Linux binaries. 2014-06-29 14:24:45 +02:00
Jonas Borgström 15065dbaa4 Fix sporadic "Resource temporarily unavailable" error
Issue reported on the mailing list while backing up to a remote
repository on OS X over a slow uplink.
2014-06-13 20:07:01 +02:00
Jonas Borgström 95162ce1f8 buzhash: One more test case
Test with more than 31 bytes to make sure our BARREL_SHIFT macro
works correctly.
2014-06-05 15:11:46 +02:00
Jonas Borgström df85e72d3c Fix file cache save bug 2014-06-03 23:10:52 +02:00
Jonas Borgström 243481f6da Fix test suite breakage 2014-06-03 22:00:34 +02:00
Jonas Borgström 80a2a4113f Revert "Reduce memory usage when backing up many small files"
The memory usage should be reduced a fair bit by #90 so this
might not be needed anymore. Or at least not enabled by default
2014-06-03 21:39:26 +02:00
Jonas Borgström 7f9fe03917 cache: Reduce file cache memory usage (#90)
The memory usage is reduced at the expence of extra msgpack
packing/unpacking. Hopefully this is a good tradeoff.

Ideally the entire cache should be replaced with a radix tree
but that will have to wait a bit.
2014-06-03 21:19:02 +02:00
Jonas Borgström 64cd6632a1 Avoid deadlock problems
Explicitly use write locks, instead of read locks (that are later
upgraded) unless we know we will never modify the repository
2014-05-31 15:39:51 +02:00