Stephen and I have been planning to add an 128-bit universally unique ID
(UUID) in the ext2 superblock to help automate this process. It's also
useful for his "supermount" for detecting when a removeable disk has
really been changed.
How do you generally a globally unique UUID? Simple. Generate a 128
bit UUID as follows:
32 bits tv_sec of volume creation
32 bits tv_usec of volume creation
32 bits IP address of host which created the volume,
or a random number if not available
32 bits random number
The basic idea of globally unique ID's is stolen from the DCE RPC, and its
predecessor, the Apollo RPC. It's a nice way of picking a universally
unqiue ID in a decentralized manner; while there's a chance you might
have a collision, it's so small as to be virtually non-existent.
Excellent! And even before UUID's, Apollos used 64 bit UIDs internally for
virtually everything. Essentially all interesting objects, be they ephemeral
or persistent, were identified by their UID. If I recall correctly, the
original UID had 20 or so bits of node ID (guaranteed unique), 40 bits of
timestamp, and another 4 bits to avoid collisions. They generalized this to
UUIDs somewhat later when Apollo RPC was created. Before Apollo made serious
efforts at Unix compatibility in Domain/OS, it was even possible to have an
uncatalogued file system object that could only be accessed by its UID.
Leonard