Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi S.M.A.R.T - IDE Details (https://www.delphipraxis.net/108443-s-m-r-t-ide-details.html)

Metal_Snake2 13. Feb 2008 19:07


S.M.A.R.T - IDE Details
 
Hallo,

ich möchte gerne über die S.M.A.R.T schnitstelle IDE- Festplatten datails wie z.B. unterstützte Features auslesen.
Ich hab auch schon viele codeschnipsel gefunden jedoch ist keine von denen wirklich vollständig.
Hat jemand ne ahnung wo ich eine Dokumentation zur schnittstelle finde? Ideal auch für SCSI.

Danke

RWarnecke 13. Feb 2008 19:58

Re: S.M.A.R.T - IDE Details
 
Hier in diesen Beitrag findest Du schonmal ein Beispiel, weitere Beiträge gibt es über die Suche Hier im Forum suchenSMART

Metal_Snake2 13. Feb 2008 20:01

Re: S.M.A.R.T - IDE Details
 
danke für die antwort, aber ich kannte schon den thread. Wo bekomme ich z.B. ne vollständige Smart tabelle?
Oder wie kann ich die ATA- Kommandos auslesen welche unterstützt werden?

Muetze1 13. Feb 2008 21:53

Re: S.M.A.R.T - IDE Details
 
Schonmal einen Blick in die ATA Spezifikation geworfen? Es gibt keine Tabelle oder Informationen mit einer Liste der unterstützten Befehle. Du kannst nur die Befehle in das Command Register absetzen und dann das Status Register abprüfen ob er das ganze erfolgreich ausgeführt hat oder er einen Fehler liefert.

Was ist eine "vollständige SMART Tabelle"? Was soll an den Codes fehlen bzw. nicht klappen, die verlinkt wurden?

HERMES 14. Feb 2008 17:10

Re: S.M.A.R.T - IDE Details
 
Es gab mal von der CT eine Programm(incl. Source), das das alles konnte. Es war zwar in C++ geschrieben, aber ich denke man könnte sich dennoch davon inspirieren lassen. Ob man es noch bekommt weis ich leider nicht.

RWarnecke 15. Feb 2008 06:34

Re: S.M.A.R.T - IDE Details
 
Suchst Du vielleicht sowas ? Wenn Du in Google nach Bei Google suchens.m.a.r.t. festplatte suchst, dann bekommst Du einige Links zu dem Thema.

axellang 15. Feb 2008 08:53

Re: S.M.A.R.T - IDE Details
 
Siehe hier:

http://de.wikipedia.org/wiki/S.M.A.R.T

Axel

Metal_Snake2 16. Feb 2008 12:44

Re: S.M.A.R.T - IDE Details
 
Mit der nicht vollständigen Tabelle meine ich sowas hier klack

@Muetze1
absulut richtig was du da erzählst, genach das werde ich tuhn!!

@HERMES
den beispielcode habe ich gefunden, genau das was Muetze1 beschrieben hatte kann ich damit machen.

Danke für alle antworten!!

Muetze1 16. Feb 2008 15:22

Re: S.M.A.R.T - IDE Details
 
Zitat:

Zitat von Metal_Snake2
Mit der nicht vollständigen Tabelle meine ich sowas hier klack

Die SMART Tabelle bzw. die Identifier die die Festplatten zurück liefern sind herstellerspezifisch und leider kocht auch jeder Hersteller seine eigene Suppe. Zum Teil haben sich diese Definitionen zwischen den Modellserien beim gleichen Hersteller verändert. Es ist so, dass die meisten (nicht alle, nicht vollständig) ein paar IDs gleich belegen. Aber schon bei der Laufwerkstemperatur gibt es Unterschiede (Grad, eigene Einheiten, etc).

Delphi-Quellcode:
//
//---------------------------------------------------------------------
// Valid Attribute IDs
//---------------------------------------------------------------------
Const
  ATTR_INVALID                  = 0;
  ATTR_READ_ERROR_RATE          = 1;
  ATTR_THROUGHPUT_PERF          = 2;
  ATTR_SPIN_UP_TIME             = 3;
  ATTR_START_STOP_COUNT         = 4;
  ATTR_REALLOC_SECTOR_COUNT     = 5;
  ATTR_READ_CHANNEL_MARGIN      = 6;
  ATTR_SEEK_ERROR_RATE          = 7;
  ATTR_SEEK_TIME_PERF           = 8;
  ATTR_POWER_ON_HRS_COUNT       = 9;
  ATTR_SPIN_RETRY_COUNT         = 10;
  ATTR_CALIBRATION_RETRY_COUNT  = 11;
  ATTR_POWER_CYCLE_COUNT        = 12;
  ATTR_EMERGENCY_RETRACT_CYCLE  = 192 ; // C0
  ATTR_LOAD_CYCLE_COUNT         = 193 ; // C1
  ATTR_TEMPERATURE_CELCIUS      = 194 ; // C2
  ATTR_HARDWARE_ECC             = 195 ; // C3
  ATTR_REALLOCATION_EVENT_COUNT = 196 ; // C4
  ATTR_CURRENT_PENDING_SECTOR   = 197 ; // C5
  ATTR_OFF_LINE_UNCORRECTABLE   = 198 ; // C6
  ATTR_ULTRA_ATA_CRC_ERROR_RATE = 199 ; // C7
  ATTR_MULTI_ZONE_ERROR_RATE    = 200 ; // C8
  ATTR_SOFT_READ_ERROR_RATE     = 201 ; // C9
  ATTR_OFF_TRACK_ERRORS         = 201 ; // C9 - alternative Maxtor
  ATTR_TA_INCREASE_COUNT        = 202 ; // CA
  ATTR_RUN_OUT_CANCEL           = 203 ; // CB
  ATTR_ECC_ERRORS               = 203 ; // CB - alternative Maxtor
  ATTR_SHOCK_COUNT_WRITE_OPS    = 204 ; // CC
  ATTR_SHOCK_RATE_WRITE_OPS     = 205 ; // CD
  ATTR_SPIN_HIGH_CURRENT        = 207 ; // CE
  ATTR_SPIN_BUZZ                = 208 ; // CF
  ATTR_OFFLINE_SEEK_PERF        = 209 ; // D0

// Declare a global structure to help print the data.
// NOTE: Per ATA3 and ATA4 specs, these attribute definitions are defined by the drive vendor
// and hence their attributes may vary between vendors.
//
Type
  TAttrEntry = Record
    ID: Byte;
    Name: String;
  End;
Const
  coAttrNames : Array[0..31] Of TAttrEntry = (
                 ({00}ID: ATTR_INVALID;                  Name: 'No Attribute Here'),
                 ({01}ID: ATTR_READ_ERROR_RATE;          Name: 'Raw Read Error Rate'),
                 ({02}ID: ATTR_THROUGHPUT_PERF;          Name: 'Throughput Performance'),
                 ({03}ID: ATTR_SPIN_UP_TIME;             Name: 'Spin Up Time'),
                 ({04}ID: ATTR_START_STOP_COUNT;         Name: 'Start/Stop Count'),
                 ({05}ID: ATTR_REALLOC_SECTOR_COUNT;     Name: 'Reallocated Sector Count'),
                 ({06}ID: ATTR_READ_CHANNEL_MARGIN;      Name: 'Read Channel Margin'),
                 ({07}ID: ATTR_SEEK_ERROR_RATE;          Name: 'Seek Error Rate'),
                 ({08}ID: ATTR_SEEK_TIME_PERF;           Name: 'Seek Time Performance'),
                 ({09}ID: ATTR_POWER_ON_HRS_COUNT;       Name: 'Power On Hours Count'),
                 ({10}ID: ATTR_SPIN_RETRY_COUNT;         Name: 'Spin Retry Count'),
                 ({11}ID: ATTR_CALIBRATION_RETRY_COUNT;  Name: 'Calibration Retry Count'),
                 ({12}ID: ATTR_POWER_CYCLE_COUNT;        Name: 'Power Cycle Count'),
                 ({13}ID: ATTR_EMERGENCY_RETRACT_CYCLE;  Name: 'Emergency Retract Cycle'),
                 ({14}ID: ATTR_LOAD_CYCLE_COUNT;         Name: 'Load Cycle Count'),
                 ({15}ID: ATTR_TEMPERATURE_CELCIUS;      Name: 'Temperature Celcius'),
                 ({16}ID: ATTR_HARDWARE_ECC;             Name: 'Hardware ECC'),
                 ({17}ID: ATTR_REALLOCATION_EVENT_COUNT; Name: 'Reallocation Event Count'),
                 ({18}ID: ATTR_CURRENT_PENDING_SECTOR;   Name: 'Current Pending Sector'),
                 ({19}ID: ATTR_OFF_LINE_UNCORRECTABLE;   Name: 'Off Line Uncorrectable'),
                 ({20}ID: ATTR_ULTRA_ATA_CRC_ERROR_RATE; Name: 'UltraATA CRC Error Rate'),
                 ({21}ID: ATTR_MULTI_ZONE_ERROR_RATE;    Name: 'Multi Zone Error Rate'),
                 ({22}ID: ATTR_SOFT_READ_ERROR_RATE;     Name: 'Soft Read Error Rate'),
                 ({23}ID: ATTR_OFF_TRACK_ERRORS;         Name: 'Off Track Errors'),
                 ({24}ID: ATTR_TA_INCREASE_COUNT;        Name: 'TA Increase Count'),
                 ({25}ID: ATTR_RUN_OUT_CANCEL;           Name: 'Run Out Cancel'),
                 ({26}ID: ATTR_ECC_ERRORS;               Name: 'ECC Errors'),
                 ({27}ID: ATTR_SHOCK_COUNT_WRITE_OPS;    Name: 'Shock Count Write Operations'),
                 ({28}ID: ATTR_SHOCK_RATE_WRITE_OPS;     Name: 'Shock Rate Write Operations'),
                 ({29}ID: ATTR_SPIN_HIGH_CURRENT;        Name: 'Spin High Current'),
                 ({30}ID: ATTR_SPIN_BUZZ;                Name: 'Spin Buzz'),
                 ({31}ID: ATTR_OFFLINE_SEEK_PERF;        Name: 'Offline Seek Performance') );
Beachte den Kommentar zuvor. Wenn du das im Detail haben willst, dann schau bei den Quellen der Linux smartmontools vorbei/rein.

Zitat:

Zitat von Metal_Snake2
@Muetze1
absulut richtig was du da erzählst, genach das werde ich tuhn!!

Beachte, dass z.B. beim Schreiben eines Sektors er die Daten dann erwartet und da diese Zugriffe meistens asynchron arbeiten, kann dir Windows nach dem Absetzen des Befehls dazwischen funken und was anderes machen wollen und schon schreibst du unbedarft falsche Daten auf die Festplatte. Auch ist es fraglich, ob du die MultiWord DMA Modien über das von Windows gebotene Interface bedienen kannst. Auch beachte, dass manche Befehle erst nach einem Timeout als Fehler gemeldet werden.

Vor allem kann ich dir nur empfehlen das unter DOS zu machen, dann hast du mehr Sicherheiten beim direkten ansprechen als unter Windows, da bist du meist nur das 5. Rad am Wagen und hast meist das nachsehen bzw. nicht die für diese Aktion notwendige Sicherheiten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz