我父亲留给我一批用 Windows 95(荷兰语)创建的3.5 英寸“软盘”磁盘。我想复制他们的内容。我唯一带有软盘驱动器的计算机运行 Ubuntu 12.04.5 LTS。
安装udisks
包后,
udisks --mount /dev/fd0
将内容安装在/media/floppy0
.
这对于具有标准 (8.3) DOS 文件名的文件来说很好,但是当存在其他任何东西时它会出现可怕的错误:
ls -l /media/floppy0 /bin/ls: cannot access /media/floppy0/vï▐ffφl.: Input/output error /bin/ls: cannot access /media/floppy0/$Θh²çⁿ.tΘ: Input/output error /bin/ls: cannot access /media/floppy0/ëG╟+.|√═: Input/output error /bin/ls: cannot access /media/floppy0/t╛n}φa.2σ═: Input/output error total 13395579
-r-xr-xr-x 1 rp root 1476370920 Dec 25 1959 ╣?.???
-rwxr-xr-x 1 rp root 641204006 Jan 30 1980 └≤½Θ- ps.QR3
-r-xr-xr-x 1 rp root 1346403387 Dec 19 1905 6?|■└ó<|.í7|
-rwxr-xr-x 1 rp root 48514 Jan 1 1980 BL.WDB
-rwxr-xr-x 1 rp root 3728 Aug 25 2000 CADRE.WP
-rwxr-xr-x 1 rp root 2857697280 Dec 31 1979 COM d????????? ? ? ? ? ? ??ëG?╟?+.|√═
-rwxr-xr-x 1 rp root 2294480508 Dec 11 1966 ï?=|Ω
-rwxr-xr-x 1 rp root 152428 Dec 23 1991 KAART2.WKS
-rwxr-xr-x 1 rp root 12909 Jan 1 1980 KABRO.WKS
-rwxr-xr-x 1 rp root 8554 Nov 28 1991 K.BRO drwxr-xr-x 2 rp root 1024 Nov 28 1991 KOPIE
-rwxr-xr-x 1 rp root 47250 Nov 28 1991 L39.ZND
-rwxr-xr-x 1 rp root 0 Dec 19 1991 LIJST39.WEK d????????? ? ? ? ? ? t?╛n}φa.2σ═
-r-xr-xr-x 1 rp root 1963196670 Jan 6 2038 ├┬?.ⁿ?u d????????? ? ? ? ? ? vï▐ffφl?.???
-rwxr-xr-x 1 rp root 21774 Dec 31 1979 WIELEK.WDB
-rwxr-xr-x 1 rp root 22612 Dec 31 1979 WIELGA.WDB
-rwxr-xr-x 1 rp root 23255 Dec 22 1991 WIEL.WBL
-rwxr-xr-x 1 rp root 27044 Jan 1 1980 WIEL.WDB
-rwxr-xr-x 1 rp root 0 Jan 8 1980 δ4ÉIBM.3.2 d????????? ? ? ? ? ? $?Θh²çⁿ?.t?Θ
-rwxr-xr-x 1 rp root 3137341625 Nov 26 1907 Θ╨■φ? s?.├╛?
(这不仅仅是无意义的文件名:rsync
下载这张软盘的内容给了我一个 5GB 的文件,此时我的磁盘空间用完了。)
我的猜测:VFAT 路径名转换尝试不正确或根本不尝试。
如何纠正这种情况?
我在 Google 上找到的页面,例如这个页面,表明这是为theiocharset
和codepage
mount 选项提供适当值的问题。
这是真的?使用哪些值?而且,首先:如何供应它们?
udisks
默默地忽略提供的任何安装选项:
$ udisks --mount /dev/fd0 --mount-options='ro,iocharset=utf8,codepage=1252,foo=bar'
Mounted /org/freedesktop/UDisks/devices/fd0 at /media/floppy0
$ fgrep fd0 /proc/mounts
/dev/fd0 /media/floppy0 vfat ro,nosuid,nodev,relatime,uid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
(这不是我说的!)
直接mount
静默失败:
$ sudo mount -t vfat /dev/fd0 /mnt
mount: block device /dev/fd0 is write-protected, mounting read-only
$ fgrep fd0 /proc/mounts
(不返回任何内容;挂载不起作用)。
至少这样我可以检查哪些codepage
s 是有效的:
$ sudo mount -t vfat -oro,codepage=850 /dev/fd0 /mnt
$ fgrep fd0 /proc/mounts
$ sudo mount -t vfat -oro,codepage=85 /dev/fd0 /mnt
mount: wrong fs type, bad option, bad superblock on /dev/fd0,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or s
但我需要的是一种实际mount
使用这样一个代码页的方法。
怎么了?我还能尝试什么?
长时间的存储可能会影响这些软盘,并且它们的 FAT 可能会被破坏。这是很有可能的,因为即使是新写的软盘也不能被认为是可靠的媒体。多年前使用软盘时,我经常制作 2 份相同数据的副本。
有一个很好的wiki解释了FAT 文件系统命令的用法
codepage
和iocharset
选项。 在较新的系统中直接支持软盘是不可靠的。即使在 12.04 中,他们的支持也受到多个错误的困扰。例如,其中之一。mount
mount
命令参数-t
指定文件系统类型。您的使用很接近,但是您需要-t
在文件系统类型和文件系统类型之间留一个空格。更改您的命令:至:
抱歉,我无法使用带有软盘驱动器的机器来显示真实输出的样子。
如果您将示例中具有合法文件名和创建日期的每个文件的文件大小相加,则总数为 328,058。这是关于人们可能期望在具有该容量(1MB)的软盘上找到的结果。
显然,您不会在将近 30 年历史的存储设备中找到 5 GB 文件或 1959 年或 2038 年创建的文件。
如果您的问题是从这些旧软盘中恢复合法文件,现在只需复制具有合理名称、文件大小和日期的文件即可。
我没有硬件来测试这么旧的东西,你只能假设 udisks 支持这些古老的驱动器。我猜也许不是。或者至少不是完美无缺的。
可能有一种方法可以拼凑一个可以正确读取这些设备上的文件结构的安装方案,但如果您只想恢复文件,这似乎需要做很多工作。
“应该”工作....
Win95 是很久以前的事了,我认为当时还没有 NTFS。但当然,一种 [虽然是远程的] 可能性是软盘没有被格式化为 FAT 设备。
然后总是存在原生 IDE 控制器与 USB 接口的兼容性问题,以及后者(我假设您正在使用)是否忠实地与驱动器硬件和媒体通信。