浏览代码

Archive: allocate zeros when needed (#2308)

fixes huge memory usage of mount (8 MiB × number of archives)
enkore 8 年之前
父节点
当前提交
883a7eefb2
共有 1 个文件被更改,包括 3 次插入1 次删除
  1. 3 1
      src/borg/archive.py

+ 3 - 1
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):