Browse Source

backup: throttle backup extracting if there is not enough disk space

Instead of failing the restore process, pause data extracting, until
already extracted data gets processed.
This commit implements this for local tar extraction. Extracting data
received from a VM is handled in qfile-(dom0-)unpacker, which also has
similar feature, turned on in 6338b936e27359a06ba310114a65106fbb838a7d.

Fixes QubesOS/qubes-issues#4791
Marek Marczykowski-Górecki 3 years ago
parent
commit
93608658a9
1 changed files with 10 additions and 0 deletions
  1. 10 0
      qubesadmin/backup/restore.py

+ 10 - 0
qubesadmin/backup/restore.py

@@ -1005,8 +1005,18 @@ class BackupRestore(object):
         else:
             backup_stdin = open(self.backup_location, 'rb')
 
+            block_size = os.statvfs(self.tmpdir).f_frsize
+
+            # slow down the restore if there is too little space in the temp dir
+            checkpoint_command = \
+                'while [ $(stat -f --format=%a "{}") -lt {} ]; ' \
+                'do sleep 1; done' \
+                .format(self.tmpdir, 500 * 1024 * 1024 // block_size)
+
             tar1_command = ['tar',
                             '-ixv',
+                            '--checkpoint=10000',
+                            '--checkpoint-action=exec=' + checkpoint_command,
                             '--occurrence=1',
                             '-C', self.tmpdir] + filelist