Ingcamango yenqaku yazalwa ngokuzenzekelayo ukusuka kwingxoxo kumagqabaza ukuya kwinqaku .

Inyaniso kukuba ukucaciswa kwangaphakathi kweenkonzo zethu kukugcinwa kwenani elikhulu leefayile ezincinci. Okwangoku sinamakhulu eeterabytes zedatha enjalo. Kwaye sadibana neeraki ezicacileyo nezingacacanga kangako kwaye saziqhuba ngempumelelo.
Ngoko ke, ndabelana ngamava ethu, mhlawumbi kuya kuba luncedo kumntu.
Ingxaki yokuqala: "Akukho ndawo ishiywe kwisixhobo"
Njengoko kukhankanyiwe kwinqaku elikhankanywe ngasentla, ingxaki kukuba kukho iibhloko zamahhala kwinkqubo yefayile, kodwa i-inode iphelile.
Ungajonga inani lee-inodes ezisetyenzisiweyo kunye nezisimahla kunye nomyalelo df -ih:

Andiyi kuphinda ndixelele inqaku; ngokufutshane, idiski iqulethe zombini iibhloko zedatha ngokwayo kunye neebhloko ze-meta-information, eyaziwa ngokuba yi-inodes (i-index node). Inani labo libekwe xa inkqubo yefayile iqaliswa (sithetha nge-ext2 kunye nabaphumeleleyo bayo) kwaye ayitshintshi ngakumbi. Ibhalansi yeebhloko zedatha kunye ne-inodes ibalwa ukusuka kumyinge wedatha yezibalo, kodwa kwimeko yethu, xa kukho ezininzi iifayile ezincinci, ibhalansi kufuneka itshintshe ukuya kwinani le-inodes - kufuneka kubekho ngaphezulu.
В Linux Sele sinikezele ngeendlela ezahlukeneyo zokulinganisa, kwaye zonke ezi zicwangciso zibalwe kwangaphambili zikwifayile. /etc/mke2fs.conf.
Ngoko ke, ngexesha lokuqalwa kokuqala kwendlela yefayile nge-Mke2fs, ungakhankanya iprofayile efunekayo.
Nantsi eminye imizekelo esuka kwifayile:
small = {
blocksize = 1024
inode_size = 128
inode_ratio = 4096
}
big = {
inode_ratio = 32768
}
largefile = {
inode_ratio = 1048576
blocksize = -1
}
Ungakhetha usebenziso olufunwayo usebenzisa u-“-T” ukhetho xa ufowunela umke2fs. Unokwenza kwakhona ngesandla iiparameters ezifunekayo ukuba akukho sisombululo esenziwe ngomumo.
Iinkcukacha ezithe vetshe zichazwe kwiincwadana ze mke2fs.conf и mke2fs.
Isici esingachukunyiswanga kwinqaku elikhankanywe ngasentla kukuba unokuseta ubungakanani bebhloko yedatha. Ngokucacileyo, kwiifayile ezinkulu kunengqiqo ukuba nesayizi yebhloko enkulu, kwiifayile ezincinci kunengqiqo ukuba nencinci.
Nangona kunjalo, kufanelekile ukuqwalasela into enomdla njengeprosesa yoyilo.
Ndakhe ndacinga ukuba kwiifayile ezinkulu zeefoto ndifuna ubungakanani bebhloko enkulu. Kwenzeke ekhaya, kwivenkile yefayile yasekhaya ebizwa ngokuba yi-WD kuyilo lwe-ARM. Ngaphandle kokuthandabuza, ndibeka ubungakanani bebhloko nokuba yi-8k okanye i-16k endaweni ye-4k eqhelekileyo, ndilinganisele ukonga kwangaphambili. Kwaye yonke into yayilungile kwaze kwaba yilapho ukugcinwa ngokwawo kwahluleka, kwaye idiski yayisaphila. Emva kokufaka idiski kwikhompyuter eqhelekileyo kunye neprosesa ye-Intel eqhelekileyo, ndiye ndamangaliswa: ubungakanani bebhloko engaxhaswanga. Sifikile. Idatha ikhona, yonke into ilungile, kodwa akunakwenzeka ukufunda. i386 kunye neeprosesa ezifanayo azikwazi ukusebenza kunye nobukhulu bebhloko ezingahambelani nobungakanani bephepha lememori, eyi-4k kanye. Ngokubanzi, umcimbi uphelile ngokusetyenziswa kwezixhobo ezivela kwindawo yomsebenzisi, yonke into yayicotha kwaye ibuhlungu, kodwa idatha igcinwe. Ukuba nabani na unomdla, google igama lesixhobo fuseext2. Ukuziphatha: mhlawumbi ucinge ngazo zonke iimeko kwangaphambili, okanye ungazenzi iqhawe kwaye usebenzise iisetingi eziqhelekileyo kubafazi bezindlu.
UPD. Ngokwezimvo zomsebenzisi Ndingathanda ukucacisa ukuba i-i386 ubungakanani bebhloko akufanele budlule i-4k, kodwa akufuneki ukuba ibe yi-4k ngqo, i.e. 1k kunye no-2k zamkelekile.
Ngoko ke, sizisombulule njani iingxaki?
Okokuqala, siye sadibana nengxaki xa idiski ye-multi-terabyte yayigcwele idatha, kwaye asikwazanga ukutshintsha inkqubo yefayile.
Okwesibini, isisombululo sasifuneka ngokukhawuleza.
Ngenxa yoko, safikelela kwisigqibo sokuba kufuneka sitshintshe ibhalansi ngokunciphisa inani leefayile.
Ukunciphisa inani leefayile, kwagqitywa ukubeka iifayile kwindawo enye eqhelekileyo. Ukuthathela ingqalelo iinkcukacha zethu, sibeka zonke iifayile ngexesha elithile kwindawo yogcino, kwaye senze ugcino kusetyenziswa umsebenzi wecron ubusuku ngabunye.
Indawo yokugcina yezip ekhethiweyo. Kumagqabantshintshi kwinqaku elidlulileyo, itar yacetyiswa, kodwa kukho ubunzima obunye ngayo: ayinayo itafile yemixholo, kwaye iifayile kuyo zigcinwe kumlambo (ayisiyiyo nje into yokuba "tar" sisifinyezo. ye "Tape Archive", ilifa letape drives), oko kukuthi. Ukuba ufuna ukufunda ifayile ekupheleni kwendawo yogcino, kufuneka ufunde yonke indawo yokugcina, kuba ayiqulathanga uhlaselo lwefayile nganye enxulumene nesiqalo sogcino. Kwaye ke ngoko lusebenza ixesha elide. Yonke into ingcono kakhulu kwi-zip: inetheyibhile efanayo yemixholo kunye neefayile ezifakwe kwi-archive, kwaye ixesha lokufikelela kwifayile nganye alixhomekeke kwindawo yalo. Ewe, kwimeko yethu, kwakunokwenzeka ukuseta inketho yoxinzelelo kwi "0", kuba zonke iifayile zazisele zixinzelelwe kwi-gzip kwangaphambili.
Abathengi bafumana iifayile nge-nginx, kwaye ngokwe-API yakudala, igama lefayile lichaziwe, umzekelo onje:
http://www.server.com/hydra/20170416/0453/3bd24ae7-1df4-4d76-9d28-5b7fcb7fd8e5
Ukukhupha iifayile kubhabho, sifumene kwaye siqhagamshele imodyuli ye nginx-unzip () kwaye umise imisinga emibini ephezulu.
Isiphumo ibe lulungelelwaniso olulandelayo:

Iinginginya ezimbini eziseto zijongeka ngolu hlobo:
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;
}
}
Kwaye ulungelelwaniso oluphezulu kwi-nginx ephezulu:
upstream storage {
server server.com:8081;
server server.com:8082;
}
Ingaba isebenza kanjani:
- Umxhasi uya ngaphambili nginx
- Ngaphambili nginx izama ukukhonza ifayile ukusuka kweyokuqala ukuya phezulu, i.e. ngqo kwisixokelelwano sefayile
- Ukuba akukho fayile, izama ukuthumela ukusuka kweyesibini ukuya phezulu, ezama ukufumana ifayile ngaphakathi kwendawo yokugcina.
Ingxaki yesibini: kwakhona "Akukho ndawo ishiywe kwisixhobo"
Le yingxaki yesibini esiye sadibana nayo xa kukho iifayile ezininzi kulawulo.
Sizama ukwenza ifayile, inkqubo ikhalaza ukuba akukho ndawo. Sitshintsha igama lefayile kwaye sizame ukuyidala kwakhona.
Kuyavela.
Ijongeka ngolu hlobo:

Ukujonga ii-inodes akuzange kunikeze nantoni na - kukho ezininzi ezikhululekile.
Ukujonga indawo kuyafana.
Sasicinga ukuba kunokubakho iifayile ezininzi kuluhlu, kwaye kukho umda kule nto, kodwa kwakhona akukho: Inani eliphezulu leefayile kuluhlu ngalunye: ~1.3 × 10^20
Ewe, kwaye unokwenza ifayile ukuba utshintsha igama.
Isiphelo - ingxaki ikwigama lefayile.
Uphando olongezelelweyo lubonise ukuba ingxaki ikwi-algorithm ye-hashing xa kusakhiwa isalathisi solawulo; kunye nenani elikhulu leefayile, ukungqubana kujongwa kunye nazo zonke iziphumo ezilandelayo. Unokufunda iinkcukacha ezininzi apha:
Ungalucima olu khetho, kodwa... ukukhangela ifayile ngegama kunokuba nde ngokungalindelekanga xa uziphendla zonke iifayile.
tune2fs -O "^dir_index" /dev/sdb3
Ngokubanzi, esi sisisombululo sethutyana esinokusebenza.
Ukuziphatha: ezininzi iifayile kuluhlu ludla ngokuba yinto embi. Akukho mfuneko yakwenza oku.
Ngokuqhelekileyo kwiimeko ezinjalo, abalawuli abafakwe kwindlwane benziwa ngoonobumba bokuqala begama lefayile okanye ngezinye iiparameters, umzekelo, ngemihla, kwiimeko ezininzi oku kugcina usuku.
Kodwa inani elipheleleyo leefayile ezincinci zisangalunganga, nokuba zihlulwe zibe ngabalawuli - ke bona ingxaki yokuqala.
Ingxaki yesithathu: indlela yokujonga uluhlu lweefayile ukuba zininzi zazo
Kwimeko yethu, xa sineefayile ezininzi, enye indlela okanye enye sijongene nengxaki yendlela yokujonga imixholo yoluhlu.
Isisombululo esisemgangathweni - umyalelo ls.
Kulungile, makhe sibone ukuba kwenzeka ntoni kwiifayile ze-4772098:
$ time ls /home/app/express.repository/offercache/ >/dev/null
real 0m30.203s
user 0m28.327s
sys 0m1.876s
30 imizuzwana... iya kuba kakhulu. Ngaphezu koko, ixesha elininzi lichithwa ekuqhubeni iifayile kwindawo yomsebenzisi, kwaye akukho konke ekusebenzeni kwekernel.
Kodwa kukho isisombululo:
$ time find /home/app/express.repository/offercache/ >/dev/null
real 0m3.714s
user 0m1.998s
sys 0m1.717s
3 imizuzwana. Amaxesha angama-10 ngokukhawuleza.
Molo!
UPD.
Isisombululo esikhawulezayo esisuka kumsebenzisi - cima ukucwangcisa ls
time ls -U /home/app/express.repository/offercache/ >/dev/null
real 0m2.985s
user 0m1.377s
sys 0m1.608s
Ingxaki yesine: enkulu LA xa usebenza ngeefayile
Ngamaxesha ngamaxesha kuvela imeko xa ufuna ukukopisha iqela leefayile ukusuka kumatshini omnye ukuya komnye. Ngexesha elifanayo, i-LA ihlala ikhula ngokungekho ngqiqweni, kuba yonke into ixhomekeke ekusebenzeni kweediski ngokwazo.
Eyona nto ilumkileyo ofuna ukuyenza kukusebenzisa i-SSD. Ipholile ngokwenene. Umbuzo kuphela lixabiso le-SSD ye-multi-terabyte.
Kodwa ukuba iidiski ziqhelekile, kufuneka ukhuphele iifayile, kwaye oku kwakhona yinkqubo yokuvelisa, apho ukulayisha ngaphezulu kukhokelela kwizikhuzo ezinganelisekanga ezivela kubaxhasi? Ubuncinci zimbini izixhobo eziluncedo: nice и ionice.
nice - kunciphisa ukubekwa phambili kwenkqubo, ngokufanelekileyo umcwangcisi usasaza amaxesha amaninzi kwezinye, iinkqubo eziphambili eziphambili.
Kwindlela yethu yokusebenza, kwanceda ukuseta i-nice ukuya phezulu (i-19 yeyona nto iphambili, -20 (minus 20) iphezulu).
ionice — ihlengahlengisa i-I/O yokucwangcisa ngokufanelekileyo
Ukuba usebenzisa i-RAID kwaye ngequbuliso ifuna ukudityaniswa (emva kokungaphumeleli ukuphinda uqalise okanye ufuna ukubuyisela uluhlu lweRAID emva kokutshintsha idiski), ke kwezinye iimeko kuyavakala ukunciphisa isantya songqamaniso ukuze ezinye iinkqubo zisebenze ngakumbi. okanye ngaphantsi ngokwaneleyo. Lo myalelo ulandelayo uya kunceda oku:
echo 1000 > /proc/sys/dev/raid/speed_limit_max
Ingxaki yesihlanu: Ukuvumelanisa njani iifayile ngexesha lokwenyani
Sisenenani elikhulu elifanayo leefayile ezifuna ukugcinwa kwi-server yesibini ukuphepha ... Iifayile zihlala zibhalwa, ngoko ke ukuze ube nelahleko encinci, kufuneka uzikopishe ngokukhawuleza.
Isisombululo esisemgangathweni: Rsync ngaphezulu kweSSH.
Olu lukhetho olulungileyo ngaphandle kokuba kufuneka uyenzile yonke imizuzwana embalwa. Kwaye kukho iifayile ezininzi. Nokuba awuzikhupheli, kusafuneka uqonde ukuba yintoni etshintshileyo, kwaye ukuthelekisa iifayile zezigidi ezininzi kuthatha ixesha kunye nokulayisha kwiidiski.
Ezo. kufuneka sazi kwangoko ukuba yintoni na ekufuneka ikhutshelwe, ngaphandle kokwenza uthelekiso ngalo lonke ixesha.
Ukuhlangula - lsyncd. Lsyncd - . Ikwasebenza nge-rsync, kodwa ukongezelela iliso kwindlela yefayile yotshintsho usebenzisa inotify kunye nefsevents kwaye iqala kuphela ukukopa ezo fayile ziye zavela okanye zatshintsha.
Ingxaki yesithandathu: indlela yokuqonda ukuba ngubani olayisha iidiski
Wonke umntu uyayazi le nto, kodwa nangona kunjalo, ukugqiba umfanekiso: kukho umyalelo wokubeka iliso kwisistim esezantsi yediski iotop - njengaye top, kodwa ibonisa iinkqubo ezisebenzisa kakhulu iidiski.

Ngendlela, i-top endala enhle ikuvumela ukuba uqonde ukuba kukho ingxaki kwiidiski okanye cha. Kukho iindlela ezimbini ezifanelekileyo zoku: Layisha iAvareji и IOwait.

Eyokuqala ibonisa ukuba zingaphi iinkqubo ezikumgca wenkonzo, ngokuqhelekileyo ngaphezu kwe-2 - kukho into esele ingahambi kakuhle. Xa ukhuphela ngokusebenzayo kwiiseva ezigcinayo, sivumela ukuya kuthi ga kwi-6-8, emva koko imeko ithathwa njengengaqhelekanga.
Okwesibini yindlela iprosesa exakeke ngayo ngemisebenzi yediski. IOwait>10% yimbangela yokukhathazeka, nangona kwiiseva zethu ezineprofayili ethile yomthwalo ihlala i-40-50%, kwaye oku kuyinyani.
Ndiza kugqiba apha, nangona kukho amanqaku amaninzi esingakhange sijongane nawo, ndiya kukuvuyela ukulinda izimvo kunye neenkcazo zamatyala okwenene anomdla.
umthombo: www.habr.com
