如何为我的软盘获取正确的 vfat 路径转换?

如何为我的软盘获取正确的 vfat 路径转换?

我父亲给我留下了一批3.5 英寸“软盘”使用 Windows 95(荷兰语)创建。我想复制它们的内容。我唯一一台带有软盘驱动器的计算机运行的是 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 找到的页面,例如这个,建议提供适当的价值iocharset挂载codepage选项

这是真的吗?应该使用哪些值?首先,如何提供这些值?

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是有效的:

$ 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使用这种代码页的方法。

出了什么问题?我还能尝试什么?

答案1

长期存储可能会影响这些软盘,并且它们的 FAT 可能会被破坏。这是很有可能的,因为即使是新写入的软盘也不能被视为可靠的媒体。多年前使用软盘时,我经常制作两份相同的数据。
有一个很好的维基百科解释FAT 文件系统命令的用法codepageiocharset选项。 较新的系统对软盘的直接支持并不可靠。即使在 12.04 中,对软盘的支持也存在多个错误。mount
其中之一, 例如。

答案2

命令mount参数-t指定文件系统类型。您的用法很接近,但是您需要在-t和文件系统类型之间留一个空格。将您的命令从:

$ sudo mount -tvfat /dev/fd0 /mnt

到:

$ sudo mount -t vfat /dev/fd0 /mnt

抱歉,我无法使用软盘驱动器来访问我的机器,无法显示真实的输出效果。

答案3

如果将示例中具有合法文件名和创建日期的每个文件的文件大小相加,总数为 328,058。这大约是人们在该容量(1MB)的软盘上可能找到的结果。

显然,你不会在近 30 年的存储设备中找到 5 GB 的文件或 1959 年或 2038 年创建的文件。

如果您的问题是从这些旧软盘中恢复合法文件,那么现在只需复制具有合理名称、文件大小和日期的文件就可以了。

我没有硬件来测试这些老旧的东西,你只能假设 udisks 支持这些古老的驱动器。我猜也许不支持。或者至少不是完美无缺的。

可能有一种方法可以拼凑一个安装方案,可以正确读取这些设备上的文件结构,但如果您只想恢复文件,这似乎需要大量工作。

sudo mount /dev/fd0 /floppy -t vfat

“应该”起作用......

Win95 是很久以前的事了,我认为那时还没有 NTFS。但当然有一种(尽管可能性很小)可能性是软盘没有格式化为 FAT 设备。

然后,总是存在本机 IDE 控制器与 USB 接口的兼容性问题,以及后者(我假设您正在使用)是否忠实地与驱动器硬件和媒体通信。

相关内容