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/