Primeiro, crio uma partição alinhada corretamente em uma nova tabela GPT usando parted especificando porcentagens para o início e o final da partição:
# 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
Observe que este disco está usando o formato avançado, mas informa corretamente o tamanho do setor físico 4096B
para Parted. Vejamos novamente, usando setores como a unidade:
# 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
- Por que iniciou a partição
2048s
e não34s
qual é o primeiro setor possível ? 34s
não é um setor inicial alinhado corretamente se o tamanho do setor físico for4096B
e o tamanho do setor lógico (que você especificar em Parted) for512B
. Um setor inicial alinhado corretamente é um divisível por8
(desde o tamanho do setor físico / tamanho do setor lógico =8
). Mas isso significa que40s
é o primeiro setor inicial alinhado corretamente, mas não é usado. Por quê?
Se tentarmos criar uma partição de 100MiB
capacidade alinhada corretamente, iniciando 40s
em uma nova tabela de partição 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)
- Ainda recebemos o
Warning: The resulting partition is not properly aligned for best performance.
aviso, embora40s
204840s (204839s
+ 1) sejam divisíveis por8
. Por quê?
fonte
optimal_io_size
dicas. Portanto, não há como distinguir entre dispositivos ATA "legados" que não fornecemalignment_offset
ealignment_offset
padronizam como 0 e os que possuemalignment_offset=0
. O fdisk / parted usa alinhamento de partição de 1 MB para essas unidades.Devo acrescentar que, no Linux, pode-se chegar a uma situação em
parted
que nunca pode passar por uma verificação ótima e mínima de alinhamento ao mesmo tempo.A razão para isso é que
parted
(pelo menos a partir da versão 3.2) dependelibblkid
, que por sua vez reporta valores de/sys/block/<disk>/queue/minimum_io_size
e/sys/block/<disk>/queue/optimal_io_size
(consulte io-limits.txt ).Assim, enquanto para um disco de formato avançado o primeiro provavelmente é algo como 4k, o último pode ter algum valor insano - por exemplo
65535 * 512 == 33553920
.Agora, se observarmos o código-fonte - o alinhamento "adequado" ou "melhor desempenho" é definido pela fórmula em parted.c :: partition_align_check () :
de onde
grain_size
vem o tamanho do bloco de E / S acima,geom.start
é o deslocamento da nossa partição e o deslocamento do alinhamentopa->offset
é frequentemente zero.Por padrão, parted supõe que 1 MiB seja o ideal e ~ 4k seja o tamanho mínimo (não muito, é uma simplificação) do bloco, para que esses valores se correlacionem; no entanto, se
libblkid
decida em contrário,parted
tende a confiar nele, e substituir esse valor padrão de 1 MiB com o valor encontrado em/sys/block/<disk>/queue/optimal_io_size
. (Ao mesmo tempo,/sys/block/<disk>/queue/minimum_io_size
provavelmente fornecerá o mesmo 4096 B.)Nesse caso, a verificação ótima separada nunca será aprovada simultaneamente com a verificação mínima , o que pode ser um pouco confuso.
Com isso em mente - em caso de dúvida, ter um olhar para
queue/optimal_io_size
equeue/minimum_io_size
, e se o primeiro não é divisível por este aviso, simplesmente ignorá-se separaram', e decidir por si mesmo se você quer ir com um ideal ou um mínimo de verificação .fonte