Discussion:
Partition Alignment
(zu alt für eine Antwort)
Thomas Wildgruber
2013-01-20 15:08:23 UTC
Permalink
Hi Group,

für eine mögliche Projektarbeit eines Azubis nehmen wir gerade den MBR und
die EBRs einer Festplatte auseinander, hauptsächlich eines Linux Systems.
In diesem Zusammenhang gehört auch die Ausrichtung der Partitionen
(Partition Alignment). Da ich früher schon mal über die Problematik von
Advanced Format Festplatten im Zusammenhang mit XP einen Blog geschrieben
habe, habe ich hier das Problem, dass Windows XP die erste Partition an
Sektor 63 ausrichtet, in die Diskussion aufgenommen.

Zur Demonstration dieses Problems habe ich den StartingOffset einer Windows
XP basierten Partition anziegen lassen und überraschenderweise
festgestellt, dass diese nicht an Sektor 63 sondern an Sektor 56
ausgerichtet ist:

---snip---
C:\> wmic partition get BlockSize, StartingOffset, Name, Index
BlockSize Index Name StartingOffset
512 0 Datenträger Nr. 0, Partition Nr. 0 28672
---snap---

Der Starting Offset wird in Byte angegeben was im oz Fall 56 ergibt (28672
/ 512). Gibt es dafür eine Erklärung?

BTW: Windows 7 im Gegensatz richtet sich korrekt nach einem 1 MiB Alignment
aus und startet die erste Partition an Sektor 2048 (1048576 / 512):

---snip---
C:\> wmic partition get BlockSize, StartingOffset, Name, Index
BlockSize Index Name StartingOffset
512 0 Datenträgernr. 0, Partitionsnr. 0 1048576
---snap---

Warum startet XP die erste Partition nicht an Sektor 63, was zwar auch
falsch ist aber wensigstens noch so dokumentiert wäre?

Thx & Bye Tom
--
"One good Whiskey a day, keeps the doctor away"
Hans-Peter Matthess
2013-01-24 18:24:02 UTC
Permalink
Post by Thomas Wildgruber
Warum startet XP die erste Partition nicht an Sektor 63, was zwar auch
falsch ist aber wensigstens noch so dokumentiert wäre?
Evtl. sowas:
http://community.wdc.com/t5/Desktop-Portable-Drives/WD15EARS-Difference-between-Jumper-in-7-8-amp-WD-Align-System/td-p/15407
--
Scheinsicherheit und System-Zerstörung durch Virenscanner:
http://www.soehnitz.de/itsicherheit/virenscannersinnoderunsinn/index.html
Darum: http://www.soehnitz.de/itsicherheit/wassiewirklichbrauchen/index.html
Konfiguration einfach gemacht: http://home.arcor.de/skanthak/safer.html
Thomas Wildgruber
2013-01-25 07:52:54 UTC
Permalink
Post by Hans-Peter Matthess
Post by Thomas Wildgruber
Warum startet XP die erste Partition nicht an Sektor 63, was zwar auch
falsch ist aber wensigstens noch so dokumentiert wäre?
http://community.wdc.com/t5/Desktop-Portable-Drives/WD15EARS-Difference-between-Jumper-in-7-8-amp-WD-Align-System/td-p/15407
Hm, ja evtl. sowas. Der 56 Block ist tatsächlich 4 KiB ausgerichtet aber
ich muss das Jumper Setup nochmal an einer richtigen Hardware überprüfen,
den hier zitierten Fall habe ich aus einer VM...

Bei der ganzen Geschichte bin ich jetzt noch auf eine andere Frage
gestossen. Die Festplatte bzw. der "Jumper" scheint ja das zu machen, was
er soll aber zumindest das wmic Utility ziegt dann das physikalische
Alignment an und nicht das was XP ja untergejubelt werden soll (Sektor 63).

Aber ich habe schon mal einen Ansatz für weitere Überlegungen, danke.

Thx & Bye Tom
--
"Der Retter der Welt ist ein Pinguin und Linus Torvalds ist sein Prophet "
Uwe Sieber
2013-01-28 04:48:55 UTC
Permalink
Post by Thomas Wildgruber
Post by Hans-Peter Matthess
Post by Thomas Wildgruber
Warum startet XP die erste Partition nicht an Sektor 63, was zwar auch
falsch ist aber wensigstens noch so dokumentiert wäre?
http://community.wdc.com/t5/Desktop-Portable-Drives/WD15EARS-Difference-between-Jumper-in-7-8-amp-WD-Align-System/td-p/15407
Hm, ja evtl. sowas. Der 56 Block ist tatsächlich 4 KiB ausgerichtet aber
ich muss das Jumper Setup nochmal an einer richtigen Hardware überprüfen,
den hier zitierten Fall habe ich aus einer VM...
Ah, eine VM. Die Regel die XP anwendet lautet ja nicht,
beginne Partitionen bei Sektor 63 sondern beginne bei
einer Zylindergrenze. Vielleicht nutzt die VM das aus,
indem die virtellen Platten 56 Sektoren pro Spur melden -
so sind dann Partitionen die XP anlegt innerhalb der
Containerdatei ordentlich ausgerichtet, die von neueren
Systemen aber auch.
Die Containderdatei könnte schließlich auf einer SSD oder
eine Platte mit 4K-Sektoren liegen.

Das wirft die Frage auf, warum das die Festplattenhersteller
nicht auch so gemacht haben.


Gruß Uwe
Thomas Wildgruber
2013-01-28 08:37:55 UTC
Permalink
Servus Uwe,
Post by Uwe Sieber
Post by Thomas Wildgruber
Hm, ja evtl. sowas. Der 56 Block ist tatsächlich 4 KiB ausgerichtet aber
ich muss das Jumper Setup nochmal an einer richtigen Hardware überprüfen,
den hier zitierten Fall habe ich aus einer VM...
Ah, eine VM. Die Regel die XP anwendet lautet ja nicht,
beginne Partitionen bei Sektor 63 sondern beginne bei
einer Zylindergrenze. Vielleicht nutzt die VM das aus,
indem die virtellen Platten 56 Sektoren pro Spur melden -
Wie lässt man sich bei Windows die Details zur Festplattengeometrie
anzeigen? Unter Linux macht das zB fdisk oder parted...

Anyway, ich gehe davon aus, dass VMWare dem Windows Gast die gleiche Platte
unterjubelt, wie es das für einen Linux Gast täte und dort haben wir 255
Köpfe, 63 Sektoren/Spur und halt soviele Zylinder wie notwendig wären um
die Platte darzustellen.
Post by Uwe Sieber
so sind dann Partitionen die XP anlegt innerhalb der
Containerdatei ordentlich ausgerichtet, die von neueren
Systemen aber auch.
Die Containderdatei könnte schließlich auf einer SSD oder
eine Platte mit 4K-Sektoren liegen.
Tut sie auch aber selbst wenn die Platte keine 4 KiB Sektoren hätte, kommt
dann nicht auch noch die Clustergröße von Windows ins Spiel? Das wäre aus
Sicht von Windows doch dann die kleinste (wenn auch logische) Einheit und
die hätte idR auch 4 KiB.

BTW: Apropos SSD, ich hab bei Kingtson mal die Page- und Eraseable
Block-Size angefragt und die gaben mir 8 KiB (Page Size) / 1 MiB (Eraseable
Blocksize) als Antwort. Wenn die Partitionen nach 1 MiB ausgerichtet sind,
sollte das kein Problem sein aber bei einer 4 KiB Ausrichtung haben wir ja
auch wieder ein Problem.

Also nach 4 KiB sollte die Ausrichtung ja mindestens sein. Windows 7
richtet sich hier (auch in einer VM) bereits nach 1 MiB aus.

Thx & Bye Tom
--
"Manches Gewissen ist nur rein, weil es nie benutzt wurde" (Robert Lembke)
Uwe Sieber
2013-01-28 11:36:28 UTC
Permalink
Post by Thomas Wildgruber
Servus Uwe,
Post by Uwe Sieber
Post by Thomas Wildgruber
Hm, ja evtl. sowas. Der 56 Block ist tatsächlich 4 KiB ausgerichtet aber
ich muss das Jumper Setup nochmal an einer richtigen Hardware überprüfen,
den hier zitierten Fall habe ich aus einer VM...
Ah, eine VM. Die Regel die XP anwendet lautet ja nicht,
beginne Partitionen bei Sektor 63 sondern beginne bei
einer Zylindergrenze. Vielleicht nutzt die VM das aus,
indem die virtellen Platten 56 Sektoren pro Spur melden -
Wie lässt man sich bei Windows die Details zur Festplattengeometrie
anzeigen? Unter Linux macht das zB fdisk oder parted...
Da fällt mir auch nix ein - ich habs mal fix in ein
halbfertiges Tool eingebaut:
http://www.uwe-sieber.de/files/UsbDriveInfo_beta1.zip

'Options' -> 'Show all drives anhaken', damit es auch
Nicht-USB-Laufwerk zeigt.
Post by Thomas Wildgruber
Anyway, ich gehe davon aus, dass VMWare dem Windows Gast die gleiche Platte
unterjubelt, wie es das für einen Linux Gast täte und dort haben wir 255
Köpfe, 63 Sektoren/Spur und halt soviele Zylinder wie notwendig wären um
die Platte darzustellen.
Post by Uwe Sieber
so sind dann Partitionen die XP anlegt innerhalb der
Containerdatei ordentlich ausgerichtet, die von neueren
Systemen aber auch.
Die Containderdatei könnte schließlich auf einer SSD oder
eine Platte mit 4K-Sektoren liegen.
Tut sie auch aber selbst wenn die Platte keine 4 KiB Sektoren hätte, kommt
dann nicht auch noch die Clustergröße von Windows ins Spiel? Das wäre aus
Sicht von Windows doch dann die kleinste (wenn auch logische) Einheit und
die hätte idR auch 4 KiB.
Der Cluster ist die kleinste Einheit die einer Datei
zuzuordnen ist. Ob es auch die keinste ist, die gelesen
und geschrieben werden kann weiß ich nicht.
Post by Thomas Wildgruber
BTW: Apropos SSD, ich hab bei Kingtson mal die Page- und Eraseable
Block-Size angefragt und die gaben mir 8 KiB (Page Size) / 1 MiB (Eraseable
Blocksize) als Antwort. Wenn die Partitionen nach 1 MiB ausgerichtet sind,
sollte das kein Problem sein aber bei einer 4 KiB Ausrichtung haben wir ja
auch wieder ein Problem.
Naja, bei 1MB Bockgröße bleiben eh nur Kompromisse, aber
je größer die Cluster um so geringer die Warscheinlichkeit,
dass ein Block unnötigerweise angefaßt wird.
Post by Thomas Wildgruber
Also nach 4 KiB sollte die Ausrichtung ja mindestens sein. Windows 7
richtet sich hier (auch in einer VM) bereits nach 1 MiB aus.
Genau. Eine größere Ausrichtung als die Clustergröße bringt
erst mal nichts.


Gruß Uwe
Thorsten Albrecht
2013-01-28 12:30:53 UTC
Permalink
Post by Thomas Wildgruber
Wie lässt man sich bei Windows die Details zur Festplattengeometrie
anzeigen? Unter Linux macht das zB fdisk oder parted...
Vielleicht reicht Dir:

msinfo32:
Komponenten
Speicher
Datenträger

Da stehen ein paar Infos bzgl. Zylinder, Spuren, Sektoren ...

Thorsten
Thomas Wildgruber
2013-01-28 14:19:04 UTC
Permalink
Post by Thorsten Albrecht
Post by Thomas Wildgruber
Wie lässt man sich bei Windows die Details zur Festplattengeometrie
anzeigen? Unter Linux macht das zB fdisk oder parted...
Komponenten
Speicher
Datenträger
Da stehen ein paar Infos bzgl. Zylinder, Spuren, Sektoren ...
Jupp da steht das und da steht das, was ich erwartet habe:

63 Sektoren / Spur; 255 Köpfe und soviele Zylinder wie notwendig sind um
die Festplattengröße darzustellen. Das ist eigentlich Standard seit die
Festplatten größer als (afair) 8 GB geworden sind.

Thx & Bye Tom
--
"Sie wissen, wir leben im Zeitalter der Abkürzungen. Ehe ist die Kurzform
für lateinische "errare humanum est" ("Irren ist menschlich")." (Robert
Lembke)
Ruediger Roesler
2013-03-28 08:05:43 UTC
Permalink
Post by Thomas Wildgruber
Post by Thorsten Albrecht
Komponenten
Speicher
Datenträger
Da stehen ein paar Infos bzgl. Zylinder, Spuren, Sektoren ...
63 Sektoren / Spur; 255 Köpfe und soviele Zylinder wie notwendig sind
um die Festplattengröße darzustellen. Das ist eigentlich Standard
seit die Festplatten größer als (afair) 8 GB geworden sind.
Ich habe mal ein Skript etwas überarbeitet, dieses zeigt für alle
Partitionen die Ausrichtung an, falls es noch pressiert. Das Skript, das
unter
http://gallery.technet.microsoft.com/scriptcenter/Check-if-disk-partitions-bb5b3eca/file/78937/1/Check4kAligned.zip
angeboten wird, arbeitet aufgrund eines logischen Fehlers leider nicht
korrekt.

'########################## ShowDrives.vbs ############################
Rem von h.r.roesler
Option Explicit
' Hint: This script cannot be executed with WScript.exe, use
' CScript.exe at the command line as host instead. Example:
' CScript.exe <Path>\ShowDrives.vbs
' For the base class' description (*Win32_DiskDrive*) look at:
' <http://msdn.microsoft.com/en-us/library/aa394132(VS.85).aspx>
' For further examples look beneath:
' *WMI Tasks: Disks and File Systems*
' <http://msdn.microsoft.com/en-us/library/aa394592(VS.85).aspx>
' To the used data media sizes see: <http://xkcd.com/394/> :-)

Const ASSOC = "ASSOCIATORS OF {", ASS_CLASS = "} WHERE AssocClass = "
Const BT = " Byte", MIB = " MiB", GiB = " GiB", GB = " GB"
Const WINMGMTS = "winmgmts:{impersonationLevel=impersonate}!root\cimv2"
Dim arr, wmi, wmiDrv, i, str, y, TAB, Echo

Set Echo = WScript.StdOut
TAB = " "
str = vbCRLF & "In Windows the sizes of data media are counted in " & _
"powers to the base of 2." & vbCRLF & vbCRLF & "Note: The " & _
"based unit for 'KiB' used in this script is being equivalent" & _
" to" & vbCRLF & " the tenth power of 2 or " & 2^10 & _
" Bytes. Accordingly, that applies to all" & vbCRLF & " " & _
"other quantity units in Byte, if not specified else."
Echo.WriteLine str
arr = Array("Unknown", "Other", "Sequential Access", "Random Access", _
"Supports Writing", "Encryption", "Compression", _
"Supports Removable Media", "Manual Cleaning", _
"Automatic Cleaning", "SMART Notification", _
"Supports Dual-Sided Media", "Ejection Prior to Drive " & _
"Dismount Not Required")

Set wmi = GetObject(WINMGMTS)

For Each wmiDrv In wmi.InstancesOf("Win32_DiskDrive")
With wmiDrv
Echo.WriteLine vbCRLF & Div(72, "+", .Caption & " (" & _
.DeviceID & ")") & vbCRLF
Echo.WriteLine "Index: " & .Index
Echo.WriteLine "Interface Type: " & .InterfaceType

Echo.WriteLine "Status: " & .Status
If IsNull(.Size) Then
Echo.WriteLine " No Drives Connected."
Else
Echo.WriteLine "Capacity: " & _
Round(CDbl(.Size) / 2^30, 3) & GiB
Echo.WriteLine "To the decimal base: " & _
Round(CDbl(.Size) / 10^9, 3) & GB
Echo.WriteLine "Bytes Per Sector: " & .BytesPerSector & BT
Echo.WriteLine "Total Sectors: " & CDbl(.TotalSectors)
Echo.WriteLine "Total Cylinders: " & CDbl(.TotalCylinders)
Echo.WriteLine "Total Heads: " & .TotalHeads
Echo.WriteLine "Total Tracks: " & CDbl(.TotalTracks)
Echo.WriteLine "Sectors Per Track: " & .SectorsPerTrack
Echo.WriteLine "Tracks Per Cylinder: " & .TracksPerCylinder
For i = 0 To Ubound(.Capabilities)
y = 21
If i = 0 Then Echo.Write "Capabilities:": y = 8
Echo.WriteLine Space(y) & arr(.Capabilities(i))
Next
Echo.WriteLine "Manufacturer: " & .Manufacturer
Echo.WriteLine "Media Type: " & .MediaType
Echo.WriteLine "Num Logical Drives: " & .Partitions
Echo.WriteLine "Signature: " & Hex(.Signature)
End If
If Not(IsNull(.SCSILogicalUnit)) Then
Echo.WriteLine vbCRLF & "SCSI Bus: " & .SCSIBus
Echo.WriteLine "SCSI Logical Unit: " & .SCSILogicalUnit
Echo.WriteLine "SCSI TargetId: " & .SCSITargetId
Echo.WriteLine "SCSI Port: " & .SCSIPort
End If
Call PartiFromDrive(Replace(.DeviceID, "\", "\\"))
End With
Next

Sub PartiFromDrive(strDID) ' Antecedent: Win32_DiskDrive
Dim wmiPart, dblBig, isAligned ' Dependent: Win32_DiskPartition

For Each wmiPart In wmi.ExecQuery(ASSOC & "Win32_DiskDrive." & _
"DeviceID=""" & strDID & """" & ASS_CLASS & _
"Win32_DiskDriveToDiskPartition")
With wmiPart
Echo.WriteLine vbCRLF & Space(4) & Div(68,"-", .DeviceID)
Echo.WriteLine vbCRLF & TAB & TAB & "Type: " & .Type
Echo.WriteLine vbCRLF & TAB & TAB & "Capacity: " & _
FormatNumber(CDbl(.Size) / 2^20, 2) & MiB
dblBig = CDbl(.StartingOffset)
isAligned = (dblBig / 4096 - Fix(dblBig / 4096)) = 0
Echo.WriteLine vbCRLF & TAB & TAB & "4KAligned: " & _
isAligned & vbCRLF
If .PrimaryPartition Then
Echo.WriteLine TAB & TAB & "This is a primary partition."
End If
If .Bootable Then
Echo.WriteLine TAB & TAB & "Computer can be booted" & _
" from this partition."
End If
If .BootPartition Then
Echo.WriteLine TAB & TAB & "OS is using " & _
"this active partition for boot."
End If
Call PartiFromLogicDisk(.DeviceID)
End With
Next
End Sub

Sub PartiFromLogicDisk(strDID) ' Antecedent: Win32_DiskPartition
Dim wmiLogs, wmiLog, TAB, str ' Dependent: Win32_LogicalDisk

TAB = " "
Set wmiLogs = wmi.ExecQuery(ASSOC & "Win32_DiskPartition." & _
"DeviceID=""" & strDID & """" & _
ASS_CLASS & "Win32_LogicalDiskToPartition")
Echo.WriteLine vbCRLF & Space(8) & Div(64, "~", "Logical Drives")
For Each wmiLog In wmiLogs
With wmiLog
str = "File system is not ready."
If Not(IsNull(.Size)) Then
str = Round(CDbl(.Size) / 2^20, 2) & MiB
End If
Echo.WriteLine vbCRLF & TAB & TAB & .DeviceID & TAB & _
" " & .VolumeName
If .VolumeDirty Then
Echo.WriteLine TAB & TAB & "*** Lets exec a ChkDsk-Run! ***"
End If
Echo.WriteLine TAB & TAB & "Filesystem: " & .FileSystem
Echo.WriteLine TAB & TAB & "Tot. Space: " & str
Echo.WriteLine TAB & TAB & "Free Space: " & _
Round(CDbl(.FreeSpace) / 2^20, 2) & MiB
Echo.WriteLine
End With
Next
End Sub

Function Div(lngLen, strChar, strIns)
Dim str

str = String(lngLen, strChar) & vbCRLF & strIns
If Len(strIns) + 2 < lngLen Then
strIns = " " & strIns & " "
str = String((lngLen - Len(strIns)) \ 2, strChar) & strIns
str = str & String(lngLen - Len(str), strChar)
End If

Div = str
End Function
'########################## ShowDrives.vbs ############################
--
ЯR
Manfred Bathen
2013-03-30 12:55:21 UTC
Permalink
Post by Ruediger Roesler
Ich habe mal ein Skript etwas überarbeitet, dieses zeigt für alle
Partitionen die Ausrichtung an, falls es noch pressiert. Das Skript, das
unter
Leider zeigt es auf einem Rechner nur die HHD an, aber nicht die SSDs,
die an einem Marvell Kontroller hängen. Was mache ich falsch?
--
Manni
Heinz Chrudina
2013-03-30 13:53:59 UTC
Permalink
Post by Manfred Bathen
Post by Ruediger Roesler
Ich habe mal ein Skript etwas überarbeitet, dieses zeigt für alle
Partitionen die Ausrichtung an, falls es noch pressiert. Das Skript, das
unter
Leider zeigt es auf einem Rechner nur die HHD an, aber nicht die SSDs,
die an einem Marvell Kontroller hängen. Was mache ich falsch?
Schon mal Crystal Diskinfo getestet?

Heinz
--
Bloß weil du nicht paranoid bist, heißt das noch lange nicht,
dass sie nicht hinter dir her sind (Robert Anton Wilson)
Heinz Chrudina
2013-03-30 13:55:39 UTC
Permalink
Post by Heinz Chrudina
Schon mal Crystal Diskinfo getestet?
Quatsch, ich meite AS SSD Benchmark, der zeigt im Startfenster an, ob
das Alignment korrekt ist (grüne Schrift, satt sonast rot):
http://www.systemshock.org/index.php?topic=4669.msg54257#msg54257

Heinz
--
Neulich bei werweisswas:
Jetzt habe einen Dämmerungskit in meiner Gehäuse eingebaut.
Heinz Chrudina
2013-03-30 13:57:24 UTC
Permalink
Post by Heinz Chrudina
http://www.systemshock.org/index.php?topic=4669.msg54257#msg54257
Irgendwie will meine Maus nicht so recht ;-)
Dann ahlt Strg + C.
http://www.alex-is.de/PHP/fusion/downloads.php
--
Neulich bei werweisswas:
Jetzt habe einen Dämmerungskit in meiner Gehäuse eingebaut.
Manfred Bathen
2013-03-30 14:19:36 UTC
Permalink
Post by Heinz Chrudina
Post by Heinz Chrudina
http://www.systemshock.org/index.php?topic=4669.msg54257#msg54257
Irgendwie will meine Maus nicht so recht ;-)
Mein mäuschen auch nicht immer ;-)
Ich wollte eigentlich Rösler ne Chance geben. Ich nutze einige seiner
Scripte. Find sein Engagement gut.
--
Manni
Ruediger Roesler
2013-03-30 17:31:29 UTC
Permalink
Post by Manfred Bathen
Post by Ruediger Roesler
Ich habe mal ein Skript etwas überarbeitet, dieses zeigt für alle
Partitionen die Ausrichtung an, falls es noch pressiert. Das Skript,
das unter
Leider zeigt es auf einem Rechner nur die HHD an, aber nicht die SSDs,
die an einem Marvell Kontroller hängen. Was mache ich falsch?
Es liegt vermutlich daran, weil der Treiber des Controllers sich nicht
vorschriftsmäßig in der Geräteverwaltung von Windows anmeldet. Da mir
WIMRE noch kein Marvell in freier Wildbahn begegnet ist, kann ich
darüber leider keine weitere Auskunft geben. Soweit ich das ermitteln
konnte, stehen diese proprietären Treiber in einigen Fällen im
Geräte-Manager unter der Rubrik 'Andere Geräte'.
--
ЯR
Manfred Bathen
2013-03-30 19:32:56 UTC
Permalink
Post by Manfred Bathen
Post by Ruediger Roesler
Ich habe mal ein Skript etwas überarbeitet, dieses zeigt für alle
Partitionen die Ausrichtung an, falls es noch pressiert. Das Skript,
das unter
Leider zeigt es auf einem Rechner nur die HHD an, aber nicht die SSDs,
die an einem Marvell Kontroller hängen. Was mache ich falsch?
Auskunft geben. Soweit ich das ermitteln konnte, stehen diese
proprietären Treiber in einigen Fällen im Geräte-Manager unter
der Rubrik 'Andere Geräte'.
Der Marvelltreiber steht unter "Speicherkontroller". Ich habe noch mal
nachgehört. Es handelt sich um eine PCIe Karte, MSI USB 3.0 & Sata 6Gb/s
combo card.
Bitte vergessen.
--
Manni
Loading...