在较新的Debian/Ubuntu系统上,可以直接使用apt命令安装。
apt install erofs-utils
https://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs-utils.git
如果需要支持Lz4压缩特性,需要Lz4 1.8.0+,强烈建议Lz4 1.9.3+。
对于一些旧的lz4版本(lz4-1.8.0~1.8.3),如果没有安装lz4-static, lz4hc算法将无法得到支持。可以使用apt install lz4-static.x86_64
安装lz4-static。但是这些版本在压缩时存在某些bug,不建议直接使用这些版本。
如果使用lz4 1.9.0+,可以直接使用如下命令编译。
cd erofs-utils
./autogen.sh
./configure
make
编译生成的mkfs.erofs程序会保存在mkfs目录下。之后,可以使用make install
将生成的工具安装到系统目录(需要root权限)。
mkfs.erofs 1.3
usage: [options] FILE DIRECTORY
Generate erofs image from DIRECTORY to FILE, and [options] are:
-zX[,Y] X=compressor (Y=compression level, optional)
-C# specify the size of compress physical cluster in bytes
-d# set output message level to # (maximum 9)
-x# set xattr tolerance to # (< 0, disable xattrs; default 2)
-EX[,...] X=extended options
-T# set a fixed UNIX timestamp # to all files
-UX use a given filesystem UUID
--exclude-path=X avoid including file X (X = exact literal path)
--exclude-regex=X avoid including files that match X (X = regular expression)
--force-uid=# set all file uids to # (# = UID)
--force-gid=# set all file gids to # (# = GID)
--help display this help and exit
--max-extent-bytes=# set the maximum decompressed extend size # in bytes
Available compressors are: lz4hc, lz4
mkfs.erofs可以生成压缩和非压缩两种格式的EROFS镜像。
目前可以使用lz4和lz4hc进行压缩,例如:
mkfs.erofs -zlz4hc foo.erofs.img foo/
或者不进行压缩:
mkfs.erofs foo.erofs.img foo/
此外,还可以指定更高的压缩级别,以获得比默认级别更好(略好)的压缩比,例如:
mkfs.erofs -zlz4hc,12 foo.erofs.img foo/
为了获得更好的压缩比(对于普通存储设备有更好的顺序读性能),从linux-5.13开始引入了大物理扇区特性,这与旧内核不向前兼容。
具体来说,-C用于指定每个物理扇区的最大大小(以字节为单位)。
mkfs.erofs -zlz4hc -C65536 foo.erofs.img foo/
在这种情况下,物理扇区大小最多可以是64KiB。
注意,较大的物理扇区大小会导致不好的随机性能,所以需要提前仔细评估。或者根据需要,根据文件访问模式制定自己的文件压缩策略。
linux-5.3中引入了就地解压和压缩索引,这一特性不向前兼容旧内核。为了生成旧内核支持的legacy格式的EROFS镜像,可以考虑在命令行中添加"-E legacy-compress",例如:
mkfs.erofs -E legacy-compress -zlz4hc foo.erofs.img foo/
对于5.3及之后版本的内核,不推荐使用legacy格式的EROFS镜像,因为其运行时性能会下降。