{"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":"Suggerimenti per lavorare con un gran numero di file di piccole dimensioni","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>L'idea dell'articolo \u00e8 nata spontaneamente da una discussione nei commenti a un articolo. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/462849\/\">\u00abQualcosa su inode\u00bb<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Suggerimenti per lavorare con un gran numero di file di piccole dimensioni\" src=\"\/wp-content\/uploads\/2019\/08\/e488f5985cfb0b3274f57f6baeeedf01.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIl punto \u00e8 che la nostra infrastruttura prevede il salvataggio di enormi quantit\u00e0 di piccoli file. Attualmente abbiamo circa centinaia di terabyte di dati. E abbiamo incontrato alcune ovvie e non cos\u00ec ovvie problematiche e le abbiamo affrontate con successo.<\/p>\n<p>Perci\u00f2 condivido la nostra esperienza, potrebbe essere 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 precedente, il problema \u00e8 che ci sono blocchi liberi nel filesystem, ma gli inode sono esauriti.<\/p>\n<p>Puoi controllare il numero di inode utilizzati e disponibili con il comando <code>df -ih<\/code>:<\/p>\n<p><img decoding=\"async\" alt=\"Suggerimenti per lavorare con un gran numero di file di piccole dimensioni\" src=\"\/wp-content\/uploads\/2019\/08\/ceb86a22562aa08c8ffbbde2c2618545.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNon voglio ripetere l'articolo, ma in breve, su un disco ci sono sia blocchi per i dati sia blocchi per le informazioni meta, ovvero gli inode (index node). Il loro numero \u00e8 fissato al momento dell'inizializzazione del filesystem (si parla di ext2 e dei suoi discendenti) e non cambia in seguito. L'equilibrio tra i blocchi dati e gli inode \u00e8 calcolato sulla base di dati statistici medi; nel nostro caso, avendo molti piccoli file, l'equilibrio dovrebbe spostarsi a favore del numero di inode \u2014 devono essercene di pi\u00f9.<\/p>\n<p>In Linux sono gi\u00e0 previste opzioni con diversi equilibri, e tutte queste configurazioni precalcolate si trovano nel file <code>\/etc\/mke2fs.conf<\/code>.<br \/>\nPertanto, durante l'inizializzazione 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 anche possibile specificare manualmente i parametri desiderati, se non ci sono soluzioni pronte.<\/p>\n<p>Maggiore dettagli sono descritti nei manuali per <code>mke2fs.conf<\/code> e <code>mke2fs<\/code>.<\/p>\n<p>Una caratteristica non trattata nell'articolo precedente \u00e8 che si pu\u00f2 specificare la dimensione del blocco dati. Ovviamente, per file di grandi dimensioni ha senso avere blocchi pi\u00f9 grandi, per file piccoli, invece, \u00e8 meglio avere blocchi pi\u00f9 piccoli. <\/p>\n<p>Tuttavia, \u00e8 importante tenere conto di una caratteristica interessante: l'architettura della CPU.<br \/>\nIn un certo momento, ho pensato che per i grandi file di foto avessi bisogno di un blocco pi\u00f9 grande. Era tutto a casa, su un NAS WD con architettura ARM. Non ci ho pensato due volte e ho impostato la dimensione del blocco a 8k o 16k invece del standard 4k, dopo aver misurato il risparmio. E tutto funzionava perfettamente fino al momento in cui il NAS si guast\u00f2, anche se il disco era integro. Mettendo il disco in un PC normale con un processore Intel, ho ricevuto una sorpresa: dimensione del blocco non supportata. Non ci siamo riusciti. I dati ci sono, tutto bene, ma non si possono leggere. I processori i386 e simili non possono gestire dimensioni di blocco che non corrispondono alla dimensione della pagina di memoria, la quale \u00e8 esattamente 4k. Alla fine, abbiamo dovuto usare utilit\u00e0 dal user space; \u00e8 stato tutto lento e triste, ma i dati sono stati salvati. Chi \u00e8 interessato \u2014 google per il nome dell\u2019utilit\u00e0 <code>fuseext2<\/code>. Morale: o pianificate tutto in anticipo, o non comportatevi da supereroe e usate le impostazioni standard per le casalinghe.<\/p>\n<p>UPD. A seguito del commento dell'utente <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/berez\/\" class=\"user_link\">berez<\/a><\/noindex> preciso che per i386 la dimensione del blocco non deve superare 4k, ma non deve necessariamente essere esattamente 4k, quindi sono ammissibili anche 1k e 2k.<\/p>\n<p>Dunque, come abbiamo risolto i problemi.<\/p>\n<p>Innanzitutto, ci siamo trovati di fronte al problema quando un disco multimille terabyte era pieno di dati, e non potevamo modificare la configurazione del filesystem.<\/p>\n<p>In secondo luogo, era necessario trovare una soluzione urgente.<\/p>\n<p>Alla fine, abbiamo concluso che dovevamo cambiare l'equilibrio, riducendo il numero di file.<br \/>\nPer ridurre il numero di file, abbiamo deciso di raggruppare i file in un unico archivio. Considerando la nostra specificit\u00e0, abbiamo accorpato in un solo archivio tutti i file di un certo lasso di tempo, eseguendo la compressione con un'attivit\u00e0 cron giornaliera di notte.<\/p>\n<p>Abbiamo scelto l'archivio zip. Nei commenti all'articolo precedente era stato suggerito tar, ma con esso c'\u00e8 una difficolt\u00e0: non ha un indice e i file sono memorizzati in modo continuo (non a caso \u00abtar\u00bb \u00e8 un'abbreviazione per \u00abTape Archive\u00bb, eredit\u00e0 dei supporti a nastro), cio\u00e8, se devi leggere un file alla fine dell'archivio, devi leggere tutto l'archivio, poich\u00e9 non ci sono offset per ogni file rispetto all'inizio dell'archivio. Pertanto, \u00e8 un'operazione lunga. Con zip \u00e8 tutto molto meglio: ha un indice e offset dei file all'interno dell'archivio, e il tempo di accesso a ogni file non dipende dalla sua posizione. Inoltre, nel nostro caso, \u00e8 possibile specificare l'opzione di compressione \u00ab0\u00bb, poich\u00e9 tutti i file erano gi\u00e0 stati compressi in gzip.<\/p>\n<p>I clienti scaricano i file tramite nginx, e secondo il vecchio API, viene semplicemente indicato il nome del file, ad esempio:<\/p>\n<pre><code class=\"plaintext\">http:\/\/www.server.com\/hydra\/20170416\/0453\/3bd24ae7-1df4-4d76-9d28-5b7fcb7fd8e5\n<\/code><\/pre>\n<p>\nPer estrarre i file al volo, abbiamo trovato e integrato 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 configurato due upstream.<\/p>\n<p>Il risultato \u00e8 stata la seguente configurazione:<\/p>\n<p><img decoding=\"async\" alt=\"Suggerimenti per lavorare con un gran numero di file di piccole dimensioni\" 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+)\/(\\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 la configurazione degli upstream sul 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 client si connette al front nginx<\/li>\n<li>Il front nginx cerca di restituire il file dal primo upstream, ovvero direttamente dal file system<\/li>\n<li>Se il file non esiste, cerca di restituire dal secondo upstream, che prova a trovare il file all'interno dell'archivio<\/li>\n<\/ul>\n<p><\/p>\n<h2>Il secondo problema: di nuovo \"No space left on device\"<\/h2>\n<p>\nQuesto \u00e8 il secondo problema con cui ci siamo trovati ad affrontare, quando ci sono molti file nella directory.<br \/>\nStiamo cercando di creare un file, il sistema si lamenta che non ci sia spazio. Cambiamo il nome del file e proviamo a crearlo di nuovo.<\/p>\n<p>Funziona.<\/p>\n<p>Appare pi\u00f9 o meno cos\u00ec:<\/p>\n<p><img decoding=\"async\" alt=\"Suggerimenti per lavorare con un gran numero di file di piccole dimensioni\" src=\"\/wp-content\/uploads\/2019\/08\/f365358b59bf81d450a236dfb58e4874.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIl controllo degli inode non ha dato risultati: ce ne sono molti disponibili. <br \/>\nIl controllo dello spazio - lo stesso.<br \/>\nAbbiamo pensato che potrebbero esserci troppi file nella directory, e che ci sia un limite, ma non \u00e8 cos\u00ec: Numero massimo di file per directory: ~1.3 \u00d7 10^20<\/p>\n<p>E anche un file pu\u00f2 essere creato, se si cambia il nome.<br \/>\nIn sintesi, il problema \u00e8 nel nome del file.<\/p>\n<p>Ulteriori ricerche hanno rivelato che il problema \u00e8 nell'algoritmo di hashing utilizzato per costruire l'indice della directory, con un numero elevato di file si osservano collisioni con tutte le conseguenze. Puoi leggere di pi\u00f9 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... la ricerca di un file per nome potrebbe diventare imprevedibilmente lunga mentre si scorrono 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 pu\u00f2 funzionare.<\/p>\n<p>Morale: avere molti file in una directory \u00e8 generalmente dannoso. Non \u00e8 una buona pratica.<\/p>\n<p>Di solito in questi casi si creano directory annidate, in base alle prime lettere del nome del file o ad altri parametri, ad esempio per date, nella maggior parte dei casi salva la situazione.<br \/>\nMa avere un numero elevato di piccoli file rimane problematico, anche se suddivisi in directory - perci\u00f2 vedi il primo problema.<\/p>\n<h2>Terzo problema: come vedere l'elenco dei file, se sono molti.<\/h2>\n<p>\nNella nostra situazione, avendo molti file, ci siamo comunque trovati ad affrontare il problema di come visualizzare il contenuto della directory.<\/p>\n<p>Soluzione standard \u2014 squadra <code>ls<\/code>.<br \/>\nOk, vediamo cosa otteniamo 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... sono un po' troppi. Inoltre, la maggior parte del tempo viene spesa nell'elaborazione dei file nello spazio utente, e non in quello 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 disabilitare l'ordinamento con <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 durante la gestione dei file<\/h2>\n<p>\nOccasionalmente ci si trova nella situazione in cui \u00e8 necessario copiare un sacco di file da una macchina a un'altra. Spesso il LA cresce in modo esponenziale, poich\u00e9 tutto dipende dalle prestazioni dei dischi stessi.<\/p>\n<p>La cosa pi\u00f9 sensata da fare \u00e8 utilizzare un SSD. \u00c8 davvero fantastico. L'unico problema \u00e8 il costo degli SSD di diversi terabyte.<\/p>\n<p>Ma se i dischi sono normali, i file devono essere copiati e si tratta anche di un sistema di produzione, dove un sovraccarico porta a lamentele dei clienti? Ci sono almeno due strumenti utili: <code>nicely<\/code> e <code>ionice<\/code>.<\/p>\n<p><code>nicely<\/code> \u2014 riduce la priorit\u00e0 del processo, quindi lo scheduler distribuisce pi\u00f9 quanti di tempo ad altri processi pi\u00f9 prioritari.<br \/>\nNella nostra esperienza, \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 regola di conseguenza la priorit\u00e0 dell'I\/O (programmazione I\/O)<\/p>\n<p>Se utilizzi RAID e ha improvvisamente bisogno di sincronizzarsi (dopo un riavvio non riuscito o se \u00e8 necessario ripristinare l'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 tal fine, puoi utilizzare questo 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 sempre gli stessi enormi quantitativi di file, che devono essere copiati 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>Soluzione standard: Rsync over SSH.<\/p>\n<p>\u00c8 una buona opzione, a meno che non sia necessario farlo ogni pochi secondi. E ci sono molti file. Anche se non si copiano, \u00e8 comunque necessario capire cosa \u00e8 cambiato, e confrontare diversi milioni di file implica tempo e carico sui dischi.<\/p>\n<p>Cio\u00e8, dobbiamo sapere subito cosa copiare, senza avviare il confronto ogni volta.<\/p>\n<p>Salvataggio \u2014 <code>lsyncd<\/code>. <code>Lsyncd<\/code> \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/axkibe.github.io\/lsyncd\/\">Daemon di sincronizzazione live (mirror)<\/a><\/noindex>. Funziona anch'esso tramite rsync, ma monitora ulteriormente il file system per eventuali modifiche utilizzando inotify e fsevents e avvia la copia solo per i file che sono stati creati o modificati.<\/p>\n<h2>Problema sei: come capire chi sta utilizzando i dischi<\/h2>\n<p>\nProbabilmente lo sanno tutti, ma per completezza: per monitorare il sottosistema dei dischi c'\u00e8 il comando <code>iotop<\/code> \u2013 simile a <code>top<\/code>, ma mostra i processi che utilizzano maggiormente i dischi.<\/p>\n<p><img decoding=\"async\" alt=\"Suggerimenti per lavorare con un gran numero di file di piccole dimensioni\" src=\"\/wp-content\/uploads\/2019\/08\/56612c618469ef340a31ae446d65ed4e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn effetti, il vecchio e caro top permette anche di capire se ci sono problemi con i dischi o meno. Ci sono due parametri pi\u00f9 adatti per questo: <b>Carico medio<\/b> e <b>IOwait<\/b>.<\/p>\n<p><img decoding=\"async\" alt=\"Suggerimenti per lavorare con un gran numero di file di piccole dimensioni\" src=\"\/wp-content\/uploads\/2019\/08\/01a0565947de65d13b0045f7180caf5d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIl primo mostra quanti processi sono in attesa di essere elaborati, solitamente pi\u00f9 di 2 \u00e8 gi\u00e0 un segnale di problemi. Durante il processo di copia attiva sui server di backup, tolleriamo fino a 6-8, dopo di che la situazione \u00e8 considerata anomala.<\/p>\n<p>Il secondo indica quanto il processore \u00e8 coinvolto nelle operazioni sui dischi. IOwait &gt;10% \u00e8 motivo di preoccupazione, anche se sui nostri server con un carico specifico possiamo avere stabilmente il 40-50%, ed \u00e8 davvero la norma.<\/p>\n<p>Concludo qui, anche se ci sono sicuramente molti aspetti che non ci siamo trovati ad affrontare, 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.0.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.0.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 piccoli file | 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}]}}