Vahendid kettatestiks

Allikas: Kuutõrvaja
                                        Roheline.jpg Toores. Ehk seda pala võib täiendada.

dd programmi kasutamine

Alustuseks kõige lihtsam lugemise ja kirjutuskiiruse testimise utiliit

# dd if=/dev/sdb of=/dev/sdb bs=1M skip=102400 seek=524288 count=1024

kus

  • if ja of näitavad, et kopeeritakse samalt plokkseadmelt samale plokkseadmele
  • bs - lugemisel ja kirjutamisel kasutatakse 1 megabait suurusi tükke
  • skip - lugemist alustatakse 102400'se 1M bait kauguselt plokkseadme algusest
  • seek - kirutama hakatatase 524288 1M bait kaugusel plokkseadme algusest
  • count - loetakse ja kirjutatakse 1024 1M bait suurusi tükke

Loeme kettaseadmelt /dev/sda ühe Gb jagu infot

# dd if=/dev/sda of=/dev/null bs=1024k count=1024

1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 17.0656 s, 61.4 MB/s

dd käsku võib peal juurutada ntx nii:

kirjutamine, ketta algusse ja lõppu

dd bs=1024K count=1024 if=/dev/zero of=/dev/hdc
dd bs=1024K count=1024 if=/dev/zero of=/dev/hdc seek=75000

lugemine, ketta algusest ja lõpust

dd bs=1024K count=1024 if=/dev/hdc of=/dev/null
dd bs=1024K count=1024 if=/dev/hdc of=/dev/null skip=75000

Kui blocksize suurus anda rohkem kui operatsioonisüsteemil on kasutada mälu, õigemini vaba mälu, siis ta hakkab tõenäoliselt swappima ja tulemus moondub või ei tööta üldse. Selles osas tasub jälgida vmstat väljundit.

Kui kirjutatakse faili nö vahele ja ei soovita, et seal edasi olev ära ei kustuks, sobib kasutada lisak suvandit

conv=notrunc

dd-ga testides lülita täpsemate tulemuste saamiskes failisüsteemi käsn välja. Linuxi all ntx

# dd oflag=direct if=/dev/zero of=/dev/rbd0 ...

Linux hdparm

# hdparm -tT /dev/sda

/dev/sda:
 Timing cached reads:   8688 MB in  2.00 seconds = 4349.14 MB/sec
 Timing buffered disk reads:  174 MB in  3.00 seconds =  57.91 MB/sec

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

$ 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.

Bonnie-1.gif

Raidist ja selle töökiirusest

raid1 on mirror, ehk paarisarv kettaid on pandud üksteist mirrordama

raid0 on stripe ehk siis hulk kettaid on järjestikku ühendatud üheks kettaks, failisüsteem on venitatud üle kõigi ketaste, plussiks on, et see virtuaalne suur ketas töötab kõigi lisatud ketaste kiiruse summana (tegelikult natuke vähem sest kaod on) miinuseks on see, et kui 1 ketas rikneb läheb kogu failisüsteem päästmatult puruks. Kiiremaks muutub raid0 andmed on jaotatud mööda mitut ketast, arvuti lugeda ühe fali blokke korraga nii ühelt kui teiselt kettalt liites nii erinevate ketaste kiirused. Kirjutades kettale jagatakse aga juba automaatselt baidid laiali.

raid10 on kombineeritud 1 ja 0, võetud näiteks neli ketast...jagatud kaheks paariks, need omavahel mirrordatud ja saadud kaks virtuaalset ketast omakord ühendatud kokku stripeks. tulemuseks üks virtuaalne seade mis esiteks on kiire ja teiseks võib sealt korraga 2 ketast hapneda

raid5 on ka veel olemas

Ketaste raidi lisamiseks on olemas kaks võimalust nn softwareline raid ja tarkvaraline. Esimesel juhul teeb töö ära tarkvara teisel juhul eraldi arvutisse pistetud kaart enda kiipidega.

Ei maksa täielikult tõepähe võtta, aga umbkaudu sellised katsetulemused Sulgudes toodud ketaste arv

  • RAID10(4) on kiiruse poolest sama mis RAID0(2).
  • RAID0 iga lisandunud ketas annab kiirust juurde 0,9 - 0,7
  • RAID1(2) on ~5% aeglasem ühest kettast
  • RAID5(5) lugemine on kiire, umbes nagu RAID0(4), kuid kirjutamine aeglane, midagi nagu RAID1(2)

Ketaste aktiivne jälgimine iostatiga

iostat tuleb pakist sysstat

# iostat -c -d -x -t -m sdb 1

Mis annab iga sekundi järel sdb nimelisest seadmest järgneva väljundi

19.10.2015 16:43:05
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           4,13    0,00    0,93   14,17    0,00   80,78

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdb               0,00  8352,00    0,00  306,00     0,00    35,86   240,00   143,16  469,02    0,00  469,02   3,27 100,00

http://www.admin-magazine.com/HPC/Articles/Monitoring-Storage-with-iostat

Ketaste kloonimine

Kui kettad mida kloonitakse on ühe suurusega siis kõige lihtsam on võtta kaks ketast ja panna need ühe füüsilise arvuti külge ning anda seejärel käsklus

# dd if=/dev/ketas1 of=/dev/ketas2

Kui aga seda mingil põhjusel teha ei saa ning on vaja kloonida üle võrgu, võib talileda järgnevalt

Esiteks oleks vaja mõlemad arvutid mida soovime kloonida bootida üles mingi unixilaadse opsüsteemiga. Sobib hästi mõni Linuxi livecd näiteks sysrescsd http://www.sysresccd.org/Screenshots

dd puhul tasub ära määrata block size (võti bs=value), kuna siis on kiirus suurem. Bloki suurust mitte määrates on kiirus u 300-500kb/s. Parameetriga bs=1M saime kiiruse 16-20M. Mõningate allikate puhul pole mõtet üle 1M suurusel väärtusel.

1. Arvutis kus tühi ketas

# netcat -p 2222 -l | dd bs=1M of=/dev/sdb

2. arvutis, kus ketas mida soovime kloonida ümber, anname käsud

# dd bs=1M if=/dev/sda | netcat 192.168.1.1 2222

Eelnevalt peab olema loomulikult paigaldatud netcat tarkvara.

Kui kloonitava ketta puhul on kahtlustada, et see on osaliselt katki siis tasub anda järgnevad võtmed

conv=noerror - jätka tööd ka vigade esinemise puhil
sync  - kirjuta mitte välja loetud kohtade puhul sihtpunkti nullid.

I/O plaanuri optimeerimine

Uuemad kernelid sisaldavad võimalust valida I/O plaanurit (scheduleri), mis teeb otsuse, kuidas lugemis-kirjutamis puhvrid on järjestatud alloleval seadmel. Nendekohta saab lugeda rohkem informatsiooni Linuxi kerneli algkoodi dokumentatsioonist: linux/Documentation/block/*iosched.txt. Paljud veebisaidid soovitavad testimiste tulemusena kõrgeimate i/o tulemuste saavutamiseks kasutada deadline scheduleri. Seda saab seadistada kas siis kerneli kompileerimise käigus või echodes sobiva plaanuri enda kõvaketta seadetesse lisaks.

Parasjagu kasutuses olevat plaanurit näeb käsuga:

$ cat /sys/block/sda/queue/scheduler 
noop anticipatory [deadline] cfq

Ja ümber seadistada saab seda käsuga:

$ echo deadline > /sys/block/sda/queue/scheduler

MHDD

Väärt utiliit nii SMART info vaatamiseks kui kettale süvaskaneeringu tegemiseks.

20090426213721332.jpg

Lingid

http://www.iozone.org/