Hacks yekushanda nenhamba huru yemafaira madiki

Pfungwa yechinyorwa yakazvarwa zvega kubva pakukurukurirana mumashoko kune chinyorwa "Chimwe chinhu nezve inode".

Hacks yekushanda nenhamba huru yemafaira madiki

Icho chokwadi ndechekuti iyo yemukati chaiyo yemasevhisi edu kuchengetedza kwenhamba hombe yemafaira madiki. Parizvino tine mazana ematerabytes e data rakadaro. Uye takawana mamwe aripachena uye asina kunyatsojeka rakes uye takabudirira kufamba nawo.

Nokudaro, ndiri kugovera ruzivo rwedu, zvichida zvichabatsira kune mumwe munhu.

Dambudziko rekutanga: "Hapana nzvimbo yasara pachigadzirwa"

Sezvakataurwa munyaya yataurwa pamusoro apa, dambudziko nderekuti pane zvivharo zvepachena pafaira system, asi inode yapera.

Iwe unogona kutarisa nhamba yeakashandiswa uye emahara inode nemurairo df -ih:

Hacks yekushanda nenhamba huru yemafaira madiki

Ini handisi kuzodzokorora chinyorwa; muchidimbu, dhisiki ine ese mabhuraki e data pachayo uye mabhuroko e meta-ruzivo, inozivikanwawo se inodes (index node). Nhamba yavo inotaridzwa kana iyo faira system yatangwa (tiri kutaura nezve ext2 nevatsivi vayo) uye haishanduke zvakare. Chiyero che data blocks uye inode inotarwa kubva kuvhareji yedata data, asi mune yedu, kana paine akawanda madiki mafaira, chiyero chinofanira kuchinjika kune nhamba yeinode - panofanira kunge paine akawanda.

Linux inotopa sarudzo dzine mabharani akasiyana, uye ese aya pre-akaverengerwa masisitimu ari mufaira /etc/mke2fs.conf.
Naizvozvo, panguva yekutanga yekutanga faira system kuburikidza neMke2fs, unogona kutsanangura yaunoda chimiro.

Heino mimwe mienzaniso kubva mufaira:

    small = {
        blocksize = 1024
        inode_size = 128
        inode_ratio = 4096
    }

    big = {
        inode_ratio = 32768
    }

    largefile = {
        inode_ratio = 1048576
        blocksize = -1
    }

Iwe unogona kusarudza yaunoda kushandisa kesi uchishandisa iyo "-T" sarudzo paunenge uchifonera mke2fs. Iwe unogona zvakare kuseta magadzirirwo anodiwa kana pasina mhinduro yakagadzirwa.

Mamwe mashoko anotsanangurwa muzvinyorwa zve mke2fs.conf и mke2fs.

Chinhu chisina kubatwa mune yataurwa pamusoro apa ndechekuti iwe unogona kuseta saizi yedata block. Zviripachena, kune mahombe mafaira zvine musoro kuve nehukuru bhuroka saizi, kune madiki mafaira zvine musoro kuve nediki.

Nekudaro, zvakakosha kuti titarise chinhu chinonakidza chakadai seye processor architecture.
Ndakambofunga kuti kune mafoto mahombe mafaera ndaida yakakura block size. Zvakaitika kumba, pane imwe imba faira chitoro chinonzi WD pane ARM architecture. Pasina kuzeza, ndakaisa saizi yebhuroka ku8k kana 16k pachinzvimbo cheyero 4k, ndamboyedza mari yakachengetwa. Uye zvinhu zvose zvakanga zvakanaka kusvikira chengetedzo pachayo yakundikana, uye diski yakanga ichiri kurarama. Mushure mekuisa dhisiki mukombuta yenguva dzose ine Intel processor yenguva dzose, ndakashamisika: saizi isina kutsigirwa yebhuroka. Tasvika. Iyo data iripo, zvese zvakanaka, asi hazvibviri kuverenga. i386 uye ma processor akafanana haagone kushanda nemabhuroki saizi asingaenderane nehukuru hwepeji yekurangarira, iri 4k chaiyo. Kazhinji, nyaya yacho yakaguma nekushandiswa kwezvishandiso kubva munzvimbo yevashandisi, zvese zvainonoka uye zvinosuruvarisa, asi iyo data yakachengetwa. Kana paine munhu anofarira, google zita rekushandisa fuseext2. Moral: funga nezvese zviitiko mberi, kana usanyepedzera kuva gamba uye shandisa zvakajairwa zvigadziriso zvevakadzi vepamba.

UPD. Zvinoenderana nemhinduro yemushandisi berez Ndinoda kujekesa kuti kune i386 ukuru hwevhavha haifaniri kudarika 4k, asi haifaniri kuva chaiyo 4k, i.e. 1k uye 2k zvinogamuchirwa.

Saka, takagadzirisa sei matambudziko acho?

Chekutanga, takasangana nedambudziko apo multi-terabyte dhisiki yakanga izere nedata, uye isu hatina kukwanisa kushandura faira system configuration.

Chechipiri, mhinduro yaidiwa nokukurumidza.

Somugumisiro, takasvika kumhedziso yokuti tinoda kuchinja chiyero nekuderedza nhamba yemafaira.
Kuti kuderedze huwandu hwemafaira, zvakasarudzwa kuisa mafaera mune imwe yakajairika archive. Tichifunga nezvedu, tinoisa mafaera ese pane imwe nguva yenguva mune imwe archive, uye takaita kuchengetedza tichishandisa cron basa manheru ega ega.

Yakasarudzwa zip archive. Mumashoko echinyorwa chakapfuura, tar yakakurudzirwa, asi pane imwe yakaoma nayo: haina tafura yezviri mukati, uye mafaera ari mairi anochengetwa murukova (haisi kungoti "tar" ipfupiso. ye "Tape Archive", nhaka yematepi madhiraivha), i.e. kana iwe uchida kuverenga faira kumagumo kweiyo archive, unofanirwa kuverenga iyo archive yese, sezvo isina zvigadziriso zvefaira rega rega zvine chekuita nekutanga kweiyo archive. Uye saka kushanda kwenguva refu. Zvese zviri nani mu zip: ine tafura yakafanana yezviri mukati uye mafaera anobvisa mukati meiyo archive, uye nguva yekuwana kune imwe neimwe faira haina zvinoenderana nenzvimbo yayo. Zvakanaka, kwatiri isu, zvakagoneka kuseta iyo yekumanikidza sarudzo ku "0", nekuti ese mafaera akange atotsikirirwa mune gzip pamberi.

Vatengi vanotora mafaera kuburikidza ne nginx, uye zvinoenderana neiyo API yekare, iro zita refaira rinotsanangurwa, semuenzaniso seizvi:

http://www.server.com/hydra/20170416/0453/3bd24ae7-1df4-4d76-9d28-5b7fcb7fd8e5

Kuti tiburitse mafaera panhunzi, takawana nekubatanidza nginx-unzip-module module (https://github.com/youzee/nginx-unzip-module) uye umise nzizi mbiri dzepamusoro.

Mhedzisiro yacho yaive yekumisikidza kunotevera:

Hacks yekushanda nenhamba huru yemafaira madiki

Iwo maviri mauto mumaseting aita seizvi:

server {
  listen *:8081;

  location / {
    root      /home/filestorage;
  }
}

server {
  listen *:8082;

  location ~ ^/hydra/(d+)/(d+)/(.*)$ {
    root      /home/filestorage;
    file_in_unzip_archivefile "/home/filestorage/hydra/$1/$2.zip";
    file_in_unzip_extract "$2/$3";
    file_in_unzip;
  }
}

Uye kumisikidzwa kwekumusoro kwekumusoro nginx:

upstream storage {
  server server.com:8081;
  server server.com:8082;
}

Chinoshanda sei:

  • Mutengi anoenda kumberi nginx
  • Pamberi nginx inoedza kushandira iyo faira kubva kune yekutanga kumusoro, i.e. zvakananga kubva kufaira system
  • Kana pasina faira, inoedza kutumira kubva kune yechipiri kumusoro, iyo inoedza kutsvaga iyo faira mukati meiyo archive.

Dambudziko rechipiri: zvakare "Hapana nzvimbo yasara pachigadzirwa"

Iri ndiro dambudziko rechipiri ratakasangana naro kana paine mafaera akawanda mudhairekitori.
Tiri kuedza kugadzira faira, iyo system inonyunyuta kuti hapana nzvimbo. Isu tinoshandura zita refaira uye edza kuigadzira zvakare.

Zvinobuda.

Zvinotaridzika seizvi:

Hacks yekushanda nenhamba huru yemafaira madiki

Kutarisa iyo inode haina kupa chero chinhu - kune akawanda emahara.
Kuongorora nzvimbo kwakafanana.
Isu takafunga kuti panogona kunge paine mafaera akawandisa mudhairekitori, uye pane muganhu pane izvi, asi zvakare kwete: Nhamba yepamusoro yemafaira pane dhairekitori: ~ 1.3 × 10 ^ 20

Hongu, uye iwe unogona kugadzira faira kana ukashandura zita.
Mhedziso - dambudziko riri muzita refaira.

Kumwe tsvakiridzo kwakaratidza kuti dambudziko riri muhashing algorithm paunenge uchigadzira dhairekitori index; nehuwandu hukuru hwemafaira, kudhumhana kunoonekwa nemhedzisiro yese inotevera. Unogona kuverenga zvakawanda pano: https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Hash_Tree_Directories

Iwe unogona kudzima sarudzo iyi, asi ... kutsvaga faira nemazita kunogona kureba zvisingatarisirwi kana uchitsvaga mumafaira ese.

 tune2fs -O "^dir_index" /dev/sdb3

Kazhinji, iyi inguva yekugadzirisa inogona kushanda.

Moral: akawanda mafaera mudhairekitori kazhinji chinhu chakaipa. Hapana chikonzero chekuita izvi.

Kazhinji mumamiriro ezvinhu akadaro, madhairekitori akaiswa anogadzirwa nemabhii ekutanga ezita refaira kana nemamwe maparameter, semuenzaniso, nemazuva, kazhinji izvi zvinochengetedza zuva.
Asi nhamba yese yemafaira madiki ichiri yakaipa, kunyangwe ikakamurwa kuita madhairekitori - zvino ona dambudziko rekutanga.

Dambudziko rechitatu: maitiro ekuona rondedzero yemafaira kana paine akawanda awo

Mumamiriro edu ezvinhu, kana tine mafaira akawanda, imwe nzira kana imwe takatarisana nedambudziko rekuona zviri mukati medhairekitori.

Standard solution - command ls.
Zvakanaka, ngatione zvinoitika pamafaira e4772098:


$ time ls /home/app/express.repository/offercache/ >/dev/null

real	0m30.203s
user	0m28.327s
sys	0m1.876s

30 seconds ... ichave yakawandisa. Uyezve, yakawanda yenguva inoshandiswa pakugadzirisa mafaira munzvimbo yevashandisi, uye kwete zvachose pakushanda kwekernel.

Asi pane mhinduro:


$ time find /home/app/express.repository/offercache/ >/dev/null

real	0m3.714s
user	0m1.998s
sys	0m1.717s

3 seconds. 10 nguva nekukurumidza.
Hooray!

UPD.

Mhinduro yakakurumidza kubva kumushandisi berez - kudzima kurongedza ls


time ls -U /home/app/express.repository/offercache/ >/dev/null
real	0m2.985s
user	0m1.377s
sys	0m1.608s

Dambudziko rechina: hombe LA kana uchishanda nemafaira

Nguva nenguva mamiriro ezvinhu anomuka kana iwe uchida kukopa boka remafaira kubva kune mumwe muchina kuenda kune mumwe. Panguva imwecheteyo, LA inowanzokura zvisingaite, sezvo zvinhu zvose zvinoenderana nekushanda kwema disks pachavo.

Chinhu chakangwara chaunoda kuita kushandisa SSD. Kutonhorera chaiko. Mubvunzo chete mutengo weakawanda-terabyte SSD.

Asi kana madhisiki ari akajairwa, iwe unofanirwa kukopa mafaera, uye iyi zvakare dhizaini sisitimu, uko kuwandisa kunotungamira kune kusagutsikana zvirevo kubva kune vatengi? Pane angangoita maviri maturusi anobatsira: nice и ionice.

nice - inoderedza kukosha kwemaitiro, nekudaro mugadziri anogovera mamwe zvidimbu zvenguva kune mamwe, epamusoro ekutanga maitiro.
Mukuita kwedu, zvakabatsira kumisa zvakanaka kusvika pakakwirira (19 ndiyo inonyanya kukosha, -20 (minus 20) ndiyo yepamusoro).

ionice - inogadzirisa I / O kuronga zvinoenderana

Kana iwe uri kushandisa RAID uye inongoerekana yada kuwiriraniswa (mushure mekusabudirira reboot kana iwe unofanirwa kudzoreredza RAID array mushure mekutsiva dhisiki), saka mune mamwe mamiriro ezvinhu zvine musoro kudzikisa kuwiriranisa kumhanya kuitira kuti mamwe maitiro ashande zvakanyanya. kana zvishoma zvakakwana. Murairo unotevera uchabatsira pane izvi:


echo 1000 > /proc/sys/dev/raid/speed_limit_max

Dambudziko shanu: Maitiro ekufananidza mafaera mune chaiyo-nguva

Tichiri nenhamba yakakura yefaira inoda kutsigirwa kune yechipiri sevha kudzivirira ... Mafaira ari kugara achinyorwa, saka kuti uve nehuwandu hwekurasikirwa, unofanirwa kukopa iwo nekukurumidza sezvinobvira.

Yakajairwa mhinduro: Rsync pamusoro peSSH.

Iyi isarudzo yakanaka kunze kwekunge iwe uchida kuzviita masekonzi mashoma. Uye kune akawanda mafaera. Kunyange kana iwe ukasazvikopa, iwe uchiri kuda kunzwisisa kuti chii chachinja, uye kuenzanisa mamirioni akati wandei mafaira kunotora nguva uye kurodha pamadhisiki.

Avo. isu tinofanirwa kuziva nekukurumidza izvo zvinoda kukopwa, pasina kumhanyisa kuenzanisa nguva dzese.

Kununura - lsyncd. Lsyncd - Rarama Syncing (Mirror) Daemon. Iyo inoshandawo kuburikidza ne rsync, asi nekuwedzera inotarisisa iyo faira system yekuchinja uchishandisa inotify uye fsevents uye inongotanga kukopa iwo mafaera akaonekwa kana achinja.

Dambudziko rechitanhatu: sei kunzwisisa kuti ndiani ari kurodha disks

Wese munhu angangoziva izvi, asi zvakadaro, kupedzisa mufananidzo: pane murairo wekutarisa disk subsystem iotop - kufanana top, asi inoratidza maitiro ari kunyanya kushandisa dhisiki.

Hacks yekushanda nenhamba huru yemafaira madiki

Nenzira, iyo yakanaka yekare yepamusoro inokubvumirawo kuti unzwisise kana pane dambudziko ne disks kana kwete. Pane maviri akanyanya kukodzera sarudzo dzeizvi: Load Avhareji и IOwait.

Hacks yekushanda nenhamba huru yemafaira madiki

Yekutanga inoratidza kuti mangani maitiro ari mumutsara webasa, kazhinji kupfuura 2 - chimwe chinhu chiri kutotadza. Kana tichishingairira kukopa kumasevha ekuchengetedza, tinobvumira kusvika ku6-8, mushure mezvo mamiriro acho anoonekwa seasina kujairika.

Chechipiri ndechekuti yakabatikana sei processor ine disk mashandiro. IOwait> 10% chikonzero chekunetsekana, kunyangwe pamaseva edu ane chaiyo faira profil inogara 40-50%, uye izvi ndizvo chaizvo zvakajairwa.

Ini ndichapedzisa pano, kunyangwe paine akawanda mapoinzi atisina kubata nawo, ndichafara kumirira zvirevo uye tsananguro yezviitiko zvinonakidza chaizvo.

Source: www.habr.com

Voeg