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/