Mauro Carvalho Chehab | 76272168 | 2020-02-17 17:11:49 +0100 | [diff] [blame] | 1 | .. SPDX-License-Identifier: GPL-2.0 |
| 2 | |
| 3 | ============================= |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 4 | Overview of Amiga Filesystems |
| 5 | ============================= |
| 6 | |
| 7 | Not all varieties of the Amiga filesystems are supported for reading and |
| 8 | writing. The Amiga currently knows six different filesystems: |
| 9 | |
Mauro Carvalho Chehab | 76272168 | 2020-02-17 17:11:49 +0100 | [diff] [blame] | 10 | ============== =============================================================== |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 11 | DOS\0 The old or original filesystem, not really suited for |
| 12 | hard disks and normally not used on them, either. |
| 13 | Supported read/write. |
| 14 | |
| 15 | DOS\1 The original Fast File System. Supported read/write. |
| 16 | |
| 17 | DOS\2 The old "international" filesystem. International means that |
| 18 | a bug has been fixed so that accented ("international") letters |
| 19 | in file names are case-insensitive, as they ought to be. |
| 20 | Supported read/write. |
| 21 | |
| 22 | DOS\3 The "international" Fast File System. Supported read/write. |
| 23 | |
| 24 | DOS\4 The original filesystem with directory cache. The directory |
| 25 | cache speeds up directory accesses on floppies considerably, |
| 26 | but slows down file creation/deletion. Doesn't make much |
| 27 | sense on hard disks. Supported read only. |
| 28 | |
| 29 | DOS\5 The Fast File System with directory cache. Supported read only. |
Mauro Carvalho Chehab | 76272168 | 2020-02-17 17:11:49 +0100 | [diff] [blame] | 30 | ============== =============================================================== |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 31 | |
| 32 | All of the above filesystems allow block sizes from 512 to 32K bytes. |
| 33 | Supported block sizes are: 512, 1024, 2048 and 4096 bytes. Larger blocks |
| 34 | speed up almost everything at the expense of wasted disk space. The speed |
| 35 | gain above 4K seems not really worth the price, so you don't lose too |
| 36 | much here, either. |
| 37 | |
| 38 | The muFS (multi user File System) equivalents of the above file systems |
| 39 | are supported, too. |
| 40 | |
| 41 | Mount options for the AFFS |
| 42 | ========================== |
| 43 | |
Mauro Carvalho Chehab | 76272168 | 2020-02-17 17:11:49 +0100 | [diff] [blame] | 44 | protect |
| 45 | If this option is set, the protection bits cannot be altered. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 46 | |
Mauro Carvalho Chehab | 76272168 | 2020-02-17 17:11:49 +0100 | [diff] [blame] | 47 | setuid[=uid] |
| 48 | This sets the owner of all files and directories in the file |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 49 | system to uid or the uid of the current user, respectively. |
| 50 | |
Mauro Carvalho Chehab | 76272168 | 2020-02-17 17:11:49 +0100 | [diff] [blame] | 51 | setgid[=gid] |
| 52 | Same as above, but for gid. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 53 | |
Mauro Carvalho Chehab | 76272168 | 2020-02-17 17:11:49 +0100 | [diff] [blame] | 54 | mode=mode |
| 55 | Sets the mode flags to the given (octal) value, regardless |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 56 | of the original permissions. Directories will get an x |
| 57 | permission if the corresponding r bit is set. |
| 58 | This is useful since most of the plain AmigaOS files |
| 59 | will map to 600. |
| 60 | |
Fabian Frederick | 8ca5772 | 2014-04-07 15:39:01 -0700 | [diff] [blame] | 61 | nofilenametruncate |
| 62 | The file system will return an error when filename exceeds |
| 63 | standard maximum filename length (30 characters). |
| 64 | |
Mauro Carvalho Chehab | 76272168 | 2020-02-17 17:11:49 +0100 | [diff] [blame] | 65 | reserved=num |
| 66 | Sets the number of reserved blocks at the start of the |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 67 | partition to num. You should never need this option. |
| 68 | Default is 2. |
| 69 | |
Mauro Carvalho Chehab | 76272168 | 2020-02-17 17:11:49 +0100 | [diff] [blame] | 70 | root=block |
| 71 | Sets the block number of the root block. This should never |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 72 | be necessary. |
| 73 | |
Mauro Carvalho Chehab | 76272168 | 2020-02-17 17:11:49 +0100 | [diff] [blame] | 74 | bs=blksize |
| 75 | Sets the blocksize to blksize. Valid block sizes are 512, |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 76 | 1024, 2048 and 4096. Like the root option, this should |
| 77 | never be necessary, as the affs can figure it out itself. |
| 78 | |
Mauro Carvalho Chehab | 76272168 | 2020-02-17 17:11:49 +0100 | [diff] [blame] | 79 | quiet |
| 80 | The file system will not return an error for disallowed |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 81 | mode changes. |
| 82 | |
Mauro Carvalho Chehab | 76272168 | 2020-02-17 17:11:49 +0100 | [diff] [blame] | 83 | verbose |
| 84 | The volume name, file system type and block size will |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 85 | be written to the syslog when the filesystem is mounted. |
| 86 | |
Mauro Carvalho Chehab | 76272168 | 2020-02-17 17:11:49 +0100 | [diff] [blame] | 87 | mufs |
| 88 | The filesystem is really a muFS, also it doesn't |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 89 | identify itself as one. This option is necessary if |
| 90 | the filesystem wasn't formatted as muFS, but is used |
| 91 | as one. |
| 92 | |
Mauro Carvalho Chehab | 76272168 | 2020-02-17 17:11:49 +0100 | [diff] [blame] | 93 | prefix=path |
| 94 | Path will be prefixed to every absolute path name of |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 95 | symbolic links on an AFFS partition. Default = "/". |
| 96 | (See below.) |
| 97 | |
Mauro Carvalho Chehab | 76272168 | 2020-02-17 17:11:49 +0100 | [diff] [blame] | 98 | volume=name |
| 99 | When symbolic links with an absolute path are created |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 100 | on an AFFS partition, name will be prepended as the |
| 101 | volume name. Default = "" (empty string). |
| 102 | (See below.) |
| 103 | |
| 104 | Handling of the Users/Groups and protection flags |
| 105 | ================================================= |
| 106 | |
| 107 | Amiga -> Linux: |
| 108 | |
| 109 | The Amiga protection flags RWEDRWEDHSPARWED are handled as follows: |
| 110 | |
| 111 | - R maps to r for user, group and others. On directories, R implies x. |
| 112 | |
Max Staudt | d3a84a8 | 2020-08-27 17:49:00 +0200 | [diff] [blame] | 113 | - W maps to w. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 114 | |
| 115 | - E maps to x. |
| 116 | |
Max Staudt | d3a84a8 | 2020-08-27 17:49:00 +0200 | [diff] [blame] | 117 | - D is ignored. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 118 | |
Max Staudt | d3a84a8 | 2020-08-27 17:49:00 +0200 | [diff] [blame] | 119 | - H, S and P are always retained and ignored under Linux. |
| 120 | |
| 121 | - A is cleared when a file is written to. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 122 | |
| 123 | User id and group id will be used unless set[gu]id are given as mount |
| 124 | options. Since most of the Amiga file systems are single user systems |
| 125 | they will be owned by root. The root directory (the mount point) of the |
| 126 | Amiga filesystem will be owned by the user who actually mounts the |
| 127 | filesystem (the root directory doesn't have uid/gid fields). |
| 128 | |
| 129 | Linux -> Amiga: |
| 130 | |
| 131 | The Linux rwxrwxrwx file mode is handled as follows: |
| 132 | |
Max Staudt | d3a84a8 | 2020-08-27 17:49:00 +0200 | [diff] [blame] | 133 | - r permission will allow R for user, group and others. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 134 | |
Max Staudt | d3a84a8 | 2020-08-27 17:49:00 +0200 | [diff] [blame] | 135 | - w permission will allow W for user, group and others. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 136 | |
Max Staudt | d3a84a8 | 2020-08-27 17:49:00 +0200 | [diff] [blame] | 137 | - x permission of the user will allow E for plain files. |
| 138 | |
| 139 | - D will be allowed for user, group and others. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 140 | |
| 141 | - All other flags (suid, sgid, ...) are ignored and will |
| 142 | not be retained. |
Mauro Carvalho Chehab | 76272168 | 2020-02-17 17:11:49 +0100 | [diff] [blame] | 143 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 144 | Newly created files and directories will get the user and group ID |
| 145 | of the current user and a mode according to the umask. |
| 146 | |
| 147 | Symbolic links |
| 148 | ============== |
| 149 | |
| 150 | Although the Amiga and Linux file systems resemble each other, there |
| 151 | are some, not always subtle, differences. One of them becomes apparent |
| 152 | with symbolic links. While Linux has a file system with exactly one |
| 153 | root directory, the Amiga has a separate root directory for each |
| 154 | file system (for example, partition, floppy disk, ...). With the Amiga, |
| 155 | these entities are called "volumes". They have symbolic names which |
| 156 | can be used to access them. Thus, symbolic links can point to a |
| 157 | different volume. AFFS turns the volume name into a directory name |
| 158 | and prepends the prefix path (see prefix option) to it. |
| 159 | |
| 160 | Example: |
| 161 | You mount all your Amiga partitions under /amiga/<volume> (where |
| 162 | <volume> is the name of the volume), and you give the option |
| 163 | "prefix=/amiga/" when mounting all your AFFS partitions. (They |
| 164 | might be "User", "WB" and "Graphics", the mount points /amiga/User, |
| 165 | /amiga/WB and /amiga/Graphics). A symbolic link referring to |
| 166 | "User:sc/include/dos/dos.h" will be followed to |
| 167 | "/amiga/User/sc/include/dos/dos.h". |
| 168 | |
| 169 | Examples |
| 170 | ======== |
| 171 | |
Mauro Carvalho Chehab | 76272168 | 2020-02-17 17:11:49 +0100 | [diff] [blame] | 172 | Command line:: |
| 173 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 174 | mount Archive/Amiga/Workbench3.1.adf /mnt -t affs -o loop,verbose |
| 175 | mount /dev/sda3 /Amiga -t affs |
| 176 | |
Mauro Carvalho Chehab | 76272168 | 2020-02-17 17:11:49 +0100 | [diff] [blame] | 177 | /etc/fstab entry:: |
| 178 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 179 | /dev/sdb5 /amiga/Workbench affs noauto,user,exec,verbose 0 0 |
| 180 | |
| 181 | IMPORTANT NOTE |
| 182 | ============== |
| 183 | |
| 184 | If you boot Windows 95 (don't know about 3.x, 98 and NT) while you |
| 185 | have an Amiga harddisk connected to your PC, it will overwrite |
| 186 | the bytes 0x00dc..0x00df of block 0 with garbage, thus invalidating |
| 187 | the Rigid Disk Block. Sheer luck has it that this is an unused |
| 188 | area of the RDB, so only the checksum doesn't match anymore. |
| 189 | Linux will ignore this garbage and recognize the RDB anyway, but |
| 190 | before you connect that drive to your Amiga again, you must |
| 191 | restore or repair your RDB. So please do make a backup copy of it |
| 192 | before booting Windows! |
| 193 | |
| 194 | If the damage is already done, the following should fix the RDB |
| 195 | (where <disk> is the device name). |
Mauro Carvalho Chehab | 76272168 | 2020-02-17 17:11:49 +0100 | [diff] [blame] | 196 | |
| 197 | DO AT YOUR OWN RISK:: |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 198 | |
| 199 | dd if=/dev/<disk> of=rdb.tmp count=1 |
| 200 | cp rdb.tmp rdb.fixed |
| 201 | dd if=/dev/zero of=rdb.fixed bs=1 seek=220 count=4 |
| 202 | dd if=rdb.fixed of=/dev/<disk> |
| 203 | |
| 204 | Bugs, Restrictions, Caveats |
| 205 | =========================== |
| 206 | |
| 207 | Quite a few things may not work as advertised. Not everything is |
| 208 | tested, though several hundred MB have been read and written using |
| 209 | this fs. For a most up-to-date list of bugs please consult |
| 210 | fs/affs/Changes. |
| 211 | |
Fabian Frederick | 8ca5772 | 2014-04-07 15:39:01 -0700 | [diff] [blame] | 212 | By default, filenames are truncated to 30 characters without warning. |
| 213 | 'nofilenametruncate' mount option can change that behavior. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 214 | |
| 215 | Case is ignored by the affs in filename matching, but Linux shells |
Mauro Carvalho Chehab | 76272168 | 2020-02-17 17:11:49 +0100 | [diff] [blame] | 216 | do care about the case. Example (with /wb being an affs mounted fs):: |
| 217 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 218 | rm /wb/WRONGCASE |
Mauro Carvalho Chehab | 76272168 | 2020-02-17 17:11:49 +0100 | [diff] [blame] | 219 | |
| 220 | will remove /mnt/wrongcase, but:: |
| 221 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 222 | rm /wb/WR* |
Mauro Carvalho Chehab | 76272168 | 2020-02-17 17:11:49 +0100 | [diff] [blame] | 223 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 224 | will not since the names are matched by the shell. |
| 225 | |
| 226 | The block allocation is designed for hard disk partitions. If more |
| 227 | than 1 process writes to a (small) diskette, the blocks are allocated |
| 228 | in an ugly way (but the real AFFS doesn't do much better). This |
| 229 | is also true when space gets tight. |
| 230 | |
| 231 | You cannot execute programs on an OFS (Old File System), since the |
| 232 | program files cannot be memory mapped due to the 488 byte blocks. |
| 233 | For the same reason you cannot mount an image on such a filesystem |
| 234 | via the loopback device. |
| 235 | |
| 236 | The bitmap valid flag in the root block may not be accurate when the |
| 237 | system crashes while an affs partition is mounted. There's currently |
| 238 | no way to fix a garbled filesystem without an Amiga (disk validator) |
| 239 | or manually (who would do this?). Maybe later. |
| 240 | |
| 241 | If you mount affs partitions on system startup, you may want to tell |
| 242 | fsck that the fs should not be checked (place a '0' in the sixth field |
| 243 | of /etc/fstab). |
| 244 | |
| 245 | It's not possible to read floppy disks with a normal PC or workstation |
| 246 | due to an incompatibility with the Amiga floppy controller. |
| 247 | |
| 248 | If you are interested in an Amiga Emulator for Linux, look at |
| 249 | |
Mauro Carvalho Chehab | 76272168 | 2020-02-17 17:11:49 +0100 | [diff] [blame] | 250 | http://web.archive.org/web/%2E/http://www.freiburg.linux.de/~uae/ |