Изменения размера логических томов LVM

Не так давно, волей-неволей, открыл для себя такую вещь, как LVM. Данная технология имеет широкий спектр применения, в частности она используется для распределения дискового пространства на сервере VMWare ESXi, с которым я работаю. LVM имеет много интересных возможностей по сравнению с традиционными физическими разделами.

Однако, хочу отметить одну и, как мне кажется, главную его особенность — возможность безболезненного изменения размеров LVM-раздела «на лету», которую я оценил и активно использую. Ниже — мой пример изменения размеров логических разделов в VMWare ESXi для Debian Lenny и файловой системы ReiserFS.

Для начала в настройках виртуальной машины расширяем нужный нам диск до нужных нам размеров.

Потом лезем в консоль и устанавливаем LVM, если он еще не установлен:

$ apt-get install lvm2

и перезагружаем тачку.

Теперь просмотрим список физических томов LVM:

$ pvdisplay
--- Physical volume ---
PV Name               /dev/sdb
VG Name               POSTGRESPV
Size               25,00 GB / not usable 3,81 MB
Allocatable           yes (but full)
PE Size (KByte)       4096
Total PE              7389
Free PE               0
Allocated PE          7389
PV UUID               pmFeL9-cBUh-BVrs-z2ib-zAT9-RCYa-C9vO3X
--- Physical volume ---
PV Name               /dev/sda2
VG Name               PSQLSERVER
PV Size               7,76 GB / not usable 2,21 MB
Allocatable           yes (but full)
PE Size (KByte)       4096
Total PE              1986
Free PE               0
Allocated PE          1986
PV UUID               LmMnzo-3RoA-yhmz-48LF-yGum-RKJC-UQXSoC

По размеру диска определяем какой диск будем увеличивать, в моем случае это /dev/sdb. Что бы расширить физический том до максимума воспользуемся командой:

$ pvresize /dev/sdb

Повторный вывод команды pvdisplay покажет нам что размер нужного нам диска изменился, а значит появилось свободное пространство в группе томов, в которую входит данный диск. Убедиться в этом нам поможет команда:

$ vgdisplay
  --- Volume group ---
  VG Name               POSTGRES
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  12
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               40,00 GB
  PE Size               4,00 MB
  Total PE              10239
  Alloc PE / Size       7389 / 40,00 GB
  Free  PE / Size       2850 / 15,00 GB
  VG UUID               NLzOCj-aqm2-7hbn-tbdh-U5gx-odRz-3hSicG

  --- Volume group ---
  VG Name               PSQLSERVER
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               7,76 GB
  PE Size               4,00 MB
  Total PE              1986
  Alloc PE / Size       1986 / 7,76 GB
  Free  PE / Size       0 / 0
  VG UUID               H2xmf9-biAb-u4Ws-rV5d-sj7e-yK4q-rKfOeD

Пришло время расширить непосредственно логический LVM-раздел. lvdisplay покажет список существующих разделов:

$ lvdisplay
  --- Logical volume ---
  LV Name                /dev/POSTGRES/pgbases
  VG Name                POSTGRES
  LV UUID                OTy5hf-HiY1-ArI7-aGVb-5v5I-LT8B-7bBVfX
  LV Write Access        read/write
  LV Status              available
  # open                 2
  LV Size                25,00 GB
  Current LE             7389
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:2

  --- Logical volume ---
  LV Name                /dev/PSQLSERVER/root
  VG Name                PSQLSERVER
  LV UUID                xOJFSv-f3vm-2z2v-KTkc-bIcu-TB11-0h0YuM
  LV Write Access        read/write
  LV Status              available
  # open                 2
  LV Size                7,38 GB
  Current LE             1888
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:0

  --- Logical volume ---
  LV Name                /dev/PSQLSERVER/swap_1
  VG Name                PSQLSERVER
  LV UUID                K9jssQ-4pPc-oYzU-E8ge-MLoB-vTmi-QIneNI
  LV Write Access        read/write
  LV Status              available
  # open                 2
  LV Size                392,00 MB
  Current LE             98
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:1

Нам нужно увеличить раздел pgbases, который размещен в группе POSTGRES, на 15 Гб. Для этого существует утилита lvextend:

$ lvextend -l 10239 /dev/POSTGRES/pgbases

Теперь логический раздел pgbases имеет размер 40 Гб.

Но это еще не все. Теперь нужно увеличить размер файловой системы раздела. Для ReiserFS это можно делать как в смонтированном так и в размонтированном состоянии, но я предпочитаю отмонтировать раздел, если это позволяет ситуация:

$ umount /dev/POSTGRES/pgbases
$ resize_reiserfs /dev/POSTGRES/pgbases
$ mount /dev/POSTGRES/pgbases

Для расширения файловой системы в смонтированном состоянии используется опция -f:

$ resize_reiserfs -f /dev/POSTGRES/pgbases

На этом процесс увеличения LVM-раздела закончен.

Процедура уменьшения раздела проходит в обратном порядке. То есть сначала уменьшаем размер файловой системы, затем размер логического раздела, а затем размер физического раздела.

Важно: при уменьшении размера файловой системы ReiserFS, раздел нужно обязательно отмонтировать!

Следующими командами мы обратно уменьшим наш раздел pgbases на 15 Гб:

$ umount /dev/POSTGRES/pgbases
$ resize_reiserfs -s-15G /dev/POSTGRES/pgbases
$ lvreduce -L-15G /dev/POSTGRES/pgbases
$ pvresize --setphusicalvolumesize 25G /dev/sdb
$ mount /dev/POSTGRES/pgbases

После чего в настройках виртуальной машины уменьшаем размер соответствующего диска.

Подробней о самом LVM, а также об утилитах для его администрирования, в примерах и картинках можно ознакомиться здесь.