Expandir automaticamente a última partição para usar todo o espaço não alocado, usando o parted no modo batch

7

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ções. Na inicialização, eu preciso expandir automaticamente a última partição (# 3) para usar todo o espaço disponível no disco.

Aqui está o que eu recebo quando olho para o espaço livre no meu disco.

> parted /dev/sda print free
Model: Lexar JumpDrive (scsi)
Disk /dev/sda: 32.0GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
        17.4kB  1049kB  1031kB  Free Space
 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

Eu preciso expandir a partição 3 por N (30,5 GB) número de bytes

Como faço para executar esta etapa automaticamente, sem prompt? Isso precisa funcionar com um tamanho dinâmico de espaço disponível após a terceira partição.

    
por Paul Knopf 23.06.2017 / 22:14

3 respostas

6

Nas versões atuais de parted , resizepart deve funcionar para a partição ( parted entende 100% ou coisas como -1s , o último também precisa de -- para parar as opções de análise no cmdline). Para determinar o valor exato, você pode usar unit s , print free . resize2fs vem depois para o sistema de arquivos.

Versões antigas de parted tinham um comando resize que redimensionava a partição e o sistema de arquivos de uma só vez, e até trabalhava para vfat .

Em uma modificação do Kobo ereader, usei isso para redimensionar a 3ª partição da memória interna para o máximo: (presume-se cegamente que não existe nenhuma quarta partição e tabela de msdos e coisas assim)

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" ]
then
    parted -s /dev/mmcblk0 unit s resize 3 $start $newend
fi

Então você também pode obter os valores de /sys/block/.../ se o kernel suportar. Mas o parted removeu o comando resize , portanto você precisa fazer duas etapas agora, resizepart para aumentar a partição e qualquer ferramenta que seu sistema de arquivos forneça para crescer, como resize2fs para ext* .

    
por 23.06.2017 / 22:43
4

Sendo incapaz de rotear adequadamente o parted (pediu confirmação porque a partição foi montada e, ao contrário de outras respostas que eu encontrei, não entendi -1s ou 100% ), acabei de encontrar the growpart tool que faz exatamente isso.

O uso é simples: growpart /dev/sda 3 (e, em seguida, resize2fs /dev/sda3 ou outro comando apropriado para o tipo de sistema de arquivos usado).

No Debian e Ubuntu ele é empacotado como cloud-guest-utils .

    
por 06.04.2018 / 22:10
3

O jeito certo de fazer isso é usar o fato de que o parted tem a noção de porcentagens. Então

parted /dev/sda resize 3 100%
    
por 25.09.2018 / 16:24

Tags