Files
poky/scripts/lib/wic/utils/fs_related.py
Ed Bartosh d03cbac796 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]

(From OE-Core rev: d2d0d18dfd3922411d856b98ab6ba5d64c9c1c9f)

Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2016-05-06 10:31:12 +01:00

79 lines
2.0 KiB
Python

#!/usr/bin/env python -tt
#
# Copyright (c) 2007, Red Hat, Inc.
# Copyright (c) 2009, 2010, 2011 Intel, Inc.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation; version 2 of the License
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc., 59
# Temple Place - Suite 330, Boston, MA 02111-1307, USA.
from __future__ import with_statement
import os
import errno
from wic.utils.oe.misc import exec_cmd
def makedirs(dirname):
"""A version of os.makedirs() that doesn't throw an
exception if the leaf directory already exists.
"""
try:
os.makedirs(dirname)
except OSError, err:
if err.errno != errno.EEXIST:
raise
class Disk:
"""
Generic base object for a disk.
"""
def __init__(self, size, device=None):
self._device = device
self._size = size
def create(self):
pass
def cleanup(self):
pass
def get_device(self):
return self._device
def set_device(self, path):
self._device = path
device = property(get_device, set_device)
def get_size(self):
return self._size
size = property(get_size)
class DiskImage(Disk):
"""
A Disk backed by a file.
"""
def __init__(self, image_file, size):
Disk.__init__(self, size)
self.image_file = image_file
def exists(self):
return os.path.exists(self.image_file)
def create(self):
if self.device is not None:
return
# create sparse disk image
cmd = "truncate %s -s %s" % (self.image_file, self.size)
exec_cmd(cmd)
self.device = self.image_file