软盘与 21 世纪 Linux
在此页
- 历史
- 进退两难
- 解决方案
- 添加进度指示器
- 使它更易于使用
- 处理错误
- 使用图像文件
- 结论
头条新闻宣布内核不再支持软盘驱动器。以下是如何处理您收集的软盘以及如何处理。
菲利普·吉尔默 (Philip L. Gilmer),2019 年 8 月 11 日
最近的头条新闻宣称 Linux 内核中对古老的软盘驱动器的支持即将终止。我的胃翻腾不已,心跳了一两下。我从事这项业务已经好几年了,我收藏的软盘可以追溯到 8 英寸。 \又不是!我想。
幸运的是,进一步的研究表明,头条新闻在某种程度上夸大了情况。所有软盘支持并没有消失——只是支持连接到专用软盘控制器的驱动器。您购买的用于为较新的计算机提供软盘读/写功能的 USB 驱动器使用不同的支持机制,并将继续得到支持——目前。尽管如此,现在似乎是对所有这些软盘做点什么的好时机。
历史
第一张软盘直径为 8 英寸,由 IBM 在 1960 年代后期作为大型机组件推出。 IBM 将它们指定为“Type 1 Diskette”,但“软盘”一词很快流行起来。晚期的双面版本能够容纳大约 1.2 兆字节的数据。
5-1/4 英寸驱动器紧随其后。尽管成本较低,但它们只能容纳少量数据。最初只有大约 72 KB 的数据,竞争将容量增加到大约 630 KB。
第一个 3-1/2 英寸软盘驱动器在当时是一个奇迹。 “软盘”不再那么软。早期的 Apple Macintosh 计算机使用 400 KB 的大小。IBM 于 1986 年为其 IBM PC Convertible 系列引入了这种外形,使我们能够存储“惊人的”720 KB。后来的 PS/2 系列 IBM PC 将容量增加到 1.44 甚至 2.88 兆字节的数据。但是时间在前进。 Iomegas SuperDisk LS-120 和 LS-240 驱动器等创新技术使容量达到了 750 兆字节大关。
CD 和 DVD 技术的进步几乎预示着软盘的终结。尽管 CD 最初是只读介质,但可写设备很快问世,并将存储容量从 650 兆字节推向千兆字节范围,双层 DVD 的容量为 8 千兆字节。
如今,拇指驱动器是我们大多数人的首选武器。它们体积小、价格便宜且方便,现在提供的存储容量接近 1 TB。
伟大的!我像其他人一样使用新技术。但是我有这些软盘怎么办呢?
困境
可以肯定的是,这些旧软盘中的许多都包含一种或另一种数据文件,并且可以将这些文件复制到我的 Linux 系统上的一个目录中。由于我使用 Linux Mint KDE,我什至不必手动挂载软盘。插入软盘后,Mint 会主动为我做这件事。打开我的文件管理器,我可以简单地将文件拖放到新位置。

其他 Linux 发行版的做法可能略有不同,但大多数都会为您提供一种轻松安装软盘驱动器的方法。单击软盘条目,将显示选项。我选择“用文件管理器打开”来查看软盘上的文件。

只需拖放文件即可将文件复制到您选择的目录。
如何处理其他软盘并不是那么简单。要有任何用处,它们必须像软盘一样有用。我已经在 DOS 和 Windows 下制作了软盘映像。但那是很久以前的事了。我使用的程序是 16 位 DOS 程序,不会在 Windows XP 之后的任何版本的 Windows 上运行。
幸运的是,这样做的过程很简单。而且您不需要任何第三方供应商程序来执行此操作。 Linux 包含完成这项工作所需的一切。
解决方案
我们将使用名为 dd 的程序来实际创建图像。
我们需要做的第一件事是找出软驱的安装位置。
将 USB 驱动器插入系统,等待几秒钟,然后发出命令:
dmesg | tail
输出看起来像这样:

这里的最后一行表示软盘被指定为 /dev/sdb。
如果您使用连接到专用控制器的软盘驱动器,那么您的设备将类似于 /dev/fd0 或 /dev/floppy。将软盘插入其中并使用 df 命令查看使用的设备:

在我们的示例中,分配的设备是 /dev/fd0。如果这是您的配置,请在下面示例中使用 /dev/sdb 的任何地方使用此设备。
插入一张要镜像的软盘,切换到镜像存放目录,执行命令:
dd if=/dev/sdb of=test.img
我们希望您会看到这样的内容:

以最简单的形式使用 dd 有几个问题。
第一,无论使用多少软盘,创建的映像都将反映软盘的大小,在本例中为 1.44 兆字节。我们可以使用 gzip 命令压缩文件:
gzip test.img
结果如下:

文件 test.img 被压缩并替换为 test.img.gz,它几乎小了一半。
第二,dd 程序没有像我们希望的那样处理错误。默认情况下,如果遇到错误,例如坏扇区,它会报告问题并退出。
幸运的是 dd 有办法让我们处理一些错误。
我们将添加参数以忽略错误并继续。此外,让它用零填充不可读的部分,这样我们就没有被截断的数据。我打算将副本的块大小从 512 字节更改为 1024 字节,以便现在的记录数等于磁盘容量(以千字节为单位)。我们的副本现在看起来像这样:

和以前一样,我们可以使用 gzip 实用程序压缩文件。
一步完成这件事真是太好了。使用管道 (\|) 运算符,我们可以做到这一点。我们将发出以下命令:
sudo dd if=/dev/sdb bs=1024 conv=sync,noerror | gzip > test.img.gz
结果如下:

由于我们提供了一个以文件扩展名 .gz 结尾的名称,gzip 程序使用文件名的其余部分作为内部文件的名称,\test.img ... \.gz\. 如果您的名称包含空格或其他特殊字符,请将整个名称括在引号中。

如果我们在归档器中打开我们的文件,我们可以看到实际的文件名:

添加进度指示器
我们的命令有效,但您无法真正看到发生了什么。很高兴能够看到事情是否按预期进行。
有一个名为 pv 的漂亮小实用程序可以完成这项工作。从您的发行版存储库安装它。 Linux Mint 使用 apt 包管理器,因此我们使用以下命令安装它:
sudo apt install pv

使用 pv 我们现在有了进度指示器。所以我们的图像创建过程现在看起来是这样的:
pv -tpreb /dev/sdb | dd bs=1024 conv=sync,noerror | gzip > test.img.gz

同样,我们的软盘恢复过程变为:
sudo pv -tpreb test.img.gz | gunzip -c | dd of=/dev/sdb

使它更易于使用
为了使这些命令更易于使用,我创建了几个 bash 脚本。要映像磁盘,请使用 imgcreate.sh:
#! /bin/sh
#!
#! imgcreate.sh - Shell to create diskette image file from floppy diskette
#! Author - Philip L. Gilmer, 11-Aug-2019
#!pv -tpreb /dev/sdb | dd bs=1024 conv=sync,noerror,excl | gzip > "$1"
exit 0
使用名称和压缩文件名调用。

要重新创建软盘,请使用 imgrestore.sh:
#! /bin/sh
#!
#! imgcreate.sh - Shell to create diskette image file from floppy diskette
#! Author - Philip L. Gilmer, 11-Aug-2019
#!
pv -tpreb /dev/sdb | dd bs=1024 conv=sync,noerror,excl | gzip > "$1"
exit 0
如果软盘驱动器不是 /dev/sdb,请记住更改为设备名称。

处理错误
好吧,忙着对我们的软盘进行成像,然后发生了这样的事情:

它应该显示读取的 720 条记录。哎呀! 104?并非完全出乎意料。其中一些软盘已有 30 年历史。那么现在怎么办?我尝试使用 fsck 命令,但没有得到很好的结果。幸运的是,dosfsck 命令可以帮助我们。此命令是存储库包 dosfstools 的一部分。如果您的系统上尚未安装,请安装该软件包。在基于 Debian 的系统(如 Linux Mint)上,您可以使用以下命令进行安装:
sudo apt install dosfstools
你的口味可能会有所不同。
发出如下命令:
sudo dosfsck -w -r -l -a -v -t /dev/sdb
当输入时,dosfsck 将尝试修复磁盘,自动列出正在处理的文件的名称,将不可读的簇标记为坏的,并立即将更改写入磁盘。查看手册页以获取更多信息。对于我们当前的软盘,我们得到以下输出:

这张软盘不是真的有用。太多文件已损坏并包含不可读的簇。受影响的文件需要从其他来源恢复。但是,不可读的簇通常位于任何文件的已分配簇之外。然后可以对修复的磁盘进行映像。重新运行 dosfsck 表明它已经尽可能地清理了磁盘:

所以现在我们尝试重新映像磁盘:

可以对整个磁盘进行成像。请记住,任何具有坏簇的文件都将无法使用。
使用图像文件
要使用图像文件,请先将其解压缩。
要检查文件,请将其挂载到环回设备上:
sudo mount -o loop -t msdos ./test.img /mnt

浏览我们的挂载点 /mnt 我们可以看到文件:

.img 文件也可以用作 VirtualBox VM 中 guest 计算机上定义的虚拟驱动器中的虚拟软盘。图像文件必须驻留在主机 硬盘上。

选择突出显示的条目并浏览。

结论
多年来,新技术的引入可能使软盘变得不那么有用了。尽管如此,在处理运行较旧程序和系统的虚拟机时,它们仍然是不可替代的。 21 世纪的 Linux 发行版仍然包含很多支持旧技术的工具,但是这项技术将继续支持多久没人能说。
因此,尽快对这些软盘进行映像,是吗?我仍然希望我对那些 8 英寸软盘有所作为!