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