LVM для начинающих. Часть 2. Основы управления томами

  • Автор:

LVM-part2-000-0.pngВ нашей прошлой статье мы рассмотрели теоретические основы LVM, в объеме минимально необходимом для начала работы с этой технологией. Сегодня мы перейдем к практическим сценариям и расскажем, как начать использовать LVM и какие задачи можно решать с его помощью. Основной упор при этом будет сделан на базовые действия с привлечением изложенного в предыдущей части теоретического материала, чтобы читатель не только изучил необходимые команды, но и представлял, что именно и на каком уровне абстракции они делают.

Настраиваем LVM при установке системы

Самый простой способ начать использовать LVM - это настроить его при установке системы, для этого следует выбрать соответствующий пункт в меню разметки диска:

LVM-part2-001.pngДальнейшие действия при автоматической разметке ничем не отличаются от обычной установки, и мы не будем заострять на них внимания.

При ручном разбиении диска следует учесть следующий момент: загрузочный раздел /boot или EFI-раздел должны располагаться за пределами LVM-разметки.

Поэтому сразу создадим в самом начале диска первичный раздел размером 250 МБ с файловой системой ext2 и точкой монтирования /boot, не забываем отметить раздел как загрузочный.

LVM-part2-002.pngДля EFI разметки следует создать первичный радел размером 499 МБ с типом системный раздел EFI, метка загрузочный будет установлена автоматически:

LVM-part2-003.pngСоздав загрузочный раздел можно приступать к настройке LVM, для этого выберите Настройка менеджера логических томов (LVM):

LVM-part2-004.pngВ котором сразу создаем группу томов (VG), рекомендуем давать группам томов и логическим томам понятные имена с использованием сокращений VG и LV, чтобы в дальнейшем было понятно, с чем именно вы имеете дело.

LVM-part2-005.pngВ качестве устройства для группы томов указываем доступное свободное место:

LVM-part2-006.pngЗатем создаем нужное количество логических томов, в нашем случае мы сделали тома для корневого раздела и домашней директории:

LVM-part2-007.pngПосле создания структуры LVM мы возвращаемся в меню разметки дисков и указываем для каждого логического тома используемую файловую систему и точку монтирования:

LVM-part2-008.pngДалее установка продолжается обычным образом, и мы не будем на этом останавливаться.

Ниже мы будем рассматривать разметку, созданную автоматически с выделением /home в отдельный раздел.

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

lsblk

В выводе мы видим загрузочный раздел sda1 размером в 243 МБ, расширенный раздел sda2 в котором располагается логический раздел sda5 используемый под LVM. Также видим три логических тома: root, swap_1 и home.

LVM-part2-009.pngОбратите внимание, что при использовании MBR-разметки система всегда использует расширенный раздел, размещая в нем все остальные разделы, кроме первого. Это связано с ограничением MBR на 4 первичных раздела. При использовании EFI-разметки расширенный раздел не создается и для LVM был бы использован сразу sda2.

Теперь посмотрим информацию об элементах LVM, начнем с физических томов (PV):

pvdisplay

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

LVM-part2-010.pngВас может удивить необычный размер физического тома <19,76 ГБ, с припиской о неиспользуемых 2 МБ. Но в этом нет ничего необычного, если вспомнить, что физический том в LVM - это набор физических экстентов указанного размера и использовать пространство меньше размера экстента не представляется возможным.

Для получения информации о группах томов выполните:

vgdisplay

Здесь мы увидим немного больше информации, кроме размера группы томов и количества физических экстентов в ее составе также указано количество логических и физических томов в группе.

LVM-part2-011.pngИ, наконец, для получения информации о логических томах выполните:

lvdisplay

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

LVM-part2-012.pngДля получения краткой информации о томах LVM можно использовать команды:

pvs | vgs | lvs

LVM-part2-013.png Обращаться к LVM томам можно двумя способами, самый простой по имени устройства группы томов - логического тома, например:

/dev/debian-lvm-vg/home

Либо через виртуальные устройства:

/dev/mapper/debian--lvm--vg-home

Обратите внимание, что все одиночные тире в именах устройств заменяются на двойные, а одиночные служат разделителями.

Настраиваем LVM в установленной системе

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

lsblk

Не ленитесь делать это всегда, как бы вы не были "уверены" в том, что точно знаете какие диски вам нужны. Цена ошибки слишком высока. В нашем случае в системе присутствуют два неразмеченных диска sdb и sdd, которые мы будем использовать для LVM.

LVM-part2-014.pngПрежде всего создадим физические тома, будьте внимательны, это действие уничтожит существующую разметку и все данные на дисках будут потеряны:

pvcreate /dev/sdb /dev/sdd

Затем создадим группу томов:

vgcreate andrey-lvm-vg /dev/sdb /dev/sdd

Синтаксис команды очень прост: указываем имя группы томов и входящие в нее диски.

Теперь можно создавать логические тома. Начнем с самых простых - томов с линейным отображением. Это можно сделать разными методами, например, указав желаемый размер тома:

lvcreate -n myvolume1 -L 10G andrey-lvm-vg

Данная команда создаст логический том с именем myvolume1 (имя указывается в опции -n) и размером в 10 ГБ из экстентов группы томов andrey-lvm-vg.

Но указывать размеры в МБ и ГБ не всегда удобно, как мы помним, в основе LVM лежат экстенты и точный размер в байтах не всегда известен. Поэтому можно указывать относительные значения в процентах от емкости группы томов:

lvcreate -n myvolume1 -l 60%VG andrey-lvm-vg

В нашем случае будет создан логический том размером в 60% от общего размера группы томов. Также можно указывать относительное значение свободного пространства в процентах:

lvcreate -n myvolume2 -l 100%FREE andrey-lvm-vg

Приведенная выше команда создала новый логический том myvolume2 на оставшемся свободном пространстве в группе томов andrey-lvm-vg.

Поставим более сложную задачу - создадим том с чередующимся отображением:

lvcreate -n myvolume3 -l 100%FREE -i 2 andrey-lvm-vg

Как видим, все оказалось просто, за количество полос чередования отвечает опция -i, но помните, что количество полос не должно превышать количество дисков в группе томов, а свободного пространства на них должно хватать для создания логического тома выбранного размера.

Посмотрим информацию о логическом томе, в частности нас будут интересовать сведения о сегментах. Для получения этой информации запустите команду lvdisplay с ключом -m.

LVM-part2-015.pngДанный том состоит из единственного сегмента занимающего логические экстенты от 0 до 10237, которые отображаются в две полосы чередования с размером блока чередования в 64 КБ, этот сегмент отображается на физические экстенты 0 - 5118 каждого из физических томов.

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

LVM-part2-016.pngТеперь у нас имеется два сегмента с набором логических экстентов 0 - 10237 и 10238 - 20475, каждый из которых чередуется в две полосы на дисках sdb, sdd и sde, sdf. Так как логический том выглядит для системы единым пространством, то экстенты будут заполняться преимущественно последовательно и ни о каком выравнивании нагрузки и равномерном заполнении дисков речи не идет, поэтому для SSD таким образом расширять тома не следует.

Созданные разделы следует отформатировать и смонтировать в нужное место файловой системы. Для форматирования в ext4 воспользуемся командой:

mkfs.ext4 /dev/andrey-lvm-vg/myvolume1

После чего раздел можно монтировать, если точка монтирования не существует, то ее нужно создать. Допустим мы хотим смонтировать наш раздел в /mydata, поэтому предварительно создаем каталог:

mkdir /mydata

Для постоянного монтирования раздела внесем соответствующую запись в /etc/fstab, это можно сделать по имени устройства:

/dev/mapper/andrey--lvm--vg-myvolume1    /mydata    ext4     defaults    0    2

или

/dev/andrey-lvm-vg/myvolume1    /mydata    ext4     defaults    0    2

Обе записи при этом будут являться верными. Также можно сделать по-современному, указав тома по UUID, для этого сначала узнаем уникальный идентификатор раздела командой:

blkid /dev/andrey-lvm-vg/myvolume1 

LVM-part2-022.pngЗатем внесем в /etc/fstab строку:

UUID=cc0b7e49-3381-4dfb-9772-3184c7026bd8     /mydata    ext4     defaults    0    2

Чтобы смонтировать разделы без перезагрузки выполним:

mount -a

При отключении или удалении раздела не забудьте убрать соответствующую запись из fstab.

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

Вернемся к конфигурации, созданной при автоматической разметке диска, которую мы рассматривали в начале статьи. Система создала три логических тома: для корневой ФС, подкачки и /home. И вот свободного места в домашней директории стало недостаточно, после чего мы купили и добавили в систему еще один жесткий диск - sdb.

LVM-part2-017.pngСоздадим на базе нового диска физический том:

pvcreate /dev/sdb

И расширим на него существующую группу томов:

vgextend debian-lvm-vg /dev/sdb

Теперь можно расширять логический том:

lvextend -l +50%FREE /dev/debian-lvm-vg/home

В нашем примере мы расширили его на 50% свободного пространства в группе томов. Если посмотреть информацию о логическом томе, то мы увидим, что он теперь состоит из двух сегментов, располагающихся на разных физических дисках.

LVM-part2-018.pngПосле чего следует расширить файловую систему, чтобы она занимала все пространство тома, для семейства ext воспользуйтесь командой:

resize2fs /dev/debian-lvm-vg/home

Часто возникает и обратная необходимость - перераспределить место между разделами, уменьшив размер одного и увеличив другой. На первый взгляд - ничего сложного, но эта операция таит в себе подводные камни. Структуру LVM можно представить в виде матрешки: VG содержит внутри LV, они в свою очередь файловую систему. Поэтому операцию по уменьшению размера следует производить последовательно, от внутренних структур к внешним. Т.е. сначала мы должны уменьшить размер файловой системы, а только затем логического тома, в противном случае файловая система будет разрушена, а данные потеряны.

В данном случае лучше всего оперировать абсолютными значениями в байтах, нежели относительными в процентах, так как при малейшей ошибке вы рискуете потерять все свои данные. Прежде всего уменьшим размер файловой системы раздела /home, в нашем случае до 10 ГБ:

resize2fs /dev/debian-lvm-vg/home 10G

Затем уменьшим до такого же размера логический том:

lvreduce -L 10G /dev/debian-lvm-vg/home

Обратите внимание! В первую очередь всегда уменьшается размер файловой системы, а только затем содержащего ее логического тома, при этом размер тома должен быть больше или равен размеру содержащейся в нем файловой системы. В противном случае произойдет ее разрушение с потерей данных.

В некоторых случаях требуется расширить логический том на вполне определенные физические диски, для этого следует явно их указать в команде расширения:

lvextend -l +5118 /dev/debian-lvm-vg/home /dev/sdb

Указанная команда расширит логический том home на 5118 экстентов с физического тома /dev/sdb, перед выполнением команды следует убедиться, что выбранный том содержит нужное количество свободного пространства, поэтому наиболее удобно использовать свободные экстенты, точное количество которых мы всегда можем узнать получив информацию об указанном физическом томе.

Перемещение логических томов LVM

Еще одна распространенная задача - перемещение томов между физическими дисками. В предыдущем разделе мы расширили логический том home на добавленный нами в LVM диск sdb, при этом его часть так и осталась на sda5. Поставим себе теперь иную задачу: полностью переместить домашнюю директорию на новый диск sdc, а освободившееся пространство на sda5 отдать корневому разделу системы.

Прежде всего создадим на новом диске физический том и добавим его в нужную группу томов:

pvcreate /dev/sdc
vgextend debian-lvm-vg /dev/sdc

Затем переместим экстенты логического тома home на новый диск. Так как sdb не содержит никаких иных логических томов, кроме home, то команда будет проста:

pvmove /dev/sdb /dev/sdc

Она переместит все физические экстенты диска sdb на диск sdc. Для sda5, который содержит три логических тома такой фокус не пройдет, поэтому добавим конкретики:

pvmove -n home /dev/sda5 /dev/sdc

Эта команда переместит все физические экстенты тома с именем home с диска sda5 на диск sdc.

Посмотрим информацию о логическом томе home:

lvdisplay -m /dev/debian-lvm-vg/home

Как можно видеть из вывода он теперь содержит единственный сегмент, который расположен на диске sdc.

LVM-part2-019.pngОтлично, теперь можно расширить корневой раздел. Но нам следует использовать только пространство sda5 и желательно использовать его по максимуму. Как мы уже говорили выше, лучше всего опираться на число свободных экстентов. Чтобы узнать это значение выполним команду:

pvdisplay /dev/sda5

В выводе нас интересует единственный параметр - количество свободных экстентов:

LVM-part2-020.pngЭто число, в отличии от размера в байтах, либо процентов, является абсолютным, и мы можем смело его использовать:

lvextend -l +2874 /dev/debian-lvm-vg/root /dev/sda5

Данная команда расширит логический том root на 2874 физических экстента принадлежащих разделу sda5. Затем не забудем расширить файловую систему:

resize2fs /dev/debian-lvm-vg/root

А теперь посмотрим информацию о логическом томе:

LVM-part2-021.pngТеперь корневой раздел состоит из двух сегментов, расположенных в начале и конце физического тома. Почему так? Вернемся в самое начало статьи и вспомним, что автоматически группа томов была размечена на следующие разделы: root, swap_1 и home. Домашний раздел мы переместили, но swap остался на своем месте и теперь root находится по обе стороны от него, если смотреть на физическом уровне, то мы получим схему root - swap_1 - root.

Для чего мы заостряем внимание на этих моментах? С практической точки зрения не так уж и важно, где именно лежат ваши данные, но это важно для понимания работы LVM, чтобы он перестал быть для вас черным ящиком, и вы могли на практике получить подтверждение теоретическим знаниям из предыдущей статьи.

Удаление дисков из LVM

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

Удаляемый диск не должен содержать логических томов, их следует переместить, либо удалить. Это можно сделать командой

lvremove /dev/andrey-lvm-vg/myvolume1

Которая удалит логический том myvolume1 из группы томов andrey-lvm-vg.

В приведенном выше примере у нас освободился диск sdb в группе томов debian-lvm-vg. Удалим его из группы томов:

vgreduce  debian-lvm-vg /dev/sdb

Ну и наконец удалим LVM-разметку с указанного диска:

pvremove /dev/sdb

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

Заключение

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