Usando o sfdisk
Os programas
Me concentrarei no
Esta é mais simples:
Os campos são separados por espaços, vírgulas ou ponto e vírgulas (uso vírgulas). Ao ser omitido, o programa adota um valor padrão para cada campo:
Ao criar mais de uma partição, cada uma é representada por uma linha. Exemplo:
Primeira linha:
- início: vazio (nada antes da vírgula), corresponde ao primeiro setor disponível, que, num disco limpo, considerando o alinhamento, equivale ao setor 2048.
- tamanho: 50 GiB (pode ser arredondado devido ao alinhamento).
- tipo:
- booteável:
Segunda linha:
- início: vazio (nada antes da vírgula), corresponde ao primeiro setor após a partição anterior de 50 GiB (pode ser arredondado devido ao alinhamento).
- tamanho: vazio (nada entre as vírgulas), máximo disponível.
- tipo:
- booteável: vazio (desabilitado).
Especificar tipo
MBR e GPT
Tipo de particionamento é especificado através da opção
Voltando ao exemplo, podemos simplesmente enviar as linhas via STDIN:
(
Colisões
Como discutido em Assinaturas, temos opções para evitar colisões de assinaturas:
Para passar o rodo num disco já particionado e recomeçar do zero:
Cria novo rótulo (nova tabela de partições), apagando todas eventuais assinaturas presentes.
Ambas passaram a funcionar sem bugs a partir da versão 2.30 da suíte util-linux.
udev
Ao usar
Existe uma API que suprime o processamento de uevents enquanto uma trava exclusiva for mantida no dispositivo.
A invocação de
A partir da versão 2.36, há a opção
Por fim, chamamos
Relacionado:
Opção --lock das ferramentas da suíte util-linux
cfdisk, fdisk e sfdisk, da suíte util-linux, voltaram a ser desenvolvidos de uns anos para cá. São particionadores modernos, que levam em conta a topologia do disco ao alinhar as partições e suportam GPT.Me concentrarei no
sfdisk, a ferramenta scriptável. Existem duas formas de fornecer-lhe entrada.Esta é mais simples:
início tamanho tipo booteável
Os campos são separados por espaços, vírgulas ou ponto e vírgulas (uso vírgulas). Ao ser omitido, o programa adota um valor padrão para cada campo:
início: primeiro setor livre
tamanho: máximo disponível
tipo: partição Linux, 0x83 (MBR/MS-DOS), 0FC63DAF-8483-4772-8E79-3D69D8477DE4 (GPT)
(ver sfdisk(8) para outros tipos)
booteável: desabilitado (MBR/MS-DOS apenas)
Ao criar mais de uma partição, cada uma é representada por uma linha. Exemplo:
,50G,L,* ,,L
Primeira linha:
- início: vazio (nada antes da vírgula), corresponde ao primeiro setor disponível, que, num disco limpo, considerando o alinhamento, equivale ao setor 2048.
- tamanho: 50 GiB (pode ser arredondado devido ao alinhamento).
- tipo:
L é um atalho para partição Linux.- booteável:
* significa habilitado (vazio ou - significa desabilitado).Segunda linha:
- início: vazio (nada antes da vírgula), corresponde ao primeiro setor após a partição anterior de 50 GiB (pode ser arredondado devido ao alinhamento).
- tamanho: vazio (nada entre as vírgulas), máximo disponível.
- tipo:
L é um atalho para partição Linux.- booteável: vazio (desabilitado).
Especificar tipo
L é opcional, visto que é o padrão. Contudo, coloco mesmo assim para ajudar na organização.MBR e GPT
Tipo de particionamento é especificado através da opção
--label, cujos valores possíveis são dos, gpt, sun e sgi (os dois últimos não têm utilidade em PCs).Voltando ao exemplo, podemos simplesmente enviar as linhas via STDIN:
# echo -e ',50G,L,*\n,,L' | sfdisk --label=dos /dev/sdx # echo -e ',512M,U\n,,L' | sfdisk --label=gpt /dev/sdx
(
U é EFI System Partition)Colisões
Como discutido em Assinaturas, temos opções para evitar colisões de assinaturas:
--wipe para o disco inteiro e --wipe-partitions para partições.Para passar o rodo num disco já particionado e recomeçar do zero:
# echo -e ',50G,L,*\n,,L' | sfdisk --wipe=always --wipe-partitions=always --label=dos /dev/sdx
Cria novo rótulo (nova tabela de partições), apagando todas eventuais assinaturas presentes.
Ambas passaram a funcionar sem bugs a partir da versão 2.30 da suíte util-linux.
udev
Ao usar
--wipe=always, existe uma grande probabilidade do udevd interferir no processo. O sfdisk apaga a assinatura de disco existente antes de continuar. Isso gera um uevent — o disco deixou de ser particionado momentaneamente —, que dispara processamento do udevd, com finalidade de atualizar suas propriedades. O sfdisk pode falhar em informar ao kernel quando o novo particionamento for completado se o udevd ainda estiver mantendo o dispositivo aberto.Existe uma API que suprime o processamento de uevents enquanto uma trava exclusiva for mantida no dispositivo.
# echo -e ',50G,L,*\n,,L' | flock /dev/sdx sfdisk --wipe=always --wipe-partitions=always --label=dos /dev/sdx # udevadm settle
A invocação de
flock garante que o comando não falhará. Caso o udevd esteja trabalhando no dispositivo, flock aguarda. E, quando sfdisk finaliza, a trava é removida e o processamento de uevents recomeça.A partir da versão 2.36, há a opção
--lock=yes que torna flock desnecessário.Por fim, chamamos
udevadm settle depois do particionamento. Assim, garantimos que a fila de eventos do udevd estará vazia quando passarmos para os próximos comandos do script. Os dispositivos das partições (/dev/sdx1, /dev/sdx2, etc) estarão prontos, livres de quaisquer assinaturas anteriores, para serem formatados com seu sistema de arquivos preferido.Relacionado:
Opção --lock das ferramentas da suíte util-linux
Comentários
Postar um comentário