From 333ff548f55ea9a59d49da0fb6e38b30a364309f Mon Sep 17 00:00:00 2001
From: Nikos Skalkotos <skalkoto@grnet.gr>
Date: Fri, 17 Feb 2012 11:41:32 +0200
Subject: [PATCH] Further development

Make the cow file sparse
Add method in Device to list the partitions
Add a "is bootable" flag in Device constructor
---
 image_creator/disk.py | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/image_creator/disk.py b/image_creator/disk.py
index b20ca74..8bba0fc 100644
--- a/image_creator/disk.py
+++ b/image_creator/disk.py
@@ -51,7 +51,8 @@ class Disk(object):
         size = blockdev('--getsize', sourcedev)
         cowfd, cow = tempfile.mkstemp()
         self._add_cleanup(os.unlink, cow)
-        dd('if=/dev/zero', 'of=%s' % cow, 'count=%d' % (1024*1024))#(int(size)/4))
+        # Create 1G cow file
+        dd('if=/dev/null', 'of=%s' % cow, 'bs=1k' ,'seek=%d' % (1024*1024))
         cowdev = self._losetup(cow)
 
         snapshot = uuid.uuid4().hex
@@ -70,19 +71,27 @@ class Disk(object):
 
 class DiskDevice(object):
 
-    def __init__(self, disk, device):
+    def __init__(self, disk, device, bootable = True):
         self.disk = disk
-        self.dev = device
+        self.device = device
+        self.is_bootable = bootable
         self.partitions_mapped = False
         self.magic_number = uuid.uuid4().hex
 
     def list_partitions(self):
+        if not self.partitions_mapped:
+            kpartx("-a", "-p", self.magic_number, self.dev)
+            self.disk._cleanup_jobs.append(kpartx, "-d", "-p",
+                        self.magic_number, self.dev)
+            self.partitions_mapped = True
+
         output = kpartx("-l", "-p", self.magic_number, self.dev)
         return [ "/dev/mapper/%s" % x for x in
                 re.findall('^\S+', str(output), flags=re.MULTILINE)]
 
     def mount(self, partition):
         if not self.partitions_mapped:
+            self.list_partitions()
             kpartx("-a", "-p", self.magic_number, self.dev)
             self.disk._cleanup_jobs.append(kpartx, "-d", "-p",
                         self.magic_number, self.dev)
-- 
GitLab