Pull to refresh

Comments 17

Отлично!
Надеюсь на продолжение статьи — как это место убрать из системы.
На самом деле не так сложно. Главное, чтобы файловая система поддерживала возможность уменьшение размера.
Делается все в обратном порядке:
lvreduce (Тут главное не забыть сделать resize2fs, чтобы файловая система поняла, что она занимает теперь меньше места).
pvmove (переместить данные с pv, который хотим освободить. Для этого в Volume group должно быть достаточно места для высвобождения требуемого pv)
vgreduce (уменьшаем группу)
pvremove
Для LVM есть только одна программа с GUI, а та глючная с минимум функций.
Даже удобной программы с CLI интерфейсом нет для управления LVM. Пользуйся отдельными командами для этого, как и приводится в статье.
Не понимаю зачем в новых дистрибутивах навязывают LVM, если для него нет удобных программа по управлению.
Есть же fsextender, к чему эта ручная возня? Да и плодить лишние сущности в виде составных томов не стоит без особой необходимости.
lvextend с опцией -r сделает resize2fs самостоятельно.
Да, поправили в руководстве. Действительно делать лишний шаг ни к чему. Спасибо.
При использовании данной опции нужно помнить, что она сначала отмонтирует ФС, потом делает ресайз и монтирует ФС обратно. Поэтому делать так ресайз rootfs очень плохая идея. Лучше сначала сделать lvextend без опции -r, а потом онлайновый resize2fs/xfs_growfs
Поэтому делать так ресайз rootfs очень плохая идея.

Какие могут возникнуть проблемы, если в момент ресайза диск ненагружен?
Отмонтирование рутовой ФС оставит вас с нерабочей ОС (до перезагрузки), что не очень приятно.
На самом деле для ext3/4 онлайн все делается начиная с 2.6. По крайней мере в сторону увеличения (о чем и статья) точно.
Подтверждаю, на ext4 онлайн все без проблем работало как в + так и в -. Но в минус пробовал не рутовую.

2 перезагрузки для увеличения размера диска на виртуальном сервере будоражат мое сознание. Azure не может наживую увеличить место виртуального диска?


Одна из задач LVM — как раз, работа с диском без простоя.


Вы связываете себе руки, отдавая в LVM партиции вместо целых устройств.


Мы расширявшемся так (мы работаем с VMWare):


  • Увеличение виртуального диска через настройки VM
  • blockdev --rereadpt /dev/sda #Даем системе понять новый размер диска. Если blockdev нет, то echo 1 > /sys/bus/scsi/drivers/sd/2\:0\:0\:2/rescan
  • pvresize /dev/sda #Даем LVM понять что размер диска изменился
  • lvextend -l+100%FREE /dev/mapper/vg_data-lv_data
  • resize2fs /dev/mapper/vg_data-lv_data или xfs_growfs /dev/mapper/vg_data-lv_data

В вашем случае, т.к. партишены уже нарезаны, я бы добавлял 2й диск и отдавал его LVMу опять же целиком


  • pvcreate /dev/sdb
  • vgextend vg_data /dev/sdb
  • А далее по первой инструкции

Как результат: ни каких перезагрузок, ни каких головняков с переразметкой диска.

Да, действительно можно просто добавлять дополнительные диски, как и написано в начале статьи. Однако количество дополнительных дисков ограничено и для добавления небольшого количества места вряд-ли это имеет смысл — зависит от проекта, критичен он к перезагрузке или нет.
blockdev не работает для корневой ФС, а перед pvresize надо менять границы самих разделов пересоздавая их в fdisk.
Судя по адресу устройства в rescan, вы меняете раздел для дополнительного диска.

blockdev работает не для ФС, а для устройства. Если на разделе есть примотированный раздел, то вы сможете заставить ОС определить новый размер устройства. Но партишены на нем без перезагрузки не переразметите.


У нас на 190 виртуальных машинах это работает:


  • sda1 — /boot
  • sda2 — vg_system
    • vg_system содержит lv_root и lv_swap

  • sdb — vg_data с LV согласно необходимости под конкретное приложение
    Если требуется расширять место для vg_system, добавляется
  • sdс — vg_system
    И мы получаем возможность расширять размеры любого раздела без перезагрузок и размонтирования.

Расширение root раздела для нас ситуация крайне редкая. Но если она происходит, мы не заставляем бизнес простаивать и не очень хотим это делать в нерабочее время.


Та же тема кстати и с multipass устройствами на физических серверах, просто перед blockdev добавляем multipath -r

Но партишены на нем без перезагрузки не переразметите.

Только что это сделал на CentOS 7 без перезагрузки.
Ещё можно увеличивать разделы через cloud-init, но на CentOS придётся добавить модуль dracut в initrd и как-то включить обновление конфигов в процесс разворачивания из шаблона (или выключить большинство модулей).
Sign up to leave a comment.