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 - 创建文件系统