Criar partição alinhada usando parted

68

Estou particionando um disco rígido não SSD com parted porque eu quero uma tabela de partição GPT.

parted /dev/sda mklabel gpt

Agora, estou tentando criar as partições alinhadas corretamente, então uso o seguinte comando para saber onde o primeiro setor começa:

parted /dev/sda unit s p free

Disk /dev/sda: 488397168s
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start  End         Size        File system  Name      Flags
        34s    488397134s  488397101s  Free Space

Podemos ver que ele começa no setor 34 (esse é o padrão quando essa tabela de partição é usada).

Então, para criar a primeira partição, tentei:

parted /dev/sda mkpart primary 63s 127s

para alinhá-lo no setor 64, pois é um múltiplo de 8, mas mostra:

Aviso: A partição resultante não está alinhada corretamente para obter o melhor desempenho.

Os tamanhos do setor lógico e físico do meu disco rígido são de 512 bytes:

cat /sys/block/sda/queue/physical_block_size
512

cat /sys/block/sda/queue/logical_block_size 
512

Como crio partições alinhadas corretamente? O que estou fazendo errado?

Marc
fonte
Tem certeza de que os números do setor começam em zero?
Burton Samograd
11
Eu tentei também parted /dev/sda mkpart primary 64s 128s(no caso de começar em 1), mas ele retorna o mesmo aviso.
Marc
Parece que há um comando para verificar se um valor está alinhado: gnu.org/software/parted/manual/html_node/align_002dcheck.html . Talvez tente isso com vários valores usando um loop for e cuspa os valores que estão ok?
Burton Samograd
Burton, eu não sabia sobre esse comando, mas ele não pode ser usado até ter uma partição.
Marc
Desculpe por isso, não li a descrição com atenção suficiente.
Burton Samograd

Respostas:

68

Para alinhar a partição, partedvocê pode usar a --alignopção Os tipos de alinhamento válidos são:

  • nenhum - use o alinhamento mínimo permitido pelo tipo de disco.
  • cilindro - Alinha partições aos cilindros.
  • minimal - Use o alinhamento mínimo, conforme fornecido pelas informações de topologia do disco. Esse valor e o opt usarão as informações de layout fornecidas pelo disco para alinhar os endereços da tabela de partição lógica aos blocos físicos reais nos discos. O valor mínimo é o alinhamento mínimo necessário para alinhar a partição corretamente aos blocos físicos, o que evita a degradação do desempenho.
  • ideal Use o alinhamento ideal, conforme fornecido pelas informações de topologia do disco. Isso se alinha a um múltiplo do tamanho do bloco físico, de maneira a garantir o desempenho ideal.

Outra dica útil é que você pode definir o tamanho com porcentagens para alinhar. Comece em 0% e termine em 100%. Por exemplo:

parted -a optimal /dev/sda mkpart primary 0% 4096MB

lik
fonte
5
O comando não deve terminar 0% 100%? De onde 4096MBvem?
N
4
O valor 4096MB é usado aqui apenas um exemplo para mostrar a capacidade de misturar% e números de tamanhos específicos
semelhante a
3
Apenas uma observação, eu tive que colocar as '0%'aspas no meu shell para executar o comando corretamente.
Adam Eberlin
@lik você tem sugestão para este post unix.stackexchange.com/questions/248939/...
AnkurTank
11
Nevermind o acima, eu só notei o separaram printusa kB como 1000 bytes ...
jiggunjer
9

Minha solução foi usar o gdisk, que pode executar o alinhamento de partições automaticamente em 2048 setores (1024 KB) por padrão, embora possa ser alterado no menu de especialistas.

Marc
fonte
7

No Arch Wiki :

Ao criar uma partição, o parted pode avisar sobre o alinhamento inadequado da partição, mas não sugere o alinhamento adequado. Por exemplo:

(parted) mkpart primary fat16 0 32M
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel?                                                     

O aviso significa que a partição startnão está alinhada.

Digite Ignorepara prosseguir de qualquer maneira , imprima a tabela de partição em setores para ver onde é iniciada e remova / recrie a partição com o setor inicial arredondado para aumentar as potências de 2 até o aviso parar. Como exemplo, em uma unidade flash com setores de 512B, a Parted queria que as partições iniciassem em setores com um múltiplo de 2048, que é um alinhamento de 1 MB.

Além disso, logo acima desta seção, eles afirmam que as unidades binárias IEC mais precisas de KiB, MiB, GiB etc. são aceitáveis ​​para unidades e também KB, MB, GB, etc.

Pessoalmente, meu comando exato que resolveu isso foi:

mkpart hd ext4 1024KiB 8470MB

Não reclamou, acho que queria alinhamentos de 1 MB.

Travis Rodman
fonte
Não, eu tentei 1048576KiB, sem dados.
Behrooz 15/03
5

Uma pequena correção. Pelo que entendi, os discos GPT não têm mais tipos de partição, são todos "primários". O comando 'mkpart primary' não cria uma partição primária como nos discos do msdos, apenas cria uma partição chamada primária. Você também pode usar o comando

(parted) mkpart Parted-FUN! 21476MB 4000787MB
(parted) print
Model: ATA ST4000DM000-1F21 (scsi)
Disk /dev/sdf: 4000787MB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start    End        Size       File system  Name         Flags
 1      1.05MB   17181MB    17180MB    ext4         raid-var
 2      17181MB  21476MB    4295MB                  raid-swap
 3      21476MB  4000786MB  3979310MB               Parted-FUN!

Isso pode causar confusão se você tentar criar partições lógicas, eu sei que isso aconteceu comigo.

(parted) mkpart extended 21476MB 4000787MB
(parted) mkpart logical 21476MB 1000787MB
Warning: You requested a partition from 21476MB to 1000787MB.
The closest location we can manage is 4000786MB to 4000786MB.
Is this still acceptable to you?
Yes/No? Yes
(parted) print
Model: ATA ST4000DM000-1F21 (scsi)
Disk /dev/sdf: 4000787MB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start      End        Size       File system  Name       Flags
 1      1.05MB     17181MB    17180MB    ext4         raid-var
 2      17181MB    21476MB    4295MB                  raid-swap
 3      21476MB    4000786MB  3979310MB               extended
 4      4000786MB  4000786MB  0.00MB                  logical

Você não pode criar uma partição chamada "lógica" dentro de uma partição chamada "estendida".

Miksa
fonte
obrigado, eu perdi um pouco de tempo graças a essas ferramentas bad cli, e você me fez descobrir o que está acontecendo.
Florian Heigl
5

A resposta aceita por @lik mostra como você pode especificar o alinhamento preferido. No entanto, parted sempre usa esse alinhamento para verificar a partição resultante, mas nem sempre cria partições com esse alinhamento.

TL; DR: Quando 1MiB é o alinhamento ideal, especificar 0% funcionará para discos de 200MiB e maiores. Para discos menores ou alinhamento maior, a especificação de 0G pode funcionar onde 0% não. Veja abaixo o porquê.

O Parted tenta satisfazer as restrições de alinhamento ao criar uma partição, mas também não se desvia muito dos valores solicitados. O que conta como "demais" depende de como você especificou as posições.

Quando você especifica uma posição inicial (ou final) para o comando mkpart, ele gera internamente um intervalo de valores aceitáveis. Esse intervalo é centrado no valor que você especificar e se estende igualmente em ambos os lados pela metade do tamanho da unidade que você usou (é o que eu li no código , os comentários dizem um tamanho de unidade completo nas duas extremidades).

Por exemplo, quando você especifica "10M", ele tenta usar qualquer posição entre 9,5M e 10,5M. O mesmo vale para porcentagens, portanto, se você especificar 0%, ele usará qualquer valor entre 0% e 0,5% (não fica negativo, obviamente).

Uma exceção é que, ao usar a potência de duas unidades (como KiB para 1024, em vez de K para 1000), partimos pressupõe que você esteja tentando especificar uma posição exata e considere apenas o valor exato especificado.

Como o alinhamento ideal normalmente parece estar 1MiB, as unidades K e M geralmente não têm espaço suficiente para alcançar o alinhamento ideal. A especificação de posições em G deve ter espaço suficiente, mas% também costuma ser bom.

Portanto, é por isso que 0% geralmente funciona, embora até isso tenha limites.

Matthijs Kooijman
fonte
Você poderia resumir um TLDR prático de sua resposta: o que exatamente deveria ser melhor feito de uma maneira diferente em comparação com a resposta aceita?
yurkennis 30/01
Boa sugestão, eu adicionei um TL; DR. Na prática, acho que os 0% funcionarão para todos os discos, exceto os realmente pequenos, mas minha resposta adiciona um pouco de como funciona exatamente.
Matthijs Kooijman