[et-mgmt-tools] [PATCH] Provide a common block device size utility for Solaris & Linux
john.levon at sun.com
john.levon at sun.com
Fri Dec 5 13:37:42 UTC 2008
# HG changeset patch
# User john.levon at sun.com
# Date 1228484251 28800
# Node ID 89668fd908b8ee8dc8fd54d89888037d8845e8d2
# Parent 862a53870d43aaa9b65d7afadaed999ca4349fea
Provide a common block device size utility for Solaris & Linux.
Signed-off-by: John Danielson <john.danielson at sun.com>
diff --git a/virtinst/CloneManager.py b/virtinst/CloneManager.py
--- a/virtinst/CloneManager.py
+++ b/virtinst/CloneManager.py
@@ -24,7 +24,6 @@ import logging
import logging
import urlgrabber.progress as progress
import util
-import commands
import libvirt
import Guest
from VirtualDisk import VirtualDisk
@@ -397,13 +396,7 @@ class CloneDesign(object):
for i in lst:
mode = os.stat(i)[stat.ST_MODE]
if stat.S_ISBLK(mode):
- dummy, msg = commands.getstatusoutput('fdisk -s %s' % i)
- # check
- if msg.isdigit() == False:
- lines = msg.splitlines()
- # retry eg. for the GPT disk
- msg = lines[len(lines)-1]
- size.append(int(msg) * 1024)
+ size.append(util.blkdev_size(i))
typ.append(False)
elif stat.S_ISREG(mode):
size.append(os.path.getsize(i))
@@ -457,13 +450,7 @@ class CloneDesign(object):
continue
mode = os.stat(i)[stat.ST_MODE]
if stat.S_ISBLK(mode):
- dummy, msg = commands.getstatusoutput('fdisk -s %s' % i)
- # check
- if msg.isdigit() == False:
- lines = msg.splitlines()
- # retry eg. for the GPT disk
- msg = lines[len(lines)-1]
- size.append(int(msg) * 1024)
+ size.append(util.blkdev_size(i))
typ.append(False)
elif stat.S_ISREG(mode):
size.append(os.path.getsize(i))
diff --git a/virtinst/util.py b/virtinst/util.py
--- a/virtinst/util.py
+++ b/virtinst/util.py
@@ -257,6 +257,15 @@ def xml_escape(str):
str = str.replace("<", "<")
str = str.replace(">", ">")
return str
+
+def blkdev_size(path):
+ """Return the size of the block device. We can't use os.stat() as
+ that returns zero on many platforms."""
+ fd = os.open(path, os.O_RDONLY)
+ # os.SEEK_END is not present on all systems
+ size = os.lseek(fd, 0, 2)
+ os.close(fd)
+ return size
def compareMAC(p, q):
"""Compare two MAC addresses"""
More information about the et-mgmt-tools
mailing list