[OE-core] [PATCH] wic: fallback to dd, if sparse_copy does not work

Ed Bartosh ed.bartosh at linux.intel.com
Wed Nov 22 08:26:45 UTC 2017


On Thu, Nov 16, 2017 at 02:49:43PM +0300, Dogukan Ergun wrote:
> Docker's aufs filesystem doesn't support file ioctl operations like FIGETBSZ
> or FIEMAP.
> Sparse_copy operation will fail if those ioctls are not supported.
> If sparse_copy fails while generating wic images, fallback to dd for copying
> filesystems on final image.
> 

You can make sparse_copy to use SEEK_HOLE / SEEK_DATA instead of FIEMAP.
This can be done by using 'api' parameter. If AUFS supports it this
there is no need to fall back to using dd.

> Signed-off-by: Dogukan Ergun <dogukan.ergun at gmail.com>
> ---
>  scripts/lib/wic/plugins/imager/direct.py | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/scripts/lib/wic/plugins/imager/direct.py b/scripts/lib/wic/plugins/imager/direct.py
> index da1c061..70f93ee 100644
> --- a/scripts/lib/wic/plugins/imager/direct.py
> +++ b/scripts/lib/wic/plugins/imager/direct.py
> @@ -577,8 +577,14 @@ class PartitionedImage():
>          for part in self.partitions:
>              source = part.source_file
>              if source:
> -                # install source_file contents into a partition
> -                sparse_copy(source, self.path, seek=part.start * self.sector_size)
> +                try:
> +                    # install source_file contents into a partition
> +                    sparse_copy(source, self.path, seek=part.start * self.sector_size)
> +                except:

sparse_copy raises ErrorNotSupp if some ioctl is not supported. Please,
catch this particular exception instead of any exception.

> +                    # Sparse_copy failed, fallback to dd method
> +                    dd_cmd = "dd if=%s of=%s bs=%d seek=%d count=%d conv=notrunc" % \
> +                        (source, self.path, self.sector_size, part.start, part.size_sec)
> +                    exec_cmd(dd_cmd)
>  
>                  logger.debug("Installed %s in partition %d, sectors %d-%d, "
>                               "size %d sectors", source, part.num, part.start,
> -- 
> 2.7.4
> 
> -- 
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core

-- 
--
Regards,
Ed



More information about the Openembedded-core mailing list