1
0
Fork 0
mirror of https://github.com/borgbackup/borg.git synced 2025-03-10 22:24:13 +00:00

Merge branch 'master' into borg2

This commit is contained in:
Thomas Waldmann 2022-07-02 23:28:39 +02:00
commit c7ed985ffd
6 changed files with 66 additions and 16 deletions

View file

@ -1159,6 +1159,44 @@ It may be useful to set ``BORG_RELOCATED_REPO_ACCESS_IS_OK=yes`` to avoid the
prompts when renaming multiple repositories or in a non-interactive context prompts when renaming multiple repositories or in a non-interactive context
such as a script. See :doc:`deployment` for an example. such as a script. See :doc:`deployment` for an example.
The repository quota size is reached, what can I do?
----------------------------------------------------
The simplest solution is to increase or disable the quota and resume the backup:
::
borg config /path/to/repo storage_quota 0
If you are bound to the quota, you have to free repository space. The first to
try is running :ref:`borg_compact` to free unused backup space (see also
:ref:`separate_compaction`):
::
borg compact /path/to/repo
If your repository is already compacted, run :ref:`borg_prune` or
:ref:`borg_delete` to delete archives that you do not need anymore, and then run
``borg compact`` again.
My backup disk is full, what can I do?
--------------------------------------
Borg cannot work if you really have zero free space on the backup disk, so the
first thing you must do is deleting some files to regain free disk space. See
:ref:`about_free_space` for further details.
Some Borg commands that do not change the repository might work under disk-full
conditions, but generally this should be avoided. If your backup disk is already
full when Borg starts a write command like `borg create`, it will abort
immediately and the repository will stay as-is.
If you run a backup that stops due to a disk running full, Borg will roll back,
delete the new new segment file and thus freeing disk space automatically. There
may be a checkpoint archive left that has been saved before the disk got full.
You can keep it to speed up the next backup or delete it to get back more disk
space.
Miscellaneous Miscellaneous
############# #############

View file

@ -90,12 +90,14 @@ progress_percent
can have this property set to *true*. can have this property set to *true*.
message message
A formatted progress message, this will include the percentage and perhaps other information A formatted progress message, this will include the percentage and perhaps other information
(absent for finished == true)
current current
Current value (always less-or-equal to *total*) Current value (always less-or-equal to *total*, absent for finished == true)
info info
Array that describes the current item, may be *null*, contents depend on *msgid* Array that describes the current item, may be *null*, contents depend on *msgid*
(absent for finished == true)
total total
Total value Total value (absent for finished == true)
time time
Unix timestamp (float) Unix timestamp (float)

View file

@ -26,6 +26,8 @@ repositories contain data blocks and a manifest tracking which blocks are in eac
archive. If some data hasn't changed from one backup to another, Borg can simply archive. If some data hasn't changed from one backup to another, Borg can simply
reference an already uploaded data chunk (deduplication). reference an already uploaded data chunk (deduplication).
.. _about_free_space:
Important note about free space Important note about free space
------------------------------- -------------------------------

View file

@ -664,11 +664,11 @@ hashindex_compact(HashIndex *index)
while(idx < index->num_buckets) { while(idx < index->num_buckets) {
/* Phase 1: Find some empty slots */ /* Phase 1: Find some empty slots */
start_idx = idx; start_idx = idx;
while((BUCKET_IS_EMPTY(index, idx) || BUCKET_IS_DELETED(index, idx)) && idx < index->num_buckets) { while((idx < index->num_buckets) && (BUCKET_IS_EMPTY(index, idx) || BUCKET_IS_DELETED(index, idx))) {
idx++; idx++;
} }
/* everything from start_idx to idx is empty or deleted */ /* everything from start_idx to idx-1 (inclusive) is empty or deleted */
count = empty_slot_count = idx - start_idx; count = empty_slot_count = idx - start_idx;
begin_used_idx = idx; begin_used_idx = idx;
@ -682,7 +682,7 @@ hashindex_compact(HashIndex *index)
/* Phase 2: Find some non-empty/non-deleted slots we can move to the compact tail */ /* Phase 2: Find some non-empty/non-deleted slots we can move to the compact tail */
while(!(BUCKET_IS_EMPTY(index, idx) || BUCKET_IS_DELETED(index, idx)) && empty_slot_count && idx < index->num_buckets) { while(empty_slot_count && (idx < index->num_buckets) && !(BUCKET_IS_EMPTY(index, idx) || BUCKET_IS_DELETED(index, idx))) {
idx++; idx++;
empty_slot_count--; empty_slot_count--;
} }

View file

@ -3147,10 +3147,13 @@ class Archiver:
# borg mount # borg mount
mount_epilog = process_epilog(""" mount_epilog = process_epilog("""
This command mounts an archive as a FUSE filesystem. This can be useful for This command mounts an archive as a FUSE filesystem. This can be useful
browsing an archive or restoring individual files. Unless the ``--foreground`` for browsing an archive or restoring individual files. When restoring,
option is given the command will run in the background until the filesystem take into account that the current FUSE implementation does not support
is ``umounted``. special fs flags and ACLs.
Unless the ``--foreground`` option is given the command will run in the
background until the filesystem is ``umounted``.
The command ``borgfs`` provides a wrapper for ``borg mount``. This can also be The command ``borgfs`` provides a wrapper for ``borg mount``. This can also be
used in fstab entries: used in fstab entries:

View file

@ -239,13 +239,18 @@ class SaveFile:
safe_unlink(self.tmp_fname) # with-body has failed, clean up tmp file safe_unlink(self.tmp_fname) # with-body has failed, clean up tmp file
return # continue processing the exception normally return # continue processing the exception normally
# tempfile.mkstemp always uses owner-only file permissions for the temp file, try:
# but as we'll rename it to the non-temp permanent file now, we need to respect # tempfile.mkstemp always uses owner-only file permissions for the temp file,
# the umask and change the file mode to what a normally created file would have. # but as we'll rename it to the non-temp permanent file now, we need to respect
# thanks to the crappy os.umask api, we can't query the umask without setting it. :-( # the umask and change the file mode to what a normally created file would have.
umask = os.umask(UMASK_DEFAULT) # thanks to the crappy os.umask api, we can't query the umask without setting it. :-(
os.umask(umask) umask = os.umask(UMASK_DEFAULT)
os.chmod(self.tmp_fname, mode=0o666 & ~ umask) os.umask(umask)
os.chmod(self.tmp_fname, mode=0o666 & ~ umask)
except OSError:
# chmod might fail if the fs does not support it.
# this is not harmful, the file will still have permissions for the owner.
pass
try: try:
os.replace(self.tmp_fname, self.path) # POSIX: atomic rename os.replace(self.tmp_fname, self.path) # POSIX: atomic rename