Sistema de arquivos que suporta nomes de diretórios duplicados

0

Existe um sistema de arquivos que suporta nomes de diretórios duplicados.

Idealmente, para distinguir entre nomes de diretórios, você usaria índices (ordem de diretórios de arquivos).

Este está relacionado.

    
por William 03.09.2015 / 22:39

2 respostas

3

Não, não há chamada do sistema Unix para abrir um diretório ou arquivo por inode, em vez de por nome. O conceito de posição de uma entrada de diretório na lista de entradas de diretório também não existe.

Se você acha que quer isso, provavelmente tomou um rumo errado em algum lugar no início de seu processo de design.

Se houvesse dois diretórios chamados a , qual deles seria a/file ?

As entradas de diretório são um mapa não ordenado de nomes para inodes , com nomes como as chaves. Chaves duplicadas não são suportadas e não há como criá-las. Qualquer tentativa de fazer qualquer coisa com um nome que já exista apenas referenciará a entrada de diretório existente.

Editar manualmente as estruturas de dados em disco (ou um bug do kernel ou erro de hardware) poderia produzir um diretório com o mesmo nome duas vezes (talvez até apontando para inodes diferentes), mas esse é um problema que fsck verificaria !

Digamos que você execute cat /home/peter/foo.txt . cat não lê o diretório, apenas open("/home/peter/foo.txt", O_RDONLY) = -1 ENOENT (No such file or directory) . ( strace cat foo.txt para ver.)

Pode ser possível usar FUSE para apresentar um "sistema de arquivos" que interpretou caracteres especiais em nomes de arquivos de alguma maneira estranha e retornou entradas de diretório em um pedido que tinha algum significado. Se você está certo em colocar limites para quais caracteres podem aparecer em um nome de arquivo, você pode dar um significado especial a alguns caracteres. Portanto, /mnt/database-fuse-mount/some_dir/{2} pode se referir à segunda entrada de diretório. Ou .../name{2} pode se referir à segunda entrada chamada name . Eu não espero que alguém já tenha implementado isso, a menos que haja um módulo FUSE para montar tabelas de banco de dados como diretórios com um arquivo para cada registro. Com o nome do arquivo como chave primária? IDK, realmente não faz sentido, porque um banco de dados SQL pode ser consultado por qualquer um dos seus campos.

    
por 03.09.2015 / 22:50
1

Não é um sistema de arquivos em disco, mas qualquer banco de dados faria essencialmente o que você deseja fazer. É uma camada de abstração e não é visível como um conjunto de diretórios e arquivos no gerenciador de arquivos, mas você pode escrever um gerenciador de arquivos básico para você mesmo se realmente precisar de um.

Com um banco de dados, você pode usar valores-chave para diferenciar entre "locais", os campos de nomes podem ser duplicados quantas vezes quiser e você pode acessar dados por meio de qeuries que procuram combinações de campos correspondentes em um tabela.

    
por 03.09.2015 / 23:20