¿Por qué se necesitaba la opción que no distingue entre mayúsculas y minúsculas en ext4?

¿Por qué se necesitaba la opción que no distingue entre mayúsculas y minúsculas en ext4?

Estaba leyendo sobre la nota del parche Linux 5.2 lanzada el año pasado, noté que comenzaron asoporte opcional para nombres que no distinguen entre mayúsculas y minúsculas en el sistema de archivos ext4.

Entonces... lo que me pregunto es la razón por la cual se necesitaba en el kernel la opción que no distingue entre mayúsculas y minúsculas (incluido el uso de mayúsculas y minúsculas y la normalización). Podría descubrirlootro articuloescrito por Krisman, quien escribió el código del kernel para soportar el sistema de archivos de plegado de cajas, pero case-insensitive file system allows us to resolve important bottlenecks for applications being ported from other operating systemsno me llega al corazón y no puedo entender cómo el proceso de normalización y plegado de cajas nos permite optimizar nuestro almacenamiento en disco.

¡Aprecio mucho tu ayuda!

Respuesta1

El sistema de archivos que no distingue entre mayúsculas y minúsculas nos permite resolver cuellos de botella importantes para las aplicaciones que se trasladan desde otros sistemas operativos.

No me llega al corazón y no puedo entender cómo el proceso de normalización y casefolding nos permite optimizar nuestro almacenamiento en disco.

Vino, Samba y Androidtenerpara proporcionar una semántica del sistema de archivos que no distinga entre mayúsculas y minúsculas. Si el sistema de archivos subyacente distingue entre mayúsculas y minúsculas, cada vez que falla una búsqueda que distingue entre mayúsculas y minúsculas, Wine et al. tiene que escanear cada directorio para demostrar que no hay coincidencias que no distingan entre mayúsculas y minúsculas (por ejemplo, si la búsqueda /foo/bar/readme.txtfalla, debe realizar una lista completa de directorios y una comparación entre mayúsculas y minúsculas de todos los archivos foo/bar/*y todos los directorios en foo/*y /*).

Hay algunos problemas con esto:

  • Puede volverse muy lento con rutas profundamente anidadas (que pueden generarcientos de llamadas FS) o directorios con decenas de miles de archivos (es deciralmacenar copias de seguridad incrementales en SMB).
  • Estos controles introducen condiciones de carrera.
  • Es fundamentalmente incorrecto: si ambos readme.txty README.txtexisten pero una aplicación solicita README.TXT, el archivo que se devuelve no está definido.

Android llegó al extremo de emular la distinción entre mayúsculas y minúsculas usando FUSE/wrapfs y luego el kernelTarjeta SDFS. Sin embargo, SDCardFS simplemente aceleró todo al trasladar el proceso al espacio de la perrera†. Todavía tenía que recorrer el sistema de archivos (y por lo tanto estaba vinculado a IO), introdujo condiciones de carrera y era fundamentalmente incorrecto. Por lo tanto, Google financió† el desarrollo de la distinción nativa entre mayúsculas y minúsculas por directorio en F2FS y desde entonces ha quedado obsoleto.Tarjeta SDFS.

Ha habido múltiples intentos en el pasado para habilitar búsquedas que no distingan entre mayúsculas y minúsculas a través de VFS. El intento más reciente en 2018 permitió montar unavista que no distingue entre mayúsculas y minúsculas del sistema de archivos. Ted Tso citó específicamente los problemas con wrapfs para agregar esta funcionalidad, ya que al menos sería más rápido y (creo) libre de condiciones de carrera. Sin embargo, todavía no era válido (la solicitud README.TXTpodría devolver readme.txto README.txt). Esto fue rechazado a favor de simplemente agregar soporte por directorio para no distinguir entre mayúsculas y minúsculas y es poco probable que alguna vez llegue a VFS††.

Además, los usuarios esperan que no se distingan entre mayúsculas y minúsculas, por lo que cualquier sistema operativo orientado al consumidor debe ofrecerla. Unix no podía admitirlo de forma nativa porque Unicode no existía y las cadenas eran sólo bolsas de bytes. Hay muchas críticas válidas sobre cómo se manejó el plegado de casos.en el pasado, pero Unicode proporciona unainmutable función de plegadoeso funciona para todos menosun solo lugar(Turco, y aun así son solo dos puntos de código). Y elárbol b del sistema de archivoses el único lugar razonable para implementar este comportamiento.

AFAICT
††Le envié un correo electrónico a Krisman, el autor de las búsquedas que no distinguen entre mayúsculas y minúsculas basadas en VFS y del soporte que no distingue entre mayúsculas y minúsculas por directorio en EXT4 y F2FS.

Respuesta2

Otros sistemas operativos tienen sistemas de archivos que no distinguen entre mayúsculas y minúsculas.

Como ejemplo: MacOS permite distinguir entre mayúsculas y minúsculas (por defecto) o distinguir entre mayúsculas y minúsculas. Adobe Photoshop y Adobe Lightroom no funcionan bien con el sistema de archivos que distingue entre mayúsculas y minúsculas. Esto significa que dentro de los programas de Adobe, probablemente haya rutas codificadas, escritas de diferentes maneras (tal vez "Documentos" y "documentos" en las diferentes bibliotecas, o simplemente en algún momento se aplican algunos filtros (por ejemplo, minúsculas y eliminación de espacios, que pueden diferir de la ruta). ruta de los datos). A nadie le importó, porque simplemente funciona.

Entonces, si ahora desea portar un programa creado para algún sistema operativo propietario común de nuestra época, debe arreglar todas las rutas, para que siempre tenga un uso consistente de los nombres de archivos, o prefiere tener un sistema de archivos que maneje estos para ti.

Adobe no pudo hacerlo para MacOS, así que espere que las cosas sean mucho más difíciles (y costosas) para otros proveedores. Verhttps://helpx.adobe.com/creative-suite/kb/error-case-SENSITIVE-DRIVES-supported.html

Respuesta3

No conozco una sola razón para tener un FS que distinga entre mayúsculas y minúsculas: lo único que hace es confundir completamente al usuario. Los desarrolladores de Microsoft lo entendieron desde el principio y no se preocuparon por un concepto roto. Ahora, treinta años después, algunos desarrolladores de Linux se han dado cuenta de que la distinción entre mayúsculas y minúsculas es más segura y lógica y finalmente la han implementado.

¿Por qué los primeros sistemas de archivos Unix distinguían entre mayúsculas y minúsculas? Podría deberse al hecho de que es más fácil para la CPU trabajar con ellos. No necesita funciones adicionales para consumir ciclos de CPU para verificar si ya existe un archivo con un nombre similar aunque con una capitalización diferente (también hay alfabetos distintos del latín/inglés donde implementar la insensibilidad a mayúsculas y minúsculas no es trivial). Hoy en día, con las CPU modernas y súper rápidas no es gran cosa.

información relacionada