Expandir automaticamente a última partição para usar todo o espaço não alocado, usando partidos no modo em lote
Para encurtar a história, preciso executar tudo isso automaticamente na inicialização (sistema incorporado).
Nossos engenheiros enviarão imagens para os dispositivos de produção. Essas imagens conterão uma pequena tabela de partição. Na inicialização, preciso expandir automaticamente a última partição (nº 3) para usar todo o espaço disponível no disco.
Aqui está o que recebo quando olho para o espaço livre no meu disco.
> parted /dev/sda print free
1      1049kB  25.3MB  24.2MB  fat16        primary  legacy_boot
25.3MB  26.2MB  922kB   Free Space
2      26.2MB  475MB   449MB   ext4         primary
3      475MB   1549MB  1074MB  ext4         primary
1549MB  32.0GB  30.5GB  Free Space
Preciso expandir a partição 3 pelo número de bytes de N (30,5 GB)
Como faço para executar esta etapa automaticamente, sem aviso? Isso precisa funcionar com um tamanho dinâmico de espaço disponível após a 3ª partição.
— Paul Knopf
Não espere receber um script pronto para usar, sem tentar! Então você pode nos mostrar o que você tentou até agora? Outra coisa a partição que você está redimensionando não deve ser montada durante a operação ....
— Luciano Andress Martini
Eu tentei resizepartcomando, e funciona, mas requer um tamanho exato. Eu preciso que seja dinâmico.
resize2fspode ser o que estou procurando. linux.die.net/man/8/resize2fs
Nas versões atuais de parted, resizepartdeve funcionar para a partição ( partedentende 100%ou coisas assim -1s, esta última também precisa --parar de analisar as opções no cmdline). Para determinar o valor exato que você pode usar unit s, print free. resize2fsvem depois para o sistema de arquivos.
As versões antigas do partedtinham um resizecomando que redimensionaria a partição e o sistema de arquivos de uma só vez, até funcionou vfat.
Em uma modificação do Kobo ereader, usei isso para redimensionar ao máximo a 3ª partição da memória interna: (assume cegamente que não há 4ª partição e tabela msdos e outras coisas)
start=$(cat /sys/block/mmcblk0/mmcblk0p3/start)
end=$(($start+$(cat /sys/block/mmcblk0/mmcblk0p3/size)))
newend=$(($(cat /sys/block/mmcblk0/size)-8))
if [ "$newend" -gt "$end" ]
parted -s /dev/mmcblk0 unit s resize 3 $start $newend
Portanto, você também pode obter os valores /sys/block/.../se o kernel suportar. Mas partedremova o resizecomando para que você tenha que executar duas etapas agora, resizepartpara aumentar a partição e qualquer ferramenta que seu sistema de arquivos fornecer para aumentar isso, como resize2fspara ext*.
Era exatamente isso que eu estava procurando. Obrigado pela ajuda!
Pergunta secundária, o que há com os 8 bytes no final?
Evite redimensionar em um único setor ... você precisaria alterá-lo para -40 ou algo assim (cabeçalho de backup da GPT no final do disco).
Não partedsuporta extensão automática a partir da linha de comando? Porque, não apoiá-lo de forma interativa. Se executado interativamente, perguntará se você deseja corrigir a tabela de partição GPT para corresponder ao tamanho do disco (tipo fix) e, em seguida, você pode executar resizepart 3 -1. Eu tenho tentado descobrir como fazê-lo na linha de comando.
Não é tão rápido: o comando redimensionar foi removido na parte 3.0. Tente sfdisk ou gparted.
Sendo incapaz de escrever corretamente a parte dividida (solicitou confirmação porque a partição foi montada e, ao contrário de outras respostas que achei que não entendiam -1sou 100%), encontrei a ferramenta growpart que faz exatamente isso.
O uso é simples: growpart /dev/sda 3(e então resize2fs /dev/sda3, ou outro comando apropriado para o tipo de sistema de arquivos usado).
No Debian e no Ubuntu, ele é empacotado como cloud-guest-utils .
— Ivo Smits
Esta é a maneira mais conveniente que eu poderia encontrar para isso agora. Funcionou maravilhosamente.
— SebiF 13/09
Esta foi a solução para mim - se separaram não gostava ext4 como o sistema de arquivos, e parecia haver nenhuma maneira de evitá-la tentando redimensionar o sistema de arquivos ...
não funciona para o Ubuntu 18.04
— DreamFlasher 23/04/19
@ DreamFlasher Não sei dizer por que não funcionou para você. Até onde eu posso ver, você pode instalar o pacote cloud-guest-utils e, como essa é a única função fornecida pelo growpart, ele deve funcionar, a menos que haja um erro, seja usado incorretamente ou se algo estiver fora de controle. Observe que o último argumento (3 no exemplo) é a partição a ser redimensionada, contando a partir de 1, e que espaço suficiente precisa estar disponível logo após a partição para poder redimensioná-la dessa maneira.
A maneira correta de fazer isso é usar o fato de que parted tem a noção de porcentagens. então
parted /dev/sda resize 3 100%
— Jonathan Buzzard
desatualizado, não funciona com o Ubuntu 18.04 e mais tarde
Um pouco do comando redimensionar foi com a versão 3 separada, agora você precisa usar o comando redimensionar e redimensionar separadamente o sistema de arquivos subjacente ou o PV, se é isso que você está usando. Para ext4, o comando é resize2fs ou, para XFS, é xfs_growfs. Normalmente, ambos são feitos quando o sistema de arquivos é montado e o argumento é o ponto de montagem nos dois casos.
No Ubuntu 18.04, sou capaz de redimensionar para preencher o espaço não alocado em um script com o seguinte:
sudo parted -s /dev/sdb "resizepart 2 -1" quit
Pode não ser necessário montar antes de redimensionar. Eu fiz isso para suprimir uma consulta do resize2fs para entrada do usuário.