среда, 26 февраля 2020 г.

Увеличение размера lvm-тома без перезагрузки ОС

Иногда случается так, что доступное дисковое пространство заканчивается. В этой заметке будет описан процесс увеличения lvm-тома за счёт нераспределённого пространства на физическом сервере или добавленного пространства на виртуальной машине.
Процесс одинаков для Ubuntu, RHEL/CentOS и скорее всего будет идентичен для любого другого linux-дистрибутива.
Предполагается, что диск, который мы хотим использовать для расширения раздела, - /dev/sda.
Запустим fdisk и приступим к изменению разметки диска
sudo -s
fdisk /dev/sda
для отображения таблицы разделов выберем команду p
Команда (m для справки): p
Диск /dev/sda: 200 GiB, 214748364800 байтов, 419430400 секторов
Единицы измерения: секторов из 1 * 512 = 512 байтов
Размер сектора (логический/физический): 512 байт / 4096 байт
I/O size (minimum/optimal): 4096 bytes / 1048576 bytes
Тип метки диска: dos
Идентификатор диска: 0x98595de7

Устр-во    Загрузочный   Start Конец Секторы  Size Id Тип
/dev/sda1  *              2048   1499135   1497088  731M 83 Linux
/dev/sda2              1501182 209713151 208211970 99,3G  5 Расширенный
/dev/sda5              1501184 209713151 208211968 99,3G 8e Linux LVM
в приведённом примере номер последнего использованного сектора - 209713151.
Создадим новый раздел, началом нового раздела указываем сектор, следующий после последнего использованного - 209713152, а концом - последний доступный.
Команда (m для справки): n
Тип раздела
   p   первичный (1 первичных, 1 расширенных, 2 свободно)
   l   логический (numbered from 5)
Select (default p): p
Номер раздела (3,4, по умолчанию 3): 3
Первый сектор (1499136-419430399, по умолчанию 1499136): 209713152
Last sector, +sectors or +size{K,M,G,T,P} (209713152-419430399, по умолчанию 419430399):

Создан новый раздел 3 типа 'Linux' и размера 100 GiB.
После создания нужно указать тип раздела, номер раздела указываем тот, который был использован при его создании, для типа Linux LVM это 8e.
Команда (m для справки): t
Номер раздела (1-3,5, по умолчанию 5): 3
Тип раздела (наберите L, чтобы увидеть список всех типов): 8e

Изменён тип раздела 'Linux' на 'Linux LVM'.
Проверяем, что всё выглядит так, как нужно
Команда (m для справки): p
Диск /dev/sda: 200 GiB, 214748364800 байтов, 419430400 секторов
Единицы измерения: секторов из 1 * 512 = 512 байтов
Размер сектора (логический/физический): 512 байт / 4096 байт
I/O size (minimum/optimal): 4096 bytes / 1048576 bytes
Тип метки диска: dos
Идентификатор диска: 0x98595de7

Устр-во    Загрузочный     Start Конец Секторы  Size Id Тип
/dev/sda1  *                2048   1499135   1497088  731M 83 Linux
/dev/sda2                1501182 209713151 208211970 99,3G  5 Расширенный
/dev/sda3              209713152 419430399 209717248  100G 8e Linux LVM
/dev/sda5                1501184 209713151 208211968 99,3G 8e Linux LVM
Если всё выглядит так, как нам это необходимо, то записываем изменения и выходим из fdisk.
Команда (m для справки): w
Таблица разделов изменена.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Устройство или ресурс занято

Ядро всё ещё использует старую таблицу. Новая будет использована при следующей перезагрузке или после выполнения partprobe(8) или kpartx(8).
Обновляем данные о структуре разделов
partprobe
Теперь переходим к изменениям структуры lvm.
Создадим новый физический lvm-том
pvcreate /dev/sda3

    Physical volume "/dev/sda3" successfully created
Проверяем, что новый том имеет нужный размер
pvs

  PV         VG      Fmt  Attr PSize   PFree
  /dev/sda3          lvm2 ---  100,00g 100,00g
  /dev/sda5  test-vg lvm2 a--   99,28g   4,00m
Увеличиваем размер lvm-группы за счёт нового тома
vgextend test-vg /dev/sda3
  Volume group "test-vg" successfully extended
Проверяем, что размер изменился
vgs
  VG      #PV #LV #SN Attr   VSize   VFree
  test-vg   2   2   0 wz--n- 199,28g 100,00g
Расширяем логический lvm-том, используя для этого всё доступное пространство
lvextend -l +100%FREE /dev/test-vg/root

    Size of logical volume test-vg/root changed from 98,32 GiB (25171 extents) to 198,33 GiB (50772 extents).
    Logical volume root successfully resized.
Если мы хотим использовать не всё доступное пространство, то можно использовать команду с указанием конкретного объёма
lvextend -L+90G /dev/test-vg/root /dev/sda3
Имя логического тома можно узнать из вывода команды lvdisplay
Последней командой увеличиваем доступное пространство.
resize2fs /dev/test-vg/root

    resize2fs 1.42.13 (17-May-2015)
    Filesystem at /dev/test-vg/root is mounted on /; on-line resizing required
    old_desc_blocks = 7, new_desc_blocks = 13
    The filesystem on /dev/test-vg/root is now 51990528 (4k) blocks long.
Как итог:
Было
df -h

Файл.система              Размер Использовано  Дост Использовано% Cмонтировано в
/dev/mapper/test-vg-root    97G          11G   82G           12% /
Стало
df -h

Файл.система              Размер Использовано  Дост Использовано% Cмонтировано в
/dev/mapper/test-vg-root   196G          11G  176G            6% /
Более подробно о работе с lvm можно почитать в документации Red Hat

2 комментария:

  1. Статья полезная, но вы забыли добавить что после
    pvcreate /dev/sda3
    vgextend test-vg /dev/sda

    ОтветитьУдалить
    Ответы
    1. Действительно забыл. Обновил содержимое статьи.
      Спасибо за указание на ошибку.

      Удалить