storage/lvm: fix resizing not persistent volumes

Even when volume is not persistent (like TemplateBasedVM:root), it
should be resizeable. Just the new size, similarly to the volume
content, will be reverted after qube shutdown.

Additionally, when VM is running, volume resize should affect _only_ its
temporary snapshot. This way resize can be properly reverted together
with actual volume changes (which include resize2fs call).

Fixes QubesOS/qubes-issues#3519
This commit is contained in:
Marek Marczykowski-Górecki 2018-02-07 00:19:07 +01:00
parent 9b5256f002
commit 7903dc53f9
No known key found for this signature in database
GPG Key ID: 063938BA42CFA724

View File

@ -225,6 +225,8 @@ class ThinVolume(qubes.storage.Volume):
@property
def size(self):
try:
if self.is_dirty():
return qubes.storage.lvm.size_cache[self._vid_snap]['size']
return qubes.storage.lvm.size_cache[self.vid]['size']
except KeyError:
return self._size
@ -430,11 +432,12 @@ class ThinVolume(qubes.storage.Volume):
if size == self.size:
return
cmd = ['extend', self.vid, str(size)]
qubes_lvm(cmd, self.log)
if self.is_dirty():
cmd = ['extend', self._vid_snap, str(size)]
qubes_lvm(cmd, self.log)
elif self.save_on_stop or not self.snap_on_start:
cmd = ['extend', self.vid, str(size)]
qubes_lvm(cmd, self.log)
reset_cache()
def _snapshot(self):