3103084afc
Signed-off-by: Wang Jianjian <wangjianjian3@huawei.com> Link: https://lore.kernel.org/r/20220520022255.2120576-2-wangjianjian3@huawei.com Signed-off-by: Theodore Ts'o <tytso@mit.edu>
832 lines
23 KiB
ReStructuredText
832 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_orphan_file_inum
|
|
- Orphan file inode number.
|
|
* - 0x284
|
|
- __le32
|
|
- s_reserved[94]
|
|
- 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).
|
|
* - 0x1000
|
|
- Orphan file allocated. This is the special file for more efficient
|
|
tracking of unlinked but still open inodes. When there may be any
|
|
entries in the file, we additionally set proper rocompat feature
|
|
(RO_COMPAT_ORPHAN_PRESENT).
|
|
|
|
.. _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)
|
|
* - 0x10000
|
|
- Indicates orphan file may have valid orphan entries and thus we need
|
|
to clean them up when mounting the filesystem
|
|
(RO_COMPAT_ORPHAN_PRESENT).
|
|
|
|
.. _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.
|