compiler-gcc: remove comment about gcc 4.5 from unreachable()
[sfrench/cifs-2.6.git] / Documentation / filesystems / ext4 / ext4.rst
1 .. SPDX-License-Identifier: GPL-2.0
2
3 ========================
4 General Information
5 ========================
6
7 Ext4 is an advanced level of the ext3 filesystem which incorporates
8 scalability and reliability enhancements for supporting large filesystems
9 (64 bit) in keeping with increasing disk capacities and state-of-the-art
10 feature requirements.
11
12 Mailing list:   linux-ext4@vger.kernel.org
13 Web site:       http://ext4.wiki.kernel.org
14
15
16 Quick usage instructions
17 ========================
18
19 Note: More extensive information for getting started with ext4 can be
20 found at the ext4 wiki site at the URL:
21 http://ext4.wiki.kernel.org/index.php/Ext4_Howto
22
23   - The latest version of e2fsprogs can be found at:
24
25     https://www.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/
26
27         or
28
29     http://sourceforge.net/project/showfiles.php?group_id=2406
30
31         or grab the latest git repository from:
32
33    https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git
34
35   - Create a new filesystem using the ext4 filesystem type:
36
37         # mke2fs -t ext4 /dev/hda1
38
39     Or to configure an existing ext3 filesystem to support extents:
40
41         # tune2fs -O extents /dev/hda1
42
43     If the filesystem was created with 128 byte inodes, it can be
44     converted to use 256 byte for greater efficiency via:
45
46         # tune2fs -I 256 /dev/hda1
47
48   - Mounting:
49
50         # mount -t ext4 /dev/hda1 /wherever
51
52   - When comparing performance with other filesystems, it's always
53     important to try multiple workloads; very often a subtle change in a
54     workload parameter can completely change the ranking of which
55     filesystems do well compared to others.  When comparing versus ext3,
56     note that ext4 enables write barriers by default, while ext3 does
57     not enable write barriers by default.  So it is useful to use
58     explicitly specify whether barriers are enabled or not when via the
59     '-o barriers=[0|1]' mount option for both ext3 and ext4 filesystems
60     for a fair comparison.  When tuning ext3 for best benchmark numbers,
61     it is often worthwhile to try changing the data journaling mode; '-o
62     data=writeback' can be faster for some workloads.  (Note however that
63     running mounted with data=writeback can potentially leave stale data
64     exposed in recently written files in case of an unclean shutdown,
65     which could be a security exposure in some situations.)  Configuring
66     the filesystem with a large journal can also be helpful for
67     metadata-intensive workloads.
68
69 Features
70 ========
71
72 Currently Available
73 -------------------
74
75 * ability to use filesystems > 16TB (e2fsprogs support not available yet)
76 * extent format reduces metadata overhead (RAM, IO for access, transactions)
77 * extent format more robust in face of on-disk corruption due to magics,
78 * internal redundancy in tree
79 * improved file allocation (multi-block alloc)
80 * lift 32000 subdirectory limit imposed by i_links_count[1]
81 * nsec timestamps for mtime, atime, ctime, create time
82 * inode version field on disk (NFSv4, Lustre)
83 * reduced e2fsck time via uninit_bg feature
84 * journal checksumming for robustness, performance
85 * persistent file preallocation (e.g for streaming media, databases)
86 * ability to pack bitmaps and inode tables into larger virtual groups via the
87   flex_bg feature
88 * large file support
89 * inode allocation using large virtual block groups via flex_bg
90 * delayed allocation
91 * large block (up to pagesize) support
92 * efficient new ordered mode in JBD2 and ext4 (avoid using buffer head to force
93   the ordering)
94
95 [1] Filesystems with a block size of 1k may see a limit imposed by the
96 directory hash tree having a maximum depth of two.
97
98 Options
99 =======
100
101 When mounting an ext4 filesystem, the following option are accepted:
102 (*) == default
103
104 ======================= =======================================================
105 Mount Option            Description
106 ======================= =======================================================
107 ro                      Mount filesystem read only. Note that ext4 will
108                         replay the journal (and thus write to the
109                         partition) even when mounted "read only". The
110                         mount options "ro,noload" can be used to prevent
111                         writes to the filesystem.
112
113 journal_checksum        Enable checksumming of the journal transactions.
114                         This will allow the recovery code in e2fsck and the
115                         kernel to detect corruption in the kernel.  It is a
116                         compatible change and will be ignored by older kernels.
117
118 journal_async_commit    Commit block can be written to disk without waiting
119                         for descriptor blocks. If enabled older kernels cannot
120                         mount the device. This will enable 'journal_checksum'
121                         internally.
122
123 journal_path=path
124 journal_dev=devnum      When the external journal device's major/minor numbers
125                         have changed, these options allow the user to specify
126                         the new journal location.  The journal device is
127                         identified through either its new major/minor numbers
128                         encoded in devnum, or via a path to the device.
129
130 norecovery              Don't load the journal on mounting.  Note that
131 noload                  if the filesystem was not unmounted cleanly,
132                         skipping the journal replay will lead to the
133                         filesystem containing inconsistencies that can
134                         lead to any number of problems.
135
136 data=journal            All data are committed into the journal prior to being
137                         written into the main file system.  Enabling
138                         this mode will disable delayed allocation and
139                         O_DIRECT support.
140
141 data=ordered    (*)     All data are forced directly out to the main file
142                         system prior to its metadata being committed to the
143                         journal.
144
145 data=writeback          Data ordering is not preserved, data may be written
146                         into the main file system after its metadata has been
147                         committed to the journal.
148
149 commit=nrsec    (*)     Ext4 can be told to sync all its data and metadata
150                         every 'nrsec' seconds. The default value is 5 seconds.
151                         This means that if you lose your power, you will lose
152                         as much as the latest 5 seconds of work (your
153                         filesystem will not be damaged though, thanks to the
154                         journaling).  This default value (or any low value)
155                         will hurt performance, but it's good for data-safety.
156                         Setting it to 0 will have the same effect as leaving
157                         it at the default (5 seconds).
158                         Setting it to very large values will improve
159                         performance.
160
161 barrier=<0|1(*)>        This enables/disables the use of write barriers in
162 barrier(*)              the jbd code.  barrier=0 disables, barrier=1 enables.
163 nobarrier               This also requires an IO stack which can support
164                         barriers, and if jbd gets an error on a barrier
165                         write, it will disable again with a warning.
166                         Write barriers enforce proper on-disk ordering
167                         of journal commits, making volatile disk write caches
168                         safe to use, at some performance penalty.  If
169                         your disks are battery-backed in one way or another,
170                         disabling barriers may safely improve performance.
171                         The mount options "barrier" and "nobarrier" can
172                         also be used to enable or disable barriers, for
173                         consistency with other ext4 mount options.
174
175 inode_readahead_blks=n  This tuning parameter controls the maximum
176                         number of inode table blocks that ext4's inode
177                         table readahead algorithm will pre-read into
178                         the buffer cache.  The default value is 32 blocks.
179
180 nouser_xattr            Disables Extended User Attributes.  See the
181                         attr(5) manual page for more information about
182                         extended attributes.
183
184 noacl                   This option disables POSIX Access Control List
185                         support. If ACL support is enabled in the kernel
186                         configuration (CONFIG_EXT4_FS_POSIX_ACL), ACL is
187                         enabled by default on mount. See the acl(5) manual
188                         page for more information about acl.
189
190 bsddf           (*)     Make 'df' act like BSD.
191 minixdf                 Make 'df' act like Minix.
192
193 debug                   Extra debugging information is sent to syslog.
194
195 abort                   Simulate the effects of calling ext4_abort() for
196                         debugging purposes.  This is normally used while
197                         remounting a filesystem which is already mounted.
198
199 errors=remount-ro       Remount the filesystem read-only on an error.
200 errors=continue         Keep going on a filesystem error.
201 errors=panic            Panic and halt the machine if an error occurs.
202                         (These mount options override the errors behavior
203                         specified in the superblock, which can be configured
204                         using tune2fs)
205
206 data_err=ignore(*)      Just print an error message if an error occurs
207                         in a file data buffer in ordered mode.
208 data_err=abort          Abort the journal if an error occurs in a file
209                         data buffer in ordered mode.
210
211 grpid                   New objects have the group ID of their parent.
212 bsdgroups
213
214 nogrpid         (*)     New objects have the group ID of their creator.
215 sysvgroups
216
217 resgid=n                The group ID which may use the reserved blocks.
218
219 resuid=n                The user ID which may use the reserved blocks.
220
221 sb=n                    Use alternate superblock at this location.
222
223 quota                   These options are ignored by the filesystem. They
224 noquota                 are used only by quota tools to recognize volumes
225 grpquota                where quota should be turned on. See documentation
226 usrquota                in the quota-tools package for more details
227                         (http://sourceforge.net/projects/linuxquota).
228
229 jqfmt=<quota type>      These options tell filesystem details about quota
230 usrjquota=<file>        so that quota information can be properly updated
231 grpjquota=<file>        during journal replay. They replace the above
232                         quota options. See documentation in the quota-tools
233                         package for more details
234                         (http://sourceforge.net/projects/linuxquota).
235
236 stripe=n                Number of filesystem blocks that mballoc will try
237                         to use for allocation size and alignment. For RAID5/6
238                         systems this should be the number of data
239                         disks *  RAID chunk size in file system blocks.
240
241 delalloc        (*)     Defer block allocation until just before ext4
242                         writes out the block(s) in question.  This
243                         allows ext4 to better allocation decisions
244                         more efficiently.
245 nodelalloc              Disable delayed allocation.  Blocks are allocated
246                         when the data is copied from userspace to the
247                         page cache, either via the write(2) system call
248                         or when an mmap'ed page which was previously
249                         unallocated is written for the first time.
250
251 max_batch_time=usec     Maximum amount of time ext4 should wait for
252                         additional filesystem operations to be batch
253                         together with a synchronous write operation.
254                         Since a synchronous write operation is going to
255                         force a commit and then a wait for the I/O
256                         complete, it doesn't cost much, and can be a
257                         huge throughput win, we wait for a small amount
258                         of time to see if any other transactions can
259                         piggyback on the synchronous write.   The
260                         algorithm used is designed to automatically tune
261                         for the speed of the disk, by measuring the
262                         amount of time (on average) that it takes to
263                         finish committing a transaction.  Call this time
264                         the "commit time".  If the time that the
265                         transaction has been running is less than the
266                         commit time, ext4 will try sleeping for the
267                         commit time to see if other operations will join
268                         the transaction.   The commit time is capped by
269                         the max_batch_time, which defaults to 15000us
270                         (15ms).   This optimization can be turned off
271                         entirely by setting max_batch_time to 0.
272
273 min_batch_time=usec     This parameter sets the commit time (as
274                         described above) to be at least min_batch_time.
275                         It defaults to zero microseconds.  Increasing
276                         this parameter may improve the throughput of
277                         multi-threaded, synchronous workloads on very
278                         fast disks, at the cost of increasing latency.
279
280 journal_ioprio=prio     The I/O priority (from 0 to 7, where 0 is the
281                         highest priority) which should be used for I/O
282                         operations submitted by kjournald2 during a
283                         commit operation.  This defaults to 3, which is
284                         a slightly higher priority than the default I/O
285                         priority.
286
287 auto_da_alloc(*)        Many broken applications don't use fsync() when 
288 noauto_da_alloc         replacing existing files via patterns such as
289                         fd = open("foo.new")/write(fd,..)/close(fd)/
290                         rename("foo.new", "foo"), or worse yet,
291                         fd = open("foo", O_TRUNC)/write(fd,..)/close(fd).
292                         If auto_da_alloc is enabled, ext4 will detect
293                         the replace-via-rename and replace-via-truncate
294                         patterns and force that any delayed allocation
295                         blocks are allocated such that at the next
296                         journal commit, in the default data=ordered
297                         mode, the data blocks of the new file are forced
298                         to disk before the rename() operation is
299                         committed.  This provides roughly the same level
300                         of guarantees as ext3, and avoids the
301                         "zero-length" problem that can happen when a
302                         system crashes before the delayed allocation
303                         blocks are forced to disk.
304
305 noinit_itable           Do not initialize any uninitialized inode table
306                         blocks in the background.  This feature may be
307                         used by installation CD's so that the install
308                         process can complete as quickly as possible; the
309                         inode table initialization process would then be
310                         deferred until the next time the  file system
311                         is unmounted.
312
313 init_itable=n           The lazy itable init code will wait n times the
314                         number of milliseconds it took to zero out the
315                         previous block group's inode table.  This
316                         minimizes the impact on the system performance
317                         while file system's inode table is being initialized.
318
319 discard                 Controls whether ext4 should issue discard/TRIM
320 nodiscard(*)            commands to the underlying block device when
321                         blocks are freed.  This is useful for SSD devices
322                         and sparse/thinly-provisioned LUNs, but it is off
323                         by default until sufficient testing has been done.
324
325 nouid32                 Disables 32-bit UIDs and GIDs.  This is for
326                         interoperability  with  older kernels which only
327                         store and expect 16-bit values.
328
329 block_validity(*)       These options enable or disable the in-kernel
330 noblock_validity        facility for tracking filesystem metadata blocks
331                         within internal data structures.  This allows multi-
332                         block allocator and other routines to notice
333                         bugs or corrupted allocation bitmaps which cause
334                         blocks to be allocated which overlap with
335                         filesystem metadata blocks.
336
337 dioread_lock            Controls whether or not ext4 should use the DIO read
338 dioread_nolock          locking. If the dioread_nolock option is specified
339                         ext4 will allocate uninitialized extent before buffer
340                         write and convert the extent to initialized after IO
341                         completes. This approach allows ext4 code to avoid
342                         using inode mutex, which improves scalability on high
343                         speed storages. However this does not work with
344                         data journaling and dioread_nolock option will be
345                         ignored with kernel warning. Note that dioread_nolock
346                         code path is only used for extent-based files.
347                         Because of the restrictions this options comprises
348                         it is off by default (e.g. dioread_lock).
349
350 max_dir_size_kb=n       This limits the size of directories so that any
351                         attempt to expand them beyond the specified
352                         limit in kilobytes will cause an ENOSPC error.
353                         This is useful in memory constrained
354                         environments, where a very large directory can
355                         cause severe performance problems or even
356                         provoke the Out Of Memory killer.  (For example,
357                         if there is only 512mb memory available, a 176mb
358                         directory may seriously cramp the system's style.)
359
360 i_version               Enable 64-bit inode version support. This option is
361                         off by default.
362
363 dax                     Use direct access (no page cache).  See
364                         Documentation/filesystems/dax.txt.  Note that
365                         this option is incompatible with data=journal.
366 ======================= =======================================================
367
368 Data Mode
369 =========
370 There are 3 different data modes:
371
372 * writeback mode
373
374   In data=writeback mode, ext4 does not journal data at all.  This mode provides
375   a similar level of journaling as that of XFS, JFS, and ReiserFS in its default
376   mode - metadata journaling.  A crash+recovery can cause incorrect data to
377   appear in files which were written shortly before the crash.  This mode will
378   typically provide the best ext4 performance.
379
380 * ordered mode
381
382   In data=ordered mode, ext4 only officially journals metadata, but it logically
383   groups metadata information related to data changes with the data blocks into
384   a single unit called a transaction.  When it's time to write the new metadata
385   out to disk, the associated data blocks are written first.  In general, this
386   mode performs slightly slower than writeback but significantly faster than
387   journal mode.
388
389 * journal mode
390
391   data=journal mode provides full data and metadata journaling.  All new data is
392   written to the journal first, and then to its final location.  In the event of
393   a crash, the journal can be replayed, bringing both data and metadata into a
394   consistent state.  This mode is the slowest except when data needs to be read
395   from and written to disk at the same time where it outperforms all others
396   modes.  Enabling this mode will disable delayed allocation and O_DIRECT
397   support.
398
399 /proc entries
400 =============
401
402 Information about mounted ext4 file systems can be found in
403 /proc/fs/ext4.  Each mounted filesystem will have a directory in
404 /proc/fs/ext4 based on its device name (i.e., /proc/fs/ext4/hdc or
405 /proc/fs/ext4/dm-0).   The files in each per-device directory are shown
406 in table below.
407
408 Files in /proc/fs/ext4/<devname>
409
410 ================ =======
411  File            Content
412 ================ =======
413  mb_groups       details of multiblock allocator buddy cache of free blocks
414 ================ =======
415
416 /sys entries
417 ============
418
419 Information about mounted ext4 file systems can be found in
420 /sys/fs/ext4.  Each mounted filesystem will have a directory in
421 /sys/fs/ext4 based on its device name (i.e., /sys/fs/ext4/hdc or
422 /sys/fs/ext4/dm-0).   The files in each per-device directory are shown
423 in table below.
424
425 Files in /sys/fs/ext4/<devname>:
426
427 (see also Documentation/ABI/testing/sysfs-fs-ext4)
428
429 ============================= =================================================
430 File                          Content
431 ============================= =================================================
432  delayed_allocation_blocks    This file is read-only and shows the number of
433                               blocks that are dirty in the page cache, but
434                               which do not have their location in the
435                               filesystem allocated yet.
436
437 inode_goal                    Tuning parameter which (if non-zero) controls
438                               the goal inode used by the inode allocator in
439                               preference to all other allocation heuristics.
440                               This is intended for debugging use only, and
441                               should be 0 on production systems.
442
443 inode_readahead_blks          Tuning parameter which controls the maximum
444                               number of inode table blocks that ext4's inode
445                               table readahead algorithm will pre-read into
446                               the buffer cache
447
448 lifetime_write_kbytes         This file is read-only and shows the number of
449                               kilobytes of data that have been written to this
450                               filesystem since it was created.
451
452  max_writeback_mb_bump        The maximum number of megabytes the writeback
453                               code will try to write out before move on to
454                               another inode.
455
456  mb_group_prealloc            The multiblock allocator will round up allocation
457                               requests to a multiple of this tuning parameter if
458                               the stripe size is not set in the ext4 superblock
459
460  mb_max_to_scan               The maximum number of extents the multiblock
461                               allocator will search to find the best extent
462
463  mb_min_to_scan               The minimum number of extents the multiblock
464                               allocator will search to find the best extent
465
466  mb_order2_req                Tuning parameter which controls the minimum size
467                               for requests (as a power of 2) where the buddy
468                               cache is used
469
470  mb_stats                     Controls whether the multiblock allocator should
471                               collect statistics, which are shown during the
472                               unmount. 1 means to collect statistics, 0 means
473                               not to collect statistics
474
475  mb_stream_req                Files which have fewer blocks than this tunable
476                               parameter will have their blocks allocated out
477                               of a block group specific preallocation pool, so
478                               that small files are packed closely together.
479                               Each large file will have its blocks allocated
480                               out of its own unique preallocation pool.
481
482  session_write_kbytes         This file is read-only and shows the number of
483                               kilobytes of data that have been written to this
484                               filesystem since it was mounted.
485
486  reserved_clusters            This is RW file and contains number of reserved
487                               clusters in the file system which will be used
488                               in the specific situations to avoid costly
489                               zeroout, unexpected ENOSPC, or possible data
490                               loss. The default is 2% or 4096 clusters,
491                               whichever is smaller and this can be changed
492                               however it can never exceed number of clusters
493                               in the file system. If there is not enough space
494                               for the reserved space when mounting the file
495                               mount will _not_ fail.
496 ============================= =================================================
497
498 Ioctls
499 ======
500
501 There is some Ext4 specific functionality which can be accessed by applications
502 through the system call interfaces. The list of all Ext4 specific ioctls are
503 shown in the table below.
504
505 Table of Ext4 specific ioctls
506
507 ============================= =================================================
508 Ioctl                         Description
509 ============================= =================================================
510  EXT4_IOC_GETFLAGS            Get additional attributes associated with inode.
511                               The ioctl argument is an integer bitfield, with
512                               bit values described in ext4.h. This ioctl is an
513                               alias for FS_IOC_GETFLAGS.
514
515  EXT4_IOC_SETFLAGS            Set additional attributes associated with inode.
516                               The ioctl argument is an integer bitfield, with
517                               bit values described in ext4.h. This ioctl is an
518                               alias for FS_IOC_SETFLAGS.
519
520  EXT4_IOC_GETVERSION
521  EXT4_IOC_GETVERSION_OLD
522                               Get the inode i_generation number stored for
523                               each inode. The i_generation number is normally
524                               changed only when new inode is created and it is
525                               particularly useful for network filesystems. The
526                               '_OLD' version of this ioctl is an alias for
527                               FS_IOC_GETVERSION.
528
529  EXT4_IOC_SETVERSION
530  EXT4_IOC_SETVERSION_OLD
531                               Set the inode i_generation number stored for
532                               each inode. The '_OLD' version of this ioctl
533                               is an alias for FS_IOC_SETVERSION.
534
535  EXT4_IOC_GROUP_EXTEND        This ioctl has the same purpose as the resize
536                               mount option. It allows to resize filesystem
537                               to the end of the last existing block group,
538                               further resize has to be done with resize2fs,
539                               either online, or offline. The argument points
540                               to the unsigned logn number representing the
541                               filesystem new block count.
542
543  EXT4_IOC_MOVE_EXT            Move the block extents from orig_fd (the one
544                               this ioctl is pointing to) to the donor_fd (the
545                               one specified in move_extent structure passed
546                               as an argument to this ioctl). Then, exchange
547                               inode metadata between orig_fd and donor_fd.
548                               This is especially useful for online
549                               defragmentation, because the allocator has the
550                               opportunity to allocate moved blocks better,
551                               ideally into one contiguous extent.
552
553  EXT4_IOC_GROUP_ADD           Add a new group descriptor to an existing or
554                               new group descriptor block. The new group
555                               descriptor is described by ext4_new_group_input
556                               structure, which is passed as an argument to
557                               this ioctl. This is especially useful in
558                               conjunction with EXT4_IOC_GROUP_EXTEND,
559                               which allows online resize of the filesystem
560                               to the end of the last existing block group.
561                               Those two ioctls combined is used in userspace
562                               online resize tool (e.g. resize2fs).
563
564  EXT4_IOC_MIGRATE             This ioctl operates on the filesystem itself.
565                               It converts (migrates) ext3 indirect block mapped
566                               inode to ext4 extent mapped inode by walking
567                               through indirect block mapping of the original
568                               inode and converting contiguous block ranges
569                               into ext4 extents of the temporary inode. Then,
570                               inodes are swapped. This ioctl might help, when
571                               migrating from ext3 to ext4 filesystem, however
572                               suggestion is to create fresh ext4 filesystem
573                               and copy data from the backup. Note, that
574                               filesystem has to support extents for this ioctl
575                               to work.
576
577  EXT4_IOC_ALLOC_DA_BLKS       Force all of the delay allocated blocks to be
578                               allocated to preserve application-expected ext3
579                               behaviour. Note that this will also start
580                               triggering a write of the data blocks, but this
581                               behaviour may change in the future as it is
582                               not necessary and has been done this way only
583                               for sake of simplicity.
584
585  EXT4_IOC_RESIZE_FS           Resize the filesystem to a new size.  The number
586                               of blocks of resized filesystem is passed in via
587                               64 bit integer argument.  The kernel allocates
588                               bitmaps and inode table, the userspace tool thus
589                               just passes the new number of blocks.
590
591  EXT4_IOC_SWAP_BOOT           Swap i_blocks and associated attributes
592                               (like i_blocks, i_size, i_flags, ...) from
593                               the specified inode with inode
594                               EXT4_BOOT_LOADER_INO (#5). This is typically
595                               used to store a boot loader in a secure part of
596                               the filesystem, where it can't be changed by a
597                               normal user by accident.
598                               The data blocks of the previous boot loader
599                               will be associated with the given inode.
600 ============================= =================================================
601
602 References
603 ==========
604
605 kernel source:  <file:fs/ext4/>
606                 <file:fs/jbd2/>
607
608 programs:       http://e2fsprogs.sourceforge.net/
609
610 useful links:   http://fedoraproject.org/wiki/ext3-devel
611                 http://www.bullopensource.org/ext4/
612                 http://ext4.wiki.kernel.org/index.php/Main_Page
613                 http://fedoraproject.org/wiki/Features/Ext4