{"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\/it\/blog\/administrirovanie\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov","title":{"rendered":"Trucchi per lavorare con un gran numero di piccoli file","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>L'idea dell'articolo \u00e8 nata spontaneamente da una discussione nei commenti all'articolo <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/462849\/\">\u00abQualcosa sugli inode\u00bb<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Trucchi per lavorare con un gran numero di piccoli file\" src=\"\/wp-content\/uploads\/2019\/08\/e488f5985cfb0b3274f57f6baeeedf01.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIl fatto \u00e8 che la specificit\u00e0 interna del lavoro dei nostri servizi \u00e8 la memorizzazione di un'enorme quantit\u00e0 di file di piccole dimensioni. Attualmente abbiamo circa centinaia di terabyte di questi dati. E ci siamo imbattuti in alcune ovvie e non cos\u00ec evidenti insidie e le abbiamo affrontate con successo.<\/p>\n<p>Perci\u00f2 condivido la nostra esperienza, potrebbe tornare utile a qualcuno.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Primo problema: \u00abNo space left on device\u00bb<\/h2>\n<p>\nCome accennato nell'articolo sopra citato, il problema \u00e8 che ci sono blocchi liberi nel filesystem, ma gli inode sono esauriti.<\/p>\n<p>\u00c8 possibile controllare il numero di inode utilizzati e liberi con il comando <code>df -ih<\/code>:<\/p>\n<p><img decoding=\"async\" alt=\"Trucchi per lavorare con un gran numero di piccoli file\" src=\"\/wp-content\/uploads\/2019\/08\/ceb86a22562aa08c8ffbbde2c2618545.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNon ripeter\u00f2 l'articolo, in breve, sul disco ci sono sia blocchi per i dati che blocchi per la meta-informazione, questi ultimi sono gli inode (index node). Il loro numero \u00e8 definito al momento dell'inizializzazione del filesystem (si parla di ext2 e dei suoi eredi) e non cambia pi\u00f9. L'equilibrio tra i blocchi di dati e gli inode \u00e8 calcolato su dati medi, nel nostro caso, avendo molti file di piccole dimensioni, l'equilibrio deve spostarsi verso il numero di inode\u2014ce ne devono essere di pi\u00f9.<\/p>\n<p>In Linux hanno gi\u00e0 previsto varianti con diversi equilibri, e tutte queste configurazioni pre-calcolate si trovano nel file <code>\/etc\/mke2fs.conf<\/code>.<br \/>\nPertanto, durante l'inizializzazione iniziale del filesystem tramite mke2fs, \u00e8 possibile specificare il profilo desiderato.<\/p>\n<p>Ecco alcuni esempi dal file:<\/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\u00c8 possibile scegliere l'opzione di utilizzo desiderata con l'opzione &#171;-T&#187; durante la chiamata a mke2fs. \u00c8 inoltre possibile specificare manualmente i parametri necessari se non \u00e8 disponibile una soluzione pronta.<\/p>\n<p>Maggiori dettagli sono descritti nei manuali per <code>mke2fs.conf<\/code> e <code>mke2fs<\/code>.<\/p>\n<p>Una peculiarit\u00e0 non trattata nell'articolo sopra citato \u00e8 che \u00e8 possibile specificare la dimensione del blocco dati. \u00c8 evidente che per file di grandi dimensioni \u00e8 sensato avere una dimensione del blocco maggiore, per i file piccoli, invece, una dimensione minore. <\/p>\n<p>Tuttavia, \u00e8 importante considerare una caratteristica interessante, come l'architettura del processore.<br \/>\nUn giorno mi sono reso conto che per grandi file fotografici avevo bisogno di una dimensione di blocco pi\u00f9 grande. Era tutto in un ambiente domestico, su un'unit\u00e0 di archiviazione domestica WD basata su architettura ARM. Senza pensarci troppo, ho impostato la dimensione del blocco a 8k o 16k invece del normale 4k, dopo aver misurato i risparmi. E tutto andava benissimo fino al momento in cui l'unit\u00e0 di archiviazione non ha smesso di funzionare, mentre il disco era sano. Mettendo il disco in un computer normale con un normale processore Intel, ho ricevuto una sorpresa: dimensione del blocco non supportata. Eccoci. I dati ci sono, tutto bene, ma non si possono leggere. I processori i386 e simili non possono lavorare con dimensioni di blocco che non corrispondono alla dimensione di pagina della memoria, e questa \u00e8 esattamente 4k. Insomma, la faccenda si \u00e8 conclusa con l'uso di utility nello spazio utente, tutto \u00e8 stato lento e triste, ma i dati sono stati salvati. Chi \u00e8 interessato, cerchi per nome dell'utilit\u00e0 <code>fuseext2<\/code>. Morale: o pensare a tutti i casi in anticipo, o non comportarsi da supereroe e utilizzare le impostazioni standard per le casalinghe.<\/p>\n<p>UPD. A seguito dell'osservazione dell'utente <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/berez\/\" class=\"user_link\">berez<\/a><\/noindex> specifico che per i386 la dimensione del blocco non deve superare 4k, ma non deve necessariamente essere esattamente 4k, quindi sono ammesse anche 1k e 2k.<\/p>\n<p>Quindi, come abbiamo risolto i problemi.<\/p>\n<p>Innanzitutto, ci siamo imbattuti nel problema quando un disco da molti terabyte era pieno di dati e non potevamo modificare la configurazione del file system.<\/p>\n<p>In secondo luogo, era necessaria una soluzione urgente.<\/p>\n<p>Alla fine, abbiamo concluso che era necessario cambiare l'equilibrio, riducendo il numero di file.<br \/>\nPer ridurre il numero di file, \u00e8 stato deciso di raggrupparli in un unico archivio. Considerando la nostra specificit\u00e0, abbiamo raggruppato in un unico archivio tutti i file per un certo intervallo di tempo, eseguendo l'archiviazione tramite un compito cron ogni notte.<\/p>\n<p>\u00c8 stato selezionato un archivio zip. Nei commenti all'articolo precedente era stato suggerito il tar, ma con esso c\u2019\u00e8 una difficolt\u00e0: non ha un indice e i file sono disposti in modo sequenziale (non a caso \u00abtar\u00bb \u00e8 un'abbreviazione di \u00abTape Archive\u00bb, un'eredit\u00e0 dei nastri di memoria), cio\u00e8 se \u00e8 necessario leggere un file alla fine dell'archivio, \u00e8 necessario leggere tutto l'archivio, poich\u00e9 non ci sono offset per ogni file rispetto all'inizio dell'archivio. Quindi \u00e8 un'operazione lunga. In zip \u00e8 tutto molto migliore: ha quel famoso indice e offset dei file all\u2019interno dell\u2019archivio, e il tempo di accesso a ciascun file non dipende dalla sua posizione. Inoltre, nel nostro caso era possibile impostare l'opzione di compressione \u00ab0\u00bb, poich\u00e9 tutti i file erano gi\u00e0 stati compressi in gzip.<\/p>\n<p>I clienti prelevano i file tramite nginx e, secondo il vecchio API, basta specificare il nome del file, per esempio in questo modo:<\/p>\n<pre><code class=\"plaintext\">http:\/\/www.server.com\/hydra\/20170416\/0453\/3bd24ae7-1df4-4d76-9d28-5b7fcb7fd8e5\n<\/code><\/pre>\n<p>\nPer decomprimere i file al volo, abbiamo trovato e collegato il modulo 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 abbiamo configurato due upstream.<\/p>\n<p>Il risultato \u00e8 stata la seguente configurazione:<\/p>\n<p><img decoding=\"async\" alt=\"Trucchi per lavorare con un gran numero di piccoli file\" src=\"\/wp-content\/uploads\/2019\/08\/56f5210669fecfe194ac5907d563aa1d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDue host nelle impostazioni apparivano cos\u00ec:<\/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+)\/(\n  \ny) {\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 la configurazione degli upstream nel nginx superiore:<\/p>\n<pre><code class=\"json\">upstream storage {\n  server server.com:8081;\n  server server.com:8082;\n}\n<\/code><\/pre>\n<p>\nCome funziona:<\/p>\n<ul>\n<li>Il cliente si collega a nginx frontale<\/li>\n<li>Il frontale nginx cerca di restituire il file dal primo upstream, cio\u00e8 direttamente dal file system<\/li>\n<li>Se il file non \u00e8 presente, cerca di restituirlo dal secondo upstream, che tenta di trovare il file all'interno dell'archivio<\/li>\n<\/ul>\n<p><\/p>\n<h2>Il secondo problema: di nuovo \u00abNo space left on device\u00bb<\/h2>\n<p>\nQuesto \u00e8 il secondo problema che abbiamo affrontato quando ci sono molti file nella cartella.<br \/>\nStiamo cercando di creare un file, il sistema segnala che non c'\u00e8 spazio. Cambiamo il nome del file e proviamo a crearlo di nuovo.<\/p>\n<p>Funziona.<\/p>\n<p>Apparentemente sembra cos\u00ec:<\/p>\n<p><img decoding=\"async\" alt=\"Trucchi per lavorare con un gran numero di piccoli file\" src=\"\/wp-content\/uploads\/2019\/08\/f365358b59bf81d450a236dfb58e4874.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nControllare gli inode non ha dato risultati: ce ne sono molti disponibili. <br \/>\nControllare lo spazio: lo stesso risultato.<br \/>\nAbbiamo pensato che magari ci fossero troppi file nella cartella, e c\u2019\u00e8 un limite, ma di nuovo no: Numero massimo di file per directory: ~1.3 \u00d7 10^20<\/p>\n<p>Infatti, il file pu\u00f2 essere creato se si cambia il nome.<br \/>\nConclusione: il problema \u00e8 nel nome del file.<\/p>\n<p>Ulteriori indagini hanno rivelato che il problema \u00e8 nell'algoritmo di hashing durante la costruzione dell'indice della cartella; con un gran numero di file si osservano collisioni con tutte le conseguenze del caso. Maggiori dettagli possono essere letti qui: <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>\u00c8 possibile disattivare questa opzione, ma\u2026 la ricerca di un file per nome potrebbe diventare imprevedibilmente lunga quando si esaminano tutti i file. <\/p>\n<pre><code class=\"bash\"> tune2fs -O \"^dir_index\" \/dev\/sdb3\n<\/code><\/pre>\n<p>\nIn generale, come soluzione temporanea potrebbe funzionare.<\/p>\n<p>Morale: avere molti file in una directory \u00e8 solitamente negativo. Non si dovrebbe fare cos\u00ec.<\/p>\n<p>Di solito, in tali casi, si creano sottocartelle, basate sulle prime lettere del nome del file o su altri parametri, come le date; nella maggior parte dei casi, questo aiuta.<br \/>\nMa il numero complessivo di file piccoli rimane un problema, anche se divisi in cartelle: vedi il primo problema.<\/p>\n<h2>Problema tre: come visualizzare un elenco di file se ce ne sono molti<\/h2>\n<p>\nNella nostra situazione, in cui abbiamo molti file, ci siamo comunque trovati di fronte al problema di come visualizzare il contenuto di una directory.<\/p>\n<p>La soluzione standard \u00e8 il comando <code>ls<\/code>.<br \/>\nOk, vediamo che cosa succede con 4772098 file:<\/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 secondi\u2026 \u00e8 un po' troppo. Inoltre, la maggior parte del tempo viene spesa nell'elaborazione dei file nell'user space, non nel lavoro del kernel.<\/p>\n<p>Ma c'\u00e8 una soluzione:<\/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 secondi. Dieci volte pi\u00f9 veloce.<br \/>\nEvviva!<\/p>\n<p><b>UPD.<\/b><\/p>\n<p>Una soluzione ancora pi\u00f9 veloce dall'utente <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/berez\/\" class=\"user_link\">berez<\/a><\/noindex> \u2014 disattivando l'ordinamento di <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>Problema quattro: alto LA quando si lavora con i file<\/h2>\n<p>\nSi presenta periodicamente la situazione in cui \u00e8 necessario copiare un sacco di file da una macchina all'altra. In questo caso, spesso il LA cresce vertiginosamente, poich\u00e9 tutto dipende dalle prestazioni dei dischi stessi.<\/p>\n<p>La cosa pi\u00f9 sensata da fare \u00e8 utilizzare SSD. \u00c8 davvero fantastico. L'unica questione \u00e8 il costo degli SSD multi-terabyte.<\/p>\n<p>Ma se i dischi sono normali, \u00e8 necessario copiare i file, e ci\u00f2 si verifica in un sistema di produzione, dove il sovraccarico porta a lamentele da parte dei clienti? Esistono almeno due strumenti utili: <code>nice<\/code> e <code>ionice<\/code>.<\/p>\n<p><code>nice<\/code> \u2014 riduce la priorit\u00e0 del processo, in modo che lo scheduler distribuisca pi\u00f9 quanta di tempo ad altri processi con priorit\u00e0 superiore.<br \/>\nNella nostra esperienza, ci \u00e8 stato utile impostare il nice al massimo (19 \u00e8 la priorit\u00e0 minima, -20 (meno 20) \u00e8 la massima).<\/p>\n<p><code>ionice<\/code> \u2014 corregge di conseguenza la priorit\u00e0 di input\/output (I\/O scheduling)<\/p>\n<p>Se utilizzi il RAID e necessita improvvisamente di sincronizzarsi (dopo un riavvio non riuscito o per il ripristino dell'array RAID dopo la sostituzione di un disco), in alcune situazioni ha senso ridurre la velocit\u00e0 di sincronizzazione affinch\u00e9 gli altri processi possano funzionare in modo pi\u00f9 o meno adeguato. A questo proposito, pu\u00f2 essere utile il seguente 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 cinque: Come sincronizzare i file in tempo reale<\/h2>\n<p>\nAbbiamo le stesse enormi quantit\u00e0 di file che devono essere sottoposti a backup su un secondo server per evitare... I file vengono continuamente scritti, quindi per avere il minimo di perdite, devono essere copiati il pi\u00f9 rapidamente possibile.<\/p>\n<p>La soluzione standard: Rsync over SSH.<\/p>\n<p>\u00c8 una buona opzione, a meno che non sia necessario farlo ogni pochi secondi. E i file sono tanti. Anche se non li si copia, \u00e8 comunque necessario capire cosa sia cambiato, e confrontare diversi milioni di file richiede tempo e carico sui dischi.<\/p>\n<p>Cio\u00e8, dobbiamo sapere subito cosa copiare, senza lanciare il confronto ogni volta.<\/p>\n<p>La salvezza \u00e8: <code>lsyncd<\/code>. <code>Lsyncd<\/code> \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/axkibe.github.io\/lsyncd\/\">Live Syncing (Mirror) Daemon<\/a><\/noindex>. Funziona anche tramite rsync, ma monitora aggiuntivamente il file system alla ricerca di modifiche utilizzando inotify e fsevents e avvia la copia solo per i file che sono stati aggiunti o modificati.<\/p>\n<h2>Problema sei: come capire chi sta sovraccaricando i dischi<\/h2>\n<p>\nProbabilmente lo sanno tutti, ma comunque per completezza: per monitorare il sottosistema disco esiste un comando <code>iotop<\/code> \u2014 simile a <code>top<\/code>, ma mostra i processi che utilizzano di pi\u00f9 i dischi.<\/p>\n<p><img decoding=\"async\" alt=\"Trucchi per lavorare con un gran numero di piccoli file\" src=\"\/wp-content\/uploads\/2019\/08\/56612c618469ef340a31ae446d65ed4e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA proposito, il vecchio e caro top permette anche di capire se ci sono problemi con i dischi. A questo scopo, ci sono due parametri pi\u00f9 pertinenti: <b>Load Average<\/b> e <b>IOwait<\/b>.<\/p>\n<p><img decoding=\"async\" alt=\"Trucchi per lavorare con un gran numero di piccoli file\" src=\"\/wp-content\/uploads\/2019\/08\/01a0565947de65d13b0045f7180caf5d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIl primo mostra quante operazioni sono in attesa di essere gestite; di solito, pi\u00f9 di 2 significa che qualcosa non va. Durante la copia attiva sui server di backup, tolleriamo fino a 6-8, dopo di che la situazione \u00e8 considerata fuori norma.<\/p>\n<p>Il secondo indica quanto il processore \u00e8 impegnato nelle operazioni di disco. IOwait &gt;10% \u00e8 motivo di preoccupazione, anche se nei nostri server con un profilo di carico specifico abbiamo stabilmente il 40-50%, e questo \u00e8 realmente la norma.<\/p>\n<p>Concludo qui, anche se ci sono sicuramente molti aspetti che non abbiamo affrontato; attendo con piacere commenti e descrizioni di casi reali interessanti.<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.1.1 - 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\/it\/blog\/administrirovanie\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\/it\/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\udd47Trucchi per lavorare con un gran numero di file piccoli | ProHoster","description":"L'idea dell'articolo \u00e8 nata spontaneamente da una discussione nei commenti all'articolo \u00abQualcosa sugli inode\u00bb.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/36999","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=36999"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/36999\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/27728"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=36999"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=36999"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=36999"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}