mkfs.cramfs
命令详解
描述
mkfs.cramfs
是 Linux 系统中用于创建 cramfs(Compressed ROM File System)文件系统的工具。cramfs 是一种专为嵌入式系统设计的 只读压缩文件系统,其核心特点如下:
-
压缩存储
文件数据通过zlib
压缩算法按页(page)进行压缩,允许随机读取访问。元数据(metadata)未压缩,但采用更紧凑的表示方式,节省存储空间。 -
只读设计
cramfs 的设计目标是简化实现,因此文件系统默认为只读。支持随机写入的压缩文件系统(如 JFFS2)更为复杂,而 cramfs 专注于高效读取。 -
限制与兼容性
- 单个文件最大支持 16MB(可通过修改内核参数扩展至 256MB)。
- 整个文件系统最大容量接近 272MB(受 256MB 块限制)。
- 需要内核支持 cramfs(编译时启用
CONFIG_CRAMFS
)。
语法
mkfs.cramfs [选项] 目录 文件
参数说明
-
目录
指定要打包成 cramfs 文件系统的根目录(即源文件目录树)。 -
文件
生成的 cramfs 文件系统镜像文件路径(例如/path/to/cramfs.img
),后续可挂载使用。
选项详解
选项 | 功能 | 说明 |
---|---|---|
-v | 启用详细输出 | 显示操作过程中的详细信息,便于调试。 |
-E | 将警告视为错误 | 警告信息会通过命令返回值反映(非 0 表示失败)。 |
-b blocksize | 设置块大小 | 块大小需为系统页大小(通常 4KB)的整数倍。块大小影响压缩效率和性能。 |
-e edition | 指定文件系统版本号 | 在超级块(superblock)中记录指定的版本号。 |
-N big, little, host | 设置字节序 | 指定文件系统的字节序(big /little /host )。默认为当前主机的字节序。 |
-i file | 插入文件 | 将指定文件插入到 cramfs 文件系统中(需确保文件系统未被挂载)。 |
-n name | 设置文件系统名称 | 为 cramfs 文件系统指定一个自定义名称。 |
-p | 填充 512 字节 | 为启动代码预留 512 字节的填充空间(常用于嵌入式系统启动)。 |
-s | 目录项排序(忽略) | 该选项已废弃,早期版本用于启用目录项排序,现无实际作用。 |
-z | 创建显式空洞 | 要求内核版本 2.3.39 或更高,用于优化稀疏文件处理。 |
-V | 显示版本信息 | 输出 mkfs.cramfs 的版本并退出。 |
-h | 显示帮助 | 输出帮助信息并退出。 |
退出状态
- 0:操作成功。
- 8:操作失败(如内存分配失败、参数错误等)。
使用示例
-
基础用法
将/rootfs
目录打包为 cramfs 镜像文件cramfs.img
:mkfs.cramfs /rootfs cramfs.img
-
启用详细输出
查看打包过程的详细信息:mkfs.cramfs -v /rootfs cramfs.img
-
指定块大小
使用 8KB 块大小(需为页大小的整数倍):mkfs.cramfs -b 8192 /rootfs cramfs.img
-
插入单个文件
将test.txt
插入到已存在的 cramfs 镜像中:mkfs.cramfs -i test.txt /rootfs cramfs.img
-
设置文件系统名称
为镜像指定名称my_cramfs
:mkfs.cramfs -n my_cramfs /rootfs cramfs.img
注意事项
-
只读性
cramfs 文件系统为 只读,无法直接写入或修改文件。若需可写文件系统,可考虑使用 JFFS2 或 YAFFS2。 -
文件大小限制
- 默认单个文件最大 16MB(可通过修改内核源码中的
CRAMFS_SIZE_WIDTH
参数扩展)。 - 总文件系统大小接近 272MB(受 256MB 块限制)。
- 默认单个文件最大 16MB(可通过修改内核源码中的
-
内核兼容性
- 确保目标内核已启用 cramfs 支持(
CONFIG_CRAMFS
)。 - 使用
-z
选项时,内核版本需为 2.3.39 或更高。
- 确保目标内核已启用 cramfs 支持(
-
性能与适用场景
- 适用于嵌入式设备(如路由器、单板机)的只读文件系统。
- 由于文件需解压后读取,性能略低于非压缩文件系统(如 ext4)。
相关工具
mount
:挂载 cramfs 镜像文件。mount -t cramfs cramfs.img /mnt
mkcramfs
:mkfs.cramfs
的别名,功能相同。