35 lines
1.3 KiB
Diff
35 lines
1.3 KiB
Diff
|
Subject: diskbackend: get a proper size of existing block device while cloning
|
||
|
From: Pavel Hrdina phrdina@redhat.com Tue Oct 3 16:59:13 2017 +0200
|
||
|
Date: Thu Oct 19 09:12:05 2017 +0200:
|
||
|
Git: 6e6f59e7abfd85b2a53554b7d091e553585e85c8
|
||
|
|
||
|
We cannot use os.statvfs() if the clone disk is a block device because
|
||
|
it gets stats about filesystem which in this case is "devtmpfs" mounted
|
||
|
as "/dev".
|
||
|
|
||
|
As a workaround we can seek to the end of the block device to get
|
||
|
the actual size.
|
||
|
|
||
|
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1450908
|
||
|
|
||
|
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
|
||
|
|
||
|
diff --git a/virtinst/diskbackend.py b/virtinst/diskbackend.py
|
||
|
index de745f4d..a08a23e5 100644
|
||
|
--- a/virtinst/diskbackend.py
|
||
|
+++ b/virtinst/diskbackend.py
|
||
|
@@ -387,8 +387,11 @@ class CloneStorageCreator(_StorageCreator):
|
||
|
def is_size_conflict(self):
|
||
|
ret = False
|
||
|
msg = None
|
||
|
- vfs = os.statvfs(os.path.dirname(self._path))
|
||
|
- avail = vfs[statvfs.F_FRSIZE] * vfs[statvfs.F_BAVAIL]
|
||
|
+ if self.get_dev_type() == "block":
|
||
|
+ avail = _stat_disk(self._path)[1]
|
||
|
+ else:
|
||
|
+ vfs = os.statvfs(os.path.dirname(self._path))
|
||
|
+ avail = vfs[statvfs.F_FRSIZE] * vfs[statvfs.F_BAVAIL]
|
||
|
need = long(self._size * 1024 * 1024 * 1024)
|
||
|
if need > avail:
|
||
|
if self._sparse:
|