GNU/Linux >> Znalost Linux >  >> Linux

Změňte velikost oddílu na maximum pomocí parted v neinteraktivním režimu

TIP:Tento skript je kompatibilní s parted v3+ OOTB, pokud máte parted 2, musíte změnit parted resizepart do parted resize

pojďme to dát do skriptu, příkaz acualy je onliner, jen jsme přidali mnohem víc, abychom zajistili nastavení prvních 2 parametrů:

#!/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

použití

Uložte skript výše jako resize.sh a udělejte jej spustitelný

# 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

Například v případě, že máte vg vgdata s lv 'data' na /dev/sdb1 při používání LVM, bude celý příběh vypadat takto

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

To je ono, změněná velikost logického svazku včetně změněné velikosti souborového systému ( -r ) - vše hotovo, zkontrolujte pomocí df -h :)

Vysvětlení

Pro zjištění velikosti disku používáme

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

a) Získejte informace o disku našeho dotyčného zařízení printf %s\\n 'unit MB print list' | parted | grep "Disk /dev/sda používáme printf %s\\n 'unit MB print list' zajistit, aby se jednotky zobrazovaly jako MB, protože jinak se bude lišit podle velikosti disku ( MB, G, T ) a zatím neexistuje lepší způsob, jak to udělat s parted 3 nebo 4

b) pak použijte 3. sloupec výstupu (velikost disku) cut -d' ' -f3 (děleno mezerou)

c) a nakonec odřízněte jednotku 'MB' pomocí blanc pomocí tr -d MB

Následná opatření

Skript jsem zveřejnil na https://github.com/EugenMayer/parted-auto-resize, takže pokud má něco zlepšit funkcionalitu, použijte tam žádosti o stažení (cokoli, co není v rozsahu této otázky)


Linux
  1. Rozdělte disk na Linuxu pomocí GNU Parted

  2. Ubuntu – Je bezpečné změnit velikost oddílu na /?

  3. Jak změnit velikost oddílu LVM uvnitř rozšířeného oddílu

  1. Jak vytvořit oddíl v Linuxu pro velikost 2 TB pomocí Parted GPT

  2. Nainstalujte CentOS 7 pomocí textového režimu

  3. fdisk - oddíl na jednom řádku

  1. Jak odstranit diskový oddíl pomocí příkazu Parted

  2. Živá změna velikosti oddílu GPT v systému Linux

  3. Skriptovatelné oddíly GPT pomocí parted