Ext4

Last updated

ext4
Developer(s) Mingming Cao, Andreas Dilger, Alex Zhuravlev (Tomas), Dave Kleikamp, Theodore Ts'o, Eric Sandeen, Sam Naghshineh, others
Full nameFourth extended file system
Introduced
  • Unstable: 10 October 2006
  • Stable: 21 October 2008
with Linux 2.6.19 & 2.6.28
Preceded by ext3
Partition IDs 0x83: MBR / EBR.

EBD0A0A2-B9E5-4433-87C0-68B6B72699C7: GPT Windows BDP. [1]
0FC63DAF-8483-4772-8E79-3D69D8477DE4: GPT Linux filesystem data. [1]
933AC7E1-2EB4-4F13-B844-0E14E2AEF915: GPT /home partition. [2]

Contents

3B8F8425-20E0-4F3B-907F-1A25A76F98E8: GPT /srv (server data) partition.
Structures
Directory contents Linked list, hashed B-tree
File allocationExtents / Bitmap
Bad blocksTable
Limits
Max volume size1 EiB
Max file size16 TiB (for 4 or 64 KiB block size)
Max no. of files4 billion (specified at filesystem creation time)
Max filename length255 bytes (fewer for multibyte character encodings such as Unicode)
Allowed filename
characters
All bytes except NULL ('\0') and '/' and the special file names "." and ".." which are not forbidden but are always used for a respective special purpose.
Features
Dates recordedmodification (mtime), data or attribute modification (ctime), access (atime), delete (dtime), create (crtime)
Date range14 December 1901 - 10 May 2446 [3]
Date resolutionNanosecond
Forks No
Attributesacl, bh, bsddf, commit=nrsec, data=journal, data=ordered, data=writeback, delalloc, extents, journal_dev, mballoc, minixdf, noacl, nobh, nodelalloc, noextents, nomballoc, nombcache, nouser_xattr, oldalloc, orlov, user_xattr
File system
permissions
Unix permissions, POSIX ACLs
Transparent
compression
No
Transparent
encryption
Yes
Data deduplication No
Other
Supported
operating systems

ext4 (fourth extended filesystem) is a journaling file system for Linux, developed as the successor to ext3.

ext4 was initially a series of backward-compatible extensions to ext3, many of them originally developed by Cluster File Systems for the Lustre file system between 2003 and 2006, meant to extend storage limits and add other performance improvements. [4] However, other Linux kernel developers opposed accepting extensions to ext3 for stability reasons, [5] and proposed to fork the source code of ext3, rename it as ext4, and perform all the development there, without affecting existing ext3 users. This proposal was accepted, and on 28 June 2006, Theodore Ts'o, the ext3 maintainer, announced the new plan of development for ext4. [6]

A preliminary development version of ext4 was included in version 2.6.19 [7] of the Linux kernel. On 11 October 2008, the patches that mark ext4 as stable code were merged in the Linux 2.6.28 source code repositories, [8] denoting the end of the development phase and recommending ext4 adoption. Kernel 2.6.28, containing the ext4 filesystem, was finally released on 25 December 2008. [9] On 15 January 2010, Google announced that it would upgrade its storage infrastructure from ext2 to ext4. [10] On 14 December 2010, Google also announced it would use ext4, instead of YAFFS, on Android 2.3. [11]

Adoption

ext4 is the default file system for many Linux distributions including Debian and Ubuntu. [12]

Features

Large file system
The ext4 filesystem can support volumes with sizes in theory up to 64 zebibyte (ZiB) and single files with sizes up to 16 tebibytes (TiB) with the standard 4 KiB block size, and volumes with sizes up to 1 yobibyte (YiB) with 64 KiB clusters, though a limitation in the extent format makes 1 exbibyte (EiB) the practical limit. [13] The maximum file, directory, and filesystem size limits grow at least proportionately with the filesystem block size up to the maximum 64 KiB block size available on ARM and PowerPC/Power ISA CPUs.
Extents
Extents replace the traditional block mapping scheme used by ext2 and ext3. An extent is a range of contiguous physical blocks, improving large-file performance and reducing fragmentation. A single extent in ext4 can map up to 128  MiB of contiguous space with a 4 KiB block size. [4] There can be four extents stored directly in the inode. When there are more than four extents to a file, the rest of the extents are indexed in a tree. [14]
Backward compatibility
ext4 is backward-compatible with ext3 and ext2, making it possible to mount ext3 and ext2 as ext4. This will slightly improve performance, because certain new features of the ext4 implementation can also be used with ext3 and ext2, such as the new block allocation algorithm, without affecting the on-disk format.
ext3 is partially forward-compatible with ext4. Practically, ext4 will not mount as an ext3 filesystem out of the box, unless certain new features are disabled when creating it, such as ^extent, ^flex_bg, ^huge_file, ^uninit_bg, ^dir_nlink, and ^extra_isize. [15]
Persistent pre-allocation
ext4 can pre-allocate on-disk space for a file. To do this on most file systems, zeroes would be written to the file when created. In ext4 (and some other file systems such as XFS) fallocate(), a new system call in the Linux kernel, can be used. The allocated space would be guaranteed and likely contiguous. This situation has applications for media streaming and databases.
Delayed allocation
ext4 uses a performance technique called allocate-on-flush, also known as delayed allocation. That is, ext4 delays block allocation until data is flushed to disk; in contrast, some file systems allocate blocks immediately, even when the data goes into a write cache. Delayed allocation improves performance and reduces fragmentation by effectively allocating larger amounts of data at a time.
Unlimited number of subdirectories
ext4 does not limit the number of subdirectories in a single directory, except by the inherent size limit of the directory itself. (In ext3 a directory can have at most 32,000 subdirectories.) [16] [ obsolete source ]To allow for larger directories and continued performance, ext4 in Linux 2.6.23 and later turns on HTree indices (a specialized version of a B-tree) by default, which allows directories up to approximately 10–12 million entries to be stored in the 2-level HTree index and 2 GB directory size limit for 4 KiB block size, depending on the filename length. In Linux 4.12 and later the largedir feature enabled a 3-level HTree and directory sizes over 2 GB, allowing approximately 6 billion entries in a single directory.
Journal checksums
ext4 uses checksums [17] in the journal to improve reliability, since the journal is one of the most used files of the disk. This feature has a side benefit: it can safely avoid a disk I/O wait during journaling, improving performance slightly. Journal checksumming was inspired by a research article from the University of Wisconsin, titled IRON File Systems, [18] with modifications within the implementation of compound transactions performed by the IRON file system (originally proposed by Sam Naghshineh in the RedHat summit).
Metadata checksumming
Since Linux kernel 3.5 released in 2012. [19] [20]
Faster file-system checking
In ext4 unallocated block groups and sections of the inode table are marked as such. This enables e2fsck to skip them entirely and greatly reduces the time it takes to check the file system. Linux 2.6.24 implements this feature.
fsck time dependence on inode count (ext3 vs. ext4) E2fsck-uninit.svg
fsck time dependence on inode count (ext3 vs. ext4)
Multiblock allocator
When ext3 appends to a file, it calls the block allocator, once for each block. Consequently, if there are multiple concurrent writers, files can easily become fragmented on disk. However, ext4 uses delayed allocation, which allows it to buffer data and allocate groups of blocks. Consequently, the multiblock allocator can make better choices about allocating files contiguously on disk. The multiblock allocator can also be used when files are opened in O_DIRECT mode. This feature does not affect the disk format.
Improved timestamps
As computers become faster in general, and as Linux becomes used more for mission-critical applications, the granularity of second-based timestamps becomes insufficient. To solve this, ext4 provides timestamps measured in nanoseconds. In addition, 2 bits of the expanded timestamp field are added to the most significant bits of the seconds field of the timestamps to defer the year 2038 problem for an additional 408 years. [3]
ext4 also adds support for time-of-creation timestamps. But, as Theodore Ts'o points out, while it is easy to add an extra creation-date field in the inode (thus technically enabling support for these timestamps in ext4), it is more difficult to modify or add the necessary system calls, like stat() (which would probably require a new version) and the various libraries that depend on them (like glibc). These changes will require coordination of many projects. [21] Therefore, the creation date stored by ext4 is currently only available to user programs on Linux via the statx() API. [22]
Project quotas
Support for project quotas was added in Linux kernel 4.4 on 8 Jan 2016. This feature allows assigning disk quota limits to a particular project ID. The project ID of a file is a 32-bit number stored on each file and is inherited by all files and subdirectories created beneath a parent directory with an assigned project ID. This allows assigning quota limits to a particular subdirectory tree independent of file access permissions on the file, such as user and project quotas that are dependent on the UID and GID. While this is similar to a directory quota, the main difference is that the same project ID can be assigned to multiple top-level directories and is not strictly hierarchical. [23]
Transparent encryption
Support for transparent encryption was added in Linux kernel 4.1 on June 2015. [24]


Lazy initialization
The lazyinit feature allows cleaning of inode tables in background, speeding initialization when creating a new ext4 file system. [25] It is available since 2010 in Linux kernel version 2.6.37. [26]
Write barriers
ext4 enables write barriers by default. It ensures that file system metadata is correctly written and ordered on disk, even when write caches lose power. This goes with a performance cost especially for applications that use fsync heavily or create and delete many small files. For disks with a battery-backed write cache, disabling barriers (option 'barrier=0') may safely improve performance. [27]

Limitations

In 2008, the principal developer of the ext3 and ext4 file systems, Theodore Ts'o, stated that although ext4 has improved features, it is not a major advance, it uses old technology, and is a stop-gap. Ts'o believes that Btrfs is the better direction because "it offers improvements in scalability, reliability, and ease of management". [28] Btrfs also has "a number of the same design ideas that reiser3/4 had". [29] However, ext4 has continued to gain new features such as file encryption and metadata checksums.

The ext4 file system does not honor the "secure deletion" file attribute, which is supposed to cause overwriting of files upon deletion. A patch to implement secure deletion was proposed in 2011, but did not solve the problem of sensitive data ending up in the file-system journal. [30]

Delayed allocation and potential data loss

Because delayed allocation changes the behavior that programmers have been relying on with ext3, the feature poses some additional risk of data loss in cases where the system crashes or loses power before all of the data has been written to disk. Due to this, ext4 in kernel versions 2.6.30 and later automatically handles these cases as ext3 does.

The typical scenario in which this might occur is a program replacing the contents of a file without forcing a write to the disk with fsync. There are two common ways of replacing the contents of a file on Unix systems: [31]

In this case, an existing file is truncated at the time of open (due to O_TRUNC flag), then new data is written out. Since the write can take some time, there is an opportunity of losing contents even with ext3, but usually very small. However, because ext4 can delay writing file data for a long time, this opportunity is much greater.
There are several problems that can arise:
  1. If the write does not succeed (which may be due to error conditions in the writing program, or due to external conditions such as a full disk), then both the original version and the new version of the file will be lost, and the file may be corrupted because only a part of it has been written.
  2. If other processes access the file while it is being written, they see a corrupted version.
  3. If other processes have the file open and do not expect its contents to change, those processes may crash. One notable example is a shared library file which is mapped into running programs.
Because of these issues, often the following idiom is preferred over the one above:
A new temporary file ("file.new") is created, which initially contains the new contents. Then the new file is renamed over the old one. Replacing files by the rename() call is guaranteed to be atomic by POSIX standards – i.e. either the old file remains, or it's overwritten with the new one. Because the ext3 default "ordered" journaling mode guarantees file data is written out on disk before metadata, this technique guarantees that either the old or the new file contents will persist on disk. ext4's delayed allocation breaks this expectation, because the file write can be delayed for a long time, and the rename is usually carried out before new file contents reach the disk.

Using fsync() more often to reduce the risk for ext4 could lead to performance penalties on ext3 filesystems mounted with the data=ordered flag (the default on most Linux distributions). Given that both file systems will be in use for some time, this complicates matters for end-user application developers. In response, ext4 in Linux kernels 2.6.30 and newer detect the occurrence of these common cases and force the files to be allocated immediately. For a small cost in performance, this provides semantics similar to ext3 ordered mode and increases the chance that either version of the file will survive the crash. This new behavior is enabled by default, but can be disabled with the "noauto_da_alloc" mount option. [31]

The new patches have become part of the mainline kernel 2.6.30, but various distributions chose to backport them to 2.6.28 or 2.6.29. [32]

These patches don't completely prevent potential data loss or help at all with new files. The only way to be safe is to write and use software that does fsync() when it needs to. Performance problems can be minimized by limiting crucial disk writes that need fsync() to occur less frequently. [33]

Implementation

Simplified structure of the Linux kernel: ext4 is implemented between the Linux kernel Virtual File System and the generic block layer. Simplified Structure of the Linux Kernel.svg
Simplified structure of the Linux kernel: ext4 is implemented between the Linux kernel Virtual File System and the generic block layer.

Linux kernel Virtual File System is a subsystem or layer inside of the Linux kernel. It is the result of the very serious attempt to integrate multiple file systems into an orderly single structure. The key idea, which dates back to the pioneering work done by Sun Microsystems employees in 1986, [34] is to abstract out that part of the file system that is common to all file systems and put that code in a separate layer that calls the underlying concrete file systems to actually manage the data.

All system calls related to files (or pseudo files) are directed to the Linux kernel Virtual File System for initial processing. These calls, coming from user processes, are the standard POSIX calls, such as open , read , write , lseek , etc.

Compatibility with Windows and Macintosh

Currently, ext4 has full support on non-Linux operating systems.

Microsoft Windows can access ext4 since Windows 10 Insider Preview Build 20211. [35] [36] [37] It is possible thanks to Windows Subsystem for Linux (WSL) which was introduced with Windows 10 Anniversary Update (version 1607) on 2 August 2016. WSL is available only in 64-bit versions of Windows 10 from version 1607. It is also available in Windows Server 2019. Big changes to the WSL architecture came with the release of WSL 2 on 12 June 2019. [38] WSL 2 requires Windows 10 version 1903 or higher, with build 18362 or higher, for x64 systems, and version 2004 or higher, with build 19041 or higher, for ARM64 systems. [39]

Paragon offers its commercial product Linux File Systems for Windows [40] which allows read/write capabilities for ext2/3/4 on Windows 7 SP1/8/8.1/10 and Windows Server 2008 R2 SP1/2012/2016.

macOS has full ext2/3/4 read–write capability through the extFS for Mac by Paragon Software, [41] which is a commercial product. Free software such as ext4fuse has read-only support with limited functionality.

See also

Related Research Articles

XFS is a high-performance 64-bit journaling file system created by Silicon Graphics, Inc (SGI) in 1993. It was the default file system in SGI's IRIX operating system starting with its version 5.3. XFS was ported to the Linux kernel in 2001; as of June 2014, XFS is supported by most Linux distributions; Red Hat Enterprise Linux uses it as its default file system.

ReiserFS is a general-purpose, journaling file system initially designed and implemented by a team at Namesys led by Hans Reiser and licensed under GPLv2. Introduced in version 2.4.1 of the Linux kernel, it was the first journaling file system to be included in the standard kernel. ReiserFS was the default file system in Novell's SUSE Linux Enterprise until Novell decided to move to ext3 for future releases on October 12, 2006.

ext2, or second extended file system, is a file system for the Linux kernel. It was initially designed by French software developer Rémy Card as a replacement for the extended file system (ext). Having been designed according to the same principles as the Berkeley Fast File System from BSD, it was the first commercial-grade filesystem for Linux.

ext3, or third extended filesystem, is a journaled file system that is commonly used by the Linux kernel. It used to be the default file system for many popular Linux distributions. Stephen Tweedie first revealed that he was working on extending ext2 in Journaling the Linux ext2fs Filesystem in a 1998 paper, and later in a February 1999 kernel mailing list posting. The filesystem was merged with the mainline Linux kernel in November 2001 from 2.4.15 onward. Its main advantage over ext2 is journaling, which improves reliability and eliminates the need to check the file system after an unclean shutdown. Its successor is ext4.

Journaled File System (JFS) is a 64-bit journaling file system created by IBM. There are versions for AIX, OS/2, eComStation, ArcaOS and Linux operating systems. The latter is available as free software under the terms of the GNU General Public License (GPL). HP-UX has another, different filesystem named JFS that is actually an OEM version of Veritas Software's VxFS.

<span class="mw-page-title-main">Defragmentation</span> Rearrangement of sectors on a hard disk into contiguous units

In the maintenance of file systems, defragmentation is a process that reduces the degree of fragmentation. It does this by physically organizing the contents of the mass storage device used to store files into the smallest number of contiguous regions. It also attempts to create larger regions of free space using compaction to impede the return of fragmentation. Some defragmentation utilities try to keep smaller files within a single directory together, as they are often accessed in sequence.

The inode is a data structure in a Unix-style file system that describes a file-system object such as a file or a directory. Each inode stores the attributes and disk block locations of the object's data. File-system object attributes may include metadata, as well as owner and permission data.

The extended file system, or ext, was implemented in April 1992 as the first file system created specifically for the Linux kernel. It has metadata structure inspired by traditional Unix filesystem principles, and was designed by Rémy Card to overcome certain limitations of the MINIX file system. It was the first implementation that used the virtual file system (VFS), for which support was added in the Linux kernel in version 0.96c, and it could handle file systems up to 2 gigabytes (GB) in size.

<span class="mw-page-title-main">File system</span> Format or program for storing files and directories

In computing, a file system or filesystem is a method and data structure that the operating system uses to control how data is stored and retrieved. Without a file system, data placed in a storage medium would be one large body of data with no way to tell where one piece of data stopped and the next began, or where any piece of data was located when it was time to retrieve it. By separating the data into pieces and giving each piece a name, the data are easily isolated and identified. Taking its name from the way a paper-based data management system is named, each group of data is called a "file". The structure and logic rules used to manage the groups of data and their names is called a "file system."

<span class="mw-page-title-main">Theodore Ts'o</span> American computer scientist, free software developer

Theodore Yue Tak Ts'o is an American software engineer mainly known for his contributions to the Linux kernel, in particular his contributions to file systems. He is the secondary developer and maintainer of e2fsprogs, the userspace utilities for the ext2, ext3, and ext4 filesystems, and is a maintainer for the ext4 file system.

In computing, an extent is a contiguous area of storage reserved for a file in a file system, represented as a range of block numbers, or tracks on count key data devices. A file can consist of zero or more extents; one file fragment requires one extent. The direct benefit is in storing each range compactly as two numbers, instead of canonically storing every block number in the range. Also, extent allocation results in less file fragmentation.

Xiafs was a file system for the Linux kernel which was conceived and developed by Frank Xia and was based on the MINIX file system. Today it is obsolete and not in use, except possibly in some historic installations.

The following tables compare general and technical information for a number of file systems.

Btrfs is a computer storage format that combines a file system based on the copy-on-write (COW) principle with a logical volume manager, developed together. It was founded by Chris Mason in 2007 for use in Linux, and since November 2013, the file system's on-disk format has been declared stable in the Linux kernel.

In computer operating systems, mkfs is a command used to format a block storage device with a specific file system. The command is part of Unix and Unix-like operating systems. In Unix, a block storage device must be formatted with a file system before it can be mounted and accessed through the operating system's filesystem hierarchy.

The Orlov block allocator is an algorithm to define where a particular file will reside on a given file system (blockwise), so as to speed up disk operations.

An HTree is a specialized tree data structure for directory indexing, similar to a B-tree. They are constant depth of either one or two levels, have a high fanout factor, use a hash of the filename, and do not require balancing. The HTree algorithm is distinguished from standard B-tree methods by its treatment of hash collisions, which may overflow across multiple leaf and index blocks. HTree indexes are used in the ext3 and ext4 Linux filesystems, and were incorporated into the Linux kernel around 2.5.40. HTree indexing improved the scalability of Linux ext2 based filesystems from a practical limit of a few thousand files, into the range of tens of millions of files per directory.

A journaling file system is a file system that keeps track of changes not yet committed to the file system's main part by recording the goal of such changes in a data structure known as a "journal", which is usually a circular log. In the event of a system crash or power failure, such file systems can be brought back online more quickly with a lower likelihood of becoming corrupted.

Next3 is a journaling file system for Linux based on ext3 which adds snapshots support, yet retains compatibility to the ext3 on-disk format. Next3 is implemented as open-source software, licensed under the GPL license.

Ext2Fsd is a free Installable File System driver written in C for the Microsoft Windows operating system family. It facilitates read and write access to the ext2, ext3 and ext4 file systems.

References

  1. 1 2 Previously, Linux used the same GUID for the data partitions as Windows (Basic data partition: EBD0A0A2-B9E5-4433-87C0-68B6B72699C7). Linux never had a separate unique partition type GUID defined for its data partitions. This created problems when dual-booting Linux and Windows in UEFI-GPT setup. The new GUID (Linux filesystem data: 0FC63DAF-8483-4772-8E79-3D69D8477DE4) was defined jointly by GPT fdisk and GNU Parted developers. It is identified as type code 0x8300 in GPT fdisk. (See definitions in gdisk's parttypes.cc)
  2. "DiscoverablePartitionsSpec". freedesktop.org. Retrieved 7 April 2018.
  3. 1 2 "ext4: Fix handling of extended tv_sec". Linux-stable kernel tree. Retrieved 14 February 2017.
  4. 1 2 Mathur, Avantika; Cao, MingMing; Bhattacharya, Suparna; Dilger, Andreas; Zhuravlev (Tomas), Alex; Vivier, Laurent (2007). "The new ext4 filesystem: current status and future plans" (PDF). Proceedings of the Linux Symposium. Ottawa, ON, CA: Red Hat. Archived from the original (PDF) on 6 July 2010. Retrieved 15 January 2008.
  5. Torvalds, Linus (9 June 2006). "extents and 48bit ext3". Linux kernel mailing list.
  6. Ts'o, Theodore (28 June 2006). "Proposal and plan for ext2/3 future development work". Linux kernel mailing list.
  7. Leemhuis, Thorsten (23 December 2008). "Higher and further: The innovations of Linux 2.6.28 (page 2)". Heise Online. Archived from the original on 3 January 2009. Retrieved 9 January 2010.
  8. "ext4: Rename ext4dev to ext4". Linus' kernel tree. Archived from the original on 29 May 2012. Retrieved 20 October 2008.
  9. Leemhuis, Thorsten (23 December 2008). "Higher and further: The innovations of Linux 2.6.28". Heise Online.
  10. Paul, Ryan (15 January 2010). "Google upgrading to Ext4, hires former Linux Foundation CTO". Ars Technica.
  11. "Android 2.3 Gingerbread to use Ext4 file system". The H Open. 14 December 2010.
  12. "FileSystem in debian". 14 September 2019.
  13. "ext4 - High Level Design". kernel.org. Retrieved 8 December 2023.
  14. Pomeranz, Hal (28 March 2011). "Understanding EXT4 (Part 3): Extent Trees". SANS Digital Forensics and Incident Response Blog. Archived from the original on 18 August 2019.
  15. "Mount of ext4 (created without extents) as ext3 fails on RH6.2". www.linuxquestions.org. Archived from the original on 5 August 2023. Retrieved 8 December 2023.
  16. "Ext4 - Linux Kernel Newbies". kernelnewbies.org.
  17. "New ext4 features - Ext4". ext4.wiki.kernel.org. Archived from the original on 23 September 2023. Retrieved 8 December 2023.
  18. Prabhakaran, Vijayan; Bairavasundaram, Lakshmi N.; Agrawal, Nitin; Gunawi, Haryadi S.; Arpaci-Dusseau, Andrea C.; Arpaci-Dusseau, Remzi H. (October 2005). IRON File Systems (PDF). Symposium on Operating Systems Principles (SOSP '05). Brighton, United Kingdom: CS Dept, University of Wisconsin. Section 6.1, Paragraph 5 "Transactional Checksums". Retrieved 8 December 2023.
  19. "Ext4 Metadata Checksums - Ext4". ext4.wiki.kernel.org. Archived from the original on 6 November 2023. Retrieved 8 December 2023.
  20. "Linux_3.5 - Linux Kernel Newbies". kernelnewbies.org.
  21. Ts'o, Theodore (5 October 2006). "Re: creation time stamps for ext4 ?".
  22. Edge, Jake (31 March 2017). "Extending statx()". Archived from the original on 20 September 2023. Retrieved 8 December 2023.
  23. Li, Xi (12 January 2016). "ext4: add project quota support" (Mailing list). Archived from the original on 20 September 2023. Retrieved 8 December 2023.
  24. Ts'o, Theodore (8 April 2015). "Ext4 encryption". Archived from the original on 12 October 2023. Retrieved 8 December 2023.
  25. "Ext4 Filesystem". Thomas-Krenn-Wiki. Archived from the original on 14 February 2022. Retrieved 8 December 2023.
  26. "kernel/git/torvalds/linux.git - Linux kernel source tree". git.kernel.org.
  27. "Ext4 -". ArchWiki.
  28. Paul, Ryan (14 April 2009). "Panelists ponder the kernel at Linux Collaboration Summit". Ars Technica. Retrieved 22 August 2009.
  29. Theodore Ts'o (1 August 2008). "Re: reiser4 for 2.6.27-rc1". linux-kernel (Mailing list). Retrieved 31 December 2010.
  30. Corbet, Jonathan (11 October 2011). "Securely deleting files from ext4 filesystems".
  31. 1 2 "ext4 documentation in Linux kernel source". 28 March 2009.
  32. Ubuntu bug #317781 Long discussion between Ubuntu developers and Theodore Ts'o on potential data loss
  33. Thoughts by Ted blog entry, 12 March 2009 A blog posting of Theodore Ts'o on the subject
  34. Kleiman
  35. Brandon LeBlanc (10 September 2020). "Announcing Windows 10 Insider Preview Build 20211". Windows Blogs. Retrieved 25 May 2021.
  36. Pierre Boulay (10 September 2020). "Access Linux filesystems in Windows and WSL 2". Windows Command Line. Retrieved 25 May 2021.
  37. "Get started mounting a Linux disk in WSL 2". Microsoft Docs. Retrieved 25 May 2021.
  38. Craig Loewen (12 June 2019). "WSL 2 is now available in Windows Insiders". Windows Command Line. Retrieved 25 May 2021.
  39. "Windows Subsystem for Linux Installation Guide for Windows 10". Windows Docs. Retrieved 25 May 2021.
  40. "Linux File Systems for Windows". Paragon Software. Retrieved 25 May 2021.
  41. "extFS for Mac". Paragon Software. Retrieved 25 May 2021.