Alexander Aring da Red Hat, responsável pelos subsistemas IEEE 802.15.4, DLM e flock/fcntl no núcleo do Linux, apresentou na lista de discussão dos desenvolvedores do núcleo um sistema de arquivos especializado chamado DLMPFS. O sistema de arquivos proposto oferece uma camada para bloqueios de arquivos distribuídos, implementada com base no DLM (Gerenciador de Bloqueios Distribuídos) e ramfs. A implementação do DLMPFS está disponível na forma de um conjunto de patches para o núcleo do Linux 6.19.
O DLMPFS permite trabalhar com uma hierarquia de arquivos compartilhada entre vários hosts, criar e excluir arquivos e diretórios, e aplicar ou remover bloqueios em arquivos usando as funções padrão flock() e fcntl(). No entanto, o DLMPFS não permite gravar e ler dados de arquivos, limitando-se apenas a operações de bloqueio. Outra limitação é que é possível determinar o estado do bloqueio apenas conhecendo o caminho completo do arquivo bloqueado (o DLM requer o nome do recurso para determinar o bloqueio).
Com o DLMPFS, é fácil adaptar aplicativos existentes que dependem de bloqueios através da API flock/fcntl para usar bloqueios distribuídos que abrangem vários hosts em um cluster, sem a necessidade de utilizar sistemas de arquivos distribuídos especializados para armazenamento de dados.
O DLMPFS se diferencia de sistemas de arquivos semelhantes existentes como o DLMFS por utilizar a API flock/fcntl em vez da API específica do sistema de arquivos OCFS2. Há planos para adicionar bloqueios distribuídos, conforme especificado pelo POSIX, e a possibilidade de conectar diferentes backends para integração não apenas com o DLM, mas também com outros gerenciadores de bloqueios distribuídos, como o NFS lockd.
Exemplo de uso (no segundo nó o bloqueio no arquivo /mnt/lock será removido após 20 segundos): Nó 1: mount -t dlmpfs -o clname=$CLUSTERNAME none /mnt touch /mnt/lock flock /mnt/lock -c "echo 'acquired'; sleep 20; echo 'released'" Nó 2: mount -t dlmpfs -o clname=$CLUSTERNAME none /mnt touch /mnt/lock flock /mnt/lock -c "echo 'acquired'; sleep 20; echo 'released'"
Fonte: opennet.ru
