Merge tag 'v4.17-rc3' into apparmor-next
[linux-2.6-block.git] / Documentation / filesystems / overlayfs.txt
CommitLineData
a907c907
N
1Written by: Neil Brown
2Please see MAINTAINERS file for where to send questions.
7c37fbda
NB
3
4Overlay Filesystem
5==================
6
7This document describes a prototype for a new approach to providing
8overlay-filesystem functionality in Linux (sometimes referred to as
9union-filesystems). An overlay-filesystem tries to present a
10filesystem which is the result over overlaying one filesystem on top
11of the other.
12
13The result will inevitably fail to look exactly like a normal
14filesystem for various technical reasons. The expectation is that
15many use cases will be able to ignore these differences.
16
16149013
AG
17
18Overlay objects
19---------------
20
21The overlay filesystem approach is 'hybrid', because the objects that
22appear in the filesystem do not always appear to belong to that filesystem.
23In many cases, an object accessed in the union will be indistinguishable
7c37fbda
NB
24from accessing the corresponding object from the original filesystem.
25This is most obvious from the 'st_dev' field returned by stat(2).
26
27While directories will report an st_dev from the overlay-filesystem,
65f26738 28non-directory objects may report an st_dev from the lower filesystem or
7c37fbda
NB
29upper filesystem that is providing the object. Similarly st_ino will
30only be unique when combined with st_dev, and both of these can change
31over the lifetime of a non-directory object. Many applications and
32tools ignore these values and will not be affected.
33
65f26738
AG
34In the special case of all overlay layers on the same underlying
35filesystem, all objects will report an st_dev from the overlay
36filesystem and st_ino from the underlying filesystem. This will
37make the overlay mount more compliant with filesystem scanners and
38overlay objects will be distinguishable from the corresponding
39objects in the original filesystem.
40
16149013
AG
41On 64bit systems, even if all overlay layers are not on the same
42underlying filesystem, the same compliant behavior could be achieved
43with the "xino" feature. The "xino" feature composes a unique object
44identifier from the real object st_ino and an underlying fsid index.
45If all underlying filesystems support NFS file handles and export file
46handles with 32bit inode number encoding (e.g. ext4), overlay filesystem
47will use the high inode number bits for fsid. Even when the underlying
48filesystem uses 64bit inode numbers, users can still enable the "xino"
49feature with the "-o xino=on" overlay mount option. That is useful for the
50case of underlying filesystems like xfs and tmpfs, which use 64bit inode
51numbers, but are very unlikely to use the high inode number bit.
52
53
7c37fbda
NB
54Upper and Lower
55---------------
56
57An overlay filesystem combines two filesystems - an 'upper' filesystem
58and a 'lower' filesystem. When a name exists in both filesystems, the
59object in the 'upper' filesystem is visible while the object in the
60'lower' filesystem is either hidden or, in the case of directories,
61merged with the 'upper' object.
62
63It would be more correct to refer to an upper and lower 'directory
64tree' rather than 'filesystem' as it is quite possible for both
65directory trees to be in the same filesystem and there is no
66requirement that the root of a filesystem be given for either upper or
67lower.
68
69The lower filesystem can be any filesystem supported by Linux and does
70not need to be writable. The lower filesystem can even be another
71overlayfs. The upper filesystem will normally be writable and if it
72is it must support the creation of trusted.* extended attributes, and
73must provide valid d_type in readdir responses, so NFS is not suitable.
74
75A read-only overlay of two read-only filesystems may use any
76filesystem type.
77
78Directories
79-----------
80
81Overlaying mainly involves directories. If a given name appears in both
82upper and lower filesystems and refers to a non-directory in either,
83then the lower object is hidden - the name refers only to the upper
84object.
85
86Where both upper and lower objects are directories, a merged directory
87is formed.
88
89At mount time, the two directories given as mount options "lowerdir" and
90"upperdir" are combined into a merged directory:
91
ef94b186 92 mount -t overlay overlay -olowerdir=/lower,upperdir=/upper,\
c3c86996 93 workdir=/work /merged
7c37fbda
NB
94
95The "workdir" needs to be an empty directory on the same filesystem
96as upperdir.
97
98Then whenever a lookup is requested in such a merged directory, the
99lookup is performed in each actual directory and the combined result
100is cached in the dentry belonging to the overlay filesystem. If both
101actual lookups find directories, both are stored and a merged
102directory is created, otherwise only one is stored: the upper if it
103exists, else the lower.
104
105Only the lists of names from directories are merged. Other content
106such as metadata and extended attributes are reported for the upper
107directory only. These attributes of the lower directory are hidden.
108
109whiteouts and opaque directories
110--------------------------------
111
112In order to support rm and rmdir without changing the lower
113filesystem, an overlay filesystem needs to record in the upper filesystem
114that files have been removed. This is done using whiteouts and opaque
115directories (non-directories are always opaque).
116
117A whiteout is created as a character device with 0/0 device number.
118When a whiteout is found in the upper level of a merged directory, any
119matching name in the lower level is ignored, and the whiteout itself
120is also hidden.
121
122A directory is made opaque by setting the xattr "trusted.overlay.opaque"
123to "y". Where the upper filesystem contains an opaque directory, any
124directory in the lower filesystem with the same name is ignored.
125
126readdir
127-------
128
129When a 'readdir' request is made on a merged directory, the upper and
130lower directories are each read and the name lists merged in the
131obvious way (upper is read first, then lower - entries that already
132exist are not re-added). This merged name list is cached in the
133'struct file' and so remains as long as the file is kept open. If the
134directory is opened and read by two processes at the same time, they
135will each have separate caches. A seekdir to the start of the
136directory (offset 0) followed by a readdir will cause the cache to be
137discarded and rebuilt.
138
139This means that changes to the merged directory do not appear while a
140directory is being read. This is unlikely to be noticed by many
141programs.
142
143seek offsets are assigned sequentially when the directories are read.
144Thus if
c3c86996 145
7c37fbda
NB
146 - read part of a directory
147 - remember an offset, and close the directory
148 - re-open the directory some time later
149 - seek to the remembered offset
150
151there may be little correlation between the old and new locations in
152the list of filenames, particularly if anything has changed in the
153directory.
154
155Readdir on directories that are not merged is simply handled by the
156underlying directory (upper or lower).
157
a6c60655
MS
158renaming directories
159--------------------
160
161When renaming a directory that is on the lower layer or merged (i.e. the
162directory was not created on the upper layer to start with) overlayfs can
163handle it in two different ways:
164
c3c86996 1651. return EXDEV error: this error is returned by rename(2) when trying to
a6c60655
MS
166 move a file or directory across filesystem boundaries. Hence
167 applications are usually prepared to hande this error (mv(1) for example
168 recursively copies the directory tree). This is the default behavior.
169
c3c86996 1702. If the "redirect_dir" feature is enabled, then the directory will be
a6c60655
MS
171 copied up (but not the contents). Then the "trusted.overlay.redirect"
172 extended attribute is set to the path of the original location from the
173 root of the overlay. Finally the directory is moved to the new
174 location.
7c37fbda 175
438c84c2
MS
176There are several ways to tune the "redirect_dir" feature.
177
178Kernel config options:
179
180- OVERLAY_FS_REDIRECT_DIR:
181 If this is enabled, then redirect_dir is turned on by default.
182- OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW:
183 If this is enabled, then redirects are always followed by default. Enabling
184 this results in a less secure configuration. Enable this option only when
185 worried about backward compatibility with kernels that have the redirect_dir
186 feature and follow redirects even if turned off.
187
188Module options (can also be changed through /sys/module/overlay/parameters/*):
189
190- "redirect_dir=BOOL":
191 See OVERLAY_FS_REDIRECT_DIR kernel config option above.
192- "redirect_always_follow=BOOL":
193 See OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW kernel config option above.
194- "redirect_max=NUM":
195 The maximum number of bytes in an absolute redirect (default is 256).
196
197Mount options:
198
199- "redirect_dir=on":
200 Redirects are enabled.
201- "redirect_dir=follow":
202 Redirects are not created, but followed.
203- "redirect_dir=off":
204 Redirects are not created and only followed if "redirect_always_follow"
205 feature is enabled in the kernel/module config.
206- "redirect_dir=nofollow":
207 Redirects are not created and not followed (equivalent to "redirect_dir=off"
208 if "redirect_always_follow" feature is not enabled).
209
f168f109
AG
210When the NFS export feature is enabled, every copied up directory is
211indexed by the file handle of the lower inode and a file handle of the
212upper directory is stored in a "trusted.overlay.upper" extended attribute
213on the index entry. On lookup of a merged directory, if the upper
214directory does not match the file handle stores in the index, that is an
215indication that multiple upper directories may be redirected to the same
216lower directory. In that case, lookup returns an error and warns about
217a possible inconsistency.
218
219Because lower layer redirects cannot be verified with the index, enabling
220NFS export support on an overlay filesystem with no upper layer requires
221turning off redirect follow (e.g. "redirect_dir=nofollow").
222
f168f109 223
7c37fbda
NB
224Non-directories
225---------------
226
227Objects that are not directories (files, symlinks, device-special
228files etc.) are presented either from the upper or lower filesystem as
229appropriate. When a file in the lower filesystem is accessed in a way
230the requires write-access, such as opening for write access, changing
231some metadata etc., the file is first copied from the lower filesystem
232to the upper filesystem (copy_up). Note that creating a hard-link
233also requires copy_up, though of course creation of a symlink does
234not.
235
236The copy_up may turn out to be unnecessary, for example if the file is
237opened for read-write but the data is not modified.
238
239The copy_up process first makes sure that the containing directory
240exists in the upper filesystem - creating it and any parents as
241necessary. It then creates the object with the same metadata (owner,
242mode, mtime, symlink-target etc.) and then if the object is a file, the
243data is copied from the lower to the upper filesystem. Finally any
244extended attributes are copied up.
245
246Once the copy_up is complete, the overlay filesystem simply
247provides direct access to the newly created file in the upper
248filesystem - future operations on the file are barely noticed by the
249overlay filesystem (though an operation on the name of the file such as
250rename or unlink will of course be noticed and handled).
251
252
a78d9f0d
MS
253Multiple lower layers
254---------------------
255
256Multiple lower layers can now be given using the the colon (":") as a
257separator character between the directory names. For example:
258
259 mount -t overlay overlay -olowerdir=/lower1:/lower2:/lower3 /merged
260
6d900f5a
MS
261As the example shows, "upperdir=" and "workdir=" may be omitted. In
262that case the overlay will be read-only.
263
264The specified lower directories will be stacked beginning from the
265rightmost one and going left. In the above example lower1 will be the
266top, lower2 the middle and lower3 the bottom layer.
a78d9f0d
MS
267
268
9412812e
AG
269Sharing and copying layers
270--------------------------
271
272Lower layers may be shared among several overlay mounts and that is indeed
273a very common practice. An overlay mount may use the same lower layer
274path as another overlay mount and it may use a lower layer path that is
275beneath or above the path of another overlay lower layer path.
276
277Using an upper layer path and/or a workdir path that are already used by
85fdee1e 278another overlay mount is not allowed and may fail with EBUSY. Using
9412812e 279partially overlapping paths is not allowed but will not fail with EBUSY.
85fdee1e
AG
280If files are accessed from two overlayfs mounts which share or overlap the
281upper layer and/or workdir path the behavior of the overlay is undefined,
282though it will not result in a crash or deadlock.
9412812e
AG
283
284Mounting an overlay using an upper layer path, where the upper layer path
285was previously used by another mounted overlay in combination with a
286different lower layer path, is allowed, unless the "inodes index" feature
287is enabled.
288
289With the "inodes index" feature, on the first time mount, an NFS file
290handle of the lower layer root directory, along with the UUID of the lower
291filesystem, are encoded and stored in the "trusted.overlay.origin" extended
292attribute on the upper layer root directory. On subsequent mount attempts,
293the lower root directory file handle and lower filesystem UUID are compared
294to the stored origin in upper root directory. On failure to verify the
295lower root origin, mount will fail with ESTALE. An overlayfs mount with
296"inodes index" enabled will fail with EOPNOTSUPP if the lower filesystem
297does not support NFS export, lower filesystem does not have a valid UUID or
298if the upper filesystem does not support extended attributes.
299
300It is quite a common practice to copy overlay layers to a different
301directory tree on the same or different underlying filesystem, and even
302to a different machine. With the "inodes index" feature, trying to mount
303the copied layers will fail the verification of the lower root file handle.
304
305
7c37fbda
NB
306Non-standard behavior
307---------------------
308
309The copy_up operation essentially creates a new, identical file and
16149013
AG
310moves it over to the old name. Any open files referring to this inode
311will access the old data.
312
313The new file may be on a different filesystem, so both st_dev and st_ino
314of the real file may change. The values of st_dev and st_ino returned by
315stat(2) on an overlay object are often not the same as the real file
316stat(2) values to prevent the values from changing on copy_up.
7c37fbda 317
16149013
AG
318Unless "xino" feature is enabled, when overlay layers are not all on the
319same underlying filesystem, the value of st_dev may be different for two
320non-directory objects in the same overlay filesystem and the value of
321st_ino for directory objects may be non persistent and could change even
322while the overlay filesystem is still mounted.
7c37fbda 323
60b86642
AG
324Unless "inode index" feature is enabled, if a file with multiple hard
325links is copied up, then this will "break" the link. Changes will not be
326propagated to other names referring to the same inode.
7c37fbda 327
a6c60655
MS
328Unless "redirect_dir" feature is enabled, rename(2) on a lower or merged
329directory will fail with EXDEV.
2d8f2908 330
16149013 331
7c37fbda
NB
332Changes to underlying filesystems
333---------------------------------
334
335Offline changes, when the overlay is not mounted, are allowed to either
336the upper or the lower trees.
337
338Changes to the underlying filesystems while part of a mounted overlay
339filesystem are not allowed. If the underlying filesystem is changed,
340the behavior of the overlay is undefined, though it will not result in
341a crash or deadlock.
2b7a8f36 342
f168f109
AG
343When the overlay NFS export feature is enabled, overlay filesystems
344behavior on offline changes of the underlying lower layer is different
345than the behavior when NFS export is disabled.
346
347On every copy_up, an NFS file handle of the lower inode, along with the
348UUID of the lower filesystem, are encoded and stored in an extended
349attribute "trusted.overlay.origin" on the upper inode.
350
351When the NFS export feature is enabled, a lookup of a merged directory,
352that found a lower directory at the lookup path or at the path pointed
353to by the "trusted.overlay.redirect" extended attribute, will verify
354that the found lower directory file handle and lower filesystem UUID
355match the origin file handle that was stored at copy_up time. If a
356found lower directory does not match the stored origin, that directory
357will not be merged with the upper directory.
358
359
a01f64b5
AG
360
361NFS export
362----------
363
364When the underlying filesystems supports NFS export and the "nfs_export"
365feature is enabled, an overlay filesystem may be exported to NFS.
366
367With the "nfs_export" feature, on copy_up of any lower object, an index
368entry is created under the index directory. The index entry name is the
369hexadecimal representation of the copy up origin file handle. For a
370non-directory object, the index entry is a hard link to the upper inode.
371For a directory object, the index entry has an extended attribute
372"trusted.overlay.upper" with an encoded file handle of the upper
373directory inode.
374
375When encoding a file handle from an overlay filesystem object, the
376following rules apply:
377
3781. For a non-upper object, encode a lower file handle from lower inode
3792. For an indexed object, encode a lower file handle from copy_up origin
3803. For a pure-upper object and for an existing non-indexed upper object,
381 encode an upper file handle from upper inode
382
383The encoded overlay file handle includes:
384 - Header including path type information (e.g. lower/upper)
385 - UUID of the underlying filesystem
386 - Underlying filesystem encoding of underlying inode
387
388This encoding format is identical to the encoding format file handles that
389are stored in extended attribute "trusted.overlay.origin".
390
391When decoding an overlay file handle, the following steps are followed:
392
3931. Find underlying layer by UUID and path type information.
3942. Decode the underlying filesystem file handle to underlying dentry.
3953. For a lower file handle, lookup the handle in index directory by name.
3964. If a whiteout is found in index, return ESTALE. This represents an
397 overlay object that was deleted after its file handle was encoded.
3985. For a non-directory, instantiate a disconnected overlay dentry from the
399 decoded underlying dentry, the path type and index inode, if found.
4006. For a directory, use the connected underlying decoded dentry, path type
401 and index, to lookup a connected overlay dentry.
402
403Decoding a non-directory file handle may return a disconnected dentry.
404copy_up of that disconnected dentry will create an upper index entry with
405no upper alias.
406
407When overlay filesystem has multiple lower layers, a middle layer
408directory may have a "redirect" to lower directory. Because middle layer
409"redirects" are not indexed, a lower file handle that was encoded from the
410"redirect" origin directory, cannot be used to find the middle or upper
411layer directory. Similarly, a lower file handle that was encoded from a
412descendant of the "redirect" origin directory, cannot be used to
413reconstruct a connected overlay path. To mitigate the cases of
414directories that cannot be decoded from a lower file handle, these
415directories are copied up on encode and encoded as an upper file handle.
416On an overlay filesystem with no upper layer this mitigation cannot be
417used NFS export in this setup requires turning off redirect follow (e.g.
418"redirect_dir=nofollow").
419
420The overlay filesystem does not support non-directory connectable file
421handles, so exporting with the 'subtree_check' exportfs configuration will
422cause failures to lookup files over NFS.
423
424When the NFS export feature is enabled, all directory index entries are
425verified on mount time to check that upper file handles are not stale.
426This verification may cause significant overhead in some cases.
427
428
2b7a8f36
MS
429Testsuite
430---------
431
432There's testsuite developed by David Howells at:
433
434 git://git.infradead.org/users/dhowells/unionmount-testsuite.git
435
436Run as root:
437
438 # cd unionmount-testsuite
439 # ./run --ov