cardisch
Goto Top

Zählweise unter MS Windows bei Festplatten

Wie erkenne ich welche Platte (habe aktuell vier) defekt wäre/ist

Hi @all..

Eine meiner vier Fesplatten (alle SATA) hat sich gestern verabschiedet, nicht schlimm, uralte 160er, die quasi nur als Medium gedient hat, wenn ich Daten temporär zwischenspeichern musste.
Als solche benutzt ich die halt nicht regelmäßig, gestern ist die mir "nur" beim kopieren abgesemmelt. Fehler:

Fehlerhafter Block bei Gerät \Device\Harddisk0\D. (Sofern ich das noch richtig in Erinnerung habe).

Da diese Platte schon zwei drei mal beim booten nicht erkannt wurde oder sich auch schon ein zwei mal unter Windows selbst verabschiedet hat, war klar, dass es "nur" die" 160er getroffen haben kann.
Ich brauche jetzt keine Hilfe zu Datensicherung/Rekonstruktion, o.ä. nur folgendes würde ich gerne wissen:

WIE zählt Windows diese Festplatte intern auf oder wie könnte ich ohne expliziten Diagnoselauf (bei vier Festplatten mit gesamtkap. von 2,8 TB dauert mir das zu lange) nur Anhand der Meldung sagen: Die ist defekt ...

Kann ich anhand des Gerätemanagers oder sonstwie erkennen, welche Windows als defekt deklariert hat !?

Danke

Carsten

Content-ID: 141559

Url: https://administrator.de/contentid/141559

Ausgedruckt am: 26.11.2024 um 02:11 Uhr

Snowman25
Snowman25 27.04.2010 um 10:46:19 Uhr
Goto Top
Hallo Carsten,

soweit ich das richtig in Erinerung habe, sieht das ugefähr so aus:

  1. Harddisk0
    1. Partition0
    2. Partition1
    3. Partition2
  2. Harddisk1
    1. VolumeC
    2. VolumeD
  3. Harddisk2
  4. Harddisk3

Gruß
Snow
SamvanRatt
SamvanRatt 27.04.2010 um 10:54:08 Uhr
Goto Top
Hi
Windows nutzt nachdem der HAL Initiert wurde die Treiberreihenfolge wie sie die Registry vorgibt und beginnt dann jedes Blockdev Gerät zu nummerieren (0,1,2,...) danach Primäre Partitionen suchen und Buchstaben zuweisen (sofern diese unter Mounted Devices nicht nach VolID schon fest vergeben wurden) und danach Logische einzubinden.
Innerhalb der Treiber wird normal auch bei 0 begonnen (SATA oder SCSI mit LUNs) und dann vergeben. Die Darstellung in der Datenträgerverwaltung und die Eventlogs sind aber immer gleich.
Gruß
Sam
cardisch
cardisch 27.04.2010 um 11:06:55 Uhr
Goto Top
@snow..
So "kenne" oder besser vermute ich das ja auch...
Aber die Platte, die abgesemmelt ist hat den LW-Buchstaben E gehabt und beinhaltet eine einezelne primäre Partition.
Sie könnte aber am SATA COntroller 1 gehangen haben (und wenn MSI bei 1 anfangen zu zählen würde das die 0 unter Windows erklären (ich habe mir damals die Kanäle, den LW-Buchstaben und die Laufwerksgröße auf einen Aufkleber geschreiben und auf die Festplatte geklebt, genau für soclhe Fälle, damit ich sofort weiss, welche Platte ich gerade ausbauen will bei vier Platten ist es eng in einem MidiTower).
@SamvanRatt.
Und wo in der Registry kann man das genau sehen und wie verhalten sich externe Datenträger in so einem Fall ?!?

Danke

Carsten
77559
77559 27.04.2010 um 14:55:43 Uhr
Goto Top
Hallo Carsten,

leider schreibst du nicht welche Windows-Version du nutzt.

Um die Zuordnung der Laufwerksbustaben zu den Platten aufzulisten gibt es ein schönes vbscript:
strComputer = "."  
Set oWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
Set cDrives = oWMI.ExecQuery("SELECT * FROM Win32_DiskDrive")  
 
For Each oDrive In cDrives
  DrvLetters=""  
  strDeviceID = Replace(oDrive.DeviceID, "\", "\\")  
  Set cParts = oWMI.ExecQuery ("ASSOCIATORS OF {Win32_DiskDrive.DeviceID=""" & strDeviceID & """} WHERE AssocClass = " & "Win32_DiskDriveToDiskPartition")  
  For Each oPart In cParts
    Set cLogDisks = oWMI.ExecQuery("ASSOCIATORS OF {Win32_DiskPartition.DeviceID=""" & oPart.DeviceID & """} WHERE AssocClass = " & "Win32_LogicalDiskToPartition")  
    For Each oLogDisk In cLogDisks
      DrvLetters = DrvLetters & oLogDisk.DeviceID
    Next
  Next
  wscript.echo oDrive.Index & ":" & Left(oDrive.Caption & Space(25), 25) & " : " & DrvLetters  
Next

Das erzeugt bei mir diese Ausgabe:
14:43:07 D:\Test\vbs____________________
>get-Drive.vbs
0:Hitachi HDS722020ALA330 A : C:D:E:F:
1:SAMSUNG HD753LJ ATA Devic : I:J:G:
14:50:58 D:\Test\vbs____________________

Gruß
LotPings

PS: Ist nicht dokumentiert - Ich versuch ja selber noch es zu verstehen face-wink
cardisch
cardisch 27.04.2010 um 15:34:20 Uhr
Goto Top
Uups,

es handelt sich um Win XP pro, wie gesagt:
4*HDD (2*1TB Samsung, jeweils partitioniert (256/Rest und 768/Rest), 1*WD 500GB (50%/50%) und besagter 160er Seagate, in einem Stück partitioniert.
Da der PC bei mir zuhause rumsteht und ich gerade @work bin komme ich nicht an weitere Daten ran, dürfte aber eh unerheblich sein, oder ?!
"Leider" wirft das Script mit nur aus, dass ich eine HDD mit 2 Partitionen an C und D habe (keine Modellbezeichnung) und eine E-Platte (per USB, wird aber gerade nur mit einem Checkdisk geprüft, fliegt danach raus), die dafür mit Typbezeichnung...
Ich werfe das morgen (heute schaff ich das eher nicht mehr) mal an und gebe Donnerstag Bescheid.

Für das Script bedanke im mich aber schon einmal..

Carsten
77559
77559 27.04.2010 um 15:57:01 Uhr
Goto Top
Tja mein Beispiel mit Typenbez
waren eine 2TB Hitachi und ein 750GB Samsung.
Aber wenn das Laufwerk keine Infos herausgibt....

Zum Sammeln von weiterer Informationen zu HDs/Partitionen/LogDisks gibt es auf Basis der Scriptomatik von Microsoft VBScripte die ich nur etwas aufgehübscht habe,
den bei mir ellenlangen Beispielausdruck schenke ich uns.

Gruß
LotPings

'EnumDiskPartLogDisk.vbs '-------------------------------------------  
'for Windows NT 4.0  WMI CORE 1.5 needed  
'http://www.microsoft.com/downloads/release.asp?ReleaseID=18491  
x=17
On Error Resume Next
strComputer = "."  
Set objShell = CreateObject("Shell.Application")   
Set objWMIService = _
  GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
Set colItems = _
  objWMIService.ExecQuery("Select * from Win32_DiskDrive",,48)  
Wscript.Echo "==Win32_DiskDrive=="  
For Each objItem in colItems
  Wscript.Echo LJust ("SystemName:",X) & objItem.SystemName & "<<" & "<<"  
  Wscript.Echo LJust ("Caption:",X) & objItem.Caption & "<<"  
  Wscript.Echo LJust ("Compr.Method:",X) & objItem.CompressionMethod & "<<"  
  Wscript.Echo LJust ("Description:",X) & objItem.Description & "<<"  
  Wscript.Echo LJust ("DeviceID:",X) & objItem.DeviceID & "<<"  
  Wscript.Echo LJust ("Index:",X) & objItem.Index & "<<"  
  Wscript.Echo LJust ("InterfaceType:",X) & objItem.InterfaceType & "<<"  
  Wscript.Echo LJust ("Manufacturer:",X) & objItem.Manufacturer & "<<"  
  Wscript.Echo LJust ("MediaLoaded:",X) & objItem.MediaLoaded & "<<"  
  Wscript.Echo LJust ("MediaType:",X) & objItem.MediaType & "<<"  
  Wscript.Echo LJust ("Model:",X) & objItem.Model & "<<"  
  Wscript.Echo LJust ("Name:",X) & objItem.Name & "<<"  
  Wscript.Echo LJust ("Partitions:",X) & objItem.Partitions & "<<"  
  Wscript.Echo LJust ("PNPDeviceID:",X) & objItem.PNPDeviceID & "<<"  
  Wscript.Echo LJust ("SCSIBus:",X) & objItem.SCSIBus & "<<"  
  Wscript.Echo LJust ("SCSILogicalUnit:",X) & objItem.SCSILogicalUnit & "<<"  
  Wscript.Echo LJust ("SCSIPort:",X) & objItem.SCSIPort & "<<"  
  Wscript.Echo LJust ("SCSITargetId:",X) & objItem.SCSITargetId & "<<"  
  Wscript.Echo LJust ("Signature:",X) & objItem.Signature & "<<"  
  Wscript.Echo LJust ("Status:",X) & objItem.Status & "<<"  
  Wscript.Echo "----------------"  
  Wscript.Echo LJust ("TotalCylinders:",X) & objItem.TotalCylinders & "<<"  
  Wscript.Echo LJust ("TotalHeads:",X) & objItem.TotalHeads & "<<"  
  Wscript.Echo LJust ("TracksPerCyl.:",X) & objItem.TracksPerCylinder & "<<"  
  Wscript.Echo LJust ("SectorsPerTrack:",X) & objItem.SectorsPerTrack & "<<"  
  Wscript.Echo LJust ("TotalTracks:",X) & objItem.TotalTracks & "<<"  
  Wscript.Echo LJust ("TotalSectors:",X) & objItem.TotalSectors & "<<"  
  Wscript.Echo LJust ("BytesPerSector:",X) & objItem.BytesPerSector & "<<"  
  Wscript.Echo LJust ("Size          :",X) & objItem.Size & "<<"  
  Wscript.Echo "============================================"  
Next

Set colItems = _
  objWMIService.ExecQuery("Select * from Win32_DiskPartition",,48)  
Wscript.Echo "==Win32_DiskPartition=="  
For Each objItem in colItems
  Wscript.Echo LJust ("SystemName:",X) & objItem.SystemName & "<<"  
  Wscript.Echo LJust ("Bootable:",X) & objItem.Bootable & "<<"  
  Wscript.Echo LJust ("BootPartition:",X) & objItem.BootPartition & "<<"  
  Wscript.Echo LJust ("Caption:",X) & objItem.Caption & "<<"  
  Wscript.Echo LJust ("Description:",X) & objItem.Description & "<<"  
  Wscript.Echo LJust ("DeviceID:",X) & objItem.DeviceID & "<<"  
  Wscript.Echo LJust ("DiskIndex:",X) & objItem.DiskIndex & "<<"  
  Wscript.Echo LJust ("Index:",X) & objItem.Index & "<<"  
  Wscript.Echo LJust ("Name:",X) & objItem.Name & "<<"  
  Wscript.Echo LJust ("PrimaryPartit.:",X) & objItem.PrimaryPartition & "<<"  
  Wscript.Echo LJust ("Type:",X) & objItem.Type & "<<"  
  Wscript.Echo "----------------"  
  Wscript.Echo LJust ("BlockSize:",X) & objItem.BlockSize & "<<"  
  Wscript.Echo LJust ("NumberOfBlocks:",X) & objItem.NumberOfBlocks & "<<"  
  Wscript.Echo LJust ("Size:",X) & objItem.Size & " Bytes " & _   
  (objItem.Size / objItem.BlockSize) & " Blocks"  
  Wscript.Echo LJust ("StartingOffset:",X) & objItem.StartingOffset & _   
  " Bytes " & (objItem.StartingOffset / objItem.BlockSize) & " Blocks"  
  Wscript.Echo "============================================"  
Next

Set colItems = _
  objWMIService.ExecQuery("Select * from Win32_LogicalDisk",,48)  
Wscript.Echo "==Win32_LogicalDisk=="  
For Each objItem in colItems
  Wscript.Echo LJust ("SystemName:",X) & objItem.SystemName & "<<"  
  Wscript.Echo LJust ("Caption:",X) & objItem.Caption & "<<"  
  Wscript.Echo LJust ("VolumeName:",X) & objItem.VolumeName & "<<"  
  Wscript.Echo LJust ("Compressed:",X) & objItem.Compressed & "<<"  
  Wscript.Echo LJust ("Description:",X) & objItem.Description & "<<"  
  Wscript.Echo LJust ("DeviceID:",X) & objItem.DeviceID & "<<"  
  Wscript.Echo LJust ("DriveType:",X) & objItem.DriveType & "<<"  
  Wscript.Echo LJust ("FileSystem:",X) & objItem.FileSystem & "<<"  
  Wscript.Echo LJust ("MediaType:",X) & objItem.MediaType & "<<"  
  Wscript.Echo LJust ("Name:",X) & objItem.Name & "<<"  
  Wscript.Echo LJust ("Size:",X) & objItem.Size & "<<"  
  Wscript.Echo LJust ("FreeSpace:",X) & objItem.FreeSpace & "<<"  
  Wscript.Echo LJust ("VolumeSerNum:",X) & objItem.VolumeSerialNumber & "<<"  
  Wscript.Echo LJust ("DrvSelfName:",X) & objShell.NameSpace(objItem.DeviceID).Self.Name & "<<"  
  
  Wscript.Echo "============================================"  
Next

Function LJust(Wert, Laenge)
  If len (Wert) < Laenge then
    LJust=Left(Wert & Space(Laenge), Laenge)
  Else
    LJust=Wert
   End If
end Function 

'EnumDiskPartLogDisk.vbs '-------------------------------------------  
SamvanRatt
SamvanRatt 27.04.2010 um 17:48:28 Uhr
Goto Top
Such unter CriticalDeviceDatabase; dort wird der Reihe nach (PCI Order von niedrigstem Slot bis höchsten Slot) nachgesehen und vermerkt. Externe kommen halt drauf an wie sie angeschlossen sind; SCSI, SAS, eSATA erscheinen kurzerhand wie interne; USB wird mit dem USB Treiber (sehr spät erst, da sind nahezu alle Dienste bereits dran) initiiert und dann die daranhängenden Geräte. Da die Reihenfolge immer bei Null beginnt kann es auch sein das dein Bootgerät HD5 ist während 0 ein SAS Kontroller, 3 ein IDE Gerät z.B. ist. Das ist nicht statisch (vergleichbar mit den Linux SG und SD geräten)
Gruß
Sam
cardisch
cardisch 30.04.2010 um 08:17:02 Uhr
Goto Top
@lordpings

Hat super funktioniert, danke für die Scripte face-wink

@Snowman

Ich würde auch noch gerne deine Zählweise verstehen..
Korrigier mich, wenn ich falsch liege.
\harddisk0\A =1. Partition auf der 0. Platte (Kann ich daraus folgern, ob das eine aktive, primäre, oder sonstwie geartete Platte ist ?!)
\harddisk1\D = 2. Partition auf der 1. Platte...

Werden die 8 MB "Partitionen" bei den XP-PC´s mitgezählt ?!?

Danke

Carsten
Snowman25
Snowman25 30.04.2010 um 10:21:51 Uhr
Goto Top
Zitat von @cardisch:
\harddisk0\A =1. Partition auf der 0. Platte (Kann ich daraus folgern, ob das eine aktive, primäre, oder sonstwie geartete
Platte ist ?!)
Nein. Das kannst du so nicht.

\harddisk1\D = 2. Partition auf der 1. Platte...
Eher Partition mit Buchstaben D auf der 1. Platte (bzw. eig. 2. Platte)

Werden die 8 MB "Partitionen" bei den XP-PC´s mitgezählt ?!?
Sind die nicht unzugeordneter Speicherplatz? Insofern also nein
Laut Windows werden dort zusätzliche Partitionsinformationen bei Multipartitionsfestplatten gespeichert. Allerdings war es bis jetzt immer egal, ob ich die 8 MB später per Partition Magic angefügt habe oder nicht.

Gruß
Snow
cardisch
cardisch 30.04.2010 um 12:54:12 Uhr
Goto Top
@snow
Aber warum hat mir die Ereignisanzeige definitv harddisk0\d als korrupt markiert..
Im nachhinein kann ich zwar sagen, dass es die 0.Platte war (laut dem Script), aber es ist eine einzelne, vermutlich primäre Partition drauf gewesen, LW-Buchstabe E:\
Es kann natürlich sein, dass de Platte irgendwann mal den Buchstaben D:\ hatte und ich den in der Datenträgerverwaltung "korrigiert" habe, da das System aber ca 3,5 Jahre alt ist, kann ich das nicht 100%ig behaupten.
Kann das Problem also daher rühren ?!?

Grúß

Carsten
Snowman25
Snowman25 30.04.2010 um 13:04:53 Uhr
Goto Top
Naja, es ist ja kein wirkliches Problem.
Der Buchstabe in der Datenträgerverwaltung muss mit dem auf der Platte nicht übereinstimmen.
cardisch
cardisch 05.05.2010 um 15:54:16 Uhr
Goto Top
Hi@all
Auch wenn ich gerne ein paar mehr Detail bekommen hätte (aber von Bill, nicht von euch), so gebe ich mich mit allen Antworten (und vor allem den Scripten) mehr als zufrieden....
Im Prinzip ist ja auch egal WELCHE Partition den Fehler anzeigt, wenn es so weit ist, tausche ich die ganze Platte und nicht nnur die defekte Partition aus face-wink)

Danke an alle

Carsten