Je crée d'abord une partition correctement alignée dans une nouvelle table GPT à l'aide de parted en spécifiant des pourcentages pour le début et la fin de la partition:
# 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
Notez que ce disque utilise le format avancé, mais rapporte correctement la taille du secteur physique 4096B
à Parted. Examinons-le à nouveau, en utilisant les secteurs comme unité:
# 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
- Pourquoi a-t-il démarré la partition
2048s
et non34s
quel est le premier secteur possible ? 34s
n'est pas un secteur de départ correctement aligné si la taille du secteur physique est4096B
et la taille du secteur logique (qui est celle que vous spécifiez dans Parted) est512B
. Un secteur de départ correctement aligné est divisible par8
(puisque la taille du secteur physique / la taille du secteur logique =8
). Mais cela signifie que40s
c'est le premier secteur de départ correctement aligné, mais il n'est pas utilisé. Pourquoi?
Si nous essayons de créer une partition de 100MiB
capacité correctement alignée à partir 40s
d'une nouvelle table de partition GPT:
# 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)
- Nous recevons toujours l'
Warning: The resulting partition is not properly aligned for best performance.
avertissement, même si les40s
204840 (204839s
+ 1) sont tous les deux divisibles par8
. Pourquoi?
la source
optimal_io_size
indice. Par conséquent, il n'y a aucun moyen de faire la distinction entre les périphériques ATA «hérités» qui ne fournissent pasalignment_offset
et paralignment_offset
défaut à 0 et ceux qui en ontalignment_offset=0
. fdisk / parted utilise un alignement de partition de 1 Mo pour ces disques.J'ajouterai probablement que sous Linux, on peut arriver dans une situation où il est
parted
possible de ne jamais réussir un contrôle d'alignement optimal et minimal en même temps.La raison en est que
parted
(au moins à partir de la version 3.2) s'appuie surlibblkid
, qui à son tour rapporte les valeurs de/sys/block/<disk>/queue/minimum_io_size
et/sys/block/<disk>/queue/optimal_io_size
(voir io-limits.txt ).Ainsi, alors que pour un disque au format avancé, le premier sera probablement quelque chose comme 4k, le second peut avoir une valeur folle - par exemple
65535 * 512 == 33553920
.Maintenant, si nous regardons le code source - l'alignement "correct" ou "meilleures performances" est défini par la formule dans parted.c :: partition_align_check () :
d'où
grain_size
vient la taille du bloc d'E / S ci-dessus,geom.start
est notre décalage de partition, et le décalage d'alignementpa->offset
est assez souvent nul.Par défaut, parted supposerait que 1 MiB soit optimal et ~ 4k la taille minimale (pas tout à fait, c'est un peu une simplification) de la taille du bloc, donc ces valeurs seraient corrélées; cependant, s'il en
libblkid
décide autrement, il aparted
tendance à lui faire confiance et à remplacer cette valeur par défaut de 1 Mio par la valeur trouvée dans/sys/block/<disk>/queue/optimal_io_size
. (En même temps, vous/sys/block/<disk>/queue/minimum_io_size
obtiendrez probablement le même 4096 B.)Dans ce cas, le contrôle optimal séparé ne passera jamais simultanément avec le contrôle minimal , ce qui pourrait être un peu déroutant.
Dans cet esprit - en cas de doute, jetez un œil à
queue/optimal_io_size
etqueue/minimum_io_size
, si le premier n'est pas divisible par le second, ignorez simplement l'avertissement séparé et décidez vous-même si vous voulez opter pour un contrôle optimal ou minimal. .la source