File Systems

From ReactOS Wiki
Jump to: navigation, search

This page contains information about file systems ReactOS intends to support.

FAT32

Commit history (Source code can be found in: /reactos/drivers/filesystems/fastfat) Code Overview

Background

FAT32 is a file system designed by Microsoft, introduced in August 1996 on Windows 95 OSR2. It is simple and easy to understand compared to other common file systems. The FAT file system is supported across a variety of other operating systems, including GNU/Linux, FreeBSD, BeOS, Mac OS X, and FreeDOS. This makes FAT32 an effective file system for sharing files between operating systems. It is also commonly used on flash media and external hard drives, which ReactOS intends to be able to read with pending USB mass storage support.

Status

FAT32 is the file system that has been supported by ReactOS for a long time now, ReactOS can read, write and boot from it. The driver (fastfat.sys) has gone through several iterations, including an attempt to rewrite it with the FullFAT library. In the meantime, Microsoft themselves open-sourced their fastfat.sys - attempts to integrate it into ReactOS have shown that our kernel isn't 100% ready yet.

Btrfs

Commit history (Source code can be found in: /reactos/drivers/filesystems/btrfs)

Background

Btrfs is a Linux filesystem of the "next generation". It was designed to supersede the ext series of Linux filesystems. Principal features include:

  • Copy-on-Write (COW) - Instead of "deep copying", file copies start as light-weight references. On modification, the original data is left untouched. Foundation of the fast and "low-cost" Btrfs snapshots
  • B-tree design - in contrast to a table-based system like FAT
  • Maximum filesize of more than 16 Exabytes
  • Data checksumming - all data is checksummed on read and write - this can detect hardware errors previously undetected
  • Subvolumes - this feature allows to "partition" a Btrfs filesystem in separate filesystem hierarchies, which can be separately mounted - basis of the snapshot feature
  • Built-in RAID 0,1,5,6,10 support - a Btrfs filesystem can span multiple disks, the user can select trade-offs (RAID levels) between data redundancy/space economy and performance
  • Built-in compression support
  • Online defragmentation (defrag) and checksum check (scrub)
  • Btrfs snapshots - ideal for differential backup solutions

Status

Since version 0.4.10 ReactOS can be installed on Btrfs. This includes support for creating Btrfs filesystems (in the installer at least), installing and running ReactOS (read-write) from Btrfs and a shell extension adding a "Btrfs" tab to the drive properties dialog. The driver used is an in-tree copy of Mark Harmstone's fully-featured WinBtrfs driver for Microsoft Windows. In 2016 Peter Hater and Pierre Schweitzer started the integration into ReactOS. As part of the Google Summer of Code 2018, Victor Perevertkin wrote the Btrfs support code for FreeLoader, allowing ReactOS to boot from Btrfs directly. The integration already allowed to send some bug fixes upstream to WinBtrfs proper.

NTFS

Commit history (Source code can be found in: /reactos/drivers/filesystems/ntfs)

Background

The New Technology File System (NTFS) is another file system designed by Microsoft. It was introduced with the NT line of operating systems, superseding FAT as the preferred file system. Details on the implementation's internals are not released, which makes it difficult to implement. Other operating systems, most notably Linux-based distributions, use NTFS-3G and the FUSE file system interface to support read and write access to NTFS partitions.

Status

Targeted for ReactOS 0.5.0. ReactOS is currently able to read NTFS drives but write support is not yet enabled. Full support for the NTFS file system is planned but is not currently a high priority. The first objective in this area is to be able to use the driver included in Windows XP, which would ensure ReactOS could support the file system.

End of August 2017:

  • Added support for file creation.
  • Added support for folder creation.
  • Windows sees all files and folders created in ReactOS. Tested with up to 700 files (present limit of tester).
  • All files created in ReactOS have proper contents when read in Windows.
  • Chkdsk won't report any problems after creating files and folders in ReactOS.
  • Identified and repaired numerous bugs.

Planned to do:

  • Deleting files and directories
  • Renaming files and directories
  • Caching
  • Page-file support
  • Support for async IO
  • Support for memory mapped files

Unimplemented features needed for boot:

  • Adding support for formatting a volume
  • Updating setup to use NTFS
  • Creating a bootloader for NTFS and using / fixing freeldr's NTFS support
  • There might be something else I've forgotten / am not aware of

Not fully implemented functions:

  • Sparse files
  • Alternate Data Streams (Named Streams)
  • File records that have or require an $ATTRIBUTE_LIST attribute

Not supported functions:

  • Support for drives and files with greater-than 2^32 clusters
  • Compressed files
  • Encrypted files
  • Logging[1]

Components

Ntfs.sys

ext2/3/4

Commit history (Source code can be found in: /reactos/drivers/filesystems/ext2)

Background

The second extended filesystem (ext2) is a file system designed for the Linux kernel. It was introduced in January 1993 as a replacement for the extended filesystem (ext). ext2 was replaced by ext3, a similar file system with journaling, but is still popular for use on flash-based storage media. Because Microsoft provides no support for the extended file system, a file system driver had to be written by a third-party developer. The ext2 file system driver was originally developed by Manoj Paul Joseph before ReactOS developers began working on it and testing it on Windows. Filip Navara took interest and continued development on the driver.

Status

The settings to format a HDD partition to ext2 are already included in the 1st stage setup, but are currently disabled. The ext2 file system driver itself is developed enough that it could be used. However, other components of the operating system need further development before ext2 can be used (in particular, the cache manager). Art Yerkes has been working to, among other things, provide a usable implementation of the cache manager in ReactOS. As of r44038, it is possible to boot ReactOS on an ext2 partition through building of the arty-newcc branch. Yerkes also added a _NEWCC_ switch (in r44092), which would allow merging to a trunk build and building with either the new or old cache manager implementation.

r55896:

  • [EXT2LIB]
    • Fix formatting FAT or NTFS volumes into EXT2 by defining ZAP_BOOTBLOCK and fixing a bug in zap_sector()
  • [USETUP]
    • Enable ext2 as an option in setup

According to this topic (retrieved March 1st, 2012)

  • Usetup (1st stage setup) can create and format an ext2 volume
  • FreeLoader (unlike NTLDR) CAN boot ReactOS from ext2
  • The current issue is that it seems our ext2 driver has bit-rotted but Art has a new one which he can import which supposedly works
  • However, the ext2 driver depends on NewCC which we're still debugging (random hangs, crashes)
  • Once NewCC is enabled, we should support ext2 (installing, booting, mounting, formatting, etc) assuming the new ext2 driver is imported by then.

28.09.2015 driver was rewrited with using Ext2fsd. 12.10.2015 in revision 897634c (r69509) he is was added to trunk.

Other file systems

  • According to Windows NT registry, almost all parts of network services, which running in kernel-mode are file system drivers, namely:
    • NPFS
    • MSFS (MailSlot)
  • Btrfs - In 2016 Mark Harmstone published on github BtrFS-driver for Windows. Based on his code, developers have added support of this FS to ReactOS. (CORE-10892) During the GSOC 2018 Victor Perevertkin added support for ReactOS to install and boot on this FS.
  • ReiserFS was added in 2016. (CORE-11005)
  • NFS An open source NFS 4.1 file system driver has been released for Windows. Implementing by Pierre Schweitzer‏. [WIP]
  • ISO-images support was implemented in 03-Dec-2017
  • CDFS <=> ISO-9660
  • UDF was added in June 2017.
  • MUP
The multiple UNC provider (MUP) is a kernel-mode component responsible for channeling all remote file system accesses using a Universal Naming Convention :(UNC) name to a network redirector (the UNC provider) that is capable of handling the remote file system requests. Mup.sys
  • SMBFS is the file system used for Samba (network sharing for windows) - it's missing now
  • VFD - virtual floppy drive for floppy images was implemented 23-dec-2017. (CORE-14090)

See Also