From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id DD2AF92408 for ; Fri, 5 Apr 2024 15:06:39 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id BDA9913B70 for ; Fri, 5 Apr 2024 15:06:09 +0200 (CEST) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS for ; Fri, 5 Apr 2024 15:06:09 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id C0A86464CD for ; Fri, 5 Apr 2024 15:06:08 +0200 (CEST) From: Hannes Duerr To: pbs-devel@lists.proxmox.com Date: Fri, 5 Apr 2024 15:05:41 +0200 Message-Id: <20240405130543.259220-2-h.duerr@proxmox.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240405130543.259220-1-h.duerr@proxmox.com> References: <20240405130543.259220-1-h.duerr@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.020 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pbs-devel] [PATCH proxmox-backup v2 1/3] docs: centralise and update garbage collection description X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Apr 2024 13:06:39 -0000 The "backup client usage" chapter describes a grace period that is 24 hours and 5 minutes long, and unconnected to this a cut-off time is mentioned under "maintenance tasks", which leads to confusion. Therefore we summarise the entire description of garbage collection under "maintenance tasks" and link to it in the "backup client usage" chapter Signed-off-by: Hannes Duerr --- docs/backup-client.rst | 16 +++--------- docs/maintenance.rst | 57 ++++++++++++++++++++++++++++++------------ 2 files changed, 44 insertions(+), 29 deletions(-) diff --git a/docs/backup-client.rst b/docs/backup-client.rst index 00a1abbb..d015b844 100644 --- a/docs/backup-client.rst +++ b/docs/backup-client.rst @@ -735,25 +735,15 @@ command. It is recommended to carry out garbage collection on a regular basis. The garbage collection works in two phases. In the first phase, all data blocks that are still in use are marked. In the second phase, -unused data blocks are removed. +unused data blocks are removed. A more detailed description of the GC +can be found :ref:`here `. + .. note:: This command needs to read all existing backup index files and touches the complete chunk-store. This can take a long time depending on the number of chunks and the speed of the underlying disks. -.. note:: The garbage collection will only remove chunks that haven't been used - for at least one day (exactly 24h 5m). This grace period is necessary because - chunks in use are marked by touching the chunk which updates the ``atime`` - (access time) property. Filesystems are mounted with the ``relatime`` option - by default. This results in a better performance by only updating the - ``atime`` property if the last access has been at least 24 hours ago. The - downside is that touching a chunk within these 24 hours will not always - update its ``atime`` property. - - Chunks in the grace period will be logged at the end of the garbage - collection task as *Pending removals*. - .. code-block:: console # proxmox-backup-client garbage-collect diff --git a/docs/maintenance.rst b/docs/maintenance.rst index 6dbb6941..e25c8f19 100644 --- a/docs/maintenance.rst +++ b/docs/maintenance.rst @@ -171,8 +171,8 @@ It's recommended to setup a schedule to ensure that unused space is cleaned up periodically. For most setups a weekly schedule provides a good interval to start. -GC Background -^^^^^^^^^^^^^ +Overview +^^^^^^^^ In `Proxmox Backup`_ Server, backup data is not saved directly, but rather as chunks that are referred to by the indexes of each backup snapshot. This @@ -187,26 +187,51 @@ references to the same chunks on every snapshot deletion. Moreover, locking the entire datastore is not feasible because new backups would be blocked until the deletion process was complete. -Therefore, Proxmox Backup Server uses a garbage collection (GC) process to +Therefore, Proxmox Backup Server uses a `tracing garbage collection +`_ algorithm to identify and remove the unused backup chunks that are no longer needed by any -snapshot in the datastore. The GC process is designed to efficiently reclaim +snapshot in the datastore. The GC algorithm is designed to efficiently reclaim the space occupied by these chunks with low impact on the performance of the datastore or interfering with other backups. -The garbage collection (GC) process is performed per datastore and is split -into two phases: +The GC is performed per datastore and is split into two phases: -- Phase one: Mark - All index files are read, and the access time of the referred chunk files is - updated. +- Phase one - Mark: + + Read all index files and update the ``atime`` (access time) of the relevant + chunk files. + +- Phase two - Sweep: + + Iterate over all chunks and check the ``atime`` of the files. If + the ``atime`` is older than the cut-off time, the chunk was neither + referenced in a backup index nor is it part of a running backup that + does not yet have an index to search. As such, safely remove the chunk. + + +Cut-off Time +^^^^^^^^^^^^ + +The GC only clears the chunks that were last accessed before the +cut-off time. The cut-off time is determined by whichever is earlier: + +- 24 hours and 5 minutes before the start of the garbage collection + due to the mounting of the data storage with ``relatime``, or + +- the start time of the oldest active backup job that has been running + for longer than 24 hours and 5 minutes at the beginning of the + garbage collection. This is necessary because the newly created + backup could refer to blocks, but the GC would not notice this as + there is no index of the backup that could be searched. + +Chunks accessed after the cut-off time are marked as *Pending removals* +by the GC as it cannot be certain whether they are still needed. + +.. Note:: Mounting a volume with ``relatime`` means that the ``atime`` + of the chunk files is not updated every time, but only when the + data has changed or the ``atime`` was before a certain time, + which is 24 hours by default. -- Phase two: Sweep - The task iterates over all chunks, checks their file access time, and if it - is older than the cutoff time (i.e., the time when GC started, plus some - headroom for safety and Linux file system behavior), the task knows that the - chunk was neither referred to in any backup index nor part of any currently - running backup that has no index to scan for. As such, the chunk can be - safely deleted. Manually Starting GC ^^^^^^^^^^^^^^^^^^^^ -- 2.39.2