| .. 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/ |