Настройка LVM в Linux, что такое LVM при установке Linux

На большом количестве серверов работающих под управлением Linux используются LVM, позволяющие разделять диск на логические разделы, находящиеся на два уровня выше физических. Применяются LVM особенно часто в технологиях виртуализации.  LVM — logical volume manager. Настройка LVM в Linux является типовой задачей.



Суть создания блочных девайсов — они создаются без первоначального задания размеров устройств

LV можно создать из рейд массивов или из партиций на жестком диске. Партиции или рейд массивы объединятся в VG (volume group), затем из этой группы выделяются логические устройства.

 

Схематически структура выглядит следующим образом (светлым цветом отмены физические диски и партиции — которые могут и не выделяться, темным — группы томов, логические устройства и файловая система, созданная на них перед монтированием ):

настройка LVM в Linux

 

Появляются три уровня абстрацкии: физические диски, volume groups (в которые объединяются физические диски) и logical volume. На втором и третьем уровне элементы можно объединять, увеличивать и уменьшать их размер, монтировать и отмонтировать.

 

 

Партиции для работы с LVM

Прежде всего рассмотрим создание партиций на одном из подключенных дисков — шаг можно пропустить если работа будет производиться непосредственно с дисками, но партиции использовать также удобно. При помощи партиций можно выделить разделы на дисках, которые система будет видеть как отдельные устройства. Автоматически к имени диска будут добавлены порядковые номера /dev/sdb1, /dev/sdb2 и т.д.

 

Инициализируем диск, с которым будем работать при помощи fdisk

fdisk /dev/sdb

Просматриваем существующую структуру разделов

p

Disk /dev/vdc: 5 GiB, 5368709120 bytes, 10485760 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x3aa19e91

 

На диске не выделено партиций, создаем новую

n

Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions

 

Выбираем тип партиции

p

 

Задаем номер раздела (выберется по умолчанию при нажатии ввода)

1

Оставляем настройки разметки диска (указание первого сектора в байтах) по умолчанию

[enter]

Для последнего сектора выбираем необходимое значение, под партицию будет выделено 140 Мб, поэтому выбираем размар в байтах 824500

824500

 

Задаем тип партиции

t

Все возможные типы партиций можно посмотреть введя L, для LVM нам потребуется тип 8e из списка. Данный код означает тип партиции Linux LVM.

8e

 

Таким же образом создаем вторую партицию. Отличиями будут 824500 байт которые система предложит в качестве начального сектора для устройства, при выборе значения, определяющего конец партиции достаточно нажать Enter, под нее зарезервируется все оставшееся место на диске.

 

Вновь просматриваем таблицу

p

Disk /dev/vdb: 5 GiB, 5368709120 bytes, 10485760 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x3aa19e91

Device Boot Start End Sectors Size Id Type
/dev/vdb1 2048 824500 3350 140M 8e Linux LVM
/dev/vdb2 824500 10485759 10482410 4.86G 8e Linux LVM

 

Теперь нужно записать изменения на диск

w

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

 

В обязательном порядке нужно указать тип файловой системы

mkfs.ext4 /dev/vdb1

mkfs.ext4 /dev/vdb2

Проверить все ли сделано корректно можно примонтировав диски в какую-либо точку файловой системы. Например, выполнив mount -t ext4 /dev/vda1 /mnt. Затем нужно отмонитровать используя umount поскольку монтирование происходит при выполнении pvcreate в дальнейшем.

 

Для приведенных на иллюстрации в начале статье дисках /dev/vda и /dev/vdc таким же образом создаются партиции, процесс полностью аналогичен — первый и последний биты сектора выбирать не нужно, партиция для устройств занимает весь объем диска.

 

 

 

Создание логических устройств и настройка LVM в Linux

Устанавливаем необходимый для работы с LVM программный пакет

apt-get install lvm2

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

pvcreate /dev/vdb1

Physical volume «/dev/vdb1» successfully created.

pvcreate /dev/vdb2

Physical volume «/dev/vdb2» successfully created.

 

При необходимости смотрим справку по следующей команде, которую будем использовать

vgcreate —help

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

vgcreate vg1 /dev/vdb1 /dev/vdb2 /dev/vda1 /dev/vdc1

Volume group «vg1» successfully created

 

Просматриваем информацию о логической группе

vgdisplay

Среди прочего в выводе будет размер всех устройств в группе и ее UUID.

 

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

 

 

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

Создаем логические устройства указывая их размер (ключ -L) и имена (ключ -n)

lvcreate -L 1G -n lv1 vg1

Logical volume «lv1» created.

 

lvcreate -L 2G -n lv2 vg1

Logical volume «lv2» created.

 

ls -l /dev/vg1

total 0
lrwxrwxrwx 1 root root 7 окт 13 10:17 lv1 -> ../dm-0
lrwxrwxrwx 1 root root 7 окт 13 10:17 lv2 -> ../dm-1

 

 

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

На каждом нужно создать файловую систему

mkfs.ext4 /dev/vg1/lv1

mkfs.ext4 /dev/vg1/lv2

Создаем при необходимости точки монтирования и монтируем разделы в файловую систему

mount /dev/vg1/lv1 /home

mount /dev/vg1/lv2 /var/lib/mysql

 

lvdisplay

Команда выводит все логические девайсы, используемые в системе (информация предствлена в блоках и сгруппирована по устройствам)

— Logical volume —
LV Path /dev/vg1/lv1
LV Name lv1
VG Name vg1
LV UUID VTP39y-e1Ui-Xawl-h4oQ-Ml3k-CacV-aIiERw
LV Write Access read/write
LV Creation host, time vm-2c6ce884, 2017-10-13 10:17:06 +0000
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 253:0

— Logical volume —
LV Path /dev/vg1/lv2
LV Name lv2
VG Name vg1
LV UUID OPik1D-p0C8-3vyh-auJb-xLbi-f625-0zffvf
LV Write Access read/write
LV Creation host, time vm-2c6ce884, 2017-10-13 10:17:31 +0000
LV Status available
# open 0
LV Size 2,00 GiB
Current LE 512
Segments 1
Allocation inherit
Read ahead sectors auto
— currently set to 256
Block device 253:1

 

Базовая настройка LVM в Linux на этом завершена. Далее рассмотрены операции с логическими томами, сталкиваться с которыми приходится чаще всего.

 

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

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

Создадим файлы в /home, в который смонтировали lv1, их присутствие в файловой системе проверим после того как диск будет расширен

touch /home/{file1.txt,file2.txt}

 

vgdisplay | grep Size

В выводе размер размещенного и неразмещенного пространства vg

VG Size 5,00 GiB
PE Size 4,00 MiB
Alloc PE / Size 768 / 3,00 GiB
Free PE / Size 511 / 2,00 GiB

 

Расширим lv1 поскольку  1 Гб для /home куда обычно помещаются файлы пользователей недостаточно. Используем команду lvextend. Все все свободное пространство использовать система не даст, оставим 100 Мб, остальное используем для расширения lv1

lvextend -L +1,9G /dev/vg1/lv1

Rounding size to boundary between physical extents: 1,90 GiB.
Size of logical volume vg1/lv1 changed from 1,00 GiB (256 extents) to 2,90 GiB (743 extents).
Logical volume vg1/lv1 successfully resized.

 

vgdisplay | grep Size

vgdisplay | grep Size
VG Size 5,00 GiB
PE Size 4,00 MiB
Alloc PE / Size 1255 / 4,90 GiB
Free PE / Size 24 / 96,00 MiB

 

lvdisplay теперь покажет, что под lv1 выделено 2,9 Гб. Созданные файлы остались на месте

ls /home/

file1.txt file2.txt

 

 

При помощи lvremove можно удалить логический девайс и все данные на нем, команду можно выполнить для несуществующего устройства lv3

lvremove /dev/vg1/lv3

Failed to find logical volume «vg1/lv3»

 

 

 

Настройка LVM в Linux и практика выделения разделов

Также рейд массивы и LMV можно устанавливать непосредственно на этапе установки операционной системы

Важное правило — при разметке файловой системы стоит избегать помещения раздела /boot на логический раздел поскольку информация из /boot считывается при старте системы, при размещении на логическом устройстве подобное считывание корректно может не произойти.

 

Часто встречающимся решением является создание рейда 1 на двух дисках с секторами, выделенными под раздел /boot, вне lvm. Остальные диски сервера объединяются в рейд какой-либо конфигурации более эффективной для хранения больших объемов данных. Рейд 1 используется для обеспечения надежности — при выходе из строя одного из дисков загрузочный сектор системы будет считываться с другого.

 

Читайте также про настройки безопасности при подключении к серверу, установка ОС и разметка диска для которого завершены.