diff options
| author | Ed Bartosh <ed.bartosh@linux.intel.com> | 2016-04-28 13:58:04 +0300 | 
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2016-05-06 10:30:55 +0100 | 
| commit | d2d0d18dfd3922411d856b98ab6ba5d64c9c1c9f (patch) | |
| tree | 8eee021923517a4e9b01d456c813860f8887e8cb | |
| parent | 27fd1bb7969b558864463450e1837c4400a03f9c (diff) | |
| download | openembedded-core-d2d0d18dfd3922411d856b98ab6ba5d64c9c1c9f.tar.gz openembedded-core-d2d0d18dfd3922411d856b98ab6ba5d64c9c1c9f.tar.bz2 openembedded-core-d2d0d18dfd3922411d856b98ab6ba5d64c9c1c9f.zip | |
wic: use truncate utility to create sparse files
Used truncate instead of dd to create wic images for the
following reasons:
 - dd doesn't preserve sparseness
 - truncate syntax is much more clear
 - dd requires additional calculations of the image size
   in blocks
 - the way dd was used in the code is not always correct.
   In some cases it was writing one block to the file which makes
   it not 100% sparse.
[YOCTO #9099]
Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
| -rw-r--r-- | scripts/lib/wic/partition.py | 20 | ||||
| -rw-r--r-- | scripts/lib/wic/utils/fs_related.py | 12 | 
2 files changed, 8 insertions, 24 deletions
| diff --git a/scripts/lib/wic/partition.py b/scripts/lib/wic/partition.py index 227b685137..6d21193902 100644 --- a/scripts/lib/wic/partition.py +++ b/scripts/lib/wic/partition.py @@ -220,9 +220,7 @@ class Partition(object):          msger.debug("Added %d extra blocks to %s to get to %d total blocks" % \                      (extra_blocks, self.mountpoint, rootfs_size)) -        dd_cmd = "dd if=/dev/zero of=%s bs=1024 seek=%d count=0 bs=1k" % \ -            (rootfs, rootfs_size) -        exec_cmd(dd_cmd) +        exec_cmd("truncate %s -s %d" % (rootfs, rootfs_size * 1024))          extra_imagecmd = "-i 8192" @@ -255,9 +253,7 @@ class Partition(object):          msger.debug("Added %d extra blocks to %s to get to %d total blocks" % \                      (extra_blocks, self.mountpoint, rootfs_size)) -        dd_cmd = "dd if=/dev/zero of=%s bs=1024 seek=%d count=0 bs=1k" % \ -            (rootfs, rootfs_size) -        exec_cmd(dd_cmd) +        exec_cmd("truncate %s -s %d" % (rootfs, rootfs_size * 1024))          label_str = ""          if self.label: @@ -320,9 +316,7 @@ class Partition(object):          """          Prepare an empty ext2/3/4 partition.          """ -        dd_cmd = "dd if=/dev/zero of=%s bs=1k seek=%d count=0" % \ -            (rootfs, self.size) -        exec_cmd(dd_cmd) +        exec_cmd("truncate %s -s %d" % (rootfs, self.size * 1024))          extra_imagecmd = "-i 8192" @@ -339,9 +333,7 @@ class Partition(object):          """          Prepare an empty btrfs partition.          """ -        dd_cmd = "dd if=/dev/zero of=%s bs=1k seek=%d count=0" % \ -            (rootfs, self.size) -        exec_cmd(dd_cmd) +        exec_cmd("truncate %s -s %d" % (rootfs, self.size * 1024))          label_str = ""          if self.label: @@ -402,9 +394,7 @@ class Partition(object):          """          path = "%s/fs.%s" % (cr_workdir, self.fstype) -        dd_cmd = "dd if=/dev/zero of=%s bs=1k seek=%d count=0" % \ -            (path, self.size) -        exec_cmd(dd_cmd) +        exec_cmd("truncate %s -s %d" % (path, self.size * 1024))          import uuid          label_str = "" diff --git a/scripts/lib/wic/utils/fs_related.py b/scripts/lib/wic/utils/fs_related.py index 2e74461a40..2658dcfc20 100644 --- a/scripts/lib/wic/utils/fs_related.py +++ b/scripts/lib/wic/utils/fs_related.py @@ -71,14 +71,8 @@ class DiskImage(Disk):      def create(self):          if self.device is not None:              return - -        blocks = self.size / 1024 -        if self.size - blocks * 1024: -            blocks += 1 - -        # create disk image -        dd_cmd = "dd if=/dev/zero of=%s bs=1024 seek=%d count=1" % \ -            (self.image_file, blocks) -        exec_cmd(dd_cmd) +        # create sparse disk image +        cmd = "truncate %s -s %s" % (self.image_file, self.size) +        exec_cmd(cmd)          self.device = self.image_file | 
