A flash file system is designed to store files on flash-based memory storage devices. Flash file systems vary in their architecture, but most of them include an application programming interface, a file system core, a block driver for sector-based file systems and a memory technology device (MTD) layer.
When stored flash is to be updated, the file system writes a new copy of the changed data to a fresh block and remaps the file pointers. The old block of data can then be erased when the flash file system has time to do so.
Linux flash file systems
The earliest flash file system was the True Flash File System (TrueFFS) from Israel-based M-Systems. The first flash-specific file system for NOR flash memory devices on Linux was the Journaling Flash File System (JFFS). JFFS2, which replaced JFFS and added support for NAND flash, has been used since 2001.
There are a number of possible replacements for JFFS2:
- Yet Another Flash File System. Yaffs1 and Yaffs2 support NAND flash chips.
- Unsorted Block Image File System. UBIFS supports write caching and stores indexes in flash.
- LogFS. This Linux-based flash-specific file system is under development to address JFFS2 scalability issues.
- Flash-Friendly File System. F2FS is for use on flash-based storage devices with a flash translation layer, which is a component of the solid-state drive (SSD) controller that maps logical block addresses from the host to the physical block addresses on the drive.
Pros and cons of flash file systems
Flash file systems are generally used only for MTDs, which are embedded flash memories that lack a controller. An MTD provides specific information about a flash device, such as device type, buffer size, and block and partition size.
Flash file systems are designed to spread writes out as evenly as possible to increase the lifespan of a flash device. A flash file system can ensure a flash-based design uses all of the capabilities of the flash device as efficiently as possible.
A flash file system cannot be accessed by end users. It is built into the firmware and is used by the flash controller to manage program/erase cycles on the flash media. Flash file systems, such as a NAND flash file system, are generally proprietary and specific to individual controllers.