ecbff1
From 3740b7a6d246a5860c8f1d96504bbf00692447e0 Mon Sep 17 00:00:00 2001
ecbff1
From: Goffredo Baroncelli <kreijack@inwind.it>
ecbff1
Date: Sun, 12 Apr 2015 20:30:28 +0200
ecbff1
Subject: [PATCH] tmpfiles: Add +C attrib to the journal files directories
ecbff1
ecbff1
Add the +C file attribute (NOCOW) to the journal directories, so that
ecbff1
the flag is inherited automatically for new journal files created in
ecbff1
them. The journal write pattern is problematic on btrfs file systems as
ecbff1
it results in badly fragmented files when copy-on-write (COW) is used:
ecbff1
the performances decreases substantially over time.
ecbff1
ecbff1
To avoid this issue, this tmpfile.d snippet sets the NOCOW attribute to
ecbff1
the journal files directories, so newly created journal files inherit
ecbff1
the NCOOW attribute that disables copy-on-write.
ecbff1
ecbff1
Be aware that the NOCOW file attribute also disables btrfs checksumming
ecbff1
for these files, and thus prevents btrfs from rebuilding corrupted files
ecbff1
on a RAID filesystem.
ecbff1
ecbff1
In a single disk filesystems (or filesystems without redundancy) it is
ecbff1
safe to use the NOCOW flags without drawbacks, since the journal files
ecbff1
contain their own checksumming.
ecbff1
ecbff1
(cherry picked from commit 3a92e4ba470611ceec6693640b05eb248d62e32d)
ecbff1
ecbff1
Related: #1299714
ecbff1
---
ecbff1
 tmpfiles.d/journal-nocow.conf | 27 +++++++++++++++++++++++++++
ecbff1
 1 file changed, 27 insertions(+)
ecbff1
 create mode 100644 tmpfiles.d/journal-nocow.conf
ecbff1
ecbff1
diff --git a/tmpfiles.d/journal-nocow.conf b/tmpfiles.d/journal-nocow.conf
ecbff1
new file mode 100644
ecbff1
index 000000000..e7938c891
ecbff1
--- /dev/null
ecbff1
+++ b/tmpfiles.d/journal-nocow.conf
ecbff1
@@ -0,0 +1,27 @@
ecbff1
+#  This file is part of systemd.
ecbff1
+#
ecbff1
+#  systemd is free software; you can redistribute it and/or modify it
ecbff1
+#  under the terms of the GNU Lesser General Public License as published by
ecbff1
+#  the Free Software Foundation; either version 2.1 of the License, or
ecbff1
+#  (at your option) any later version.
ecbff1
+
ecbff1
+# See tmpfiles.d(5) for details
ecbff1
+
ecbff1
+# Set the NOCOW attribute for directories of journal files. This flag
ecbff1
+# is inheredited by their new files and sub-directories. Matters only
ecbff1
+# for btrfs filesystems.
ecbff1
+#
ecbff1
+# WARNING: Enabling the NOCOW attribute improves journal performance
ecbff1
+#     substantially, but also disables the btrfs checksum logic. In
ecbff1
+#     btrfs RAID filesystems the checksums are needed for rebuilding
ecbff1
+#     corrupted files. Without checksums such rebuilds are not
ecbff1
+#     possible.
ecbff1
+#
ecbff1
+# In a single-disk filesystem (or a filesystem without redundancy)
ecbff1
+# enabling the NOCOW attribute for journal files is safe, because
ecbff1
+# they have their own checksums and a rebuilding wouldn't be possible
ecbff1
+# in any case.
ecbff1
+
ecbff1
+h /var/log/journal - - - - +C
ecbff1
+h /var/log/journal/%m - - - - +C
ecbff1
+h /var/log/journal/remote - - - - +C