{"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\/hu\/blog\/administrirovanie\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov","title":{"rendered":"Tr\u00fckk\u00f6k nagy sz\u00e1m\u00fa apr\u00f3 f\u00e1jlok kezel\u00e9s\u00e9hez","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>A cikk \u00f6tlete v\u00e9letlen\u00fcl sz\u00fcletett egy komment\u00e1rban foly\u00f3 vit\u00e1b\u00f3l. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/462849\/\">\u201eN\u00e9h\u00e1ny sz\u00f3 az inode-r\u00f3l\u201d<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Tr\u00fckk\u00f6k nagy sz\u00e1m\u00fa apr\u00f3 f\u00e1jlok kezel\u00e9s\u00e9hez\" src=\"\/wp-content\/uploads\/2019\/08\/e488f5985cfb0b3274f57f6baeeedf01.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA bels\u0151 saj\u00e1toss\u00e1ga szolg\u00e1ltat\u00e1saink m\u0171k\u00f6d\u00e9s\u00e9nek, hogy hatalmas mennyis\u00e9g\u0171 kicsi f\u00e1jl t\u00e1rol\u00e1s\u00e1val foglalkozunk. Jelenleg k\u00f6r\u00fclbel\u00fcl t\u00f6bb sz\u00e1z terab\u00e1jt ilyen adatunk van. R\u00e1akadtunk n\u00e9h\u00e1ny nyilv\u00e1nval\u00f3 \u00e9s nem annyira nyilv\u00e1nval\u00f3 neh\u00e9zs\u00e9gre, de sikeresen megoldottuk azokat.<\/p>\n<p>Ez\u00e9rt megosztom tapasztalatainkat, h\u00e1tha valakinek hasznos lesz.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Els\u0151 probl\u00e9ma: \u201eNincs el\u00e9g hely az eszk\u00f6z\u00f6n\u201d<\/h2>\n<p>\nMint a fent eml\u00edtett cikkben eml\u00edtettem, a probl\u00e9ma az, hogy a f\u00e1jlrendszerben van szabad blokk, azonban az inode-k elfogytak.<\/p>\n<p>Az haszn\u00e1lt \u00e9s szabad inodok sz\u00e1m\u00e1t a k\u00f6vetkez\u0151 paranccsal lehet ellen\u0151rizni: <code>df -ih<\/code>:<\/p>\n<p><img decoding=\"async\" alt=\"Tr\u00fckk\u00f6k nagy sz\u00e1m\u00fa apr\u00f3 f\u00e1jlok kezel\u00e9s\u00e9hez\" src=\"\/wp-content\/uploads\/2019\/08\/ceb86a22562aa08c8ffbbde2c2618545.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNem fogom \u00fajra elmondani a cikket, ha r\u00f6viden szeretn\u00e9m \u00f6sszefoglalni, a lemezen vannak blokkok k\u00f6zvetlen\u00fcl az adatok sz\u00e1m\u00e1ra, valamint blokkok a meta-inform\u00e1ci\u00f3k sz\u00e1m\u00e1ra, ezek az inode-ok (index csom\u00f3pont). Sz\u00e1muk a f\u00e1jlrendszer inicializ\u00e1l\u00e1sakor van megadva (az ext2-r\u0151l \u00e9s annak \u00f6r\u00f6k\u00f6seir\u0151l van sz\u00f3), \u00e9s azut\u00e1n nem v\u00e1ltozik. Az adatok \u00e9s az inode-ok k\u00f6z\u00f6tti egyens\u00falyt statisztikai adatok alapj\u00e1n sz\u00e1molj\u00e1k ki, azonban a mi eset\u00fcnkben, ahol sok kicsi f\u00e1jl van, az egyens\u00falynak ink\u00e1bb az inode-ok sz\u00e1m\u00e1nak ir\u00e1ny\u00e1ba kell eltol\u00f3dnia - ezekb\u0151l t\u00f6bb kell.<\/p>\n<p>Linuxban m\u00e1r el\u0151re l\u00e1ttak k\u00fcl\u00f6nb\u00f6z\u0151 egyens\u00falyoz\u00e1si lehet\u0151s\u00e9geket, \u00e9s ezek a kalkul\u00e1lt konfigur\u00e1ci\u00f3k a <code>\/etc\/mke2fs.conf<\/code>.<br \/>\nf\u00e1jlban tal\u00e1lhat\u00f3k.<\/p>\n<p>\u00cdme n\u00e9h\u00e1ny p\u00e9lda a f\u00e1jlb\u00f3l:<\/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>\nA sz\u00fcks\u00e9ges felhaszn\u00e1l\u00e1si m\u00f3d kiv\u00e1laszt\u00e1sa a mke2fs h\u00edv\u00e1sakor a &#171;-T&#187; opci\u00f3val lehets\u00e9ges. Emellett sz\u00fcks\u00e9g eset\u00e9n k\u00e9zzel is megadhat\u00f3k a megfelel\u0151 param\u00e9terek, ha nincs k\u00e9sz megold\u00e1s.<\/p>\n<p>Tov\u00e1bbi r\u00e9szletek tal\u00e1lhat\u00f3k a <code>mke2fs.conf<\/code> \u00e9s <code>mke2fs<\/code>.<\/p>\n<p>A fent eml\u00edtett cikkben nem \u00e9rintett saj\u00e1toss\u00e1g - megadhat\u00f3 az adatok blokkj\u00e1nak m\u00e9rete. Nyilv\u00e1nval\u00f3, hogy nagy f\u00e1jlok eset\u00e9n \u00e9rdemesebb nagyobb blokkm\u00e9retet v\u00e1lasztani, m\u00edg kisebb f\u00e1jlok eset\u00e9n a kisebb a megfelel\u0151. <\/p>\n<p>Ugyanakkor \u00e9rdemes figyelembe venni egy \u00e9rdekes saj\u00e1toss\u00e1got, mint a processzor architekt\u00far\u00e1ja.<br \/>\nValamikor azt fontolgattam, hogy a nagyobb f\u00e9nyk\u00e9pekhez nagyobb blokk m\u00e9ret lenne sz\u00fcks\u00e9ges. Ez m\u00e9g otthoni k\u00f6r\u00fclm\u00e9nyek k\u00f6z\u00f6tt t\u00f6rt\u00e9nt, egy WD nev\u00e9vel ell\u00e1tott h\u00e1zi t\u00e1rol\u00f3n, ARM architekt\u00far\u00e1n. Nem sok\u00e1ig gondolkodtam, \u00e9s a blokk m\u00e9retet 8k-ra vagy 16k-ra \u00e1ll\u00edtottam a standard 4k helyett, miut\u00e1n el\u0151sz\u00f6r lem\u00e9rtem a megtakar\u00edt\u00e1st. \u00c9s minden csod\u00e1latosan m\u0171k\u00f6d\u00f6tt, eg\u00e9szen addig, am\u00edg mag\u00e1nak a t\u00e1rol\u00f3nak nem lett volna hib\u00e1ja, mik\u00f6zben a lemez \u00e9pen maradt. Amikor a lemezt egy klasszikus sz\u00e1m\u00edt\u00f3g\u00e9pbe \u00e1ll\u00edtottam, amelyben egy hagyom\u00e1nyos Intel processzor volt, meglepet\u00e9s \u00e9rt: nem t\u00e1mogatott blokk m\u00e9ret. Bajban voltunk. Az adatok megvoltak, minden rendben, de olvasni lehetetlen volt. Az i386 processzorok \u00e9s hasonl\u00f3k nem tudnak olyan blokk m\u00e9retekkel dolgozni, amelyek nem felelnek meg a mem\u00f3riaoldal m\u00e9ret\u00e9nek, ami pontosan 4k. \u00d6sszess\u00e9g\u00e9ben az \u00fcgy v\u00e9g\u00fcl felhaszn\u00e1l\u00f3i t\u00e9rb\u0151l sz\u00e1rmaz\u00f3 seg\u00e9dprogramokkal z\u00e1rult, minden lass\u00fa \u00e9s szomor\u00fa volt, de az adatokat megmentett\u00fck. Akinek \u00e9rdekes \u2013 keressen r\u00e1 a seg\u00e9dprogram nev\u00e9re. <code>fuseext2<\/code>. Tanuls\u00e1g: vagy minden esetet el\u0151re \u00e1tgondolni, vagy ne \u00e9p\u00edts\u00fcnk magunkb\u00f3l szuperh\u0151st, \u00e9s haszn\u00e1ljuk a h\u00e1ztart\u00e1sok sz\u00e1m\u00e1ra szolg\u00e1l\u00f3 szabv\u00e1nyos be\u00e1ll\u00edt\u00e1sokat.<\/p>\n<p>UPD. Egy felhaszn\u00e1l\u00f3i megjegyz\u00e9s alapj\u00e1n <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/berez\/\" class=\"user_link\">berez<\/a><\/noindex> kijav\u00edtom, hogy az i386 eset\u00e9ben a blokk m\u00e9ret nem haladhatja meg a 4k-t, de nem sz\u00fcks\u00e9ges, hogy pontosan 4k legyen, teh\u00e1t 1k \u00e9s 2k is megengedett.<\/p>\n<p>Teh\u00e1t, hogyan oldottuk meg a probl\u00e9m\u00e1kat.<\/p>\n<p>El\u0151sz\u00f6r is, a probl\u00e9m\u00e1val akkor szembes\u00fclt\u00fcnk, amikor a sok terab\u00e1jtos lemez tele volt adatokkal, \u00e9s a f\u00e1jlrendszer konfigur\u00e1ci\u00f3j\u00e1t nem tudtuk megv\u00e1ltoztatni.<\/p>\n<p>M\u00e1sodsorban s\u00fcrg\u0151s megold\u00e1sra volt sz\u00fcks\u00e9g.<\/p>\n<p>V\u00e9g\u00fcl arra a k\u00f6vetkeztet\u00e9sre jutottunk, hogy v\u00e1ltoztatnunk kell az egyens\u00falyon, cs\u00f6kkentve a f\u00e1jlok sz\u00e1m\u00e1t.<br \/>\nA f\u00e1jlok sz\u00e1m\u00e1nak cs\u00f6kkent\u00e9s\u00e9re \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy az \u00f6sszes f\u00e1jlt egy k\u00f6z\u00f6s arch\u00edvumba helyezz\u00fck. Figyelembe v\u00e9ve a specifik\u00e1ci\u00f3nkat, mindent egy arch\u00edvumba gy\u0171jt\u00f6tt\u00fcnk egy adott id\u0151szakon bel\u00fcl, \u00e9s naponta \u00e9jszaka cron feladatot hajtottunk v\u00e9gre az archiv\u00e1l\u00e1sra.<\/p>\n<p>ZIP-arch\u00edvum lett kiv\u00e1lasztva. A kor\u00e1bbi cikk megjegyz\u00e9sei k\u00f6z\u00f6tt a tar javasolt volt, de ennek van egy neh\u00e9zs\u00e9ge: nem rendelkezik t\u00e1bl\u00e1zattal, \u00e9s a f\u00e1jlok k\u00f6vetkezetesen helyezkednek el benne (nem v\u00e9letlen\u00fcl h\u00edvj\u00e1k \u00abtar\u00bb-nak, ami a \u00abTape Archive\u00bb r\u00f6vid\u00edt\u00e9se, a szalagos t\u00e1rol\u00f3k \u00f6r\u00f6ks\u00e9ge), teh\u00e1t ha a f\u00e1jlt az arch\u00edvum v\u00e9g\u00e9n szeretn\u00e9nk olvasni - az arch\u00edvum teljes \u00e1tolvas\u00e1sa sz\u00fcks\u00e9ges, mivel nincs eltol\u00e1s az egyes f\u00e1jlokhoz k\u00e9pest az arch\u00edvum elej\u00e9hez. Ez\u00e9rt ez egy hossz\u00fa m\u0171velet. A ZIP sokkal jobb: rendelkezik a keresett t\u00e1bl\u00e1zattal \u00e9s a f\u00e1jlok eltol\u00e1s\u00e1val az arch\u00edvum belsej\u00e9ben, \u00e9s a hozz\u00e1f\u00e9r\u00e9si id\u0151 minden f\u00e1jlhoz nem f\u00fcgg a helyzet\u00e9t\u0151l. A mi eset\u00fcnkben a \u201e0\u201d t\u00f6m\u00f6r\u00edt\u00e9si opci\u00f3t is be lehetett \u00e1ll\u00edtani, mivel az \u00f6sszes f\u00e1jl el\u0151re t\u00f6m\u00f6r\u00edtve volt gzip form\u00e1tumban.<\/p>\n<p>Az \u00fcgyfelek az nginx-en kereszt\u00fcl k\u00fcldik le a f\u00e1jlokat, \u00e9s a r\u00e9gi API szerint csak a f\u00e1jl nev\u00e9t kell megadni, p\u00e9ld\u00e1ul az al\u00e1bbiak szerint:<\/p>\n<pre><code class=\"plaintext\">http:\/\/www.server.com\/hydra\/20170416\/0453\/3bd24ae7-1df4-4d76-9d28-5b7fcb7fd8e5\n<\/code><\/pre>\n<p>\nA f\u00e1jlok fut\u00e1s k\u00f6zbeni kicsomagol\u00e1s\u00e1hoz megtal\u00e1ltuk \u00e9s csatlakoztattuk az nginx-unzip-module modult (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/youzee\/nginx-unzip-module\">https:\/\/github.com\/youzee\/nginx-unzip-module<\/a><\/noindex>) \u00e9s be\u00e1ll\u00edtottunk k\u00e9t upstream-et.<\/p>\n<p>Ennek eredm\u00e9nyek\u00e9nt ilyen konfigur\u00e1ci\u00f3 j\u00f6tt l\u00e9tre:<\/p>\n<p><img decoding=\"async\" alt=\"Tr\u00fckk\u00f6k nagy sz\u00e1m\u00fa apr\u00f3 f\u00e1jlok kezel\u00e9s\u00e9hez\" src=\"\/wp-content\/uploads\/2019\/08\/56f5210669fecfe194ac5907d563aa1d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA k\u00e9t hoszt a be\u00e1ll\u00edt\u00e1sokban \u00edgy n\u00e9zett ki:<\/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>\n\u00c9s a upstream konfigur\u00e1ci\u00f3 a magasabb szint\u0171 nginx-en:<\/p>\n<pre><code class=\"json\">upstream storage {\n  server server.com:8081;\n  server server.com:8082;\n}\n<\/code><\/pre>\n<p>\nHogy m\u0171k\u00f6dik:<\/p>\n<ul>\n<li>Az \u00fcgyf\u00e9l a front nginx-re megy<\/li>\n<li>A front nginx megpr\u00f3b\u00e1lja k\u00f6zvetlen\u00fcl a f\u00e1jlt kiszolg\u00e1lni az els\u0151 upstream-b\u0151l, azaz k\u00f6zvetlen\u00fcl a f\u00e1jlrendszerb\u0151l<\/li>\n<li>Ha a f\u00e1jl nem l\u00e9tezik, megpr\u00f3b\u00e1lja kiszolg\u00e1lni a m\u00e1sodik upstream-b\u0151l, amely megpr\u00f3b\u00e1lja megtal\u00e1lni a f\u00e1jlt az arch\u00edvumban<\/li>\n<\/ul>\n<p><\/p>\n<h2>A m\u00e1sodik probl\u00e9ma: megint \u00abNo space left on device\u00bb<\/h2>\n<p>\nEz a m\u00e1sodik probl\u00e9ma, amellyel akkor szembes\u00fclt\u00fcnk, amikor sok f\u00e1jl tal\u00e1lhat\u00f3 a k\u00f6nyvt\u00e1rban.<br \/>\nMegpr\u00f3b\u00e1lunk l\u00e9trehozni egy f\u00e1jlt, a rendszer azt panaszolja, hogy nincs hely. Megv\u00e1ltoztatjuk a f\u00e1jl nev\u00e9t, \u00e9s \u00fajra megpr\u00f3b\u00e1ljuk l\u00e9trehozni.<\/p>\n<p>Siker\u00fcl.<\/p>\n<p>K\u00f6r\u00fclbel\u00fcl \u00edgy n\u00e9z ki:<\/p>\n<p><img decoding=\"async\" alt=\"Tr\u00fckk\u00f6k nagy sz\u00e1m\u00fa apr\u00f3 f\u00e1jlok kezel\u00e9s\u00e9hez\" src=\"\/wp-content\/uploads\/2019\/08\/f365358b59bf81d450a236dfb58e4874.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAz inodes ellen\u0151rz\u00e9se nem tan\u00fas\u00edtott semmit - sok szabad van bel\u0151l\u00fck. <br \/>\nA hely ellen\u0151rz\u00e9se - ugyanaz.<br \/>\nArra gondoltunk, hogy tal\u00e1n t\u00fal sok f\u00e1jl van a k\u00f6nyvt\u00e1rban, \u00e9s erre van korl\u00e1toz\u00e1s, de ism\u00e9t nem: A k\u00f6nyvt\u00e1ron bel\u00fcli f\u00e1jlok maxim\u00e1lis sz\u00e1ma: ~1,3 \u00d7 10^20<\/p>\n<p>\u00c9s egy f\u00e1jlt is l\u00e9tre lehet hozni, ha megv\u00e1ltoztatjuk a nev\u00e9t.<br \/>\nTeh\u00e1t a probl\u00e9ma a f\u00e1jl nev\u00e9ben van.<\/p>\n<p>A tov\u00e1bbi keresg\u00e9l\u00e9s azt mutatta, hogy a probl\u00e9ma a k\u00f6nyvt\u00e1ri index \u00e9p\u00edt\u00e9se sor\u00e1n alkalmazott hash algoritmusban rejlik, sok f\u00e1jl eset\u00e9n \u00fctk\u00f6z\u00e9sek l\u00e9pnek fel, minden k\u00f6vetkezm\u00e9nnyel egy\u00fctt. B\u0151vebben itt olvashatsz: <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>Ezt az opci\u00f3t kikapcsolhatja, de a f\u00e1jlnevek szerinti keres\u00e9s el\u0151re kisz\u00e1m\u00edthatatlanul hossz\u00fa lehet, ha az \u00f6sszes f\u00e1jlt v\u00e9gig kell j\u00e1rni. <\/p>\n<pre><code class=\"bash\"> tune2fs -O \"^dir_index\" \/dev\/sdb3\n<\/code><\/pre>\n<p>\n\u00c1ltal\u00e1noss\u00e1gban, mint ideiglenes megold\u00e1s, m\u0171k\u00f6dhet.<\/p>\n<p>Moral: sok f\u00e1jl a k\u00f6nyvt\u00e1rban \u00e1ltal\u00e1ban rossz. Ezt nem szabad csin\u00e1lni.<\/p>\n<p>Ilyen esetekben \u00e1ltal\u00e1ban f\u00e1jlnevek kezd\u0151bet\u0171i vagy m\u00e1s param\u00e9terek, p\u00e9ld\u00e1ul d\u00e1tumok szerint bels\u0151 k\u00f6nyvt\u00e1rakat hoznak l\u00e9tre, ami a legt\u00f6bb esetben seg\u00edt.<br \/>\nDe a kis f\u00e1jlok \u00f6sszes\u00edtett sz\u00e1ma tov\u00e1bbra is probl\u00e9m\u00e1s, m\u00e9g ha k\u00f6nyvt\u00e1rakba is soroljuk \u0151ket \u2014 akkor l\u00e1sd az els\u0151 probl\u00e9m\u00e1t.<\/p>\n<h2>Harmadik probl\u00e9ma: hogyan n\u00e9zhetj\u00fck meg a f\u00e1jlok list\u00e1j\u00e1t, ha sok van bel\u0151l\u00fck?<\/h2>\n<p>\nA helyzet\u00fcnkben, ahol sok f\u00e1jlunk van, valahogy szembes\u00fclt\u00fcnk azzal a probl\u00e9m\u00e1val, hogy hogyan n\u00e9zhess\u00fck meg a k\u00f6nyvt\u00e1r tartalm\u00e1t.<\/p>\n<p>A standard megold\u00e1s \u2014 a parancs <code>ls<\/code>.<br \/>\nOk\u00e9, n\u00e9zz\u00fck meg, mi t\u00f6rt\u00e9nik 4772098 f\u00e1jl eset\u00e9n:<\/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 m\u00e1sodperc... ez soknak t\u0171nik. Az id\u0151 legnagyobb r\u00e9sze a felhaszn\u00e1l\u00f3i t\u00e9r f\u00e1jljainak feldolgoz\u00e1s\u00e1ra megy el, nem pedig a mag (kernel) munk\u00e1j\u00e1ra.<\/p>\n<p>De van megold\u00e1s:<\/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 m\u00e1sodperc. 10-szer gyorsabb.<br \/>\nHurr\u00e1!<\/p>\n<p><b>UPD.<\/b><\/p>\n<p>M\u00e9g gyorsabb megold\u00e1s a felhaszn\u00e1l\u00f3t\u00f3l <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/berez\/\" class=\"user_link\">berez<\/a><\/noindex> \u2014 a rendez\u00e9s kikapcsol\u00e1sa a <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>Negyedik probl\u00e9ma: magas LA f\u00e1jlok kezel\u00e9sekor<\/h2>\n<p>\nId\u0151r\u0151l id\u0151re felmer\u00fcl a helyzet, amikor rengeteg f\u00e1jlt kell \u00e1tm\u00e1solni egyik g\u00e9pr\u0151l a m\u00e1sikra. Ek\u00f6zben gyakran jelent\u0151sen megn\u0151 a LA, mivel minden a lemezek teljes\u00edtm\u00e9ny\u00e9be \u00fctk\u00f6zik.<\/p>\n<p>A leg\u00e9rtelmesebb, amit szeretn\u00e9nk \u2014 SSD-t haszn\u00e1lni. Val\u00f3ban men\u0151. Csak a t\u00f6bb terab\u00e1jtos SSD \u00e1ra a k\u00e9rd\u00e9s.<\/p>\n<p>De ha a lemezek norm\u00e1lisak, a f\u00e1jlokat \u00e1t kell m\u00e1solni, \u00e9s ez r\u00e1ad\u00e1sul egy produkci\u00f3s rendszer, ahol a t\u00falterhel\u00e9s el\u00e9gedetlens\u00e9get okoz az \u00fcgyfelek r\u00e9sz\u00e9r\u0151l? Legal\u00e1bb k\u00e9t hasznos eszk\u00f6z \u00e1ll rendelkez\u00e9sre: <code>kellemes<\/code> \u00e9s <code>ionice<\/code>.<\/p>\n<p><code>kellemes<\/code> \u2014 cs\u00f6kkenti a folyamat priorit\u00e1s\u00e1t, \u00edgy a scheduler t\u00f6bb id\u0151kvantumot oszt m\u00e1s, magasabb priorit\u00e1s\u00fa folyamatoknak.<br \/>\nGyakorlatunkban seg\u00edtett a nice maxim\u00e1lis (19 \u2014 a legalacsonyabb priorit\u00e1s, -20 (m\u00ednusz 20) \u2014 a legmagasabb) be\u00e1ll\u00edt\u00e1sa.<\/p>\n<p><code>ionice<\/code> \u2014 \u00edgy korrig\u00e1lja a bemeneti\/kimeneti (I\/O scheduling) priorit\u00e1st.<\/p>\n<p>Ha RAID-t haszn\u00e1l, \u00e9s hirtelen szinkroniz\u00e1lnia kell (p\u00e9ld\u00e1ul egy sikertelen \u00fajraind\u00edt\u00e1s ut\u00e1n, vagy a RAID t\u00f6mb helyre\u00e1ll\u00edt\u00e1sa ut\u00e1n egy lemezcsere miatt), akkor bizonyos helyzetekben \u00e9rdemes cs\u00f6kkenteni a szinkroniz\u00e1l\u00e1s sebess\u00e9g\u00e9t, hogy a t\u00f6bbi folyamat viszonylag megfelel\u0151en m\u0171k\u00f6dhessen. Ehhez seg\u00edt a k\u00f6vetkez\u0151 parancs:<\/p>\n<pre><code class=\"bash\">\necho 1000 &gt; \/proc\/sys\/dev\/raid\/speed_limit_max\n<\/code><\/pre>\n<p><\/p>\n<h2>\u00d6t\u00f6dik probl\u00e9ma: Hogyan szinkroniz\u00e1ljunk f\u00e1jlokat val\u00f3s id\u0151ben<\/h2>\n<p>\nUgyanazokkal a hatalmas mennyis\u00e9g\u0171 f\u00e1jlokkal rendelkez\u00fcnk, amelyeket biztons\u00e1gi ment\u00e9sk\u00e9nt el kell k\u00fcldeni a m\u00e1sodik szerverre a lehets\u00e9ges vesztes\u00e9gek elker\u00fcl\u00e9se \u00e9rdek\u00e9ben... A f\u00e1jlok folyamatosan \u00edr\u00f3dnak, ez\u00e9rt minim\u00e1lis vesztes\u00e9g el\u00e9r\u00e9se \u00e9rdek\u00e9ben a lehet\u0151 leggyorsabban kell m\u00e1solni \u0151ket.<\/p>\n<p>A standard megold\u00e1s: Rsync SSH-n kereszt\u00fcl.<\/p>\n<p>Ez j\u00f3 lehet\u0151s\u00e9g, ha csak nem kell ezt t\u00f6bb m\u00e1sodpercenk\u00e9nt megtenni. R\u00e1ad\u00e1sul sok f\u00e1jl van. M\u00e9g ha nem is m\u00e1soljuk \u0151ket \u2013 akkor valahogy tudnunk kell, hogy mi v\u00e1ltozott, \u00e9s t\u00f6bb milli\u00f3 f\u00e1jl \u00f6sszehasonl\u00edt\u00e1sa id\u0151t \u00e9s terhel\u00e9st jelent a lemezeken.<\/p>\n<p>Vagyis azonnal tudnunk kell, hogy mit kell m\u00e1solni an\u00e9lk\u00fcl, hogy minden alkalommal el kellene ind\u00edtani az \u00f6sszehasonl\u00edt\u00e1st.<\/p>\n<p>A megold\u00e1s \u2013 <code>lsyncd<\/code>. <code>Lsyncd<\/code> \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/axkibe.github.io\/lsyncd\/\">\u00c9l\u0151 szinkroniz\u00e1l\u00f3 (t\u00fck\u00f6r) d\u00e9mon<\/a><\/noindex>. Ez is az rsync-en kereszt\u00fcl m\u0171k\u00f6dik, de emellett figyeli a f\u00e1jlrendszert a v\u00e1ltoz\u00e1sok szempontj\u00e1b\u00f3l az inotify \u00e9s fsevents haszn\u00e1lat\u00e1val, \u00e9s csak azokat a f\u00e1jlokat m\u00e1solja, amelyek megjelentek vagy megv\u00e1ltoztak.<\/p>\n<h2>Hatodik probl\u00e9ma: hogyan hat\u00e1rozzuk meg, ki terheli a lemezeket<\/h2>\n<p>\nVal\u00f3sz\u00edn\u0171leg mindenki tudja, de az\u00e9rt a teljess\u00e9g kedv\u00e9\u00e9rt: a lemezes alrendszer megfigyel\u00e9s\u00e9re a k\u00f6vetkez\u0151 parancs \u00e1ll rendelkez\u00e9sre: <code>iotop<\/code> \u2014 hasonl\u00f3 <code>top<\/code>, de megmutatja a legakt\u00edvabban haszn\u00e1lt folyamatokat a lemezeken.<\/p>\n<p><img decoding=\"async\" alt=\"Tr\u00fckk\u00f6k nagy sz\u00e1m\u00fa apr\u00f3 f\u00e1jlok kezel\u00e9s\u00e9hez\" src=\"\/wp-content\/uploads\/2019\/08\/56612c618469ef340a31ae446d65ed4e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEgy\u00e9bk\u00e9nt a r\u00e9gi, j\u00f3 \u00f6reg top is seg\u00edt meg\u00e9rteni, hogy vannak-e probl\u00e9m\u00e1k a lemezekkel. Ehhez k\u00e9t legmegfelel\u0151bb param\u00e9ter van: <b>Load Average<\/b> \u00e9s <b>IOwait<\/b>.<\/p>\n<p><img decoding=\"async\" alt=\"Tr\u00fckk\u00f6k nagy sz\u00e1m\u00fa apr\u00f3 f\u00e1jlok kezel\u00e9s\u00e9hez\" src=\"\/wp-content\/uploads\/2019\/08\/01a0565947de65d13b0045f7180caf5d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAz els\u0151 mutatja, h\u00e1ny folyamat v\u00e1r a kiszolg\u00e1l\u00e1sra, \u00e1ltal\u00e1ban ha t\u00f6bb mint 2 van, m\u00e1r valami nem stimmel. Akt\u00edv biztons\u00e1gi ment\u00e9s k\u00e9sz\u00edt\u00e9sekor a h\u00e1tt\u00e9rszerverek sz\u00e1m\u00e1ra 6-8-as \u00e9rt\u00e9k elfogadhat\u00f3, ezen t\u00fal a helyzet rendellenesnek sz\u00e1m\u00edt.<\/p>\n<p>A m\u00e1sodik mutatja, mennyire van a processzor a lemezes m\u0171veletekkel elfoglalva. Az IOwait &gt;10% aggodalomra ad okot, b\u00e1r a speci\u00e1lis terhel\u00e9sprofil\u00fa szervereink eset\u00e9n gyakran 40-50%-os stabil terhel\u00e9st tapasztalunk, ami t\u00e9nyleg norm\u00e1lis.<\/p>\n<p>Ezen be is fejezem, b\u00e1r biztosan sok olyan szempont van, amivel m\u00e9g nem tal\u00e1lkoztunk, \u00f6r\u00f6mmel v\u00e1rom a komment\u00e1rokat \u00e9s \u00e9rdekes, val\u00f3s esetek le\u00edr\u00e1sait.<br \/>\n<br \/>Forr\u00e1s: <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\/hu\/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=\"hu_HU\" \/>\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\/hu\/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\udd47Tr\u00fckk\u00f6k nagy sz\u00e1m\u00fa kis f\u00e1jl kezel\u00e9s\u00e9hez | ProHoster","description":"A cikk \u00f6tlete v\u00e1ratlanul sz\u00fcletett egy vit\u00e1b\u00f3l a \u00abKicsit az inode-r\u00f3l\u00bb c\u00edm\u0171 cikk kommentjei k\u00f6z\u00f6tt.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","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\/hu\/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\/hu\/wp-json\/wp\/v2\/posts\/36999","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=36999"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/36999\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/27728"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=36999"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=36999"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=36999"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}