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

  • Автор:

LVM-part1-000.pngСовременные системы хранения предъявляют повышенные требования к гибкости управления дисковым пространством и классических дисковых устройств с размещенными на них разделами становится недостаточно. Это привело к созданию многих высокоуровневых инструментов, одним из которых является Менеджер логических томов (Logical volume management) - LVM в Linux. Это простой и мощный инструмент, позволяющий управлять пространством хранения абстрагировавшись от физических устройств и в данной статье мы начнем знакомство с ним.

Что такое LVM и для чего он нужен

Давайте начнем с самого начала и посмотрим, как устроена классическая дисковая система, в ее основе лежат физические устройства хранения: жесткие диски, SSD, RAID-массивы и т.д. Каждое физическое устройство содержит логическую разметку - разделы. Каждый раздел может содержать либо файловую систему, либо вложенные разделы. В любом случае общая емкость разделов ограничена емкостью физического устройства. Ниже показана классическая схема такой разметки.

LVM-part1-001.pngВсе это просто, понятно и хорошо работает ровно до тех пор, пока дискового пространства физического диска достаточно. Если же его станет не хватать, то возникнут первые проблемы. Самым простым решением будет добавить еще один физический диск и перенести на него какой-нибудь из разделов, скажем /home, но при этом на первом физическом диске останется свободная область, которую мы уже не сможем использовать для размещения файлов домашней директории.

Точнее сможем, если смонтируем этот раздел в какую-нибудь вложенную папку, скажем /home/video, но это не решает проблемы, а только добавляет неудобства. Вместо единого дискового пространства мы получаем набор разрозненных сегментов.

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

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

  • PV, Physical volume, физический том - это физический диск, либо раздел на диске, если мы не можем использовать его целиком.
  • VG, Volume group, группа томов - группа томов объединяет в себя физические тома и является следующим уровнем абстракции, представляя собой единое пространство хранения, которое может быть размечено на логические разделы. Эквивалентен обычному диску в классической системе.
  • LV, Logical volume, логический том - логический раздел в группе томов, аналогичен обычном разделу, представляет из себя блочное устройство и может содержать файловую систему.

LVM-part1-002.pngЕсли говорить упрощенно, то между физическими носителями и логическими разделами у нас появилась дополнительная прослойка в виде группы томов, которая объединяет пространства физических дисков в одно логическое, эквивалентное одному большому диску.

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

LVM и RAID

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

Можно ли с помощью LVM реализовать некоторые функции RAID? Можно, но в этом случае либо будут использоваться собственные решения, серьезно уступающие программному RAID Linux (mdraid), либо вызовы будут передаваться модулю md, т.е. тому же самому mdraid.

При этом достаточно сильно пострадает простота и прозрачность управления массивами, что может поставить вас в затруднительное (если не хуже) положение в нештатных ситуациях, особенно если вы не обладаете достаточным опытом работы с LVM.

Поэтому, в строгом соответствии с философией UNIX, мы считаем, что каждый должен выполнять свою задачу и делать это хорошо. Поэтому для создания избыточных дисковых массивов мы будем продолжать использовать программный RAID, а предоставляемые им md-устройства использовать в качестве физических томов LVM.

LVM-part1-003.pngЭкстенты и способы их отображения

Единицей организации дискового пространства в LVM является экстент - некоторая минимальная область данных, которая может быть организована в составе логического тома. Выделить объем менее одного экстента LVM не может. Размер экстента определяется группой томов и зависит от ее объема, минимальный размер экстента 4 МБ, впоследствии это значение остается постоянным для группы томов на всем протяжении ее существования.

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

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

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

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

LVM-part1-004.pngКазалось бы, все понятно, но есть одна особенность. Давайте еще раз посмотрим на схему выше. У нас есть условный логический том содержащий 8 экстентов и два физических, по четыре экстента в каждом. При линейном отображении экстенты распределены между физическими томами последовательно и при заполнении логического тома на 75% мы получим полностью заполненный первый физический том и наполовину заполненный второй.

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

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

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

Решить эту проблему можно при чередующемся способе отображения (stripe, "полосатое"). В этом случае логические экстенты отображаются между физическими томами в порядке чередования, количество полос чередования определяет количество физических томов, которые будут для этого использоваться. По понятным причинам количество полос не может превышать количество физических томов.

LVM-part1-005.pngЧередующееся отображение обеспечивает равномерную нагрузку и заполнение физических дисков, поэтому для твердотельных накопителей следует использовать именно его. Также нетрудно заметить, что такая схема чем-то похожа на RAID 0. Это действительно так и операции чтения-записи можно производить параллельно, достигая более высоких скоростей дисковых операций. По этой причине чередующееся отображение может быть использовано и вместе с HDD в целях повышения производительности тома. Чем больше число полос, тем выше производительность.

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

LVM-part1-006.pngМы расширили существующий логический том с 8 до 16 экстентов. При этом первые 8 экстентов как чередовались между первыми двумя физическими томами, так и продолжили чередоваться. А следующие 8 экстентов стали чередоваться между двумя добавленными физическими томами. Таким образом при заполнении логического тома сначала будут заполнены первые два физических диска, а только затем начнет заполняться вторая пара. Кроме того, если речь идет о твердотельниках, первая пара дополнительно будет испытывать повышенную нагрузку.

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

LVM-part1-007.pngНесомненным достоинством LVM является то, что при должном опыте и знаниях том можно расширить и с изменением числа полос полностью в онлайн-режиме, т.е. не останавливая работы хранилища.

Управление томами в LVM

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

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

LVM-part1-008.png

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

LVM-part1-009.pngДругой довольно распространенный сценарий - замена оборудования. При большом объеме хранящихся данных это может быть не простой задачей. Но LVM снова придет на помощь. Точно также добавляем новые физические тома в группу томов и запускаем специальную операцию по переносу физических экстентов с одного физического тома на другие. Единственное условие - группа томов должна содержать нужное количество свободных экстентов, количество и размер новых дисков роли не играют.

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

LVM-part1-010.pngОбратите внимание, что в отличие от дисковых утилит, которые работают на уровне разделов, LVM перемещает именно физические экстенты и изменяет сопоставление отображения для логических томов. Таким образом если на диске sda (по схеме) у нас находился корневой раздел и часть /home, то именно эти части и будут перенесены на новый диск, перемещать раздел полностью нет никакой необходимости, даже если перемещаемые экстенты отображены куда-нибудь в середину логического тома.

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