CFS : CORBA File System for Linux


O CORBA File System (CFS) é um projeto que visa a construção de um sistema de arquivos distribuídos para o sistema operacional Linux, cuja comunicação entre clientes e servidores é baseada em CORBA.

A intenção do projeto é ter um sistema de arquivos funcional, tanto para o compartilhamento de arquivos numa rede, quanto para a navegação pelo espaço de nomes CORBA como uma árvore de arquivos e diretórios UNIX. Para isso, fez-se necessária a implementação de um módulo no núcleo do Linux, e para a comuniação entre o módulo e um cliente CORBA em espaço de usuário, desenhamos uma arquitetura que foi fortemente baseada nos sistemas de arquivos Coda Distributed File System e no Parallel Virtual File System (PVFS). Para o entendimento do projeto é altamente recomendada a leitura do projeto de arquitetura utilizada, que está disponível em PDF ou HTML.

O resultado do projeto foram 3 componentes distintos: um módulo para o núcleo do Linux, um daemon para fazer a tradução das requisições do núcleo para requisições CORBA e vice versa, e o servidor CORBA em espaço de usuário.

A princípio, o uso do espaço de nomes CORBA permite uma flexibilidade grande ao sistema. Os módulos não precisam conhecer previamente o local de origem dos arquivos. O daemon no cliente, em espaço de usuário, só precisa encontrar um serviço de nomes existente, e utilizá-lo para encontrar os nomes desejados, que podem ser contextos, objetos variados, ou objetos especifcamente exportados pelo servidor, que representam um diretório ou arquivo remotamente disponibilizado.

Um recurso interessante, conüente da implementação do daemon, é a possibilidade de navegação num espaço de nomes, sem que os objetos ali disponíveis sejam conhecidos a priori.

Para mais detalhes sobre o funcionamento interno do sistema, veja a descrição do interior do CFS.

Também contamos os problemas e decisões no processo de implementação da proposta do CFS.


Download

Antes da instalação é necessário ter algumas aplicações e bibliotecas já instaladas: O código do módulo, daemon, e servidor: CFS.


Instalação

O arquivo cfs.tar.bz2 contém os seguintes diretórios e arquivos importantes para a compilação e instalação do sistema:

corba/
linux.uml/
patch-cfs-linux-2.4.18.bz2


Primeiramente, extraia o conteúdo do cfs.tar.bz2:

tar jxvf cfs.tar.bz2


Para compilar o servidor e daemon do CFS, compile o código do diretório corba:

cd CFS/corba/
make

Para compilar o módulo, você tem duas opções. Pode copiar os arquivos em linux.uml para a árvore fonte do núcleo do linux. Ou, se você não está familiarizado com as localizações dos arquivos, pode aplicar o patch patch-cfs-linux-2.4.18.bz2:

cd /usr/src/linux/
bunzip2
patch-cfs-linux-2.4.18.bz2 | patch -p1

Depois disso, proceda com a configuração e compilação do núcleo. Configure da maneira preferida (make menuconfig, por exemplo), e não esqueça de selecionar o CFS (no grupo network file system - caso não apareça a opção CFS, veja se a opção "Prompt for development and/or incomplete code/drivers" está habilitada logo no primeiro grupo de opções "Code maturity level options"). Você pode compilar o CFS como módulo ou internamente ao núcleo. Sugerimos a compilação como módulo. Prossiga então com a seqüência make dep && make bzImage && make modules && make modules_install.

Você pode agora reiniciar seu sistema (no caso de compilar internamente ao núcleo), ou tentar instalar o módulo:

modprobe cfs

O módulo só é necessário na máquina cliente, que "montará" o sistema de arquivos CFS.

Uso

Antes de mais nada, deve-se iniciar um servidor de nomes, como o NSD. Para iniciar o NSD, você pode usar o seguinte comando:

nsd -ORBIIOPAddr inet:`uname -n`:12456 &

Na máquina que hospedará o serviço de nomes. Vamos nos referenciar a essa máquina como NSDHOST para o resto da documentação. No diretório CFS/corba/ há um comando cfs-nsd, que executa o comando acima.

Agora devemos iniciar os servidores. Em cada máquina que um servidor rodar, é necessário configurar quais diretórios serão exportados para serem usados remotamente. Isso pode ser especificado pelo arquivo de configurações CFS/etc/cfs.exports. Cada linha desse arquivo possui o seguinte formato:

local remote options

Onde local é o diretório local a ser exportado, remote é o nome que os clientes usarão para encontrá-lo no espaço de nomes, e options são opções específicas (não implementado). Em cada máquina, você deve iniciar o servidor com o seguinte comando (no diretório CFS/corba/):

./cfs-server start NSDHOST

Esse comando iniciará o servidor e redirecionará sua saída para o arquivo ./var/log/ServerCFS.log. Você pode também iniciar o servidor diretament com o com comando:

./ServerCFS -ORBInitRef NameService=corbaloc::NSDHOST:12456/NameService

Já nas máquina que serão clientes, isto é, que montarão o CFS, deve-se instalar o módulo no kernel (se não instalado), iniciar o daemon, e montar o sistema de arquivos no ponto de montagem (aqui exemplificado como /mnt):

modprobe cfs
./cfs-daemon start NSDHOST
mount -t cfs none /mnt

O daemon também pode ser iniciado pelo comando direto:

./CFSd -ORBInitRef NameService=corbaloc::NSDHOST:12456/NameService

Observe que o dispositivo de montagem é none, já que o daemon é responsável por encontrar o serviço de nomes. Ao acessar o diretório /mnt, poderá navegar pelo espaço de nomes. Contextos são listados como diretórios. Objetos quaisquer são como arquivos apenas para leitura (cujo conteúdo mostrado pelo daemon é a IOR do objeto). E objetos registrados pelos servidores (ServerCFS) dão acesso aos arquivos remotos do diretório exportado.

A criação de diretórios dentro dos contextos resulta na criação de novos contextos. A criação de arquivos resulta na criação de um arquivo virtual, que reside na memória do daemon. No momento, esse objeto não é acessível por outros clientes. Todas operações num nome que é um objeto representando o diretório remoto, ocorrem como no sistema de arquivos comum do Linux, mas no servidor remoto.


Autores:

  • Livio Baldini Soares
  • Márcio Rodrigo de Freitas Carneiro
  • Roberto Pires de Carvalho


Last modified: Tue Jul 9 23:32:52 BRT 2002