minfo命令是mtools工具包的一部分,用于显示MS-DOS文件系统(通常是FAT12、FAT16或FAT32格式)的详细信息。它可以显示分区参数、几何结构、文件系统特征等,常用于分析和调试FAT文件系统。
minfo [选项] 驱动器:
minfo [选项] 设备文件
| 选项 | 说明 |
|---|---|
驱动器: |
mtools驱动器字母(如A:, C:) |
设备文件 |
Linux设备文件(如/dev/sda1) |
-v |
详细模式,显示更多信息 |
-h |
显示帮助信息 |
-i |
从标准输入读取设备信息 |
minfo是mtools工具包的一部分,如果系统中没有安装mtools,需要先安装:
sudo apt update
sudo apt install mtools
# RHEL/CentOS 7/8
sudo yum install mtools
# Fedora
sudo dnf install mtools
sudo pacman -S mtools
sudo zypper install mtools
mtools使用特殊的驱动器字母(如A:, C:)来访问设备。需要在~/.mtoolsrc或/etc/mtools.conf中配置:
# 编辑mtools配置文件
vi ~/.mtoolsrc
# 添加以下配置(示例)
drive A: file="/dev/fd0" # 软盘驱动器
drive C: file="/dev/sda1" # 第一个分区
drive D: file="/dev/sdb1" # 第二个分区
drive E: file="/dev/sdc1" # USB设备
# 或者为USB闪存驱动器指定
drive U: file="/dev/sdd1"
配置完成后,就可以使用驱动器字母访问设备:
# 查看A:驱动器信息
minfo A:
# 查看C:驱动器信息
minfo C:
使用minfo查看FAT文件系统的详细信息:
# 查看/dev/sda1分区的信息
minfo /dev/sda1
# 如果配置了mtools驱动器,可以使用驱动器字母
minfo C:
# 详细模式显示
minfo -v /dev/sda1
# 查看USB设备(假设为/dev/sdb1)
minfo /dev/sdb1
查看软盘驱动器中的FAT文件系统信息:
# 假设软盘驱动器配置为A:
minfo A:
# 或者直接指定设备文件
minfo /dev/fd0
# 如果没有软盘驱动器,可以测试虚拟软盘
# 首先创建一个虚拟软盘镜像
dd if=/dev/zero of=floppy.img bs=512 count=2880
mkfs.fat floppy.img
# 使用minfo查看镜像文件信息
minfo -i < floppy.img
批量查看多个存储设备的信息:
#!/bin/bash
# 查看所有FAT分区的信息
echo "=== 系统FAT分区信息 ==="
# 查找FAT分区
for DEVICE in /dev/sd*[0-9]; do
# 检查是否为FAT文件系统
if blkid "$DEVICE" | grep -q "TYPE=\"vfat\""; then
echo ""
echo "设备: $DEVICE"
echo "----------------------"
minfo "$DEVICE" 2>/dev/null || echo "无法读取该设备信息"
fi
done
# 如果配置了mtools,也可以检查配置的驱动器
if [ -f ~/.mtoolsrc ]; then
echo ""
echo "=== mtools配置的驱动器 ==="
grep "^drive" ~/.mtoolsrc | while read LINE; do
DRIVE=$(echo "$LINE" | awk '{print $2}' | tr -d ':')
echo "检查驱动器 $DRIVE:"
minfo "$DRIVE:" 2>/dev/null || echo " 无法访问"
done
fi
minfo可以与其他命令结合使用,获取更全面的信息:
# 结合blkid查看设备类型
blkid /dev/sda1
minfo /dev/sda1
# 结合fdisk查看分区表
fdisk -l /dev/sda
minfo /dev/sda1
# 使用管道传递设备信息
dd if=/dev/sda1 bs=512 count=1 2>/dev/null | minfo -i
# 保存minfo输出到文件
minfo /dev/sda1 > partition_info.txt
# 比较两个分区的信息
minfo /dev/sda1 > info1.txt
minfo /dev/sdb1 > info2.txt
diff info1.txt info2.txt
device information:
===================
filename="/dev/sda1"
sectors per track: 63
heads: 255
cylinders: 1024
media byte: f8
big sectors: 4194304
sectors per cluster: 64
reserved sectors: 32
fats: 2
root directory entries: 0
small sectors: 0
serial number: 0x12345678
disk label="USB DRIVE"
disk type="FAT32"
| 字段 | 说明 | 示例 |
|---|---|---|
| filename | 设备文件名 | /dev/sda1 |
| sectors per track | 每磁道扇区数 | 63 |
| heads | 磁头数 | 255 |
| cylinders | 柱面数 | 1024 |
| media byte | 介质描述符字节 | f8(硬盘) |
| big sectors | 总扇区数(大扇区) | 4194304 |
| sectors per cluster | 每簇扇区数 | 64 |
| reserved sectors | 保留扇区数 | 32 |
| fats | FAT表数量 | 2 |
| root directory entries | 根目录条目数 | 0(FAT32为0) |
| small sectors | 小扇区数(用于小于32MB的分区) | 0 |
| serial number | 序列号 | 0x12345678 |
| disk label | 磁盘卷标 | USB DRIVE |
| disk type | 磁盘类型 | FAT32 |
| 类型 | 最大分区大小 | 簇大小范围 | 特点 |
|---|---|---|---|
| FAT12 | 32MB | 0.5KB - 4KB | 早期软盘使用,12位FAT条目 |
| FAT16 | 2GB(或4GB) | 2KB - 64KB | 早期硬盘使用,16位FAT条目 |
| FAT32 | 2TB(理论) | 4KB - 32KB | 现代USB设备和存储卡使用 |
| exFAT | 128PB | 4KB - 32MB | 扩展FAT,用于大容量存储 |
| 命令 | 描述 | 与minfo的关系 |
|---|---|---|
mformat |
格式化MS-DOS文件系统 | minfo查看格式化后的信息 |
mdir |
显示MS-DOS目录内容 | minfo查看文件系统信息,mdir查看文件内容 |
mcopy |
在Unix和MS-DOS之间复制文件 | minfo了解文件系统参数 |
fdisk |
磁盘分区工具 | fdisk管理分区,minfo查看分区信息 |
blkid |
查看块设备属性 | blkid查看设备类型,minfo查看详细信息 |
fsck.fat |
检查和修复FAT文件系统 | minfo查看信息,fsck.fat修复问题 |
#!/bin/bash
# USB设备信息分析脚本
echo "=== USB设备信息分析 ==="
echo "分析时间: $(date)"
echo ""
# 检测USB设备
USB_DEVICES=$(lsblk -o NAME,TYPE,MOUNTPOINT | grep -E "disk.*usb" | awk '{print $1}')
if [ -z "$USB_DEVICES" ]; then
echo "未检测到USB设备"
exit 0
fi
for DEVICE in $USB_DEVICES; do
echo "USB设备: /dev/$DEVICE"
echo "--------------------------------"
# 查找设备的分区
PARTITIONS=$(lsblk -o NAME,TYPE | grep -E "^${DEVICE}[0-9]+.*part" | awk '{print $1}')
if [ -z "$PARTITIONS" ]; then
echo " 未找到分区"
continue
fi
for PARTITION in $PARTITIONS; do
PARTITION_DEV="/dev/$PARTITION"
# 检查是否为FAT文件系统
if blkid "$PARTITION_DEV" | grep -q "TYPE=\"vfat\""; then
echo ""
echo " 分区: $PARTITION_DEV"
echo " 文件系统: FAT"
# 使用minfo获取详细信息
echo " 详细信息:"
minfo "$PARTITION_DEV" 2>/dev/null | while read LINE; do
echo " $LINE"
done
# 获取额外信息
FILESYSTEM_INFO=$(blkid "$PARTITION_DEV")
UUID=$(echo "$FILESYSTEM_INFO" | grep -o 'UUID="[^"]*"' | cut -d'"' -f2)
LABEL=$(echo "$FILESYSTEM_INFO" | grep -o 'LABEL="[^"]*"' | cut -d'"' -f2)
if [ -n "$UUID" ]; then
echo " UUID: $UUID"
fi
if [ -n "$LABEL" ]; then
echo " 卷标: $LABEL"
fi
else
echo ""
echo " 分区: $PARTITION_DEV"
echo " 文件系统: 非FAT"
fi
done
echo ""
done
echo "=== 分析完成 ==="
#!/bin/bash
# FAT文件系统故障排除脚本
echo "=== FAT文件系统故障排除 ==="
# 接收要检查的设备参数
DEVICE="$1"
if [ -z "$DEVICE" ]; then
echo "用法: $0 /dev/sdX1"
echo "请指定要检查的设备"
exit 1
fi
if [ ! -b "$DEVICE" ]; then
echo "错误: $DEVICE 不是块设备"
exit 1
fi
echo "检查设备: $DEVICE"
echo ""
# 1. 检查设备是否挂载
MOUNT_POINT=$(mount | grep "$DEVICE " | awk '{print $3}')
if [ -n "$MOUNT_POINT" ]; then
echo "1. 挂载状态: 已挂载到 $MOUNT_POINT"
echo " 建议: 在检查前先卸载设备 (umount $DEVICE)"
else
echo "1. 挂载状态: 未挂载"
fi
# 2. 检查文件系统类型
FSTYPE=$(blkid -o value -s TYPE "$DEVICE" 2>/dev/null)
if [ "$FSTYPE" = "vfat" ]; then
echo "2. 文件系统: FAT (vfat)"
# 3. 使用minfo获取详细信息
echo "3. minfo分析:"
minfo "$DEVICE" 2>/dev/null
if [ $? -ne 0 ]; then
echo " 错误: 无法读取FAT文件系统信息"
echo " 可能原因:"
echo " - 设备损坏"
echo " - 文件系统损坏"
echo " - 不是FAT文件系统"
fi
# 4. 检查常见问题
echo ""
echo "4. 常见问题检查:"
# 检查FAT表数量
FAT_COUNT=$(minfo "$DEVICE" 2>/dev/null | grep "^fats:" | awk '{print $2}')
if [ -n "$FAT_COUNT" ]; then
echo " FAT表数量: $FAT_COUNT"
if [ "$FAT_COUNT" -lt 2 ]; then
echo " 警告: FAT表少于2个,可能损坏"
fi
fi
# 检查保留扇区
RESERVED=$(minfo "$DEVICE" 2>/dev/null | grep "^reserved sectors:" | awk '{print $3}')
if [ -n "$RESERVED" ]; then
echo " 保留扇区: $RESERVED"
if [ "$RESERVED" -eq 0 ]; then
echo " 警告: 保留扇区为0,可能损坏"
fi
fi
# 5. 建议操作
echo ""
echo "5. 建议操作:"
echo " - 运行 fsck.fat $DEVICE 检查和修复"
echo " - 备份数据后重新格式化"
echo " - 使用 ddrescue 尝试数据恢复"
else
echo "2. 文件系统: 不是FAT ($FSTYPE)"
echo " minfo只能用于FAT文件系统"
fi
echo ""
echo "=== 检查完成 ==="
#!/bin/bash
# 批量分析存储设备脚本
echo "=== 存储设备批量分析 ==="
echo "生成报告时间: $(date)"
echo ""
REPORT_FILE="storage_analysis_$(date +%Y%m%d_%H%M%S).txt"
{
echo "存储设备分析报告"
echo "================="
echo "生成时间: $(date)"
echo ""
# 获取所有磁盘
DISKS=$(lsblk -d -o NAME,TYPE | grep disk | awk '{print $1}')
echo "检测到的磁盘数量: $(echo "$DISKS" | wc -l)"
echo ""
for DISK in $DISKS; do
DISK_DEV="/dev/$DISK"
echo "磁盘: $DISK_DEV"
echo "$(printf '%.0s=' {1..40})"
# 磁盘基本信息
DISK_SIZE=$(lsblk -d -o SIZE "$DISK_DEV" | tail -1)
DISK_MODEL=$(cat "/sys/block/$DISK/device/model" 2>/dev/null || echo "未知")
echo "型号: $DISK_MODEL"
echo "大小: $DISK_SIZE"
# 分区信息
PARTITIONS=$(lsblk -o NAME,TYPE "$DISK_DEV" | grep "part$" | awk '{print $1}')
if [ -z "$PARTITIONS" ]; then
echo "分区: 无分区"
echo ""
continue
fi
echo "分区数量: $(echo "$PARTITIONS" | wc -l)"
echo ""
for PARTITION in $PARTITIONS; do
PARTITION_DEV="/dev/$PARTITION"
echo " 分区: $PARTITION_DEV"
# 分区大小
PARTITION_SIZE=$(lsblk -o SIZE "$PARTITION_DEV" | tail -1)
echo " 大小: $PARTITION_SIZE"
# 文件系统类型
FSTYPE=$(blkid -o value -s TYPE "$PARTITION_DEV" 2>/dev/null)
if [ -n "$FSTYPE" ]; then
echo " 文件系统: $FSTYPE"
# 如果是FAT文件系统,使用minfo获取详细信息
if [ "$FSTYPE" = "vfat" ]; then
echo " FAT文件系统信息:"
minfo "$PARTITION_DEV" 2>/dev/null | while read LINE; do
echo " $LINE"
done
fi
# 卷标
LABEL=$(blkid -o value -s LABEL "$PARTITION_DEV" 2>/dev/null)
if [ -n "$LABEL" ]; then
echo " 卷标: $LABEL"
fi
# UUID
UUID=$(blkid -o value -s UUID "$PARTITION_DEV" 2>/dev/null)
if [ -n "$UUID" ]; then
echo " UUID: $UUID"
fi
else
echo " 文件系统: 未知/未格式化"
fi
# 挂载点
MOUNT_POINT=$(findmnt -n -o TARGET "$PARTITION_DEV" 2>/dev/null)
if [ -n "$MOUNT_POINT" ]; then
echo " 挂载点: $MOUNT_POINT"
else
echo " 挂载点: 未挂载"
fi
echo ""
done
echo ""
done
echo "报告结束"
} | tee "$REPORT_FILE"
echo ""
echo "报告已保存到: $REPORT_FILE"
echo "=== 批量分析完成 ==="
A: 这可能是因为权限问题或设备不存在:
# 1. 检查设备是否存在
ls -l /dev/sda1
# 2. 使用root权限运行
sudo minfo /dev/sda1
# 3. 检查用户是否有访问权限
# 将用户添加到disk组(可能需要重新登录)
sudo usermod -a -G disk $USER
# 4. 检查设备是否被挂载
# 如果被挂载,minfo可能无法访问
umount /dev/sda1 # 先卸载
minfo /dev/sda1
# 5. 检查设备文件是否正确
# 使用lsblk查看正确的设备名
lsblk
A: 是的,minfo主要用于传统的FAT12/16/32文件系统,不支持exFAT:
# 使用blkid查看exFAT分区
blkid /dev/sda1
# 使用tune.exfat查看exFAT信息(如果安装)
sudo apt install exfatprogs # 安装exfat工具
tune.exfat -l /dev/sda1
# 使用file命令检查文件系统类型
file -s /dev/sda1
A: 通过minfo输出可以区分:
# 查看文件系统类型
minfo /dev/sda1 | grep "disk type"
# 常见特征:
# FAT16:
# - 分区大小通常小于2GB
# - 根目录条目数不为0
# - disk type显示为"FAT16"
# FAT32:
# - 分区大小通常大于2GB
# - 根目录条目数为0
# - disk type显示为"FAT32"
# 也可以通过blkid查看
blkid /dev/sda1
# 使用fsck.fat检测
fsck.fat -n /dev/sda1 # 会显示文件系统类型
# 查看FAT表大小
minfo /dev/sda1 | grep -E "(big sectors|fats|sectors per cluster)"
A: minfo信息有多种实际用途:
# 示例:使用minfo信息计算磁盘容量
minfo /dev/sda1 | awk '
/^big sectors:/ {sectors=$3}
/^sectors per cluster:/ {spc=$4}
END {
if (sectors && spc) {
capacity = sectors * 512 / (1024*1024*1024); # 转换为GB
cluster_size = spc * 512 / 1024; # 转换为KB
printf "容量: %.2f GB\n", capacity;
printf "簇大小: %.0f KB\n", cluster_size;
}
}'
mtools是一组用于访问MS-DOS文件系统的Unix工具,包含以下常用命令:
| 命令 | 功能 |
|---|---|
mformat |
格式化MS-DOS文件系统 |
mdir |
显示目录内容 |
mcopy |
复制文件 |
mdel |
删除文件 |
mmd |
创建目录 |
mrd |
删除目录 |
mtype |
显示文件内容 |
minfo |
显示文件系统信息 |
mtools工具包使得在Linux系统中处理FAT文件系统变得简单方便,特别适用于处理USB闪存驱动器、SD卡等移动存储设备。