Coda File System é um sistema de arquivos distribuídos desenvolvido na Universidade Carnegie Mellon desde 1987 sob a direção de Mahadev Satyanarayanan. Foi baseado em uma versão mais antiga do Andrew File System (AFS-2).
O diferencial do Coda FS com relação aos outros sistemas de arquivos distribuídos é o uso do cache local, que permite o acesso aos arquivos mesmo estando offline e diminiu o uso de banda. O Coda usa um registro de mudanças que permite a atualização dos arquivos modificados, mantendo a integridade das mudanças quando dois usuários alteram o mesmo arquivo.
Um sistema de arquivos distribuídos é um sistema no qual os arquivos estão espalhados em vários hardwares e estão todos interconectados por uma rede.
A conexão entre os hardwares também é necessária para que todos os arquivos sejam atualizados quando houver modificação em algum deles. O compartilhamento disponibiliza réplicas identicas de um mesmo arquivo em vários servidores, garantindo a disponibilidade do mesmo.
Para que um sistema de armazenamento seja considerado um sistema de arquivos distribuidos ele deve garantir os seguintes itens:
O Coda File System funciona baseado na replicação de arquivos. Os servidores Coda armazenam volumes de dados, cada volume desse é replicado em outros conjuntos de servidores, estes são chamados de VSG (Volume Server Group). Para cada usuário Coda, existe um VSG com réplicas de seus volumes, estes são chamados de AVSG.
Os volumes VSG e AVSG são conectados por rede e sincronizados, ou seja, as alterações feitas em um servidor serão propagadas para todos os servidores. Porém, esta atualização dos dados não é feita instantaneamente à modificação. Apenas quando os dados de AVSG são requisitados que o sistema gera uma busca em todos os outros AVSG's disponíveis, verificando a existência de modificações. Caso existam, os dados são atualizados e então disponibilizados ao usuário que fez a requisição.
A principal vantagem do Coda é que ele disponibiliza o acesso aos arquivos mesmo quando o usuário esta offline, diferentemente do Andrew File System, seu predecessor. Para isso, Coda usa uma espécie de cache local onde armazena os arquivos mais importantes do usuário, permitindo que sejam feitas alterações nos arquivos quando estiver offline. Após a reconexão da rede, o cliente se move para o estado de reintegração, onde envia atualizações registradas aos servidores. O cache local também garante segurança ao usuário caso ocorra uma interrupção na conexão com o servidor, evitando a perda de dados.
Outra característica importante do coda é que ele armazena no cache do usuário cópias dos arquivos, ou partes dos arquivos mais usados. Graças a esse recurso não é necessário que todos os arquivos sejam carregados da rede sempre que requisitados, reduzindo o consumo de banda e o tempo de inicialização do sistema.
Ao requisitar um arquivo, o Coda solicitará a versão de todos os servidores disponíveis. Se detectar que algum dos servidores não está atualizado, ele inicia um processo de atualização do servidor. O próprio Coda tem ferramentas que resolvem conflitos nos arquivos durante a atualização do servidor. Porém, caso o mesmo arquivo tenha sido alterado por dois usuários diferentes, o sistema Coda não consegue resolver os conflitos de atualização, sendo necessário que um dos usuários resolva manualmente os conflitos existentes.
Devido ao sistema Coda disponibilizar o acesso e modificação dos dados offline e sua posterior atualização aos servidores, ele foi amplamente explorado no uso com dispositivos móveis.