- předchozí článek - následující článek - obsah - úvodní stránka -

Linuxové noviny 05-06/2001

Diagnostika a údržba SCSI zařízení

David Häring, 9. června 2001

SCSI zařízení jsou poměrně vysoce konfigurovatelná a provozujeme-li systém s vícero SCSI zařízeními, většinou se neobejdeme bez aplikací umožňujících kvalitní diagnostiku a konfiguraci těchto zařízení. Uživatelům Linuxu je určitě dobře známá utilita scsiinfo (jejímiž autory jsou M. Weller a E. Youngdale, ke stažení např. na ftp.linux.cz). Méně známá, ale mnohem všestrannější je aplikace Scu, jejímž autorem je Robin Miller.

Scsiinfo

Balíček scsiinfo zahrnuje tři utility:
  • scsiinfo, utilita pro příkazovou řádku, slouží primárně k vypisování informací o SCSI zařízeních, ale je možné konfiguraci zařízení i měnit
  • scsi-config, grafická nástavba pro X napsaná v Tcl/Tk, která umožňuje prohlížení a nastavování parametrů SCSI zařízení
  • scsiformat, což je utilita pro nízkoúrovňové formátování SCSI disků.

Instalace

Instalace obnáší pouze instalaci příslušného balíčku, grafická nástavba vyžaduje interpret jazyka Tcl/Tk - pokud jej instalován nemáme, musíme se spokojit pouze s používáním utilit scsiinfo a scsiformat.

Příklady použití

Podívejme se nejprve na utilitu scsiinfo. Přehled některých užitečných přepínačů spolu s informacemi, které zpřístupňují, uvádí násedující výpis:

volba:  zpřístupňuje stránku:      význam (ve zkratce):
----------------------------
  -c    Caching Page               zapnutá/vynutá cache pro čtení/zápis
  -e    Error Recovery page        oprava chyb (automatická realokace vadných bloků)
  -f    Format Device Page         formát (velikost sektoru, počet sektorů na stopu)
  -g    Disk Drive Geometry Page   geometrie disku (počet hlav, cylindrů)
  -s    unit serial number page    sériové číslo zařízení
  -i                               výstup SCSI příkazu "Inquiry"
  -d                               výpis vadných bloků
Výpis: význam vybraných přepínačů utility scsiinfo

Obecnou informaci o daném SCSI zařízení (identifikace zařízení, šířka sběrnice, zda je zapnuto TCQ apod.) získáme pomocí příkazu Inquiry:

scsiinfo -i /dev/sda

Inquiry command
-----
Relative Address             0
Wide bus 32                  0
Wide bus 16                  1
Synchronous neg.             1
Linked Commands              1
Command Queueing             1
SftRe                        0
Device Type                  0
Peripheral Qualifier         0
Removable?                   0
Device Type Modifier         0
ISO Version                  0
ECMA Version                 0
ANSI Version                 3
AENC                         0
TrmIOP                       0
Response Data Format         2
Vendor:                SEAGATE 
Product:               ST39236LW       
Revision level:        00043BN05G5W

Výpis vadných bloků disku získáme pomocí volby -s; Výstupem je výpis vadných bloků ve dvou tabulkách. První tabulka obsahuje seznam vadných bloků od výroby ("manufacturer table"), druhá tabulka obsahuje seznam vadných bloků, které přibyly během provozu disku ("grown table").

scsiinfo -d /dev/sda

Data from Defect Lists
--------
127 entries in manufacturer table.
Format is: bytes from index [Cyl:Head:Off]
Offset -1 marks whole track as bad.

    49:1:54001     49:1:235480     129:1:54600 
  350:1:272776    353:2:253123    365:2:293263 

                 .. zkráceno ..

 12346:2:63380   12359:1:97126   12755:0:25399 
13683:1:142489   14216:0:81356

0 entries in grown table.
Format is: bytes from index [Cyl:Head:Off]
Offset -1 marks whole track as bad.

Utilitou scsiinfo lze paramtery SCSI zařízení i měnit, ovšem dosti krkolomným způsobem, pro modifikací paramterů zařízení je lepší použít grafickou nástavbu scsi-config. Následující obrázky ukazují scsi-config v akci:

scsi-config: Device Information

scsi-config: Error Recovery Page

Scu

Balíček Scu obsahuje interaktivní program pracující pouze v režimu příkazové řádky. Může být spouštěn i "offline" v neinteraktivním režimu. Na rozdíl od utility scsiinfo sice nenabízí grafickou nádstavbu, ale přesto je (zejména pro pokročilého uživatele) uživatelsky mnohem příjemnější. Implementuje celkem 56 příkazů, které umožňují mimo jiné získávat informace a měnit parametry SCSI zařízení, skenovat disky stran vadných bloků, provádět realokaci vadných bloků, umožňuje download firmware, umí pracovat s páskovými či CD-ROM mechanikami (včetně podpory příkazů pro audio) a jukeboxy.

Instalace

Scu je distribuován pouze jako spustitelný soubor, protože kvůli licenčním problémům autor nemůže dát k dispozici zdrojový kód (Scu byl vyvinut původně pro Tru64 Unix a obsahuje části hlavičkových souborů chráněných licencí). Distribuce obsahuje kromě binárky scu kvalitní dokumentaci ve formátu HTML. Žádné konfigurace není potřeba, scu pouze volitelně používá proměnnou prostředí SCU_DEVICE}, která může obsahovat standardní jméno SCSI zařízení, se kterým scu bude pracovat a proměnnou SCU_SCRIPT, která může obsahovat cestu ke skriptu, který scu při spuštění provede (skript také může být uložen v souboru $HOME/.scurc nebo v soboru .scurc v aktuálním pracovním adresáři). Scu potřebuje podporu generického ovladače SCSI zařízení v jádře (modul sg).

Příklady použití

Příkazem show s parametry edt capabilities (edt = "equipment device table") vypíše seznam SCSI zařízení:

scu> show edt capabilities

Equipment Device Table (EDT) Information:

Device              Bus/Targ/Lun  Type    ANSI    VendorID  ProductID  Rev   Capabilities
/dev/scd0 /dev/sg0  0    1    0   CD-ROM  SCSI-2  YAMAHA    CRW8824S    1.00  rmb sync
/dev/sda  /dev/sg1  0    2    0   Direct  SCSI-2  SEAGATE   ST19171W    0024  cmdque transdis\
                                                                              linked sync wbus16
/dev/sdb  /dev/sg2  0    3    0   Direct  SCSI-2  SEAGATE   ST39173W    6244  cmdque transdis\
                                                                              linked sync wbus16
/dev/sdc  /dev/sg3  0    4    0   Direct  SCSI-3  SEAGATE   ST39236LW   0004  cmdque transdis\
                                                                              linked sync wbus16
/dev/sdd  /dev/sg4  0    5    0   Direct  SCSI-3  SEAGATE   ST39236LW   0004  cmdque transdis\
                                                                              linked sync wbus16
/dev/nst0 /dev/sg5  0    6    0 Sequential SCSI-2 HP        C1537A      L907  rmb linked sync

Výpis: Výstup Scu příkazu "show edt capabilities"

Aktuální zařízení, se kterým pracujeme, nastavíme a měníme příkazem switch jméno_zařízení. Např. páskovou mechaniku z předchozího příkladu vybereme příkazem switch /dev/nst0. Detailní informace o zařízení vypíšeme příkazem show device:

scu> show device

Inquiry Information:

                 SCSI Bus ID: 0
              SCSI Target ID: 6
             SCSI Target LUN: 0
            Attached Devices: /dev/nst0 /dev/sg5
      Peripheral Device Type: 0x1 (Sequential Access)
        Peripheral Qualifier: 0 (Peripheral Device Connected)
        Device Type Modifier: 0
             Removable Media: Yes
                ANSI Version: 2 (Complies to ANSI X3.131-1994, SCSI-2)
                ECMA Version: 0
                 ISO Version: 0
        Response Data Format: 2 (SCSI-2)
       Terminate I/O Process: No
           Additional Length: 45
          Soft Reset Support: No
     Command Queuing Support: No
     Target Transfer Disable: No
      Linked Command Support: Yes
  Synchronous Data Transfers: Yes
Support for 16 Bit Transfers: No
Support for 32 Bit Transfers: No
 Relative Addressing Support: No
       Vendor Identification: HP      
      Product Identification: C1537A          
     Firmware Revision Level: L907
        Vendor Specific Data: 00 00 00 00 00 00 00 00 "        "
                              00 00 00 00 00 00       "      "

Výstup Scu příkazu "show device"

Pro manipulaci s páskovými mechanikami slouží příkaz mt. Příkaz se jmenuje stejně jako samostatná utilita mt pro práci s páskovými mechanikami, která je dostupná v linuxových distribucích. K dispozici jsou příkazy pro vyhledávání značek, vyhledání pozice, převíjení, mazání apod. Následující příkazy např. pásku nastaví na konec zapsaných dat a vypíší pozici:

scu> mt seod
scu> mt rdpos

Read Position Information Short Format:

      First Block: 456795
       Last Block: 456795
 Number of Blocks: 0
  Number of Bytes: 0

Práce s CD-ROM mechanikami: Scu umí pracovat i s audio CD; např. výpis stop z audio CD získáme příkazem show audio toc, příkazem play 1 5 pak přehrajeme skladby 1 až 5.

scu> show audio toc

Table of Contents Summary:

Track 1: Audio Track, Time: 03:37, LBA:      0,     Length: 65349
Track 2: Audio Track, Time: 04:42, LBA:  65348,     Length: 84485

                       .. vynecháno ..

Track 13: Audio Track, Time: 03:00, LBA: 884056,    Length: 53941
Track 14: Audio Track, Time: 03:49, LBA: 937996,    Length: 68613

There are 14 audio tracks and 0 data tracks,
with a total time of 55:55.

Parametry a konfiguraci SCSI zařízení vypíšeme příkazem show page a jako parametr zadáme druh informací (mode-page, tedy např. error-recovery, disconnect, format-device, geometry, cache-control), např. příkaz show pages error vypíše parametry týkající se detekce a opravy chyb. Pouhé show pages vypíše vše.

scu> show pages error

Read-Write Error Recovery Parameters
(Page 0x1 - Current Values):

Page Header / Data:
                             Page Code: 0x1
                    Parameters Savable: Yes
                           Page Length: 10
              Disable Correction (DCR): No
       Disable Transfer on Error (DTE): No
          Post Recoverable Error (PER): No
           Enable Early Recovery (EER): No
                  Read Continuous (RC): No
                   Transfer Block (TB): No
      Automatic Read Allocation (ARRE): Yes
     Automatic Write Allocation (AWRE): Yes
                      Read Retry Count: 11

Correction Span: 240 bits Head Offset Count: 0 Data Strobe Offset Count: 0 Write Retry Count: 15 Recovery Time Limit: 65535ms

SCSI zařízení také zpravidla mají počítadla chybových stavů. Je tedy možné zjistit, kolik a jakých druhů chyb zařízení během provozu zaznamenalo příkazem show log pages. Zpravidla jsou k dispozici počty chyb opravených / neopravených chyb při čtení, zápisu a chyby bez návaznosti na médium.

scu> show log pages

Buffer Overrun/Underrun Counter Parameters \
(Page 0x1 - Current Cumulative Values):

     Underruns During Write Operations: 11
       Overruns During Read Operations: 0

Write Error Counter Parameters (Page 0x2 - Current Cumulative Values):

           Total re-Reads or re-Writes: 0
                Total Errors Corrected: 0
              Total Uncorrected Errors: 0

Read Error Counter Parameters (Page 0x3 - Current Cumulative Values):

Errors Corrected w/o Substantial Delay: 354
           Total re-Reads or re-Writes: 1521
                Total Errors Corrected: 0
              Total Uncorrected Errors: 0

Verify Error Counter Parameters (Page 0x5 - Current Cumulative Values):

Errors Corrected w/o Substantial Delay: 0

           Total re-Reads or re-Writes: 0

                Total Errors Corrected: 0
              Total Uncorrected Errors: 0

Non-Medium Error Counter Parameters (Page 0x6 - Current Cumulative Values):

Parameter 0x0, Counter Value (4): 76 (00 00 00 4c)

Pro výpis všech vadných sektorů disku slouží příkaz show defects. Každý disk má dva seznamy vadných bloků - první seznam je inicializován při výrobě ("primary defect list"), druhý seznam ("grown defect list") obsahuje seznam bloků, které se pokazily v průběhu používání disku. Plně funkční disk tedy může obsahovat bloky vadné již od výroby v primárním seznamu, ale druhý seznam by měl být prázdný. Pokud chceme pouze výpis vadných sektorů, které přibyly během provozování disku, použijeme příkaz show defects grown:

scu> show defects

Displaying Primary & Grown Defect Lists in Physical Sector Format
   ( Defect list length is 1080 bytes, containing 135 defects )

        Cylinder     49,  Head  1,  Sector  265
        Cylinder     49,  Head  1,  Sector  460
        Cylinder    129,  Head  1,  Sector  293

                     .. vynecháno ..

        Cylinder  14216,  Head  0,  Sector   17

Pro změnu konfigurace SCSI zařízení slouží příkaz change. Pokud bychom např. chtěli změnit parametry týkající se detekce a opravy a chyb ("Read-Write Error Recover Page"), provedeme příkaz change page error. Je třeba si uvědomit, že ne všechny parametry lze měnit a že SCSI zařízení u měnitelných parametrů používají až tři hodnoty - aktuální nastavení, uložené nastavení a standardní nastavení. Pokud tedy chceme změnit parametr "Read Retry Count" v následujícím příkladu, vidíme, že povolený rozsah hodnot je 0-255 a standardní hodnota daná výrobcem je 33. Můžeme změnit pouze aktuální nastavení a neukládat jej, nebo je i uložit a v tom případě hodnota přetrvá vypnutí a opětovné zapnutí zařízení, ale můžeme také zpětně vyvolat standardní nastavení výrobce.

scu> change page error

Changing & Saving Read-Write Error Recovery Parameters \
(Page 0x1 - Current Values):

Disable Correction (DCR) [R:0-1 D:0]: 
Disable Transfer on Error (DTE) [R:0-1 D:0]: 
Post Recoverable Error (PER) [R:0-1 D:1]: 
Enable Early Recovery (EER) [R:0-1 D:0]: 
Transfer Block (TB) [R:0-1 D:1]: 
Automatic Read Allocation (ARRE) [R:0-1 D:0]: 
Automatic Write Allocation (AWRE) [R:0-1 D:0]: 
Read Retry Count [R:0-255 D:33]: 25
Write Retry Count [R:0-255 D:3]: 10

Automatická realokace vadných sektorů, oprava chyb

Když SCSI disk detekuje vadný blok, může jej automaticky přemapovat, pokud je k tomu nakonfigurován. Tato nastavení kontrolují příznaky ARRE (Automatic Read Reallocation Enable) pro chyby při čtení a AWRE (Automatic Write Reallocation Enable) pro chyby při zápisu. Oba tyto parametry jsou přístupné v tzv. "Read-Write Error Recovery Page" (scsiinfo -e anebo Scu příkaz show page error) a musejí být zapnuty. Většina disků je tímto způsobem zpravidla nastavena již výrobcem. V případě, že tomu tak není, je potřeba nejprve zajistit, aby bylo pro automatickou realokaci rezervováno nějaké místo. To zjistíme z "Format Device Page" (scsiinfo -f, Scu příkazem show page format) - zpravidla jsou to parametry "Alternate Tracks per Zone" nebo "Alternate Sectors per Zone" nebo podobné. Po změně těchto parametrů je ovšem zapotřebí provést nízkoúrovňový formát disku (scsiformat, nebo Scu příkaz format) a teprve pak má smysl nastavit příznaky ARRE / AWRE.

Kromě příznaků ARRE / AWRE existují další příznaky a parametry, které ovlivňují korekci chyb u SCSI disků:

  • EER (enable early recovery): tento příznak pokud je nastaven na 1 říká, že se má použít "nejvýhodnější" způsob opravy chyb. Zpravidla může mít za následek zvýšení pravděpodobnosti misdetekce chyb (tedy případů, kdy chyba byla mylně detekována) a zvýšení pravděpodobnosti chybné opravy. Proto tento příznak bývá většinou nenastaven. Na druhou stranu jeho zapnutí zpravidla sníží počet opakovaných čtení/zápisů.
  • PER (post error): pokud je tento příznak nastaven, zařízení hlásí i chyby, které se podařilo úspěšně detekovat a následně opravit.
  • DTE (disable transfer on error): pokud je tento příznak nastaven, pak zařízení přeruší při detekování chyby běžící přenos dat.
  • DCR (disable correction): nastavení tohoto příznaku znamená vypnutí mechanismů korekce chyb.
  • TB (transfer block): pokud je nastaven, budou data z vadného bloku předána i v případě, že se nepodaří chybu opravit.
  • RC (read continuous): pokud je nastaven, pak se zařízení bude snažit předat data bez přerušení i v případě detekce chyby - tedy opravné mechanismy nebudou použity a mohou být předána chybná data. Pokud je toto nastavení v konfliktu s nastavením příznaků EER, PER, DTE a DCR příznaků, nastavení příznaku RC má přednost. (Tento příznak je zamýšlen především pro použití při audio/video streamingových aplikacích, kdy nepřetržitý tok dat je důležitější, než případná chyba).
  • RRC (Read Retry Count): tento parametr udává počet pokusů o opakované čtení při detekované chybě čtení, než zařízení ohlásí neopravitelnou chybu čtení.
  • WRC (Write Retry Count): parametr udává počet pokusů o opakovaný zápis při detekované chybě zápisu, než zařízení ohlásí neopravitelnou chybu zápisu. Pokud je 0, opravné mechanismy se neuplatní (stejně jako u předchozího parametru RRC).
  • RTL (Recovery Time Limit): parametr udává maximální dobu, kterou mají opravné mechanismy k dispozici. Pokud je limit překročen, zařízení ohlásí chybu.

Používání cache pevných disků pro zápis

Používání cache pro zápis u obyčejných disků nemusí být zcela bezproblémové. Kromě toho, že může dojít k situaci (např. při výpadku napajení nebo vypnutí počítače), kdy data nemusejí být na disk skutečně zapsána, pak disk některé chyby při zpožděném zápisu hlásí poté, co již signalizoval úspěšné dokončení příkazu. Navíc v minulosti některé ovladače SCSI řadičů v Linuxu měly problémy, pokud disky používaly cache pro zápis. Tyto možné problémy je třeba mít na paměti, chceme-li z výkonnostních důvodů provozovat disky se zapnutou cache pro zápis. Obvykle mají disky zapnutou cache pro čtení a vypnutou cache pro zápis, i když v poslední době se více objevují disky, které mají od výrobce zapnutou cache jak pro čtení tak i pro zápis.

Parametry kontrolující používání cache nalezneme v "Cache Control Page" (scsiinfo -c, scu příkaz show page cache):

  • RCD (Read Cache Disable): nastavení tohoto příznaku znamená vypnutí cache pro čtení.
  • WCE (Write Cache Enable): nastavení tohoto příznaku znamená zapnutí cache pro zápis.

Závěrem

Cílem tohoto článku bylo na příkladech ukázat práci se dvěma utilitami pro konfiguraci/diagnostiku SCSI zařízení a nastínit, co všechno je možné u SCSI zařízení konfigurovat, případně jak zjisťovat "zdraví" SCSI zařízení. Ve srovnání s Scu toho utilita scsiinfo nabízí mnohem méně, ale i tak pro běžnou údržbu či konfiguraci SCSI zařízení postačuje.

Vzhledem k rozsáhlosti problematiky diagnostiky a konfigurace SCSI zařízení pak zájemce o hlubší informace odkazujeme na dokumentaci utilit Scu a scsiinfo, případně na specifikace SCSI na serverech http://www.t10.org/drafts.htm a http://www.scsita.org/. Také existuje přehledný "slovníček" termínů souvisejicích s problematikou SCSI.

A ještě jedna poznámka, nebo spíše varování, úplně na závěr: uvedené utility jsou určeny především zkušeným uživatelům, kteří vědí co dělají. Nepozorný uživatel si chybným použitím může přivodit přinejmenším ztrátu dat. *


- předchozí článek - následující článek - obsah - úvodní stránka -