FAT32 文件系统镜像打包工具

简介

mkfatfs.py 是一个用于将指定目录打包为 FAT32 文件系统镜像的 Python 脚本。生成的镜像可以用于嵌入式系统、SD卡模拟等场景。

依赖安装

脚本依赖 mtools 工具包,需要先安装:

# Ubuntu/Debian
sudo apt-get install mtools

# CentOS/RHEL
sudo yum install mtools

# macOS
brew install mtools

使用方法

基本语法

./mkfatfs.py -o <输出镜像> -s <镜像大小> -d <源目录> [选项]

参数说明

  • -o, --output: (必需) 输出的 FAT32 镜像文件路径

  • -s, --size: (必需) 镜像大小,支持 K/M/G 后缀 (例如: 16M, 32M, 1G)

  • -d, --directory: (必需) 要打包的源目录路径

  • -l, --label: (可选) 卷标名称

  • -v, --verify: (可选) 创建后列出镜像内容进行验证

使用示例

示例 1: 创建基本的 FAT32 镜像

# 将 resources 目录打包为 16MB 的 FAT32 镜像
./mkfatfs.py -o disk.img -s 16M -d resources

示例 2: 创建带卷标的镜像

# 创建 32MB 镜像,指定卷标为 MYDISK
./mkfatfs.py -o disk.img -s 32M -d mydata -l MYDISK

示例 3: 创建镜像并验证

# 创建 128MB 镜像并列出内容
./mkfatfs.py -o disk.img -s 128M -d data -v

示例 4: 用于嵌入式项目

# 为嵌入式系统创建资源镜像
./mkfatfs.py -o build/fatfs.img -s 8M -d assets/resources -l ASSETS

镜像大小说明

  • FAT32 最小推荐大小: 32MB

  • 对于较小的镜像 (<32MB),mtools 可能自动使用 FAT12 或 FAT16

  • 建议镜像大小略大于实际文件总大小,以预留文件系统元数据空间

目录结构

源目录的完整结构(包括子目录)都会被保留在生成的镜像中。

例如,源目录结构:

resources/
├── audio/
│   ├── music.mp3
│   └── sound.wav
└── images/
    ├── logo.png
    └── background.jpg

生成的镜像中将保持相同的目录结构。

验证镜像

可以使用以下命令验证生成的镜像:

# 使用 mtools 列出镜像内容
mdir -i disk.img -/

# 挂载镜像(Linux)
sudo mount -o loop disk.img /mnt
ls -R /mnt
sudo umount /mnt

故障排除

mtools 未找到

如果出现 “mtools not found” 错误,请先安装 mtools 工具包。

镜像太小

如果源目录文件太多或太大,可能需要增加镜像大小。错误信息通常会提示空间不足。

文件名限制

FAT32 对文件名有一些限制:

  • 长文件名最多 255 个字符

  • 不支持某些特殊字符

  • 文件名不区分大小写

相关工具

  • mdir: 列出镜像内容

  • mcopy: 复制文件到/从镜像

  • mdel: 删除镜像中的文件

  • mmd: 在镜像中创建目录

  • mlabel: 设置/查看卷标

许可证

本工具遵循项目整体许可证。