Bash scripting dividido para GPT

1

Usando o Bash & Scripts Python no Ubuntu 12.04, estamos entregando uma imagem de disco para os clientes como um arquivo (gerado por dd ). Depois de dd 'd para o novo disco, redimensionamos a partição para caber no disco. Agora que estamos usando discos GPT, preciso fornecer um novo script não interativo e não-X.

O problema é que parted gera uma mensagem interativa:

Error: The backup GPT table is not at the end of the disk, as it should be. This might mean that another operating system believes the disk is smaller. Fix, by moving the backup to the end (and removing the old backup)? Fix/Ignore/Cancel?

Mas, usando a opção -s ou -m com o parted, não consigo configurá-lo para redimensionar o disco e corrigir o local da GPT de backup. Eu não consigo repetir um "F" no comando:

echo "F" > parted  /dev/sda resize 2 0% 100%
parted  /dev/sda resize 2 0% 100%
parted -m /dev/sda resize 2 100%
parted -s /dev/sda resize 2 100%

E assim por diante. gdisk e sgdisk parecem não conseguir redimensionar. gparted funciona bem, mas é X claro e não é permitido.

Na CLI, posso silenciar a mensagem interativa executando em backticks:

'parted -s /dev/sda rm 2'  ( succeeded with error)
'parted -s /dev/sda mkpart primary 100%' ( fails because the backup GPT was not moved)

Por isso, preciso do serviço especial "mover o backup do GPT" oferecido na mensagem interativa, que só é oferecido lá, mas preciso executar de forma não interativa.

    
por John P. Fisher 24.04.2015 / 19:04

2 respostas

2

A abordagem de Dru provavelmente funcionará, embora eu não tenha testado. Duas outras abordagens são usar uma combinação de sgdisk e parted ou usar sgdisk de maneira mais complexa. Especificamente, você poderia fazer qualquer um de:

  • Use sgdisk -e para mover os dados da tabela de partições de backup para o final do disco, seguido por parted {device-file} resize... para redimensionar a partição. Usar dois utilitários em vez de um é um pouco deselegante, mas deve funcionar.
  • Use sgdisk -e {device-file} para mover os dados da tabela de partição de backup para o final do disco, seguido por sgdisk -d... para excluir a partição e, em seguida, sgdisk -n... para criar uma nova partição em seu lugar. Você provavelmente pode combiná-los em apenas dois ou talvez apenas uma chamada para sgdisk . Uma ressalva é que essa abordagem alterará o valor do GUID para a partição. Se for importante que permaneça o mesmo, você precisará extrair esses dados e redefinir o valor do GUID - ou, considerando que está começando a partir de uma imagem conhecida, você pode armazenar o valor do GUID como parte do script e redefini-lo sem primeiro extraí-lo.

Note que eu não testei nenhuma dessas abordagens, então não posso garantir a elas mais do que posso garantir o método de Dru.

    
por 25.04.2015 / 22:20
2

Você pode executar um script expect do script Bash parted para responder à pergunta.

#!/usr/bin/expect
eval spawn parted  /dev/sda resize 2 0% 100%
expect "Error: The backup GPT table is not at the end of the disk, as it should be. This might mean that another operating system believes the disk is smaller. Fix, by moving the backup to the end (and removing the old backup)? Fix/Ignore/Cancel? "
send "F\r"
expect eof
    
por 24.04.2015 / 23:02