Lines Matching +full:directory +full:- +full:based

1 .. SPDX-License-Identifier: GPL-2.0
4 EROFS - Enhanced Read-Only File System
10 EROFS filesystem stands for Enhanced Read-Only File System. It aims to form a
11 generic read-only filesystem solution for various read-only use cases instead
17 random-access friendly high-performance filesystem to get rid of unneeded I/O
18 amplification and memory-resident overhead compared to similar approaches.
22 - read-only storage media or
24 - part of a fully trusted read-only solution, which means it needs to be
25 immutable and bit-for-bit identical to the official golden image for
28 - hope to minimize extra storage space with guaranteed end-to-end performance
30 especially for those embedded devices with limited memory and high-density
35 - Little endian on-disk design;
37 - 4KiB block size and 32-bit block addresses, therefore 16TiB address space
40 - Two inode layouts for different requirements:
48 Per-inode timestamp no yes (64 + 32-bit timestamp)
53 - Metadata and data could be mixed as an option;
55 - Support extended attributes (xattrs) as an option;
57 - Support tailpacking data and xattr inline compared to byte-addressed
60 - Support POSIX.1e ACLs by using xattrs;
62 - Support transparent data compression as an option:
63 LZ4 and MicroLZMA algorithms can be used on a per-file basis; In addition,
67 - Support direct I/O on uncompressed files to avoid double caching for loop
70 - Support FSDAX on uncompressed images for secure containers and ramdisks in
73 - Support multiple devices for multi blob container images;
75 - Support file-based on-demand loading with the Fscache infrastructure.
77 The following git tree provides the file system user-space tools under
78 development, such as a formatting tool (mkfs.erofs), an on-disk consistency &
81 - git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs-utils.git
84 linux-erofs mailing list:
86 - linux-erofs mailing list <linux-erofs@lists.ozlabs.org>
99 disabled In-place I/O decompression only;
102 in-place I/O decompression for the rest
106 It still does in-place I/O decompression
113 fsid=%s Specify a filesystem image ID for Fscache back-end.
120 Each mounted filesystem will have a directory in /sys/fs/erofs based on its
122 (see also Documentation/ABI/testing/sysfs-fs-erofs)
124 On-disk details
128 -------
129 Different from other read-only file systems, an EROFS volume is designed
132 |-> aligned with the block size
151 |-> aligned with 8B
152 |-> followed closely
153 + meta_blkaddr blocks |-> another slot
157 |-> aligned with the inode slot size
164 .____________________________________________________|-> aligned with 4B
167 |-> 12 bytes <-|->x * 4 bytes<-| .
174 |-> aligned with 4B
175 |-> aligned with 4B
178 field which all inode versions have -- i_format::
195 1 fixed-sized output data compression (with non-compacted indexes);
197 3 fixed-sized output data compression (with compacted indexes, v5.3+);
198 4 chunk-based file (v5.15+).
216 |-> aligned by 4 bytes
217 + xattr_blkaddr blocks |-> aligned with 4 bytes
223 -----------
224 All directories are now organized in a compact on-disk format. Note that
225 each directory block is divided into index and name areas in order to support
226 random file lookup, and all directory entries are _strictly_ recorded in
235 / / | nameoff1 | nameoffN-1
238 |___.0___|____1___|_____|___N-1__|____0_____|____1_____|_____|___N-1____|
243 Directory block
246 the total number of directory entries in this block since it is no need to
247 introduce another on-disk field at all.
249 Chunk-based files
250 -----------------
251 In order to support chunk-based data deduplication, a new inode data layout has
252 been supported since Linux v5.15: Files are split in equal-sized data chunks
254 data: these can be simply as a 4-byte block address array or in the 8-byte
258 By the way, chunk-based files are all uncompressed for now.
261 ----------------
262 EROFS implements LZ4 fixed-sized output compression which generates fixed-sized
263 compressed data blocks from variable-sized input in contrast to other existing
264 fixed-sized input solutions. Relatively higher compression ratios can be gotten
265 by using fixed-sized output compression since nowadays popular data compression
266 algorithms are mostly LZ77-based and such fixed-sized output approach can be
269 In details, original (uncompressed) data is turned into several variable-sized
271 In order to record each variable-sized extent, logical clusters (lclusters) are
276 |<- variable-sized extent ->|<- VLE ->|
282 |-> lcluster <-|-> lcluster <-|-> lcluster <-|-> lcluster <-|
290 |-> big pcluster <-|-> pcluster <-|
293 which contains compressed data. Previously, only lcluster-sized (4KB) pclusters
312 |<----- a big pcluster (with CBLKCNT) ------>|<-- -->|
313 a lcluster-sized pcluster (without CBLKCNT) ^