Você não precisa escrever uma cópia exata de tudo que foi feito por um script incorreto. Reescrever é uma oportunidade para corrigir a lógica, assim como o código. Comece decifrando o que o código original faz e depois transforme-o em algo sensato.
A resposta à sua pergunta direta é "Não. Você precisará fornecer início e fim por si mesmo". Felizmente, isso não é muito difícil.
O comandoparted
mkpart
recebe um argumento start
e e end
(o valor padrão das unidades é megabytes). Você só precisa especificá-los quando criar as partições. por exemplo. usando um arquivo de imagem de disco:
$ cat partition.sh
#!/bin/sh
truncate -s 1G disk.img # create a 1G disk image file
parted -s disk.img mklabel msdos # create the partition table
# make some partitions
parted -s disk.img mkpart primary 1 100
parted -s disk.img mkpart primary 101 200
parted -s disk.img mkpart primary 201 800
parted -s disk.img mkpart primary 801 1000
parted -s disk.img print
Como alternativa, execute parted
apenas uma vez:
#!bin/sh
truncate -s 1G disk.img # create a 1G disk image file
parted -s disk.img mklabel msdos \
mkpart primary 1 100 \
mkpart primary 101 200 \
mkpart primary 201 800 \
mkpart primary 801 1000 \
print
$ ./partition.sh
Model: (file)
Disk /home/cas/stack-exchange/2018-01-03/pauldsmith/disk.img: 1074MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 99.6MB 98.6MB primary
2 101MB 200MB 99.6MB primary
3 201MB 800MB 599MB primary
4 801MB 1000MB 199MB primary
A parte difícil é calcular os valores exatos de início e fim das suas partições para que elas sejam alinhadas corretamente para o tamanho do setor. A primeira partição é fácil - 1MB se alinha aos setores de 512 bytes e 4K. Qualquer partição que comece com um múltiplo exato de 1MB também será alinhada corretamente (todas as partições criadas no exemplo acima estão alinhadas corretamente).
Você pode usar variáveis shell para qualquer um dos valores iniciais e finais da partição, o que permite usar a aritmética do shell para calculá-los (mas lembre-se que a aritmética do shell é somente inteiro - use bc
ou dc
se precisar fazer cálculos de ponto flutuante ou porcentagem).
BTW, você pode verificar o alinhamento com o comando parted
' align-check
'. por exemplo,
$ parted disk.img align-check optimal 1
WARNING: You are not superuser. Watch out for permissions.
1 aligned
Se align-check
for usado com a opção de modo de script parted
-s
, ele não produzirá nenhuma saída. Em vez disso, sai com status 1 se não estiver alinhado. Caso contrário, continua com o restante do script.
parted
não tem capacidade se / então, portanto, se você quiser automatizar a verificação de alinhamento ea criação de partições, use a primeira versão do script acima para poder inserir um comando check-align
em entre cada mkpart
e responda apropriadamente se o código de saída for diferente de zero.