Fact-checked by Grok 2 weeks ago

ext4

ext4, or the fourth extended filesystem, is a high-performance optimized for kernels, serving as the direct successor to with enhancements in scalability, reliability, and efficiency to handle large-scale storage environments. Developed as an extension of the ext3 journaling mechanism, ext4 was initially proposed in 2006 and merged into the mainline with version 2.6.28 in October 2008, enabling backward compatibility with and ext3 while introducing advanced features for modern hardware. A core innovation in ext4 is its use of extents, which replace traditional block mapping to reduce overhead, minimize fragmentation, and improve for large files by allocating contiguous blocks more efficiently. This allows ext4 to support maximum file sizes of up to 16 terabytes and filesystem volumes exceeding 1 exabyte (theoretical limit), far surpassing ext3's constraints of 16 terabytes for filesystems and 2 terabytes for files. Additional optimizations include delayed allocation, which defers block assignment until data is flushed to disk, reducing fragmentation and enabling multi-block allocations; persistent preallocation, for reserving space for future writes; and stripe-aware allocation, which optimizes data placement on arrays. Journal checksumming further enhances by verifying log entries, while features like subsecond timestamps, extended attributes, quota journaling, and unlimited subdirectories (unlike ext3's 32,000 limit) provide greater flexibility for complex directory structures and user quotas. ext4 maintains ext3's journaling modes—writeback, ordered (default), and —for and consistency during crashes, but adds refinements like faster filesystem checks via the uninit_bg , which skips unallocated block groups during e2fsck scans. It also supports advanced capabilities such as case-insensitive name lookups, file-based encryption, and verity for integrity verification, making it suitable for diverse applications from servers to systems. Overall, ext4's design balances robustness with efficiency, positioning it as the default filesystem in many distributions as of 2025 due to its proven stability and ongoing evolution within the .

History and Development

Origins and Evolution

The second extended filesystem, known as , was developed in 1993 by Rémy Card, Theodore Ts'o, and Stephen Tweedie as a major rewrite of the original Extended Filesystem (ext) to address limitations in performance and scalability for early kernels. Released in January 1993 with 0.99, ext2 provided a robust, non-journaling structure with support for up to 4 filesystems and 2 GiB files using indirect block addressing, but it lacked mechanisms for crash recovery, leading to lengthy filesystem checks after power failures. This design prioritized simplicity and compatibility with systems while enabling efficient disk space allocation through block groups and inodes. Ext3 emerged in 2001 as an incremental enhancement to , introducing journaling capabilities developed primarily by Stephen Tweedie to improve and recovery times. Merged into the 2.4.15 in November 2001, added a to log and optionally data changes before committing them to disk, reducing the risk of corruption and enabling faster operations—often from hours to seconds. However, retained ext2's core on-disk format for , inheriting limitations such as a 16 TiB maximum filesystem size, 2 TiB file size cap (or 16 GiB without large file support), and increasing fragmentation for large files due to reliance on indirect blocks, which fragmented allocation and degraded performance as disk capacities grew beyond terabyte scales. To overcome these constraints, ext4 development was initiated in 2006 by the community, led by Theodore Ts'o, as a forward-compatible evolution of aimed at supporting modern hardware with multi-terabyte drives. On June 28, 2006, Ts'o proposed a new filesystem branch, initially called "ext3dev," to enable experimental features without destabilizing , focusing on scalability for volumes up to 1 EiB and files up to 16 TiB through 48-bit block addressing. Key motivations included mitigating fragmentation and performance bottlenecks from indirect blocks by introducing extents—contiguous block ranges that reduce metadata overhead and improve allocation efficiency for large files—while ensuring ext4 could mount and operate on and filesystems seamlessly. This was central, allowing gradual adoption without . The initial ext4 patches appeared in Linux kernel 2.6.19 in late 2006 as an experimental option, with core features like extents and delayed allocation stabilizing through community contributions from developers at Red Hat, Oracle, and others. By January 2008, Ts'o outlined merge plans for kernel 2.6.25, emphasizing production readiness, and ext4 achieved stable status with the release of Linux 2.6.28 in December 2008, marking its transition from development to a default filesystem choice. This evolution reflected the Linux kernel's iterative approach, building on ext2's foundational design while incrementally addressing reliability (via journaling in ext3) and scalability needs in ext4.

Key Milestones and Releases

The development of ext4 commenced with the submission of initial experimental patches to the version 2.6.19 in 2006, marking the filesystem's early prototyping as a successor to ext3. These patches laid the groundwork for enhanced scalability and performance features. Full integration into the mainline occurred with version 2.6.28, released on December 25, 2008, enabling broader testing and adoption. Ext4 was declared stable with 2.6.28, released in December 2008, transitioning from experimental status to a production-ready filesystem suitable for general use. Concurrently, user-space support advanced with the release of version 1.41 in 2008, which introduced tools for creating, maintaining, and resizing ext4 filesystems. Subsequent major updates focused on reliability and efficiency. Extent support, enabling contiguous allocation for large files to reduce fragmentation, was introduced with the stable release in 2.6.28. In December 2014, kernel version 3.18 introduced metadata checksums, adding CRC32C verification to superblocks, inodes, and other structures to detect and prevent corruption. As of November 2025, ext4 continues to evolve within the . Additionally, ext4 remains a core component in kernels, providing robust storage management in Android 15 (based on 5.15) and later versions with enhancements for mobile workloads.

Core Features

Journaling and Reliability

Ext4 employs a journaling mechanism based on the Journaling Block Device version 2 (JBD2) layer to enhance and enable rapid from system crashes or power failures. This approach logs filesystem —and optionally —before applying changes to the main filesystem, allowing the to replay committed transactions during mount to restore consistency without full scans. By default, ext4 uses the data=ordered mode, which journals while ensuring that associated blocks are written to their final locations on disk before the corresponding is committed to the journal, thereby preventing partial writes from corrupting file contents. Ext4 supports three primary journaling modes, configurable via the mount option "data=" to balance and . In data=ordered mode—the default—ext4 journals only , but enforces an ordering barrier so that all is flushed to the main filesystem prior to committing the , offering guarantees similar to traditional Unix filesystems. The data=writeback mode journals without enforcing ordering, allowing unwritten or partially written to appear in files after recovery from a , which improves write but reduces reliability in scenarios. For maximum , data=journal mode fully journals both and by writing all new or modified blocks to the journal first before copying them to their permanent locations, though this incurs the highest overhead and disables features like delayed allocation. The is structured as a circular log within a dedicated area, typically represented as a hidden inode (often inode number 8) whose initial 68 bytes are duplicated in the ext4 for quick access. Each consists of a (1024 bytes, containing journal size, log start position, and state flags), one or more descriptor blocks listing modified blocks, the data or blocks themselves, and a commit block to mark completion. The journal can be embedded internally—ideally placed in a full block group near the middle of the disk for optimal —or hosted externally on a separate device, with sizes ranging up to 2^32 blocks, far exceeding practical limits for most systems. Upon mounting after an unclean shutdown, ext4 initiates by scanning the from the last commit record, replaying valid transactions (those with matching numbers and checksums) to apply pending changes while discarding incomplete or ones, ensuring the filesystem returns to a consistent state without in supported modes. blocks further protect integrity by explicitly canceling superseded transactions, preventing erroneous replays. Compared to , which shares the same JBD2 foundation, ext4 introduces write barriers by default to guarantee that data reaches stable storage before commit records, mitigating corruption risks on power-loss events that ext3 handled less reliably without explicit enabling. Additionally, ext4 supports significantly larger sizes—up to 32,768 blocks or more—allowing it to buffer more transactions and reduce commit frequency for better performance under heavy loads, while ext3 was limited to smaller journals typically around 32 MB.

Extents and Allocation

Ext4 employs extents as a core mechanism for managing , replacing the traditional indirect used in earlier ext systems. An extent represents a contiguous range of logical in a mapped to a contiguous range of physical on disk, defined by a starting number, length, and starting physical location. This approach significantly reduces fragmentation by consolidating multiple pointers into single entries, enabling more efficient storage and access for large . The extent tree structure begins in the inode's i_block array, which serves as the root level containing an extent header followed by up to four direct extent entries when the tree depth is zero. Each extent entry, part of the ext4_extent structure, includes fields for the logical block (ee_block, 32 bits), length (ee_len, 16 bits, up to 32,767 blocks for uninitialized or 32,768 for initialized extents), and physical block start (48-bit addressing via ee_start_lo and ee_start_hi). For files requiring more than four extents, the structure expands into a multi-level tree with a maximum depth of five, where interior nodes use ext4_extent_idx entries to index leaf nodes holding the actual extent mappings; each non-root node occupies a full block, allowing hundreds of entries per level depending on block size. This tree format, with its header including magic numbers, entry count, and depth, provides robustness against corruption through built-in checks. The inode's integration with extents repurposes the i_block field from block pointers to this header, enabling seamless support for the feature without altering the overall inode size. By using extents, ext4 achieves substantial benefits in handling large files, supporting maximum file sizes up to 16 tebibytes (with 4 KiB blocks) while incurring minimal metadata overhead— a single extent can map up to approximately 128 mebibytes of contiguous data, far surpassing the limitations of indirect pointers that would require thousands of entries for the same range. This contiguity minimizes internal fragmentation and reduces seek times on hard disk drives by promoting sequential access patterns, leading to improved read and write performance for multimedia and database workloads. In contrast to block-based systems, extents lower the overall metadata footprint, allowing more efficient use of disk space and faster filesystem operations. Block allocation in ext4 is handled by the multi-block allocator (mballoc), which optimizes for creating large, contiguous extents rather than isolated . mballoc operates across block groups using buddy-style bitmaps and free extent tracking to identify and reserve clusters of available , considering factors like locality, preallocation spaces per CPU or inode, and alignment for striped storage. When allocating for a file, it requests multiple in a single operation, grouping them into extents to maximize contiguity and minimize allocation overhead; for instance, it can allocate up to the block group size (typically 128 ) in one extent if space permits. This allocator integrates directly with the extent tree, inserting new extents or merging adjacent ones to maintain efficiency over repeated writes.

Large File and Volume Support

Ext4 significantly enhances support for large files and volumes compared to its predecessors, enabling scalability to petabyte-scale storage environments. The filesystem's theoretical maximum size is 1 EiB (2^{60} bytes) when using 4 KiB blocks, achieved through the adoption of 48-bit block addressing, which allows for up to 2^{48} blocks. This addressing scheme expands beyond ext3's 32-bit limitation, which capped volumes at 16 TiB with the same block size. On 32-bit systems, the volume limit is 16 TiB due to 32-bit addressing constraints, while 64-bit systems support up to 1 EiB theoretically; some distributions impose practical limits like 50 TiB on 64-bit systems for verified stability. Individual file sizes in ext4 are limited to 16 (2^{44} bytes), facilitated by the huge_file feature flag (EXT4_HUGE_FILE_FL), which enables inodes to track block counts in filesystem block units rather than the traditional 512-byte sectors. This allows files exceeding 2 —previously constrained in —without relying on extent trees for allocation, though extents are often used in tandem for efficiency. To accommodate these larger structures, ext4 expands the default inode size to 256 bytes from ext3's 128 bytes, providing additional space for extended attributes and precise . As of 6.16 (2025), ext4 includes optimizations like enhanced fast-commit and atomic multi-block writes, further improving scalability for large files and volumes. The expanded inode also supports advanced timestamping, with 64-bit fields offering resolution and an extended range up to May 2446, avoiding the 2038 problem inherent in 32-bit Unix timestamps. This is accomplished by borrowing two bits from the nanosecond field for extension, covering over 400 years from the Unix . For with , ext4 filesystems can be mounted using options that disable incompatible features, such as nohuge_file or mounting with the ext3 driver, ensuring while limiting new files to ext3's constraints like 2 maximum size. Block group organization, as defined in the , underpins this scalability by distributing metadata across groups to handle the vast efficiently.

On-Disk Architecture

Superblock and Global Metadata

The superblock serves as the foundational metadata structure for the ext4 filesystem, encoding essential global information that allows the operating system to interpret and manage the entire volume. It is a fixed-size structure of 1024 bytes, located at byte offset 1024 from the beginning of the filesystem (corresponding to block 1 for a 1 KiB block size, or block 0 in configurations where the initial sector is skipped). This positioning ensures compatibility with bootloaders and partition tables that may occupy the first 1024 bytes. The superblock begins with a magic number 0xEF53 at offset 0x38, which uniquely identifies it as part of an ext2/ext3/ext4 family filesystem and enables fsck tools to validate its presence. The block size is also recorded here via the s_log_block_size field (offset 0x18), supporting sizes from 1 KiB to 64 KiB as 1024 × 2^{s_log_block_size}, while the total inode count is stored in s_inodes_count (offset 0x0). Key fields in the provide counts and timestamps critical for filesystem operations and maintenance. It includes the total number of blocks (s_blocks_count_lo at offset 0x4 plus s_blocks_count_hi at 0x150 for 64-bit support) and free blocks (s_free_blocks_count_lo at 0x0C plus s_free_blocks_count_hi at 0x158), alongside similar counts for inodes (s_free_inodes_count at 0x10). Timestamps such as the last mount time (s_mtime at offset 0x2C), the time of the last write to the filesystem (s_wtime at 0x30), and the last consistency check by e2fsck (s_lastcheck at offset 0x40) are stored as Unix timestamps, aiding in error detection and scheduling maintenance. The revision level (s_rev_level at offset 0x4C) distinguishes between level 0 (static layout, inherited from ) and level 1 (dynamic, introduced in and enhanced in ext4 to support variable inode sizes via s_inode_size at 0x58). Additionally, the filesystem UUID (s_uuid at offset 0x68, 16 bytes) uniquely identifies the volume for mounting and device mapping. For redundancy and recovery, ext4 maintains backup copies of the superblock within specific groups to mitigate corruption risks. Without the sparse_super feature, backups exist in every group immediately following the group descriptor . When the sparse_super compatible feature is enabled (flag 0x1 in s_feature_compat at offset 0x5C), backups are limited to groups numbered 0, 1, and powers of 3, 5, or 7 (e.g., 0, 1, 3, 5, 7, 9, 27, 81), reducing metadata overhead on large filesystems while preserving recoverability. The sparse_super2 compatible feature (flag 0x200) further optimizes this by restricting backups to at most two locations—typically group 0 and one additional group based on filesystem size—ideal for extremely large volumes where full replication would be inefficient. Ext4-specific feature flags in the superblock enable or require support for advanced capabilities, ensuring compatibility checks during mount. The has_journal compatible flag (0x4 in s_feature_compat) indicates the presence of an external journal superblock for transaction logging, a core reliability mechanism. Incompatible flags unique to ext4 include extent (0x40 in s_feature_incompat at offset 0x60), which activates extent-based block mapping for large files; flex_bg (0x200), allowing metadata to span multiple block groups for better allocation flexibility; and metadata_csum (0x2000 in s_feature_incompat at offset 0x60), which adds CRC32c checksums to the superblock and other metadata for integrity verification. These flags, along with others like 64bit (0x80 in incompatible), collectively define the filesystem's capabilities and enforce version-specific handling.

Block Groups and Descriptors

The ext4 filesystem partitions the storage device into groups to enable efficient parallel access and management of and . Each group serves as a self-contained unit containing its own copy of essential structures, facilitating localized operations and improving for large filesystems. The size of a group is typically configured to 32,768 , which equates to 128 when using the common 4 KiB size. The total number of groups is determined by dividing the total number of in the filesystem by the blocks per group and rounding up: num_groups = ceil(total_blocks / blocks_per_group). The group descriptor table, stored immediately following the superblock in block group 0 and replicated as needed, consists of one 32-byte entry per block group in standard // configurations without the 64bit feature enabled; with the 64bit feature, the entry size expands to at least 64 bytes, as recorded in the . Each entry includes fields specifying the locations of the block and inode (via bg_block_bitmap_lo/hi and bg_inode_bitmap_lo/hi), the starting block of the inode table (bg_inode_table_lo/hi), and counts of free blocks (bg_free_blocks_count_lo/hi) and free inodes (bg_free_inodes_count_lo/hi). Additional fields track the number of used directories (bg_used_dirs_count_lo/hi) and unused inodes in the table (bg_itable_unused_lo/hi), along with a for integrity verification. For redundancy, the group descriptor table maintains backups, including in block group 1, to ensure recoverability in case of in the primary copy; the meta_bg further enhances this by organizing block groups into metablock groups, allowing descriptors to be distributed across more locations for larger filesystems. The uninit_bg flag supports of block groups by marking uninitialized bitmaps and inode tables, deferring full setup until allocation occurs and reducing formatting overhead. Bitmaps within block groups track the allocation status of blocks and inodes, as detailed in subsequent sections on data organization.

Inodes, Bitmaps, and Data Organization

In ext4, each inode is a fixed-size structure that stores for a , , or other filesystem object, with a default on-disk size of 256 bytes. This structure includes essential fields such as the file type and permissions in the i_mode field, where the high 12 bits indicate the type (e.g., regular , , or ) and the low 12 bits specify Unix-style permissions. is tracked via i_uid and i_gid fields, supporting 32-bit and group IDs. Timestamps for (i_atime), modification (i_mtime), and change (i_ctime) are stored as 64-bit values with precision when extra space (i_extra_isize) is available, allowing for high-resolution tracking of file events. The structure also contains i_links_count for the number of hard links, i_size for the length (up to 64 bits), and i_blocks counting allocated blocks in 512-byte units. A key component of the inode is the i_block array, which consists of 15 32-bit entries (60 bytes total) used for mapping data to disk blocks. The first 12 entries point directly to data blocks, while the remaining three can serve as indirect pointers (, , or indirect) for larger files or, in ext4, as the header for an to efficiently represent contiguous block ranges. Additional fields include i_flags for like immutability or extent usage, and i_file_acl pointing to extended attribute blocks. The inode concludes with reserved and operating system-specific fields in i_osd2, accommodating features like 32-bit UID/GID extensions and nanosecond components. Within each block group, ext4 maintains two bitmaps to track : a bitmap and an inode bitmap, each occupying one filesystem . The bitmap uses one bit per data in the group, with a bit set to 1 indicating the is allocated and 0 denoting it is free; its size is thus (number of blocks in group) / 8 bytes, padded to a full . Similarly, the inode bitmap allocates one bit per inode table entry, set to 1 for in-use inodes and 0 for available ones, sized as (inodes per group) / 8 bytes. These bitmaps are stored immediately after the group descriptors in the block group layout, enabling efficient scanning for free space during allocation. If the BLOCK_UNINIT flag is set in the group descriptor, the treats uninitialized bitmaps as all free, though actual usage may differ in metadata-heavy configurations. Data organization in ext4 block groups prioritizes locality to minimize fragmentation and seek times. Following the superblock, group descriptors, and bitmaps, each group contains an inode —a contiguous of inodes sized to hold s_inodes_per_group entries. With 256-byte inodes and typical 4 KiB blocks, the can accommodate up to (group size in blocks) × 16 inodes, though the actual number is set at filesystem creation based on desired bytes-per-inode ratio (default around 4096). The remaining space in the group is dedicated to data blocks, where file contents and entries reside, mapped via inode pointers. This layout ensures (bitmaps and inodes) precedes user data, facilitating quick group-level operations. Ext4 reserves specific inode numbers for system use, starting from inode 1 (bad block inode) but skipping it as the first usable. The occupies inode 2, serving as the filesystem's top-level entry point. Inode 11 is conventionally assigned to the lost+found directory, which uses to store recovered orphaned files during error correction. For symbolic links, ext4 stores short paths (typically under 60 bytes) directly within the inode's i_block array as inline data, avoiding separate data block allocation for efficiency; longer symlinks are treated as regular files with their target path in data blocks. The i_block array in such cases may integrate extent headers for compact representation of symlink data if extents are enabled.

Implementation Details

Delayed Allocation Mechanism

In ext4, the delayed allocation mechanism defers the assignment of physical disk blocks to file data until the data is actually flushed from to disk, rather than allocating them immediately during the write operation. This process begins when data is written to pages in the kernel's , where it resides as dirty buffers without on-disk allocation; allocation only occurs later, triggered by events such as a journal commit timeout (typically 5 seconds), an explicit sync() call, or pressure forcing writeback. To promote contiguous storage and reduce fragmentation, ext4 employs extent hints during this delayed phase, which guide the allocator toward placing new blocks adjacent to existing extents in the file. The primary benefits of delayed allocation stem from its ability to batch and optimize block placements based on observed write patterns, leading to improved and . By postponing allocation, ext4 can gather more information about the , enabling the multiblock allocator to select larger, contiguous extents that align with the underlying device—such as maximizing sequential I/O on both SSDs and HDDs. This approach significantly reduces external fragmentation, with studies showing improvements of up to 30% in large sequential write workloads and 7-10% in small file workloads compared to ext3. For instance, speculative pre-allocation of 8 KiB for small writes allows the to treat them as potential extents, further enhancing throughput by up to 30% in large sequential write scenarios. Implementation-wise, delayed allocation is tightly integrated with the Linux kernel's subsystem, where dirty pages are marked but not committed to disk until writeback; this interaction allows ext4 to leverage filesystem-wide knowledge for better decisions. The nobarrier mount option can be used to disable write barriers, which enforce strict ordering of writes to protect against power failures at the cost of performance; enabling nobarrier skips these flushes, potentially speeding up delayed allocation but increasing the risk of inconsistencies. ext4 mitigates potential issues from delayed allocation by using extents, which are allocated during writeback but marked as unwritten until data is committed, ensuring in ordered mode, ext4's default, which writes data blocks to disk before their corresponding .

Multiblock Allocation and Extents

The multiblock allocator (mballoc) in ext4 enhances efficiency by allocating multiple contiguous blocks simultaneously, integrating seamlessly with the extents mechanism to minimize overhead and fragmentation. Unlike earlier allocators that handled blocks individually, mballoc employs a augmented with extent tracking to identify and reserve free space in larger chunks. It begins allocation requests by defining a "" block location, typically near the previous allocation or within the same block group for locality, then scans bitmaps and buddy caches starting from the block group containing this goal. This scanning prioritizes regions with sufficient free extents of the desired order (e.g., power-of-two sizes), reducing disk seeks by favoring nearby free space over distant alternatives. To promote data locality and performance, mballoc distinguishes allocation strategies based on and context. For small files or , it draws from per-CPU locality group preallocation pools, ensuring these items on disk to optimize caching and I/O patterns. Larger files per-inode preallocation spaces, reserving blocks ahead near the file's current end to support sequential growth without scattered placements. In environments, mballoc incorporates alignment by using the stripe width and stride values stored in the ; allocations for sizable requests are padded or shifted to align with boundaries, preventing read-modify-write cycles and improving throughput. Once blocks are selected, mballoc integrates them into the file's extent tree structure, which represents contiguous disk ranges efficiently using a hierarchical B-tree-like format rooted in the inode's i_block . Each extent entry maps up to 2^{15} logical blocks (128 with 4 KiB blocks), far surpassing the 4-block limit of pointers in systems. During insertion, if the new extent overlaps or adjoins existing ones, mballoc merges them to consolidate ranges; conversely, partial overlaps trigger splits, redistributing entries across tree nodes while maintaining balance. The tree supports a maximum depth of 4 levels, with the header's eh_depth tracking the current level (0 for nodes), allowing scalable mapping for files up to 16 without excessive . For sequential writes, the allocation goal advances progressively, approximated as goal_start = last_alloc + stripe_width to preserve alignment and contiguity.

Journaling Process

The journaling process in ext4 relies on the JBD2 (Journaling Block Device version 2) layer to manage updates to the filesystem, ensuring that and optionally changes are applied consistently even in the event of a crash. Transactions are the core unit of this process, encapsulating a set of modifications to prevent partial updates from corrupting the filesystem structure. A transaction starts with the reservation phase, where the filesystem calls jbd2_journal_start() to allocate space in the for the anticipated changes, specifying the number of (credits) required based on the operation's scope. This phase ensures that sufficient journal space is available before any modifications begin, avoiding failures mid-operation. During the prepare phase, the actual changes are logged to the journal in a structured format consisting of three main types: descriptor blocks, which contain describing the modified buffers (such as their locations and types); blocks, which hold the content of the changes themselves; and a commit block (or tag), which serves as a marker indicating the 's logical completion. Buffers are marked for write access via functions like jbd2_journal_get_write_access(), ensuring the journal receives the updated versions before the filesystem is altered. This approach guarantees that can replay complete transactions from the journal if needed. The commit phase follows, where jbd2_journal_stop() finalizes the by updating the corresponding filesystem to point to the new data locations, effectively making the changes visible and durable. At this point, the is considered committed from the journal's perspective, though the full disk write may be asynchronous depending on configuration. The forget phase handles cleanup, using jbd2_journal_forget() to revoke and discard any buffers that were prepared but ultimately not needed, reclaiming journal space efficiently. Checkpointing is a background process that advances the journal's head pointer after successful replay during recovery or normal operation, confirming that all buffers from completed transactions have been written to their final locations on the filesystem. This prevents the journal from filling up unnecessarily and maintains its efficiency; transactions are kept relatively small to performance and recovery speed. Ext4 supports an optional async commit mode via the journal_async_commit mount option, which allows the commit to be written to disk asynchronously without waiting for preceding descriptor blocks, enabling better batching of writes to reduce I/O overhead. This mode delays the full synchronization of the commit for batching purposes, trading a slight increase in potential recovery complexity for improved throughput in write-heavy workloads. The journaling process operates in conjunction with ext4's modes—such as ordered, writeback, or —to determine whether file is also logged, as detailed in the journaling and reliability overview.

Performance Optimizations

Flexible Block Groups

The flexible groups (flex_bg) feature in ext4 enables greater flexibility in the placement and organization of across groups, optimizing for large filesystems. This feature is activated by setting the flex_bg flag in the filesystem during creation, typically using the mke2fs -O flex_bg command. The size of each flex_bg cluster, which groups multiple groups together, is configurable via the -G option and defaults to 16 groups per cluster as defined in the mke2fs configuration. Introduced in version 2.6.28 in 2008, flex_bg has been enhanced in subsequent versions to ensure compatibility with features like uninitialized groups (uninit_bg), allowing to be marked and initialized more efficiently. In implementation, flex_bg divides block groups into logical clusters where the initial block group in each cluster reserves space for the metadata—such as block and inode bitmaps, and inode tables—of all groups within that cluster, while subsequent groups primarily contain data blocks. This structure is reflected in the group descriptors, which include cluster information via the superblock field s_log_groups_per_flex (where the cluster size is $2^{s\_log\_groups\_per\_flex}), enabling the kernel to treat the cluster as a single unit for allocation purposes. As a result, block allocation can seamlessly cross traditional block group boundaries, reducing fragmentation and supporting the creation of large contiguous extents without the overhead of per-group constraints. The primary benefits of flex_bg include reduced metadata overhead in large filesystems by consolidating bitmaps and inode tables into fewer, more accessible locations, which accelerates operations like filesystem checks and loading. It also enhances superblock and group descriptor placement, allowing them to be distributed more evenly across the filesystem—for instance, grouping an entire flex_bg's s in a single location to improve performance on volumes exceeding terabytes in size—while maintaining compatibility with the sparse_super feature for selective superblock replication. Relative to standard block group descriptors, which rigidly confine to individual groups, flex_bg provides a more dynamic layout that scales better for high-capacity storage without altering the core on-disk format.

Metadata Checksums and Error Handling

Metadata checksums were introduced to ext4 in version 3.5 to enhance filesystem integrity by detecting corruption in metadata structures during reads. This feature, enabled via the metadata_csum flag, adds CRC32C checksums to key on-disk structures, allowing the kernel and tools like e2fsck to identify and mitigate errors without relying solely on lower-level hardware checks. The implementation uses a 32-bit CRC32C algorithm, which benefits from on supported architectures like and . Checksum coverage in ext4 includes the , group descriptor blocks, inode tables, extent tree blocks, and structures via the jbd2 layer. For the , the checksum covers the entire block up to the checksum field itself, incorporating the filesystem UUID as a seed. Group descriptors use a 16-bit truncated CRC32C over the UUID, group number, and descriptor data. Inodes and extent blocks employ a 32-bit computed as \text{crc32c}(\text{UUID}, \text{inode\_number} || \text{generation} || \text{data}), where the inode checksum field is zeroed during calculation and the result is stored in a dedicated inode field. blocks receive individual CRC32C , with tags in descriptor blocks covering associated data blocks. The checksum algorithm relies on a derived from the 's UUID for consistency across structures, ensuring that changes to the UUID would otherwise require recomputing all checksums. To address this, the metadata_csum_seed feature, introduced later, stores a dynamic directly in the , enabling UUID changes without full recomputation. This is used in place of or alongside the UUID for calculations, maintaining compatibility while improving administrative flexibility. Error handling begins at mount time, where the kernel verifies metadata checksums; failures trigger errors, potentially remounting the filesystem read-only or refusing access to protect data integrity. The e2fsck utility performs comprehensive validation and repair during filesystem checks, using checksum mismatches to locate and correct corruption in covered structures. Filesystems created without the metadata_csum feature remain fully backward compatible, mountable on older kernels that ignore the absent checksums. The checksum field in inodes, for instance, is integrated into the structure's layout to support this verification process.

Backward Compatibility Enhancements

Ext4 incorporates several mechanisms to ensure with its predecessor, , allowing users to upgrade filesystems without immediate disruption while gradually enabling new features. The filesystem uses a feature flag system in the to signal compatibility levels: compatible features (stored in s_feature_compat), read-only compatible features (s_feature_ro_compat), and incompatible features (s_feature_incompat). Compatible features, such as COMPAT_HAS_JOURNAL (0x004) and COMPAT_DIR_INDEX (0x20)—the latter inherited from for hashed directory indexing—allow tools and kernels to and operate read-write if they recognize them. Read-only compatible features, like RO_COMPAT_EXTRA_ISIZE (0x40), permit to read-only, enabling without modification; this supports larger inode sizes (up to 256 bytes) in ext4 by utilizing reserved space in the inode structure without altering the layout, thus avoiding breakage during read access. In contrast, incompatible features, such as INCOMPAT_EXTENTS (0x40) for extent-based file mapping, prevent kernels and tools from mounting the filesystem read-write, as they cannot interpret these structures; this design choice protects by blocking unsupported operations. To facilitate downgrades or testing, ext4 allows mounting filesystems with incompatible features in read-only mode using an ext4-aware kernel, but full compatibility requires avoiding or disabling such flags via tools like tune2fs before reverting. For instance, enabling extents on an filesystem via tune2fs -O extents migrates it to ext4, but reversing this is not straightforward once files adopt extents, emphasizing the one-way nature of certain upgrades. Mount options further enhance compatibility by allowing selective disabling of ext4-specific behaviors. The nojournal (or ^has_journal) option bypasses journaling entirely, reverting to /-like unordered mode for environments lacking support, though this sacrifices . Similarly, the resize option (enabled via the resize_inode feature flag) supports online filesystem using resize2fs, a capability building on ext3's resize support but extended for larger volumes without unmounting. These options ensure ext4 can emulate ext3 behavior when needed, such as during transitions in legacy systems. The evolution of utilities is crucial for managing these compatibility aspects, with version 1.41.0 (released July 2008) introducing full support for ext4 features like extents, uninit_bg, flex_bg, huge_file, and dir_nlink, allowing tools such as mke2fs, tune2fs, and e2fsck to create, tune, and check ext4 filesystems without errors on incompatible flags. Prior versions could only handle , often aborting on ext4-specific metadata; later releases, including 1.42 and beyond, refined this support for seamless operations like feature enabling/disabling. This toolset evolution maintains ext4's usability in mixed /ext4 environments, prioritizing non-disruptive upgrades as outlined in early development plans.

Limitations and Risks

Capacity and Scalability Limits

The ext4 filesystem supports a theoretical maximum volume size of 1 exbibyte (EiB), equivalent to 2^60 bytes, achieved through its use of 48-bit block addressing and extent-based allocation. This design allows for single files up to 16 tebibytes (TiB) in size under standard 4 KiB block configurations. Additionally, ext4 is limited to a maximum of 2^32 inodes, or approximately 4.29 billion, which defines the upper bound for the number of files, directories, and other objects it can manage. In practice, these theoretical limits are constrained by , implementations, and operational factors. Vendor support policies, such as limiting ext4 to 50 , influence practical deployment; on 32-bit , volumes are often capped at 16 without enabling the 64-bit feature due to addressing constraints. Beyond 100 , fragmentation becomes a significant issue, as the extent tree structures and delayed allocation mechanisms struggle to maintain contiguous blocks, leading to degradation over time. challenges arise in high-file-count environments, where inode exhaustion can occur well before reaching the 4 billion limit if the inode ratio is not tuned during formatting—for instance, default settings allocate one inode per 16 KiB of space, potentially limiting millions of small files on large volumes. File system checks with e2fsck on large volumes, such as 100 , can take several days or more due to the need to scan extensive structures, depending on , number of files, and filesystem state, exacerbating in scenarios. Performance under high load varies by ; sequential workloads on SSDs can achieve high throughput, but -intensive operations—such as creating or listing numerous small files—often bottleneck owing to contention in the and inode tables. To mitigate fragmentation, ext4 provides the e4defrag tool for online defragmentation, which rearranges extents without unmounting the filesystem; however, it lacks native support for deduplication or snapshotting, requiring external tools for those features.

Potential Data Loss Scenarios

One notable risk in ext4 arises from its delayed allocation mechanism, where physical disk blocks for written data are not immediately assigned, potentially leading to during power failures if the data has not yet been written back to disk. In early implementations, this could result in files appearing as zero-length after a , as unwritten extents might be zeroed during if the power loss occurred mid-writeback. This vulnerability was particularly evident in kernels prior to 2.6.30, where delayed allocation was enabled by default without sufficient safeguards against abrupt interruptions. Large commit intervals (default 5 seconds) limit the window of exposure but can still result in loss of uncommitted on . In such cases, the filesystem remains consistent due to journaling, but recent may be lost. Historical issues have included problems with the sync() operation, where improper ordering of writes could lead to lost on crashes, particularly in configurations without adequate barriers to enforce on-disk commit sequences. These were addressed through patches enhancing barrier usage, ensuring metadata and writes are properly sequenced, with barriers becoming a standard safeguard in later versions. To minimize these risks, ext4 should be mounted in data=ordered mode, the default, which ensures all data is flushed to disk before associated is journaled, reducing exposure to stale or lost writes. Enabling write barriers (also default) further protects against reordering in volatile caches, though they may be disabled on battery-backed storage for performance. Regular use of for consistency checks is recommended post-crash to detect and repair any inconsistencies, though journaling typically prevents widespread . checksums, enabled by default since 3.18, further enhance reliability by detecting and handling . As of November 2025, ext4 remains stable in 6.x series with no major new risks reported.

Comparison to Successor File Systems

Ext4, while lacking advanced features such as snapshots, built-in compression, and RAID5/6 support found in , offers greater simplicity and stability, making it preferable for server environments where reliability is paramount. 's copy-on-write (CoW) mechanism enables these capabilities but introduces higher complexity and potential for fragmentation or recovery issues during power failures, contrasting with ext4's straightforward journaling approach. In performance tests, ext4 often outperforms in routine operations like small file handling, though may edge out for large-volume workloads due to its CoW efficiency. Compared to , ext4 excels in scenarios involving numerous small files and general-purpose server tasks, benefiting from its efficient metadata handling and lower overhead for limited I/O operations. , however, demonstrates superior performance in high-throughput environments like large-scale data streaming or massive file operations, supported by its dynamic inode allocation that scales better for variable workloads. Both file systems employ journaling for and support theoretical volumes up to 8 exbibytes (EiB), though practical limits differ (e.g., vendor support up to 100 TiB for in some cases); lacks shrinking capabilities. As of 2025, ext4's persistence stems from its status as the default filesystem in distributions like , where its maturity ensures broad compatibility and robust tooling without the administrative demands of more feature-heavy alternatives. In RHEL, while serves as the default for its performance in enterprise settings, ext4 remains widely adopted for its lower resource overhead compared to CoW-based systems like , reducing wear on SSDs and simplifying maintenance. Looking ahead, ext4 continues to be recommended for deployments prioritizing proven reliability over experimental features in successors, particularly in production environments wary of Btrfs's ongoing maturation.

Adoption and Interoperability

Usage in Linux Distributions

ext4 serves as the default filesystem in numerous prominent distributions, underscoring its reliability and broad compatibility. has utilized ext4 as the standard choice since version 9.10 (Karmic Koala), released in October 2009, transitioning from to leverage ext4's enhanced performance and journaling capabilities. similarly adopted ext4 as its default with version 11 (Leonidas), launched in June 2009, marking a shift to support larger filesystems and improved allocation efficiency, though later switched to as default starting with version 33 in 2020. implemented ext4 as the default starting with version 8 (Jessie) in 2015, enabling seamless upgrades from earlier ext variants while prioritizing stability for general installations. In contrast, (RHEL) versions 7 and later, beginning with the 2014 release, default to for superior scalability in enterprise workloads, though ext4 remains fully supported and commonly deployed for compatibility. In 2025, ext4 maintains a dominant position in ecosystems, serving as the filesystem for the majority of servers and desktops due to its default status in high-share distributions like and . Its prevalence extends to embedded systems, where ext4 is the primary filesystem for devices, underpinning internal storage partitions in many installations. This widespread adoption stems from ext4's balance of performance, maturity, and minimal resource overhead, making it ideal for diverse configurations. Usage trends show ext4 increasingly favored for root and boot partitions in standard setups, valued for its robust journaling and fast operations that ensure quick boot times and system integrity. Notable case studies highlight ext4's versatility: it has been employed in CERN's , including ext4-formatted images for the to manage and deduplicate terabytes of scientific datasets. Similarly, (AWS) EC2 instances running Linux defaulted to ext4 until the 2017 launch of Linux 2, after which took precedence for optimized cloud performance, though ext4 continues to support legacy and mixed workloads.

Support Across Operating Systems

Ext4 lacks native support in Windows operating systems, requiring third-party drivers for access. The open-source Ext2Fsd driver, originally developed up to version 0.69 in 2015 with subsequent community forks providing ongoing maintenance, enables read and write access to ext4 partitions on through 11. Commercial alternatives like Paragon Software's extFS for Windows offer full read/write support for , , and ext4 volumes, including integration with Windows Explorer for seamless file management. On macOS, ext4 is not natively supported, limiting access to user-space drivers. The open-source ext4fuse, a FUSE-based read-only implementation, allows mounting and reading ext4 partitions, though it requires extensions that may pose challenges on systems. For write access, commercial solutions such as extFS for provide reliable read/write capabilities to ext4 drives, facilitating cross-platform without native integration. FreeBSD, which primarily uses the UFS , supports ext4 through its native ext2fs driver, enabling both read and write operations on , , and ext4 partitions across supported versions, including FreeBSD 14 and later. However, write support remains experimental in nature due to the absence of journaling replay, potentially risking during improper unmounts. Read-only access is also available via the fuse-ext2 user-space module for scenarios where native mounting is unsuitable. Cross-platform interoperability with ext4 introduces several limitations outside environments. Third-party drivers on Windows and macOS typically do not support advanced features like quotas or lists (ACLs), rendering them inaccessible or ineffective during non-Linux access; for instance, Ext2Fsd provides read-only quota support without write capabilities. Similarly, ACLs are unsupported in many drivers due to incomplete extended attribute handling. precision, which ext4 stores at resolution, may degrade to second-level accuracy in non-Linux systems lacking full inode extension support, leading to potential discrepancies in file metadata. These constraints maintain backward compatibility with ext4's core structure but highlight the file system's Linux-centric design.

Tools and Utilities

The e2fsprogs suite encompasses a collection of userspace utilities essential for creating, tuning, inspecting, and maintaining filesystems on systems. Developed and maintained as part of the Extended Filesystem Utilities project, these tools are widely used by system administrators to handle ext4 volumes without relying on kernel-level operations. Among the core tools, mkfs.ext4—a variant of the mke2fs utility—formats block devices or files to initialize an ext4 filesystem, specifying parameters such as block size, inode count, and optional features like extents or checksums during creation. The tune2fs command adjusts runtime parameters on existing ext4 filesystems, enabling or disabling features (e.g., enabling the has_journal flag or setting reserved block percentages) and optimizing for specific workloads, such as increasing the maximum mount count for reliability. For inspection, dumpe2fs extracts and displays detailed from the and block group descriptors, revealing configuration details like filesystem size, feature flags, and block allocation patterns, which aids in diagnostics and verification. Filesystem integrity and maintenance are handled by fsck.ext4, which is a to e2fsck. This tool performs consistency checks on ext4 structures, replays journals to recover from unclean shutdowns, and repairs inconsistencies such as orphaned inodes or corrupted entries, with options for fixes or interactive prompts. Complementing this, resize2fs supports online resizing of mounted ext4 filesystems, allowing enlargement to utilize additional space or shrinkage for repartitioning, provided the supports the operation; for example, it can expand a filesystem by specifying a new size in blocks or gigabytes without unmounting. Debugging capabilities are provided by specialized tools like debugfs, an interactive utility for low-level examination and modification of ext4 internals, such as querying inode details, dumping extent trees, or setting flags directly on the device. Similarly, filefrag analyzes file fragmentation by reporting the number and size of extents allocated to specific s, helping identify issues from scattered allocations in ext4's extent-based storage. e4rat focuses on preallocation and reallocation tuning by using the EXT4_IOC_MOVE_EXT to physically relocate frequently accessed files (e.g., boot-related binaries) into contiguous blocks, reducing seek times and improving sequential read performance, particularly on traditional HDDs; it includes subcommands like e4rat-collect for logging access patterns and e4rat-realloc for applying changes. For I/O analysis, integration with blktrace—a tracing facility—allows capturing detailed block-level events on ext4-mounted devices, enabling post-processing with tools like blkparse to visualize , queue depths, and throughput patterns for bottlenecks.

References

  1. [1]
    ext4 General Information - The Linux Kernel documentation
    Ext4 is an advanced level of the ext3 filesystem which incorporates scalability and reliability enhancements for supporting large filesystems (64 bit)
  2. [2]
    Ext4 - Linux Kernel Newbies
    This page is a description of the features of the Ext4 filesystem (merged in the Linux Kernel during the 2.6.28 development), and instructions of how to ...
  3. [3]
    Chapter 5. The ext4 File System | Red Hat Enterprise Linux | 7
    ext4 is a scalable extension of ext3, using extents for improved performance, and supports larger file sizes and file systems.
  4. [4]
    The Second Extended Filesystem - The Linux Kernel documentation
    ext2 was originally released in January 1993. Written by R'emy Card, Theodore Ts'o and Stephen Tweedie, it was a major rewrite of the Extended Filesystem.Missing: history Remy
  5. [5]
    [PDF] EXT3, Journaling Filesystem - cs.wisc.edu
    Jul 20, 2000 · This talk will describe the ext3 filesystem, both its design goals and its implementation. It will explain some of the challenges involved in.Missing: history 2001
  6. [6]
    a/ext3 - LWN.net
    Date: Fri, 5 Jan 2001 21:35:57 +0000 From: "Stephen C. ... The journal initialisation fix will also help people adding ext3 to an existing filesystem.<|control11|><|separator|>
  7. [7]
    None
    ### Summary of ext4 Origins, Motivations, Limits, Extents, and Backward Compatibility with ext3
  8. [8]
    "Theodore Ts'o": Proposal and plan for ext2/3 future development work
    Jun 28, 2006 · 1) The creation of a new filesystem codebase in the 2.6 kernel tree in · 2) Bug fixes to fix 32-bit cleanliness issues, security/oops problems · 3 ...
  9. [9]
    "Theodore Ts'o": ext4 merge plans for 2.6.25 - LKML
    Jan 21, 2008 · The following patches have been in the -mm tree for a while, and I plan to push them to Linus when the 2.6.25 merge window opens. WithMissing: initial 2006<|control11|><|separator|>
  10. [10]
    Ext4 Filesystem - Thomas-Krenn-Wiki-en
    Aug 29, 2013 · According to developer Theodore Ts'o, Ext4 precisely implements the POSIX standard for file operations. The problem is that the "secure ...<|control11|><|separator|>
  11. [11]
    Super fast Ext4 filesystem arrives in Ubuntu 9.04 - Ars Technica
    Ext4 was officially declared stable in version 2.6.28 of the Linux kernel, which was released last month. Ext4 is designed to provide better ...
  12. [12]
    Ext4 Filesystem Explained in Plain English - Rami Taibah
    Jan 23, 2009 · Linux Kernel 2.6.28 was released while you were partying on New Years and declared the much anticipated Ext4 filesystem as stable.Extents · Multiblock Allocation · Bits And Pieces
  13. [13]
    Ext4 metadata checksums: current feature status - Server Fault
    Mar 7, 2021 · The kernel wiki page for ext4 metadata checksums is marked "last modified on 22 October 2013". I couldn't find more recent status information on this feature.mkfs -O ^64bit,^metadata_csum -t ext4 in 2019 - Server FaultHow beneficial are self-healing filesystems for general usage?More results from serverfault.com
  14. [14]
    2. High Level Design - The Linux Kernel documentation
    An ext4 file system is split into a series of block groups. To reduce ... Flexible Block Groups · 2.2.3. Meta Block Groups · 2.2.4. Lazy Block Group ...
  15. [15]
    EXT4 in LINUX just saw a Performance BOOST - Update! - YouTube
    May 29, 2025 · This latest Linux Kernel news and update discusses performance boosts to the Linux Kernel File System EXT4. Let's talk about EXT4 and some ...Missing: development timeline
  16. [16]
    Android kernel file system support
    Low level file system support · exfat (supported in kernel 5.10 and later) · ext4 · f2fs · fuse · incfs · Vfat · EROFS.
  17. [17]
    3.6. Journal (jbd2) — The Linux Kernel documentation
    Introduced in ext3, the ext4 filesystem employs a journal to protect the filesystem against metadata inconsistencies in the case of a system crash. Up to ...
  18. [18]
    4. Dynamic Structures — The Linux Kernel 5.10.0-rc1+ documentation
    In ext4, the file to logical block map has been replaced with an extent tree. Under the old scheme, allocating a contiguous run of 1,000 blocks requires an ...
  19. [19]
    Understanding Ext4 Disk Layout, Part 2 | linux - Oracle Blogs
    Aug 8, 2023 · The ext4_extent structures within the i_block directly point to the extents that represent the data blocks. In this case of zero depth, the ...
  20. [20]
    Extents and Extent allocation in Ext4 | linux - Oracle Blogs
    Oct 15, 2024 · The maximum extent size supported by ext4 is 128 MiB, which is the size of a block group. If a request is made for 150 MiB, even if there is ...
  21. [21]
    [PDF] Ext4 block and inode allocator improvements
    Jul 26, 2008 · In this paper, we discuss the new multiple block allocator for Ext4 and compare the same with the reservation-based allocation. We also discuss ...
  22. [22]
    [PDF] The new ext4 filesystem: current status and future plans
    Jun 30, 2007 · -date ext4 patches and feature discussions can be found at the ext4 wiki page, http://ext4.wiki. kernel.org. Some of the features in progress ...<|control11|><|separator|>
  23. [23]
    4.1. Index Nodes — The Linux Kernel documentation
    Normally, ext4 does not permit an inode to have more than 65,000 hard links. This applies to files as well as directories, which means that there cannot be more ...
  24. [24]
    ext4(5) - Linux manual page - man7.org
    It is supported by Linux kernels starting version 5.15, and by e2fsprogs starting with version 1.47. 0. project This ext4 feature provides project quota ...
  25. [25]
    inodes.rst - The Linux Kernel Archives
    Therefore, timestamps should not overflow until May 2446. dtime was not widened. There is also a fifth timestamp to record inode creation time (crtime); this ...
  26. [26]
    3.1. Super Block — The Linux Kernel documentation
    ### Summary of ext4 Superblock (Source: kernel.org documentation)
  27. [27]
  28. [28]
    3.2. Block Group Descriptors — The Linux Kernel documentation
    ### Summary of ext4 Block Group Descriptors
  29. [29]
    3.3. Block and inode Bitmaps — The Linux Kernel documentation
    ### Summary of ext4 Block and Inode Bitmaps
  30. [30]
    2. High Level Design — The Linux Kernel documentation
    ### Summary of ext4 Extents from https://www.kernel.org/doc/html/latest/filesystems/ext4/overview.html
  31. [31]
    2.3. Special inodes - The Linux Kernel documentation
    Traditional first non-reserved inode. Usually this is the lost+found directory. See s_first_ino in the superblock. Note that there are also some inodes ...
  32. [32]
    [PDF] ext4: the next generation of the ext3 file system | USENIX
    May 27, 2007 · will use delayed allocation and multiple block mechanisms to efficiently allocate many blocks at a time and contribute to avoiding ...
  33. [33]
    2.4. Block and Inode Allocation Policy
    A second related trick that ext4 uses is delayed allocation. Under this scheme, when a file needs more blocks to absorb file writes, the filesystem defers ...
  34. [34]
    ext4 and data loss - LWN.net
    The ext4 filesystem offers a number of useful features. It has been stabilizing quickly, but that does not mean that it will work perfectly for everybody.
  35. [35]
    The Linux Journalling API - The Linux Kernel documentation
    Ext4 uses journal commit callback for this purpose. With journal commit ... Block size for the location where we store the journal. j_blk_offset.Data Types · Structures · Functions<|control11|><|separator|>
  36. [36]
    EXT3, Journaling Filesystem
    ### Summary of ext3/ext4 Journaling Transaction Details
  37. [37]
    ext4 General Information — The Linux Kernel documentation
    ### Summary on `journal_async_commit` and Associated Delay
  38. [38]
    Linux_3.5 - Linux Kernel Newbies
    Jul 21, 2012 · Linux 3.5 includes ext4 metadata checksums, userspace probes, a sandboxing mechanism, new network queue management, and TCP connection repair.<|control11|><|separator|>
  39. [39]
    2.5. Checksums — The Linux Kernel documentation
    ### Summary of ext4 Metadata Checksums
  40. [40]
    ext4: Add metadata checksumming - LWN.net
    Nov 28, 2011 · ... crc32c checksums to most of the ext4 metadata objects. A full design document is on the ext4 wiki[1] but I will summarize that document here.
  41. [41]
    3.1. Super Block — The Linux Kernel documentation
    ### Summary of ext4 Feature Compatibility Flags
  42. [42]
    E2fsprogs Release Notes - SourceForge
    E2fsprogs 1.41.0 (July 10, 2008). Add support for ext4 filesystem features, in particular extents, uninit_bg, flex_bg, huge_file, and dir_nlink features ...
  43. [43]
    Understanding Linux filesystems: ext4 and beyond - Opensource.com
    Apr 2, 2018 · Theodore Ts'o (who by then was ext3's principal developer) announced ext4 in 2006, and it was added to mainline Linux two years later, in kernel ...
  44. [44]
    Linux/Windows/Mac OS file systems - SoByte
    Oct 30, 2021 · ext3 filesystem uses 32-bit addressing, which limits ... And right now ext4 will not handle (and probably never will) more than 50-100 TiB of data ...
  45. [45]
    How long can fsck take on a 30 TB volume? - Server Fault
    May 7, 2019 · For a consumer hard drive with about 100 MB/s copying a few TB can take more hours than most people would expect. If it were your server, you ...How long does it take to fsck a volume? - hard driveHow to extend an ext4 partition and filesystem?More results from serverfault.comMissing: TiB | Show results with:TiB
  46. [46]
    Benchmarking disk IO on ext3 vs ext4 vs xfs with fio
    Jul 22, 2011 · ... ext4 – on ext4, showing 670 MB/s random buffered writes and 83k IOPS. That doesn't seem to make much sense, but I'll leave the tea-leaf ...
  47. [47]
    e4defrag(8) - Linux manual page - man7.org
    e4defrag reduces fragmentation of extent based file. The file targeted by e4defrag is created on ext4 file system made with "-O extent" option.
  48. [48]
    Delayed allocation and the zero-length file problem - Theodore Ts'o
    Mar 12, 2009 · A recent Ubuntu bughas gotten slashdotted, and has started raising a lot of questions about the safety of using ext4.
  49. [49]
    ext4 fs breaking after power outages - fedora - Server Fault
    Jul 1, 2010 · Prior to 2.6.30 this delayed allocation behaviour was in effect by default and could cause data loss if power was lost before disk operations ...
  50. [50]
    Possible Data loss on ext4 filesystem after system loses power
    Aug 6, 2024 · A series of patches has been applied to the ext4 code to address this problem, including a fix that ensures proper usage of data barriers in the ...
  51. [51]
    Barriers and journaling filesystems - LWN.net
    May 21, 2008 · Barriers ensure all journal data is written to the media before a commit record, preventing corruption. They are disabled by default due to ...
  52. [52]
    Chapter 6. The Ext4 File System | Red Hat Enterprise Linux | 6
    Unlike ext3, the ext4 file system does not force data to disk on transaction commit. As such, it takes longer for buffered writes to be flushed to disk. As ...
  53. [53]
  54. [54]
    Linux File Systems: ext4 vs. Btrfs vs. ZFS - CBT Nuggets
    Aug 10, 2023 · In summary, think of ext4 as being an older, reliable file system that lacks performance and newer features. Btrfs implements newer features and ...<|control11|><|separator|>
  55. [55]
    Btrfs vs EXT4 - Performance Comparison - DiskInternals
    Rating 4.5 (10) Feb 3, 2025 · Ext4: Ext4 generally offers faster read and write speeds, especially for small to medium-sized files. Its mature and optimized codebase allows ...
  56. [56]
    XFS vs. Ext4: Which Linux File System Is Better? | Pure Storage Blog
    Jan 24, 2024 · XFS is better for large files and performance, while ext4 is better for general server operations with better security and smaller files. XFS ...
  57. [57]
  58. [58]
    XFS vs. ext4: Which Linux file system maximizes storage? | TechTarget
    Feb 21, 2025 · XFS has a maximum volume size of 1,024 TiB, while ext4 has a maximum of 64 zebibytes. XFS can only grow, while ext4 can shrink.
  59. [59]
    Filesystems on Linux: When Should You Not Use Ext4?
    Feb 1, 2025 · Due to its compatibility, simplicity, and relatively lightweight nature, Ext4 has been the default filesystem on most Linux distributions for ...
  60. [60]
    Chapter 1. Overview of available file systems | 9
    ext4 adds several new and improved features, such as: Supported file system size up to 50 TiB; Extent-based metadata; Delayed allocation; Journal checksumming ...
  61. [61]
    Exploring the Dynamic World of Linux Filesystems: Ext4, XFS, and ...
    Jan 2, 2024 · In this article, we embark on a journey through the fascinating landscape of Linux filesystems, with a special focus on Ext4, XFS, and Btrfs.Missing: timeline milestones
  62. [62]
    KarmicKoala/TechnicalOverview - Ubuntu Wiki
    Oct 28, 2009 · The new "ext4" filesystem is used by default for new installations with Ubuntu 9.10 RC; of course, other filesystems are still available via the ...
  63. [63]
    Ext4 in Fedora 11 - Fedora Project Wiki
    Ext4 is not a filesystem written from scratch but a extension of the mature and well tested Ext3 codebase which was used by default up until this release.
  64. [64]
    Ext4 - Debian Wiki
    Feb 19, 2023 · ext4 is the default filesystem for Debian since Debian 8 Jessie (2018-06-17). ext2 and ext3 filesystems can be upgraded to ext4 (but not the ...Missing: 6.0 | Show results with:6.0
  65. [65]
    Part I. File Systems | Red Hat Enterprise Linux | 7
    XFS is the default file system in Red Hat Enterprise Linux 7 and Red Hat, and Red Hat recommends you to use XFS unless you have a strong reason to use another ...
  66. [66]
    Linux Statistics 2025: Desktop, Server, Cloud & Community Trends
    Aug 3, 2025 · The Linux OS market is projected to grow to $18.73 billion by 2029. In 2025, the market size is expected to reach $9.1 billion, showing strong ...Missing: ext4 | Show results with:ext4
  67. [67]
    How to choose the right Linux file system for your needs - ZDNET
    Jun 5, 2025 · Ext4 has been around for 16+ years and has proven itself to be one of the most stable file systems available. Most distributions that opt for ...
  68. [68]
    [PDF] A Subset of the CERN Virtual Machine File System - HAL
    As a proof of concept, Gerhardt et al. used uncvmfs to deduplicate the ATLAS repository and copy it into an ext4 image - about. 3.5Tb of data containing 50 ...
  69. [69]
    Amazon Linux 2 default filesystem has switched to XFS??? | AWS
    May 25, 2020 · Amazon Linux 2 images have used XFS since sometime in 2017. Changing the default filesystem is the kind of change we would only make on a product release ...Problem with enlarge a non root filesystem - AWS re:PostEC2 instance does not start - AWS re:PostMore results from repost.aws
  70. [70]
    bobranten/Ext4Fsd: Ext4 file system driver for Windows - GitHub
    Ext4Fsd is an ext2/3/4 file system driver for Windows (XP/Vista/7/8/10/11). It's a free and open-source software, everyone can modify or distribute under GNU ...
  71. [71]
    ExtFS for Windows - Paragon Software
    extFS for Windows by Paragon Software is a driver that allows you to read and write extFS-formatted files on a Windows-based computer.
  72. [72]
    gerard/ext4fuse: EXT4 implementation for FUSE - GitHub
    This is a read-only implementation of ext4 for FUSE. The main reason this exists is to be able to read linux partitions from OSX.
  73. [73]
    extFS for Mac by Paragon Software
    extFS for Mac by Paragon Software provides fast and unlimited read/write access to ext2, ext3 and ext4 formatted drives intended for Linux systems!
  74. [74]
    Ext2fs - FreeBSD Wiki
    Sep 4, 2025 · All supported FreeBSD versions support ext2/3/4 read and write with most of the features, except for journaling. · FreeBSD 13-current supports ...
  75. [75]
    Chapter 23. Other File Systems | FreeBSD Documentation Portal
    The ext2fs(5) driver allows the FreeBSD kernel to both read and write to ext2, ext3, and ext4 file systems. Journalling and encryption are not supported yet. To ...
  76. [76]
    E2fsprogs: Ext2 Filesystem Utilities
    Dec 22, 2010 · This is the home page for the e2fsprogs package. It provides the filesystem utilities for use with the ext2 filesystem. It also supports the ext3 and ext4 ...E2fsprogs Release Notes · Ext2/Ext3/Ext4 Filesystems... · Ext2fs Home Page
  77. [77]
    mkfs.ext4(8) — e2fsprogs — Debian testing
    Jul 30, 2025 · mke2fs is used to create an ext2, ext3, or ext4 file system, usually in a disk partition (or file) named by device. The file system size is specified by fs- ...
  78. [78]
    fsck.ext4(8) — e2fsprogs — Debian testing
    Jul 30, 2025 · e2fsck is used to check the ext2/ext3/ext4 family of file systems. For ext3 and ext4 file systems that use a journal, if the system has been ...Missing: resize2fs | Show results with:resize2fs
  79. [79]
    filefrag(8) - Linux manual page - man7.org
    filefrag ... -E Display the contents of ext4's extent status cache. This feature is not supported on all kernels, and is only supported on ext4 file systems.Missing: analysis | Show results with:analysis
  80. [80]
    e4rat
    e4rat ("Ext4 - Reducing Access Times") is a toolset to accelerate the boot process as well as application startups.Missing: tuning | Show results with:tuning