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 6338b936e2
.
Fixes QubesOS/qubes-issues#4791
This commit is contained in:
parent
10d4381c14
commit
93608658a9
@ -1005,8 +1005,18 @@ class BackupRestore(object):
|
|||||||
else:
|
else:
|
||||||
backup_stdin = open(self.backup_location, 'rb')
|
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',
|
tar1_command = ['tar',
|
||||||
'-ixv',
|
'-ixv',
|
||||||
|
'--checkpoint=10000',
|
||||||
|
'--checkpoint-action=exec=' + checkpoint_command,
|
||||||
'--occurrence=1',
|
'--occurrence=1',
|
||||||
'-C', self.tmpdir] + filelist
|
'-C', self.tmpdir] + filelist
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user