{"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\/fr\/blog\/administrirovanie\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov","title":{"rendered":"Astuces pour travailler avec un grand nombre de petits fichiers","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>L'id\u00e9e de cet article est n\u00e9e spontan\u00e9ment d'une discussion dans les commentaires d'un article. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/462849\/\">\u00abQuelques informations sur l'inode\u00bb<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Astuces pour travailler avec un grand nombre de petits fichiers\" src=\"\/wp-content\/uploads\/2019\/08\/e488f5985cfb0b3274f57f6baeeedf01.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEn effet, la sp\u00e9cificit\u00e9 interne du fonctionnement de nos services est de stocker un nombre consid\u00e9rable de petits fichiers. Actuellement, nous avons environ des centaines de t\u00e9raoctets de ces donn\u00e9es. Nous avons rencontr\u00e9 quelques pi\u00e8ges \u00e9vidents et moins \u00e9vidents et avons r\u00e9ussi \u00e0 naviguer \u00e0 travers eux.<\/p>\n<p>C'est pourquoi je partage notre exp\u00e9rience, cela pourrait \u00eatre utile \u00e0 quelqu'un.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Premier probl\u00e8me : \u00abAucun espace disponible sur le p\u00e9riph\u00e9rique\u00bb<\/h2>\n<p>\nComme mentionn\u00e9 dans l'article ci-dessus, le probl\u00e8me est qu'il y a des blocs libres dans le syst\u00e8me de fichiers, mais les inodes sont \u00e9puis\u00e9s.<\/p>\n<p>Le nombre d'inodes utilis\u00e9s et libres peut \u00eatre v\u00e9rifi\u00e9 avec la commande <code>df -ih<\/code>:<\/p>\n<p><img decoding=\"async\" alt=\"Astuces pour travailler avec un grand nombre de petits fichiers\" src=\"\/wp-content\/uploads\/2019\/08\/ceb86a22562aa08c8ffbbde2c2618545.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJe ne vais pas r\u00e9sumer l'article, en bref, sur le disque, il y a \u00e0 la fois des blocs pour les donn\u00e9es directement, ainsi que des blocs pour les m\u00e9tadonn\u00e9es, appel\u00e9s inodes (noeud d'index). Leur nombre est d\u00e9fini lors de l'initialisation du syst\u00e8me de fichiers (il s'agit d'ext2 et de ses descendants) et ne change pas par la suite. L'\u00e9quilibre entre les blocs de donn\u00e9es et les inodes est calcul\u00e9 \u00e0 partir des donn\u00e9es moyennes, dans notre cas, avec de nombreux petits fichiers, cet \u00e9quilibre doit pencher du c\u00f4t\u00e9 du nombre d'inodes \u2014 il doit y en avoir plus.<\/p>\n<p>Linux a d\u00e9j\u00e0 pr\u00e9vu des options avec un \u00e9quilibre diff\u00e9rent, et toutes ces configurations pr\u00e9d\u00e9finies se trouvent dans le fichier <code>\/etc\/mke2fs.conf<\/code>.<br \/>\nAinsi, lors de l'initialisation initiale du syst\u00e8me de fichiers via mke2fs, vous pouvez sp\u00e9cifier le profil n\u00e9cessaire.<\/p>\n<p>Voici quelques exemples extraits du fichier :<\/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>\nVous pouvez choisir le bon cas d'utilisation avec l'option &#171;-T&#187; lors de l'appel \u00e0 mke2fs. Vous pouvez \u00e9galement d\u00e9finir manuellement les param\u00e8tres n\u00e9cessaires si aucune solution pr\u00eate \u00e0 l'emploi n'est disponible.<\/p>\n<p>Davantage de d\u00e9tails sont d\u00e9crits dans les manuels pour <code>mke2fs.conf<\/code> et <code>mke2fs<\/code>.<\/p>\n<p>Une caract\u00e9ristique non abord\u00e9e dans l'article ci-dessus est qu'il est possible de d\u00e9finir la taille des blocs de donn\u00e9es. \u00c9videmment, pour les grands fichiers, il est logique d'avoir une plus grande taille de bloc, pour les petits fichiers \u2014 une plus petite. <\/p>\n<p>Cependant, il convient de prendre en compte une caract\u00e9ristique int\u00e9ressante : l'architecture du processeur.<br \/>\nUn jour, je me suis rendu compte que j'avais besoin d'une taille de bloc plus grande pour les gros fichiers photo. C'\u00e9tait dans un contexte domestique, sur un serveur de fichiers domestique WD bas\u00e9 sur l'architecture ARM. Sans trop r\u00e9fl\u00e9chir, j'ai d\u00e9fini la taille de bloc sur 8k ou 16k au lieu de 4k, apr\u00e8s avoir mesur\u00e9 les \u00e9conomies r\u00e9alis\u00e9es. Tout allait bien jusqu'\u00e0 ce que le serveur tombe en panne, alors que le disque \u00e9tait toujours fonctionnel. En pla\u00e7ant le disque dans un ordinateur classique avec un processeur Intel ordinaire, j'ai eu la surprise de d\u00e9couvrir que la taille de bloc n'\u00e9tait pas prise en charge. Les donn\u00e9es \u00e9taient l\u00e0, tout allait bien, mais il \u00e9tait impossible de les lire. Les processeurs i386 et similaires ne peuvent pas travailler avec des tailles de bloc qui ne correspondent pas \u00e0 la taille de la page m\u00e9moire, qui est exactement de 4k. En somme, cela a fini par n\u00e9cessiter l'utilisation d'outils de l'espace utilisateur, tout \u00e9tait lent et triste, mais nous avons r\u00e9cup\u00e9r\u00e9 les donn\u00e9es. Pour ceux que cela int\u00e9resse \u2014 recherchez le nom de l'outil <code>fuseext2<\/code>. La morale de l'histoire : soit anticiper tous les cas \u00e0 l'avance, soit ne pas se prendre pour un super-h\u00e9ros et utiliser les param\u00e8tres standard pour les utilisateurs moyens.<\/p>\n<p>UPD. Suite \u00e0 la remarque d'un utilisateur <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/berez\/\" class=\"user_link\">berez<\/a><\/noindex> , je pr\u00e9cise que pour i386, la taille du bloc ne doit pas d\u00e9passer 4k, mais elle n'a pas besoin d'\u00eatre rigoureusement de 4k, donc des tailles de 1k et 2k sont acceptables.<\/p>\n<p>Alors, comment avons-nous r\u00e9solu les probl\u00e8mes ?<\/p>\n<p>Tout d'abord, nous avons rencontr\u00e9 le probl\u00e8me lorsque le disque multi-t\u00e9rabyte \u00e9tait plein de donn\u00e9es, et que nous ne pouvions pas modifier la configuration du syst\u00e8me de fichiers.<\/p>\n<p>Deuxi\u00e8mement, une solution imm\u00e9diate \u00e9tait n\u00e9cessaire.<\/p>\n<p>En fin de compte, nous en sommes venus \u00e0 la conclusion qu'il fallait r\u00e9tablir l'\u00e9quilibre en r\u00e9duisant le nombre de fichiers.<br \/>\nPour diminuer le nombre de fichiers, il a \u00e9t\u00e9 d\u00e9cid\u00e9 de regrouper les fichiers dans une seule archive. Compte tenu de notre sp\u00e9cificit\u00e9, nous avons regroup\u00e9 dans une seule archive tous les fichiers sur une certaine p\u00e9riode, et nous avons effectu\u00e9 l'archivage via une t\u00e2che cron chaque nuit.<\/p>\n<p>Nous avons choisi le zip. Dans les commentaires de l'article pr\u00e9c\u00e9dent, un tar \u00e9tait propos\u00e9, mais il y a une difficult\u00e9 : il n'a pas de table des mati\u00e8res, et les fichiers y sont stock\u00e9s de mani\u00e8re s\u00e9quentielle (ce n'est pas par hasard que \u00ab tar \u00bb est l'abr\u00e9viation de \u00ab Tape Archive \u00bb, un h\u00e9ritage des lecteurs \u00e0 bande), c'est-\u00e0-dire que si vous devez lire un fichier \u00e0 la fin de l'archive, vous devez lire toute l'archive, car il n'y a pas de d\u00e9calages pour chaque fichier par rapport au d\u00e9but de l'archive. Cela rend l'op\u00e9ration longue. Avec le zip, tout est beaucoup mieux : il a cette table des mati\u00e8res et des d\u00e9calages de fichiers \u00e0 l'int\u00e9rieur de l'archive, et le temps d'acc\u00e8s \u00e0 chaque fichier ne d\u00e9pend pas de sa position. De plus, dans notre cas, nous pouvions d\u00e9finir l'option de compression \u00e0 \u00ab 0 \u00bb, car tous les fichiers avaient d\u00e9j\u00e0 \u00e9t\u00e9 compress\u00e9s avec gzip.<\/p>\n<p>Les clients r\u00e9cup\u00e8rent les fichiers via nginx, et selon l'ancienne API, il suffit d'indiquer simplement le nom du fichier, par exemple :<\/p>\n<pre><code class=\"plaintext\">http:\/\/www.server.com\/hydra\/20170416\/0453\/3bd24ae7-1df4-4d76-9d28-5b7fcb7fd8e5\n<\/code><\/pre>\n<p>\nPour d\u00e9compresser les fichiers \u00e0 la vol\u00e9e, nous avons trouv\u00e9 et connect\u00e9 le module nginx-unzip-module (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/youzee\/nginx-unzip-module\">https:\/\/github.com\/youzee\/nginx-unzip-module<\/a><\/noindex>) et configur\u00e9 deux upstreams.<\/p>\n<p>Le r\u00e9sultat a donn\u00e9 cette configuration :<\/p>\n<p><img decoding=\"async\" alt=\"Astuces pour travailler avec un grand nombre de petits fichiers\" src=\"\/wp-content\/uploads\/2019\/08\/56f5210669fecfe194ac5907d563aa1d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLes deux h\u00f4tes dans les param\u00e8tres \u00e9taient comme suit :<\/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>\nEt la configuration des upstreams sur le nginx en amont :<\/p>\n<pre><code class=\"json\">upstream storage {\n  server server.com:8081;\n  server server.com:8082;\n}\n<\/code><\/pre>\n<p>\nComment \u00e7a fonctionne :<\/p>\n<ul>\n<li>Le client va sur nginx frontal<\/li>\n<li>Le nginx frontal essaie de renvoyer le fichier du premier upstream, c'est-\u00e0-dire directement du syst\u00e8me de fichiers<\/li>\n<li>S'il n'y a pas de fichier \u2014 il essaie de le renvoyer du deuxi\u00e8me upstream, qui essaie de trouver le fichier \u00e0 l'int\u00e9rieur de l'archive<\/li>\n<\/ul>\n<p><\/p>\n<h2>Deuxi\u00e8me probl\u00e8me : encore \u00ab No space left on device \u00bb<\/h2>\n<p>\nC'est le deuxi\u00e8me probl\u00e8me auquel nous avons \u00e9t\u00e9 confront\u00e9s lorsque le r\u00e9pertoire contenait trop de fichiers.<br \/>\nNous essayons de cr\u00e9er un fichier, le syst\u00e8me se plaint qu'il n'y a pas de place. Nous changeons le nom du fichier et essayons \u00e0 nouveau de le cr\u00e9er.<\/p>\n<p>Cela fonctionne.<\/p>\n<p>\u00c7a ressemble \u00e0 peu pr\u00e8s \u00e0 \u00e7a :<\/p>\n<p><img decoding=\"async\" alt=\"Astuces pour travailler avec un grand nombre de petits fichiers\" src=\"\/wp-content\/uploads\/2019\/08\/f365358b59bf81d450a236dfb58e4874.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa v\u00e9rification des inodes n'a rien donn\u00e9 \u2014 il y en a beaucoup de libres. <br \/>\nLa v\u00e9rification de l'espace \u2014 c'est la m\u00eame chose.<br \/>\nNous avons pens\u00e9 qu'il y avait peut-\u00eatre trop de fichiers dans le r\u00e9pertoire, et il y a une limite \u00e0 cela, mais encore une fois non : Maximum number of files per directory: ~1.3 \u00d7 10^20<\/p>\n<p>Et on peut cr\u00e9er un fichier si l'on change le nom.<br \/>\nConclusion \u2014 le probl\u00e8me r\u00e9side dans le nom du fichier.<\/p>\n<p>Des recherches suppl\u00e9mentaires ont montr\u00e9 que le probl\u00e8me \u00e9tait li\u00e9 \u00e0 l'algorithme de hachage lors de la construction de l'index du r\u00e9pertoire ; avec un grand nombre de fichiers, des collusions se produisent avec toutes les cons\u00e9quences qui en d\u00e9coulent. Vous pouvez en lire plus ici : <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>Cette option peut \u00eatre d\u00e9sactiv\u00e9e, mais la recherche de fichiers par nom peut devenir impr\u00e9visible et tr\u00e8s longue lors de l'\u00e9num\u00e9ration de tous les fichiers. <\/p>\n<pre><code class=\"bash\"> tune2fs -O \"^dir_index\" \/dev\/sdb3\n<\/code><\/pre>\n<p>\nEn g\u00e9n\u00e9ral, cela peut fonctionner comme solution temporaire.<\/p>\n<p>Moralit\u00e9 : avoir beaucoup de fichiers dans un dossier est g\u00e9n\u00e9ralement une mauvaise id\u00e9e. Il ne faut pas faire cela.<\/p>\n<p>Dans de tels cas, il est habituel de cr\u00e9er des sous-dossiers, soit par les premi\u00e8res lettres du nom de fichier, soit selon d'autres param\u00e8tres, comme les dates ; dans la plupart des cas, cela aide.<br \/>\nMais le nombre total de petits fichiers reste un probl\u00e8me, m\u00eame s'ils sont organis\u00e9s dans des dossiers - reportez-vous au premier probl\u00e8me.<\/p>\n<h2>Troisi\u00e8me probl\u00e8me : comment voir la liste des fichiers quand il y en a beaucoup.<\/h2>\n<p>\nDans notre situation, o\u00f9 nous avons beaucoup de fichiers, nous avons de toute fa\u00e7on \u00e9t\u00e9 confront\u00e9s au probl\u00e8me de visualiser le contenu du r\u00e9pertoire.<\/p>\n<p>La solution standard est la commande. <code>ls<\/code>.<br \/>\nD'accord, voyons ce que cela donne avec 4 772 098 fichiers :<\/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 secondes\u2026 \u00e7a fait beaucoup. En effet, la plupart du temps est consomm\u00e9e par le traitement des fichiers dans l'espace utilisateur, et non par le travail du noyau.<\/p>\n<p>Mais il existe une 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 secondes. 10 fois plus rapide.<br \/>\nHourra !<\/p>\n<p><b>Mise \u00e0 jour.<\/b><\/p>\n<p>Une solution encore plus rapide d'un utilisateur <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/berez\/\" class=\"user_link\">berez<\/a><\/noindex> \u2013 d\u00e9sactiver le tri avec <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>Quatri\u00e8me probl\u00e8me : haute charge LA lors du travail avec des fichiers.<\/h2>\n<p>\nIl arrive parfois qu'il soit n\u00e9cessaire de copier un grand nombre de fichiers d'une machine \u00e0 une autre. Cela entra\u00eene souvent une augmentation significative de la charge LA, car cela d\u00e9pend fortement de la performance des disques eux-m\u00eames.<\/p>\n<p>Ce que l'on souhaite g\u00e9n\u00e9ralement, c'est utiliser des SSD. C'est vraiment g\u00e9nial. La seule question est le co\u00fbt des SSD multi-t\u00e9raoctets.<\/p>\n<p>Mais si les disques sont normaux, il faut copier les fichiers, et c'est un syst\u00e8me de production o\u00f9 une surcharge entra\u00eene des clients m\u00e9contents ? Il y a au moins deux outils utiles : <code>nice<\/code> et <code>ionice<\/code>.<\/p>\n<p><code>nice<\/code> \u2013 r\u00e9duit la priorit\u00e9 du processus, permettant ainsi au planificateur de r\u00e9partir plus de quanta de temps aux autres processus prioritaires.<br \/>\nDans notre pratique, nous avions l'habitude de fixer le niveau de nice au maximum (19 - c'est la priorit\u00e9 minimale, -20 (moins 20) - la priorit\u00e9 maximale).<\/p>\n<p><code>ionice<\/code> \u2013 ajuste donc la priorit\u00e9 du syst\u00e8me d'entr\u00e9e\/sortie (I\/O scheduling).<\/p>\n<p>Si vous utilisez RAID et qu'il a soudainement besoin de se synchroniser (apr\u00e8s un red\u00e9marrage \u00e9chou\u00e9 ou pour restaurer un tableau RAID apr\u00e8s le remplacement d'un disque), il peut \u00eatre judicieux, dans certaines situations, de r\u00e9duire la vitesse de synchronisation pour permettre aux autres processus de fonctionner de mani\u00e8re plus ad\u00e9quate. Voici une commande qui peut aider :<\/p>\n<pre><code class=\"bash\">\necho 1000 &gt; \/proc\/sys\/dev\/raid\/speed_limit_max\n<\/code><\/pre>\n<p><\/p>\n<h2>Probl\u00e8me cinq : Comment synchroniser des fichiers en temps r\u00e9el<\/h2>\n<p>\nNous avons encore d'\u00e9normes quantit\u00e9s de fichiers \u00e0 sauvegarder sur un deuxi\u00e8me serveur pour \u00e9viter\u2026 Les fichiers sont constamment \u00e9crits, donc pour minimiser les pertes, il faut les copier aussi rapidement que possible.<\/p>\n<p>Solution standard : Rsync sur SSH.<\/p>\n<p>C'est une bonne option, sauf si cela doit \u00eatre fait toutes les quelques secondes. Et il y a beaucoup de fichiers. M\u00eame si nous ne les copions pas, nous devons quand m\u00eame savoir ce qui a chang\u00e9, et comparer plusieurs millions de fichiers prend du temps et impose une charge sur les disques.<\/p>\n<p>C'est-\u00e0-dire que nous devons savoir imm\u00e9diatement ce qu'il faut copier, sans lancer une comparaison \u00e0 chaque fois.<\/p>\n<p>La solution est \u2014 <code>lsyncd<\/code>. <code>Lsyncd<\/code> \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/axkibe.github.io\/lsyncd\/\">D\u00e9mon de synchronisation en direct (Mirror)<\/a><\/noindex>. Il fonctionne \u00e9galement via rsync, mais surveille en plus le syst\u00e8me de fichiers pour d\u00e9tecter les changements en utilisant inotify et fsevents, et il lance la copie uniquement pour les fichiers qui ont \u00e9t\u00e9 ajout\u00e9s ou modifi\u00e9s.<\/p>\n<h2>Probl\u00e8me six : comment savoir qui charge les disques<\/h2>\n<p>\nCela doit \u00eatre connu de tous, mais pour une vue d'ensemble : pour surveiller le sous-syst\u00e8me de disque, il existe une commande <code>iotop<\/code> \u2014 semblable \u00e0 <code>top<\/code>, mais qui montre les processus utilisant le disque de mani\u00e8re la plus active.<\/p>\n<p><img decoding=\"async\" alt=\"Astuces pour travailler avec un grand nombre de petits fichiers\" src=\"\/wp-content\/uploads\/2019\/08\/56612c618469ef340a31ae446d65ed4e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAu fait, l'ancien bon top permet aussi de comprendre si nous avons des probl\u00e8mes avec les disques ou non. Pour cela, deux param\u00e8tres sont les plus appropri\u00e9s : <b>Load Average<\/b> et <b>IOwait<\/b>.<\/p>\n<p><img decoding=\"async\" alt=\"Astuces pour travailler avec un grand nombre de petits fichiers\" src=\"\/wp-content\/uploads\/2019\/08\/01a0565947de65d13b0045f7180caf5d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLe premier indique combien de processus sont en attente d'\u00eatre servis, g\u00e9n\u00e9ralement plus de 2 \u2014 cela indique d\u00e9j\u00e0 que quelque chose ne va pas. Lors d'une copie active sur des serveurs de sauvegarde, nous tol\u00e9rons jusqu'\u00e0 6-8, au-del\u00e0 de cela, la situation est consid\u00e9r\u00e9e comme anormale.<\/p>\n<p>Le second \u2014 combien le processeur est occup\u00e9 par les op\u00e9rations de disque. IOwait &gt;10% \u2014 c'est un motif de pr\u00e9occupation, bien que sur nos serveurs avec un profil de charge sp\u00e9cifique, cela soit r\u00e9guli\u00e8rement de 40-50%, et c'est vraiment la norme.<\/p>\n<p>Je vais m'arr\u00eater ici, bien qu'il y ait s\u00fbrement de nombreux points avec lesquels nous n'avons pas eu \u00e0 deal, j'attends avec impatience vos commentaires et vos descriptions de cas r\u00e9els int\u00e9ressants.<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.2 - 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\/fr\/blog\/administrirovanie\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\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\/fr\/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\udd47Trucs et astuces pour g\u00e9rer un grand nombre de petits fichiers | ProHoster","description":"L'id\u00e9e de cet article est n\u00e9e spontan\u00e9ment d'une discussion dans les commentaires de l'article \u00ab Quelques informations sur les inode \u00bb.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","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\/fr\/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\/fr\/wp-json\/wp\/v2\/posts\/36999","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=36999"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/36999\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/27728"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=36999"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=36999"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=36999"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}