819 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			819 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| .. 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.
 |