Linux mformat 命令

注意:mformat是Mtools工具包的一部分,专门用于在Linux下操作MS-DOS/FAT文件系统。它特别适合格式化U盘、SD卡等移动存储设备,使其能在Windows、Linux和macOS之间兼容。

命令简介

mformat是Mtools工具包中的一个命令,用于在Linux系统下创建和格式化MS-DOS/FAT文件系统。与标准的mkfs命令不同,mformat专门针对DOS/Windows兼容性进行了优化,特别适合创建可在多平台间共享的存储设备。

命令语法

mformat [选项] 驱动器字母:

注意:mformat使用DOS风格的驱动器字母表示法,如a:c:等,这些映射到Linux中的设备文件。

常用选项

选项 说明
-t 柱面数 指定柱面数
-h 磁头数 指定磁头数
-s 扇区数 指定每个磁道的扇区数
-l 卷标 设置卷标(最多11个字符)
-F 快速格式化(不检查坏块)
-I 指定文件系统ID
-C 创建磁盘映像文件
-N 序列号 设置磁盘序列号
-M 扇区大小 设置扇区大小(字节)
-a 使用Atari变种格式
-X 格式化XDF磁盘
-v 详细模式
-c 指定簇大小
-S 扇区数 引导扇区中的扇区数

驱动器字母映射

Mtools使用配置文件(通常为/etc/mtools.conf~/.mtoolsrc)将DOS驱动器字母映射到Linux设备文件:

DOS驱动器 Linux设备 典型用途
a: /dev/fd0 第一个软盘驱动器
b: /dev/fd1 第二个软盘驱动器
c: /dev/hda/dev/sda 第一个硬盘
d: /dev/hdb/dev/sdb 第二个硬盘
e: /dev/sdc1 USB闪存盘
f: /dev/cdrom CD-ROM驱动器

使用示例

1. 基本格式化(使用默认映射)

# 首先配置mtools,编辑~/.mtoolsrc
echo 'drive e: file="/dev/sdb1"' >> ~/.mtoolsrc

# 格式化e:驱动器(对应/dev/sdb1)
mformat e:

2. 格式化并设置卷标

# 格式化并设置卷标为"MYUSB"
mformat -l MYUSB e:

3. 快速格式化

# 快速格式化(不检查坏块)
mformat -F e:

4. 指定文件系统参数

# 指定柱面、磁头、扇区数
mformat -t 80 -h 2 -s 18 e:

5. 创建FAT16文件系统

# 创建FAT16文件系统(适合小于2GB的分区)
mformat -F -t 1024 -h 64 -s 32 e:

6. 创建FAT32文件系统

# 创建FAT32文件系统
mformat -F -t 1023 -h 255 -s 63 e:

7. 完整U盘格式化流程

#!/bin/bash
# 完整U盘格式化脚本
DEVICE="/dev/sdb1"
DRIVE="e:"

# 1. 卸载U盘
umount $DEVICE 2>/dev/null

# 2. 添加mtools配置
echo "drive $DRIVE file=\"$DEVICE\"" > ~/.mtoolsrc

# 3. 检查设备信息
fdisk -l $DEVICE

# 4. 格式化FAT32
echo "正在格式化FAT32..."
mformat -F -t 1023 -h 255 -s 63 -l "MY_USB" $DRIVE

# 5. 验证格式化
echo "格式化完成"
mlabel -s $DRIVE

8. 创建磁盘映像文件

# 创建1440KB的软盘映像(1.44MB)
dd if=/dev/zero of=floppy.img bs=1024 count=1440
mformat -C -t 80 -h 2 -s 18 a:

FAT文件系统类型

文件系统 最大容量 簇大小 适用场景
FAT12 32 MB 0.5-4 KB 软盘、小容量设备
FAT16 2 GB 2-64 KB U盘、SD卡(老设备)
FAT32 2 TB 4-32 KB 大容量U盘、移动硬盘
exFAT 128 PB 4 KB-32 MB 超大文件(视频、镜像)

配置文件示例

~/.mtoolsrc 配置文件:
# Mtools配置文件
# 驱动器映射
drive a: file="/dev/fd0" exclusive
drive b: file="/dev/fd1" exclusive
drive c: file="/dev/hda"
drive d: file="/dev/hdb"
drive e: file="/dev/sdb1"
drive f: file="/dev/sdc1"
drive g: file="/dev/sdd1"

# 全局设置
mtools_skip_check=1
MTOOLS_NO_VFAT=1

# 默认格式化选项
mformat_defaults="-F -t 1023 -h 255 -s 63"

# 特定驱动器的设置
drive e: {
  fat_bits=32
  mformat_only=1
}

常见问题解决

1. 权限不足错误

# 错误:Cannot open /dev/sdb1: Permission denied
# 解决方案:
# 使用sudo运行
sudo mformat e:

# 或者将用户添加到disk组
sudo usermod -aG disk $USER

# 或者修改设备权限(临时)
sudo chmod 666 /dev/sdb1

2. 驱动器未配置错误

# 错误:Drive 'e:' not defined in .mtoolsrc
# 解决方案:
# 创建或编辑~/.mtoolsrc
echo 'drive e: file="/dev/sdb1"' >> ~/.mtoolsrc

# 或者使用命令行指定
mformat -i /dev/sdb1 -t 1023 -h 255 -s 63

3. 设备忙/已挂载错误

# 错误:Device is busy
# 解决方案:
# 卸载设备
sudo umount /dev/sdb1

# 如果无法卸载,查找占用进程
sudo lsof | grep /dev/sdb1
sudo fuser -km /dev/sdb1  # 强制终止占用进程

4. 格式化大容量设备问题

# 对于大于32GB的设备,Windows可能不支持FAT32
# 解决方案:
# 1. 使用exFAT(如果需要存储大于4GB的文件)
# 2. 使用NTFS(仅限Windows/Linux)
# 3. 使用mkfs.vfat代替

# 使用mkfs.vfat格式化大容量FAT32
sudo mkfs.vfat -F 32 -n "USB_DRIVE" /dev/sdb1

重要注意事项

  • 数据丢失:格式化会删除设备上的所有数据,务必提前备份
  • 设备确认:确认设备名正确,避免格式化系统磁盘
  • 卸载设备:格式化前务必卸载设备
  • 文件系统限制:FAT32不支持单个文件大于4GB
  • Windows兼容性:某些Windows版本对FAT32有特殊要求
  • 权限问题:可能需要root权限操作设备

安装Mtools

# Debian/Ubuntu系统
sudo apt-get install mtools

# CentOS/RHEL系统
sudo yum install mtools

# Fedora
sudo dnf install mtools

# Arch Linux
sudo pacman -S mtools

# macOS (使用Homebrew)
brew install mtools

# 编译安装最新版本
wget https://ftp.gnu.org/gnu/mtools/mtools-4.0.39.tar.gz
tar -xzf mtools-4.0.39.tar.gz
cd mtools-4.0.39
./configure
make
sudo make install

相关命令

  • mkfs.vfat - 创建FAT文件系统(mkfs的一部分)
  • mlabel - 设置或显示MS-DOS卷标
  • mcopy - 复制MS-DOS文件
  • mdir - 显示MS-DOS目录内容
  • mtype - 显示MS-DOS文件内容
  • mrd - 删除MS-DOS目录
  • mmd - 创建MS-DOS目录
  • fdisk - 磁盘分区工具
  • parted - 高级分区编辑器