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