diff --git a/scripts/lib/wic/plugins/source/rawcopy.py
b/scripts/lib/wic/plugins/source/rawcopy.py
index 7c90cd3cf8..1e0ddbac12 100644
--- a/scripts/lib/wic/plugins/source/rawcopy.py
+++ b/scripts/lib/wic/plugins/source/rawcopy.py
@@ -89,10 +89,17 @@ class RawCopyPlugin(SourcePlugin):
         if not os.path.exists(os.path.dirname(dst)):
             os.makedirs(os.path.dirname(dst))

-        if 'skip' in source_params:
+        # Sparse copy if the file system supports it or allow-holes is set
to override
+        allow_holes = False if part.fstype == "vfat" and
source_params.get("allow-holes", True) else True
+
+        if allow_holes and 'skip' in source_params:
             sparse_copy(src, dst, skip=int(source_params['skip']))
-        else:
+        elif allow_holes and 'skip' not in source_params:
             sparse_copy(src, dst)
+        elif not allow_holes and 'skip' in source_params:
+            exec_cmd(f"dd if={src} of={dst} ibs={source_params['skip']}
skip=1 conv=notrunc")
+        else:
+            exec_cmd(f"cp --sparse=never {src} {dst}")
