mirror of
https://github.com/borgbackup/borg.git
synced 2024-12-22 07:43:06 +00:00
Merge pull request #4544 from ThomasWaldmann/improve-compact
small borg compact improvements, fixes #4522
This commit is contained in:
commit
fe2e9d77e2
3 changed files with 14 additions and 5 deletions
|
@ -7,9 +7,7 @@ Examples
|
||||||
# compact segments and free repo disk space
|
# compact segments and free repo disk space
|
||||||
$ borg compact /path/to/repo
|
$ borg compact /path/to/repo
|
||||||
|
|
||||||
# same as above plus clean up 17byte commit-only segments,
|
# same as above plus clean up 17byte commit-only segments
|
||||||
# use this one time after upgrading borg (server) to 1.2+
|
|
||||||
# to clean up the tiny segments files created by borg 1.1:
|
|
||||||
$ borg compact --cleanup-commits /path/to/repo
|
$ borg compact --cleanup-commits /path/to/repo
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2777,12 +2777,20 @@ def define_archive_filters_group(subparser, *, sort_by=True, first_last=True):
|
||||||
This command frees repository space by compacting segments.
|
This command frees repository space by compacting segments.
|
||||||
|
|
||||||
Use this regularly to avoid running out of space - you do not need to use this
|
Use this regularly to avoid running out of space - you do not need to use this
|
||||||
after each borg command though.
|
after each borg command though. It is especially useful after deleting archives,
|
||||||
|
because only compaction will really free repository space.
|
||||||
|
|
||||||
borg compact does not need a key, so it is possible to invoke it from the
|
borg compact does not need a key, so it is possible to invoke it from the
|
||||||
client or also from the server.
|
client or also from the server.
|
||||||
|
|
||||||
Depending on the amount of segments that need compaction, it may take a while.
|
Depending on the amount of segments that need compaction, it may take a while,
|
||||||
|
so consider using the ``--progress`` option.
|
||||||
|
|
||||||
|
When using ``--verbose``, borg will output an estimate of the freed space.
|
||||||
|
|
||||||
|
After upgrading borg (server) to 1.2+, you can use ``borg compact --cleanup-commits``
|
||||||
|
to clean up the numerous 17byte commit-only segments that borg 1.1 did not clean up
|
||||||
|
due to a bug. It is enough to do that once per repository.
|
||||||
|
|
||||||
See :ref:`separate_compaction` in Additional Notes for more details.
|
See :ref:`separate_compaction` in Additional Notes for more details.
|
||||||
""")
|
""")
|
||||||
|
|
|
@ -695,6 +695,7 @@ def compact_segments(self):
|
||||||
if not self.compact:
|
if not self.compact:
|
||||||
logger.debug('nothing to do: compact empty')
|
logger.debug('nothing to do: compact empty')
|
||||||
return
|
return
|
||||||
|
freed_space = 0
|
||||||
index_transaction_id = self.get_index_transaction_id()
|
index_transaction_id = self.get_index_transaction_id()
|
||||||
segments = self.segments
|
segments = self.segments
|
||||||
unused = [] # list of segments, that are not used anymore
|
unused = [] # list of segments, that are not used anymore
|
||||||
|
@ -734,6 +735,7 @@ def complete_xfer(intermediate=True):
|
||||||
segment, freeable_ratio * 100.0, freeable_space)
|
segment, freeable_ratio * 100.0, freeable_space)
|
||||||
pi.show()
|
pi.show()
|
||||||
continue
|
continue
|
||||||
|
freed_space += freeable_space # this is what we THINK we can free
|
||||||
segments.setdefault(segment, 0)
|
segments.setdefault(segment, 0)
|
||||||
logger.debug('compacting segment %d with usage count %d (freeable: %2.2f%% [%d bytes])',
|
logger.debug('compacting segment %d with usage count %d (freeable: %2.2f%% [%d bytes])',
|
||||||
segment, segments[segment], freeable_ratio * 100.0, freeable_space)
|
segment, segments[segment], freeable_ratio * 100.0, freeable_space)
|
||||||
|
@ -814,6 +816,7 @@ def complete_xfer(intermediate=True):
|
||||||
pi.show()
|
pi.show()
|
||||||
pi.finish()
|
pi.finish()
|
||||||
complete_xfer(intermediate=False)
|
complete_xfer(intermediate=False)
|
||||||
|
logger.info('compaction freed about %s repository space.', format_file_size(freed_space))
|
||||||
logger.debug('compaction completed.')
|
logger.debug('compaction completed.')
|
||||||
|
|
||||||
def replay_segments(self, index_transaction_id, segments_transaction_id):
|
def replay_segments(self, index_transaction_id, segments_transaction_id):
|
||||||
|
|
Loading…
Reference in a new issue