Что такое LVM и как им пользоваться

LVM (Logical Volume Management) — это система управления дисковым пространством, которая позволяет объединить все подключенные в системе жесткие диски в единый пул дискового пространства, а затем распределить дисковое пространство из этого пула между логическими разделами. Вот как это выглядит:

Представление логических разделов при использовании LVM:

Lvm

На рисунке видно, что диски объединяются в один пул, из которого потом можно создать логический раздел размера большего, чем любой из дисков, установленных в системе. И это еще не всё. Любой логический раздел может быть при необходимости увеличен. Но давайте по порядку.

Создание пула дискового пространства LVM.

Самое первое, что необходимо сделать — подключить в систему несколько дисков, которые будут использоваться для создания дискового пула LVM. Они должны быть видны в системе как устройства. Например, у нас в системе есть 4 диска. Первый — тот, на котором установлена система, остальные три не используются. Все четыре должны быть видны в системе:

root@debian:~# ls /dev | grep sd
sda
sda1
sda2
sda5
sdb
sdc
sdd

Следующее, что необходимо сделать, — это установить в систему пакет lvm2, если он еще не установлен.

apt-get install lvm2

После установки пакета можно создавать пул дискового пространства и включать в него физические диски. По  принятой терминологии дисковый пул называют «volume group», то есть группа томов. После установки проверяем, присутствуют ли в системе дисковые пулы:

root@debian:~# vgdisplay
  No volume groups found

Как мы видим, ни одного дискового пула нет, и нам надо создать один. Давайте создадим один дисков пул, назовем его vg_test

root@debian:~# vgcreate vg_test /dev/sdb
  No physical volume label read from /dev/sdb
  Writing physical volume data to disk "/dev/sdb"
  Physical volume "/dev/sdb" successfully created
  Volume group "vg_test" successfully created

И теперь проверим, есть ли у нас так называемые группы томов:

root@debian:~# vgdisplay
  --- Volume group ---
  VG Name               vg_test
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               8.00 GiB
  PE Size               4.00 MiB
  Total PE              2047
  Alloc PE / Size       0 / 0
  Free  PE / Size       2047 / 8.00 GiB
  VG UUID               5erC13-SIU1-Iy9J-qyiM-SHlm-Mv4S-GyB0Il

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

root@debian:~# vgextend vg_test /dev/sdc /dev/sdd
  No physical volume label read from /dev/sdc
  No physical volume label read from /dev/sdd
  Writing physical volume data to disk "/dev/sdc"
  Physical volume "/dev/sdc" successfully created
  Writing physical volume data to disk "/dev/sdd"
  Physical volume "/dev/sdd" successfully created
  Volume group "vg_test" successfully extended

Диски добавлены. Теперь можно создавать логические разделы. Для примера создадим директорию /data и примонтируем туда созданный нами логический раздел.

root@debian:~# mkdir /data

root@debian:~# lvcreate --name lv_test1 --size 1G vg_test
  Logical volume "lv_test1" created

root@debian:~# lvdisplay
  --- Logical volume ---
  LV Path                /dev/vg_test/lv_test1
  LV Name                lv_test1
  VG Name                vg_test
  LV UUID                5vpTj1-m0bv-oRho-yXpg-vMtl-dCT8-A2BaqN
  LV Write Access        read/write
  LV Creation host, time debian, 2014-04-06 20:59:09 +0400
  LV Status              available
  # open                 0
  LV Size                1.00 GiB
  Current LE             256
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:0

Изменение размеров логического раздела

Как мы видим, у нас теперь есть логический раздел размером 1 гигабайт, размещенный по пути /dev/vg_test/lv_test1 размером 1 гигабайт. Теперь надо создать на нем файловую систему и примонтировать ее в основное дерево файловой системы в точку монтирования /data.

Создание файловой системы:

root@debian:~# mkfs.ext4 /dev/vg_test/lv_test1
mke2fs 1.42.5 (29-Jul-2012)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376

Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

Монтируем:

root@debian:~# mount /dev/vg_test/lv_test1 /data -o rw,defaults

И теперь вы можете видеть файловую систему в выводе команды «df -h», например.

/dev/mapper/vg_test-lv_test1                   1008M   34M  924M   4% /data

Теперь увеличим логический раздел.

root@debian:~# lvextend --size +1G /dev/vg_test/lv_test1
  Extending logical volume lv_test1 to 2.00 GiB
  Logical volume lv_test1 successfully resized

Но в выводе команды «df -h» размер файловой системы мы видим прежний. Это потому, что сам логический раздел увеличился, а размер файловой системы не увеличился.
ВНИМАНИЕ! Изменение размеров без отмонтирования поддерживают не все файловые системы, и с этим надо быть аккуратным. Средства для изменения размеров обычно включаются в пакеты утилит, предназначенных для работы с определенной файловой системой. Например, xfsprogs.

root@debian:~# resize2fs /dev/vg_test/lv_test1
resize2fs 1.42.5 (29-Jul-2012)
Filesystem at /dev/vg_test/lv_test1 is mounted on /data; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/vg_test/lv_test1 to 524288 (4k) blocks.
The filesystem on /dev/vg_test/lv_test1 is now 524288 blocks long.

И теперь в выводе команды «df -h» мы видим правильный размер:

/dev/mapper/vg_test-lv_test1                    2.0G   34M  1.9G   2% /data

Вот и всё, в общем. Надеюсь, принципы работы с LVM вам понятны. Более подробно информацию можно посмотреть в документации к тем командам, которые были использованы.

[wysija_form id=»2″]