Pregunta

Necesito crear cientos de miles de enlaces temporales duros o simbólicos que se eliminarán poco después de la creación. Para mis propósitos, ambos tipos de enlaces funcionarán (es decir, el objetivo no es un directorio y siempre existe en el mismo sistema de archivos)

Según tengo entendido, los enlaces simbólicos crean un archivo pequeño que contiene la ruta al archivo original. Mientras que un enlace duro crea una referencia a los datos en el mismo inodo. Entonces, tal vez si voy a crear/eliminar miles de estos enlaces, ¿es mejor crear y eliminar miles de archivos pequeños (enlaces simbólicos) o miles de estas referencias (enlaces duros)? ¿Parece que uno grava el disco duro (tal vez la fragmentación), mientras que el otro podría gravar el sistema de archivos en sí? ¿Dónde se almacenan las referencias de inodo? ¿Me arriesgo a corromper el sistema de archivos haciendo tantos enlaces duros? ¿Qué pasa con la velocidad?

¡Gracias por tu experiencia!

Este es un trabajo para poder usar FFMPEG para codificar una película de un subconjunto arbitrario de imágenes de un directorio. Dado que FFMPEG requiere que los archivos se llamen correctamente (por ejemplo, marco%04d.jpg), me di cuenta de que puedo crear enlaces duros/SYM al subconjunto de archivos y simplemente nombrar los enlaces de manera apropiada. Esto evita cambiar el nombre de los archivos originales y tener que copiar los datos. Funciona muy bien, pero requiere crear y eliminar muchos miles de enlaces, repetidamente.

Una especie de abordar este problema también, creo:Convertir la secuencia de imágenes usando FFMPEG

¿Fue útil?

Solución

Si esta actividad rompe su sistema de archivos, entonces su sistema de archivos tiene la culpa, no usted. Los sistemas de archivos son generalmente bastante confiables, así que no se preocupe por eso.

Ambas opciones requieren agregar una entrada en el directorio. El enlace simbólico también requiere crear un archivo. Cuando accede al archivo, el enlace duro salta directamente al contenido, mientras accede a un enlace simbólico requiere encontrar el archivo de enlace simbólico, leerlo, encontrar el directorio con el contenido, encontrar dónde está el contenido y luego acceder a eso. Por lo tanto, los enlaces simbólicos son más trabajo para el sistema de archivos.

Pero la diferencia es minuciosa en comparación con el trabajo de leer los datos en los archivos. Por lo tanto, no me preocuparía por eso, y simplemente ir con lo que mejor le brinde la semántica que desee.

Otros consejos

Dado que no está tratando de crear cientos de miles en el mismo archivo, los enlaces duros tienen un rendimiento marginalmente mejor.

Sin embargo, los enlaces simbólicos en /TMP IF /TMP IS TMPFS aún tienen un mejor rendimiento.

Ah, y los enlaces simbólicos son demasiado pequeños para causar problemas de fragmentación.

Ambas opciones requieren la adición de una entrada de archivo en el inodo del directorio, la estructura del directorio puede crecer asignando nuevos bloques.

Pero un enlace simbólico requiere la asignación de un inodo y el sistema de archivos tiene un límite para inodos. Su cientos de miles Los enlaces simbólicos pueden alcanzar ese límite y puede obtener el "No hay suficiente espacio para el archivo" Mensaje de error incluso con Gigabytes gratis.

De manera predeterminada, la herramienta de creación del sistema de archivos elige el número máximo de inodos de acuerdo con el tamaño de la partición física. Por ejemplo, para Linux ext2/3/4, mkfs.ext3 usa un bytes-per-inode relación que puedes encontrar en tu /etc/mke2fs.conf.

Para un sistema de archivos existente, aquí hay un comando para obtener información sobre inodes:

# dumpe2fs /dev/sda1 | grep -i inode | less

Inode count:              979200
Free inodes:              742304
Inodes per group:         16320
Inode blocks per group:   510
First inode:              11
Inode size:               128
Journal inode:            8
First orphan inode:       441066
Journal backup:           inode blocks

Como conclusión, deberías prefiere enlaces duros Principalmente para el consumo de recursos en el disco y en la memoria (estructuras VFS en cachés).

Otro consejo: no cree demasiados archivos en el mismo directorio, 2'000 archivos es un límite razonable para evitar problemas de rendimiento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top