Redimensiona a partição para o máximo usando parted no modo não interativo

1

Como o uso do fdisk neste caso é bastante complicado devido ao caso de formas não interativas provavelmente não serem possíveis ou muito complicadas usando o printf, eu quero usar parted resizepart para redimensionar uma partição para seu tamanho máximo.

Isso pode ser usado em cenários como redimensionamento de disco (hipervisor / virtualização) e agora você precisa ajustar seu volume lógico / pv para o novo tamanho (caso de LVM) ou você deseja ajustar o tamanho da partição de uma partição normal.

Então vamos supor que eu queira redimensionar a partição / dev / sda1 no disco obvisouly / dev / sda1 para o seu tamanho máximo possível - como eu faria isso sem receber nenhuma pergunta.

Eventhough parted /dev/sda resizepart 1 existe, ele precisa de mim para calcular e inserir o tamanho máximo do disco - assim como automatizar isso

    
por Eugen Mayer 26.08.2017 / 19:21

1 resposta

1

DICA: este script é compatível com parted v3 + OOTB, se você partiu 2, você precisa alterar parted resizepart para parted resize

vamos colocar isso em um script, o comando acualy é onliner, nós adicionamos muito mais para garantir que os dois primeiros parâmetros sejam definidos:

#!/bin/bash
set -e

if [[ $# -eq 0 ]] ; then
    echo 'please tell me the device to resize as the first parameter, like /dev/sda'
    exit 1
fi


if [[ $# -eq 1 ]] ; then
    echo 'please tell me the partition number to resize as the second parameter, like 1 in case you mean /dev/sda1 or 4, if you mean /dev/sda2'
    exit 1
fi

DEVICE=$1
PARTNR=$2
APPLY=$3

fdisk -l $DEVICE$PARTNR >> /dev/null 2>&1 || (echo "could not find device $DEVICE$PARTNR - please check the name" && exit 1)

CURRENTSIZEB='fdisk -l $DEVICE$PARTNR | grep "Disk $DEVICE$PARTNR" | cut -d' ' -f5'
CURRENTSIZE='expr $CURRENTSIZEB / 1024 / 1024'
# So get the disk-informations of our device in question printf %s\n 'unit MB print list' | parted | grep "Disk /dev/sda we use printf %s\n 'unit MB print list' to ensure the units are displayed as MB, since otherwise it will vary by disk size ( MB, G, T ) and there is no better way to do this with parted 3 or 4 yet
# then use the 3rd column of the output (disk size) cut -d' ' -f3 (divided by space)
# and finally cut off the unit 'MB' with blanc using tr -d MB
MAXSIZEMB='printf %s\n 'unit MB print list' | parted | grep "Disk ${DEVICE}" | cut -d' ' -f3 | tr -d MB'

echo "[ok] would/will resize to from ${CURRENTSIZE}MB to ${MAXSIZEMB}MB "

if [[ "$APPLY" == "apply" ]] ; then
  echo "[ok] applying resize operation.."
  parted ${DEVICE} resizepart ${PARTNR} ${MAXSIZEMB}
  echo "[done]"
else
  echo "[WARNING]!: Sandbox mode, i did not size!. Use 'apply' as the 3d parameter to apply the changes"
fi

uso

Salve o script acima como resize.sh e torne-o executável

# resize the fourth partition to the maximum size, so /dev/sda4
# this is no the sandbox mode, so no changes are done
./resize.sh /dev/sda 4

# apply those changes
./resize.sh /dev/sda 4 apply

Por exemplo, no caso de você ter um vgdata vg com um lv 'data' em / dev / sdb1 enquanto estiver usando o LVM, toda a história se pareceria com

./resize.sh /dev/sdb 1 apply
pvresize /dev/sdb1
lvextend -r /dev/mapper/vgdata-data -l 100%FREE

É isso, o volume lógico redimensionado incluindo o sistema de arquivos redimensionado (-r) - tudo feito, verifique com df -h :)

Explicação

O que usamos para encontrar o tamanho do disco é

resizepart ${PARTNR} 'parted -l | grep ${DEVICE} | cut -d' ' -f3 | tr -d MB

a) Então pegue as informações de disco do nosso dispositivo em questão printf %s\n 'unit MB print list' | parted | grep "Disk /dev/sda usamos printf %s\n 'unit MB print list' para garantir que as unidades sejam exibidas como MB, caso contrário ele irá variar por tamanho de disco (MB, G, T) e lá não é melhor maneira de fazer isso com parted 3 ou 4 ainda

b) depois use a terceira coluna da saída (tamanho do disco) cut -d' ' -f3 (dividido pelo espaço)

c) e, finalmente, cortar a unidade 'MB' com blanc usando tr -d MB

Acompanhamento

Eu publiquei o script no link , portanto, se alguma coisa for aprimorada, use solicitações de solicitação (nada não no escopo desta questão)

    
por 26.08.2017 / 19:21