В этой статье будет рассмотрен процесс увеличения места на диске Linux–сервера в облаке Azure Pack Infrastructure от InfoboxCloud. Это стандартная процедура, выполняемая с помощью LVM, которая есть в любом Linux–образе в нашем облаке.

Данная инструкция полезна не только для увеличения размера на едином диске, но и для создания общего пространства из подключенных виртуальных дисков, что позволяет преодолеть максимальный размер виртуального диска (для VHD – 2048 гб) и создать единое большое пространство для данных.


Если вы не хотите разбираться в этом, просто напишите нам тикет в техническую поддержку и мы сделаем все за вас.

Что такое LVM?


LVM — система управления логическими дисками в Linux, высокоуровневое представление подсистемы хранения данных на сервере (более высокоуровневое чем диски и разделы). Эта технология дает системным администраторам гибкие возможности в выделении дискового пространства для приложений и пользователей, включая возможность изменения размера логического тома.

Когда устанавливается Linux на сервер — одна из задач выбора — как разметить диск. С LVM диск включается в группу томов (volume group) и создаются логические тома например для корня диска /. В дальнейшем можно изменять размер логических томов.

Устройство LVM


Сама по себе высокоуровневая абстракция LVM включает в себя логические тома (LV) и физические тома (PV).

Физический том (PV, physical volume) — виртуальный диск сервера или обычный жесткий диск (или таким томом может быть RAID).

Логический том (LV, logical volume) — эквивалент раздела. Он представляется ОС как стандартное блочное устройство и может содержать файловую систему.

Группа томов (VG, volume group) — логическое объединение томов.

Физический блок (PE, physical extent) — кусочки данных на физическом томе, в рамках группы томов имеют идентичный размер логическому блоку (LE, logical extent), размер которого в свою очередь постоянный в рамках группы томов.


Вид представления LVM с физическими и логическими томами.


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

Пример: Давайте представим, что у нас есть группа томов VG1 и у нее размер физического блока 4 Мб. Внутри группы томов 2 жестких диска /dev/hda1 и /dev/hdb1. Эти диски станут физическими разделами PV1 и PV2. Так как физический размер блока 4 мб — такого же размера будут и логические блоки. Диски имеют различный размер и первый включает в себя 99 блоков, а второй 248 блоков. Теперь мы создадим логический том. Он может быть любого размера между 1 и 347 блоками (248+99 блоков). Когда логический том создается устанавливается связь между логическими и физическими блоками, например логический блок 1 может быть связан с физическим блоком 51 из PV1, а данные записанные в первые 4 мегабайта логического тома фактически будут записаны в 51й блок PV1.

Есть 2 вида связи между физическими и логическими блоками:

  • линейный маппинг — когда множество физических блоков последовательно будут связаны со множеством логических блоков, например LE1-99 будут связаны с PV1, а LE 100–347 связаны с PV2.
  • маппинг с чередованием — когда каждый следующий логический блок будет использовать следующий диск, что в физических системах может увеличить производительность, но в облаке не имеет смысла, так как виртуальные диски создаются в СХД, которая уже использует множество дисков параллельно для увеличения производительности на аппаратном уровне.

Снепшоты LVM

Снепшоты LVM позволяют администратору создать новое блочное устройство, сохраняющее копию логического тома, замороженную на определенный момент времени. Эта возможность может быть использована для пакетной обработки данных, создания бекапов или экспериментов, когда вы не хотите задеть живые данные на системе.

В LVM2, используемой в современных версиях Linux, снепшоты доступны для чтения и записи по-умолчанию. При создании снепшота создается таблица исключений, которая используется для сохранения информации, какой блок был изменен. Если блок изменяется на томе-источнике, откуда создан снепшот, он сначала копируется в снепшот, помечается как скопированный в таблице исключений, затем новые данные записываются на оригинальный том. Если данные записываются на снепшот — блок маркируется в таблице исключений как использованный и никогда не копируется с тома-источника.

Увеличиваем раздел Linux-сервера


Создание сервера для тестирования

Если у вас еще нет доступа к Azure Pack Infrastructure, заполните заявку на получение бесплатной пробной версии на главной странице https://infoboxcloud.ru.

Создайте сеть с доступом в интернет, сервер с Linux (например с Ubuntu 16.04) и пробросьте его порт 22 на внешний ip, как показано в этой статье. Подключитесь к серверу по SSH.

На всех серверах с Linux в Azure Pack Infrastructure уже предустановлен LVM.

Создание контрольной точки

Перед увеличением объема диска создание контрольной точки крайне рекомендуется. Если что-нибудь пойдет не так вы сможете восстановить сервер на это состояние. Если в вашей подписке недостаточно места, напишите нам тикет в панели управления услугами > Центр поддержки > Написать тикет.

Нажмите на имя вашего сервера и перейдите в раздел «Контрольные точки».


Нажмите кнопку «Создать» для создания контрольной точки.


Задайте имя контрольной точки и если необходимо — описание и нажмите галочку «Готово». Контрольная точка будет создана. Теперь вы можете производить дальнейшие операции безопасно.

Увеличиваем раздел диска в панели управления Azure Pack Infrastructure

Войдите в панель управления, выберите ваш сервер, на котором требуется увеличить раздел и нажмите кнопку «Остановить». Дождитесь остановки сервера.


Теперь кликните по имени сервера и перейдите в раздел «Настроить». Кликните по имени диска, который требуется увеличить.


Появится кнопка «Развернуть» — нажмите ее.


Укажите желаемый размер диска (доступно только увеличение) и нажмите галочку «Готово». Размер виртуального диска будет увеличен. Однако этого не достаточно — необходимо увеличить LV-раздел на виртуальной машине, об этом читайте далее.

Создаем новый физический раздел на диске (PV)

Для начала на появившемся свободном месте нужно создать новый физический раздел (PV), который далее можно подключить к LVM. Для этого можно воспользоваться командой:

cfdisk


Выберите свободное место на диске (Free Space, отмечено зеленым цветом) с помощью стрелочек на клавиатуре и затем нажмите Enter, что запустит команду New.


Будет запрошен размер создаваемого раздела. По-умолчанию — максимальный, на все добавленное место, просто нажмите Enter.


Теперь стрелочками на клавиатуре при отмеченном новом разделе выберите пункт Type.


Нажмите Enter для выбора типа раздела.


Выберите тип 8e Linux LVM и нажмите Enter.

Теперь выберите пункт Write и нажмите Enter для того, чтобы изменения были записаны на диск.


Будет запрошено разрешение на применение изменений. Введите yes и нажмите Enter.


Будет выведено сообщение о том, что таблица разделов изменена успешно.


Запомните путь Device, в данном случае это /dev/sda3. Путь к устройству потребуется в дальнейшем при добавлении раздела в группу томов (VG).

Для выхода из программы разметки диска выберите пункт Quit и нажмите Enter.



Перезагрузите сервер командой:

reboot

и подключитесь к нему по SSH вновь.

Добавляем созданный физический раздел в группу томов (VG)

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

vgdisplay



где в параметре VG name будет указано имя группы томов, в данном случае — ubuntu-vg.

Для добавления физического раздела к группе томов воспользуйтесь командой:

vgextend ubuntu-vg /dev/sda3

, где ubuntu-vg – имя группы томов, а /dev/sda3 – путь к устройству — новому разделу.



Используя команду:

pvdisplay

вы можете увидеть список дисков подключенных к группе томов.


Увеличиваем размер логического раздела LVM root и файловой системы раздела до максимально доступного

Используя команду

lvdisplay

можете увидеть список логических разделов LVM.


Видим, что создано 2 раздела: /dev/ubuntu-vg/swap_1 и /dev/ubuntu-vg/root. Используя команду:

vgdisplay

Видим параметры группы томов.


Видим, что теперь доступно свободное место для расширения томов LVM (Free PE / Size) в размере 75 гб.

Нам необходимо увеличить раздел /dev/ubuntu-vg/root до максимально доступного, a заодно и увеличить размер файловой системы.

Для этого выполните команду:

lvextend -r -l +100%FREE /dev/ubuntu-vg/root


Теперь выполните команду:

df -h

для того, чтобы увидеть новый размер системного раздела.


Мы успешно добавили места на диске для Linux–сервера в облаке Azure Pack Infrastructure, а заодно и научились использовать LVM.

Если у вас возникли любые вопросы по использованию Azure Pack Infrastructure — с радостью поможем и проконсультируем! Вы можете написать нам через личный кабинет https://support.infobox.ru > Центр поддержки > Написать тикет.

Если вы не можете оставлять комментарии на Хабре, напишите нам в Сообществе InfoboxCloud.

Успешной работы!
Поделиться с друзьями
-->

Комментарии (16)


  1. bimcom
    22.10.2016 17:12
    +1

    Отлично!
    Надеюсь на продолжение статьи — как это место убрать из системы.


    1. mikkisse
      24.10.2016 07:40
      +1

      На самом деле не так сложно. Главное, чтобы файловая система поддерживала возможность уменьшение размера.
      Делается все в обратном порядке:
      lvreduce (Тут главное не забыть сделать resize2fs, чтобы файловая система поняла, что она занимает теперь меньше места).
      pvmove (переместить данные с pv, который хотим освободить. Для этого в Volume group должно быть достаточно места для высвобождения требуемого pv)
      vgreduce (уменьшаем группу)
      pvremove


  1. Kopart
    22.10.2016 20:30

    Для LVM есть только одна программа с GUI, а та глючная с минимум функций.
    Даже удобной программы с CLI интерфейсом нет для управления LVM. Пользуйся отдельными командами для этого, как и приводится в статье.
    Не понимаю зачем в новых дистрибутивах навязывают LVM, если для него нет удобных программа по управлению.


  1. navion
    22.10.2016 21:55
    +2

    Есть же fsextender, к чему эта ручная возня? Да и плодить лишние сущности в виде составных томов не стоит без особой необходимости.


  1. SkazochNik
    23.10.2016 10:39
    +1

    lvextend с опцией -r сделает resize2fs самостоятельно.


    1. infobox
      23.10.2016 11:07

      Да, поправили в руководстве. Действительно делать лишний шаг ни к чему. Спасибо.


    1. larrabee
      23.10.2016 17:24

      При использовании данной опции нужно помнить, что она сначала отмонтирует ФС, потом делает ресайз и монтирует ФС обратно. Поэтому делать так ресайз rootfs очень плохая идея. Лучше сначала сделать lvextend без опции -r, а потом онлайновый resize2fs/xfs_growfs


      1. navion
        24.10.2016 13:59

        Поэтому делать так ресайз rootfs очень плохая идея.

        Какие могут возникнуть проблемы, если в момент ресайза диск ненагружен?


        1. larrabee
          24.10.2016 15:25

          Отмонтирование рутовой ФС оставит вас с нерабочей ОС (до перезагрузки), что не очень приятно.


      1. SkazochNik
        24.10.2016 18:31

        На самом деле для ext3/4 онлайн все делается начиная с 2.6. По крайней мере в сторону увеличения (о чем и статья) точно.


        1. mikkisse
          24.10.2016 20:09

          Подтверждаю, на ext4 онлайн все без проблем работало как в + так и в -. Но в минус пробовал не рутовую.


  1. shep
    24.10.2016 10:05

    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
    • А далее по первой инструкции

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


    1. infobox
      24.10.2016 10:08

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


    1. navion
      24.10.2016 12:08

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


      1. shep
        24.10.2016 13:04
        +1

        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


        1. navion
          24.10.2016 13:56
          +1

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

          Только что это сделал на CentOS 7 без перезагрузки.