Linux mkdosfs 命令
注意:mkdosfs命令用于创建MS-DOS/FAT文件系统。在许多Linux发行版中,mkdosfs和mkfs.fat是同一个命令的别名,用于创建FAT12、FAT16和FAT32文件系统。
命令简介
mkdosfs是一个用于在Linux下创建MS-DOS/FAT文件系统的工具。它是dosfstools软件包的一部分,可以创建FAT12、FAT16和FAT32文件系统,适用于U盘、SD卡等需要在多个操作系统间共享的存储设备。
命令语法
mkdosfs [选项] 设备 [块数]
常用选项
| 选项 |
说明 |
-F FAT类型 |
指定FAT类型:12, 16, 32 |
-n 卷标 |
设置卷标(最多11个字符) |
-I |
强制创建文件系统,不进行确认 |
-v |
详细模式,显示更多信息 |
-c |
在创建文件系统前检查坏块 |
-S 扇区大小 |
指定逻辑扇区大小(字节) |
-s 每簇扇区数 |
指定每簇的扇区数 |
-r 根目录条目数 |
指定根目录条目数 |
-R 保留扇区数 |
指定保留扇区数 |
-f FAT数量 |
指定FAT表的数量(1或2) |
-h 隐藏扇区数 |
指定隐藏扇区数 |
-m 消息文件 |
指定引导扇区的消息文件 |
-C |
创建文件系统映像文件 |
-i 卷ID |
指定卷ID(序列号) |
FAT文件系统选择规则
| FAT类型 |
容量范围 |
簇大小 |
默认选择规则 |
| FAT12 |
0 - 32 MB |
0.5 - 4 KB |
小于32MB时自动选择 |
| FAT16 |
32 MB - 2 GB |
2 - 64 KB |
32MB-2GB时自动选择 |
| FAT32 |
512 MB - 2 TB |
4 - 32 KB |
大于512MB时自动选择 |
使用示例
1. 基本FAT32格式化
# 创建FAT32文件系统(自动选择参数)
mkdosfs /dev/sdb1
# 或明确指定FAT32
mkdosfs -F 32 /dev/sdb1
2. 格式化并设置卷标
# 创建FAT32文件系统并设置卷标
mkdosfs -F 32 -n "USB_DRIVE" /dev/sdb1
# 设置短卷标(8.3格式)
mkdosfs -n "MYUSB" /dev/sdb1
3. 强制格式化不确认
# 强制格式化,不进行任何确认
mkdosfs -I /dev/sdb1
# 强制格式化FAT32
mkdosfs -F 32 -I /dev/sdb1
4. 检查坏块后格式化
# 先检查坏块,然后创建文件系统
mkdosfs -c /dev/sdb1
# 检查坏块并创建FAT32
mkdosfs -F 32 -c /dev/sdb1
5. 创建FAT16文件系统
# 创建FAT16文件系统
mkdosfs -F 16 /dev/sdb1
# 指定簇大小(每簇4个扇区,2KB)
mkdosfs -F 16 -s 4 /dev/sdb1
6. 创建FAT12文件系统(软盘)
# 创建1.44MB软盘的FAT12文件系统
mkdosfs -F 12 /dev/fd0
# 指定1.44MB软盘参数
mkdosfs -F 12 -S 512 -s 1 -r 224 /dev/fd0
7. 创建文件系统映像
# 创建空的映像文件
dd if=/dev/zero of=fat32.img bs=1M count=100
# 在映像文件上创建FAT32文件系统
mkdosfs -F 32 -C fat32.img 102400
# 挂载映像文件
mkdir /mnt/fat32img
sudo mount -o loop fat32.img /mnt/fat32img
8. 完整U盘格式化脚本
#!/bin/bash
# U盘格式化脚本
DEVICE="/dev/sdb1"
LABEL="MY_USB_DRIVE"
SIZE_MB=$(sudo blockdev --getsize64 $DEVICE 2>/dev/null | awk '{print int($1/1024/1024)}')
echo "设备: $DEVICE"
echo "大小: ${SIZE_MB}MB"
# 卸载设备
echo "卸载设备..."
sudo umount $DEVICE 2>/dev/null
# 根据大小选择FAT类型
if [ $SIZE_MB -lt 32 ]; then
FAT_TYPE=12
echo "使用FAT12文件系统"
elif [ $SIZE_MB -lt 512 ]; then
FAT_TYPE=16
echo "使用FAT16文件系统"
else
FAT_TYPE=32
echo "使用FAT32文件系统"
fi
# 格式化
echo "正在格式化..."
sudo mkdosfs -F $FAT_TYPE -n "$LABEL" -c -v $DEVICE
if [ $? -eq 0 ]; then
echo "格式化成功完成!"
echo "卷标: $LABEL"
echo "文件系统: FAT$FAT_TYPE"
else
echo "格式化失败!"
exit 1
fi
高级配置选项
1. 指定扇区大小
# 指定512字节扇区(标准)
mkdosfs -S 512 /dev/sdb1
# 指定4096字节扇区(某些SSD)
mkdosfs -S 4096 /dev/sdb1
2. 指定簇大小
# 设置每簇8个扇区(4KB)
mkdosfs -s 8 /dev/sdb1
# 设置每簇64个扇区(32KB)
mkdosfs -s 64 /dev/sdb1
3. 自定义根目录条目
# 设置根目录512个条目(默认224)
mkdosfs -r 512 /dev/sdb1
# FAT32通常不需要此选项,因为根目录大小可扩展
4. 设置引导扇区消息
# 创建消息文件
echo "My USB Drive - Do not remove during transfer" > boot_msg.txt
# 格式化时包含引导消息
mkdosfs -m boot_msg.txt /dev/sdb1
FAT文件系统限制
| 限制项 |
FAT12 |
FAT16 |
FAT32 |
| 最大卷大小 |
32 MB |
2 GB |
2 TB(理论) |
| 最大文件大小 |
32 MB |
2 GB |
4 GB - 1 |
| 最大文件数 |
4,077 |
65,517 |
约4百万 |
| 根目录最大文件数 |
512 |
512 |
无限制 |
| 簇大小范围 |
0.5-4 KB |
2-64 KB |
4-32 KB |
与其他命令的关系
| 命令 |
说明 |
与mkdosfs的关系 |
mkfs.fat |
创建FAT文件系统 |
通常与mkdosfs是同一个命令 |
mkfs.vfat |
创建VFAT文件系统 |
支持长文件名,功能更强大 |
mformat |
Mtools的格式化工具 |
类似功能,但使用DOS驱动器字母 |
fatlabel |
设置FAT卷标 |
mkdosfs的-n选项可设置卷标 |
dosfsck |
检查修复FAT文件系统 |
创建后的维护工具 |
常见问题解决
1. "无法打开设备"错误
# 错误:mkdosfs: unable to open /dev/sdb1: Permission denied
# 解决方案:
# 使用sudo权限
sudo mkdosfs /dev/sdb1
# 或检查设备是否存在
ls -l /dev/sdb1
# 检查设备是否被挂载
mount | grep sdb1
2. "设备忙"错误
# 错误:mkdosfs: Device /dev/sdb1 is mounted
# 解决方案:
# 卸载设备
sudo umount /dev/sdb1
# 强制卸载(如果普通卸载失败)
sudo umount -l /dev/sdb1
# 检查哪个进程在使用
sudo lsof | grep /dev/sdb1
sudo fuser -km /dev/sdb1 # 强制终止相关进程
3. "块数无效"错误
# 错误:mkdosfs: invalid number of blocks
# 解决方案:
# 检查设备大小
sudo fdisk -l /dev/sdb
# 使用自动计算的块数(不指定块数)
mkdosfs /dev/sdb1
# 或明确指定正确的块数
# 计算块数:总字节数 / 1024
BLOCKS=$(sudo blockdev --getsize64 /dev/sdb1 | awk '{print int($1/1024)}')
mkdosfs /dev/sdb1 $BLOCKS
4. 大容量U盘格式化问题
# Windows可能无法读取大于32GB的FAT32
# 解决方案:
# 方法1:使用exFAT(跨平台支持)
sudo mkfs.exfat /dev/sdb1
# 方法2:使用NTFS(Linux/Windows)
sudo mkfs.ntfs /dev/sdb1
# 方法3:强制FAT32(某些工具支持)
# 使用fat32format工具(Windows)
# 或使用特殊参数
重要注意事项
- 数据丢失:格式化会永久删除设备上的所有数据
- 备份重要数据:格式化前务必备份重要文件
- 设备确认:仔细确认设备名,避免格式化错误设备
- 4GB文件限制:FAT32不支持单个文件大于4GB
- Windows兼容性:Windows对FAT32有额外限制(如最大32GB)
- SSD优化:对于SSD设备,考虑使用对齐的扇区大小
安装dosfstools
# Debian/Ubuntu系统
sudo apt-get install dosfstools
# CentOS/RHEL系统
sudo yum install dosfstools
# Fedora
sudo dnf install dosfstools
# Arch Linux
sudo pacman -S dosfstools
# macOS (使用Homebrew)
brew install dosfstools
# 从源码编译
wget https://github.com/dosfstools/dosfstools/releases/download/v4.2/dosfstools-4.2.tar.gz
tar -xzf dosfstools-4.2.tar.gz
cd dosfstools-4.2
./configure
make
sudo make install
相关命令
mkfs.fat - mkdosfs的别名
fatlabel - 设置FAT卷标
fsck.fat - 检查修复FAT文件系统
fdisk - 磁盘分区工具
parted - 高级分区编辑器
mount - 挂载文件系统
umount - 卸载文件系统
dd - 创建磁盘映像
losetup - 设置循环设备