.\" -*- nroff -*-
.TH CHATTR 1 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
.SH NAME
-chattr \- change file attributes on a Linux second extended file system
+chattr \- change file attributes on a Linux file system
.SH SYNOPSIS
.B chattr
[
-.B \-RV
+.B \-RVf
]
[
.B \-v
.I version
]
[
+.B \-p
+.I project
+]
+[
.I mode
]
.I files...
.SH DESCRIPTION
.B chattr
-changes the file attributes on a Linux second extended file system.
-.PP
-The format of a symbolic mode is +-=[ASacDdIijsTtu].
-.PP
-The operator `+' causes the selected attributes to be added to the
-existing attributes of the files; `-' causes them to be removed; and
-`=' causes them to be the only attributes that the files have.
-.PP
-The letters `acdijsuADST' select the new attributes for the files:
-append only (a), compressed (c), no dump (d), immutable (i),
-data journalling (j), secure deletion (s), no tail-merging (t),
-undeletable (u), no atime updates (A), synchronous directory updates (D),
-synchronous updates (S), and top of directory hierarchy (T).
+changes the file attributes on a Linux file system.
+.PP
+The format of a symbolic mode is +-=[aAcCdDeFijPsStTu].
+.PP
+The operator '+' causes the selected attributes to be added to the
+existing attributes of the files; '-' causes them to be removed; and '='
+causes them to be the only attributes that the files have.
+.PP
+The letters 'aAcCdDeFijPsStTu' select the new attributes for the files:
+append only (a),
+no atime updates (A),
+compressed (c),
+no copy on write (C),
+no dump (d),
+synchronous directory updates (D),
+extent format (e),
+case-insensitive directory lookups (F),
+immutable (i),
+data journalling (j),
+project hierarchy (P),
+secure deletion (s),
+synchronous updates (S),
+no tail-merging (t),
+top of directory hierarchy (T),
+and undeletable (u).
+.PP
+The following attributes are read-only, and may be listed by
+.BR lsattr (1)
+but not modified by chattr:
+encrypted (E),
+indexed directory (I),
+inline data (N),
+and verity (V).
+.PP
+Not all flags are supported or utilized by all filesystems; refer to
+filesystem-specific man pages such as
+.BR btrfs (5),
+.BR ext4 (5),
+and
+.BR xfs (5)
+for more filesystem-specific details.
.SH OPTIONS
.TP
.B \-R
Recursively change attributes of directories and their contents.
-Symbolic links encountered during recursive directory traversals are
-ignored.
.TP
.B \-V
Be verbose with chattr's output and print the program version.
.TP
+.B \-f
+Suppress most error messages.
+.TP
.BI \-v " version"
Set the file's version/generation number.
+.TP
+.BI \-p " project"
+Set the file's project number.
.SH ATTRIBUTES
+.TP
+.B a
+A file with the 'a' attribute set can only be opened in append mode for
+writing. Only the superuser or a process possessing the
+CAP_LINUX_IMMUTABLE capability can set or clear this attribute.
+.TP
+.B A
When a file with the 'A' attribute set is accessed, its atime record is
not modified. This avoids a certain amount of disk I/O for laptop
systems.
-.PP
-A file with the `a' attribute set can only be open in append mode for writing.
-Only the superuser or a process possessing the CAP_LINUX_IMMUTABLE
-capability can set or clear this attribute.
-.PP
-A file with the `c' attribute set is automatically compressed on the disk
+.TP
+.B c
+A file with the 'c' attribute set is automatically compressed on the disk
by the kernel. A read from this file returns uncompressed data. A write to
-this file compresses data before storing them on the disk. Note: please
+this file compresses data before storing them on the disk. Note: please
make sure to read the bugs and limitations section at the end of this
document.
-.PP
-When a directory with the `D' attribute set is modified,
-the changes are written synchronously on the disk; this is equivalent to
-the `dirsync' mount option applied to a subset of the files.
-.PP
-A file with the `d' attribute set is not candidate for backup when the
+.TP
+.B C
+A file with the 'C' attribute set will not be subject to copy-on-write
+updates. This flag is only supported on file systems which perform
+copy-on-write. (Note: For btrfs, the 'C' flag should be
+set on new or empty files. If it is set on a file which already has
+data blocks, it is undefined when the blocks assigned to the file will
+be fully stable. If the 'C' flag is set on a directory, it will have no
+effect on the directory, but new files created in that directory will
+have the No_COW attribute set.)
+.TP
+.B d
+A file with the 'd' attribute set is not a candidate for backup when the
.BR dump (8)
program is run.
-.PP
-The 'E' attribute is used by the experimental compression patches to
-indicate that a compressed file has a compression error. It may not be
-set or reset using
+.TP
+.B D
+When a directory with the 'D' attribute set is modified,
+the changes are written synchronously to the disk; this is equivalent to
+the 'dirsync' mount option applied to a subset of the files.
+.TP
+.B e
+The 'e' attribute indicates that the file is using extents for mapping
+the blocks on disk. It may not be removed using
+.BR chattr (1).
+.TP
+.B E
+A file, directory, or symlink with the 'E' attribute set is encrypted by the
+filesystem. This attribute may not be set or cleared using
.BR chattr (1),
although it can be displayed by
.BR lsattr (1).
-.PP
+.TP
+.B F
+A directory with the 'F' attribute set indicates that all the path
+lookups inside that directory are made in a case-insensitive fashion.
+This attribute can only be changed in empty directories on file systems
+with the casefold feature enabled.
+.TP
+.B i
+A file with the 'i' attribute cannot be modified: it cannot be deleted or
+renamed, no link can be created to this file, most of the file's
+metadata can not be modified, and the file can not be opened in write mode.
+Only the superuser or a process possessing the CAP_LINUX_IMMUTABLE
+capability can set or clear this attribute.
+.TP
+.B I
The 'I' attribute is used by the htree code to indicate that a directory
-is being indexed using hashed trees. It may not be set or reset using
+is being indexed using hashed trees. It may not be set or cleared using
.BR chattr (1),
although it can be displayed by
.BR lsattr (1).
-.PP
-A file with the `i' attribute cannot be modified: it cannot be deleted or
-renamed, no link can be created to this file and no data can be written
-to the file. Only the superuser or a process possessing the
-CAP_LINUX_IMMUTABLE capability can set or clear this attribute.
-.PP
-A file with the `j' attribute has all of its data written to the ext3
-journal before being written to the file itself, if the filesystem is
-mounted with the "data=ordered" or "data=writeback" options. When the
-filesystem is mounted with the "data=journal" option all file data
-is already journalled and this attribute has no effect.
-Only the superuser or a process possessing the CAP_SYS_RESOURCE
-capability can set or clear this attribute.
-.PP
-When a file with the `s' attribute set is deleted, its blocks are zeroed
+.TP
+.B j
+A file with the 'j' attribute has all of its data written to the ext3 or
+ext4 journal before being written to the file itself, if the file system
+is mounted with the "data=ordered" or "data=writeback" options and the
+file system has a journal. When the filesystem is mounted with the
+"data=journal" option all file data is already journalled and this
+attribute has no effect. Only the superuser or a process possessing the
+CAP_SYS_RESOURCE capability can set or clear this attribute.
+.TP
+.B N
+A file with the 'N' attribute set indicates that the file has data
+stored inline, within the inode itself. It may not be set or cleared
+using
+.BR chattr (1),
+although it can be displayed by
+.BR lsattr (1).
+.TP
+.B P
+A directory with the 'P' attribute set will enforce a hierarchical
+structure for project id's. This means that files and directories created
+in the directory will inherit the project id of the directory, rename
+operations are constrained so when a file or directory is moved into
+another directory, that the project ids must match. In addition, a
+hard link to file can only be created when the project id for the file
+and the destination directory match.
+.TP
+.B s
+When a file with the 's' attribute set is deleted, its blocks are zeroed
and written back to the disk. Note: please make sure to read the bugs
and limitations section at the end of this document.
-.PP
-When a file with the `S' attribute set is modified,
-the changes are written synchronously on the disk; this is equivalent to
-the `sync' mount option applied to a subset of the files.
-.PP
-A directory with the 'T' attribute will be deemed to be the top of
-directory hierarchies for the purposes of the Orlov block allocator
-(which is used in on systems with Linux 2.5.46 or later).
-.PP
+.TP
+.B S
+When a file with the 'S' attribute set is modified,
+the changes are written synchronously to the disk; this is equivalent to
+the 'sync' mount option applied to a subset of the files.
+.TP
+.B t
A file with the 't' attribute will not have a partial block fragment at
the end of the file merged with other files (for those filesystems which
-support tail-merging). This is necessary for applications such as LILO
+support tail-merging). This is necessary for applications such as LILO
which read the filesystem directly, and which don't understand tail-merged
-files. Note: As of this writing, the ext2 or ext3 filesystems do not
-(yet, except in very experimental patches) support tail-merging.
-.PP
-When a file with the `u' attribute set is deleted, its contents are
+files. Note: As of this writing, the ext2, ext3, and ext4 filesystems do
+not support tail-merging.
+.TP
+.B T
+A directory with the 'T' attribute will be deemed to be the top of
+directory hierarchies for the purposes of the Orlov block allocator.
+This is a hint to the block allocator used by ext3 and ext4 that the
+subdirectories under this directory are not related, and thus should be
+spread apart for allocation purposes. For example it is a very good
+idea to set the 'T' attribute on the /home directory, so that /home/john
+and /home/mary are placed into separate block groups. For directories
+where this attribute is not set, the Orlov block allocator will try to
+group subdirectories closer together where possible.
+.TP
+.B u
+When a file with the 'u' attribute set is deleted, its contents are
saved. This allows the user to ask for its undeletion. Note: please
make sure to read the bugs and limitations section at the end of this
document.
-.PP
-The 'X' attribute is used by the experimental compression patches to
-indicate that a raw contents of a compressed file can be accessed
-directly. It currently may not be set or reset using
-.BR chattr (1),
-although it can be displayed by
-.BR lsattr (1).
-.PP
-The 'Z' attribute is used by the experimental compression patches to
-indicate a compressed file is dirty. It may not be set or reset using
+.TP
+.B V
+A file with the 'V' attribute set has fs-verity enabled. It cannot be
+written to, and the filesystem will automatically verify all data read
+from it against a cryptographic hash that covers the entire file's
+contents, e.g. via a Merkle tree. This makes it possible to efficiently
+authenticate the file. This attribute may not be set or cleared using
.BR chattr (1),
although it can be displayed by
.BR lsattr (1).
was written by Remy Card <Remy.Card@linux.org>. It is currently being
maintained by Theodore Ts'o <tytso@alum.mit.edu>.
.SH BUGS AND LIMITATIONS
-The `c', 's', and `u' attributes are not honored
-by the ext2 and ext3 filesystems as implemented in the current mainline
-Linux kernels. These attributes may be implemented
-in future versions of the ext2 and ext3 filesystems.
+The 'c', 's', and 'u' attributes are not honored
+by the ext2, ext3, and ext4 filesystems as implemented in the current
+mainline Linux kernels.
+Setting 'a' and 'i' attributes will not affect the ability to write
+to already existing file descriptors.
.PP
-The `j' option is only useful if the filesystem is mounted as ext3.
+The 'j' option is only useful for ext3 and ext4 file systems.
.PP
-The `D' option is only useful on Linux kernel 2.5.19 and later.
+The 'D' option is only useful on Linux kernel 2.5.19 and later.
.SH AVAILABILITY
.B chattr
is part of the e2fsprogs package and is available from
http://e2fsprogs.sourceforge.net.
.SH SEE ALSO
-.BR lsattr (1)
+.BR lsattr (1),
+.BR btrfs (5),
+.BR ext4 (5),
+.BR xfs (5).