gelöst Zählweise unter MS Windows bei Festplatten

Mitglied: cardisch

cardisch (Level 3)

27.04.2010 um 10:42 Uhr, 5209 Aufrufe, 12 Kommentare

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
Mitglied: Snowman25
27.04.2010 um 10:46 Uhr
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
Mitglied: SamvanRatt
27.04.2010 um 10:54 Uhr
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
Mitglied: cardisch
27.04.2010 um 11:06 Uhr
@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
Mitglied: LotPings
27.04.2010 um 14:55 Uhr
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:
01.
strComputer = "."
02.
Set oWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
03.
Set cDrives = oWMI.ExecQuery("SELECT * FROM Win32_DiskDrive")
04.
 
05.
For Each oDrive In cDrives
06.
  DrvLetters=""
07.
  strDeviceID = Replace(oDrive.DeviceID, "\", "\\")
08.
  Set cParts = oWMI.ExecQuery ("ASSOCIATORS OF {Win32_DiskDrive.DeviceID=""" & strDeviceID & """} WHERE AssocClass = " & "Win32_DiskDriveToDiskPartition")
09.
  For Each oPart In cParts
10.
    Set cLogDisks = oWMI.ExecQuery("ASSOCIATORS OF {Win32_DiskPartition.DeviceID=""" & oPart.DeviceID & """} WHERE AssocClass = " & "Win32_LogicalDiskToPartition")
11.
    For Each oLogDisk In cLogDisks
12.
      DrvLetters = DrvLetters & oLogDisk.DeviceID
13.
    Next
14.
  Next
15.
  wscript.echo oDrive.Index & ":" & Left(oDrive.Caption & Space(25), 25) & " : " & DrvLetters
16.
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
Mitglied: cardisch
27.04.2010 um 15:34 Uhr
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
Mitglied: LotPings
27.04.2010 um 15:57 Uhr
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

01.
'EnumDiskPartLogDisk.vbs '-------------------------------------------
02.
'for Windows NT 4.0  WMI CORE 1.5 needed
03.
'http://www.microsoft.com/downloads/release.asp?ReleaseID=18491
04.
x=17
05.
On Error Resume Next
06.
strComputer = "."
07.
Set objShell = CreateObject("Shell.Application") 
08.
Set objWMIService = _
09.
  GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
10.
Set colItems = _
11.
  objWMIService.ExecQuery("Select * from Win32_DiskDrive",,48)
12.
Wscript.Echo "==Win32_DiskDrive=="
13.
For Each objItem in colItems
14.
  Wscript.Echo LJust ("SystemName:",X) & objItem.SystemName & "<<" & "<<"
15.
  Wscript.Echo LJust ("Caption:",X) & objItem.Caption & "<<"
16.
  Wscript.Echo LJust ("Compr.Method:",X) & objItem.CompressionMethod & "<<"
17.
  Wscript.Echo LJust ("Description:",X) & objItem.Description & "<<"
18.
  Wscript.Echo LJust ("DeviceID:",X) & objItem.DeviceID & "<<"
19.
  Wscript.Echo LJust ("Index:",X) & objItem.Index & "<<"
20.
  Wscript.Echo LJust ("InterfaceType:",X) & objItem.InterfaceType & "<<"
21.
  Wscript.Echo LJust ("Manufacturer:",X) & objItem.Manufacturer & "<<"
22.
  Wscript.Echo LJust ("MediaLoaded:",X) & objItem.MediaLoaded & "<<"
23.
  Wscript.Echo LJust ("MediaType:",X) & objItem.MediaType & "<<"
24.
  Wscript.Echo LJust ("Model:",X) & objItem.Model & "<<"
25.
  Wscript.Echo LJust ("Name:",X) & objItem.Name & "<<"
26.
  Wscript.Echo LJust ("Partitions:",X) & objItem.Partitions & "<<"
27.
  Wscript.Echo LJust ("PNPDeviceID:",X) & objItem.PNPDeviceID & "<<"
28.
  Wscript.Echo LJust ("SCSIBus:",X) & objItem.SCSIBus & "<<"
29.
  Wscript.Echo LJust ("SCSILogicalUnit:",X) & objItem.SCSILogicalUnit & "<<"
30.
  Wscript.Echo LJust ("SCSIPort:",X) & objItem.SCSIPort & "<<"
31.
  Wscript.Echo LJust ("SCSITargetId:",X) & objItem.SCSITargetId & "<<"
32.
  Wscript.Echo LJust ("Signature:",X) & objItem.Signature & "<<"
33.
  Wscript.Echo LJust ("Status:",X) & objItem.Status & "<<"
34.
  Wscript.Echo "----------------"
35.
  Wscript.Echo LJust ("TotalCylinders:",X) & objItem.TotalCylinders & "<<"
36.
  Wscript.Echo LJust ("TotalHeads:",X) & objItem.TotalHeads & "<<"
37.
  Wscript.Echo LJust ("TracksPerCyl.:",X) & objItem.TracksPerCylinder & "<<"
38.
  Wscript.Echo LJust ("SectorsPerTrack:",X) & objItem.SectorsPerTrack & "<<"
39.
  Wscript.Echo LJust ("TotalTracks:",X) & objItem.TotalTracks & "<<"
40.
  Wscript.Echo LJust ("TotalSectors:",X) & objItem.TotalSectors & "<<"
41.
  Wscript.Echo LJust ("BytesPerSector:",X) & objItem.BytesPerSector & "<<"
42.
  Wscript.Echo LJust ("Size          :",X) & objItem.Size & "<<"
43.
  Wscript.Echo "============================================"
44.
Next
45.

46.
Set colItems = _
47.
  objWMIService.ExecQuery("Select * from Win32_DiskPartition",,48)
48.
Wscript.Echo "==Win32_DiskPartition=="
49.
For Each objItem in colItems
50.
  Wscript.Echo LJust ("SystemName:",X) & objItem.SystemName & "<<"
51.
  Wscript.Echo LJust ("Bootable:",X) & objItem.Bootable & "<<"
52.
  Wscript.Echo LJust ("BootPartition:",X) & objItem.BootPartition & "<<"
53.
  Wscript.Echo LJust ("Caption:",X) & objItem.Caption & "<<"
54.
  Wscript.Echo LJust ("Description:",X) & objItem.Description & "<<"
55.
  Wscript.Echo LJust ("DeviceID:",X) & objItem.DeviceID & "<<"
56.
  Wscript.Echo LJust ("DiskIndex:",X) & objItem.DiskIndex & "<<"
57.
  Wscript.Echo LJust ("Index:",X) & objItem.Index & "<<"
58.
  Wscript.Echo LJust ("Name:",X) & objItem.Name & "<<"
59.
  Wscript.Echo LJust ("PrimaryPartit.:",X) & objItem.PrimaryPartition & "<<"
60.
  Wscript.Echo LJust ("Type:",X) & objItem.Type & "<<"
61.
  Wscript.Echo "----------------"
62.
  Wscript.Echo LJust ("BlockSize:",X) & objItem.BlockSize & "<<"
63.
  Wscript.Echo LJust ("NumberOfBlocks:",X) & objItem.NumberOfBlocks & "<<"
64.
  Wscript.Echo LJust ("Size:",X) & objItem.Size & " Bytes " & _ 
65.
  (objItem.Size / objItem.BlockSize) & " Blocks"
66.
  Wscript.Echo LJust ("StartingOffset:",X) & objItem.StartingOffset & _ 
67.
  " Bytes " & (objItem.StartingOffset / objItem.BlockSize) & " Blocks"
68.
  Wscript.Echo "============================================"
69.
Next
70.

71.
Set colItems = _
72.
  objWMIService.ExecQuery("Select * from Win32_LogicalDisk",,48)
73.
Wscript.Echo "==Win32_LogicalDisk=="
74.
For Each objItem in colItems
75.
  Wscript.Echo LJust ("SystemName:",X) & objItem.SystemName & "<<"
76.
  Wscript.Echo LJust ("Caption:",X) & objItem.Caption & "<<"
77.
  Wscript.Echo LJust ("VolumeName:",X) & objItem.VolumeName & "<<"
78.
  Wscript.Echo LJust ("Compressed:",X) & objItem.Compressed & "<<"
79.
  Wscript.Echo LJust ("Description:",X) & objItem.Description & "<<"
80.
  Wscript.Echo LJust ("DeviceID:",X) & objItem.DeviceID & "<<"
81.
  Wscript.Echo LJust ("DriveType:",X) & objItem.DriveType & "<<"
82.
  Wscript.Echo LJust ("FileSystem:",X) & objItem.FileSystem & "<<"
83.
  Wscript.Echo LJust ("MediaType:",X) & objItem.MediaType & "<<"
84.
  Wscript.Echo LJust ("Name:",X) & objItem.Name & "<<"
85.
  Wscript.Echo LJust ("Size:",X) & objItem.Size & "<<"
86.
  Wscript.Echo LJust ("FreeSpace:",X) & objItem.FreeSpace & "<<"
87.
  Wscript.Echo LJust ("VolumeSerNum:",X) & objItem.VolumeSerialNumber & "<<"
88.
  Wscript.Echo LJust ("DrvSelfName:",X) & objShell.NameSpace(objItem.DeviceID).Self.Name & "<<"
89.
  
90.
  Wscript.Echo "============================================"
91.
Next
92.

93.
Function LJust(Wert, Laenge)
94.
  If len (Wert) < Laenge then
95.
    LJust=Left(Wert & Space(Laenge), Laenge)
96.
  Else
97.
    LJust=Wert
98.
   End If
99.
end Function 
100.

101.
'EnumDiskPartLogDisk.vbs '-------------------------------------------
Mitglied: SamvanRatt
27.04.2010 um 17:48 Uhr
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
Mitglied: cardisch
30.04.2010 um 08:17 Uhr
@Lordpings

Hat super funktioniert, danke für die Scripte

@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
Mitglied: Snowman25
30.04.2010 um 10:21 Uhr
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
Mitglied: cardisch
30.04.2010 um 12:54 Uhr
@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
Mitglied: Snowman25
30.04.2010 um 13:04 Uhr
Naja, es ist ja kein wirkliches Problem.
Der Buchstabe in der Datenträgerverwaltung muss mit dem auf der Platte nicht übereinstimmen.
Mitglied: cardisch
05.05.2010 um 15:54 Uhr
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 )

Danke an alle

Carsten
Titel: Zählweise unter MS Windows bei Festplatten
Content-ID: 141559
Art des Inhalts: Frage
Ausgedruckt am: 18.09.2019 um 09:06:55 Uhr
URL: https://administrator.de/contentid/141559