Me pregunto si almacenar la información sobre los archivos en inodos en lugar de directamente en el directorio vale la pena la sobrecarga adicional. Puede estar bien que esté sobrestimando los gastos generales o pasando por alto algo importante, pero es por eso que pregunto.
Veo que algo así como "inodos" es necesario para los enlaces duros, pero en caso de que la sobrecarga sea realmente tan grande como creo, me pregunto si alguna de las razones lo justifica:
- usar enlaces duros para las copias de seguridad es inteligente, pero la eficiencia de las copias de seguridad no es lo suficientemente importante en comparación con la eficiencia de las operaciones normales
- no tener penalización por velocidad ni tamaño para los enlaces duros puede ser realmente importante, ya que esta ventaja solo tiene para unos pocos archivos haciendo uso de enlaces duros mientras que el acceso a todos los archivos sufre los gastos generales
- guardando algo de espacio para un par de binarios con el mismo nombre como
bunzip2
ybcat
es insignificante
No estoy diciendo que los inodos/vínculos duros sean malos o inútiles, pero ¿pueden justificar el costo de la indirección adicional (el almacenamiento en caché seguramente ayuda mucho, pero no es una panacea)?
Respuesta aceptada:
Los enlaces duros no vienen al caso. No son la razón para tener inodos. Son un subproducto:básicamente, cualquier diseño razonable de sistema de archivos similar a Unix (e incluso NTFS está lo suficientemente cerca en este punto) tiene enlaces duros de forma gratuita.
El inodo es donde se almacenan todos los metadatos de un archivo:su hora de modificación, sus permisos, etc. También es donde se almacena la ubicación de los datos del archivo en el disco. Estos datos deben almacenarse en algún lugar.
Almacenar los datos del inodo dentro del directorio conlleva su propia sobrecarga. Hace que el directorio sea más grande, por lo que la obtención de una lista de directorios es más lenta. Guarda una búsqueda para cada acceso a un archivo, pero cada recorrido de directorio (de los cuales se necesitan varios para acceder a un archivo, uno por directorio en la ruta del archivo) cuesta un poco más. Lo que es más importante, hace que sea mucho más difícil mover un archivo de un directorio a otro:en lugar de mover solo un puntero al inodo, debe mover todos los metadatos.
Los sistemas Unix siempre le permiten cambiar el nombre o eliminar un archivo, incluso si un proceso lo tiene abierto. (En algunas variantes de Unix, haga esto casi siempre). Esta es una propiedad muy importante en la práctica:significa que una aplicación no puede "secuestrar" un archivo. Cambiar el nombre o eliminar el archivo no afecta a la aplicación, puede continuar leyendo y escribiendo en el archivo. Si se elimina el archivo, los datos permanecen hasta que ningún proceso tenga abierto el archivo. Esto se facilita asociando el proceso con el inodo. El proceso no se puede asociar con el nombre del archivo ya que este puede cambiar o incluso desaparecer en cualquier momento.
Relacionado:¿Cuál es una buena herramienta para visualizar trabajos del Agente SQL?