На большом количестве серверов работающих под управлением Linux используются LVM, позволяющие разделять диск на логические разделы, находящиеся на два уровня выше физических. Применяются LVM особенно часто в технологиях виртуализации. LVM — logical volume manager. Рассмотрим как выполняется настройка LVM.
Суть создания блочных девайсов — они создаются без первоначального задания размеров устройств
LV можно создать из рейд массивов или из партиций на жестком диске. Партиции или рейд массивы объединятся в VG (volume group), затем из этой группы выделяются логические устройства.
Схематически структура выглядит следующим образом (светлым цветом отмены физические диски и партиции — которые могут и не выделяться, темным — группы томов, логические устройства и файловая система, созданная на них перед монтированием ):
Появляются три уровня абстрацкии: физические диски, volume groups (в которые объединяются физические диски) и logical volume. На втором и третьем уровне элементы можно объединять, увеличивать и уменьшать их размер, монтировать и отмонтировать.
Прежде всего рассмотрим создание партиций на одном из подключенных дисков — шаг можно пропустить если работа будет производиться непосредственно с дисками, но партиции использовать также удобно. При помощи партиций можно выделить разделы на дисках, которые система будет видеть как отдельные устройства. Автоматически к имени диска будут добавлены порядковые номера /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 используется для обеспечения надежности — при выходе из строя одного из дисков загрузочный сектор системы будет считываться с другого.
Читайте также про настройки безопасности при подключении к серверу, установка ОС и разметка диска для которого завершены.