Назад | Перейти на главную страницу

Измените размер раздела до максимального, используя parted в неинтерактивном режиме

Поскольку использование fdisk в этом случае довольно сложно из-за того, что неинтерактивное использование, вероятно, невозможно или, по крайней мере, очень сложно (с использованием printf), я хочу использовать parted resizepart для изменения размера раздела до максимального.

Это можно использовать в таких сценариях, как фактическое изменение размера диска в вашем гипервизоре / облаке, а затем вам нужно настроить логический том / pv на новый размер (случай LVM) или вы хотите настроить размер раздела обычного раздела на максимум. .

Предположим, я хочу изменить размер раздела / dev / sda1 на явном диске / dev / sda1 до максимально возможного размера - как бы я это сделал, не задавая никаких вопросов.

Даже если parted /dev/sda resizepart 1 существует, мне нужно рассчитать и ввести максимальный размер диска - и это фактическая подсказка, над которой я работаю здесь

ПОДСКАЗКА: этот скрипт совместим с parted v3 + OOTB, если вы разделяли 2, вам нужно изменить parted resizepart к parted resize

Давайте поместим это в скрипт, команда acualy является интерактивной, мы просто добавляем намного больше, чтобы гарантировать, что установлены первые 2 параметра:

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

использование

Сохраните сценарий выше как resize.sh и сделать его исполняемым

# 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

Например, если у вас есть vg vgdata с lv 'data' на / dev / sdb1 при использовании LVM, вся история будет выглядеть так:

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

Вот и все, логический том с измененным размером, включая измененную файловую систему (-r) - все готово, проверьте его с помощью df -h :)

Объяснение

Для определения размера диска мы используем

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

а) Так что получите информацию о диске нашего устройства, о котором идет речь printf %s\\n 'unit MB print list' | parted | grep "Disk /dev/sda мы используем printf %s\\n 'unit MB print list' чтобы единицы отображались как МБ, поскольку в противном случае он будет зависеть от размера диска (МБ, G, T), и пока нет лучшего способа сделать это с помощью parted 3 или 4

б) затем используйте 3-й столбец вывода (размер диска) cut -d' ' -f3 (разделено пробелом)

c) и, наконец, отрезать блок «MB» заготовкой, используя tr -d MB

Последующие действия

Я опубликовал сценарий на https://github.com/EugenMayer/parted-auto-resize поэтому, если что-то связано с улучшением функций, используйте там запросы на перенос (все, что не входит в этот вопрос)