Coda es un sistema de ficheros distribuido, esto es, hace que los archivos estén disponibles a un conjunto de ordenadores clientes como si éstos formarán parte de su árbol de directorios, pero manteniendo la autoridad de los datos de los archivos en los servidores. Coda contiene algunas características que le hacen destacar: Soporta funcionamiento desconectado, o sea acceso completo a una parte cacheada del espacio de ficheros en el caso de que ocurran desconexiones voluntarias o involuntarias de la red o del servidor. Cuando los clientes vuelvan a estar conectados, Coda reintegrará los cambios que se han realizado mientras se trabajaba desconectado. Además Coda tiene un sistema de replicación para fallos del servidor, ésto significa que los datos son almacenados y obtenidos en cualquier servidor dentro de un grupo de servidores y Coda continuará funcionando con sólo un subconjunto de esos servidores disponibles. Si aparecen diferencias entre servidores, debidas a particiones de red, Coda resolverá estas diferencias automáticamente en la mayor extensión posible y ayudará a los usuarios a reparar aquéllo que no se puede reparar de manera automática. Coda está organizado de manera muy diferente a NFS o a los directorios compartidos de Windows/Samba. Coda tiene muchas similitudes con AFS y DCE/DFS.
Todo Coda aparece bajo un único directorio /coda (o en un único disco Windows). Coda no tiene la posibilidad de realizar distintas exportaciones o comparticiones como hacen NFS y Samba, que pueden ser montadas individualmente. Bajo /coda los volúmenes (también llamados conjuntos de ficheros) o archivos exportados por todos los servidores (existentes en la celda coda) son visibles. Coda encuentra automáticamente servidores, y cada cliente necesita saber el nombre de un servidor de inicio que le da su información para encontrar el volumen raiz de Coda.
Es un grupo de servidores que comparten un conjunto de bases de datos de configuración. Una celda puede estar formada por un único servidor o cientos s de ellos. Un servidor se designa como el SCM, la máquina que controla el sistema. Se distingue por ser el único servidor que modifica las bases de datos de configuración compartidas por todos los servidores, y propagando esos cambios a los otros servidores. Actualmente un cliente Coda sólo puede pertenecer a una celda. Se espera obtener un mecanismo para Coda de manera que un cliente pueda acceder a archivos en varias celdas.
Los servidores de archivos agrupan los archivos en volúmenes. Un volumen es típicamente más pequeño que una partición, pero más grande que un directorio. Los volúmenes tienen una raiz, y contienen un árbol de directorios con archivos. Cada volumen es montado en algún lugar bajo /coda y forma un subárbol de /coda. Los volúmenes pueden tener partes de "montaje" de otros volúmenes. Un punto de montaje de un volumen no es un punto de montaje al estilo UNIX o una unidad de disco de Windows. Existe un único disco o punto de anclaje UNIX para Coda. Un punto de anclaje Coda contiene suficiente información para que el cliente encuentre los servidores dentro en los cuales almacenan los archivos dentro del volumen. El grupo de servidores que sirve el volumen, se llama el grupo de almacenamiento del volumen.
Un volumen especial es el volumen raiz, el volumen que Coda monta en /coda. Otros volúmenes pueden insertarse dentro del árbol Coda, en el árbol de directorios de Coda usando cfs mkmount. Este comando instala un punto de anclaje de un volumen en el árbol de directorios de Coda; el resultado sería similar a ejecutar mkdir directorio; mount dispositivo directorio en UNIX. Cuando se ejecuta el comando cfs makemount es necesario pasar como parámtros dos argumentos que son el nombre del punto de anclaje y el nombre del volumen a montar. Los puntos de anclaje de Coda son objetos persistentes, no como los puntos de anclaje de UNIX que necesitan remontarse después de una reinicialización de la máquina.
Los servidores no almacenan y exportan volúmenes como un directorio en el sistema de ficheros local como NFS y Samba. Coda necesita muchos más metadatos para soportar la replicación y el funcionamiento desconectado , y tiene un sistema de recuperación complejo que sería difícil de llevar a cabo dentro de un sistema de ficheros local. Los servidores Coda almacenan archivos identificados por un número típicamente todos bajo el directorio /vicepa. Los metadatos (dueños, listas de control de acceso, vectores de versión) y directorios de contenidos se almacenan en un archivo de datos RVM que a menudo podría ser una partición de disco sin sistema de archivos (cruda).
Son las siglas de Recoverable Virtual Memory (Menoria Virtual Recuperable). RVM es una biblioteca transacional que hace que parte de un espacio virtual de direcciones de un proceso persistente en disco almacenen sus cambios a esta memoria de forma atómica para realizar un almacenamiento persistente. Coda utiliza RVM para manipular sus metadatos. Estos datos se almacenan en un archivo de datos de RVM que está mapeado en la memoria desde el arranque. Las modificaciones se realizan en memoria virtual y también son escritos en el archivo de log de la RVM cuando se realiza el commit de la transacción. El archivo de log contiene los datos a los que se ha hecho un commit y que no se han incorporado aún al archivo de datos en el disco.
Es almacenado de un modo bastante parecido. los metadatos en la RVM (normalmente en /usr/coda/DATA) y los archivos en la caché son almacenados por un numero en /usr/coda/venus.cache. El caché en un cliente es persistente. Este caché contiene copias de los archivos del servidor. El caché permite un acceso rápido para el cliente a los datos y acceder a estos aunque el cliente esté desconectado.
Cuando Coda detecta que un servidor está disponible de nuevo, validará los datos del caché antes de antes de usarlos para asegurarse de que los datos de la caché pertenecen a la última versión del fichero. Coda compara las marcas de las versiones del caché asociadas a cada objeto, con las marcas de las versiones mantenidas en el servidor.
Coda maneja autentificación y autorización a través de un testigo. De manera similar (los detalles son muy diferentes) a usar un recurso compartido de windows, Coda requiere que los usuarios hagan login. Durante el proceso de entrada, el cliente obtiene una clave de entrada (o testigo) a cambio de una palabra de paso correcta. El testigo se asocia con una identificación de usuario, actualmente esta identificación de Coda es el UID del usuario que ha realizado el login.
Para conceder permisos el administrador de la caché y los servidores usan el
testigo con su identidad asociada y comparan esto con los
privilegios concedidos a esa identidad en la lista de control de
accesos (ACL). Si no hay un testigo asignado, se
asume que el acceso es anónimo, para los cuales, los permisos son otra vez
concedidos a través de la lista de control de accesos usando
la identidad System:AnyUser.
Como cualquier otro sistema de ficheros, un ordenador habilitado para usar el sistema de ficheros de Coda necesita algún tipo de soporte en el kernel para para acceder a los archivos de Coda. El soporte para Coda del núcleo es mínimo, y trabaja en unión con el administrador de la caché (en el espacio de memoria de usuario) Venus. Los programas usuarios realizarán peticiones al núcleo, que responderá directamente o preguntará al administrador de la caché (Venus) para que le ayude a ofrecer el servicio.
Normalmente el código para el kernel está en un módulo del núcleo. que puede ser cargado en el momento de la inicialización del sistema o cargado dinamicamente cuando el programa Venus se arranca. Venus incluso montará el sistema de ficheros de Coda en /coda.
Para manipular las listas de control de acceso, la caché, los puntos de anclaje de los volúmenes y posiblemente la funcionalidad de red de un cliente en Coda se proveen varias utilidades pequeñas. La más importante es el comando cfs.
Tambien hay un programa, clog, para identificarse ante el servidor de identificación de Coda. El programa codacon le permite monitorizar las operaciones del administrador de la caché y cmon da una lista de los servidores.
El principal programa del servidor de ficheros Coda es codasrv. Es responsable de realizar todas las operaciones, así como del servicio de localización de volúmenes.
El servidor de autentificación auth2 maneja las peticiones de clog de los testigos, y cambia las palabras de paso de au y cpasswd. Sólo el proceso auth2 en el SCM modificará la base de datos de palabras de paso.
Todos los servidores de una celda Coda comparten las bases de datos de configuración de /vice/db y las recupera del SCM cuando se han realizado cambios. El programa updateclnt es responsable de recuperar esos cambios y pregunta al updateserv en la SCM para ver si algo ha cambiado. Algunas veces el SCM necesita una base de datos (no compartida) de otro servidor para actualizar una base de datos compartida. La obtiene a través de un proceso updatesrv en el servidor que usa updatefetch.
Para el servidor existen utilidades para la creación y manipulación de volúmenes. Esas utilidades consisten en shellscripts y el comando volutil. Hay también una herramienta para manipular la protección de las bases de datos.