{"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\/cs\/blog\/administrirovanie\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov","title":{"rendered":"Tipy pro pr\u00e1ci s velk\u00fdm mno\u017estv\u00edm mal\u00fdch soubor\u016f","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>N\u00e1pad na \u010dl\u00e1nek vznikl spont\u00e1nn\u011b z diskuse v koment\u00e1\u0159\u00edch k \u010dl\u00e1nku <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/462849\/\">\u201eN\u011bco o inodech\u201c<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Tipy pro pr\u00e1ci s velk\u00fdm mno\u017estv\u00edm mal\u00fdch soubor\u016f\" src=\"\/wp-content\/uploads\/2019\/08\/e488f5985cfb0b3274f57f6baeeedf01.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJde o to, \u017ee vnit\u0159n\u00ed specifikou fungov\u00e1n\u00ed na\u0161ich slu\u017eeb je uchov\u00e1v\u00e1n\u00ed obrovsk\u00e9ho mno\u017estv\u00ed mal\u00fdch soubor\u016f. V sou\u010dasn\u00e9 dob\u011b m\u00e1me kolem stovek terabajt\u016f t\u011bchto dat. A narazili jsme na n\u011bkter\u00e9 z\u0159ejm\u00e9 i m\u00e9n\u011b z\u0159ejm\u00e9 probl\u00e9my, kter\u00fdmi jsme \u00fasp\u011b\u0161n\u011b pro\u0161li.<\/p>\n<p>Proto se d\u011bl\u00edm o na\u0161e zku\u0161enosti, mo\u017en\u00e1 budou n\u011bkomu u\u017eite\u010dn\u00e9.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Prvn\u00ed probl\u00e9m: \u201eNa za\u0159\u00edzen\u00ed nen\u00ed dostatek m\u00edsta\u201c<\/h2>\n<p>\nJak bylo zm\u00edn\u011bno v v\u00fd\u0161e uveden\u00e9m \u010dl\u00e1nku, probl\u00e9m spo\u010d\u00edv\u00e1 v tom, \u017ee na souborov\u00e9m syst\u00e9mu jsou voln\u00e9 bloky, ale inody do\u0161ly.<\/p>\n<p>Po\u010det pou\u017eit\u00fdch a voln\u00fdch inode m\u016f\u017eete zkontrolovat p\u0159\u00edkazem <code>df -ih<\/code>:<\/p>\n<p><img decoding=\"async\" alt=\"Tipy pro pr\u00e1ci s velk\u00fdm mno\u017estv\u00edm mal\u00fdch soubor\u016f\" src=\"\/wp-content\/uploads\/2019\/08\/ceb86a22562aa08c8ffbbde2c2618545.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNebudu znovu p\u0159episovat \u010dl\u00e1nek, pokud to shrnu, na disku jsou jak bloky p\u0159\u00edmo pro data, tak bloky pro meta-informace, kter\u00e9 jsou pr\u00e1v\u011b inody (indexov\u00fd uzel). Jejich po\u010det je nastaven p\u0159i inicializaci souborov\u00e9ho syst\u00e9mu (m\u00e1me na mysli ext2 a jeho n\u00e1sledovn\u00edky) a pot\u00e9 se nem\u011bn\u00ed. Vyv\u00e1\u017een\u00ed blok\u016f dat a inode se po\u010d\u00edt\u00e1 na z\u00e1klad\u011b pr\u016fm\u011brn\u00fdch dat, v na\u0161em p\u0159\u00edpad\u011b, kdy je hodn\u011b mal\u00fdch soubor\u016f, by se m\u011blo vyv\u00e1\u017een\u00ed posunout ve prosp\u011bch po\u010dtu inode \u2014 t\u011bch by m\u011blo b\u00fdt v\u00edce.<\/p>\n<p>V Linuxu u\u017e existuj\u00ed varianty s r\u016fzn\u00fdm vyv\u00e1\u017een\u00edm a v\u0161echny tyto p\u0159edem vypo\u010d\u00edtan\u00e9 konfigurace se nach\u00e1zej\u00ed v souboru <code>\/etc\/mke2fs.conf<\/code>.<br \/>\nProto p\u0159i po\u010d\u00e1te\u010dn\u00ed inicializaci souborov\u00e9ho syst\u00e9mu prost\u0159ednictv\u00edm mke2fs m\u016f\u017eete zadat pot\u0159ebn\u00fd profil.<\/p>\n<p>Zde je n\u011bkolik p\u0159\u00edklad\u016f ze souboru:<\/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>\nVybrat po\u017eadovanou variantu pou\u017eit\u00ed lze pomoc\u00ed volby &#171;-T&#187; p\u0159i vyvol\u00e1n\u00ed mke2fs. Tak\u00e9 lze ru\u010dn\u011b nastavit po\u017eadovan\u00e9 parametry, pokud neexistuje p\u0159edp\u0159ipraven\u00e9 \u0159e\u0161en\u00ed.<\/p>\n<p>V\u00edce podrobnost\u00ed je uvedeno v manu\u00e1lech pro <code>mke2fs.conf<\/code> a <code>mke2fs<\/code>.<\/p>\n<p>Nevyzdvihnut\u00e1 v v\u00fd\u0161e zm\u00edn\u011bn\u00e9m \u010dl\u00e1nku zvl\u00e1\u0161tnost \u2014 m\u016f\u017eete nastavit velikost bloku dat. Je z\u0159ejm\u00e9, \u017ee pro velk\u00e9 soubory d\u00e1v\u00e1 smysl v\u011bt\u0161\u00ed velikost bloku, pro mal\u00e9 \u2014 men\u0161\u00ed. <\/p>\n<p>Je v\u0161ak t\u0159eba vz\u00edt v \u00favahu takovou zaj\u00edmavou zvl\u00e1\u0161tnost, jako je architektura procesoru.<br \/>\nJednou jsem si povzdechl, \u017ee pro velk\u00e9 soubory fotografi\u00ed pot\u0159ebuji v\u011bt\u0161\u00ed velikost bloku. Bylo to v dom\u00e1c\u00edch podm\u00ednk\u00e1ch, na dom\u00e1c\u00edm \u00falo\u017ei\u0161ti od WD s architekturou ARM. Bez dlouh\u00e9ho p\u0159em\u00fd\u0161len\u00ed jsem nastavil velikost bloku na 8k nebo 16k nam\u00edsto standardn\u00edch 4k, po p\u0159edchoz\u00edm p\u0159em\u011b\u0159en\u00ed \u00faspory. V\u0161echno bylo skv\u011bl\u00e9 a\u017e do okam\u017eiku, kdy samotn\u00e9 \u00falo\u017ei\u0161t\u011b selhalo, p\u0159i\u010dem\u017e disk byl v po\u0159\u00e1dku. Kdy\u017e jsem disk vlo\u017eil do b\u011b\u017en\u00e9ho po\u010d\u00edta\u010de s b\u011b\u017en\u00fdm procesorem Intel, dostal jsem p\u0159ekvapen\u00ed: nepodporovan\u00e1 velikost bloku. D\u011bs a hr\u016fza. Data existuj\u00ed, v\u0161echno je v po\u0159\u00e1dku, ale nen\u00ed mo\u017en\u00e9 je p\u0159e\u010d\u00edst. Procesory i386 a podobn\u00e9 neum\u011bj\u00ed pracovat s velikostmi bloku, kter\u00e9 neodpov\u00eddaj\u00ed velikosti str\u00e1nky pam\u011bti, a ta je p\u0159esn\u011b 4k. Cel\u00e1 z\u00e1le\u017eitost skon\u010dila pou\u017eit\u00edm utilit z u\u017eivatelsk\u00e9ho prostoru, v\u0161echno bylo pomal\u00e9 a smutn\u00e9, ale data byla zachr\u00e1n\u011bna. Kdo m\u00e1 z\u00e1jem \u2014 hledejte podle n\u00e1zvu utility. <code>fuseext2<\/code>. Mor\u00e1lka: bu\u010f si dop\u0159edu promyslete v\u0161echny sc\u00e9n\u00e1\u0159e, nebo se nechte un\u00e9st a pou\u017e\u00edvejte standardn\u00ed nastaven\u00ed pro dom\u00e1c\u00ed u\u017eivatele.<\/p>\n<p>UPD. Podle pozn\u00e1mky u\u017eivatele <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/berez\/\" class=\"user_link\">berez<\/a><\/noindex> up\u0159es\u0148uji, \u017ee pro i386 velikost bloku by nem\u011bla p\u0159es\u00e1hnout 4k, ale nemus\u00ed b\u00fdt nutn\u011b p\u0159esn\u011b 4k, tj. jsou povoleny i 1k a 2k.<\/p>\n<p>Tak\u017ee, jak jsme \u0159e\u0161ili probl\u00e9my.<\/p>\n<p>Za prv\u00e9, probl\u00e9m jsme narazili, kdy\u017e mnohatera byte disk byl zapln\u011bn daty a nemohli jsme p\u0159ed\u011blat konfiguraci souborov\u00e9ho syst\u00e9mu.<\/p>\n<p>Za druh\u00e9, \u0159e\u0161en\u00ed bylo pot\u0159eba urgentn\u011b.<\/p>\n<p>Nakonec jsme dosp\u011bli k z\u00e1v\u011bru, \u017ee je t\u0159eba zm\u011bnit rovnov\u00e1hu a sn\u00ed\u017eit po\u010det soubor\u016f.<br \/>\nAbychom sn\u00ed\u017eili po\u010det soubor\u016f, rozhodli jsme se zabalit soubory do jednoho spole\u010dn\u00e9ho archivu. Vzhledem k na\u0161\u00ed specifice jsme ka\u017ed\u00fd m\u011bs\u00edc balili v\u0161echny soubory za ur\u010dit\u00fd \u010dasov\u00fd \u00fasek a prov\u00e1d\u011bli jsme archivaci pomoc\u00ed cron \u00falohy ka\u017edou noc.<\/p>\n<p>Zvolili jsme zip archiv. V koment\u00e1\u0159\u00edch k p\u0159edchoz\u00edmu \u010dl\u00e1nku byl navr\u017een tar, ale m\u00e1 jednu obt\u00ed\u017e: nem\u00e1 obsah a soubory v n\u011bm jsou uspo\u0159\u00e1d\u00e1ny v \u0159ad\u011b (ne nadarmo se \"tar\" zkracuje jako \"Tape Archive\", d\u011bdictv\u00ed p\u00e1skov\u00fdch \u00falo\u017ei\u0161\u0165), tzn. pokud pot\u0159ebujete p\u0159e\u010d\u00edst soubor na konci archivu, mus\u00edte p\u0159e\u010d\u00edst cel\u00fd archiv, proto\u017ee v n\u011bm nejsou offsety pro ka\u017ed\u00fd soubor vzhledem k za\u010d\u00e1tku archivu. A proto je to dlouh\u00e1 operace. U zip je to mnohem lep\u0161\u00ed: m\u00e1 onen obsah a offsety soubor\u016f uvnit\u0159 archivu a \u010das p\u0159\u00edstupu k ka\u017ed\u00e9mu souboru nez\u00e1vis\u00ed na jeho um\u00edst\u011bn\u00ed. A v na\u0161em p\u0159\u00edpad\u011b bylo mo\u017en\u00e9 nastavit mo\u017enost komprese \"0\", proto\u017ee v\u0161echny soubory byly ji\u017e p\u0159edem komprimov\u00e1ny v gzip.<\/p>\n<p>Klienti stahuj\u00ed soubory p\u0159es nginx, a podle star\u00e9ho API se uv\u00e1d\u00ed prost\u00e9 jm\u00e9no souboru, nap\u0159\u00edklad takto:<\/p>\n<pre><code class=\"plaintext\">http:\/\/www.server.com\/hydra\/20170416\/0453\/3bd24ae7-1df4-4d76-9d28-5b7fcb7fd8e5\n<\/code><\/pre>\n<p>\nAbychom mohli v re\u00e1ln\u00e9m \u010dase rozbalovat soubory, na\u0161li jsme a p\u0159ipojili modul nginx-unzip-module (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/youzee\/nginx-unzip-module\">https:\/\/github.com\/youzee\/nginx-unzip-module<\/a><\/noindex>) a nastavili dva upstreamy.<\/p>\n<p>V\u00fdsledkem byla takov\u00e1 konfigurace:<\/p>\n<p><img decoding=\"async\" alt=\"Tipy pro pr\u00e1ci s velk\u00fdm mno\u017estv\u00edm mal\u00fdch soubor\u016f\" src=\"\/wp-content\/uploads\/2019\/08\/56f5210669fecfe194ac5907d563aa1d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDva hostitel\u00e9 v nastaven\u00ed vypadaly takto:<\/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>\nA konfigurace upstream\u016f na v\u00fd\u0161e uveden\u00e9m 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>\nJak to funguje:<\/p>\n<ul>\n<li>Klient jde na front nginx<\/li>\n<li>Front nginx se pokou\u0161\u00ed vr\u00e1tit soubor z prvn\u00edho upstreamu, tzn. p\u0159\u00edmo ze souborov\u00e9ho syst\u00e9mu<\/li>\n<li>Pokud soubor neexistuje \u2014 pokus\u00ed se ho vr\u00e1tit ze druh\u00e9ho upstreamu, kter\u00fd se pokou\u0161\u00ed naj\u00edt soubor uvnit\u0159 archivu<\/li>\n<\/ul>\n<p><\/p>\n<h2>Druh\u00fd probl\u00e9m: op\u011bt \"No space left on device\"<\/h2>\n<p>\nTo je druh\u00fd probl\u00e9m, se kter\u00fdm jsme se setkali, kdy\u017e byl v adres\u00e1\u0159i p\u0159\u00edli\u0161 mnoho soubor\u016f.<br \/>\nSna\u017e\u00edme se vytvo\u0159it soubor, syst\u00e9m si st\u011b\u017euje, \u017ee nen\u00ed m\u00edsto. Zm\u011bn\u00edme jm\u00e9no souboru a znovu se ho pokou\u0161\u00edme vytvo\u0159it.<\/p>\n<p>Poda\u0159\u00ed se.<\/p>\n<p>Vypad\u00e1 to p\u0159ibli\u017en\u011b takto:<\/p>\n<p><img decoding=\"async\" alt=\"Tipy pro pr\u00e1ci s velk\u00fdm mno\u017estv\u00edm mal\u00fdch soubor\u016f\" src=\"\/wp-content\/uploads\/2019\/08\/f365358b59bf81d450a236dfb58e4874.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKontrola inodes nic nedala \u2014 je jich mnoho voln\u00fdch. <br \/>\nKontrola m\u00edsta \u2014 tot\u00e9\u017e.<br \/>\nPomysleli jsme si, \u017ee m\u016f\u017ee b\u00fdt p\u0159\u00edli\u0161 mnoho soubor\u016f v adres\u00e1\u0159i, a na to existuje limit, ale op\u011bt ne: Maximum number of files per directory: ~1.3 \u00d7 10^20<\/p>\n<p>A soubor se d\u00e1 vytvo\u0159it, pokud zm\u011bn\u00edte jm\u00e9no.<br \/>\nZ\u00e1v\u011br \u2014 probl\u00e9m je v n\u00e1zvu souboru.<\/p>\n<p>Dal\u0161\u00ed hled\u00e1n\u00ed uk\u00e1zala, \u017ee probl\u00e9m je v algoritmu hashov\u00e1n\u00ed p\u0159i vytv\u00e1\u0159en\u00ed indexu adres\u00e1\u0159e, p\u0159i velk\u00e9m po\u010dtu soubor\u016f doch\u00e1z\u00ed ke koliz\u00edm se v\u0161emi vypl\u00fdvaj\u00edc\u00edmi n\u00e1sledky. Podrobn\u011bji si m\u016f\u017eete p\u0159e\u010d\u00edst zde: <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>Tuto mo\u017enost lze vypnout, ale... hled\u00e1n\u00ed souboru podle n\u00e1zvu m\u016f\u017ee b\u00fdt nep\u0159edv\u00eddateln\u011b dlouh\u00e9 p\u0159i proch\u00e1zen\u00ed v\u0161ech soubor\u016f. <\/p>\n<pre><code class=\"bash\"> tune2fs -O \"^dir_index\" \/dev\/sdb3\n<\/code><\/pre>\n<p>\nObecn\u011b m\u016f\u017ee fungovat jako do\u010dasn\u00e9 \u0159e\u0161en\u00ed.<\/p>\n<p>Moral: m\u00edt mnoho soubor\u016f v adres\u00e1\u0159i je obvykle \u0161patn\u011b. Takto se to d\u011blat nem\u00e1.<\/p>\n<p>Obvykle se v takov\u00fdch p\u0159\u00edpadech vytv\u00e1\u0159ej\u00ed vno\u0159en\u00e9 adres\u00e1\u0159e podle prvn\u00edch p\u00edsmen n\u00e1zvu souboru nebo podle jin\u00fdch parametr\u016f, nap\u0159\u00edklad podle dat, v\u011bt\u0161inou to pom\u00e1h\u00e1.<br \/>\nCelkov\u00e9 mno\u017estv\u00ed mal\u00fdch soubor\u016f je ka\u017edop\u00e1dn\u011b \u0161patn\u00e9, i kdy\u017e jsou rozd\u011bleny po adres\u00e1\u0159\u00edch \u2014 viz prvn\u00ed probl\u00e9m.<\/p>\n<h2>T\u0159et\u00ed probl\u00e9m: jak zobrazit seznam soubor\u016f, pokud jich je mnoho<\/h2>\n<p>\nV na\u0161\u00ed situaci, kdy m\u00e1me mnoho soubor\u016f, se setk\u00e1v\u00e1me s probl\u00e9mem, jak zobrazit obsah adres\u00e1\u0159e.<\/p>\n<p>Standardn\u00ed \u0159e\u0161en\u00ed \u2014 p\u0159\u00edkaz <code>ls<\/code>.<br \/>\nDob\u0159e, pod\u00edvejme se, co dostaneme na 4772098 souborech:<\/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 sekund... to je hodn\u011b. V\u011bt\u0161ina \u010dasu jde na zpracov\u00e1n\u00ed soubor\u016f v u\u017eivatelsk\u00e9m prostoru, a ne na pr\u00e1ci j\u00e1dra.<\/p>\n<p>Ale \u0159e\u0161en\u00ed existuje:<\/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 sekundy. Desetkr\u00e1t rychleji.<br \/>\nHur\u00e1!<\/p>\n<p><b>UPD.<\/b><\/p>\n<p>Je\u0161t\u011b rychlej\u0161\u00ed \u0159e\u0161en\u00ed od u\u017eivatele <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/berez\/\" class=\"user_link\">berez<\/a><\/noindex> \u2014 vypnut\u00ed t\u0159\u00edd\u011bn\u00ed u <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>\u010ctvrt\u00fd probl\u00e9m: vysok\u00fd LA p\u0159i pr\u00e1ci se soubory<\/h2>\n<p>\nOb\u010das nast\u00e1v\u00e1 situace, kdy je pot\u0159eba zkop\u00edrovat spoustu soubor\u016f z jednoho stroje na druh\u00fd. P\u0159itom \u010dasto v\u00fdrazn\u011b vzr\u016fst\u00e1 LA, proto\u017ee v\u0161e z\u00e1vis\u00ed na v\u00fdkonu samotn\u00fdch disk\u016f.<\/p>\n<p>Nejrozumn\u011bj\u0161\u00ed volba je pou\u017e\u00edt SSD. Opravdu \u00fa\u017easn\u00e9. Ot\u00e1zka je jen v cen\u011b mnohaterarabajtov\u00fdch SSD.<\/p>\n<p>Ale pokud jsou disky oby\u010dejn\u00e9, je t\u0159eba soubory kop\u00edrovat, a to je nav\u00edc produk\u010dn\u00ed syst\u00e9m, kde p\u0159et\u00ed\u017een\u00ed vede k nespokojen\u00fdm reakc\u00edm z\u00e1kazn\u00edk\u016f? Existuje minim\u00e1ln\u011b dva u\u017eite\u010dn\u00e9 n\u00e1stroje: <code>nice<\/code> a <code>ionice<\/code>.<\/p>\n<p><code>nice<\/code> \u2014 sni\u017euje prioritu procesu, tak\u017ee pl\u00e1nova\u010d d\u00e1v\u00e1 v\u00edce \u010dasov\u00fdch kvant\u016fm jin\u00fdm, prioritn\u011bj\u0161\u00edm proces\u016fm.<br \/>\nV na\u0161\u00ed praxi pom\u00e1halo nastavit nice na maxim\u00e1ln\u00ed (19 \u2014 to je minim\u00e1ln\u00ed priorita, -20 (minus 20) \u2014 maxim\u00e1ln\u00ed).<\/p>\n<p><code>ionice<\/code> \u2014 upravuje prioritu vstupu\/v\u00fdstupu (I\/O scheduling)<\/p>\n<p>Pokud pou\u017e\u00edv\u00e1te RAID a pot\u0159ebujete ho n\u00e1hle synchronizovat (po ne\u00fasp\u011b\u0161n\u00e9m restartu nebo p\u0159i obnov\u011b RAID pole po v\u00fdm\u011bn\u011b disku), m\u016f\u017ee b\u00fdt v ur\u010dit\u00fdch situac\u00edch smyslupln\u00e9 sn\u00ed\u017eit rychlost synchronizace, aby ostatn\u00ed procesy mohly fungovat alespo\u0148 zhruba adekv\u00e1tn\u011b. K tomu pom\u016f\u017ee n\u00e1sleduj\u00edc\u00ed p\u0159\u00edkaz:<\/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\u00e9m p\u00e1t\u00fd: Jak synchronizovat soubory v re\u00e1ln\u00e9m \u010dase<\/h2>\n<p>\nM\u00e1me st\u00e1le ty obrovsk\u00e9 mno\u017estv\u00ed soubor\u016f, kter\u00e9 je t\u0159eba z\u00e1lohovat na druh\u00fd server, aby nedo\u0161lo k... Soubory se neust\u00e1le zapisuj\u00ed, tak\u017ee je pot\u0159eba je co nejrychleji kop\u00edrovat, abychom m\u011bli minim\u00e1ln\u00ed ztr\u00e1ty.<\/p>\n<p>Standardn\u00ed \u0159e\u0161en\u00ed: Rsync p\u0159es SSH.<\/p>\n<p>To je dobr\u00e1 varianta, pokud to nemus\u00edme d\u011blat ka\u017ed\u00fdch n\u011bkolik sekund. A soubor\u016f je hodn\u011b. I kdy\u017e je nebudeme kop\u00edrovat \u2014 p\u0159esto je t\u0159eba n\u011bjak porozum\u011bt, co se zm\u011bnilo, a porovnat n\u011bkolik milion\u016f soubor\u016f zabere \u010das a zat\u00ed\u017e\u00ed disky.<\/p>\n<p>To znamen\u00e1, \u017ee mus\u00edme hned v\u011bd\u011bt, co je t\u0159eba kop\u00edrovat, ani\u017e bychom p\u0159i ka\u017ed\u00e9m spu\u0161t\u011bn\u00ed provedli porovn\u00e1n\u00ed.<\/p>\n<p>Z\u00e1chrana je \u2014 <code>lsyncd<\/code>. <code>Lsyncd<\/code> \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/axkibe.github.io\/lsyncd\/\">Demon pro \u017eivou synchronizaci (Mirror)<\/a><\/noindex>. Pracuje tak\u00e9 p\u0159es rsync, ale nav\u00edc monitoruje souborov\u00fd syst\u00e9m na zm\u011bny pomoc\u00ed inotify a fsevents a spou\u0161t\u00ed kop\u00edrov\u00e1n\u00ed pouze pro ty soubory, kter\u00e9 byly p\u0159id\u00e1ny nebo zm\u011bn\u011bny.<\/p>\n<h2>Probl\u00e9m \u0161est\u00fd: jak pochopit, kdo zat\u011b\u017euje disky<\/h2>\n<p>\nTo asi v\u00ed ka\u017ed\u00fd, ale p\u0159esto pro \u00faplnost obrazu: pro monitorov\u00e1n\u00ed diskov\u00e9ho subsyst\u00e9mu existuje p\u0159\u00edkaz <code>iotop<\/code> \u2014 podobn\u011b jako <code>top<\/code>, ale ukazuje procesy, kter\u00e9 nejv\u00edce zat\u011b\u017euj\u00ed disky.<\/p>\n<p><img decoding=\"async\" alt=\"Tipy pro pr\u00e1ci s velk\u00fdm mno\u017estv\u00edm mal\u00fdch soubor\u016f\" src=\"\/wp-content\/uploads\/2019\/08\/56612c618469ef340a31ae446d65ed4e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMimochodem, star\u00fd dobr\u00fd top tak\u00e9 umo\u017e\u0148uje pochopit, zda jsou s disky probl\u00e9my nebo ne. K tomu existuj\u00ed dva nejvhodn\u011bj\u0161\u00ed parametry: <b>Load Average<\/b> a <b>IOwait<\/b>.<\/p>\n<p><img decoding=\"async\" alt=\"Tipy pro pr\u00e1ci s velk\u00fdm mno\u017estv\u00edm mal\u00fdch soubor\u016f\" src=\"\/wp-content\/uploads\/2019\/08\/01a0565947de65d13b0045f7180caf5d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPrvn\u00ed ukazuje, kolik proces\u016f \u010dek\u00e1 na zpracov\u00e1n\u00ed, obvykle v\u00edce ne\u017e 2 \u2014 to u\u017e n\u011bco nehraje. P\u0159i aktivn\u00edm kop\u00edrov\u00e1n\u00ed na z\u00e1lohov\u00e9 servery tolerujeme 6-8, po tom u\u017e je situace pova\u017eov\u00e1na za nestandardn\u00ed.<\/p>\n<p>Druh\u00fd \u2014 jak moc je procesor vyt\u00ed\u017een diskov\u00fdmi operacemi. IOwait &gt;10% \u2014 d\u016fvod k obav\u00e1m, i kdy\u017e na na\u0161ich serverech se specifick\u00fdm profilem zat\u00ed\u017een\u00ed to m\u016f\u017ee b\u00fdt stabiln\u011b 40-50%, a to je opravdu norma.<\/p>\n<p>T\u00edmto zakon\u010d\u00edm, i kdy\u017e jist\u011b existuje mnoho dal\u0161\u00edch aspekt\u016f, se kter\u00fdmi jsme se nemuseli setkat, s pot\u011b\u0161en\u00edm budu \u010dekat na koment\u00e1\u0159e a popisy zaj\u00edmav\u00fdch re\u00e1ln\u00fdch p\u0159\u00edpad\u016f.<br \/>\n<br \/>Zdroj: <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\/cs\/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=\"cs_CZ\" \/>\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\/cs\/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\udd47Triky p\u0159i pr\u00e1ci s velk\u00fdm po\u010dtem mal\u00fdch soubor\u016f | ProHoster","description":"N\u00e1pad na \u010dl\u00e1nek vznikl spont\u00e1nn\u011b z diskuse v koment\u00e1\u0159\u00edch k \u010dl\u00e1nku \u201eN\u011bco o inode\u201c.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","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\/cs\/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\/cs\/wp-json\/wp\/v2\/posts\/36999","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=36999"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/36999\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/27728"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=36999"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=36999"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=36999"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}