summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaan De Meyer <daan.j.demeyer@gmail.com>2022-11-30 17:04:14 +0100
committerDaan De Meyer <daan.j.demeyer@gmail.com>2022-12-01 12:14:35 +0100
commit336ae0e71d0c2df02fbab7d874b5c34621ef5c4e (patch)
tree8a9fcb327895fdaadbc6a83522e7c25f0263c38e
parent494f7fc096a43b8ec267483110af30dc0fc2eed6 (diff)
downloadsystemd-336ae0e71d0c2df02fbab7d874b5c34621ef5c4e.tar.gz
repart: Ignore copy failures for unsupported file types
e.g. vfat doesn't support symlinks, sockets, fifos, etc so let's ignore any copy failures related to unsupported file types when populating filesystems.
-rw-r--r--man/repart.d.xml4
-rw-r--r--src/partition/repart.c4
2 files changed, 6 insertions, 2 deletions
diff --git a/man/repart.d.xml b/man/repart.d.xml
index 7e19ab7e0c..fe3de8d58a 100644
--- a/man/repart.d.xml
+++ b/man/repart.d.xml
@@ -420,6 +420,10 @@
<para>The copy operation is executed before the file system is registered in the partition table,
thus ensuring that a file system populated this way only ever exists fully initialized.</para>
+ <para>Note that <varname>CopyFiles=</varname> will skip copying files that aren't supported by the
+ target filesystem (e.g symlinks, fifos, sockets and devices on vfat). When an unsupported file type
+ is encountered, repart will skip copying this file and write a log message about it.</para>
+
<para>This option cannot be combined with <varname>CopyBlocks=</varname>.</para>
<para>When <command>systemd-repart</command> is invoked with the <option>--image=</option> or
diff --git a/src/partition/repart.c b/src/partition/repart.c
index 54f2f7f855..ce65ead62a 100644
--- a/src/partition/repart.c
+++ b/src/partition/repart.c
@@ -3731,14 +3731,14 @@ static int do_copy_files(
sfd, ".",
pfd, fn,
override_uid, override_gid,
- COPY_REFLINK|COPY_HOLES|COPY_MERGE|COPY_REPLACE|COPY_SIGINT|COPY_HARDLINKS|COPY_ALL_XATTRS,
+ COPY_REFLINK|COPY_HOLES|COPY_MERGE|COPY_REPLACE|COPY_SIGINT|COPY_HARDLINKS|COPY_ALL_XATTRS|COPY_GRACEFUL_WARN,
denylist);
} else
r = copy_tree_at(
sfd, ".",
tfd, ".",
override_uid, override_gid,
- COPY_REFLINK|COPY_HOLES|COPY_MERGE|COPY_REPLACE|COPY_SIGINT|COPY_HARDLINKS|COPY_ALL_XATTRS,
+ COPY_REFLINK|COPY_HOLES|COPY_MERGE|COPY_REPLACE|COPY_SIGINT|COPY_HARDLINKS|COPY_ALL_XATTRS|COPY_GRACEFUL_WARN,
denylist);
if (r < 0)
return log_error_errno(r, "Failed to copy '%s%s' to '%s%s': %m",