{"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\/da\/blog\/administrirovanie\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov","title":{"rendered":"Tips til arbejde med et stort antal sm\u00e5 filer","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ideen til artiklen opstod spontant fra en diskussion i kommentarerne til artiklen <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/462849\/\">\u201eNoget om inode\u201c<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Tips til arbejde med et stort antal sm\u00e5 filer\" src=\"\/wp-content\/uploads\/2019\/08\/e488f5985cfb0b3274f57f6baeeedf01.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDet er s\u00e5dan, at den interne specifikation af vores services er opbevaringen af enorme m\u00e6ngder sm\u00e5 filer. Lige nu har vi omkring flere hundrede terabyte af s\u00e5danne data. Og vi er st\u00f8dt p\u00e5 nogle \u00e5benlyse og ikke s\u00e5 \u00e5benlyse problemer og har heldigvis klaret os forbi dem.<\/p>\n<p>Derfor deler jeg vores erfaring, m\u00e5ske kan den v\u00e6re til hj\u00e6lp for nogen.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Problem nummer et: \u201eIngen plads tilbage p\u00e5 enheden\u201c<\/h2>\n<p>\nSom n\u00e6vnt i den ovenfor n\u00e6vnte artikel, er problemet, at der er ledige blokke p\u00e5 filsystemet, men at inodes er udt\u00f8mt.<\/p>\n<p>Antallet af brugte og ledige inodes kan tjekkes med kommandoen <code>df -ih<\/code>:<\/p>\n<p><img decoding=\"async\" alt=\"Tips til arbejde med et stort antal sm\u00e5 filer\" src=\"\/wp-content\/uploads\/2019\/08\/ceb86a22562aa08c8ffbbde2c2618545.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJeg vil ikke gentage artiklen, men kort sagt er der p\u00e5 disken b\u00e5de blokke direkte til data og blokke til metadata, som er inodes (indeksnoder). Deres antal bestemmes ved initialisering af filsystemet (b\u00e5de ext2 og dens efterkommere), og derefter \u00e6ndres det ikke. Balancen mellem datablokke og inodes beregnes udfra gennemsnitsdata, men i vores tilf\u00e6lde, hvor der er mange sm\u00e5 filer, b\u00f8r balancen skubbes i retning af antallet af inodes - der skal v\u00e6re flere af dem.<\/p>\n<p>I Linux er der allerede forudsete muligheder med forskellig balance, og alle disse forudberegnede konfigurationer findes i filen <code>\/etc\/mke2fs.conf<\/code>.<br \/>\nDerfor kan man angive den \u00f8nskede profil ved den prim\u00e6re initialisering af filsystemet via mke2fs.<\/p>\n<p>Her er nogle eksempler fra filen:<\/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>\nDu kan v\u00e6lge den \u00f8nskede anvendelse ved hj\u00e6lp af indstillingen &#171;-T&#187; ved kald af mke2fs. Du kan ogs\u00e5 manuelt angive de n\u00f8dvendige parametre, hvis der ikke er en klar l\u00f8sning.<\/p>\n<p>Flere detaljer er beskrevet i manualerne for <code>mke2fs.conf<\/code> og <code>mke2fs<\/code>.<\/p>\n<p>En funktion, der ikke er ber\u00f8rt i den ovenn\u00e6vnte artikel, er muligheden for at angive st\u00f8rrelsen p\u00e5 datablokken. Det er \u00e5benlyst, at for store filer giver det mening med en st\u00f8rre blokst\u00f8rrelse, for sm\u00e5 filer med en mindre. <\/p>\n<p>Men man skal tage h\u00f8jde for en interessant egenskab, som er processorarkitekturen.<br \/>\nEngang t\u00e6nkte jeg, at jeg havde brug for en st\u00f8rre blokst\u00f8rrelse til store fotofiler. Det var i hjemmemilj\u00f8et p\u00e5 en WD-filopbevaring baseret p\u00e5 ARM-arkitektur. Uden at t\u00e6nke n\u00e6rmere over det satte jeg blokst\u00f8rrelsen til enten 8k eller 16k i stedet for den standard 4k, efter at jeg havde m\u00e5lt besparelsen. Og alt var vidunderligt, indtil lageret pludselig svigtede, selvom disken stadig virkede. Da jeg satte disken i en almindelig computer med en almindelig Intel-processor, fik jeg en overraskelse: underst\u00f8ttet blokst\u00f8rrelse. Datan er der, alt ser godt ud, men det er umuligt at l\u00e6se det. i386-processorer og lignende kan ikke arbejde med blokst\u00f8rrelser, der ikke svarer til st\u00f8rrelsen p\u00e5 hukommelsessiden, som netop er 4k. Alt i alt endte det med at bruge v\u00e6rkt\u00f8jer fra brugerrummet; alt var langsomt og trist, men vi reddede data. For dem, der er interesserede \u2014 goggle efter navnet p\u00e5 v\u00e6rkt\u00f8jet. <code>fuseext2<\/code>. Moralen er: enten t\u00e6nke p\u00e5 alle scenarier p\u00e5 forh\u00e5nd, eller ikke opf\u00f8re sig som en superhelt og bruge standardindstillingerne til hjemmebrugere.<\/p>\n<p>UPD. If\u00f8lge brugerens bem\u00e6rkning <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/berez\/\" class=\"user_link\">berez<\/a><\/noindex> pr\u00e6ciserer jeg, at for i386 m\u00e5 blokst\u00f8rrelsen ikke overstige 4k, men beh\u00f8ver ikke n\u00f8dvendigvis at v\u00e6re pr\u00e6cis 4k, det vil sige 1k og 2k er tilladt.<\/p>\n<p>S\u00e5dan l\u00f8ste vi problemerne.<\/p>\n<p>For det f\u00f8rste st\u00f8dte vi p\u00e5 problemet, da den mange terabyte store disk var fyldt med data, og vi kunne ikke \u00e6ndre konfigurationen af filsystemet.<\/p>\n<p>For det andet var der brug for en hurtig l\u00f8sning.<\/p>\n<p>Vi kom derfor frem til, at vi skulle \u00e6ndre balancen ved at mindske antallet af filer.<br \/>\nFor at reducere antallet af filer blev det besluttet at samle filerne i et f\u00e6lles arkiv. I betragtning af vores specifik, samlede vi alle filer i et arkiv for en bestemt tidsperiode, og vi udf\u00f8rte arkiveringen med en cron-opgave hver nat.<\/p>\n<p>Valgt zip-arkiv. I kommentarerne til den tidligere artikel blev tar foresl\u00e5et, men der er en udfordring: det har ikke et indholdsfortegnelse, og filerne opbevares i en fortl\u00f8bende str\u00f8m (og det er ikke for ingenting, at \"tar\" er en forkortelse for \"Tape Archive\", et levn fra b\u00e5ndopbevaring), dvs. hvis man skal l\u00e6se en fil i slutningen af arkivet, skal man l\u00e6se hele arkivet, da der ikke er offsets for hver fil i forhold til arkivets begyndelse. Derfor er det en lang operation. I zip er alt meget bedre: det har det \u00f8nskede indholdsfortegnelse og offsets for filerne inden i arkivet, og adgangstiden til hver fil er uafh\u00e6ngig af dens placering. I vores tilf\u00e6lde kunne vi desuden angive kompressionsmuligheden til \"0\", da alle filer allerede var komprimeret i gzip.<\/p>\n<p>Kunderne henter filer via nginx, og i henhold til det gamle API angives blot filnavnet, f.eks. s\u00e5ledes:<\/p>\n<pre><code class=\"plaintext\">http:\/\/www.server.com\/hydra\/20170416\/0453\/3bd24ae7-1df4-4d76-9d28-5b7fcb7fd8e5\n<\/code><\/pre>\n<p>\nFor at dekomprimere filer on-the-fly fandt vi og tilsluttede nginx-unzip-module (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/youzee\/nginx-unzip-module\">https:\/\/github.com\/youzee\/nginx-unzip-module<\/a><\/noindex>) og indstillede to upstreams.<\/p>\n<p>Resultatet blev en konfiguration som denne:<\/p>\n<p><img decoding=\"async\" alt=\"Tips til arbejde med et stort antal sm\u00e5 filer\" src=\"\/wp-content\/uploads\/2019\/08\/56f5210669fecfe194ac5907d563aa1d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDe to v\u00e6rter i indstillingerne s\u00e5 s\u00e5ledes ud:<\/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>\nOg konfigurationen af upstreams p\u00e5 den overordnede 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>\nS\u00e5dan fungerer det:<\/p>\n<ul>\n<li>Klienten g\u00e5r til front nginx<\/li>\n<li>Front nginx fors\u00f8ger at sende filen fra den f\u00f8rste upstream, dvs. direkte fra filsystemet<\/li>\n<li>Hvis filen ikke er tilg\u00e6ngelig \u2014 fors\u00f8ger den at sende fra den anden upstream, som leder efter filen inden i arkivet<\/li>\n<\/ul>\n<p><\/p>\n<h2>Det andet problem: igen \"No space left on device\"<\/h2>\n<p>\nDette er det andet problem, vi st\u00f8dte p\u00e5, n\u00e5r der er mange filer i kataloget.<br \/>\nVi fors\u00f8ger at oprette en fil, men systemet klager over, at der ikke er plads. Vi \u00e6ndrer filnavnet og pr\u00f8ver at oprette det igen.<\/p>\n<p>Det virker.<\/p>\n<p>Ser omtrent s\u00e5dan her ud:<\/p>\n<p><img decoding=\"async\" alt=\"Tips til arbejde med et stort antal sm\u00e5 filer\" src=\"\/wp-content\/uploads\/2019\/08\/f365358b59bf81d450a236dfb58e4874.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKontrol af inodes gav ingen resultater \u2014 der er mange ledige. <br \/>\nPladskontrol \u2014 det samme.<br \/>\nVi t\u00e6nkte, at der m\u00e5ske var for mange filer i kataloget, og at der er en begr\u00e6nsning, men igen ikke: Maximum number of files per directory: ~1.3 \u00d7 10^20<\/p>\n<p>Og filen kan oprettes, hvis man \u00e6ndrer navnet.<br \/>\nKonklusion \u2014 problemet ligger i filnavnet.<\/p>\n<p>Yderligere unders\u00f8gelser viste, at problemet l\u00e5 i hash-algoritmen, n\u00e5r der bygges en indeksering af kataloget, da der er et stort antal filer, der observeres sammenfald med alle de konsekvenser, der f\u00f8lger. Man kan l\u00e6se mere her: <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>Du kan deaktivere denne mulighed, men... s\u00f8gningen efter en fil efter navn kan blive uforudsigeligt lang, n\u00e5r alle filer gennemg\u00e5s. <\/p>\n<pre><code class=\"bash\"> tune2fs -O \"^dir_index\" \/dev\/sdb3\n<\/code><\/pre>\n<p>\nGenerelt kan det virke som en midlertidig l\u00f8sning.<\/p>\n<p>Moralen: mange filer i en mappe er som regel en d\u00e5rlig id\u00e9. Det b\u00f8r man undg\u00e5.<\/p>\n<p>I s\u00e5danne tilf\u00e6lde opretter man som regel underkataloger baseret p\u00e5 de f\u00f8rste bogstaver i filnavnet eller efter andre parametre, for eksempel efter datoer; i de fleste tilf\u00e6lde hj\u00e6lper det.<br \/>\nMen det samlede antal sm\u00e5 filer er stadig et problem, selvom de er opdelt i mapper \u2014 s\u00e5 se p\u00e5 det f\u00f8rste problem.<\/p>\n<h2>Problem tre: hvordan ser man en liste over filer, hvis der er mange?<\/h2>\n<p>\nI vores situation, n\u00e5r vi har mange filer, st\u00f8der vi p\u00e5 problemet med at se indholdet af en mappe.<\/p>\n<p>Den standardl\u00f8sning er kommandoen <code>ls<\/code>.<br \/>\nOkay, lad os se, hvad der sker med 4772098 filer:<\/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 sekunder... det vil v\u00e6re for meget. Og det meste af tiden g\u00e5r med at behandle filer i brugeromr\u00e5det, ikke p\u00e5 selve kernen.<\/p>\n<p>Men der er en l\u00f8sning:<\/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 sekunder. 10 gange hurtigere.<br \/>\nHurra!<\/p>\n<p><b>UPD.<\/b><\/p>\n<p>Endnu en hurtigere l\u00f8sning fra en bruger <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/berez\/\" class=\"user_link\">berez<\/a><\/noindex> \u2014 deaktivering af sorteringen hos <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>Problem fire: h\u00f8j LA ved h\u00e5ndtering af filer<\/h2>\n<p>\nDer opst\u00e5r j\u00e6vnligt situationer, hvor man skal kopiere en masse filer fra \u00e9n maskine til en anden. Ofte stiger LA markant, da det hele afh\u00e6nger af diskens ydeevne.<\/p>\n<p>Det mest fornuftige ville v\u00e6re at bruge SSD. Virkelig fantastisk. Sp\u00f8rgsm\u00e5let er dog prisen p\u00e5 manges terabytes SSD.<\/p>\n<p>Men hvis diskene er almindelige, skal filer kopieres, og det er desuden en produktionssystem, hvor overbelastning f\u00f8rer til utilfredshed fra kunderne? Der er mindst to nyttige v\u00e6rkt\u00f8jer: <code>nice<\/code> og <code>ionice<\/code>.<\/p>\n<p><code>nice<\/code> \u2014 reducerer processens prioritet, hvilket g\u00f8r, at scheduler giver flere tidskvoter til andre, mere prioriterede processer.<br \/>\nI vores erfaring har det hjulpet at s\u00e6tte nice til maksimum (19 \u2014 det mindste prioritet, -20 (minus 20) \u2014 maksimum).<\/p>\n<p><code>ionice<\/code> \u2014 justerer tilsvarende input\/output prioriteten (I\/O scheduling)<\/p>\n<p>Hvis du bruger RAID, og det pludselig har brug for at synkronisere (efter en mislykket genstart eller hvis RAID-arrayet skal gendannes efter udskiftning af en disk), giver det i visse situationer mening at s\u00e6nke synkroniseringshastigheden, s\u00e5 andre processer kan fungere nogenlunde ordentligt. Dette kan opn\u00e5s med f\u00f8lgende kommando:<\/p>\n<pre><code class=\"bash\">\necho 1000 &gt; \/proc\/sys\/dev\/raid\/speed_limit_max\n<\/code><\/pre>\n<p><\/p>\n<h2>Problem nummer fem: Hvordan synkroniserer man filer i realtid<\/h2>\n<p>\nVi har de samme store m\u00e6ngder filer, der skal sikkerhedskopieres til en anden server for at undg\u00e5\u2026 Filer skrives konstant, s\u00e5 for at minimere tab skal de kopieres s\u00e5 hurtigt som muligt.<\/p>\n<p>Standardl\u00f8sning: Rsync over SSH.<\/p>\n<p>Det er en god mulighed, medmindre det kun skal g\u00f8res hvert par sekunder. Og der er mange filer. Selv hvis de ikke skal kopieres \u2014 skal man stadig p\u00e5 en eller anden m\u00e5de forst\u00e5, hvad der er \u00e6ndret, og at sammenligne flere millioner filer tager tid og belaster disken.<\/p>\n<p>Det vil sige, at vi skal vide med det samme, hvad der skal kopieres, uden at sammenligningen skal k\u00f8res hver gang.<\/p>\n<p>Redningen er \u2014 <code>lsyncd<\/code>. <code>Lsyncd<\/code> \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/axkibe.github.io\/lsyncd\/\">Live Syncing (Mirror) Daemon<\/a><\/noindex>. Den fungerer ogs\u00e5 via rsync, men den overv\u00e5ger desuden filsystemet for \u00e6ndringer ved hj\u00e6lp af inotify og fsevents og starter kun kopieringen af de filer, der er blevet tilf\u00f8jet eller \u00e6ndret.<\/p>\n<h2>Problem nummer seks: hvordan man forst\u00e5r, hvem der belaster disken<\/h2>\n<p>\nDet ved sikkert alle, men alligevel for fuldst\u00e6ndighedens skyld: til overv\u00e5gning af diskundersystemet findes kommandoen <code>iotop<\/code> \u2014 ligesom <code>top<\/code>, men viser de processer, der aktivt bruger disken mest.<\/p>\n<p><img decoding=\"async\" alt=\"Tips til arbejde med et stort antal sm\u00e5 filer\" src=\"\/wp-content\/uploads\/2019\/08\/56612c618469ef340a31ae446d65ed4e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDesuden g\u00f8r den gamle gode top det ogs\u00e5 muligt at forst\u00e5, om der er problemer med disken eller ej. Der er to parametre, der er mest relevante: <b>Load Average<\/b> og <b>IOwait<\/b>.<\/p>\n<p><img decoding=\"async\" alt=\"Tips til arbejde med et stort antal sm\u00e5 filer\" src=\"\/wp-content\/uploads\/2019\/08\/01a0565947de65d13b0045f7180caf5d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDen f\u00f8rste viser, hvor mange processer der venter p\u00e5 betjening; normalt, hvis der er mere end 2, er der allerede noget, der ikke fungerer korrekt. Ved aktiv kopiering til backup-servere tillader vi op til 6-8, hvorefter situationen betragtes som unormal.<\/p>\n<p>Den anden viser, hvor meget CPU'en er brugt p\u00e5 diskoperationer. IOwait &gt;10% \u2014 er en grund til bekymring, selvom vi p\u00e5 servere med specifik belastningsprofil stabilt kan have 40-50%, og det er reelt en norm.<\/p>\n<p>Jeg vil afslutte her, selvom der helt sikkert er mange aspekter, som vi ikke har v\u00e6ret udsat for, og jeg ser frem til kommentarer og beskrivelser af interessante virkelige sager.<br \/>\n<br \/>Kilde: <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\/da\/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=\"da_DK\" \/>\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\/da\/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 til at arbejde med et stort antal sm\u00e5 filer | ProHoster","description":"Id\u00e9en til artiklen opstod impulsivt fra en diskussion i kommentarerne til artiklen \"Noget om inode\".","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/36999","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=36999"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/36999\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/27728"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=36999"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=36999"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=36999"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}