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 设置的模式。
符号链接¶
尽管 Amiga 和 Linux 文件系统彼此相似,但还是存在一些并不总是细微的差异。 其中一个差异在符号链接中变得明显。 虽然 Linux 具有一个仅包含一个根目录的文件系统,但 Amiga 为每个文件系统(例如,分区、软盘等)都有一个单独的根目录。 在 Amiga 中,这些实体称为“卷”。 它们具有可用于访问它们的符号名称。 因此,符号链接可以指向不同的卷。 AFFS 将卷名转换为目录名,并在其前面加上前缀路径(请参阅前缀选项)。
示例:您将所有 Amiga 分区挂载在 /amiga/<volume> 下(其中 <volume> 是卷的名称),并且在挂载所有 AFFS 分区时给出选项“prefix=/amiga/”。 (它们可能是“User”、“WB”和“Graphics”,挂载点 /amiga/User、/amiga/WB 和 /amiga/Graphics)。 指向“User:sc/include/dos/dos.h”的符号链接将被跟踪到“/amiga/User/sc/include/dos/dos.h”。
示例¶
命令行
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/