ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Linux下软盘格式化实战:fdformat与mkfs.fat详解

2026/9/30 20:03:08 拓冰建站 浏览量
Linux下软盘格式化实战:fdformat与mkfs.fat详解 简介这份PDF面向Linux系统运维初学者与需要了解传统存储介质管理的开发者系统梳理了在Linux命令行下对软盘进行格式化与备份的完整知识。内容涵盖软盘设备文件识别如/dev/fd0、/dev/fd1、fdformat低级格式化、mke2fs创建ext2文件系统、mount挂载访问以及setfdprm调整软盘参数等关键操作并延伸介绍taper备份程序在软盘、硬盘与磁带等介质上的档案管理用法。资源包共1个PDF文件约129KB篇幅精炼适合作为系统开发与存储设备管理的参考文献随时查阅。目前已有112人学习读者可从中掌握软盘格式化的命令流程、设备参数配置思路与备份恢复工具的使用方法为理解更复杂的存储设备管理打下基础。1. 软盘格式化在 Linux 下到底还能不能干一次把 fdformat 与 mkfs.fat 讲透手里还攥着一盒 3.5 英寸软盘的人多半不是怀旧而是被某台老设备卡住了——数控机床、老式示波器、九十年代的工控机它们只认 1.44MB 的 FAT12 软盘。把软盘插进 Linux 机器lsblk能看到/dev/sdb可双击挂载报错dd写进去的镜像设备又不认。问题往往不在数据而在软盘本身没被正确格式化。Linux 下软盘格式化这件事核心就两条命令fdformat负责物理低级格式化mkfs.fat负责写文件系统。听起来简单但软盘这种介质有它自己的脾气——磁头脏了、盘片老化、USB 软驱主控芯片千奇百怪任何一环出问题都会让你怀疑人生。这篇笔记面向两类人一类是手上有老设备必须喂软盘的运维和嵌入式工程师另一类是好奇 Linux 底层块设备操作、想拿软盘练手的学习者。下面从设备识别一路讲到坏盘判定命令都能直接抄。2. 先认清设备软盘在 Linux 里长什么样软盘和 U 盘最大的区别是它没有固件帮你兜底。U 盘主控会做坏块管理、磨损均衡你只管写文件系统软盘是裸磁介质磁道、扇区、间隙都得靠主机端控制器和驱动去对齐。所以第一步不是急着敲命令而是搞清楚/dev下哪个节点对应你的软驱以及内核有没有把它当软盘对待。2.1 内置软驱与 USB 软驱的设备节点差异内置软驱走主板 FDD 接口内核模块是floppy设备节点固定为/dev/fd0主设备号 2。你可以用lsmod | grep floppy确认模块加载用dmesg | grep -i fd0看内核识别到的驱动器类型。如果/dev/fd0不存在先modprobe floppy再检查 BIOS 里软驱控制器是否被禁用——很多新主板默认关掉 FDD插了排线也没用。USB 软驱完全是另一回事。它本质是一个 USB 大容量存储设备内核用usb-storage驱动设备节点是/dev/sdX和 U 盘一个待遇。这意味着fdformat对 USB 软驱通常无效因为fdformat依赖floppy驱动提供的低级格式化 ioctl而 USB 软驱的主控不暴露这个接口。这是新手最容易翻车的地方照着老教程敲fdformat /dev/sdb直接报Operation not supported。# 查看所有块设备找到软驱对应的节点 lsblk -o NAME,SIZE,TYPE,TRAN,MODEL # 内置软驱典型输出fd0 1.4M disk # USB 软驱典型输出sdb 1.4M disk usb # 确认内核识别到的软驱类型内置 dmesg | grep -iE floppy|fd0 # 查看 USB 软驱的厂商和产品 ID lsusblsblk的TRAN列是关键显示usb就是 USB 软驱显示空或fd就是内置。SIZE显示 1.4M 基本可以确认是 1.44MB 软盘。如果显示 1.2M 或 720K说明盘片类型或驱动器设置不对后面格式化参数要跟着改。2.2 用 setfdprm 处理非标准容量与驱动器参数标准 3.5 英寸高密盘是 80 磁道、每道 18 扇区、每扇区 512 字节合计 1.44MB。但市面上还有 720KB 低密盘、1.2MB 5.25 英寸盘以及一些工控设备用的非标准格式。setfdprm用来告诉floppy驱动当前盘片的几何参数。# 查看当前 fd0 的参数 setfdprm -p /dev/fd0 # 设置为 1.44MB 标准参数 setfdprm /dev/fd0 1440/1440 # 设置为 720KB 参数 setfdprm /dev/fd0 720/720 # 自定义80 磁道 18 扇区 2 面 setfdprm /dev/fd0 80/18/2/512参数格式是磁道数/每道扇区数/面数/扇区字节数简写1440/1440表示标准 1.44MB。改完参数后必须重新做低级格式化否则文件系统按新几何写入会错位。这一步在 USB 软驱上同样无效因为参数由主控固件决定主机端改不了。提示setfdprm只对内置软驱的floppy驱动有效。USB 软驱的几何参数是固定的遇到非标准容量盘片只能换驱动器或换盘。3. 低级格式化fdformat 的正确用法与失败排查低级格式化做的是在盘片上重新划分磁道和扇区写入地址标记和间隙。这一步会抹掉盘上所有数据包括文件系统。对内置软驱fdformat是标准工具对 USB 软驱这一步通常跳过直接进文件系统创建。3.1 fdformat 命令拆解与验证写入# 基本用法对 /dev/fd0 做低级格式化并校验 fdformat /dev/fd0 # 不校验快但不可靠不推荐 fdformat -n /dev/fd0 # 指定设备时确认没有挂载 umount /dev/fd0 2/dev/null # 执行格式化观察输出 fdformat /dev/fd0 # 输出示例 # Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB. # Formatting ... done # Verifying ... donefdformat默认会做校验verify逐扇区读回比对。校验通过说明盘片物理状态良好如果卡在某个百分比或报io error说明该位置有坏道。-n跳过校验能省一半时间但软盘这种介质跳过校验等于赌运气我一般不用。格式化完成后fdformat只是把盘变成一张“白纸”还没有文件系统。此时mount会报wrong fs type这是正常的下一步才是mkfs。3.2 USB 软驱为什么 fdformat 报 Operation not supportedUSB 软驱的主控芯片常见的是 SMSC USB97C210 之类把低级格式化封装在固件里主机端只能通过 SCSI 命令集做有限操作。fdformat依赖的FDRAWCMDioctl 在usb-storage驱动上不存在所以直接报错。# USB 软驱上执行 fdformat 的典型报错 fdformat /dev/sdb # fdformat: /dev/sdb: Operation not supported # 确认设备走的是 usb-storage readlink -f /sys/block/sdb/device/driver # 输出.../drivers/usb-storage遇到这种情况不要折腾fdformat直接跳到mkfs.fat。USB 软驱在写入文件系统时会由主控完成必要的磁道对齐效果等同于低级格式化。如果mkfs.fat也失败多半是盘片物理损坏或驱动器磁头脏了换盘或清洁磁头。注意有些 USB 软驱对mkfs.fat写入的 FAT12 参数敏感必须显式指定-F 12否则默认可能按 FAT16 处理导致老设备不认。4. 写文件系统mkfs.fat 参数怎么设才被老设备认低级格式化完成后盘上还没有任何文件系统结构。老设备认的是 FAT12这是软盘时代的默认格式。Linux 下用mkfs.fat属于dosfstools包来创建关键参数是-F 12和卷标。4.1 FAT12 与 FAT16 的选择依据1.44MB 软盘理论上 FAT12 和 FAT16 都能用但 FAT12 是事实标准。FAT12 的簇数量上限是 40851.44MB 盘按 512 字节簇算正好 2880 个扇区落在 FAT12 范围内。FAT16 虽然也能建但很多老设备的固件只实现了 FAT12 解析遇到 FAT16 直接报“磁盘未格式化”。# 安装 dosfstools如果系统没有 # Debian/Ubuntu apt install dosfstools # RHEL/CentOS/Rocky dnf install dosfstools # 创建 FAT12 文件系统指定卷标 mkfs.fat -F 12 -n DATA /dev/fd0 # 输出示例 # mkfs.fat 4.2 (2021-01-31) # /dev/fd0 has 2880 sectors and 0.0 MiB free # 卷标 DATA 写入引导扇区 # USB 软驱同样命令设备名换成 /dev/sdb mkfs.fat -F 12 -n DATA /dev/sdb-F 12强制 FAT12-n指定卷标卷标最长 11 字符老设备有时靠卷标识别盘片。如果不指定-Fmkfs.fat会根据容量自动选择1.44MB 通常选 FAT12但显式指定更保险。4.2 挂载验证与写入测试格式化完必须挂载验证确认文件系统可读写、容量正确。# 创建挂载点 mkdir -p /mnt/floppy # 挂载 mount -t vfat /dev/fd0 /mnt/floppy # 查看容量和文件系统类型 df -h /mnt/floppy # 输出应显示约 1.4M 容量Filesystem 类型 vfat # 写入测试文件 echo hello floppy /mnt/floppy/test.txt # 同步并卸载 sync umount /mnt/floppy # 重新挂载确认数据还在 mount -t vfat /dev/fd0 /mnt/floppy cat /mnt/floppy/test.txtdf -h显示的容量会比 1.44MB 略小因为 FAT 表和引导扇区占了一部分正常现象。如果挂载报VFS: Cant find a valid FAT filesystem说明mkfs.fat没写成功或设备节点不对。如果写入时报No space left on device但盘是空的检查是不是 FAT16 被误建用file -s /dev/fd0看文件系统类型。提示软盘写入速度慢sync命令必须执行否则拔盘或断电会导致数据没落盘。老设备读取前也建议在 Linux 上先fsck.fat检查一遍。5. 避坑与排查软盘格式化最常见的 5 个翻车现场软盘这东西玄学成分不小。同样的命令换台机器、换个驱动器、换盒盘结果可能完全不同。下面这 5 条是我踩过的坑按现象、原因、解决三段式记录。5.1 现象fdformat 卡在 Verifying 不动最后报 io error原因盘片有物理坏道或者驱动器磁头脏了。软盘是磁性介质存放久了会退磁磁头积灰也会导致读写失败。解决先换一张确认好的盘片试排除盘的问题。如果换盘正常说明原盘坏了别浪费时间。如果换盘还报错用清洁盘专用清洁软盘清洁磁头或者拆开驱动器用无水酒精棉签轻擦磁头。注意别用棉花纤维会挂在磁头上。5.2 现象mkfs.fat 成功但老设备提示“磁盘未格式化”原因文件系统类型不对或者引导扇区参数不被老设备固件接受。常见的是建成了 FAT16或者 OEM 标识、BPB 参数与设备预期不符。解决用file -s /dev/fd0确认是 FAT12。如果显示 FAT16重新mkfs.fat -F 12。如果已经是 FAT12 还不认尝试用mkfs.fat -F 12 -I忽略一些检查或者用dd写入一个已知可用的软盘镜像做对照。有些工控设备只认特定卷标把卷标改成设备手册里写的。5.3 现象USB 软驱在 Linux 下识别为 /dev/sdb但 mount 报 “no medium found”原因USB 软驱主控没有检测到盘片或者盘片没插到位。软盘插入需要听到“咔哒”一声弹出按钮弹起才算到位。解决重新插拔盘片确认到位。用dmesg | tail看内核有没有报介质变化。如果还是不行换一个 USB 口有些 USB 3.0 口对老 USB 1.1 软驱兼容性差换到 USB 2.0 口。另外检查lsblk的 SIZE 列如果显示 0 或者没有说明主控没识别到盘。5.4 现象格式化后容量只有 1.2MB 或 720KB原因setfdprm参数没设对或者盘片本身是低密盘。1.44MB 盘片和 720KB 盘片外观一样但磁介质不同高密驱动器可以格式化低密盘但容量只有一半。解决用setfdprm /dev/fd0 1440/1440强制标准参数重新fdformat。如果还是 720KB说明盘片是低密盘只能按 720KB 用。低密盘在老设备上反而更常见别扔。5.5 现象写入文件后老设备读出来是乱码或文件名不对原因字符编码或文件名格式问题。FAT12 用 8.3 短文件名Linux 下mount -t vfat默认可能用 UTF-8 编码长文件名老设备只认 ASCII 短名。解决挂载时加iocharsetascii和shortnamelower选项强制短文件名和小写。写入时文件名不超过 8 个字符扩展名不超过 3 个全用大写或小写 ASCII。# 挂载时指定兼容老设备的选项 mount -t vfat -o iocharsetascii,shortnamelower,utf80 /dev/fd0 /mnt/floppyiocharsetascii确保文件名按 ASCII 解释shortnamelower把长文件名截断为短名并转小写utf80关闭 UTF-8 转换。这三个选项组合基本能兼容绝大多数老设备。6. 进阶技巧用 dd 做软盘镜像备份与批量复制软盘最大的风险是物理损坏一旦坏了数据就没了。所以格式化完、写入数据后第一件事应该是做镜像备份。dd是软盘镜像的标准工具但直接dd整个设备会包含未使用扇区镜像大小固定 1.44MB。更精细的做法是按文件系统实际使用量做压缩镜像。# 完整镜像备份从软盘读到文件 dd if/dev/fd0 offloppy_backup.img bs512 count2880 # 从镜像恢复到软盘 dd iffloppy_backup.img of/dev/fd0 bs512 count2880 # 压缩镜像软盘数据通常重复度高压缩率很好 gzip -9 floppy_backup.img # 恢复时先解压 gunzip floppy_backup.img.gz # 批量复制一张母盘复制到多张目标盘 for i in 1 2 3 4 5; do echo 请插入第 $i 张目标盘按回车继续 read dd iffloppy_backup.img of/dev/fd0 bs512 count2880 sync echo 第 $i 张完成 donebs512 count2880精确对应 1.44MB 软盘的 2880 个扇区不多不少。如果软驱是 USB 的设备名换成/dev/sdb但count可能因主控不同需要调整用blockdev --getsize /dev/sdb查实际扇区数。批量复制时每张盘写完必须sync否则拔盘会丢数据。镜像文件还可以用mtools工具集在不挂载的情况下直接读写适合脚本化处理。mcopy、mdir、mdel这些命令操作的是镜像文件不碰物理设备速度快且不依赖软驱。# 安装 mtools apt install mtools # 配置 mtools 使用镜像文件 echo drive a: file\$PWD/floppy_backup.img\ exclusive ~/.mtoolsrc # 列出镜像内容 mdir a: # 复制文件到镜像 mcopy test.txt a:/ # 从镜像复制出来 mcopy a:/test.txt ./mtools的配置文件里file指向镜像路径exclusive表示独占访问。这样操作镜像就像操作真实软盘但速度快几个数量级适合批量制作母盘镜像。我自己的习惯是每张软盘格式化完先做一次dd全盘镜像存着写入数据后再做一次增量镜像。老设备现场出问题时直接拿镜像恢复到新盘比现场重新格式化快得多。软盘这东西后悔药就是镜像。希望帮到你。本文还有配套的精品资源点击获取