Por que a opção que não diferencia maiúsculas de minúsculas no ext4 era necessária?

Por que a opção que não diferencia maiúsculas de minúsculas no ext4 era necessária?

Eu estava lendo sobre a nota do patch do Linux 5.2 lançada no ano passado, percebi que eles começaram asuporte opcional para nomes que não diferenciam maiúsculas de minúsculas no sistema de arquivos ext4.

Então... o que estou me perguntando é a razão pela qual a opção que não diferencia maiúsculas de minúsculas (incluindo casefold e normalização) era necessária no kernel. eu poderia descobriroutro artigoescrito por Krisman, que escreveu o código do kernel para suportar o sistema de arquivos case-folding, mas case-insensitive file system allows us to resolve important bottlenecks for applications being ported from other operating systemsnão chega ao meu coração e não consigo entender como o processo de normalização e casefolding nos permite otimizar nosso armazenamento em disco.

Agradeço muito sua ajuda!

Responder1

O sistema de arquivos que não diferencia maiúsculas de minúsculas nos permite resolver gargalos importantes para aplicativos que estão sendo portados de outros sistemas operacionais

não chega ao meu coração e não consigo entender como o processo de normalização e casefolding nos permite otimizar nosso armazenamento em disco.

Vinho, Samba e Androidterpara fornecer semântica de sistema de arquivos que não diferencia maiúsculas de minúsculas. Se o sistema de arquivos subjacente diferencia maiúsculas de minúsculas, toda vez que uma pesquisa com distinção entre maiúsculas e minúsculas falha, Wine et al. tem que varrer cada diretório para provar que não há correspondências que não diferenciam maiúsculas de minúsculas (por exemplo, se a pesquisa /foo/bar/readme.txtfalhar, você terá que realizar uma listagem completa de diretórios e uma comparação entre maiúsculas e minúsculas de todos os arquivos foo/bar/*e todos os diretórios em foo/*, e /*).

Existem alguns problemas com isso:

  • Pode ficar muito lento com caminhos profundamente aninhados (o que pode gerarcentenas de chamadas FS) ou diretórios com dezenas de milhares de arquivos (ou seja,armazenando backups incrementais em SMB).
  • Essas verificações introduzem condições de corrida.
  • É fundamentalmente incorreto: se ambos readme.txtexistirem README.txt, mas um aplicativo solicitar README.TXT, o arquivo retornado será indefinido.

O Android chegou ao ponto de emular a insensibilidade a maiúsculas e minúsculas usando FUSE/wrapfs e depois o in-kernelCartão SDCFS. No entanto, o SDCardFS tornou tudo mais rápido ao mover o processo para o espaço do canil†. Ele ainda precisava percorrer o sistema de arquivos (e, portanto, estava vinculado ao IO), introduzia condições de corrida e era fundamentalmente incorreto. É por isso que o Google financiou† o desenvolvimento de insensibilidade nativa por diretório a maiúsculas e minúsculas no F2FS e desde então foi descontinuadoCartão SDCFS.

Houve várias tentativas no passado para permitir pesquisas sem distinção entre maiúsculas e minúsculas via VFS. A tentativa mais recente em 2018 permitiu montar umvisão sem distinção entre maiúsculas e minúsculas do sistema de arquivos. Ted Tso citou especificamente os problemas com wrapfs para adicionar essa funcionalidade, pois seria pelo menos mais rápido e (acredito) livre de condições de corrida. No entanto, ainda não era sólido (o pedido README.TXTpoderia retornar readme.txtou README.txt). Isso foi rejeitado em favor de apenas adicionar suporte por diretório para insensibilidade a maiúsculas e minúsculas e é improvável que chegue ao VFS††.

Além disso, os usuários esperam que não haja distinção entre maiúsculas e minúsculas, portanto, qualquer sistema operacional voltado para o consumidor deve fornecê-la. O Unix não podia suportá-lo nativamente porque o Unicode não existia e as strings eram apenas sacos de bytes. Existem muitas críticas válidas sobre como o dobramento de casos foi tratadono passado, mas o Unicode fornece umaimutável função case-foldisso funciona para todos, menosum único local(Turco, e mesmo assim são apenas dois pontos de código). E aárvore b do sistema de arquivosé o único lugar razoável para implementar esse comportamento.

AFAITO
††Enviei um e-mail para Krisman, autor das pesquisas que não diferenciam maiúsculas de minúsculas baseadas em VFS e do suporte que não diferencia maiúsculas de minúsculas por diretório em EXT4 e F2FS.

Responder2

Outros sistemas operacionais possuem sistemas de arquivos que não diferenciam maiúsculas de minúsculas.

Por exemplo: MacOS permite distinção entre maiúsculas e minúsculas (como padrão) ou distinção entre maiúsculas e minúsculas. Adobe Photoshop e Adobe Lightroom não funcionam bem com sistemas de arquivos que diferenciam maiúsculas de minúsculas. Isso significa que dentro dos programas Adobe, provavelmente existem caminhos codificados, escritos de maneiras diferentes (talvez "Documentos" e "documentos" nas diferentes bibliotecas, ou apenas em algum momento alguns filtros são aplicados (por exemplo, letras minúsculas e remoção de espaços, que podem diferir do caminho dos dados). Ninguém se importou, porque simplesmente funciona.

Então, se agora você deseja portar programas feitos para algum sistema operacional proprietário comum de nossa época, ou você deve corrigir todos os caminhos, para que tenha sempre um uso consistente de casos de nomes de arquivos, ou prefere ter um sistema de arquivos que lide com estes para você.

A Adobe não poderia fazer isso para MacOS, então espere que as coisas sejam muito mais difíceis (e caras) para outros fornecedores. Verhttps://helpx.adobe.com/creative-suite/kb/error-case-sensitive-drives-supported.html

Responder3

Não conheço um único motivo para ter um FS que diferencia maiúsculas de minúsculas: a única coisa que ele faz é confundir totalmente o usuário. Os desenvolvedores da Microsoft entenderam isso desde o início e não se preocuparam com um conceito quebrado. Agora, trinta anos depois, alguns desenvolvedores de Linux perceberam que a insensibilidade a maiúsculas e minúsculas é mais segura e mais lógica e finalmente a implementaram.

Por que os primeiros sistemas de arquivos Unix diferenciavam maiúsculas de minúsculas? Pode ser devido ao fato de ser mais fácil para a CPU trabalhar com eles. Você não precisa de funções adicionais para consumir ciclos de CPU para verificar se já existe um arquivo com um nome semelhante, embora com letras maiúsculas diferentes (também existem outros alfabetos além do latim/inglês, onde a implementação da insensibilidade a maiúsculas e minúsculas não é trivial). Hoje em dia, com CPUs modernas e super rápidas, isso não é grande coisa.

informação relacionada