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

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

mufs

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

prefix=path

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

volume=name

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

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

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 和组 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 的 Amiga 硬盘的情况下启动 Windows 95(不知道 3.x、98 和 NT),它会将块 0 的字节 0x00dc..0x00df 覆盖为垃圾,从而使 Rigid Disk Block 无效。 幸运的是,这是 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 fs)

rm /wb/WRONGCASE

将删除 /mnt/wrongcase,但是

rm /wb/WR*

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

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

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

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

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

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

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

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