Ordnungsgemäße Ausrichtung von Partitionen auf einer Advanced Format-Festplatte mit Parted

15

Zuerst erstelle ich eine korrekt ausgerichtete Partition in einer neuen GPT-Tabelle, indem ich die Prozentsätze für Start und Ende der Partition teile:

# parted -a optimal /dev/sdb
GNU Parted 2.3
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mktable gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Y
(parted) mkpart primary 0% 1%
(parted) p
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdb: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  2097kB  1049kB               primary

(parted) quit

Beachten Sie, dass dieser Datenträger das erweiterte Format verwendet, die Größe des physischen Sektors jedoch korrekt 4096Ban Parted meldet . Schauen wir uns das noch einmal an und verwenden Sektoren als Einheit:

# parted -a optimal /dev/sdb
GNU Parted 2.3
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit s
(parted) p
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdb: 5860533168s
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start  End    Size   File system  Name     Flags
 1      2048s  4095s  2048s               primary

(parted) quit
  • Warum hat es die Partition gestartet 2048sund nicht 34sden ersten möglichen Sektor ?
  • 34sist kein korrekt ausgerichteter Startsektor, wenn die physische Sektorgröße 4096Bund die logische Sektorgröße (die Sie in Parted angegeben haben) gleich sind 512B. Ein korrekt ausgerichteter Startsektor ist durch 8(da physische Sektorgröße / logische Sektorgröße = 8) teilbar . Dies bedeutet 40sjedoch, dass es sich um den ersten ordnungsgemäß ausgerichteten Startsektor handelt, der jedoch nicht verwendet wird. Warum?

Wenn wir versuchen, eine korrekt ausgerichtete 100MiBKapazitätspartition zu erstellen, beginnend mit 40sin einer neuen GPT-Partitionstabelle:

# parted -a optimal /dev/sdb
GNU Parted 2.3
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Y
(parted) mkpart primary 40s 204839s
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? I
(parted) unit MiB
(parted) p
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdb: 2861588MiB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start    End     Size    File system  Name     Flags
 1      0.02MiB  100MiB  100MiB  fat32        primary

(parted)
(parted) unit s
(parted) p
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdb: 5860533168s
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start  End      Size     File system  Name     Flags
 1      40s    204839s  204800s  fat32        primary

(parted)
  • Wir bekommen immer noch die Warning: The resulting partition is not properly aligned for best performance.Warnung, obwohl 40sund 204840s ( 204839s+ 1) beide durch teilbar sind 8. Warum?
Gelöscht
quelle

Antworten:

23

Parted ist einfach zu konservativ. Heutzutage ist es üblich, Partitionen an Grenzen von 1 MB (2048 Sektoren) auszurichten, da dies auf Advanced Format-Datenträgern, auf bestimmten Arten von RAID-Setups, die eine Ausrichtung erfordern, und auf den meisten SSDs funktioniert. Solange sich die Ausrichtung auf einem Vielfachen von 8 befindet, sind Sie in Ordnung und 2048 ist ein Vielfaches von 8. Der verlorene Speicherplatz ist mager - 0,0000336% Ihres gesamten Speicherplatzes, wenn ich das getan habe die Mathematik stimmt und hat nichts falsch geschrieben. Also mach dir keine Sorgen; Verwenden Sie einfach die 1MiB-Ausrichtung.

Rod Smith
quelle
Ja, der verlorene Speicherplatz ist mir egal. Ich wollte nur wissen, dass ich die Dinge richtig verstanden habe. Ich überprüfe momentan Parteds Quellcode, aber es dauert etwas länger als ich Zeit habe. Also benutze ich einfach 1MiB-Alignment. Danke, dass du uns noch einmal geholfen hast!
Gelöscht
1
Es ist erwähnenswert, dass dies nicht nur die Konservativität von Parted ist, sondern vielmehr eine Einschränkung der Linux-Blockschicht. ATA-Laufwerke geben keinen optimal_io_sizeHinweis. Daher gibt es keine Möglichkeit, zwischen "älteren" ATA-Geräten, die keine alignment_offsetund alignment_offsetstandardmäßig 0 bieten, und solchen, die keine bieten, zu unterscheiden alignment_offset=0. fdisk / parted verwendet für solche Laufwerke eine Partitionsausrichtung von 1 MB .
Roolebo
1
Und die Zahl selbst - 1 MB Partitionsausrichtung scheint auf das Verhalten von Windows Vista zurückzuführen zu sein , auf das im parted commit verwiesen wird .
Roolebo
1

Ich werde wahrscheinlich hinzufügen, dass man unter Linux in eine Situation geraten kann, in der partedmöglicherweise nie gleichzeitig eine optimale und eine minimale Ausrichtungsprüfung bestanden wird.

Der Grund dafür ist, dass parted(zumindest ab Version 3.2) darauf zurückgegriffen wird libblkid, was wiederum Werte aus /sys/block/<disk>/queue/minimum_io_sizeund meldet /sys/block/<disk>/queue/optimal_io_size(siehe io-limits.txt ).

Während für eine Advanced Format-Festplatte die erste wahrscheinlich etwa 4 KB groß ist, kann die zweite einen verrückten Wert haben - z 65535 * 512 == 33553920.

Betrachten wir nun den Quellcode - "richtige" oder "beste Leistung" Ausrichtung wird durch die Formel in parted.c :: partition_align_check () definiert :

part->geom.start % pa->grain_size == pa->offset, 

Woher grain_sizekommt die obige E / A-Blockgröße, geom.startist unser Partitionsversatz und der Ausrichtungsversatz pa->offsetist ziemlich häufig Null.

Standardmäßig würde parted annehmen, dass 1 MiB ein Optimum ist, und ~ 4k die minimale Blockgröße (nicht ganz so, es ist ein bisschen vereinfachend), sodass diese Werte korrelieren würden. Wenn Sie jedoch libblkidetwas anderes entscheiden, partedneigen Sie dazu, ihm zu vertrauen und den Standardwert von 1 MB durch den Wert in zu ersetzen /sys/block/<disk>/queue/optimal_io_size. (Zur gleichen Zeit /sys/block/<disk>/queue/minimum_io_sizewerden Sie wahrscheinlich die gleichen 4096 B. geben.)

In diesem Fall wird die teilweise optimale Prüfung niemals gleichzeitig mit der minimalen Prüfung bestehen, was möglicherweise etwas verwirrend sein kann.

In diesem Sinne - wenn Sie Zweifel haben, schauen Sie sich queue/optimal_io_sizeund an queue/minimum_io_size, und wenn das erstere nicht durch das letztere teilbar ist, ignorieren Sie einfach die geteilte Warnung und entscheiden Sie selbst, ob Sie mit einer optimalen oder einer minimalen Prüfung beginnen möchten .

ジ ジ ー ー
quelle