So how does netatalk approach the problem?
-Netatalk has 4 different methods of allocating IDs: last, hash, mtab or cnid.
+!!! The following is outdated, please refer to the Manual instead !!!
+
+Netatalk has two different methods of allocating IDs: last and cnid.
DID = last.
the mac features which don't rely heavily on IDs it works fine. If you try
to use IDs much, things break.
-DID = hash.
-
-This uses inodes to identify files. An inode is a unique number which
-is the equivalent to ID on ext2 (and 3) file systems. However, an inode is
-significanlty bigger than an ID, so the number needs to be hashed to make it
-smaller. Unfortunately this means it is nolonger unique, so you can get 2
-files with the same ID.
-
-DID = mtab.
-
-This is similar to hash, but better. This is not available on all operating
-systems. See README.mtab for more details.
-
DID = cnid.
-This uses a Berkeley 3 database to store and maintain a directory of IDs
-similar to that of a catalogue file on a mac. Consequently it is the most
-reliable method. Unfortunately there seem to be heavy multi user problems
-that lead to database corruption. These are being worked on, but cnid remains
-the safest and most reliable DID scheme. See README.cnid for more details.
-
-
+The CNID scheme in Netatalk attempts to assign unique IDs to each file and
+directory, then keep those IDs persistent across mounts of the volume. This
+way, cross-volume aliases will work, and users are less likely to encounter
+duplicate CNID errors. Prior to Netatalk 1.6.0, the CNID calculation
+scheme was not persistent, and IDs were assigned based on the UNIX device and
+inode number of a given file or directory (see DID = last above). This was
+fine for the most part, but due to limitations, not all available CNIDs could
+be used. As well, these IDs could change independently from Netatalk, and
+thus were not persistent. As of Netatalk 1.6.0, the CNID scheme is now the
+default. On top of that, Netatalk uses the Concurrent Datastore method to
+avoid the need for database locking and transactions.
+
+As stated above, CNID requires Berkeley DB. Currently, Netatalk supports
+BDB 4.1.25 and 4.2.52 The recommended version is 4.2.52 as that is the version
+on which most testing has been done.
+
+CNID has seen many contributors over the years. It was conceived by
+Adrian Sun <asun@zoology.washington.edu>. His developer notes can be found
+libatalk/cnid/README file. It was later picked up and modernized by Uwe Hees
+<uwe.hees@rz-online.de>. Then, Joe Marcus Clarke <marcus@marcuscom.com>
+started fixing bugs and adding additional features. The Concurrent
+Datastore support was subsequently added by Dan Wilga <dwilga@mtholyoke.edu>.
+The CNID code is currently maintained by Joe Marcus Clarke.