Amiga 文件系统概述

并非所有 Amiga 文件系统的变体都支持读取和写入。 Amiga 目前知道六种不同的文件系统

DOS0

旧的或原始的文件系统,不太适合硬盘,通常也不在硬盘上使用。支持读/写。

DOS1

原始的快速文件系统。支持读/写。

DOS2

旧的“国际”文件系统。“国际”意味着修复了一个错误,使得文件名中带重音的(“国际”)字母不区分大小写,就像它们应该的那样。支持读/写。

DOS3

“国际”快速文件系统。支持读/写。

DOS4

带有目录缓存的原始文件系统。目录缓存大大加快了软盘上的目录访问速度,但减慢了文件创建/删除速度。在硬盘上没有多大意义。支持只读。

DOS5

带有目录缓存的快速文件系统。支持只读。

以上所有文件系统都允许 512 到 32K 字节的块大小。支持的块大小为:512、1024、2048 和 4096 字节。较大的块几乎可以加快所有速度,但会浪费磁盘空间。 4K 以上的速度提升似乎不值得付出代价,所以您也不会在这里损失太多。

也支持以上文件系统的 muFS(多用户文件系统)等效项。

AFFS 的挂载选项

protect

如果设置此选项,则无法更改保护位。

setuid[=uid]

这将文件系统中所有文件和目录的所有者设置为 uid 或当前用户的 uid。

setgid[=gid]

与上述相同,但用于 gid。

mode=mode

将模式标志设置为给定的(八进制)值,而忽略原始权限。如果设置了相应的 r 位,目录将获得 x 权限。这很有用,因为大多数普通的 AmigaOS 文件将映射到 600。

nofilenametruncate

当文件名超出标准最大文件名长度(30 个字符)时,文件系统将返回错误。

reserved=num

将分区开头的保留块数设置为 num。您永远不需要此选项。默认为 2。

root=block

设置根块的块号。这应该永远没有必要。

bs=blksize

将块大小设置为 blksize。有效的块大小为 512、1024、2048 和 4096。与 root 选项一样,这应该永远没有必要,因为 affs 可以自行计算出来。

quiet

文件系统不会为不允许的模式更改返回错误。

verbose

挂载文件系统时,卷名、文件系统类型和块大小将写入系统日志。

mufs

该文件系统实际上是一个 muFS,即使它没有将自己标识为一个。如果文件系统没有格式化为 muFS,但被用作一个 muFS,则此选项是必要的。

prefix=path

路径将作为前缀添加到 AFFS 分区上符号链接的每个绝对路径名称。默认值 = “/”。(见下文。)

volume=name

当在 AFFS 分区上创建带有绝对路径的符号链接时,name 将作为卷名称添加到前面。默认值 = “”(空字符串)。(见下文。)

用户/组和保护标志的处理

Amiga -> Linux

Amiga 保护标志 RWEDRWEDHSPARWED 的处理方式如下

  • R 映射到用户、组和其他用户的 r。在目录上,R 意味着 x。

  • W 映射到 w。

  • E 映射到 x。

  • D 被忽略。

  • H、S 和 P 在 Linux 下始终保留并被忽略。

  • 当写入文件时,A 被清除。

除非将 set[gu]id 作为挂载选项给出,否则将使用用户 ID 和组 ID。由于大多数 Amiga 文件系统是单用户系统,因此它们将由 root 拥有。Amiga 文件系统的根目录(挂载点)将由实际挂载文件系统的用户拥有(根目录没有 uid/gid 字段)。

Linux -> Amiga

Linux rwxrwxrwx 文件模式的处理方式如下

  • r 权限将允许用户、组和其他用户的 R。

  • w 权限将允许用户、组和其他用户的 W。

  • 用户的 x 权限将允许普通文件的 E。

  • 将允许用户、组和其他用户的 D。

  • 所有其他标志(suid、sgid、...)都将被忽略,并且不会保留。

新创建的文件和目录将获得当前用户的用户和组 ID,以及根据 umask 的模式。

示例

命令行

mount  Archive/Amiga/Workbench3.1.adf /mnt -t affs -o loop,verbose
mount  /dev/sda3 /Amiga -t affs

/etc/fstab 条目

/dev/sdb5   /amiga/Workbench    affs    noauto,user,exec,verbose 0 0

重要提示

如果在连接到您的 PC 的情况下引导 Windows 95(不了解 3.x、98 和 NT),它将用垃圾覆盖块 0 的字节 0x00dc..0x00df,从而使刚性磁盘块无效。纯粹的运气使该区域是 RDB 的未使用区域,因此只有校验和不再匹配。 Linux 将忽略此垃圾并仍然识别 RDB,但在您再次将该驱动器连接到 Amiga 之前,您必须还原或修复您的 RDB。因此,请在启动 Windows 之前制作它的备份副本!

如果损坏已经完成,则以下内容应修复 RDB(其中 <disk> 是设备名称)。

风险自负

dd if=/dev/<disk> of=rdb.tmp count=1
cp rdb.tmp rdb.fixed
dd if=/dev/zero of=rdb.fixed bs=1 seek=220 count=4
dd if=rdb.fixed of=/dev/<disk>

错误、限制、注意事项

很多事情可能无法按预期工作。并非所有内容都经过测试,尽管已使用此 fs 读取和写入了数百 MB。有关最新的错误列表,请参阅 fs/affs/Changes。

默认情况下,文件名将被截断为 30 个字符,且不发出警告。 ‘nofilenametruncate’ 挂载选项可以更改该行为。

affs 在文件名匹配中忽略大小写,但 Linux shell 确实关心大小写。示例(/wb 是挂载的 affs 文件系统)

rm /wb/WRONGCASE

将删除 /mnt/wrongcase,但

rm /wb/WR*

不会删除,因为 shell 会匹配名称。

块分配是为硬盘分区设计的。如果多个进程写入(小)软盘,则块的分配方式很糟糕(但真正的 AFFS 并不会好太多)。当空间变得紧张时也是如此。

您无法在 OFS(旧文件系统)上执行程序,因为由于 488 字节的块,程序文件无法进行内存映射。出于同样的原因,您无法通过环回设备在此类文件系统上挂载映像。

当系统在挂载 affs 分区时崩溃时,根块中的位图有效标志可能不准确。目前,如果没有 Amiga(磁盘验证器)或手动(谁会这样做?),则无法修复损坏的文件系统。也许以后会修复。

如果在系统启动时挂载 affs 分区,您可能需要告诉 fsck 不应检查该文件系统(在 /etc/fstab 的第六个字段中放置 ‘0’)。

由于与 Amiga 软盘控制器不兼容,因此无法使用普通的 PC 或工作站读取软盘。

如果您对适用于 Linux 的 Amiga 模拟器感兴趣,请查看

http://web.archive.org/web/%2E/http://www.freiburg.linux.de/~uae/