Alinhamento adequado de partições em um HDD de formato avançado usando o Parted

15

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 4096Bpara 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 2048se não 34squal é o primeiro setor possível ?
  • 34snão é um setor inicial alinhado corretamente se o tamanho do setor físico for 4096Be o tamanho do setor lógico (que você especificar em Parted) for 512B. Um setor inicial alinhado corretamente é um divisível por 8(desde o tamanho do setor físico / tamanho do setor lógico = 8). Mas isso significa que 40sé o primeiro setor inicial alinhado corretamente, mas não é usado. Por quê?

Se tentarmos criar uma partição de 100MiBcapacidade alinhada corretamente, iniciando 40sem 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, embora 40s204840s ( 204839s+ 1) sejam divisíveis por 8. Por quê?
Excluído
fonte

Respostas:

23

Separar-se é apenas ser excessivamente conservador. A prática usual atualmente é alinhar partições nos limites de 1MiB (2048 setores), porque isso funciona em discos de formato avançado, em certos tipos de configurações de RAID que exigem alinhamento e na maioria dos SSDs. Para um disco de formato avançado, desde que o alinhamento seja múltiplo de 8, você está bem e 2048 é múltiplo de 8. O espaço em disco perdido é insignificante - 0,0000336% do seu espaço total em disco, se eu fizesse isso. a matemática certa e não digitou nada errado. Então não se preocupe com isso; basta usar o alinhamento 1MiB.

Rod Smith
fonte
Sim, o espaço em disco perdido não importa para mim. Eu só queria saber que entendi as coisas corretamente. Estou verificando o código-fonte do Parted no momento, mas demora um pouco mais do que tenho tempo. Então, eu vou em frente e uso o alinhamento de 1MiB. Obrigado por ajudar mais uma vez!
Excluído
11
Vale ressaltar que isso não é meramente conservador, mas é uma limitação da camada de blocos do Linux. As unidades ATA não fornecem optimal_io_sizedicas. Portanto, não há como distinguir entre dispositivos ATA "legados" que não fornecem alignment_offsete alignment_offsetpadronizam como 0 e os que possuem alignment_offset=0. O fdisk / parted usa alinhamento de partição de 1 MB para essas unidades.
Roolebo 16/07/19
11
E o próprio número - o alinhamento da partição de 1 MB parece vir do comportamento do Windows Vista , conforme referenciado no commit dividido .
Roolebo 16/07/19
1

Devo acrescentar que, no Linux, pode-se chegar a uma situação em partedque 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) depende libblkid, que por sua vez reporta valores de /sys/block/<disk>/queue/minimum_io_sizee /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 () :

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

de onde grain_sizevem o tamanho do bloco de E / S acima, geom.starté o deslocamento da nossa partição e o deslocamento do alinhamento pa->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 libblkiddecida em contrário, partedtende 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_sizeprovavelmente 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_sizee queue/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