{"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\/en\/blog\/administrirovanie\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov","title":{"rendered":"Hacks for working with a large number of small files","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>The idea for this article came up spontaneously from a discussion in the comments section of a previous article. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/462849\/\">A Few Words About Inodes<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Hacks for working with a large number of small files\" src=\"\/wp-content\/uploads\/2019\/08\/e488f5985cfb0b3274f57f6baeeedf01.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThe issue is that the internal specifics of our services involve storing a vast number of small files. Currently, we have hundreds of terabytes of such data. We have encountered some obvious and not-so-obvious pitfalls and have successfully navigated through them.<\/p>\n<p>Therefore, I\u2019m sharing our experience, which may be helpful to someone.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>The First Problem: \"No Space Left on Device\"<\/h2>\n<p>\nAs mentioned in the previously referenced article, the problem is that while there are free blocks on the file system, inodes have run out.<\/p>\n<p>You can check the number of used and free inodes with the command <code>df -ih<\/code>:<\/p>\n<p><img decoding=\"async\" alt=\"Hacks for working with a large number of small files\" src=\"\/wp-content\/uploads\/2019\/08\/ceb86a22562aa08c8ffbbde2c2618545.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI won\u2019t reiterate the article; to summarize, the disk has both blocks specifically for data and blocks for metadata, which are the inodes (index nodes). Their number is determined at the initialization of the file system (specifically referring to ext2 and its successors) and does not change thereafter. The balance between data blocks and inodes is calculated from average data; in our case, with many small files, this balance should shift towards having more inodes.<\/p>\n<p>Linux already provides options with different balances, and all these pre-calculated configurations are in the file <code>\/etc\/mke2fs.conf<\/code>.<br \/>\nThus, during the primary initialization of the file system via mke2fs, you can specify the desired profile.<\/p>\n<p>Here are a few examples from the 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>\nYou can select the desired use case using the option &#171;-T&#187; when calling mke2fs. You can also manually specify the required parameters if there is no ready-made solution.<\/p>\n<p>More details are described in the manuals for <code>mke2fs.conf<\/code> and <code>mke2fs<\/code>.<\/p>\n<p>An aspect not covered in the previously mentioned article is that you can specify the data block size. Obviously, larger blocks make sense for large files, while smaller blocks are preferable for smaller ones. <\/p>\n<p>However, it\u2019s important to consider an interesting aspect such as the processor architecture.<br \/>\nAt one point, I realized that for large photo files, I needed a larger block size. It was in a home environment, on a home file storage system named WD based on ARM architecture. Without much thought, I set the block size to either 8k or 16k instead of the standard 4k, having previously measured the savings. Everything was great until the storage itself failed, even though the disk was intact. When I placed the disk in a regular computer with a standard Intel processor, I got a surprise: unsupported block size. We were stuck. The data was there and everything seemed fine, but it was impossible to read it. i386 processors and similar ones cannot work with block sizes that do not match the memory page size, which is exactly 4k. In short, the situation ended with the use of user-space utilities, which were slow and disappointing, but the data was saved. If anyone is interested \u2014 look up the name of the utility. <code>fuseext2<\/code>. The moral: Either think through all scenarios in advance or don\u2019t act like a superhero and use standard settings for laypeople.<\/p>\n<p>UPD. As noted by the user <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/berez\/\" class=\"user_link\">berez<\/a><\/noindex> , I clarify that for i386, the block size must not exceed 4k, but it does not necessarily have to be exactly 4k; sizes of 1k and 2k are acceptable.<\/p>\n<p>So, how we solved the problems.<\/p>\n<p>First, we faced the issue when a multi-terabyte disk was filled with data, and we could not redesign the file system configuration.<\/p>\n<p>Second, a quick solution was required.<\/p>\n<p>As a result, we concluded that we needed to change the balance by reducing the number of files.<br \/>\nTo decrease the number of files, we decided to combine files into a single archive. Given our specifics, we grouped all files from a certain period into one archive and conducted archiving with a cron job nightly.<\/p>\n<p>We have chosen a zip archive. The previous article suggested tar, but it has one difficulty: it does not have a directory, and the files are processed in sequence (it's not called \"tar\" for nothing \u2014 it's short for \"Tape Archive\", a legacy from tape drives), that is, if you need to read a file at the end of the archive, you have to read the entire archive since there are no offsets for each file relative to the beginning of the archive. Therefore, this is a lengthy operation. In zip, everything is much better: it has that very directory and file offsets inside the archive, and the access time to each file does not depend on its location. In our case, we could set the compression option to \"0\", as all the files have already been compressed in gzip.<\/p>\n<p>Clients retrieve files through nginx, and according to the old API, only the file name is specified, for example:<\/p>\n<pre><code class=\"plaintext\">http:\/\/www.server.com\/hydra\/20170416\/0453\/3bd24ae7-1df4-4d76-9d28-5b7fcb7fd8e5\n<\/code><\/pre>\n<p>\nTo unpack files on the fly, we found and connected the nginx-unzip-module (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/youzee\/nginx-unzip-module\">https:\/\/github.com\/youzee\/nginx-unzip-module<\/a><\/noindex>) and configured two upstreams.<\/p>\n<p>As a result, we ended up with the following configuration:<\/p>\n<p><img decoding=\"async\" alt=\"Hacks for working with a large number of small files\" src=\"\/wp-content\/uploads\/2019\/08\/56f5210669fecfe194ac5907d563aa1d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThe two hosts in the settings looked like this:<\/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>\nAnd the configuration of the upstreams on the higher-level 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>\nHow it works:<\/p>\n<ul>\n<li>The client goes to the front nginx<\/li>\n<li>Front nginx tries to serve the file from the first upstream, that is, directly from the file system<\/li>\n<li>If the file is not there \u2014 it tries to serve from the second upstream, which attempts to find the file inside the archive<\/li>\n<\/ul>\n<p><\/p>\n<h2>The second problem: again \"No space left on device\"<\/h2>\n<p>\nThis is the second issue we encountered when there are many files in the directory.<br \/>\nWe try to create a file, the system complains that there is no space. We change the file name and try to create it again.<\/p>\n<p>It works.<\/p>\n<p>It looks something like this:<\/p>\n<p><img decoding=\"async\" alt=\"Hacks for working with a large number of small files\" src=\"\/wp-content\/uploads\/2019\/08\/f365358b59bf81d450a236dfb58e4874.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nChecking inodes yielded nothing \u2014 there are many free. <br \/>\nChecking space \u2014 the same.<br \/>\nWe thought maybe there are too many files in the directory, and there is a limit on this, but again no: Maximum number of files per directory: ~1.3 \u00d7 10^20<\/p>\n<p>And it is possible to create a file if you change the name.<br \/>\nThe conclusion is that the problem lies in the file name.<\/p>\n<p>Further searches showed that the issue is with the hashing algorithm when building the directory index; with a large number of files, collisions are observed, along with all the consequences. You can read more about it here: <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>This option can be disabled, but... searching for a file by name may become unpredictably lengthy while scanning through all files. <\/p>\n<pre><code class=\"bash\"> tune2fs -O \"^dir_index\" \/dev\/sdb3\n<\/code><\/pre>\n<p>\nIn general, as a temporary solution, it might work.<\/p>\n<p>Moral: having many files in a directory is usually a bad idea. It's not advisable.<\/p>\n<p>Typically, nested directories are created based on the first letters of the file name or other parameters, such as dates; in most cases, this helps.<br \/>\nHowever, the overall number of small files is still problematic, even if they are categorized into directories \u2014 then refer to the first issue.<\/p>\n<h2>Problem three: how to view a list of files if there are many<\/h2>\n<p>\nIn our situation, where we have many files, we inevitably face the issue of how to view the contents of a directory.<\/p>\n<p>The standard solution is the command <code>ls<\/code>.<br \/>\nOkay, let's see the result with 4,772,098 files:<\/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 seconds... that's a bit much. The main time is spent processing files in user space, not on kernel work.<\/p>\n<p>But there is a solution:<\/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 seconds. 10 times faster.<br \/>\nHooray!<\/p>\n<p><b>UPD.<\/b><\/p>\n<p>An even faster solution from the user <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/berez\/\" class=\"user_link\">berez<\/a><\/noindex> \u2014 disabling sorting with <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 four: high LA when working with files<\/h2>\n<p>\nAt times, there's a need to copy a bunch of files from one machine to another. Often, this results in a significant increase in LA, as it heavily depends on the performance of the disks themselves.<\/p>\n<p>The most reasonable choice is to use SSDs. Truly great. The only question is the cost of multi-terabyte SSDs.<\/p>\n<p>But if the disks are ordinary, files need to be copied, and this is also a production system where overload leads to unhappy client complaints? There are at least two useful tools: <code>nice<\/code> and <code>ionice<\/code>.<\/p>\n<p><code>nice<\/code> \u2014 reduces the priority of the process, hence the scheduler allocates more time quanta to other, higher-priority processes.<br \/>\nIn our practice, setting nice to the maximum helped (19 is the minimum priority, -20 is the maximum).<\/p>\n<p><code>ionice<\/code> \u2014 correspondingly adjusts input\/output priority (I\/O scheduling)<\/p>\n<p>If you are using RAID and it suddenly needs to sync (after a failed reboot or if RAID recovery is needed after a disk replacement), in certain situations it makes sense to reduce the sync speed so that other processes can function adequately. You can use the following command to do this:<\/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 five: How to synchronize files in real-time<\/h2>\n<p>\nWe have the same massive amounts of files that need to be backed up to the second server to avoid\u2026 Files are constantly being written, so in order to minimize loss, they need to be copied as quickly as possible.<\/p>\n<p>Standard solution: Rsync over SSH.<\/p>\n<p>This is a good option, unless you need to do it every few seconds. With so many files, even if you don\u2019t copy them \u2014 you still need to know what has changed, and comparing several million files takes time and puts load on the disks.<\/p>\n<p>That is, we need to know right away what needs to be copied, without running comparisons every time.<\/p>\n<p>The solution is \u2014 <code>lsyncd<\/code>. <code>is a daemon that watches for changes in a local directory, aggregates them, and after a certain period, starts rsync to synchronize them. Details and setup are described in the post \"<\/code> \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/axkibe.github.io\/lsyncd\/\">Live Syncing (Mirror) Daemon<\/a><\/noindex>. It also works through rsync, but additionally monitors the file system for changes using inotify and fsevents, initiating copying only for those files that have appeared or changed.<\/p>\n<h2>Problem six: how to understand who is loading the disks<\/h2>\n<p>\nThis is probably known to everyone, but for completeness: there is a command for monitoring the disk subsystem <code>iotop<\/code> \u2014 similar to <code>top<\/code>, which shows the processes that are most actively using the disks.<\/p>\n<p><img decoding=\"async\" alt=\"Hacks for working with a large number of small files\" src=\"\/wp-content\/uploads\/2019\/08\/56612c618469ef340a31ae446d65ed4e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBy the way, the old trusty top also allows you to understand if there are disk problems or not. There are two most relevant parameters for this: <b>Load Average<\/b> and <b>IOwait<\/b>.<\/p>\n<p><img decoding=\"async\" alt=\"Hacks for working with a large number of small files\" src=\"\/wp-content\/uploads\/2019\/08\/01a0565947de65d13b0045f7180caf5d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThe first shows how many processes are waiting to be served; generally, more than 2 means something is going wrong. During active backups to the server, we allow up to 6-8; after that, the situation is considered abnormal.<\/p>\n<p>The second indicates how busy the CPU is with disk operations. IOwait &gt;10% is a cause for concern, although on servers with specific loads we consistently see 40-50%, which is actually normal.<\/p>\n<p>I will conclude here, although there are likely many issues we have not encountered, and I will gladly await comments and descriptions of interesting real cases.<br \/>\n<br \/>Source: <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\/en\/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=\"en_US\" \/>\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\/en\/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\udd47Tips for Working with a Large Number of Small Files | ProHoster","description":"The idea for the article came about spontaneously from a discussion in the comments on the article \"A Few Things About Inodes.\"","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","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\/en\/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\/en\/wp-json\/wp\/v2\/posts\/36999","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/comments?post=36999"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/36999\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media\/27728"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=36999"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=36999"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=36999"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}