{"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\/nl\/blog\/administrirovanie\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov","title":{"rendered":"Tips voor het werken met een groot aantal kleine bestanden","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Het idee voor dit artikel is spontaan ontstaan uit een discussie in de reacties op een artikel. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/462849\/\">\u00abWat je moet weten over inode\u00bb<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Tips voor het werken met een groot aantal kleine bestanden\" src=\"\/wp-content\/uploads\/2019\/08\/e488f5985cfb0b3274f57f6baeeedf01.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHet punt is dat een interne specificiteit van onze services het opslaan van enorm veel kleine bestanden is. Op dit moment hebben we zo'n honderden terabytes aan dergelijke gegevens. We zijn tegen een aantal voor de hand liggende en minder voor de hand liggende problemen aangelopen en hebben deze succesvol overwonnen.<\/p>\n<p>Daarom deel ik onze ervaring, hopelijk is het nuttig voor iemand.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Probleem \u00e9\u00e9n: \u00abGeen ruimte meer op het apparaat\u00bb<\/h2>\n<p>\nZoals genoemd in het eerder genoemde artikel, is het probleem dat er vrije blokken op het bestandssysteem zijn, maar dat de inodes op zijn.<\/p>\n<p>Je kunt het aantal gebruikte en beschikbare inodes controleren met het commando <code>df -ih<\/code>:<\/p>\n<p><img decoding=\"async\" alt=\"Tips voor het werken met een groot aantal kleine bestanden\" src=\"\/wp-content\/uploads\/2019\/08\/ceb86a22562aa08c8ffbbde2c2618545.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIk zal het artikel niet herhalen, kort samengevat houdt het in dat er op de schijf zowel blokken zijn voor gegevens als blokken voor metadata, de zogenaamde inodes (index node). Hun aantal wordt vastgesteld bij de initialisatie van het bestandssysteem (het betreft ext2 en zijn afgeleiden) en verandert daarna niet. De balans tussen gegevensblokken en inodes wordt berekend op basis van gemiddelde gegevens. In ons geval, met veel kleine bestanden, moet de balans verschuiven in de richting van het aantal inodes \u2014 er moeten er meer zijn.<\/p>\n<p>In Linux zijn al variaties met verschillende balansen voorzien, en al deze vooraf berekende configuraties zijn te vinden in het bestand <code>\/etc\/mke2fs.conf<\/code>.<br \/>\nDaarom kan bij de initi\u00eble initialisatie van het bestandssysteem via mke2fs het benodigde profiel worden aangegeven.<\/p>\n<p>Hier zijn enkele voorbeelden uit het bestand:<\/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>\nDe juiste gebruiksoptie kan worden geselecteerd met de optie &#171;-T&#187; bij het aanroepen van mke2fs. Ook kunnen de benodigde parameters handmatig worden opgegeven als er geen kant-en-klaar oplossing is.<\/p>\n<p>Meer details zijn beschreven in de handleidingen voor <code>mke2fs.conf<\/code> en <code>mke2fs<\/code>.<\/p>\n<p>Een aspect dat niet aan bod kwam in het eerder genoemde artikel \u2014 het is mogelijk om de grootte van de gegevensblokken aan te geven. Het is duidelijk dat voor grote bestanden een grotere blokgrootte logisch is, terwijl voor kleine bestanden een kleinere blokgrootte nuttiger is. <\/p>\n<p>Maar het is belangrijk om een interessant aspect in overweging te nemen, zoals de architectuur van de processor.<br \/>\nOp een gegeven moment vroeg ik me af dat ik voor grote foto's een grotere blokgrootte nodig had. Dit gebeurde thuis, op mijn WD-bestandsopslag met ARM-architectuur. Zonder er al te veel over na te denken, stelde ik de blokgrootte in op 8k of 16k in plaats van de standaard 4k, nadat ik de besparingen had gemeten. En alles ging perfect tot het moment dat de opslag zelf defect raakte, terwijl de schijf nog goed was. Toen ik de schijf in een normale computer met een Intel-processor plaatste, kreeg ik een verrassing: een niet-ondersteunde blokgrootte. Dat was het dan. De gegevens zijn er, alles is goed, maar ze zijn niet leesbaar. i386-processoren en soortgelijke kunnen niet omgaan met blokgroottes die niet overeenkomen met de paginagrootte in het geheugen, en die is precies 4k. Kortom, het eindigde met het gebruik van hulpmiddelen uit de gebruikersruimte; alles was langzaam en treurig, maar de gegevens zijn gered. Voor degenen die ge\u00efnteresseerd zijn \u2014 zoek op de naam van het hulpmiddel. <code>fuseext2<\/code>. Moraal: of denk aan alle gevallen van tevoren, of doe jezelf geen superheld voor en gebruik de standaardinstellingen voor huiseigenaren.<\/p>\n<p>UPD. Zoals opgemerkt door de gebruiker <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/berez\/\" class=\"user_link\">berez<\/a><\/noindex> , verduidelijk ik dat voor i386 de blokgrootte niet groter moet zijn dan 4k, maar niet noodzakelijkerwijs precies 4k moet zijn; 1k en 2k zijn ook toegestaan.<\/p>\n<p>Dus, zo hebben wij de problemen opgelost.<\/p>\n<p>Allereerst stuitten we op het probleem toen de meerterabyteschijf vol met gegevens was, en we konden de configuratie van het bestandssysteem niet veranderen.<\/p>\n<p>Ten tweede was er een dringende oplossing nodig.<\/p>\n<p>Uiteindelijk kwamen we tot de conclusie dat we de balans moesten aanpassen door het aantal bestanden te verminderen.<br \/>\nOm het aantal bestanden te verminderen, werd besloten om bestanden in \u00e9\u00e9n gezamenlijke archief te plaatsen. Gezien onze specificiteit, hebben we alle bestanden die binnen een bepaalde periode zijn gemaakt, in \u00e9\u00e9n archief geplaatst en hebben we de archivering dagelijks 's nachts uitgevoerd met een cron-taak.<\/p>\n<p>Gekozen voor een zip-archief. In de opmerkingen bij het vorige artikel werd tar voorgesteld, maar daarmee zijn er complicaties: het heeft geen inhoudsopgave en de bestanden liggen er in een stroom (niet voor niets is 'tar' een afkorting voor 'Tape Archive', een nalatenschap van magneetbanden), dat wil zeggen, als je een bestand aan het einde van het archief wilt lezen, moet je het hele archief doorlezen, omdat er geen offsets zijn voor elk bestand ten opzichte van het begin van het archief. Dit maakt het een langzame operatie. Bij zip is alles veel beter: het heeft die inhoudsopgave en offsets voor bestanden binnen het archief, en de toegangstijd tot elk bestand is niet afhankelijk van de plaatsing ervan. Bovendien kon in ons geval de compressie-optie '0' worden ingesteld, aangezien alle bestanden al van tevoren waren gecomprimeerd in gzip.<\/p>\n<p>Klanten halen bestanden op via nginx, en volgens de oude API, wordt simpelweg de bestandsnaam opgegeven, bijvoorbeeld zo:<\/p>\n<pre><code class=\"plaintext\">http:\/\/www.server.com\/hydra\/20170416\/0453\/3bd24ae7-1df4-4d76-9d28-5b7fcb7fd8e5\n<\/code><\/pre>\n<p>\nOm bestanden on the fly uit te pakken, hebben we de nginx-unzip-module gevonden en toegevoegd (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/youzee\/nginx-unzip-module\">https:\/\/github.com\/youzee\/nginx-unzip-module<\/a><\/noindex>) en twee upstreams ingesteld.<\/p>\n<p>Het resultaat was een configuratie als volgt:<\/p>\n<p><img decoding=\"async\" alt=\"Tips voor het werken met een groot aantal kleine bestanden\" src=\"\/wp-content\/uploads\/2019\/08\/56f5210669fecfe194ac5907d563aa1d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTwee hosts in de instellingen zagen er als volgt uit:<\/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>\nEn de configuratie van de upstreams op de bovenliggende nginx:<\/p>\n<pre><code class=\"json\">upstream storage {\n  server server.com:8081;\n  server server.com:8082;\n}\n<\/code><\/pre>\n<p>\nHoe het werkt:<\/p>\n<ul>\n<li>De klant gaat naar de front nginx<\/li>\n<li>Front nginx probeert het bestand van de eerste upstream te geven, dat wil zeggen, rechtstreeks vanaf het bestandssysteem<\/li>\n<li>Als het bestand er niet is, probeert het het van de tweede upstream te geven, die probeert het bestand binnen het archief te vinden<\/li>\n<\/ul>\n<p><\/p>\n<h2>Probleem twee: weer 'No space left on device'<\/h2>\n<p>\nDit is het tweede probleem waar we mee te maken kregen, toen er veel bestanden in de map stonden.<br \/>\nWe proberen een bestand te maken, het systeem klaagt dat er geen ruimte is. We veranderen de bestandsnaam en proberen het opnieuw.<\/p>\n<p>Het lukt.<\/p>\n<p>Het ziet er ongeveer zo uit:<\/p>\n<p><img decoding=\"async\" alt=\"Tips voor het werken met een groot aantal kleine bestanden\" src=\"\/wp-content\/uploads\/2019\/08\/f365358b59bf81d450a236dfb58e4874.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEen controle van inodes gaf niets, er zijn er veel vrij. <br \/>\nDe controle van de ruimte, hetzelfde.<br \/>\nWe dachten dat er misschien te veel bestanden in de map zijn, en daar is een limiet voor, maar opnieuw nee: Maximum aantal bestanden per map: ~1.3 \u00d7 10^20<\/p>\n<p>En een bestand kan worden aangemaakt, als je de naam verandert.<br \/>\nConclusie \u2014 het probleem zit in de bestandsnaam.<\/p>\n<p>Verdere zoektochten toonden aan dat het probleem in het hash-algoritme bij het construeren van de index van de map ligt, bij een groot aantal bestanden zijn er botsingen met alle gevolgen van dien. Meer gedetailleerde informatie is hier te lezen: <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>Je kunt deze optie uitschakelen, maar... het zoeken naar bestanden op naam kan onvoorspelbaar lang duren bij het doorlopen van alle bestanden. <\/p>\n<pre><code class=\"bash\"> tune2fs -O \"^dir_index\" \/dev\/sdb3\n<\/code><\/pre>\n<p>\nOver het algemeen kan dit als een tijdelijke oplossing werken.<\/p>\n<p>Les: veel bestanden in een map is meestal slecht. Dat moet je niet doen.<\/p>\n<p>In dergelijke gevallen is het gebruikelijk om geneste mappen te maken, op basis van de eerste letters van de bestandsnaam of op andere parameters, zoals datums; dit redt in de meeste gevallen de situatie.<br \/>\nMaar een hoge hoeveelheid kleine bestanden is nog steeds slecht, zelfs als ze over mappen verdeeld zijn \u2014 zie dan het eerste probleem.<\/p>\n<h2>Probleem drie: hoe een lijst van bestanden te bekijken als er veel zijn.<\/h2>\n<p>\nIn onze situatie, waarbij we veel bestanden hebben, stuiten we onvermijdelijk op het probleem hoe we de inhoud van de map kunnen bekijken.<\/p>\n<p>De standaardoplossing is de opdracht <code>ls<\/code>.<br \/>\nOk\u00e9, laten we eens kijken wat we krijgen met 4772098 bestanden:<\/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 seconden... dat is te veel. Het meeste tijd gaat verloren met het verwerken van bestanden in de gebruikersruimte en niet met de werking van de kernel.<\/p>\n<p>Maar er is een oplossing:<\/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 seconden. 10 keer sneller.<br \/>\nHoera!<\/p>\n<p><b>UPD.<\/b><\/p>\n<p>Een nog snellere oplossing van een gebruiker <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/berez\/\" class=\"user_link\">berez<\/a><\/noindex> \u2014 het uitschakelen van sortering in <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>Probleem vier: hoge LA bij het werken met bestanden<\/h2>\n<p>\nSoms ontstaat de situatie waarin je een hoop bestanden van de ene machine naar de andere moet kopi\u00ebren. Vaak resulteert dit in een aanzienlijke stijging van LA, omdat alles afhankelijk is van de prestaties van de schijven zelf.<\/p>\n<p>Het meest verstandige zou zijn om SSD's te gebruiken. Echt geweldig. De enige vraag is de prijs van multi-terabyte SSD's.<\/p>\n<p>Maar als de schijven standaard zijn, moeten bestanden worden gekopieerd, en dit is bovendien een productiesysteem, waar overbelasting leidt tot onvrede onder klanten? Er zijn minstens twee nuttige hulpmiddelen: <code>nice<\/code> en <code>ionice<\/code>.<\/p>\n<p><code>nice<\/code> \u2014 verlaagt de prioriteit van het proces, waardoor de scheduler meer tijdsquantums toekent aan andere, hogere prioriteitsprocessen.<br \/>\nIn onze praktijk hielp het om nice op het maximum in te stellen (19 is de minimale prioriteit, -20 (min 20) is de maximale).<\/p>\n<p><code>ionice<\/code> \u2014 corrigeert de invoer\/uitvoer prioriteit (I\/O scheduling)<\/p>\n<p>Als uw RAID-systeem onverwacht moet synchroniseren (na een mislukte reboot of als het RAID-array opnieuw moet worden hersteld na het vervangen van een schijf), kan het in sommige situaties zinvol zijn om de synchronisatiesnelheid te verlagen, zodat andere processen redelijk goed kunnen functioneren. Hiervoor kunt u het volgende commando gebruiken:<\/p>\n<pre><code class=\"bash\">\necho 1000 &gt; \/proc\/sys\/dev\/raid\/speed_limit_max\n<\/code><\/pre>\n<p><\/p>\n<h2>Probleem vijf: Hoe bestanden in real-time synchroniseren<\/h2>\n<p>\nWe hebben weer die enorme hoeveelheden bestanden die we moeten back-uppen naar een tweede server om\u2026 Bestanden worden voortdurend geschreven, dus om minimaal verlies te hebben, moeten ze zo snel mogelijk worden gekopieerd.<\/p>\n<p>Standaardoplossing: Rsync over SSH.<\/p>\n<p>Dit is een goede optie, tenzij het moet gebeuren om de paar seconden. En er zijn veel bestanden. Zelfs als ze niet gekopieerd worden, moeten we toch ergens begrijpen wat veranderd is, en het vergelijken van meerdere miljoenen bestanden kost tijd en belast de schijven.<\/p>\n<p>Dat wil zeggen, we moeten meteen weten wat we moeten kopi\u00ebren, zonder elke keer een vergelijking uit te voeren.<\/p>\n<p>De redding is - <code>lsyncd<\/code>. <code>Lsyncd<\/code> \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/axkibe.github.io\/lsyncd\/\">Live Syncing (Mirror) Daemon<\/a><\/noindex>. Het werkt ook via rsync, maar monitort daarnaast het bestandssysteem op wijzigingen met behulp van inotify en fsevents en start het kopi\u00ebren alleen voor die bestanden die zijn toegevoegd of gewijzigd.<\/p>\n<h2>Probleem zes: hoe te begrijpen wie de schijven belast<\/h2>\n<p>\nDit weet waarschijnlijk iedereen, maar voor de volledigheid: voor het monitoren van de schijf subsystem is er het commando <code>iotop<\/code> \u2014 vergelijkbaar met <code>top<\/code>, maar het toont de processen die het meest actief de schijven gebruiken.<\/p>\n<p><img decoding=\"async\" alt=\"Tips voor het werken met een groot aantal kleine bestanden\" src=\"\/wp-content\/uploads\/2019\/08\/56612c618469ef340a31ae446d65ed4e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOverigens kan de oude vertrouwde top ook helpen om te begrijpen of er problemen zijn met de schijven of niet. Hiervoor zijn er twee meest geschikte parameters: <b>Load Average<\/b> en <b>IOwait<\/b>.<\/p>\n<p><img decoding=\"async\" alt=\"Tips voor het werken met een groot aantal kleine bestanden\" src=\"\/wp-content\/uploads\/2019\/08\/01a0565947de65d13b0045f7180caf5d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDe eerste toont hoeveel processen in de wachtrij staan voor dienstverlening, meestal meer dan 2 \u2014 dan gaat er al iets niet goed. Bij actieve kopie\u00ebn naar backupsystemen tolereren we tot 6-8, daarna wordt de situatie als kritiek beschouwd.<\/p>\n<p>De tweede \u2014 hoe druk de processor is met schijfoperaties. IOwait &gt;10% \u2014 reden tot bezorgdheid, hoewel we op servers met een specifieke belasting gewoonlijk stabiel 40-50% hebben, en dat is echt normaal.<\/p>\n<p>Daarmee eindig ik, hoewel er ongetwijfeld veel momenten zijn waarmee we nog niet zijn geconfronteerd, ik kijk ernaar uit om commentaar en beschrijvingen van interessante echte gevallen te ontvangen.<br \/>\n<br \/>Bron: <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\/nl\/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=\"nl_NL\" \/>\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\/nl\/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\udd47 Hacks voor het werken met een groot aantal kleine bestanden | ProHoster","description":"Het idee voor dit artikel is spontaan ontstaan uit een discussie in de reacties op het artikel \u2018Enkele zaken over inode\u2019.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/36999","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=36999"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/36999\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media\/27728"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=36999"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=36999"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=36999"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}