Linux mpartition 命令

注意:mpartition是Mtools工具包中的一个命令,用于对MS-DOS分区进行操作。它专门设计用于在Linux环境下管理DOS风格的分区表,特别适合处理需要在Windows和Linux之间共享的磁盘。

命令简介

mpartition是Mtools软件包中的MS-DOS分区管理工具。它允许在Linux系统上创建、删除和修改MS-DOS风格的分区表。与fdisk不同,mpartition专门针对DOS分区表格式,并且使用DOS风格的驱动器字母表示法,更适合处理FAT文件系统分区。

命令语法

mpartition [选项] 驱动器字母:

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

常用选项

选项 说明
-p 创建主DOS分区
-e 创建扩展DOS分区
-l 创建逻辑DOS分区
-d 删除分区
-a 激活(标记为可启动)分区
-r 设置分区为只读
-b 扇区 指定分区起始扇区
-s 扇区数 指定分区大小(扇区数)
-c 创建分区但不格式化
-f 强制操作,不进行确认
-v 详细模式
-I 初始化分区表
-t 类型 设置分区类型(十六进制)
-L 卷标 设置分区卷标

驱动器字母映射

mpartition需要通过Mtools配置文件将DOS驱动器字母映射到Linux设备文件:

DOS驱动器 Linux设备 典型用途
a: /dev/fd0 软盘驱动器
c: /dev/sda/dev/hda 第一个硬盘
d: /dev/sdb/dev/hdb 第二个硬盘
e: /dev/sdc1 第一个分区
f: /dev/sdc2 第二个分区

使用示例

1. 创建主DOS分区

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

# 在c:驱动器上创建主DOS分区
mpartition -p -s 204800 c:  # 创建100MB分区(204800扇区,假设每扇区512字节)

# 查看分区信息
mpartition -v c:

2. 创建扩展分区和逻辑分区

# 创建扩展分区
mpartition -e -s 409600 c:  # 创建200MB扩展分区

# 在扩展分区中创建逻辑分区
mpartition -l -s 102400 c:  # 创建50MB逻辑分区

3. 删除分区

# 删除指定分区
mpartition -d c:

# 强制删除,不确认
mpartition -d -f c:

4. 激活分区(标记为可启动)

# 标记分区为活动(可启动)
mpartition -a c:

# 查看分区状态
mpartition -v c:

5. 设置分区类型

# 设置分区类型为FAT32 (0x0b)
mpartition -t 0b c:

# 设置分区类型为FAT16 (0x06)
mpartition -t 06 c:

# 设置分区类型为扩展分区 (0x05)
mpartition -t 05 c:

6. 创建分区但不格式化

# 创建分区但不进行格式化
mpartition -p -c -s 204800 c:

# 然后使用mformat格式化
mformat c:

7. 完整磁盘分区示例

#!/bin/bash
# 完整磁盘分区脚本
DEVICE="/dev/sdb"
CONFIG_FILE="$HOME/.mtoolsrc"

echo "=== 磁盘分区脚本 ==="

# 配置mtools
echo "配置mtools..."
cat > $CONFIG_FILE << EOF
# Mtools配置文件
drive c: file="$DEVICE"
mtools_skip_check=1
EOF

# 初始化分区表
echo "初始化分区表..."
mpartition -I c:

# 创建主分区 (100MB)
echo "创建主分区..."
mpartition -p -s 204800 c:  # 204800扇区 = 100MB

# 激活主分区
echo "激活主分区..."
mpartition -a c:

# 设置分区类型为FAT32
echo "设置分区类型..."
mpartition -t 0b c:

# 查看分区信息
echo "分区信息:"
mpartition -v c:

echo "=== 完成 ==="

8. 分区大小计算

# 计算所需扇区数
# 公式:扇区数 = (MB × 1024 × 1024) / 扇区大小
# 假设扇区大小为512字节

# 创建500MB分区
SECTORS=$((500 * 1024 * 1024 / 512))
mpartition -p -s $SECTORS c:

# 创建2GB分区
SECTORS=$((2 * 1024 * 1024 * 1024 / 512))
mpartition -p -s $SECTORS c:

分区类型代码

类型代码 分区类型 说明
01 FAT12 12位FAT,用于小分区
04 FAT16 (<32MB) 16位FAT,小于32MB
06 FAT16 (≥32MB) 16位FAT,大于等于32MB
07 NTFS/HPFS NTFS或OS/2 HPFS
0b FAT32 (CHS) FAT32,使用CHS寻址
0c FAT32 (LBA) FAT32,使用LBA寻址
05 扩展分区 DOS扩展分区
0f 扩展分区 (LBA) 使用LBA的扩展分区
82 Linux Swap Linux交换分区
83 Linux Linux原生分区

与fdisk对比

特性 mpartition fdisk
主要用途 MS-DOS分区管理 通用分区管理
分区表格式 主要支持DOS分区表 支持多种分区表(DOS、GPT等)
用户界面 命令行选项 交互式或命令行
配置方式 需要mtools配置文件 直接操作设备文件
脚本友好性 非常友好,适合自动化 较友好,有非交互模式
Windows兼容性 优秀,专为DOS分区设计 良好
现代系统支持 有限,主要针对传统系统 全面,支持最新技术

常见问题解决

1. "驱动器未定义"错误

# 错误:Drive 'c:' not defined in .mtoolsrc
# 解决方案:
# 创建或编辑~/.mtoolsrc配置文件
echo 'drive c: file="/dev/sdb"' > ~/.mtoolsrc

# 验证配置
cat ~/.mtoolsrc

2. "设备忙"错误

# 错误:Cannot open /dev/sdb: Device or resource busy
# 解决方案:
# 卸载设备上的所有分区
sudo umount /dev/sdb*

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

3. 分区表损坏

# 重新初始化分区表
mpartition -I c:

# 使用dd清零分区表前512字节(危险!)
# sudo dd if=/dev/zero of=/dev/sdb bs=512 count=1

# 使用fdisk修复
sudo fdisk /dev/sdb
# 在fdisk中使用'w'命令写回分区表

4. Windows不识别分区

# 确保使用正确的分区类型
mpartition -t 0c c:  # 使用FAT32 LBA类型

# 使用Windows兼容的边界对齐
# 现代磁盘建议从2048扇区开始
mpartition -p -b 2048 -s 204800 c:

# 在Windows中使用磁盘管理工具重新扫描

高级用法

1. 创建对齐的分区(SSD优化)

# 现代SSD建议分区从2048扇区开始对齐
# 计算对齐的起始扇区(2048扇区 = 1MB对齐)
START_SECTOR=2048
SIZE_SECTORS=204800  # 100MB

mpartition -p -b $START_SECTOR -s $SIZE_SECTORS c:

2. 批量分区操作

#!/bin/bash
# 批量创建多个分区
DRIVES=("c:" "d:" "e:" "f:")
SIZES=(204800 409600 819200 1638400)  # 单位:扇区
LABELS=("SYSTEM" "DATA" "BACKUP" "MEDIA")

for i in {0..3}; do
    echo "创建分区 ${DRIVES[i]} (${LABELS[i]})..."
    mpartition -p -s ${SIZES[i]} ${DRIVES[i]}
    mpartition -t 0c ${DRIVES[i]}
    echo "完成"
done

3. 从脚本备份和恢复分区表

# 备份分区表
sudo sfdisk -d /dev/sdb > sdb_partition_table.bak

# 从备份恢复分区表
sudo sfdisk /dev/sdb < sdb_partition_table.bak

# 使用mpartition查看备份中的信息
# 可以解析备份文件并重新创建分区

重要注意事项

  • 数据丢失:分区操作会永久删除磁盘上的所有数据
  • 设备确认:仔细确认设备名,避免操作错误磁盘
  • 备份数据:操作前务必备份重要数据
  • 配置正确:确保~/.mtoolsrc配置文件正确设置
  • 现代限制:mpartition主要针对传统MBR分区,对GPT支持有限
  • 权限要求:需要root权限或磁盘设备访问权限
  • 工具替代:对于现代系统,考虑使用parted或gdisk

安装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

# 验证安装
which mpartition
mpartition --version

相关命令

  • mformat - 格式化MS-DOS分区
  • mlabel - 设置MS-DOS卷标
  • fdisk - 通用分区编辑器
  • parted - 高级分区编辑器(支持GPT)
  • sfdisk - 脚本友好的分区工具
  • gdisk - GPT分区工具
  • cfdisk - 基于curses的分区工具
  • mkfs - 创建文件系统