| .. SPDX-License-Identifier: GPL-2.0 | |
| Super Block | |
| ----------- | |
| The superblock records various information about the enclosing | |
| filesystem, such as block counts, inode counts, supported features, | |
| maintenance information, and more. | |
| If the sparse\_super feature flag is set, redundant copies of the | |
| superblock and group descriptors are kept only in the groups whose group | |
| number is either 0 or a power of 3, 5, or 7. If the flag is not set, | |
| redundant copies are kept in all groups. | |
| The superblock checksum is calculated against the superblock structure, | |
| which includes the FS UUID. | |
| The ext4 superblock is laid out as follows in | |
| ``struct ext4_super_block``: | |
| .. list-table:: | |
| :widths: 8 8 24 40 | |
| :header-rows: 1 | |
| * - Offset | |
| - Size | |
| - Name | |
| - Description | |
| * - 0x0 | |
| - \_\_le32 | |
| - s\_inodes\_count | |
| - Total inode count. | |
| * - 0x4 | |
| - \_\_le32 | |
| - s\_blocks\_count\_lo | |
| - Total block count. | |
| * - 0x8 | |
| - \_\_le32 | |
| - s\_r\_blocks\_count\_lo | |
| - This number of blocks can only be allocated by the super-user. | |
| * - 0xC | |
| - \_\_le32 | |
| - s\_free\_blocks\_count\_lo | |
| - Free block count. | |
| * - 0x10 | |
| - \_\_le32 | |
| - s\_free\_inodes\_count | |
| - Free inode count. | |
| * - 0x14 | |
| - \_\_le32 | |
| - s\_first\_data\_block | |
| - First data block. This must be at least 1 for 1k-block filesystems and | |
| is typically 0 for all other block sizes. | |
| * - 0x18 | |
| - \_\_le32 | |
| - s\_log\_block\_size | |
| - Block size is 2 ^ (10 + s\_log\_block\_size). | |
| * - 0x1C | |
| - \_\_le32 | |
| - s\_log\_cluster\_size | |
| - Cluster size is 2 ^ (10 + s\_log\_cluster\_size) blocks if bigalloc is | |
| enabled. Otherwise s\_log\_cluster\_size must equal s\_log\_block\_size. | |
| * - 0x20 | |
| - \_\_le32 | |
| - s\_blocks\_per\_group | |
| - Blocks per group. | |
| * - 0x24 | |
| - \_\_le32 | |
| - s\_clusters\_per\_group | |
| - Clusters per group, if bigalloc is enabled. Otherwise | |
| s\_clusters\_per\_group must equal s\_blocks\_per\_group. | |
| * - 0x28 | |
| - \_\_le32 | |
| - s\_inodes\_per\_group | |
| - Inodes per group. | |
| * - 0x2C | |
| - \_\_le32 | |
| - s\_mtime | |
| - Mount time, in seconds since the epoch. | |
| * - 0x30 | |
| - \_\_le32 | |
| - s\_wtime | |
| - Write time, in seconds since the epoch. | |
| * - 0x34 | |
| - \_\_le16 | |
| - s\_mnt\_count | |
| - Number of mounts since the last fsck. | |
| * - 0x36 | |
| - \_\_le16 | |
| - s\_max\_mnt\_count | |
| - Number of mounts beyond which a fsck is needed. | |
| * - 0x38 | |
| - \_\_le16 | |
| - s\_magic | |
| - Magic signature, 0xEF53 | |
| * - 0x3A | |
| - \_\_le16 | |
| - s\_state | |
| - File system state. See super_state_ for more info. | |
| * - 0x3C | |
| - \_\_le16 | |
| - s\_errors | |
| - Behaviour when detecting errors. See super_errors_ for more info. | |
| * - 0x3E | |
| - \_\_le16 | |
| - s\_minor\_rev\_level | |
| - Minor revision level. | |
| * - 0x40 | |
| - \_\_le32 | |
| - s\_lastcheck | |
| - Time of last check, in seconds since the epoch. | |
| * - 0x44 | |
| - \_\_le32 | |
| - s\_checkinterval | |
| - Maximum time between checks, in seconds. | |
| * - 0x48 | |
| - \_\_le32 | |
| - s\_creator\_os | |
| - Creator OS. See the table super_creator_ for more info. | |
| * - 0x4C | |
| - \_\_le32 | |
| - s\_rev\_level | |
| - Revision level. See the table super_revision_ for more info. | |
| * - 0x50 | |
| - \_\_le16 | |
| - s\_def\_resuid | |
| - Default uid for reserved blocks. | |
| * - 0x52 | |
| - \_\_le16 | |
| - s\_def\_resgid | |
| - Default gid for reserved blocks. | |
| * - | |
| - | |
| - | |
| - These fields are for EXT4_DYNAMIC_REV superblocks only. | |
| Note: the difference between the compatible feature set and the | |
| incompatible feature set is that if there is a bit set in the | |
| incompatible feature set that the kernel doesn't know about, it should | |
| refuse to mount the filesystem. | |
| e2fsck's requirements are more strict; if it doesn't know | |
| about a feature in either the compatible or incompatible feature set, it | |
| must abort and not try to meddle with things it doesn't understand... | |
| * - 0x54 | |
| - \_\_le32 | |
| - s\_first\_ino | |
| - First non-reserved inode. | |
| * - 0x58 | |
| - \_\_le16 | |
| - s\_inode\_size | |
| - Size of inode structure, in bytes. | |
| * - 0x5A | |
| - \_\_le16 | |
| - s\_block\_group\_nr | |
| - Block group # of this superblock. | |
| * - 0x5C | |
| - \_\_le32 | |
| - s\_feature\_compat | |
| - Compatible feature set flags. Kernel can still read/write this fs even | |
| if it doesn't understand a flag; fsck should not do that. See the | |
| super_compat_ table for more info. | |
| * - 0x60 | |
| - \_\_le32 | |
| - s\_feature\_incompat | |
| - Incompatible feature set. If the kernel or fsck doesn't understand one | |
| of these bits, it should stop. See the super_incompat_ table for more | |
| info. | |
| * - 0x64 | |
| - \_\_le32 | |
| - s\_feature\_ro\_compat | |
| - Readonly-compatible feature set. If the kernel doesn't understand one of | |
| these bits, it can still mount read-only. See the super_rocompat_ table | |
| for more info. | |
| * - 0x68 | |
| - \_\_u8 | |
| - s\_uuid[16] | |
| - 128-bit UUID for volume. | |
| * - 0x78 | |
| - char | |
| - s\_volume\_name[16] | |
| - Volume label. | |
| * - 0x88 | |
| - char | |
| - s\_last\_mounted[64] | |
| - Directory where filesystem was last mounted. | |
| * - 0xC8 | |
| - \_\_le32 | |
| - s\_algorithm\_usage\_bitmap | |
| - For compression (Not used in e2fsprogs/Linux) | |
| * - | |
| - | |
| - | |
| - Performance hints. Directory preallocation should only happen if the | |
| EXT4_FEATURE_COMPAT_DIR_PREALLOC flag is on. | |
| * - 0xCC | |
| - \_\_u8 | |
| - s\_prealloc\_blocks | |
| - #. of blocks to try to preallocate for ... files? (Not used in | |
| e2fsprogs/Linux) | |
| * - 0xCD | |
| - \_\_u8 | |
| - s\_prealloc\_dir\_blocks | |
| - #. of blocks to preallocate for directories. (Not used in | |
| e2fsprogs/Linux) | |
| * - 0xCE | |
| - \_\_le16 | |
| - s\_reserved\_gdt\_blocks | |
| - Number of reserved GDT entries for future filesystem expansion. | |
| * - | |
| - | |
| - | |
| - Journalling support is valid only if EXT4_FEATURE_COMPAT_HAS_JOURNAL is | |
| set. | |
| * - 0xD0 | |
| - \_\_u8 | |
| - s\_journal\_uuid[16] | |
| - UUID of journal superblock | |
| * - 0xE0 | |
| - \_\_le32 | |
| - s\_journal\_inum | |
| - inode number of journal file. | |
| * - 0xE4 | |
| - \_\_le32 | |
| - s\_journal\_dev | |
| - Device number of journal file, if the external journal feature flag is | |
| set. | |
| * - 0xE8 | |
| - \_\_le32 | |
| - s\_last\_orphan | |
| - Start of list of orphaned inodes to delete. | |
| * - 0xEC | |
| - \_\_le32 | |
| - s\_hash\_seed[4] | |
| - HTREE hash seed. | |
| * - 0xFC | |
| - \_\_u8 | |
| - s\_def\_hash\_version | |
| - Default hash algorithm to use for directory hashes. See super_def_hash_ | |
| for more info. | |
| * - 0xFD | |
| - \_\_u8 | |
| - s\_jnl\_backup\_type | |
| - If this value is 0 or EXT3\_JNL\_BACKUP\_BLOCKS (1), then the | |
| ``s_jnl_blocks`` field contains a duplicate copy of the inode's | |
| ``i_block[]`` array and ``i_size``. | |
| * - 0xFE | |
| - \_\_le16 | |
| - s\_desc\_size | |
| - Size of group descriptors, in bytes, if the 64bit incompat feature flag | |
| is set. | |
| * - 0x100 | |
| - \_\_le32 | |
| - s\_default\_mount\_opts | |
| - Default mount options. See the super_mountopts_ table for more info. | |
| * - 0x104 | |
| - \_\_le32 | |
| - s\_first\_meta\_bg | |
| - First metablock block group, if the meta\_bg feature is enabled. | |
| * - 0x108 | |
| - \_\_le32 | |
| - s\_mkfs\_time | |
| - When the filesystem was created, in seconds since the epoch. | |
| * - 0x10C | |
| - \_\_le32 | |
| - s\_jnl\_blocks[17] | |
| - Backup copy of the journal inode's ``i_block[]`` array in the first 15 | |
| elements and i\_size\_high and i\_size in the 16th and 17th elements, | |
| respectively. | |
| * - | |
| - | |
| - | |
| - 64bit support is valid only if EXT4_FEATURE_COMPAT_64BIT is set. | |
| * - 0x150 | |
| - \_\_le32 | |
| - s\_blocks\_count\_hi | |
| - High 32-bits of the block count. | |
| * - 0x154 | |
| - \_\_le32 | |
| - s\_r\_blocks\_count\_hi | |
| - High 32-bits of the reserved block count. | |
| * - 0x158 | |
| - \_\_le32 | |
| - s\_free\_blocks\_count\_hi | |
| - High 32-bits of the free block count. | |
| * - 0x15C | |
| - \_\_le16 | |
| - s\_min\_extra\_isize | |
| - All inodes have at least # bytes. | |
| * - 0x15E | |
| - \_\_le16 | |
| - s\_want\_extra\_isize | |
| - New inodes should reserve # bytes. | |
| * - 0x160 | |
| - \_\_le32 | |
| - s\_flags | |
| - Miscellaneous flags. See the super_flags_ table for more info. | |
| * - 0x164 | |
| - \_\_le16 | |
| - s\_raid\_stride | |
| - RAID stride. This is the number of logical blocks read from or written | |
| to the disk before moving to the next disk. This affects the placement | |
| of filesystem metadata, which will hopefully make RAID storage faster. | |
| * - 0x166 | |
| - \_\_le16 | |
| - s\_mmp\_interval | |
| - #. seconds to wait in multi-mount prevention (MMP) checking. In theory, | |
| MMP is a mechanism to record in the superblock which host and device | |
| have mounted the filesystem, in order to prevent multiple mounts. This | |
| feature does not seem to be implemented... | |
| * - 0x168 | |
| - \_\_le64 | |
| - s\_mmp\_block | |
| - Block # for multi-mount protection data. | |
| * - 0x170 | |
| - \_\_le32 | |
| - s\_raid\_stripe\_width | |
| - RAID stripe width. This is the number of logical blocks read from or | |
| written to the disk before coming back to the current disk. This is used | |
| by the block allocator to try to reduce the number of read-modify-write | |
| operations in a RAID5/6. | |
| * - 0x174 | |
| - \_\_u8 | |
| - s\_log\_groups\_per\_flex | |
| - Size of a flexible block group is 2 ^ ``s_log_groups_per_flex``. | |
| * - 0x175 | |
| - \_\_u8 | |
| - s\_checksum\_type | |
| - Metadata checksum algorithm type. The only valid value is 1 (crc32c). | |
| * - 0x176 | |
| - \_\_le16 | |
| - s\_reserved\_pad | |
| - | |
| * - 0x178 | |
| - \_\_le64 | |
| - s\_kbytes\_written | |
| - Number of KiB written to this filesystem over its lifetime. | |
| * - 0x180 | |
| - \_\_le32 | |
| - s\_snapshot\_inum | |
| - inode number of active snapshot. (Not used in e2fsprogs/Linux.) | |
| * - 0x184 | |
| - \_\_le32 | |
| - s\_snapshot\_id | |
| - Sequential ID of active snapshot. (Not used in e2fsprogs/Linux.) | |
| * - 0x188 | |
| - \_\_le64 | |
| - s\_snapshot\_r\_blocks\_count | |
| - Number of blocks reserved for active snapshot's future use. (Not used in | |
| e2fsprogs/Linux.) | |
| * - 0x190 | |
| - \_\_le32 | |
| - s\_snapshot\_list | |
| - inode number of the head of the on-disk snapshot list. (Not used in | |
| e2fsprogs/Linux.) | |
| * - 0x194 | |
| - \_\_le32 | |
| - s\_error\_count | |
| - Number of errors seen. | |
| * - 0x198 | |
| - \_\_le32 | |
| - s\_first\_error\_time | |
| - First time an error happened, in seconds since the epoch. | |
| * - 0x19C | |
| - \_\_le32 | |
| - s\_first\_error\_ino | |
| - inode involved in first error. | |
| * - 0x1A0 | |
| - \_\_le64 | |
| - s\_first\_error\_block | |
| - Number of block involved of first error. | |
| * - 0x1A8 | |
| - \_\_u8 | |
| - s\_first\_error\_func[32] | |
| - Name of function where the error happened. | |
| * - 0x1C8 | |
| - \_\_le32 | |
| - s\_first\_error\_line | |
| - Line number where error happened. | |
| * - 0x1CC | |
| - \_\_le32 | |
| - s\_last\_error\_time | |
| - Time of most recent error, in seconds since the epoch. | |
| * - 0x1D0 | |
| - \_\_le32 | |
| - s\_last\_error\_ino | |
| - inode involved in most recent error. | |
| * - 0x1D4 | |
| - \_\_le32 | |
| - s\_last\_error\_line | |
| - Line number where most recent error happened. | |
| * - 0x1D8 | |
| - \_\_le64 | |
| - s\_last\_error\_block | |
| - Number of block involved in most recent error. | |
| * - 0x1E0 | |
| - \_\_u8 | |
| - s\_last\_error\_func[32] | |
| - Name of function where the most recent error happened. | |
| * - 0x200 | |
| - \_\_u8 | |
| - s\_mount\_opts[64] | |
| - ASCIIZ string of mount options. | |
| * - 0x240 | |
| - \_\_le32 | |
| - s\_usr\_quota\_inum | |
| - Inode number of user `quota <quota>`__ file. | |
| * - 0x244 | |
| - \_\_le32 | |
| - s\_grp\_quota\_inum | |
| - Inode number of group `quota <quota>`__ file. | |
| * - 0x248 | |
| - \_\_le32 | |
| - s\_overhead\_blocks | |
| - Overhead blocks/clusters in fs. (Huh? This field is always zero, which | |
| means that the kernel calculates it dynamically.) | |
| * - 0x24C | |
| - \_\_le32 | |
| - s\_backup\_bgs[2] | |
| - Block groups containing superblock backups (if sparse\_super2) | |
| * - 0x254 | |
| - \_\_u8 | |
| - s\_encrypt\_algos[4] | |
| - Encryption algorithms in use. There can be up to four algorithms in use | |
| at any time; valid algorithm codes are given in the super_encrypt_ table | |
| below. | |
| * - 0x258 | |
| - \_\_u8 | |
| - s\_encrypt\_pw\_salt[16] | |
| - Salt for the string2key algorithm for encryption. | |
| * - 0x268 | |
| - \_\_le32 | |
| - s\_lpf\_ino | |
| - Inode number of lost+found | |
| * - 0x26C | |
| - \_\_le32 | |
| - s\_prj\_quota\_inum | |
| - Inode that tracks project quotas. | |
| * - 0x270 | |
| - \_\_le32 | |
| - s\_checksum\_seed | |
| - Checksum seed used for metadata\_csum calculations. This value is | |
| crc32c(~0, $orig\_fs\_uuid). | |
| * - 0x274 | |
| - \_\_u8 | |
| - s\_wtime_hi | |
| - Upper 8 bits of the s_wtime field. | |
| * - 0x275 | |
| - \_\_u8 | |
| - s\_mtime_hi | |
| - Upper 8 bits of the s_mtime field. | |
| * - 0x276 | |
| - \_\_u8 | |
| - s\_mkfs_time_hi | |
| - Upper 8 bits of the s_mkfs_time field. | |
| * - 0x277 | |
| - \_\_u8 | |
| - s\_lastcheck_hi | |
| - Upper 8 bits of the s_lastcheck_hi field. | |
| * - 0x278 | |
| - \_\_u8 | |
| - s\_first_error_time_hi | |
| - Upper 8 bits of the s_first_error_time_hi field. | |
| * - 0x279 | |
| - \_\_u8 | |
| - s\_last_error_time_hi | |
| - Upper 8 bits of the s_last_error_time_hi field. | |
| * - 0x27A | |
| - \_\_u8 | |
| - s\_pad[2] | |
| - Zero padding. | |
| * - 0x27C | |
| - \_\_le16 | |
| - s\_encoding | |
| - Filename charset encoding. | |
| * - 0x27E | |
| - \_\_le16 | |
| - s\_encoding_flags | |
| - Filename charset encoding flags. | |
| * - 0x280 | |
| - \_\_le32 | |
| - s\_reserved[95] | |
| - Padding to the end of the block. | |
| * - 0x3FC | |
| - \_\_le32 | |
| - s\_checksum | |
| - Superblock checksum. | |
| .. _super_state: | |
| The superblock state is some combination of the following: | |
| .. list-table:: | |
| :widths: 8 72 | |
| :header-rows: 1 | |
| * - Value | |
| - Description | |
| * - 0x0001 | |
| - Cleanly umounted | |
| * - 0x0002 | |
| - Errors detected | |
| * - 0x0004 | |
| - Orphans being recovered | |
| .. _super_errors: | |
| The superblock error policy is one of the following: | |
| .. list-table:: | |
| :widths: 8 72 | |
| :header-rows: 1 | |
| * - Value | |
| - Description | |
| * - 1 | |
| - Continue | |
| * - 2 | |
| - Remount read-only | |
| * - 3 | |
| - Panic | |
| .. _super_creator: | |
| The filesystem creator is one of the following: | |
| .. list-table:: | |
| :widths: 8 72 | |
| :header-rows: 1 | |
| * - Value | |
| - Description | |
| * - 0 | |
| - Linux | |
| * - 1 | |
| - Hurd | |
| * - 2 | |
| - Masix | |
| * - 3 | |
| - FreeBSD | |
| * - 4 | |
| - Lites | |
| .. _super_revision: | |
| The superblock revision is one of the following: | |
| .. list-table:: | |
| :widths: 8 72 | |
| :header-rows: 1 | |
| * - Value | |
| - Description | |
| * - 0 | |
| - Original format | |
| * - 1 | |
| - v2 format w/ dynamic inode sizes | |
| Note that ``EXT4_DYNAMIC_REV`` refers to a revision 1 or newer filesystem. | |
| .. _super_compat: | |
| The superblock compatible features field is a combination of any of the | |
| following: | |
| .. list-table:: | |
| :widths: 16 64 | |
| :header-rows: 1 | |
| * - Value | |
| - Description | |
| * - 0x1 | |
| - Directory preallocation (COMPAT\_DIR\_PREALLOC). | |
| * - 0x2 | |
| - “imagic inodes”. Not clear from the code what this does | |
| (COMPAT\_IMAGIC\_INODES). | |
| * - 0x4 | |
| - Has a journal (COMPAT\_HAS\_JOURNAL). | |
| * - 0x8 | |
| - Supports extended attributes (COMPAT\_EXT\_ATTR). | |
| * - 0x10 | |
| - Has reserved GDT blocks for filesystem expansion | |
| (COMPAT\_RESIZE\_INODE). Requires RO\_COMPAT\_SPARSE\_SUPER. | |
| * - 0x20 | |
| - Has directory indices (COMPAT\_DIR\_INDEX). | |
| * - 0x40 | |
| - “Lazy BG”. Not in Linux kernel, seems to have been for uninitialized | |
| block groups? (COMPAT\_LAZY\_BG) | |
| * - 0x80 | |
| - “Exclude inode”. Not used. (COMPAT\_EXCLUDE\_INODE). | |
| * - 0x100 | |
| - “Exclude bitmap”. Seems to be used to indicate the presence of | |
| snapshot-related exclude bitmaps? Not defined in kernel or used in | |
| e2fsprogs (COMPAT\_EXCLUDE\_BITMAP). | |
| * - 0x200 | |
| - Sparse Super Block, v2. If this flag is set, the SB field s\_backup\_bgs | |
| points to the two block groups that contain backup superblocks | |
| (COMPAT\_SPARSE\_SUPER2). | |
| * - 0x400 | |
| - Fast commits supported. Although fast commits blocks are | |
| backward incompatible, fast commit blocks are not always | |
| present in the journal. If fast commit blocks are present in | |
| the journal, JBD2 incompat feature | |
| (JBD2\_FEATURE\_INCOMPAT\_FAST\_COMMIT) gets | |
| set (COMPAT\_FAST\_COMMIT). | |
| .. _super_incompat: | |
| The superblock incompatible features field is a combination of any of the | |
| following: | |
| .. list-table:: | |
| :widths: 16 64 | |
| :header-rows: 1 | |
| * - Value | |
| - Description | |
| * - 0x1 | |
| - Compression (INCOMPAT\_COMPRESSION). | |
| * - 0x2 | |
| - Directory entries record the file type. See ext4\_dir\_entry\_2 below | |
| (INCOMPAT\_FILETYPE). | |
| * - 0x4 | |
| - Filesystem needs recovery (INCOMPAT\_RECOVER). | |
| * - 0x8 | |
| - Filesystem has a separate journal device (INCOMPAT\_JOURNAL\_DEV). | |
| * - 0x10 | |
| - Meta block groups. See the earlier discussion of this feature | |
| (INCOMPAT\_META\_BG). | |
| * - 0x40 | |
| - Files in this filesystem use extents (INCOMPAT\_EXTENTS). | |
| * - 0x80 | |
| - Enable a filesystem size of 2^64 blocks (INCOMPAT\_64BIT). | |
| * - 0x100 | |
| - Multiple mount protection (INCOMPAT\_MMP). | |
| * - 0x200 | |
| - Flexible block groups. See the earlier discussion of this feature | |
| (INCOMPAT\_FLEX\_BG). | |
| * - 0x400 | |
| - Inodes can be used to store large extended attribute values | |
| (INCOMPAT\_EA\_INODE). | |
| * - 0x1000 | |
| - Data in directory entry (INCOMPAT\_DIRDATA). (Not implemented?) | |
| * - 0x2000 | |
| - Metadata checksum seed is stored in the superblock. This feature enables | |
| the administrator to change the UUID of a metadata\_csum filesystem | |
| while the filesystem is mounted; without it, the checksum definition | |
| requires all metadata blocks to be rewritten (INCOMPAT\_CSUM\_SEED). | |
| * - 0x4000 | |
| - Large directory >2GB or 3-level htree (INCOMPAT\_LARGEDIR). Prior to | |
| this feature, directories could not be larger than 4GiB and could not | |
| have an htree more than 2 levels deep. If this feature is enabled, | |
| directories can be larger than 4GiB and have a maximum htree depth of 3. | |
| * - 0x8000 | |
| - Data in inode (INCOMPAT\_INLINE\_DATA). | |
| * - 0x10000 | |
| - Encrypted inodes are present on the filesystem. (INCOMPAT\_ENCRYPT). | |
| .. _super_rocompat: | |
| The superblock read-only compatible features field is a combination of any of | |
| the following: | |
| .. list-table:: | |
| :widths: 16 64 | |
| :header-rows: 1 | |
| * - Value | |
| - Description | |
| * - 0x1 | |
| - Sparse superblocks. See the earlier discussion of this feature | |
| (RO\_COMPAT\_SPARSE\_SUPER). | |
| * - 0x2 | |
| - This filesystem has been used to store a file greater than 2GiB | |
| (RO\_COMPAT\_LARGE\_FILE). | |
| * - 0x4 | |
| - Not used in kernel or e2fsprogs (RO\_COMPAT\_BTREE\_DIR). | |
| * - 0x8 | |
| - This filesystem has files whose sizes are represented in units of | |
| logical blocks, not 512-byte sectors. This implies a very large file | |
| indeed! (RO\_COMPAT\_HUGE\_FILE) | |
| * - 0x10 | |
| - Group descriptors have checksums. In addition to detecting corruption, | |
| this is useful for lazy formatting with uninitialized groups | |
| (RO\_COMPAT\_GDT\_CSUM). | |
| * - 0x20 | |
| - Indicates that the old ext3 32,000 subdirectory limit no longer applies | |
| (RO\_COMPAT\_DIR\_NLINK). A directory's i\_links\_count will be set to 1 | |
| if it is incremented past 64,999. | |
| * - 0x40 | |
| - Indicates that large inodes exist on this filesystem | |
| (RO\_COMPAT\_EXTRA\_ISIZE). | |
| * - 0x80 | |
| - This filesystem has a snapshot (RO\_COMPAT\_HAS\_SNAPSHOT). | |
| * - 0x100 | |
| - `Quota <Quota>`__ (RO\_COMPAT\_QUOTA). | |
| * - 0x200 | |
| - This filesystem supports “bigalloc”, which means that file extents are | |
| tracked in units of clusters (of blocks) instead of blocks | |
| (RO\_COMPAT\_BIGALLOC). | |
| * - 0x400 | |
| - This filesystem supports metadata checksumming. | |
| (RO\_COMPAT\_METADATA\_CSUM; implies RO\_COMPAT\_GDT\_CSUM, though | |
| GDT\_CSUM must not be set) | |
| * - 0x800 | |
| - Filesystem supports replicas. This feature is neither in the kernel nor | |
| e2fsprogs. (RO\_COMPAT\_REPLICA) | |
| * - 0x1000 | |
| - Read-only filesystem image; the kernel will not mount this image | |
| read-write and most tools will refuse to write to the image. | |
| (RO\_COMPAT\_READONLY) | |
| * - 0x2000 | |
| - Filesystem tracks project quotas. (RO\_COMPAT\_PROJECT) | |
| * - 0x8000 | |
| - Verity inodes may be present on the filesystem. (RO\_COMPAT\_VERITY) | |
| .. _super_def_hash: | |
| The ``s_def_hash_version`` field is one of the following: | |
| .. list-table:: | |
| :widths: 8 72 | |
| :header-rows: 1 | |
| * - Value | |
| - Description | |
| * - 0x0 | |
| - Legacy. | |
| * - 0x1 | |
| - Half MD4. | |
| * - 0x2 | |
| - Tea. | |
| * - 0x3 | |
| - Legacy, unsigned. | |
| * - 0x4 | |
| - Half MD4, unsigned. | |
| * - 0x5 | |
| - Tea, unsigned. | |
| .. _super_mountopts: | |
| The ``s_default_mount_opts`` field is any combination of the following: | |
| .. list-table:: | |
| :widths: 8 72 | |
| :header-rows: 1 | |
| * - Value | |
| - Description | |
| * - 0x0001 | |
| - Print debugging info upon (re)mount. (EXT4\_DEFM\_DEBUG) | |
| * - 0x0002 | |
| - New files take the gid of the containing directory (instead of the fsgid | |
| of the current process). (EXT4\_DEFM\_BSDGROUPS) | |
| * - 0x0004 | |
| - Support userspace-provided extended attributes. (EXT4\_DEFM\_XATTR\_USER) | |
| * - 0x0008 | |
| - Support POSIX access control lists (ACLs). (EXT4\_DEFM\_ACL) | |
| * - 0x0010 | |
| - Do not support 32-bit UIDs. (EXT4\_DEFM\_UID16) | |
| * - 0x0020 | |
| - All data and metadata are commited to the journal. | |
| (EXT4\_DEFM\_JMODE\_DATA) | |
| * - 0x0040 | |
| - All data are flushed to the disk before metadata are committed to the | |
| journal. (EXT4\_DEFM\_JMODE\_ORDERED) | |
| * - 0x0060 | |
| - Data ordering is not preserved; data may be written after the metadata | |
| has been written. (EXT4\_DEFM\_JMODE\_WBACK) | |
| * - 0x0100 | |
| - Disable write flushes. (EXT4\_DEFM\_NOBARRIER) | |
| * - 0x0200 | |
| - Track which blocks in a filesystem are metadata and therefore should not | |
| be used as data blocks. This option will be enabled by default on 3.18, | |
| hopefully. (EXT4\_DEFM\_BLOCK\_VALIDITY) | |
| * - 0x0400 | |
| - Enable DISCARD support, where the storage device is told about blocks | |
| becoming unused. (EXT4\_DEFM\_DISCARD) | |
| * - 0x0800 | |
| - Disable delayed allocation. (EXT4\_DEFM\_NODELALLOC) | |
| .. _super_flags: | |
| The ``s_flags`` field is any combination of the following: | |
| .. list-table:: | |
| :widths: 8 72 | |
| :header-rows: 1 | |
| * - Value | |
| - Description | |
| * - 0x0001 | |
| - Signed directory hash in use. | |
| * - 0x0002 | |
| - Unsigned directory hash in use. | |
| * - 0x0004 | |
| - To test development code. | |
| .. _super_encrypt: | |
| The ``s_encrypt_algos`` list can contain any of the following: | |
| .. list-table:: | |
| :widths: 8 72 | |
| :header-rows: 1 | |
| * - Value | |
| - Description | |
| * - 0 | |
| - Invalid algorithm (ENCRYPTION\_MODE\_INVALID). | |
| * - 1 | |
| - 256-bit AES in XTS mode (ENCRYPTION\_MODE\_AES\_256\_XTS). | |
| * - 2 | |
| - 256-bit AES in GCM mode (ENCRYPTION\_MODE\_AES\_256\_GCM). | |
| * - 3 | |
| - 256-bit AES in CBC mode (ENCRYPTION\_MODE\_AES\_256\_CBC). | |
| Total size of the superblock is 1024 bytes. |