From 883a7eefb2d0301cd0e178ccd2da8480b2e1ac95 Mon Sep 17 00:00:00 2001 From: enkore Date: Wed, 15 Mar 2017 17:08:07 +0100 Subject: [PATCH] Archive: allocate zeros when needed (#2308) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fixes huge memory usage of mount (8 MiB × number of archives) --- src/borg/archive.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/borg/archive.py b/src/borg/archive.py index 7752f5164..216459e2e 100644 --- a/src/borg/archive.py +++ b/src/borg/archive.py @@ -325,7 +325,7 @@ class Archive: if info is None: raise self.DoesNotExist(name) self.load(info.id) - self.zeros = b'\0' * (1 << chunker_params[1]) + self.zeros = None def _load_meta(self, id): _, data = self.key.decrypt(id, self.repository.get(id)) @@ -578,6 +578,8 @@ Utilization of max. archive size: {csize_max:.0%} # Extract chunks, since the item which had the chunks was not extracted with backup_io('open'): fd = open(path, 'wb') + if sparse and self.zeros is None: + self.zeros = b'\0' * (1 << self.chunker_params[1]) with fd: ids = [c.id for c in item.chunks] for _, data in self.pipeline.fetch_many(ids, is_preloaded=True):