HDD ketta kasutamine

Allikas: Imre kasutab arvutit
Mine navigeerimisribaleMine otsikasti

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

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

Fail:Kkk-1.gif

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.

Fail:Bonnie-1.gif

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

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

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