{"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\/pt\/blog\/administrirovanie\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov","title":{"rendered":"Dicas para trabalhar com um grande n\u00famero de pequenos arquivos","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>A ideia do artigo surgiu espontaneamente de uma discuss\u00e3o nos coment\u00e1rios de um artigo. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/462849\/\">\u00abAlgo sobre inode\u00bb<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Dicas para trabalhar com um grande n\u00famero de pequenos arquivos\" src=\"\/wp-content\/uploads\/2019\/08\/e488f5985cfb0b3274f57f6baeeedf01.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA quest\u00e3o \u00e9 que a especificidade interna do funcionamento dos nossos servi\u00e7os \u00e9 o armazenamento de um n\u00famero enorme de arquivos pequenos. No momento, temos cerca de centenas de terabytes desses dados. E nos deparamos com algumas armadilhas \u00f3bvias e n\u00e3o t\u00e3o \u00f3bvias e passamos por elas com sucesso.<\/p>\n<p>Por isso, estou compartilhando nossa experi\u00eancia, pode ser \u00fatil para algu\u00e9m.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Primeiro problema: \u00abSem espa\u00e7o dispon\u00edvel no dispositivo\u00bb<\/h2>\n<p>\nComo mencionado no artigo anteriormente citado, o problema \u00e9 que h\u00e1 blocos livres no sistema de arquivos, mas inodes se esgotaram.<\/p>\n<p>Voc\u00ea pode verificar o n\u00famero de inodes usados e livres com o comando <code>df -ih<\/code>:<\/p>\n<p><img decoding=\"async\" alt=\"Dicas para trabalhar com um grande n\u00famero de pequenos arquivos\" src=\"\/wp-content\/uploads\/2019\/08\/ceb86a22562aa08c8ffbbde2c2618545.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00e3o vou recontar o artigo, em resumo, no disco h\u00e1 tanto blocos diretamente para dados quanto blocos para metainforma\u00e7\u00f5es, os quais s\u00e3o inodes (nodo \u00edndice). O n\u00famero deles \u00e9 definido na inicializa\u00e7\u00e3o do sistema de arquivos (falamos do ext2 e seus sucessores) e n\u00e3o muda depois. O equil\u00edbrio entre blocos de dados e inodes \u00e9 calculado a partir de dados estat\u00edsticos, mas, em nosso caso, onde h\u00e1 muitos arquivos pequenos, o equil\u00edbrio deve se deslocar na dire\u00e7\u00e3o do n\u00famero de inodes \u2014 deve haver mais deles.<\/p>\n<p>No Linux, j\u00e1 foram previstas variantes com diferentes balan\u00e7os, e todas essas configura\u00e7\u00f5es pr\u00e9-calculadas est\u00e3o no arquivo <code>\/etc\/mke2fs.conf<\/code>.<br \/>\nPortanto, na inicializa\u00e7\u00e3o inicial do sistema de arquivos atrav\u00e9s do mke2fs, voc\u00ea pode especificar o perfil desejado.<\/p>\n<p>Aqui est\u00e3o alguns exemplos do arquivo:<\/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>\n\u00c9 poss\u00edvel selecionar a op\u00e7\u00e3o de uso desejada com a op\u00e7\u00e3o &#171;-T&#187; ao chamar o mke2fs. Tamb\u00e9m \u00e9 poss\u00edvel especificar manualmente os par\u00e2metros necess\u00e1rios, caso n\u00e3o haja uma solu\u00e7\u00e3o pronta.<\/p>\n<p>Mais detalhes est\u00e3o descritos nos manuais para <code>mke2fs.conf<\/code> e <code>mke2fs<\/code>.<\/p>\n<p>Uma caracter\u00edstica n\u00e3o abordada no artigo mencionado acima \u00e9 que voc\u00ea pode definir o tamanho do bloco de dados. \u00c9 evidente que para grandes arquivos vale a pena um tamanho de bloco maior; para pequenos, um menor. <\/p>\n<p>No entanto, vale a pena considerar uma caracter\u00edstica interessante, como a arquitetura do processador.<br \/>\nUm tempo atr\u00e1s, pensei que precisava de um tamanho de bloco maior para arquivos grandes de fotos. Era um ambiente dom\u00e9stico, em um armazenamento dom\u00e9stico WD com arquitetura ARM. Sem pensar muito, defini o tamanho do bloco como 8k ou 16k em vez do padr\u00e3o de 4k, depois de medir a economia. E tudo estava \u00f3timo at\u00e9 o momento em que o pr\u00f3prio armazenamento falhou, embora o disco estivesse intacto. Ao colocar o disco em um computador comum com um processador Intel, recebi uma surpresa: tamanho de bloco n\u00e3o suportado. A situa\u00e7\u00e3o ficou complicada. Os dados estavam l\u00e1, tudo bem, mas n\u00e3o era poss\u00edvel ler. Processadores i386 e similares n\u00e3o conseguem trabalhar com tamanhos de bloco que n\u00e3o correspondem ao tamanho da p\u00e1gina de mem\u00f3ria, que \u00e9 exatamente 4k. No geral, a situa\u00e7\u00e3o foi resolvida usando utilit\u00e1rios do espa\u00e7o do usu\u00e1rio, tudo foi lento e triste, mas conseguimos salvar os dados. Para quem tiver interesse - procure pelo nome do utilit\u00e1rio. <code>fuseext2<\/code>. Moral da hist\u00f3ria: ou pense em todos os casos antecipadamente, ou n\u00e3o tente se passar por super-her\u00f3i e use as configura\u00e7\u00f5es padr\u00e3o para donas de casa.<\/p>\n<p>UPD. Com a observa\u00e7\u00e3o do usu\u00e1rio <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/berez\/\" class=\"user_link\">berez<\/a><\/noindex> esclare\u00e7o que para i386 o tamanho do bloco n\u00e3o deve exceder 4k, mas n\u00e3o necessariamente deve ser exatamente 4k, ou seja, tamanhos de 1k e 2k s\u00e3o permitidos.<\/p>\n<p>Ent\u00e3o, como n\u00f3s resolvemos os problemas.<\/p>\n<p>Primeiro, encontramos o problema quando um disco de m\u00faltiplos terabytes estava cheio de dados, e n\u00e3o pod\u00edamos refazer a configura\u00e7\u00e3o do sistema de arquivos.<\/p>\n<p>Em segundo lugar, a solu\u00e7\u00e3o precisava ser urgente.<\/p>\n<p>No final, chegamos \u00e0 conclus\u00e3o de que precis\u00e1vamos mudar o equil\u00edbrio, reduzindo o n\u00famero de arquivos.<br \/>\nPara reduzir o n\u00famero de arquivos, decidimos compactar os arquivos em um \u00fanico arquivo. Considerando nossa especificidade, agrupamos em um \u00fanico arquivo todos os arquivos de um determinado per\u00edodo e realizamos a arquiva\u00e7\u00e3o com uma tarefa cron diariamente \u00e0 noite.<\/p>\n<p>Selecionamos o arquivo zip. Nos coment\u00e1rios do artigo anterior, foi sugerido usar tar, mas isso traz uma dificuldade: ele n\u00e3o possui um \u00edndice, e os arquivos est\u00e3o armazenados sequencialmente (n\u00e3o \u00e9 \u00e0 toa que \"tar\" \u00e9 uma abrevia\u00e7\u00e3o de \"Tape Archive\", um legado dos suportes em fita), ou seja, se voc\u00ea precisar ler um arquivo no final do arquivo, ter\u00e1 que ler todo o arquivo, pois n\u00e3o h\u00e1 deslocamentos para cada arquivo em rela\u00e7\u00e3o ao in\u00edcio do arquivo. Portanto, esta \u00e9 uma opera\u00e7\u00e3o demorada. No zip, tudo \u00e9 muito melhor: ele tem o tal \u00edndice e os deslocamentos dos arquivos dentro do arquivo, e o tempo de acesso a cada arquivo n\u00e3o depende de sua localiza\u00e7\u00e3o. E no nosso caso, poder\u00edamos definir a op\u00e7\u00e3o de compacta\u00e7\u00e3o \"0\", pois todos os arquivos j\u00e1 estavam previamente compactados em gzip.<\/p>\n<p>Os clientes baixam arquivos atrav\u00e9s do nginx e, de acordo com a API antiga, basta informar o nome do arquivo, por exemplo:<\/p>\n<pre><code class=\"plaintext\">http:\/\/www.server.com\/hydra\/20170416\/0453\/3bd24ae7-1df4-4d76-9d28-5b7fcb7fd8e5\n<\/code><\/pre>\n<p>\nPara descompactar arquivos on-the-fly, encontramos e conectamos o 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>) e configuramos dois upstreams.<\/p>\n<p>O resultado foi uma configura\u00e7\u00e3o como esta:<\/p>\n<p><img decoding=\"async\" alt=\"Dicas para trabalhar com um grande n\u00famero de pequenos arquivos\" src=\"\/wp-content\/uploads\/2019\/08\/56f5210669fecfe194ac5907d563aa1d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOs dois hosts nas configura\u00e7\u00f5es eram assim:<\/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>\nE a configura\u00e7\u00e3o dos upstreams no 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>\nComo funciona:<\/p>\n<ul>\n<li>O cliente vai para o nginx frontal<\/li>\n<li>O nginx frontal tenta entregar o arquivo do primeiro upstream, ou seja, diretamente do sistema de arquivos<\/li>\n<li>Se o arquivo n\u00e3o existir, tenta entregar do segundo upstream, que tenta encontrar o arquivo dentro do arquivo<\/li>\n<\/ul>\n<p><\/p>\n<h2>O segundo problema: novamente \"No space left on device\"<\/h2>\n<p>\nEste \u00e9 o segundo problema que encontramos quando h\u00e1 muitos arquivos no diret\u00f3rio.<br \/>\nEstamos tentando criar um arquivo, mas o sistema reclama que n\u00e3o h\u00e1 espa\u00e7o. Mudamos o nome do arquivo e tentamos cri\u00e1-lo novamente.<\/p>\n<p>E funciona.<\/p>\n<p>Aparentemente, fica assim:<\/p>\n<p><img decoding=\"async\" alt=\"Dicas para trabalhar com um grande n\u00famero de pequenos arquivos\" src=\"\/wp-content\/uploads\/2019\/08\/f365358b59bf81d450a236dfb58e4874.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA verifica\u00e7\u00e3o dos inodes n\u00e3o mostrou nada \u2014 h\u00e1 muitos livres. <br \/>\nA verifica\u00e7\u00e3o do espa\u00e7o - o mesmo.<br \/>\nPensamos que poderia haver muitos arquivos no diret\u00f3rio, e h\u00e1 um limite, mas novamente n\u00e3o: N\u00famero m\u00e1ximo de arquivos por diret\u00f3rio: ~1.3 \u00d7 10^20<\/p>\n<p>E na verdade \u00e9 poss\u00edvel criar um arquivo, se mudarmos o nome.<br \/>\nA conclus\u00e3o \u00e9 que o problema est\u00e1 no nome do arquivo.<\/p>\n<p>Pesquisas adicionais mostraram que o problema est\u00e1 no algoritmo de hashing ao construir o \u00edndice do diret\u00f3rio; com um grande n\u00famero de arquivos, ocorrem colis\u00f5es com todas as consequ\u00eancias decorrentes. Mais informa\u00e7\u00f5es podem ser lidas aqui: <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>\u00c9 poss\u00edvel desativar esta op\u00e7\u00e3o, mas... a busca de arquivos pelo nome pode se tornar imprevisivelmente lenta ao percorrer todos os arquivos. <\/p>\n<pre><code class=\"bash\"> tune2fs -O \"^dir_index\" \/dev\/sdb3\n<\/code><\/pre>\n<p>\nDe modo geral, como solu\u00e7\u00e3o tempor\u00e1ria pode funcionar.<\/p>\n<p>Moral da hist\u00f3ria: ter muitos arquivos em um diret\u00f3rio geralmente \u00e9 ruim. N\u00e3o se deve fazer isso.<\/p>\n<p>Normalmente, nesses casos, cria-se subdiret\u00f3rios, por primeiras letras do nome do arquivo ou por outros par\u00e2metros, como datas; na maioria das vezes isso ajuda.<br \/>\nMas o n\u00famero total de arquivos pequenos ainda \u00e9 problem\u00e1tico, mesmo que sejam organizados em diret\u00f3rios \u2014 ent\u00e3o, veja o primeiro problema.<\/p>\n<h2>Terceiro problema: como visualizar a lista de arquivos, se houver muitos.<\/h2>\n<p>\nEm nossa situa\u00e7\u00e3o, com muitos arquivos, de uma forma ou outra, nos deparamos com a quest\u00e3o de como ver o conte\u00fado do diret\u00f3rio.<\/p>\n<p>A solu\u00e7\u00e3o padr\u00e3o \u00e9 o comando <code>ls<\/code>.<br \/>\nOk, vamos ver o que acontece com 4772098 arquivos:<\/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... \u00e9 bastante tempo. E o tempo principal \u00e9 gasto no processamento de arquivos no espa\u00e7o do usu\u00e1rio, e n\u00e3o na opera\u00e7\u00e3o do n\u00facleo.<\/p>\n<p>Mas existe uma solu\u00e7\u00e3o:<\/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 vezes mais r\u00e1pido.<br \/>\nUhul!<\/p>\n<p><b>UPD.<\/b><\/p>\n<p>Outra solu\u00e7\u00e3o ainda mais r\u00e1pida do usu\u00e1rio <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/berez\/\" class=\"user_link\">berez<\/a><\/noindex> \u2014 desativar a ordena\u00e7\u00e3o em <code>ls<\/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>Quarto problema: alto LA ao trabalhar com arquivos.<\/h2>\n<p>\nPeriodicamente surge a situa\u00e7\u00e3o em que \u00e9 necess\u00e1rio copiar um monte de arquivos de uma m\u00e1quina para outra. Muitas vezes, o LA aumenta drasticamente, pois tudo depende da performance dos pr\u00f3prios discos.<\/p>\n<p>A coisa mais sensata \u00e9 usar SSD. Realmente \u00f3timo. A quest\u00e3o \u00e9 o custo de SSDs de m\u00faltiplos terabytes.<\/p>\n<p>Mas se os discos forem comuns, os arquivos precisam ser copiados, e isso em um sistema de produ\u00e7\u00e3o, onde a sobrecarga leva a reclama\u00e7\u00f5es dos clientes? Existem pelo menos duas ferramentas \u00fateis: <code>nice<\/code> e <code>ionice<\/code>.<\/p>\n<p><code>nice<\/code> \u2014 diminui a prioridade do processo, assim o escalonador d\u00e1 mais quanta de tempo para outros processos com prioridade maior.<br \/>\nEm nossa pr\u00e1tica, ajudou definir o nice no m\u00e1ximo (19 \u2014 minimal prioridade, -20 (menos 20) \u2014 m\u00e1xima).<\/p>\n<p><code>ionice<\/code> \u2014 assim, ajusta a prioridade de entrada\/sa\u00edda (I\/O scheduling).<\/p>\n<p>Se voc\u00ea est\u00e1 usando RAID e de repente ele precisa se sincronizar (ap\u00f3s uma reinicializa\u00e7\u00e3o malsucedida ou para recuperar o conjunto RAID ap\u00f3s a substitui\u00e7\u00e3o de um disco), em algumas situa\u00e7\u00f5es faz sentido reduzir a velocidade de sincroniza\u00e7\u00e3o, para que outros processos possam funcionar de maneira mais ou menos adequada. Para isso, o seguinte comando pode ajudar:<\/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: Como sincronizar arquivos em tempo real<\/h2>\n<p>\nTemos a mesma enorme quantidade de arquivos que precisam ser backupados em um segundo servidor para evitar\u2026 Os arquivos est\u00e3o sendo escritos constantemente, ent\u00e3o, para ter o m\u00ednimo de perdas, precisamos copi\u00e1-los o mais r\u00e1pido poss\u00edvel.<\/p>\n<p>Solu\u00e7\u00e3o padr\u00e3o: Rsync over SSH.<\/p>\n<p>Essa \u00e9 uma boa op\u00e7\u00e3o, a menos que seja necess\u00e1rio fazer isso a cada alguns segundos. E h\u00e1 muitos arquivos. Mesmo que n\u00e3o seja preciso copi\u00e1-los, precisamos entender o que mudou, e comparar v\u00e1rios milh\u00f5es de arquivos consome tempo e gera carga nos discos.<\/p>\n<p>Ou seja, precisamos saber imediatamente o que deve ser copiado, sem ter que iniciar a compara\u00e7\u00e3o a cada vez.<\/p>\n<p>A salva\u00e7\u00e3o \u00e9 <code>lsyncd<\/code>. <code>Lsyncd<\/code> \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/axkibe.github.io\/lsyncd\/\">Daemon de Sincroniza\u00e7\u00e3o ao Vivo (Espelho)<\/a><\/noindex>. Ele tamb\u00e9m funciona atrav\u00e9s do rsync, mas adicionalmente monitora o sistema de arquivos em busca de altera\u00e7\u00f5es usando inotify e fsevents e inicia a c\u00f3pia apenas dos arquivos que foram criados ou modificados.<\/p>\n<h2>Problema seis: como entender quem est\u00e1 sobrecarregando os discos<\/h2>\n<p>\nProvavelmente todos sabem, mas, mesmo assim, para completar o quadro: para monitorar o subsistema de disco existe o comando <code>iotop<\/code> \u2014 semelhante ao <code>top<\/code>, mas mostra os processos que utilizam os discos de forma mais ativa.<\/p>\n<p><img decoding=\"async\" alt=\"Dicas para trabalhar com um grande n\u00famero de pequenos arquivos\" src=\"\/wp-content\/uploads\/2019\/08\/56612c618469ef340a31ae446d65ed4e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA prop\u00f3sito, o bom e velho top tamb\u00e9m permite entender se h\u00e1 problemas com os discos ou n\u00e3o. Para isso, existem dois par\u00e2metros mais adequados: <b>Load Average<\/b> e <b>IOwait<\/b>.<\/p>\n<p><img decoding=\"async\" alt=\"Dicas para trabalhar com um grande n\u00famero de pequenos arquivos\" src=\"\/wp-content\/uploads\/2019\/08\/01a0565947de65d13b0045f7180caf5d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nO primeiro mostra quantos processos est\u00e3o na fila para atendimento, geralmente mais de 2 j\u00e1 indica que algo n\u00e3o est\u00e1 certo. Durante a c\u00f3pia ativa para servidores de backup, aceitamos at\u00e9 6-8, ap\u00f3s isso a situa\u00e7\u00e3o \u00e9 considerada an\u00f4mala.<\/p>\n<p>O segundo \u2014 qu\u00e3o ocupado o processador est\u00e1 com opera\u00e7\u00f5es de disco. IOwait &gt;10% \u2014 \u00e9 motivo de preocupa\u00e7\u00e3o, embora em nossos servidores com perfil de carga espec\u00edfico, isso possa estar est\u00e1vel entre 40-50%, e isso \u00e9 realmente o normal.<\/p>\n<p>Para finalizar, embora com certeza haja muitos aspectos que n\u00e3o encontramos, aguardo com prazer coment\u00e1rios e descri\u00e7\u00f5es de casos reais interessantes.<br \/>\n<br \/>Fonte: <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.3 - 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\/pt\/blog\/administrirovanie\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\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\/pt\/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\udd47Dicas para lidar com um grande n\u00famero de pequenos arquivos | ProHoster","description":"A ideia do artigo surgiu espontaneamente de uma discuss\u00e3o nos coment\u00e1rios do artigo \"Alguma coisa sobre inode\".","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","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\/pt\/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\/pt\/wp-json\/wp\/v2\/posts\/36999","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=36999"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/36999\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/27728"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=36999"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=36999"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=36999"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}