{"id":36999,"date":"2019-10-31T22:15:13","date_gmt":"2019-10-31T19:15:13","guid":{"rendered":"https:\/\/prohoster.info\/blog\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov\/"},"modified":"2019-10-31T22:15:13","modified_gmt":"2019-10-31T19:15:13","slug":"haki-pri-rabote-s-bolshim-chislom-melkih-fajlov","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov","title":{"rendered":"Trucos para trabajar con un gran n\u00famero de archivos peque\u00f1os","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>La idea del art\u00edculo surgi\u00f3 espont\u00e1neamente de una discusi\u00f3n en los comentarios de un art\u00edculo. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/462849\/\">\u00abAlgo sobre inode\u00bb<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Trucos para trabajar con un gran n\u00famero de archivos peque\u00f1os\" src=\"\/wp-content\/uploads\/2019\/08\/e488f5985cfb0b3274f57f6baeeedf01.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEl hecho es que la peculiaridad interna del funcionamiento de nuestros servicios es el almacenamiento de una enorme cantidad de archivos peque\u00f1os. En este momento tenemos alrededor de cientos de terabytes de esos datos. Y nos encontramos con algunas obvias e inesperadas dificultades y hemos logrado superarlas.<\/p>\n<p>Por eso comparto nuestra experiencia, tal vez le sirva a alguien.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Primer problema: \u00abNo hay espacio disponible en el dispositivo\u00bb<\/h2>\n<p>\nComo se mencion\u00f3 en el art\u00edculo anteriormente citado, el problema es que hay bloques libres en el sistema de archivos, pero los inodes se han agotado.<\/p>\n<p>Se puede verificar el n\u00famero de inodes usados y libres con el comando <code>df -ih<\/code>:<\/p>\n<p><img decoding=\"async\" alt=\"Trucos para trabajar con un gran n\u00famero de archivos peque\u00f1os\" src=\"\/wp-content\/uploads\/2019\/08\/ceb86a22562aa08c8ffbbde2c2618545.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNo voy a resumir el art\u00edculo, en breve, en el disco hay tanto bloques para datos como bloques para metainformaci\u00f3n, que son los inodes (nodo de \u00edndice). Su cantidad se establece al inicializar el sistema de archivos (hablando de ext2 y sus sucesores) y no cambia despu\u00e9s. El equilibrio entre bloques de datos e inodes se calcula a partir de datos promedio, en nuestro caso, cuando hay muchos archivos peque\u00f1os, el equilibrio debe inclinarse hacia un mayor n\u00famero de inodes.<\/p>\n<p>En Linux ya se han previsto opciones con diferentes equilibrados, y todas estas configuraciones precalculadas se encuentran en el archivo <code>\/etc\/mke2fs.conf<\/code>.<br \/>\nPor lo tanto, al inicializar el sistema de archivos mediante mke2fs, se puede especificar el perfil necesario.<\/p>\n<p>Aqu\u00ed hay algunos ejemplos del archivo:<\/p>\n<pre><code class=\"json\">    small = {\n        blocksize = 1024\n        inode_size = 128\n        inode_ratio = 4096\n    }\n\n    big = {\n        inode_ratio = 32768\n    }\n\n    largefile = {\n        inode_ratio = 1048576\n        blocksize = -1\n    }\n<\/code><\/pre>\n<p>\nPuedes seleccionar la opci\u00f3n de uso requerida con el par\u00e1metro &#171;-T&#187; al invocar mke2fs. Tambi\u00e9n puedes especificar manualmente los par\u00e1metros necesarios si no hay una soluci\u00f3n lista.<\/p>\n<p>M\u00e1s detalles se describen en los manuales para <code>mke2fs.conf<\/code> y <code>mke2fs<\/code>.<\/p>\n<p>Una caracter\u00edstica que no se mencion\u00f3 en el art\u00edculo anteriormente citado es que se puede establecer el tama\u00f1o del bloque de datos. Es evidente que para archivos grandes tiene sentido utilizar un tama\u00f1o de bloque mayor, mientras que para archivos peque\u00f1os, uno menor. <\/p>\n<p>Sin embargo, es importante tener en cuenta una caracter\u00edstica interesante, como la arquitectura del procesador.<br \/>\nEn su momento, pens\u00e9 que necesitaba un tama\u00f1o de bloque m\u00e1s grande para grandes archivos de fotos. Esto ocurri\u00f3 en un entorno dom\u00e9stico, en un almacenamiento de archivos de WD en arquitectura ARM. Sin pensarlo mucho, configur\u00e9 el tama\u00f1o de bloque a 8k o 16k en lugar del est\u00e1ndar de 4k, habiendo medido previamente el ahorro. Todo funcion\u00f3 perfectamente hasta que el propio almacenamiento fall\u00f3, aunque el disco segu\u00eda funcionando. Al colocar el disco en una computadora normal con un procesador Intel est\u00e1ndar, recib\u00ed una sorpresa: tama\u00f1o de bloque no soportado. Los datos estaban ah\u00ed, todo bien, pero no se pod\u00edan leer. Los procesadores i386 y similares no pueden trabajar con tama\u00f1os de bloque que no correspondan al tama\u00f1o de la p\u00e1gina de memoria, que es exactamente 4k. En resumen, termin\u00f3 usando utilidades del espacio de usuario, todo fue lento y triste, pero recuperamos los datos. Para quienes est\u00e9n interesados, busquen el nombre de la utilidad. <code>fuseext2<\/code>. La moraleja: o pensar en todos los casos de antemano, o no pretender ser un superh\u00e9roe y usar configuraciones est\u00e1ndar para hogares.<\/p>\n<p>UPD. Seg\u00fan el comentario del usuario <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/berez\/\" class=\"user_link\">berez<\/a><\/noindex> , aclaro que para i386 el tama\u00f1o del bloque no debe exceder 4k, pero no tiene que ser necesariamente 4k; es decir, se permiten 1k y 2k.<\/p>\n<p>As\u00ed que, as\u00ed es como resolvimos los problemas.<\/p>\n<p>Primero, nos encontramos con el problema cuando un disco de varios terabytes se llen\u00f3 de datos, y no pod\u00edamos reorganizar la configuraci\u00f3n del sistema de archivos.<\/p>\n<p>En segundo lugar, necesit\u00e1bamos una soluci\u00f3n urgente.<\/p>\n<p>Como resultado, llegamos a la conclusi\u00f3n de que era necesario cambiar el equilibrio, reduciendo el n\u00famero de archivos.<br \/>\nPara reducir el n\u00famero de archivos, decidimos agruparlos en un solo archivo comprimido. Teniendo en cuenta nuestra especificidad, agrupamos en un solo archivo todos los archivos de un determinado per\u00edodo y llevamos a cabo la compresi\u00f3n mediante una tarea cron diariamente durante la noche.<\/p>\n<p>Elegimos un archivo zip. En los comentarios del art\u00edculo anterior se suger\u00eda tar, pero hay una dificultad: no tiene un \u00edndice y los archivos dentro est\u00e1n dispuestos secuencialmente (no es por nada que \u00abtar\u00bb es una abreviatura de \u00abTape Archive\u00bb, un legado de las unidades de cinta), es decir, si se necesita leer un archivo al final del archivo, hay que leer todo el archivo, ya que no hay desplazamientos para cada archivo en relaci\u00f3n con el comienzo del archivo. Por lo tanto, esta es una operaci\u00f3n lenta. En zip todo es mucho mejor: tiene ese \u00edndice y desplazamientos de archivos dentro del archivo, y el tiempo de acceso a cada archivo no depende de su ubicaci\u00f3n. En nuestro caso, se pod\u00eda establecer la opci\u00f3n de compresi\u00f3n \u00ab0\u00bb, ya que todos los archivos ya hab\u00edan sido comprimidos previamente en gzip.<\/p>\n<p>Los clientes recuperan archivos a trav\u00e9s de nginx, y de acuerdo con la API antigua, simplemente se especifica el nombre del archivo, por ejemplo as\u00ed:<\/p>\n<pre><code class=\"plaintext\">http:\/\/www.server.com\/hydra\/20170416\/0453\/3bd24ae7-1df4-4d76-9d28-5b7fcb7fd8e5\n<\/code><\/pre>\n<p>\nPara descomprimir archivos sobre la marcha, encontramos y conectamos el m\u00f3dulo nginx-unzip-module (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/youzee\/nginx-unzip-module\">https:\/\/github.com\/youzee\/nginx-unzip-module<\/a><\/noindex>) y configuramos dos upstreams.<\/p>\n<p>Como resultado, la configuraci\u00f3n fue la siguiente:<\/p>\n<p><img decoding=\"async\" alt=\"Trucos para trabajar con un gran n\u00famero de archivos peque\u00f1os\" src=\"\/wp-content\/uploads\/2019\/08\/56f5210669fecfe194ac5907d563aa1d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLos dos hosts en la configuraci\u00f3n eran como sigue:<\/p>\n<pre><code class=\"json\">server {\n  listen *:8081;\n\n  location \/ {\n    root      \/home\/filestorage;\n  }\n}<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"json\">server {\n  listen *:8082;\n\n  location ~ ^\/hydra\/(d+)\/(\\d+)\/(.*)$ {\n    root      \/home\/filestorage;\n    file_in_unzip_archivefile \"\/home\/filestorage\/hydra\/$1\/$2.zip\";\n    file_in_unzip_extract \"$2\/$3\";\n    file_in_unzip;\n  }\n}\n<\/code><\/pre>\n<p>\nY la configuraci\u00f3n de los upstreams en el nginx superior:<\/p>\n<pre><code class=\"json\">upstream storage {\n  server server.com:8081;\n  server server.com:8082;\n}\n<\/code><\/pre>\n<p>\nC\u00f3mo funciona:<\/p>\n<ul>\n<li>El cliente va a nginx frontal<\/li>\n<li>Nginx frontal intenta entregar el archivo del primer upstream, es decir, directamente desde el sistema de archivos<\/li>\n<li>Si no hay archivo, intenta entregar desde el segundo upstream, que intenta encontrar el archivo dentro del archivo<\/li>\n<\/ul>\n<p><\/p>\n<h2>El segundo problema: otra vez \"No space left on device\"<\/h2>\n<p>\nEste es el segundo problema que encontramos cuando hay muchos archivos en el directorio.<br \/>\nEstamos intentando crear un archivo, el sistema se queja de que no hay espacio. Cambiamos el nombre del archivo y de nuevo intentamos crearlo.<\/p>\n<p>Se logra.<\/p>\n<p>Se ve aproximadamente as\u00ed:<\/p>\n<p><img decoding=\"async\" alt=\"Trucos para trabajar con un gran n\u00famero de archivos peque\u00f1os\" src=\"\/wp-content\/uploads\/2019\/08\/f365358b59bf81d450a236dfb58e4874.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa verificaci\u00f3n de inodes no dio nada: hay muchos libres. <br \/>\nLa verificaci\u00f3n de espacio \u2014 lo mismo.<br \/>\nPensamos que podr\u00eda haber demasiados archivos en el directorio, que existe un l\u00edmite para esto, pero no es as\u00ed: N\u00famero m\u00e1ximo de archivos por directorio: ~1.3 \u00d7 10^20<\/p>\n<p>Y se puede crear un archivo si se cambia el nombre.<br \/>\nConclusi\u00f3n: el problema est\u00e1 en el nombre del archivo.<\/p>\n<p>Investigaciones posteriores mostraron que el problema est\u00e1 en el algoritmo de hashing al construir el \u00edndice del directorio, con un gran n\u00famero de archivos hay colisiones con todas las consecuencias resultantes. Se puede leer m\u00e1s aqu\u00ed: <noindex><a rel=\"nofollow\" href=\"https:\/\/ext4.wiki.kernel.org\/index.php\/Ext4_Disk_Layout#Hash_Tree_Directories\">https:\/\/ext4.wiki.kernel.org\/index.php\/Ext4_Disk_Layout#Hash_Tree_Directories<\/a><\/noindex><\/p>\n<p>Se puede desactivar esta opci\u00f3n, pero... buscar un archivo por nombre puede volverse impredeciblemente lento al revisar todos los archivos. <\/p>\n<pre><code class=\"bash\"> tune2fs -O \"^dir_index\" \/dev\/sdb3\n<\/code><\/pre>\n<p>\nEn general, como soluci\u00f3n temporal puede funcionar.<\/p>\n<p>Moraleja: tener muchos archivos en un directorio suele ser malo. No se debe hacer as\u00ed.<\/p>\n<p>Normalmente en tales casos se crean subdirectorios, ya sea por las primeras letras del nombre del archivo o por otros par\u00e1metros, como las fechas; en la mayor\u00eda de los casos esto ayuda.<br \/>\nPero el n\u00famero total de archivos peque\u00f1os sigue siendo malo, incluso si se dividen en directorios; entonces, ver la primera problem\u00e1tica.<\/p>\n<h2>Tercera problema: c\u00f3mo ver la lista de archivos si son muchos.<\/h2>\n<p>\nEn nuestra situaci\u00f3n, donde tenemos muchos archivos, de una manera u otra nos hemos enfrentado al problema de c\u00f3mo ver el contenido del directorio.<\/p>\n<p>La soluci\u00f3n est\u00e1ndar es el comando <code>Muestra el contenido del directorio. Si no se proporciona una ruta, se muestra el contenido del directorio actual.<\/code>.<br \/>\nBien, veamos qu\u00e9 ocurre con 4772098 archivos:<\/p>\n<pre><code class=\"bash\">\n$ time ls \/home\/app\/express.repository\/offercache\/ &gt;\/dev\/null\n\nreal\t0m30.203s\nuser\t0m28.327s\nsys\t0m1.876s\n<\/code><\/pre>\n<p>\n30 segundos... puede ser demasiado. Y la mayor parte del tiempo se gasta procesando archivos en el espacio de usuario, no en el funcionamiento del n\u00facleo.<\/p>\n<p>Pero hay una soluci\u00f3n:<\/p>\n<pre><code class=\"bash\">\n$ time find \/home\/app\/express.repository\/offercache\/ &gt;\/dev\/null\n\nreal\t0m3.714s\nuser\t0m1.998s\nsys\t0m1.717s\n<\/code><\/pre>\n<p>\n3 segundos. 10 veces m\u00e1s r\u00e1pido.<br \/>\n\u00a1Hurra!<\/p>\n<p><b>UPD.<\/b><\/p>\n<p>Una soluci\u00f3n a\u00fan m\u00e1s r\u00e1pida del usuario <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/berez\/\" class=\"user_link\">berez<\/a><\/noindex> \u2014 desactivar la ordenaci\u00f3n en <code>Muestra el contenido del directorio. Si no se proporciona una ruta, se muestra el contenido del directorio actual.<\/code><\/p>\n<pre><code class=\"bash\">\ntime ls -U \/home\/app\/express.repository\/offercache\/ &gt;\/dev\/null\nreal\t0m2.985s\nuser\t0m1.377s\nsys\t0m1.608s\n<\/code><\/pre>\n<h2>Cuarta problema: alto LA al trabajar con archivos.<\/h2>\n<p>\nPeri\u00f3dicamente surge la situaci\u00f3n en la que es necesario copiar un mont\u00f3n de archivos de una m\u00e1quina a otra. Sin embargo, a menudo el LA aumenta dr\u00e1sticamente, ya que todo depende del rendimiento de los discos mismos.<\/p>\n<p>Lo m\u00e1s sensato que uno quiere es usar SSD. Es realmente genial. La \u00fanica cuesti\u00f3n es el costo de los SSD de varios terabytes.<\/p>\n<p>Pero si los discos son ordinarios, hay que copiar archivos, y esto adem\u00e1s es un sistema de producci\u00f3n, donde la sobrecarga lleva a quejas de los clientes? Hay al menos dos herramientas \u00fatiles: <code>nice<\/code> y <code>ionice<\/code>.<\/p>\n<p><code>nice<\/code> \u2014 reduce la prioridad del proceso, por lo que el programador asigna m\u00e1s cuantas de tiempo a otros procesos, m\u00e1s prioritarios.<br \/>\nEn nuestra pr\u00e1ctica ha ayudado establecer nice al m\u00e1ximo (19 \u2014 es la prioridad m\u00ednima, -20 (menos 20) \u2014 la m\u00e1xima).<\/p>\n<p><code>ionice<\/code> \u2014 por lo tanto, corrige la prioridad de entrada\/salida (programaci\u00f3n de I\/O)<\/p>\n<p>Si tienes RAID y necesita sincronizarse de repente (despu\u00e9s de un reinicio fallido o tras la sustituci\u00f3n de un disco), en algunas situaciones tiene sentido reducir la velocidad de sincronizaci\u00f3n para que el resto de los procesos puedan funcionar de manera m\u00e1s o menos adecuada. Para esto, puedes usar el siguiente comando:<\/p>\n<pre><code class=\"bash\">\necho 1000 &gt; \/proc\/sys\/dev\/raid\/speed_limit_max\n<\/code><\/pre>\n<p><\/p>\n<h2>Problema cinco: C\u00f3mo sincronizar archivos en tiempo real<\/h2>\n<p>\nTenemos las mismas enormes cantidades de archivos que necesitamos respaldar en un segundo servidor para evitar... Los archivos se escriben constantemente, por lo que, para minimizar las p\u00e9rdidas, hay que copiarlos lo m\u00e1s r\u00e1pido posible.<\/p>\n<p>Soluci\u00f3n est\u00e1ndar: Rsync sobre SSH.<\/p>\n<p>Es una buena opci\u00f3n, a menos que necesites hacerlo cada pocos segundos. Y hay muchos archivos. Incluso si no los copias, necesitas entender de alguna manera qu\u00e9 ha cambiado, y comparar varios millones de archivos consume tiempo y carga los discos.<\/p>\n<p>Es decir, necesitamos saber de inmediato qu\u00e9 hay que copiar, sin iniciar una comparaci\u00f3n cada vez.<\/p>\n<p>La salvaci\u00f3n es <code>lsyncd<\/code>. <code>Lsyncd<\/code> \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/axkibe.github.io\/lsyncd\/\">Demonio de Sincronizaci\u00f3n en Vivo (Espejo)<\/a><\/noindex>. Tambi\u00e9n funciona a trav\u00e9s de rsync, pero monitorea adicionalmente el sistema de archivos en busca de cambios utilizando inotify y fsevents, y comienza a copiar solo aquellos archivos que han aparecido o cambiado.<\/p>\n<h2>Problema seis: c\u00f3mo entender qui\u00e9n est\u00e1 sobrecargando los discos<\/h2>\n<p>\nProbablemente todos lo sepan, pero para completar el panorama: hay un comando para monitorear el subsistema de disco <code>iotop<\/code> \u2014similar a <code>top<\/code>, pero muestra los procesos que utilizan los discos de manera m\u00e1s activa.<\/p>\n<p><img decoding=\"async\" alt=\"Trucos para trabajar con un gran n\u00famero de archivos peque\u00f1os\" src=\"\/wp-content\/uploads\/2019\/08\/56612c618469ef340a31ae446d65ed4e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPor cierto, el viejo y querido top tambi\u00e9n permite entender si hay problemas con los discos o no. Para esto, hay dos par\u00e1metros que son los m\u00e1s adecuados: <b>Carga Promedio<\/b> y <b>IOwait<\/b>.<\/p>\n<p><img decoding=\"async\" alt=\"Trucos para trabajar con un gran n\u00famero de archivos peque\u00f1os\" src=\"\/wp-content\/uploads\/2019\/08\/01a0565947de65d13b0045f7180caf5d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEl primero muestra cu\u00e1ntos procesos est\u00e1n en la cola de servicio, generalmente m\u00e1s de 2 ya indica que algo no est\u00e1 bien. Durante las copias de respaldo a los servidores, permitimos hasta 6-8; despu\u00e9s de eso, la situaci\u00f3n se considera an\u00f3mala.<\/p>\n<p>El segundo \u2014 cu\u00e1nto est\u00e1 ocupado el procesador con las operaciones de disco. IOwait &gt;10% \u2014 raz\u00f3n para preocuparse, aunque en nuestros servidores con perfiles de carga espec\u00edficos, a veces es estable entre 40-50%, y eso es realmente la norma.<\/p>\n<p>Con esto concluir\u00e9, aunque seguramente hay muchos aspectos que no hemos tenido que enfrentar, estar\u00e9 encantado de recibir comentarios y descripciones de casos reales interesantes.<br \/>\n<br \/>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/srg\/blog\/462967\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0418\u0434\u0435\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u0440\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u0441\u043f\u043e\u043d\u0442\u0430\u043d\u043d\u043e \u0438\u0437 \u0434\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u0438 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043a \u0441\u0442\u0430\u0442\u044c\u0435 \u00ab\u041a\u043e\u0435-\u0447\u0442\u043e \u043e\u0431 inode\u00bb. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430\u0448\u0438\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043e\u0433\u0440\u043e\u043c\u0430\u0434\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u043c\u0435\u043b\u043a\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432. \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0443 \u043d\u0430\u0441 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0441\u043e\u0442\u0435\u043d \u0442\u0435\u0440\u0430\u0431\u0430\u0439\u0442 \u0442\u0430\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u0418 \u043c\u044b \u043d\u0430\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435 \u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0433\u0440\u0430\u0431\u0435\u043b\u044c\u043a\u0438 \u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u043e \u043d\u0438\u043c \u043f\u0440\u043e\u0448\u043b\u0438\u0441\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0435\u043b\u044e\u0441\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27728,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-36999","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0418\u0434\u0435\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u0440\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u0441\u043f\u043e\u043d\u0442\u0430\u043d\u043d\u043e \u0438\u0437 \u0434\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u0438 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043a \u0441\u0442\u0430\u0442\u044c\u0435 \u00ab\u041a\u043e\u0435-\u0447\u0442\u043e \u043e\u0431 inode\u00bb.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0425\u0430\u043a\u0438 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0447\u0438\u0441\u043b\u043e\u043c \u043c\u0435\u043b\u043a\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0418\u0434\u0435\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u0440\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u0441\u043f\u043e\u043d\u0442\u0430\u043d\u043d\u043e \u0438\u0437 \u0434\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u0438 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043a \u0441\u0442\u0430\u0442\u044c\u0435 \u00ab\u041a\u043e\u0435-\u0447\u0442\u043e \u043e\u0431 inode\u00bb.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:15:13+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:15:13+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Trucos para trabajar con un gran n\u00famero de archivos peque\u00f1os | ProHoster","description":"La idea del art\u00edculo surgi\u00f3 de manera espont\u00e1nea a partir de una discusi\u00f3n en los comentarios del art\u00edculo \"Algo sobre inodes\".","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0425\u0430\u043a\u0438 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0447\u0438\u0441\u043b\u043e\u043c \u043c\u0435\u043b\u043a\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 | ProHoster","og:description":"\u0418\u0434\u0435\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u0440\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u0441\u043f\u043e\u043d\u0442\u0430\u043d\u043d\u043e \u0438\u0437 \u0434\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u0438 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043a \u0441\u0442\u0430\u0442\u044c\u0435 \u00ab\u041a\u043e\u0435-\u0447\u0442\u043e \u043e\u0431 inode\u00bb.","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:15:13+00:00","article:modified_time":"2019-10-31T19:15:13+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"36999","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 05:41:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:35:26","updated":"2026-01-22 05:41:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/36999","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=36999"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/36999\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/27728"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=36999"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=36999"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=36999"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}