Не так давно, волей-неволей, открыл для себя такую вещь, как 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, а также об утилитах для его администрирования, в примерах и картинках можно ознакомиться здесь.