forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
250 lines
8.4 KiB
250 lines
8.4 KiB
.. SPDX-License-Identifier: GPL-2.0 |
|
|
|
============================= |
|
Overview of Amiga Filesystems |
|
============================= |
|
|
|
Not all varieties of the Amiga filesystems are supported for reading and |
|
writing. The Amiga currently knows six different filesystems: |
|
|
|
============== =============================================================== |
|
DOS\0 The old or original filesystem, not really suited for |
|
hard disks and normally not used on them, either. |
|
Supported read/write. |
|
|
|
DOS\1 The original Fast File System. Supported read/write. |
|
|
|
DOS\2 The old "international" filesystem. International means that |
|
a bug has been fixed so that accented ("international") letters |
|
in file names are case-insensitive, as they ought to be. |
|
Supported read/write. |
|
|
|
DOS\3 The "international" Fast File System. Supported read/write. |
|
|
|
DOS\4 The original filesystem with directory cache. The directory |
|
cache speeds up directory accesses on floppies considerably, |
|
but slows down file creation/deletion. Doesn't make much |
|
sense on hard disks. Supported read only. |
|
|
|
DOS\5 The Fast File System with directory cache. Supported read only. |
|
============== =============================================================== |
|
|
|
All of the above filesystems allow block sizes from 512 to 32K bytes. |
|
Supported block sizes are: 512, 1024, 2048 and 4096 bytes. Larger blocks |
|
speed up almost everything at the expense of wasted disk space. The speed |
|
gain above 4K seems not really worth the price, so you don't lose too |
|
much here, either. |
|
|
|
The muFS (multi user File System) equivalents of the above file systems |
|
are supported, too. |
|
|
|
Mount options for the AFFS |
|
========================== |
|
|
|
protect |
|
If this option is set, the protection bits cannot be altered. |
|
|
|
setuid[=uid] |
|
This sets the owner of all files and directories in the file |
|
system to uid or the uid of the current user, respectively. |
|
|
|
setgid[=gid] |
|
Same as above, but for gid. |
|
|
|
mode=mode |
|
Sets the mode flags to the given (octal) value, regardless |
|
of the original permissions. Directories will get an x |
|
permission if the corresponding r bit is set. |
|
This is useful since most of the plain AmigaOS files |
|
will map to 600. |
|
|
|
nofilenametruncate |
|
The file system will return an error when filename exceeds |
|
standard maximum filename length (30 characters). |
|
|
|
reserved=num |
|
Sets the number of reserved blocks at the start of the |
|
partition to num. You should never need this option. |
|
Default is 2. |
|
|
|
root=block |
|
Sets the block number of the root block. This should never |
|
be necessary. |
|
|
|
bs=blksize |
|
Sets the blocksize to blksize. Valid block sizes are 512, |
|
1024, 2048 and 4096. Like the root option, this should |
|
never be necessary, as the affs can figure it out itself. |
|
|
|
quiet |
|
The file system will not return an error for disallowed |
|
mode changes. |
|
|
|
verbose |
|
The volume name, file system type and block size will |
|
be written to the syslog when the filesystem is mounted. |
|
|
|
mufs |
|
The filesystem is really a muFS, also it doesn't |
|
identify itself as one. This option is necessary if |
|
the filesystem wasn't formatted as muFS, but is used |
|
as one. |
|
|
|
prefix=path |
|
Path will be prefixed to every absolute path name of |
|
symbolic links on an AFFS partition. Default = "/". |
|
(See below.) |
|
|
|
volume=name |
|
When symbolic links with an absolute path are created |
|
on an AFFS partition, name will be prepended as the |
|
volume name. Default = "" (empty string). |
|
(See below.) |
|
|
|
Handling of the Users/Groups and protection flags |
|
================================================= |
|
|
|
Amiga -> Linux: |
|
|
|
The Amiga protection flags RWEDRWEDHSPARWED are handled as follows: |
|
|
|
- R maps to r for user, group and others. On directories, R implies x. |
|
|
|
- W maps to w. |
|
|
|
- E maps to x. |
|
|
|
- D is ignored. |
|
|
|
- H, S and P are always retained and ignored under Linux. |
|
|
|
- A is cleared when a file is written to. |
|
|
|
User id and group id will be used unless set[gu]id are given as mount |
|
options. Since most of the Amiga file systems are single user systems |
|
they will be owned by root. The root directory (the mount point) of the |
|
Amiga filesystem will be owned by the user who actually mounts the |
|
filesystem (the root directory doesn't have uid/gid fields). |
|
|
|
Linux -> Amiga: |
|
|
|
The Linux rwxrwxrwx file mode is handled as follows: |
|
|
|
- r permission will allow R for user, group and others. |
|
|
|
- w permission will allow W for user, group and others. |
|
|
|
- x permission of the user will allow E for plain files. |
|
|
|
- D will be allowed for user, group and others. |
|
|
|
- All other flags (suid, sgid, ...) are ignored and will |
|
not be retained. |
|
|
|
Newly created files and directories will get the user and group ID |
|
of the current user and a mode according to the umask. |
|
|
|
Symbolic links |
|
============== |
|
|
|
Although the Amiga and Linux file systems resemble each other, there |
|
are some, not always subtle, differences. One of them becomes apparent |
|
with symbolic links. While Linux has a file system with exactly one |
|
root directory, the Amiga has a separate root directory for each |
|
file system (for example, partition, floppy disk, ...). With the Amiga, |
|
these entities are called "volumes". They have symbolic names which |
|
can be used to access them. Thus, symbolic links can point to a |
|
different volume. AFFS turns the volume name into a directory name |
|
and prepends the prefix path (see prefix option) to it. |
|
|
|
Example: |
|
You mount all your Amiga partitions under /amiga/<volume> (where |
|
<volume> is the name of the volume), and you give the option |
|
"prefix=/amiga/" when mounting all your AFFS partitions. (They |
|
might be "User", "WB" and "Graphics", the mount points /amiga/User, |
|
/amiga/WB and /amiga/Graphics). A symbolic link referring to |
|
"User:sc/include/dos/dos.h" will be followed to |
|
"/amiga/User/sc/include/dos/dos.h". |
|
|
|
Examples |
|
======== |
|
|
|
Command line:: |
|
|
|
mount Archive/Amiga/Workbench3.1.adf /mnt -t affs -o loop,verbose |
|
mount /dev/sda3 /Amiga -t affs |
|
|
|
/etc/fstab entry:: |
|
|
|
/dev/sdb5 /amiga/Workbench affs noauto,user,exec,verbose 0 0 |
|
|
|
IMPORTANT NOTE |
|
============== |
|
|
|
If you boot Windows 95 (don't know about 3.x, 98 and NT) while you |
|
have an Amiga harddisk connected to your PC, it will overwrite |
|
the bytes 0x00dc..0x00df of block 0 with garbage, thus invalidating |
|
the Rigid Disk Block. Sheer luck has it that this is an unused |
|
area of the RDB, so only the checksum doesn't match anymore. |
|
Linux will ignore this garbage and recognize the RDB anyway, but |
|
before you connect that drive to your Amiga again, you must |
|
restore or repair your RDB. So please do make a backup copy of it |
|
before booting Windows! |
|
|
|
If the damage is already done, the following should fix the RDB |
|
(where <disk> is the device name). |
|
|
|
DO AT YOUR OWN RISK:: |
|
|
|
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> |
|
|
|
Bugs, Restrictions, Caveats |
|
=========================== |
|
|
|
Quite a few things may not work as advertised. Not everything is |
|
tested, though several hundred MB have been read and written using |
|
this fs. For a most up-to-date list of bugs please consult |
|
fs/affs/Changes. |
|
|
|
By default, filenames are truncated to 30 characters without warning. |
|
'nofilenametruncate' mount option can change that behavior. |
|
|
|
Case is ignored by the affs in filename matching, but Linux shells |
|
do care about the case. Example (with /wb being an affs mounted fs):: |
|
|
|
rm /wb/WRONGCASE |
|
|
|
will remove /mnt/wrongcase, but:: |
|
|
|
rm /wb/WR* |
|
|
|
will not since the names are matched by the shell. |
|
|
|
The block allocation is designed for hard disk partitions. If more |
|
than 1 process writes to a (small) diskette, the blocks are allocated |
|
in an ugly way (but the real AFFS doesn't do much better). This |
|
is also true when space gets tight. |
|
|
|
You cannot execute programs on an OFS (Old File System), since the |
|
program files cannot be memory mapped due to the 488 byte blocks. |
|
For the same reason you cannot mount an image on such a filesystem |
|
via the loopback device. |
|
|
|
The bitmap valid flag in the root block may not be accurate when the |
|
system crashes while an affs partition is mounted. There's currently |
|
no way to fix a garbled filesystem without an Amiga (disk validator) |
|
or manually (who would do this?). Maybe later. |
|
|
|
If you mount affs partitions on system startup, you may want to tell |
|
fsck that the fs should not be checked (place a '0' in the sixth field |
|
of /etc/fstab). |
|
|
|
It's not possible to read floppy disks with a normal PC or workstation |
|
due to an incompatibility with the Amiga floppy controller. |
|
|
|
If you are interested in an Amiga Emulator for Linux, look at |
|
|
|
http://web.archive.org/web/%2E/http://www.freiburg.linux.de/~uae/
|
|
|