HDD ketta kasutamine
Sissejuhatus
Eeldusel, et kõvaketas riistvaraliselt seda toetab, saab hdparm programmiga kontrollida
- kõvaketta standby oleku kasutamist
- kõvaketta mürataset
- TODO
Tööpõhimõte
- CAV - Constant Angular Velocity
- kõvaketta alguseks loetakse välimist st keskpunktist kaugemat äärt, kuna seal on joonkiirus suurem, siis on ka andmevahetuse kiirus suurem; nt 2010 aasta populaarsete 1 TB 7200 rpm kõvaketaste puhul on kiiruste erinevus ca 2x (118 MBait/s ääras ja 60 MBait/s keskel)
- käivitusvõimsus - 2012 aasta kandis populaarsetel sata ketastel ca 35 W
- FUA (Force Unit Access) - tells the target to fetch the data from the media surface and to not use a cached copy.
- DPO (Disable Page Out) - allows the initiator to warn the target that the data being read is unlikely to be requested again soon and so is not worth keeping in the target's data cache
SATA draiver
Linuxi kernel toetab erinevaid SATA kontrollereid SATA draiverite abil. Nt paistab ühendatud kõvaketas dmesg väljundis selliselt
# grep scsi /var/log/dmesg [ 0.062986] ACPI: bus type scsi registered [ 0.342959] scsi0 : pata_marvell [ 0.349605] scsi1 : pata_marvell [ 0.664550] scsi2 : ahci [ 0.664680] scsi3 : ahci [ 0.664806] scsi4 : ahci [ 0.664927] scsi5 : ahci [ 0.665054] scsi6 : ahci [ 0.665200] scsi7 : ahci
kus
- scsi0 ja scsi1 portidega tegeleb pata_marvell draiver
- 2 - 7 portidega tegeleb achi draiver
ning konkreetse pordi küljes olev kõvaketas
# grep ata7 /var/log/dmesg [ 0.665439] ata7: SATA max UDMA/133 abar m2048@0xe0221000 port 0xe0221300 irq 79 [ 1.156115] ata7: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 1.156621] ata7.00: ATA-8: WDC WD4000F9YZ-09N20L0, 01.01A01, max UDMA/133 [ 1.156652] ata7.00: 7814037168 sectors, multi 0: LBA48 NCQ (depth 31/32), AA [ 1.158096] ata7.00: configured for UDMA/133
kus
- 3.0 Gbps - kiirus (nn SATA 2), mille on kernel - draiver - port - kõvaketas kokku leppinud
Näiteks selliselt paistab sata_nv draiveri abil töötav SATA I režiimis töötav kõvaketas
# dmesg | grep scsi [ 8.206255] scsi0 : sata_nv [ 8.428065] scsi1 : sata_nv [ 8.816171] scsi2 : pata_amd [ 8.878540] scsi3 : pata_amd
ning
# dmesg | grep ata2 [ 8.428235] ata2: SATA max UDMA/133 cmd 0xc0b0 ctl 0xc0a4 bmdma 0x3098 irq 21 [ 9.572050] ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 300) [ 9.709099] ata2.00: ATA-8: WDC WD4000F9YZ-09N20L0, 01.01A01, max UDMA/133 [ 9.709102] ata2.00: 7814037168 sectors, multi 16: LBA48 NCQ (depth 31/32) [ 9.961337] ata2.00: configured for UDMA/133
Kasulikud lisamaterjalid
Short stroking
TODO
Write through ja write back cache
- write through cache - asjakorraldus, kus süsteem ootab kõvaketta järel kuni muudatused on tegelikult füüsiselt kõvakettale jõudnud; sünkroone (kui programm kirjutab midagi, siis selleks ajaks kui programmile vastatakse kirjutamise õnnestumise kohta, on tõesti andmed füüsiliselt kõvakettale jõudnud)
- write back cache - asjakorraldus, kus süsteemile vastatakse kiirest, et kirjutamine õnnestus, tegelikult kirjutamisega veel taustal tegeletakse; asünkroone (kui programm kirjutab midagi, siis selleks ajaks kui programmile vastatakse kirjutamise õnnestumise kohta, ei pruugi andmed füüsilist kõvakettale olla jõudnud, nad on kuskil cache'ist st mälus ja taustal nende kettale kirjutamisega veel tegeldakse)
IOPS
IOPS (Input-Output Operations per Second) mõõdab üldiselt kõvaketta töötamise kiirust, väljendades pöördumiste arvuti sekundis. IOPS arvutamine toimub vastavalt valemile
IOPS = 1 / ( average latency + average skeem time )
kus
- average latency - asjakohase sektori lugemispea alla jõudmise keskmine aeg; see on alati pool ajast, millega sooritab kõvaketas ühe ringi, nt 7200 RPM kõvaketta puhul on see
7200 / 60 = 120 pööret sekundis 1 / 120 = 0.0083 sekundit pöörde kohta average latency = 4.1 ms
- average seek time - aeg, mis kulub keskmiselt lugemispea jõudmiseks asjakohase raja kohale
nt kui dokumentatsioonis on esituatud, et
PERFORMANCE Spin Speed (RPM) 7,200 RPM Average latency 4.16ms Random read seek time <8.0ms Random write seek timee <9.0ms
siis IOPS arvutatakse
1 / (8.5 + 4.16) = .078 operatsiooni millisekundis
ehk 78 operatsiooni sekundis.
Andmete küsimine
Kõvaketta omaduste küsimiseks sobib öelda
# hdparm -i /dev/sda /dev/sda: Model=ST3400832AS, FwRev=3.03, SerialNo=5NF0E42N Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% } RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4 BuffType=unknown, BuffSize=8192kB, MaxMultSect=16, MultSect=16 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=781422768 IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120} PIO modes: pio0 pio1 pio2 pio3 pio4 DMA modes: mdma0 mdma1 mdma2 UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6 AdvancedPM=no WriteCache=enabled Drive conforms to: Unspecified: ATA/ATAPI-1,2,3,4,5,6,7 * signifies the current active mode
Põhjalikuma väljundi saab kasutades -I suvandit.
Standby kontrollimine
Kõvakette /dev/sdc viimiseks standby režiimi sobib öelda nt
# hdparm -y /dev/sdc /dev/sdc: issuing standby command
Kõvaketta käesoleva oleku küsimiseks sobib öelda
# hdparm -C /dev/sdc /dev/sdc: drive state is: standby
Selliselt seatud standby režiimist väljumiseks sobib kõvaketta poole pöörduda, nt küsida partitsioonitabelit
# parted /dev/sdc p
hdparm seadistamine
hdparm tööd juhivad seadistusfailid
- /etc/default/hdparm
- /etc/hdparm.conf
ning käivitusskript
# ls -l rcS.d/S07hdparm lrwxrwxrwx 1 root root 16 Dec 11 2010 rcS.d/S07hdparm -> ../init.d/hdparm
sdparm kasutamine
Tarkvara paigaldamiseks sobib öelda
# apt-get install sdparm
Kõigi parameetrite koos kommentaaridega küsimiseks
# sdparm -a --long /dev/sda /dev/sda: LSI MegaRAID SAS RMB 1.40 Direct access device specific parameters: WP=0 DPOFUA=1 Caching (SBC) [ca] mode page: IC 0 [cha: n, def: 0, sav: 0] Initiator control ABPF 0 [cha: n, def: 0, sav: 0] Abort pre-fetch CAP 0 [cha: n, def: 0, sav: 0] Caching analysis permitted DISC 0 [cha: n, def: 0, sav: 0] Discontinuity SIZE 0 [cha: n, def: 0, sav: 0] Size enable WCE 0 [cha: n, def: 0, sav: 0] Write cache enable MF 0 [cha: n, def: 0, sav: 0] Multiplication factor RCD 1 [cha: n, def: 1, sav: 1] Read cache disable DRRP 0 [cha: n, def: 0, sav: 0] Demand read retention priority WRP 0 [cha: n, def: 0, sav: 0] Write retention priority DPTL 0 [cha: n, def: 0, sav: 0] Disable pre-fetch transfer length MIPF 0 [cha: n, def: 0, sav: 0] Minimum pre-fetch MAPF 0 [cha: n, def: 0, sav: 0] Maximum pre-fetch MAPFC 0 [cha: n, def: 0, sav: 0] Maximum pre-fetch ceiling FSW 0 [cha: n, def: 0, sav: 0] Force sequential write LBCSS 1 [cha: n, def: 1, sav: 1] Logical block cache segment size DRA 0 [cha: n, def: 0, sav: 0] Disable read ahead NV_DIS 0 [cha: n, def: 0, sav: 0] Non-volatile cache disable NCS 0 [cha: n, def: 0, sav: 0] Number of cache segments CSS 128 [cha: n, def:128, sav:128] Cache segment size
ERC
Nn enterprise ehk raid edition ja tavalised kõvakettad erinevad peamiselt selle poolest, kui kiiresti nad ütlevad operatsioonisüsteemile, et tegu on kettaveaga, vastavalt kiiresti ja aeglasemalt. Sellise käitumise põhjuseks on, et kui töökohaarvutis on kasutusel üks füüsiline kõvaketas, siis enne kui viga anda on mõistlik proovida nt 30 sekundit andmeid siiski välja lugeda ja kahjustamata sektorile kopeerida; serveris kasutatava raid1 lülituse puhul on aga sel juhul mõistlikum mitte jääda timeouti ootama, vaid kasutada mirrori teist poolt.
Mõisted
- ERC - error recovery control
- TLER - Western Digital: time-limited error recovery
- CCTL - Samsung/Hitachi: command completion time limit
# smartctl -l scterc /dev/sda smartctl 5.41 2011-06-09 r3365 [x86_64-linux-3.2.0-4-amd64] (local build) Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net SCT Error Recovery Control: Read: 100 (10.0 seconds) Write: 100 (10.0 seconds)
Kasulikud lisamaterjalid
- TLER (Time-Limited Error Recovery) http://en.wikipedia.org/wiki/Time-Limited_Error_Recovery
iostat
Operatsioon vastab järgmise lugemise või kirjutamise koha ülesleidmisele ja lisaks lugemise/kirjutamise tegevusele. Nagu ülevalpool arvutatud, ühe 2012 aastal levinud kõvaketta puhul suudetakse teha ca 80 pöördumist sekundis kõige hullemal juhul. Ühe operatsiooni käigus võib toimuda tegelemine paljude plokkidega tänu sellele, et järgmise ploki lugemise/kirjutamise koht on juba teada. Operatsioonide arv sekundis või olla oluliselt suurem kui halvim väärtus kuna järgmise lugemise/kirjutamise koht on oluliselt paremas asukohas kui täiesti juhusliku lugemise/kirjutamise koha puhul.
# apt-get install sysstat
LVM kasutamisel ei ole ebatavaline nt selline väljund
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 816.60 26.40 476364.80 264 4763648 dm-0 59619.00 35.20 476940.80 352 4769408
Oluliselt erinevaid tps suurusi võiks tõlgendada selliselt, et kuna Blk_wrtn/s on sama, siis LVM kihi seadmele tehakse 60 k operatsiooni, aga kui vastavad tegevused jõuavad sda kihti, siis on need agregeeritud 816 operatsiooniks.
Füüsiline HHD kõvaketas suudab teha ca 75 operatsiooni sekundis nö kõige halvemal juhul, st kui kirjutataks vähe (nt mõned baidid) korraga ning ketta juhuslikesse kohtadesse. Kui aga kirjutatakse järjestikuliselt palju, siis see arv võib olla oluliselt suurem, nt 1000; viimasel juhul ei kulu overhead'ile st kettalt õige kirjutamise koha otsimiseks oluliselt aega).
Näited
- kirjutamise iseloom on selline, et ühe operatsiooniga kirjutatakse suhteliselt palju plokke (65541,6/79,9 ~ 820 plokki) ja kuigi tps on enam-vähem nö halvimaks juhuks garanteeritud väärtus võib olla, et pudelikaelaks on järgmise kirjutuskoha leidmine, sest IO on 32 MBait/s (kõvaketas saavutab iseenesest suuremat järjestikulist kiirust, ca 110 MBait/s); see võiks vastata järjestikulisele kirjutamisele, nt toimub suur faili kirjutamine
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sdd 79.90 0.00 65541.60 0 655416
- kirjutamise iseloom on selline, et ühe operatsiooniga loetakse suhteliselt vähe plokke (ca 18) ja kuna tps on 3x suurem kui halvimaks juhuks garanteeritud väärtus st juba praegu leitakse järgmise lugemise koht üsna kiiresti üles ning andmete lugemise kiirus väga nõrk (1.8 MBait/s) võib olla tegu et pudelikaelaks on järgmise kirjutuskoha leidmine; see võiks vastata random pisikestele lugemistele.
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sdd 209.00 3702.40 0.00 37024 0
- Ilma patareita kontrolleriga ühe ketta tps üle 200 eriti ei tõuse. Sõltuvalt RAID lülitusest summeeruvad üksikute ketaste tps'iga rohkem või vähem.
SAS vs SATA
Üldiselt tunduvad õigelased sellised väited
- kui tehnoloogia või toode on olnud piisavalt kaua SATA formaadis nn consumer turul, siis ilmub ta peale vigade kõrvaldamist SAS formaadis nn enterprise turule; see seletab, miks on muus osas sarnaste omadustega SAS kettad kallimad ja nende viimaste mudelite maht on väiksem kui SATA viimastel mudelitel
- SAS kettad annavad nö paremini kasutatavaid veateateid draiverile või kettakontrollerile
- SATA kettaid saab kasutada SAS kontrolleriga, aga mitte vastupidi
- SAS kettad on reeglina kiiremad (sh pöörlevad kiiremini, 10k ja 15k), väiksema latentsusega ja töökindlamad (MTBF)
- SAS kontrollerid on reeglina kallimad kui SATA kontrollerid (tavaliselt esinevad nad onboard lülitustena või nt PCIe laienduskaartidena)
Spew
TODO
write barriers
Kasulikud lisamaterjalid
Kerneli seadistamine
- read-ahead
# blockdev --getra /dev/sda 256
- read caching and swapping
- I/O scheduler elevator
IOzone tarkvara kasutamine
IOzone http://www.iozone.org/ tarkvara võimaldab hinnata süsteemi IO omadusi. NB! Seal on hea pdf fail, mis kirjeldab IOzone'i, http://www.iozone.org/docs/IOzone_msword_98.pdf
$ mkdir /tmp/failisysteem $ cd /tmp/failisysteem $ iozone -i 0 -i 1 -i 2 -a -g 4096M -y 4K > /tmp/4096-iozone.log
kus
- -i 0, 1, 2 - milliseid teste kasutatakse (nt 0=write/rewrite, 1=read/re-read, 2=random-read/write)
- -a - täis-automaatne režiim (Produces output that covers all tested file operations for record sizes of 4k to 16M for file sizes of 64k to 512M.)
- -g - automaatse režiimi puhul kasutatava faili maksimaalne suurus
- -y - minimaalne reclen, mida kasutatakse kõigil testidel (vaikimisi 32 kB ja suuremate failide puhul on reclen 64 kB)
Tulemusena salvestatakse tekstifaili sarnased andmed
Iozone: Performance Test of File I/O Version $Revision: 3.308 $ Compiled for 64 bit mode. Build: linux Contributors:William Norcott, Don Capps, Isom Crawford, Kirby Collins Al Slater, Scott Rhine, Mike Wisner, Ken Goss Steve Landherr, Brad Smith, Mark Kelly, Dr. Alain CYR, Randy Dunlap, Mark Montague, Dan Million, Gavin Brebner, Jean-Marc Zucconi, Jeff Blomberg, Benny Halevy, Erik Habbinga, Kris Strecker, Walter Wong, Joshua Root. Run began: Wed Jan 18 18:51:02 2012 Auto Mode Using maximum file size of 4194304 kilobytes. Command line used: iozone -i 0 -i 1 -i 2 -a -g 4096M -y 4K Output is in Kbytes/sec Time Resolution = 0.000001 seconds. Processor cache size set to 1024 Kbytes. Processor cache line size set to 32 bytes. File stride size set to 17 * record size. random random bkwd record stride KB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 64 4 484710 1210227 2923952 4897948 3588436 1183548 64 8 541412 1336792 4018152 5860307 5283570 1421755 64 16 551422 1336792 4018152 5735102 6421025 1363961 64 32 557144 1304314 4018152 5735102 6271021 1363961 64 64 555990 1304314 4564786 5860307 6271021 1279447 128 4 506097 1294270 3380677 4557257 4135958 1243315 128 8 563463 1363288 4104338 5603747 5122535 1359835 128 16 576780 1391557 4135958 5603747 5847904 1455701 128 32 579270 1363288 3657016 5603747 6114306 1269781 128 64 587511 1363288 4407601 5847904 6406138 1406136 128 128 579270 1363288 4135958 5603747 6114306 1306873 256 4 532397 1286217 3368013 4496299 3950402 1237306 256 8 571502 1413179 4070199 5347168 5117791 1375171 256 16 585845 1415041 4197489 5347168 5687020 1430119 ... 4194304 4 80273 136685 245174 259924 1124 5906 4194304 8 77248 150577 241970 225844 2154 9477 4194304 16 76194 156231 246269 256503 4298 15012 4194304 32 97038 136784 253368 258923 7999 24213 4194304 64 88871 147931 247129 245645 14262 30559 4194304 128 72504 150568 239444 249315 22883 31764 4194304 256 92192 142705 242174 258245 31531 33354 4194304 512 83098 151086 233310 258347 35272 46128 4194304 1024 77351 141941 258825 263766 39105 53227 4194304 2048 82087 142945 249678 257333 52060 52872 4194304 4096 84386 154958 258642 268760 54488 52147 4194304 8192 83479 150777 251282 248268 63534 69913 4194304 16384 82344 149393 239208 259194 107705 126355
kus
- KB - faili suurus, mida kopeeritakse
- reclen - ühe kõvaketta poole pöördumisega kopeeritava andmehulga suurus kilobaitides
- write - uude faili kirjutamise kiirus kB/s, sisaldab faili moodustamise overheadi
- rewrite - olemasolevasse faili ülekirjutamise kiirus
- read - faili lugemise kiirus kB/s
- reread - juba loetud faili lugemise kiirus (sisaldab os'i cahce'i efektiivsust)
- random read - lugemine faili juhuslikult valitud kohast
- random write - kirjutamine faili juhuslikult valitud kohta
Võimalikud järeldused
- kui kirjutatav fail mahub mällu, siis toimuvad tegevused kiiresti vaatamata reclen suurusele või faili suurusele
- kui kirjutatav fail ei mahu mällu, siis toimuvad tegevused olulisemalt aeglasemalt, samuti sõltuvad enam reclen suurusest (suurem ühe operatsiooniga kopeerimine annab suuremat kiirust); eriti ilmekalt avaldub see ramdom read ja write juures
- re-write ja re-read on suhteliselt kiiremad kui vastavad kirjutamised või lugemised kuna faili moodustamise või failisüsteemist otsimise overhead puudub
Graafikute genereerimiseks, tundub, et see töötab kohe 2012 aasta alguse Debian testingus, stables tahab .dem fail kohendamist (vt nt http://timelordz.com/wiki/Iozone)
$ cd /usr/share/doc/iozone3/examples $ gunzip gnu3d.dem.gz $ sh Generate_Graphs /tmp/2048-iozone.log Hit return to continue
Tulemusena näitab gnuplot nt sellist pilti
kus
- graafik kirjeldab Write operatsioonidega saadud tulemusi
- File size teljele on märgitud erinevad failisuurused kB
- Record size teljele on märgitud erinevad ühe kõvaketta poole pöördumisega kopeeritavad andmehulgad kB
- vertikaalsele teljele on märgitud erinevad andmevahtuse kiirused kB/s
- vasak kõrgem platoo vastab olukorrale, kui protsessori vahemälu või failisüsteemi puhver (sisuliselt arvuti mälu) rakendatakse
- parem madalam platoo vastab olukorrale, kui fail on piisavalt suur, et ei mahu korraga enam puhvrisse ja arvuti kasutab kõvaketast
- 2^n telje juures tähendab, et telje väärtused on erinevate arvud kahe astendajaks (nt 2^6, 2^8 jne)
- vajutades enter esitatakse järgmine pilt
- pilte vaadates tuleb arvestada, et gnuplut ektrapoleerib nurkadesse vajadusel väärtusi, st nt toodu pildid tegelikult ei ole andmeid, et graafikul esitada väikse faili ja suure sektori ning suure faili ja väikese sektori osa
- pildi vaatamisel tuleb arvestada, et kuna suured väärtused on väga suured, siis nt kuigi 4G faili random write erinevused on 25x (5906 - 126355 kBait/s) ei paista graafikult see ilmekalt välja
Bonnie
Bonnie abil on mõeldud teha kahte tüüpi kettaseadet ja failisüsteemi iseloomustavaid teste, vt /usr/share/doc/bonnie++/readme.html
- IO läbilase - emuleerib nt andmebaaside käitumist, mis seisneb suhteliselt suurte failide kirjutamises ja lugemises
- failide tekitamine/kustutamine - emuleerib nt Squid programmi käitumist, mis seisneb paljude pisikeste failide tekitamises ja kustutamises
Kirjutus ja lugemistestid
# /usr/local/bin/bonnie File './Bonnie.81484', size: 104857600 Writing with putc()...done Rewriting...done Writing intelligently...done Reading with getc()...done Reading intelligently...done Seeker 1...Seeker 2...Seeker 3...start 'em...done...done...done... -------Sequential Output-------- ---Sequential Input-- --Random-- -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --Seeks--- Machine MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU /sec %CPU 100 163734 81.9 280862 22.1 384488 57.6 127538 97.3 2539304 98.2 214041.1 253.4
Failisüsteemi ja plokkseadme testiks sobib öelda nt
$ /usr/sbin/bonnie -s 1g -d /srv/gfs2/bonnie1 -u priit -n 128:8192:1024 -q > /tmp/gfs2-iscsi-1g-1.log
kus
- -s - testis kasutatav andmemaht, peab olema vähemalt kaks korda enam kui arvuti RAM
- -d - millist kataloogi kasutatakse testil, peab asuna huvipakkuval plokkseadmel
- -u - millise kasutajana testitakse, sama kasutaja omanduses peab olema kataloog
- -q - esitada väljund mitte terminalil lugemist hõlbustavate kommentaaridega, vaid arvestusega, et seda teisendatakse bon_csv2html utiliidiga html kujule
- -n - failide tekistamise/kustutamise testi tehakse 128*1024 failiga, mille suurused on vahemikus 1kB - 8kB
Bonnie väljundi HTML kujule teisendamine
$ bon_csv2html < /tmp/gfs2-iscsi-1g-1.log > /tmp/gfs2-iscsi-1g-1.html
Kui test võtab aega vähem kui 500ms, siis tulemus esitatakse + märkidena.
kus
- sequential output - faili kirjutamine
- sequential input - failist lugemine
- sequential create - failide tekitamine kataloogi
- random create - failide tekitamine
Märkused
- Kui arvutis on väga palju mälu, siis võib olla mõistlik seda kerneli jaoks piirata nt kasutades bootimisel kerneli parameetrit mem=1024M, nt
linux /vmlinuz-3.13.0-46-generic root=/dev/mapper/system-root ro mem=1024M
FIO programmi kasutamine
TODO
Kasulikud lisamaterjalid
- https://pv-tech.eu/posts/common-pitfall-when-benchmarking-zfs-with-fio/
- https://vadosware.io/post/everything-ive-seen-on-optimizing-postgres-on-zfs-on-linux/
Kõvaketta füüsilise vigastamise oht
- töötav kõvaketas on üsna tundlik füüsilisele põrutusele, löögile, küljele kukkumisele ja niisama asendi muutmisele
- mitte-töötav kõvaketast on vähem tundlik füüsilistele põrutustele jms
- kõvaketta ohtu tööasend on ükskõiki millise telje sihis, st lapikult või küljel (aga mitte poolviltuses kallutatud asendis)
- kõvakettale mõjub halvasti tolmuses keskkonnas töötamine
- kõvakettale mõjub halvasti temperatuuri kiire muutumine ega liig madal või kõrge temperatuur
- kõvakettale mõjub halvasti liigne niiskus
Oluline on panna tähele, et kuigi peale füüsilist põrutust vms võib kõvaketas töötamist jätkata on tõenäosus, et ta on sisemiselt vigastatud ning kõvaketta kulumine toimub kiiremini ja seetõttu kasutusiga lüheneb.
badblocks
badblocks võimaldab teha andmete destruktiivsuse seisukohalt kolme sorti teste
- lugemine
- lugemine ja kirjutamine, kusjuures kirjutatakse tagasi esialgne sisu (eeldusel, et see on võimalik)
- lugemine ja kirjutamine nn test-patteritega, andmed hävivad
Lugemine ja kirjutamine test-patterniga, andmed hävivad
# badblocks -wsv /dev/sda1 Checking for bad blocks in read-write mode From block 0 to 1048575 Testing with pattern 0xaa: done Reading and comparing: done Testing with pattern 0x55: done Reading and comparing: done Testing with pattern 0xff: done Reading and comparing: done Testing with pattern 0x00: done Reading and comparing: done Pass completed, 0 bad blocks found.
Protsessi ajal on näha midagi sellist
Testing with pattern 0xaa: 21.23% done, 1:22:45 elapsed. (0/0/0 errors)
kus
- (x/y/z errors) - <number of read errors> / <number of write errors> / <number of corruption errors>
Kasulikud lisamaterjalid
Märkused
- Riistvaraliste kontrollerite taga oleva konfiguratsiooni küsimiseks on mitmeid vahendeid, üks selline on array-info, tarkvara paigaldamiseks sobib öelda
# apt-get install array-info
Tulemusena saab küsida nt nii
# array-info -d /dev/cciss/c0d0 --all Unknown Controller id 0x3245103c Firmware revision : 5.14 Rom revision : 5.14 1 logical drive configured. Logical drive 0 : Fault tolerance : RAID 1 (Mirroring) Size : 136.70 GiB (286677120 blocks of 512 bytes) Status : Logical drive is ok
- Kui sata kontrolleri küljes on mõni kõvaketas riknenud ja arvuti ometi töötab (ja sealjuures mitte ainult ei jätka töötamist vaid ka boodib), siis tõenäoliselt antakse bootimisel hulgaliselt veateateid ning bootimine sisaldab viivitusi. Kõige otsekohesem oleks katkine ketas asendada toimivaga, kui aga füüsiline ligipääs arvutile puudub, võib olla abi lülitada katkine ketas välja tuuma libata.force parameetriga (väidetavalt alates kernel v. 3.12)
.. kernel /vmlinuz-3.16.0-4-amd64 placeholder root=/dev/mapper/system-root ro libata.force=2.00:disable ...
kus 2.00 vaadatakse dmesg väljundist. Tulemusena
.. [ 8.153073] ata2: SATA link up 6.0 Gbps (SStatus 133 SControl 300) [ 8.153662] ata2.00: FORCE: horkage modified (disable) [ 8.153755] ata2.00: unsupported device, disabling [ 8.153833] ata2.00: disabled ...
4k plokisuurusega kõvakettad
TODO
Kasulikud lisamaterjalid
- http://www.anandtech.com/show/2888
- http://www.tomshardware.com/reviews/advanced-format-4k-sector-size-hard-drive,2759.html
- http://www.ibm.com/developerworks/library/l-4kb-sector-disks/
- http://www.seagate.com/tech-insights/advanced-format-4k-sector-hard-drives-master-ti/
- http://lwn.net/Articles/322777/
Temperatuur
# smartctl -l scttemp /dev/sdb smartctl 5.41 2011-06-09 r3365 [x86_64-linux-3.2.0-4-amd64] (local build) Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net === START OF READ SMART DATA SECTION === SCT Status Version: 2 SCT Version (vendor specific): 258 (0x0102) SCT Support Level: 1 Device State: Active (0) Current Temperature: 40 Celsius Power Cycle Min/Max Temperature: 36/44 Celsius Lifetime Min/Max Temperature: 36/51 Celsius Under/Over Temperature Limit Count: 0/0 SCT Temperature History Version: 2 Temperature Sampling Period: 1 minute Temperature Logging Interval: 1 minute Min/Max recommended Temperature: 0/60 Celsius Min/Max Temperature Limit: -41/85 Celsius Temperature History Size (Index): 478 (382) Index Estimated Time Temperature Celsius 383 2013-07-20 08:39 40 ********************* ... ..(476 skipped). .. ********************* 382 2013-07-20 16:36 40 *********************
Väline USB kõvaketas
2013 aastal tundub mitte-portatiivne Seagate Backup Plus STCA3000200 USB 3.0 kõvaketas päris tubli
# lsusb -d 0bc2:a0a4 Bus 001 Device 062: ID 0bc2:a0a4 Seagate RSS LLC # lsusb -d 0bc2:a0a4 -v ...
Millegipärast paistab logical/physical size 4k
# fdisk /dev/sdc -l Note: sector size is 4096 (not 512) Disk /dev/sdc: 3000.6 GB, 3000592977920 bytes 255 heads, 63 sectors/track, 45600 cylinders, total 732566645 sectors Units = sectors of 1 * 4096 = 4096 bytes Sector size (logical/physical): 4096 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disk identifier: 0x9d43fbd7 Device Boot Start End Blocks Id System /dev/sdc1 2048 732565503 2930253824 7 HPFS/NTFS/exFAT
Järjestikuline suure plokiga lugemine ja kirjutamine paistab ca 30 MBait/s (kasutades USB 2.0 arvuti pordis)
# dd if=/dev/zero of=/mnt/sdc1/suur bs=1M count=4000 4000+0 records in 4000+0 records out 4194304000 bytes (4.2 GB) copied, 126.057 s, 33.3 MB/s
Kõvaketta vigadega töötamine
Vea tõlgendamine
# dmesg -T .. [Fri Nov 19 00:06:19 2021] ata2.00: exception Emask 0x0 SAct 0x10000000 SErr 0x40000 action 0x0 [Fri Nov 19 00:06:19 2021] ata2.00: irq_stat 0x40000008 [Fri Nov 19 00:06:19 2021] ata2: SError: { CommWake } [Fri Nov 19 00:06:19 2021] ata2.00: failed command: READ FPDMA QUEUED [Fri Nov 19 00:06:19 2021] ata2.00: cmd 60/08:e0:98:e2:f4/00:00:48:00:00/40 tag 28 ncq dma 4096 in res 41/40:00:98:e2:f4/00:00:48:00:00/40 Emask 0x409 (media error) <F> [Fri Nov 19 00:06:19 2021] ata2.00: status: { DRDY ERR } [Fri Nov 19 00:06:19 2021] ata2.00: error: { UNC } [Fri Nov 19 00:06:19 2021] ata2.00: configured for UDMA/133 [Fri Nov 19 00:06:19 2021] sd 1:0:0:0: [sdb] tag#28 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE cmd_age=3s [Fri Nov 19 00:06:19 2021] sd 1:0:0:0: [sdb] tag#28 Sense Key : Medium Error [current] [Fri Nov 19 00:06:19 2021] sd 1:0:0:0: [sdb] tag#28 Add. Sense: Unrecovered read error - auto reallocate failed [Fri Nov 19 00:06:19 2021] sd 1:0:0:0: [sdb] tag#28 CDB: Read(10) 28 00 48 f4 e2 98 00 00 08 00 [Fri Nov 19 00:06:19 2021] blk_update_request: I/O error, dev sdb, sector 1224008344 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0 ...
kus
- DRDY ERR - dist ready viga
- unc - uncorrectable
- Unrecovered read error - auto reallocate failed - ei õnnestu katkist sektorit ümber paigutada
- failisüsteemi viga pole (võib olla selle tõttu, et see on proxmox host dmesg väljund st seal ei kasutata failisüsteemi; st guest kasutab)
Samal ajal smartctl väljundis
# smartctl -a /dev/sdb .. ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x002f 200 200 051 Pre-fail Always - 25 3 Spin_Up_Time 0x0027 170 169 021 Pre-fail Always - 4500 4 Start_Stop_Count 0x0032 100 100 000 Old_age Always - 171 5 Reallocated_Sector_Ct 0x0033 200 200 140 Pre-fail Always - 0 7 Seek_Error_Rate 0x002e 200 200 000 Old_age Always - 0 9 Power_On_Hours 0x0032 086 086 000 Old_age Always - 10392 10 Spin_Retry_Count 0x0032 100 100 000 Old_age Always - 0 11 Calibration_Retry_Count 0x0032 100 100 000 Old_age Always - 0 12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 171 192 Power-Off_Retract_Count 0x0032 200 200 000 Old_age Always - 106 193 Load_Cycle_Count 0x0032 200 200 000 Old_age Always - 1333 194 Temperature_Celsius 0x0022 120 115 000 Old_age Always - 27 196 Reallocated_Event_Count 0x0032 200 200 000 Old_age Always - 0 197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 0 198 Offline_Uncorrectable 0x0030 100 253 000 Old_age Offline - 0 199 UDMA_CRC_Error_Count 0x0032 200 200 000 Old_age Always - 0 200 Multi_Zone_Error_Rate 0x0008 100 253 000 Old_age Offline - 0 ...
- raw read error rate on 25 mis võiks olla loogiline st kooskõlas eelmise väljundiga
Millegipärast lugemine siiski õnnestub
# hdparm --read-sector 1224008344 /dev/sdb /dev/sdb: reading sector 1224008344: succeeded 5f73 6571 7565 6e63 655f 7633 305d 2062 6c6f 636b 6564 2062 793a 205b 544f 4f5f 4d41 4e59 5f52 4551 5545 5354 532f 3132 ...
Kasulikud lisamaterjalid
- http://technomancer.me.uk/howto-hdparm-linux-disk-tuning
- http://research.google.com/archive/disk_failures.pdf
- http://www.cs.cmu.edu/~bianca/fast07.pdf
- http://www.techrepublic.com/blog/datacenter/calculate-iops-in-a-storage-array/2182
- http://spew.berlios.de/
- http://wiki.postgresql.org/wiki/HP_ProLiant_DL380_G5_Tuning_Guide
- Ext3 failisüsteemi kasutamine
- Tarkvaralise mdadm RAID kasutamine operatsioonisüsteemiga Debian Squeeze