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 4096B
an 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
2048s
und nicht34s
den ersten möglichen Sektor ? 34s
ist kein korrekt ausgerichteter Startsektor, wenn die physische Sektorgröße4096B
und die logische Sektorgröße (die Sie in Parted angegeben haben) gleich sind512B
. Ein korrekt ausgerichteter Startsektor ist durch8
(da physische Sektorgröße / logische Sektorgröße =8
) teilbar . Dies bedeutet40s
jedoch, dass es sich um den ersten ordnungsgemäß ausgerichteten Startsektor handelt, der jedoch nicht verwendet wird. Warum?
Wenn wir versuchen, eine korrekt ausgerichtete 100MiB
Kapazitätspartition zu erstellen, beginnend mit 40s
in 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, obwohl40s
und 204840s (204839s
+ 1) beide durch teilbar sind8
. Warum?
quelle
optimal_io_size
Hinweis. Daher gibt es keine Möglichkeit, zwischen "älteren" ATA-Geräten, die keinealignment_offset
undalignment_offset
standardmäßig 0 bieten, und solchen, die keine bieten, zu unterscheidenalignment_offset=0
. fdisk / parted verwendet für solche Laufwerke eine Partitionsausrichtung von 1 MB .Ich werde wahrscheinlich hinzufügen, dass man unter Linux in eine Situation geraten kann, in der
parted
mö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 wirdlibblkid
, was wiederum Werte aus/sys/block/<disk>/queue/minimum_io_size
und 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 :
Woher
grain_size
kommt die obige E / A-Blockgröße,geom.start
ist unser Partitionsversatz und der Ausrichtungsversatzpa->offset
ist 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
libblkid
etwas anderes entscheiden,parted
neigen 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_size
werden 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_size
und anqueue/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