Создание СХД с томами «тонкой» настройки на базе дистрибутива Linux
The concept creating a thin provisioning of data storage on based distribution Linux. The «Thin provisioning» is a popular creation technology for the data storage. The concept of «thin provisioning» is based on «over-allocation» or «over-subscription» mechanism of dynamically allocated data blocks in a two-level model data storage. On the first level a thin pool is formed which includes the «data pool» and «meta pool». The second level consists of virtual volumes for the user space. The full size of virtual volumes can be several times large than the capacity of the thin pool. In the Linux distribution the «Device mapper» module exists acting as a provider of a thin volumes data storage. You can use the «dmsetup» utility or «Logical Volume Management 2» (LVM2) to create and manage the thin provisioning data storage pool and the virtual volumes.
Общее описание, модель хранения данных, основные переменные, пример расчета для СХД с томами «тонкой» настройки на базе дистрибутива Linux.
Тома с «тонкой» настройкой 1 или «подготовкой» (thin provisioning) это виртуальная абстракция устройства хранения данных с заранее определенными параметрами, но имеющим изначально относительно небольшой размер и поддерживающим технологию динамического распределения блоков для хранения данных из общего хранилища.
Они широко применяются в системах хранения данных (СХД) и виртуализации для эффективного использования доступного дискового пространства между пользователями ресурсов с учетом их потребностей.
Данное решение базируется на концепции избыточного распределения, и разработанных на ее основе технологий и механизмов для создания СХД с использованием виртуальной абстракции устройства (файл или блочное устройство).
При этом, формат файла, как виртуальной абстракции устройства хранения данных, содержит в себе полную структуру и содержимое сходную с форматом жёсткого диска, а его размер может быть фиксированным (определено максимальное его значение) или динамическим (размер файла изменяется по мере его заполнения данными до максимального заданного значения).
Если в качестве виртуальной абстракции используется блочное устройство, то, может использоваться одноуровневая или двухуровневая модель хранения данных.
При одноуровневой модели создается виртуальное блочное устройство большой емкости, при начальной инициализации содержащий небольшое количество блоков для хранения данных, дополнительные блоки добавляются из хранилища по мере необходимости (максимальное количество блоков которое может быт добавлено в устройство определяется переменной).
При двухуровневой модели (рисунок 1) создаются две виртуальные абстракции: общий пул хранения данных и виртуальные логические тома для пользователей.

Рисунок 1. Двухуровневая модель.
Распределением блоков для хранения данных из общего пула между виртуальными логическими томами управляет программа-менеджер. В случае необходимости новые блоки для хранения данных добавляются в общий пул, и в автоматическом режиме распределяются между виртуальными логическими томами, исключая необходимость проводить дополнительные манипуляции с ними (например, изменения размера файловой системы). При этом реальный размер каждого виртуального логического томам может превосходить суммарный объем общего пула хранения данных.
В ядре Linux абстракции виртуальных блочных устройств реализуются с помощью модуля «Device mapper» 2 , а начиная с версии ядра 3.2 в него добавлена поддержка динамического выделения места в хранилище данных (thin provisioning) с возможностью реализации двухуровневой модели хранения данных.
При создании СХД с использование томов с «тонкой» настройкой (thin provisioning) 3 на базе дистрибутива Linux необходимо учитывать версию ядра, возможности поддержки требуемого функционала с помощью дополнительных модулей, и расширения общего пула хранения данных с учетом возрастающих потребностей.
Типовая структурная схема включает в себя два основных компонента: пул устройств (или том с “тонкой” настройкой thin pool) объединяющий вместе том метаданных (meta pool) и том данных (data pool) и виртуальные тома (virtual volume) для пространства пользователя. В случае использования менеджера логических томов LVM2 4 , создание пулов томов с “тонкой” настройкой (thin pool) осуществляется в пределах одной Volume Group (VG) (рисунок 2).

Рисунок 2. Типовая структурная схема СХД с томами “тонкой” настройки
При этом несмотря на это ограничение использование LVM2 более предпочтительно так как позволяет использовать дополнительные возможности:
- подключение внешнего хранилища, доступного в режиме только для чтения в качестве основы для создания типовых LVM -разделов, при котором все обращения на чтение не изменённых данных прозрачно транслируются к базовому эталонному хранилищу, а все изменённые или новые данные обрабатываются в отдельном слое в режиме чтения-записи;
- поддержку динамической агрегации метаданных при помощи демона lvmetad;
- поддержку технологии LVM Cache для общих пулов хранения данных;
- работы со снапшотами.
Перед созданием СХД необходимо определить параметры каждого виртуального тома, их суммарный общий объем (переменная $data_dev_size_max), текущий доступный объем для тома данных (переменная $data_dev_size), возможность использования дополнительных накопителей для тома с метаданными (включая возможность резервирования), выбрать программу-менеджер для управления и используя формулы приведенные ниже определить значения ключевых переменных, при этом, для утилиты dmsetup модуля «Device mapper» все значения указываются в количестве блоков, для LVM2 в байтах или других представлениях единиц измерений.
Размер виртуальных томов (virtual volume)
Размер виртуальных томов (virtual volume) для пространства пользователей определяет администратор на основании технического задания или иных предпочтений, однако, при этом суммарный размер виртуальных томов не должен превышать предельно допустимые физические параметры системы хранения данных в целом, в случае необходимости должна быть реализована возможность их расширения с учетом возрастающих потребностей.
Размер фрагмента выделения (chunk size)
$data_block_size=$dev_min_block_size * $count_block, где
$dev_min_block_size – минимальный размер блока данных на устройстве, как правило, это значение равно 512 байт.
$count_block – количество блоков данных которые можно использовать при раздаче, как правило от 128 до 2097152 для обычных томов данных, для сложной структуры 128, для снапшотов от 8 до 1048576.
Размер тома с метаданными
$metadata_dev_size = 48 * $data_dev_size_max / $data_block_size, где
$data_dev_size_max – полный размер тома данных;
$data_block_size – размер фрагмента выделения.
При этом необходимо учитывать, что размер тома для хранения метаданных не может быть меньше 2Мб, и больше 16Гб, рекомендуемое значение по умолчанию 1Гб. Если по итогам расчетов размер тома для хранения метаданных превышает значение 16Гб, рекомендуется создавать несколько пулов хранения данных.
К размещению метаданных тонких томов стоит относится аккуратно, так как, если данное пространство будет исчерпано, то пул будет выдавать ошибки ввода-вывода до тех пор, пока пул не будет переведен в автономный режим, и не будет выполнено восстановление для устранения потенциальных несоответствий. Поэтому, рекомендуется для пространства метаданных использовать отдельное выделенное устройство или несколько устройств с возможностью резервирования (например, объединить их в raid 1), а для повышения производительности использовать твердотельные накопители.
Определение значения переменной $low_water_mark
$low_water_mark = $count_block_sign_error * $data_block_size,
$count_block_sign_error — значение количества свободных блоков в пуле данных при достижении которого выдать сигнал об исчерпании места;
$data_block_size — текущее значение размера блока распределения.
Значение переменной $count_block_sign_error определяется системным администратором исходя из размера пула и критичности его оперативного расширения. Значение переменной $low_water_mark используется для генерации однократного сигнала предупреждения при достижении низкого уровня свободного места в пуле хранения данных.
После выполнения расчета и анализа результатов, если необходимо провести корректировку значения $data_dev_size, определить устройства для хранения данных и метаданных и выполнить первичную сборку и настройку СХД.
Условие:
Необходимо создать хранилище данных для 100 виртуальных машин с томами размером по 50GB для каждой, при наличии физического дискового пространства в 200GB и одного накопителя sdd емкостью 128GB.
- Определим значение переменной $data_dev_size_max:
$data_dev_size_max=100*50*1073741824=5 368 709 120 000 байт - Определим значение переменной $data_dev_size, установив его значение в 98% от максимально возможного (рекомендовано):
$data_dev_size=(200*1073741824)*0.98=210 453 397 504 байт - Определим размер фрагмента выделения значением по умолчанию в 128 блоков по 512 байт:
$data_block_size = 128 * 512 =65 536 байт - Определим размер тома для хранения метаданных:
$metadata_dev_size = 48 * 5 368 709 120 000/65 536 = 3 932 160 000 байт или примерно 3,67GB - Повторим предыдущие два вычисления, изменив исходные данные.
Определим размер фрагмента выделения значением в 256 блоков по 512 байт:
$data_block_size = 256 * 512 = 131 072 байт
Определим размер тома для хранения метаданных:
$metadata_dev_size = 48 * 5 368 709 120 000/131 072 = 1 966 080 000 байт или примерно 1,83GB
Как видно, чем больше размер фрагмента выделения, тем меньше будет необходим том для хранения метаданных. - Определим значения переменной $low_water_mark, установив, ее значение равной 1024 блока:
$low_water_mark = 1024 * 131 072 = 134 217 728 байт или примерно 128МБ
Если это значение критично, то может его увеличить, например до 65 536 блоков:
$low_water_mark = 65 536 * 131 072 = 8 589 934 592 байт или примерно 8ГБ. - Сопоставим полученные результаты с исходными данными и выберем оптимальный вариант для создания пула с “тонкой” настройкой.
Ссылки
4 Logical Volume Manager 2 (LVM2) LVM2
Abstract licensed under Creative Commons Attribution-ShareAlike 3.0 license
Примеры использования LVM
На нашем Youtube-канале вы можете подробнее ознакомиться с информацией по использованию LVM, просмотрев видео Работа с LVM в РЕД ОС, а также найти много другой полезной информации.
Пример №1 — Разметка дисков с помощью LVM
Предположим, что мы имеем два неразмеченных диска подключенных к компьютеру. Теперь попробуем разметить их с помощью LVM и создать структуру, как на схеме.

[user@localhost ~]$ sudo fdisk -l
[sudo] пароль для user:Диск /dev/sda: 32 GiB, 34359738368 байт, 67108864 секторов Единицы: секторов по 1 * 512 = 512 байт Размер сектора (логический/физический): 512 байт / 512 байт Размер I/O (минимальный/оптимальный): 512 байт / 512 байт Тип метки диска: dos Идентификатор диска: 0xfa2fa11b Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип /dev/sda1 * 2048 2099199 2097152 1G 83 Linux /dev/sda2 2099200 67108863 65009664 31G 8e Linux LVMДиск /dev/sdb: 10 GiB, 10737418240 байт, 20971520 секторов Единицы: секторов по 1 * 512 = 512 байт Размер сектора (логический/физический): 512 байт / 512 байт Размер I/O (минимальный/оптимальный): 512 байт / 512 байтДиск /dev/sdc: 10 GiB, 10737418240 байт, 20971520 секторов Единицы: секторов по 1 * 512 = 512 байт Размер сектора (логический/физический): 512 байт / 512 байт Размер I/O (минимальный/оптимальный): 512 байт / 512 байт Диск /dev/mapper/ro-root: 28 GiB, 30056382464 байт, 58703872 секторов Единицы: секторов по 1 * 512 = 512 байт Размер сектора (логический/физический): 512 байт / 512 байт Размер I/O (минимальный/оптимальный): 512 байт / 512 байт Диск /dev/mapper/ro-swap: 3 GiB, 3221225472 байт, 6291456 секторов Единицы: секторов по 1 * 512 = 512 байт Размер сектора (логический/физический): 512 байт / 512 байт Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Команда показывает диски и их разделы. Среди остальных дисков мы видим 2 диска по 10 Гб. Диск /dev/sdb: 10 GiB и Диск /dev/sdc: 10 GiB.
Создание физических томов
Сначала необходимо создать физические тома в окружении LVM из /dev/sdb и /dev/sdc
Для этого используем следующую команду:
[user@localhost ~]$ sudo pvcreate /dev/sdb /dev/sdc
[sudo] пароль для user: Physical volume "/dev/sdb" successfully created. Physical volume "/dev/sdc" successfully created.
Посмотрим, что у нас получилось с помощью команды pvs, которая покажет информацию о физических томах:
[user@localhost ~]$ sudo pvs
PV VG Fmt Attr PSize PFree /dev/sda2 ro lvm2 a--Основные столбцы которые нам интересны:
PV - здесь указываются физические тома
VG - принадлежность к логической группе
Fmt - формат тома
PSize - размер физического том
/dev/sda2 - это физический том, который был создан при установке РЕД ОС и на нем располагается система, но также видим, что создались два новых физических тома - /dev/sdb и /dev/sdc размером 10 Гб и формат их LVM2. Можем также заметить, что пока наши тома не включены ни в какую логическую группу, в отличии от /dev/sda2 который находится в логической группе ro.Более подробную информацию о физических томах выводит команды: pvdisplay
Создание группы логических томов
Итак, физические тома созданы, приступим к созданию логической группы, для этого выполняем команду:[user@localhost ~]$ sudo vgcreate vgdata /dev/sdb /dev/sdc[sudo] пароль для user: Volume group "vgdata" successfully createdздесь vgdata - имя логической группы, /dev/sdb и /dev/sdc - физические тома,
таким образом мы создали логическую группу vgdata из двух физических томов.
Давайте посмотрим информацию о созданной логической группе vgdata
[user@localhost ~]$ sudo vgdisplay vgdata--- Volume group ---VG Name vgdataSystem ID Format lvm2 Metadata Areas 2 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 2 Act PV 2 VG Size 19,99 GiB PE Size 4,00 MiB Total PE 5118 Alloc PE / Size 0 / 0 Free PE / Size 5118 / 19,99 GiB VG UUID rmdGbk-Sy5Y-bPns-ufg4-vyV2-Zvez-8v1ayBОбратите внимание, что размер vgdata стал суммарно равен двум физическим томам, на это указывает поле VG Size.
Создание логических томов
Следующий уровень абстракции это логические тома, которые создаются на логической группе томов.
Создадим три тома как на схеме 1 - mydocs, films и music[user@localhost ~]$ sudo lvcreate -L 5G -n mydocs vgdataВ данной команде:
-L 5G - указывает на размер логического тома;
-n - задает имя тома;
vgdata - указываем на какой группе создавать логический том.С помощью команды lvdisplay выведем детальную информацию о логических томах:
[user@localhost ~]$ sudo lvdisplay--- Logical volume ---LV Path /dev/ro/swapLV Name swap VG Name ro LV UUID O0Y4pj-Xseg-NeCQ-H1yk-nKif-as6R-zR1zKf LV Write Access read/write LV Creation host, time localhost, 2020-06-22 10:46:11 +0300 LV Status available # open 2 LV Size 3,00 GiB Current LE 768 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 254:1--- Logical volume ---LV Path /dev/ro/rootLV Name root VG Name ro LV UUID 9rPYsg-MKbM-DpLK-L1NN-PvcY-RrSm-2aNrV1 LV Write Access read/write LV Creation host, time localhost, 2020-06-22 10:46:12 +0300 LV Status available # open 1 LV Size 27,99 GiB Current LE 7166 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 254:0--- Logical volume ---LV Path /dev/vgdata/mydocsLV Name mydocs VG Name vgdata LV UUID A6q4tK-3KEO-UGla-bj3t-0cZB-3Had-1bBdBH LV Write Access read/write LV Creation host, time localhost.localdomain, 2020-08-07 14:31:14 +0300 LV Status available # open 0LV Size 5,00 GiBCurrent LE 1280 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 254:2Видим три логических тома: /dev/ro/swap - том файла подкчачки , /dev/ro/root - системный корневой раздел и наш только что созданный том /dev/vgdata/mydocs
Создадим второй логический том films:
[user@localhost ~]$ sudo lvcreate -L 10G -n films vgdataДля третьего тома music, используем все оставшееся свободное пространство, для этого в команде укажем параметр -l 100%FREE:
[user@localhost ~]$ sudo lvcreate -l 100%FREE -n music vgdataПосмотрим созданные логические тома, а также группу томов в которую они входят:
[user@localhost ~]$ sudo lvsLV VG Attr LSize root ro -wi-ao---- 27,99g swap ro -wi-ao---- 3,00gfilms vgdata -wi-a----- 10,00g music vgdata -wi-a----- 4,99g mydocs vgdata -wi-a----- 5,00gИз вывода команды видно, что все три логические тома films, music и mydoc входят в группу vgdata.
Более подробный вывод показывает команда lvdisplay .Создание файловой системы и монтирование
Следующим шагом будет создание файловой системы на логических томах и в дальнейшем ее монтирование. Приступим к созданию файловой системы ext4 на логических томах.
Для этого выполним команды:[user@localhost ~]$ sudo mkfs.ext4 /dev/vgdata/mydocs [user@localhost ~]$ sudo mkfs.ext4 /dev/vgdata/films [user@localhost ~]$ sudo mkfs.ext4 /dev/vgdata/musicА теперь смонтируем созданные разделы mydocs, films и music
Но, предварительно создадим для них одноименные каталоги, в качестве точки монтирования.[user@localhost ~]$ sudo mkdir /media/mydocs /media/films /media/musicТеперь выполним команды монтирования:
[user@localhost ~]$ sudo mount /dev/vgdata/mydocs /media/mydocs/ [user@localhost ~]$ sudo mount /dev/vgdata/films /media/films/ [user@localhost ~]$ sudo mount /dev/vgdata/music /media/music/Таким образом мы объединили два физических диска с помощью LVM менеджера в одну логическую группу, затем разделили эту группу на желаемое количество логических томов определенных размеров и создали на них файловую систему.
Пример №2 - Уменьшение размера логического тома
Представим, что нам потребовалось уменьшить раздел films (/dev/vgdata/films), пусть новый размер раздела будет 2 Гб. Посмотрим размеры смонтированных дисков перед уменьшением:
[user@localhost ~]$ sudo df -H Файловая система Размер Испол Дост Испол% /dev/mapper/vgdata-mydocs 5,2G 21M 4,9G 1% /media/mydocs /dev/mapper/vgdata-films 11G 38M 9,9G 1% /media/films /dev/mapper/vgdata-music 5,2G 21M 4,9G 1% /media/musicПеред уменьшением необходимо отмонтировать устройства /dev/vgdata/films:
[user@localhost ~]$ sudo umount /dev/vgdata/filmsТеперь выполним команду уменьшения размера файловой системы до 2 Гб:
[user@localhost ~]$ sudo resize2fs /dev/vgdata/films 2G resize2fs 1.42.9 (28-Dec-2013) Please run 'e2fsck -f /dev/vgdata/films' first.В данной команде параметр 2G указывает на новый желаемый размер, а не на размер на который мы уменьшаем файловую систему. При этом нам предлагается сначала выполнить проверку файловой системы, ок, сделаем это:
[user@localhost ~]$ sudo e2fsck -f /dev/vgdata/films e2fsck 1.42.9 (28-Dec-2013) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/vgdata/films: 11/655360 files (0.0% non-contiguous), 83137/2621440 blocksПробуем еще раз запустить уменьшение:
[user@localhost ~]$ sudo resize2fs /dev/vgdata/films 2G resize2fs 1.42.9 (28-Dec-2013) Resizing the filesystem on /dev/vgdata/films to 524288 (4k) blocks. The filesystem on /dev/vgdata/films is now 524288 blocks long.А теперь изменяем размер логического тома:
[user@localhost ~]$ sudo lvreduce -L 2G /dev/vgdata/films WARNING: Reducing active logical volume to 2,00 GiB. THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce vgdata/films? [y/n]: y Size of logical volume vgdata/films changed from 10,00 GiB (2560 extents) to 2,00 GiB (512 extents). Logical volume vgdata/films successfully resized.Примонтирум раздел и посмотрим размер файловой системы:
[user@localhost ~]$ sudo mount /dev/vgdata/films /media/films/[user@localhost ~]$ sudo df -H /dev/mapper/vgdata-mydocs 5,2G 21M 4,9G 1% /media/mydocs /dev/mapper/vgdata-music 5,2G 21M 4,9G 1% /media/music /dev/mapper/vgdata-films 2,0G 26M 1,9G 2% /media/filmsКак видим новый размер тома films стал 2Гб.
Пример №3 - Увеличение размера логического тома
Перед увеличением размера тома посмотрим свободное место в логической группе:
[user@localhost ~]$ sudo vgdisplay vgdata--- Volume group --- VG Name vgdata System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 11 VG Access read/write VG Status resizable MAX LV 0 Cur LV 3 Open LV 3 Max PV 0 Cur PV 2 Act PV 2 VG Size 19,99 GiB PE Size 4,00 MiB Total PE 5118 Alloc PE / Size 3070 / 11,99 GiBFree PE / Size 2048 / 8,00 GiBVG UUID rmdGbk-Sy5Y-bPns-ufg4-vyV2-Zvez-8v1ayBВидно что в группе свободно 8 Гб, это тот размер который освободился от тома /dev/vgdata/films
Возьмем их и добавим к /dev/vgdata/music, тем самым увеличив размер тома music на 8 Гб. В отличие от уменьшения, увеличение размера логического тома происходит “на лету” без необходимости размонтирования файловой системы. Выполняем команду:
[user@localhost ~]$ sudo lvextend -L +8G /dev/vgdata/music Size of logical volume vgdata/music changed from 4,99 GiB (1278 extents) to 8,00 GiB (2048 extents). Logical volume vgdata/music successfully resized.Теперь необходимо расширить файловую систему на этом логическом томе:
[user@localhost ~]$ sudo resize2fs /dev/vgdata/music resize2fs 1.42.9 (28-Dec-2013) Filesystem at /dev/vgdata/music is mounted on /media/music; on-line resizing required old_desc_blocks = 1, new_desc_blocks = 2 The filesystem on /dev/vgdata/music is now 3405824 blocks long.Смотрим получившейся размер размдела music:
[user@localhost ~]$ sudo df -hФайловая система Размер Использовано Дост Использовано% /dev/mapper/vgdata-mydocs 4,8G 20M 4,6G 1% /media/mydocs /dev/mapper/vgdata-music 13G 25M 13G 1% /media/music /dev/mapper/vgdata-films 1,9G 25M 1,8G 2% /media/filmsПример №4 - Удаление логического тома
Перед удалением логического тома не забудьте сохранить необходимые данные, после этого размонтируйте раздел.
[user@localhost ~]$ sudo umount /dev/vgdata/films[user@localhost ~]$ sudo lvremove /dev/vgdata/films Do you really want to remove active logical volume vgdata/films? [y/n]: y Logical volume "films" successfully removedВ результате на логической группе освободится место.
Пример №5 - Добавление нового диска к группе томов
Для эксперимента мы подключили диск размером 2 Гб к нашей тестовой системе и попробуем включить его в логическую группу LVM - /dev/vgdata
Выведем текущую информацию о дисках:
[user@localhost ~]$ sudo lvmdiskscan /dev/ro/root [ 27,99 GiB] /dev/sda1 [ 1,00 GiB] /dev/ro/swap [ 3,00 GiB] /dev/sda2 [ /dev/sdd [ 2,00 GiB]Новый диск - это /dev/sdd, размер его 2 Гб, но как можем видеть тип его не является LVM physical volume.
А размер группы vgdata равен 20 Гб
[user@localhost ~]$ sudo vgs vgdata VG #PV #LV #SN Attr VSize VFree vgdata 2 2 0 wz--n- 19,99g 2,00gпосле добавления размер группы должен стать 22 Гб. Для начала, как и в первой первом примере про разбивку диска с помощью LVM, нам нужно создать из /dev/sdd физический том. На данный момент мы видим только существующие физические тома куда не входит /dev/sdd
[user@localhost ~]$ sudo lvmdiskscan -l WARNING: only considering LVM devices /dev/sda2 [Выполняем команду создания физического тома:
[user@localhost ~]$ sudo pvcreate /dev/sdd Physical volume "/dev/sdd" successfully created.Добавляем физический том в группу vgdata:
[user@localhost ~]$ sudo vgextend vgdata /dev/sdd Volume group "vgdata" successfully extendedТеперь мы видим, что размер группы увеличился на 2 Гб и свободно 4 Гб,
[user@localhost ~]$ sudo vgs vgdata VG #PV #LV #SN Attr VSize VFree vgdata 3 2 0 wz--n-которые мы можем передать какому либо логическому разделу, тем самым увеличив его. Это мы учились делать в предыдущих примерах.
Пример №6 - Удаление физического диска из группы томов
Рассмотрим следующий пример. Представим, что системному администратору потребовалась заменить жесткий диск на другой. При этом данный диск входит в логическую группу LVM. Поэтому первым шагом необходимо убрать из работающей группы томов этот диск, в нашем случае пусть это будет /dev/sdd
Смотрим текущие состояние /dev/sdd и видим что он входит в группу vgdata и имеет размер 2 Гб.
[user@localhost ~]$ sudo pvs PV VG Fmt Attr PSize PFree /dev/sda2 ro lvm2 a--Прежде чем его удалить, перенесем данные которые на нем записаны:
[user@localhost ~]$ sudo pvmove /dev/sdd No data to move for vgdata.Но, поскольку у нас тестовый стенд и данных на дисках нет, то и команда нам сообщает, что данных для переноса нет. Выполняем следующую команду - это удаление из логической группы диск:
[user@localhost ~]$ sudo vgreduce vgdata /dev/sdd Removed "/dev/sdd" from volume group "vgdata"Удаляем физический диск:
[user@localhost ~]$ sudo pvremove /dev/sdd Labels on physical volume "/dev/sdd" successfully wiped.Теперь видим, что диск удалился:
[user@localhost ~]$ sudo pvs PV VG Fmt Attr PSize PFree /dev/sda2 ro lvm2 a--А значит его можно заменить другим. Как добавить новый диск мы рассмотрели в примере “Пример №5 - Добавление нового диска к группе томов”.
Пример №7 - Расширение корневого раздела типа LVM
Для того чтобы увеличить корневой раздел, используя всё свободное пространство диска sda, необходимо выполнить следующие действия: 1. Проверить состояние файловой системы, доступные разделы и свободное место, используя команду:
fdisk –l
В выводе команды видно, что диск /dev/sda имеет размер 300 ГБ, а раздел /dev/sda2 имеет размер 99 ГБ. На разделе /dev/sda2 расположены lvm-разделы: • корневой(ro-root) — 50 ГБ; • swap (ro-swap) — 7.9 ГБ; • домашний (ro-home) — 41.1 ГБ.
2. Далее необходимо создать новый раздел, воспользовавшись командой:
fdisk /dev/sdaДля создания нового раздела требуется ввести нужную команду («n») и нажать клавишу «Enter». Далее предлагается выбрать тип, который будет установлен для создаваемого раздела, основной («p») или расширенный («е»). В данном случае следует выбрать основной тип – «р». А также необходимо выбрать порядковый номер, который будет присвоен новому разделу, в данном случае – «3». Для секторов можно оставить значения по умолчанию, нажав клавишу «Enter». Затем остаётся внести изменения в таблицу разделов командой «w». После этого терминал сообщает, что изменения в таблицу разделов внесены, а это означает, что новый раздел создан.
Требуется перезагрузка компьютера, чтобы изменения вступили в силу. После перезагрузки следует проверить разделы ещё раз, чтобы убедиться, что внесённые изменения применены, используя команду:
fdisk –l
В выводе команды видно, что появился новый раздел /dev/sda3 размером 200 ГБ.
3. Следующим шагом нужно создать LVM физический том из раздела sda3, набрав команду:
pvcreate /dev/sda3
4. Следует проверить существующую логическую группу, чтобы затем добавить в неё новый физический том. Для этого используются команды:
vgextend ro /dev/sda3
5. Для определения корневого раздела необходимо вывести список существующих логических томов, используя команду:
lvdisplay
В выводе команды видно, что корневой раздел — это /dev/ro/root, его и следует расширить. Для этого используется команда:
lvextend -l +100%FREE /dev/ro/root
После расширения раздела, необходимо изменить размер файловой системы.
6. Для изменения размера файловой системы необходимо выполнить команду:
resize2fs /dev/ro/root
Для просмотра размеров разделов используется команда:
df -h
Как видно из вывода команды, корневой раздел ro-root расширился и имеет размер памяти 246 ГБ.
Эта информация оказалась полезной? ДА НЕТ
Дата последнего изменения: 22.09.2023
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.
Что такое LVM и для чего он используется?
Некоторые дистрибутивы Linux при установке операционной системы вместо обычного раздела предлагают выбрать LVM раздел или даже динамический LVM. Что такое LVM и для чего он используется, если вы новичок в Linux, Ubuntu?
Какие преимущества даёт установка веб-сервера на LVM раздел?
Рекомендуется ли использовать LVM или лучше обычные разделы?
Плюсы LVM
Вы можете думать о LVM как о «динамических разделах», что означает, что вы можете создавать, изменять размер, удалять «разделы» LVM (на языке LVM они называются «логическими томами») из командной строки во время работы системы Linux: нет необходимо перезагрузить систему, чтобы ядро узнало о вновь созданных разделах или разделах с измененным размером.
Другие полезные функции, которые предоставляет LVM «Logical Volumes»:
- Если у вас более одного жёсткого диска, логические тома могут охватывать более одного диска: то есть они не ограничиваются размером одного отдельного диска, а скорее общим совокупным пространством.
- Вы можете настроить «чередующиеся» LV, чтобы ввод-вывод можно было распределять на все диски, на которых размещён LV, параллельно. (Аналогично RAID-0, но немного проще в настройке.)
- Вы можете создать моментальный снимок (только для чтения) любого LV. Вы можете позже вернуть исходный LV к снимку или удалить снимок, если он вам больше не нужен. Это удобно, например, для резервного копирования серверов (вы не можете остановить запись всех своих приложений, поэтому вы создаёте моментальный снимок и делаете резервную копию снимка LV), но также это может использоваться для обеспечения «сети безопасности» перед критическим обновлением системы (клонировать корневой раздел, обновить, откатить изменения, если что-то пошло не так).
Будучи наиболее полезными в серверных системах, я думаю, что функции 1. и 3. в сочетании с возможностью LVM создавать, изменять размер, удалять LV на лету также весьма удобны в настольных системах. (Особенно, если вы много экспериментируете с системой.)
Минусы LVM
Конечно, всё это имеет свою цену: начальная настройка LVM более сложна, чем просто разбиение диска, и вам определённо необходимо понять терминологию и модель LVM (логические тома, физические тома, группы томов), прежде чем вы сможете начать его использовать. (Однако после настройки пользоваться им становится намного проще.)
Кроме того, если вы используете LVM на жёстких дисках, вы можете потерять все свои данные, когда выйдет из строя только один диск.
Что такое LVM
LVM расшифровывается как Logical Volume Management. Это система управления логическими томами или файловыми системами, которая является гораздо более продвинутой и гибкой, чем традиционный метод разделения диска на один или несколько сегментов и форматирования этого раздела с файловой системой.
Зачем использовать LVM?
В течение долгого времени я задавался вопросом, зачем кому-то использовать LVM, если вы можете использовать gparted для изменения размера и перемещения разделов. Ответ в том, что lvm может делать эти вещи лучше, а также некоторые отличные новые вещи, которые вы просто не можете сделать иначе. Я объясню несколько задач, которые может выполнять lvm, и почему он это делает лучше, чем другие инструменты, а затем как их выполнять. Сначала вы должны понять основы lvm.
Основы LVM
LVM управляет тремя концепциями:
- Группы томов
- Физические тома
- Логические тома
Группа томов — это именованный набор физических и логических томов. Типичным системам требуется только одна группа томов, чтобы содержать все физические и логические тома в системе, и мне нравится называть свою группу по имени машины. Физические тома соответствуют дискам; это блочные устройства, которые предоставляют пространство для хранения логических томов. Логические тома соответствуют разделам: они содержат файловую систему. Однако, в отличие от разделов, логические тома получают имена, а не номера, они могут занимать несколько дисков и необязательно должны быть физически смежными.
Специфика LVM
Одно из самых больших преимуществ LVM заключается в том, что большинство операций можно выполнять «на лету», пока система работает. Большинство операций, которые вы можете выполнять с помощью gparted, требуют, чтобы разделы, которыми вы пытаетесь манипулировать, в данный момент не использовались, поэтому для их выполнения вам необходимо загрузиться с livecd. Вы также часто сталкиваетесь с ограничениями формата таблицы разделов msdos с gparted, включая только 4 основных раздела, и все логические разделы должны содержаться в одном непрерывном расширенном разделе.
Изменение размера разделов
С помощью gparted вы можете расширять и сжимать разделы, но только если они не используются. LVM может расширять раздел во время когда диск смонтирован, если файловая система, используемая на нём, также поддерживает это (например, обычный ext3/4). При расширении раздела gparted может расширить его только на соседнее свободное пространство, но LVM может использовать свободное пространство в любом месте группы томов, даже на другом диске. При использовании gparted это ограничение часто означает, что вы должны перемещать другие разделы, чтобы освободить место для расширения одного из них, что является очень трудоёмким процессом, который может привести к значительной потере данных в случае сбоя или прерывания работы (отключение электричества).
Перемещение разделов
Перемещение разделов с помощью gparted обычно необходимо только в первую очередь из-за требования, чтобы разделы были физически смежными, поэтому вам, вероятно, никогда не понадобится делать это с LVM. Если вы это сделаете, в отличие от gparted, LVM может перемещать раздел, пока он используется, и не повредит ваши данные, если операция будет прервана. В случае, если ваша система выйдет из строя или потеряет питание во время перемещения, вы можете просто перезапустить операцию перемещения после перезагрузки, и она завершится нормально. Когда я получил свой SSD-накопитель, я просто подключил его, загрузил и попросил lvm переместить мою работающую корневую файловую систему на новый диск в фоновом режиме, пока я продолжал работать. Другая причина, по которой вы можете захотеть переехать, — это заменить старый диск на новый, большего размера. Вы можете перенести систему на новый диск во время его использования, а затем удалить старый.
Много разделов
Если вам нравится тестировать различные дистрибутивы Linux, или просто другие версии Ubuntu, или и то, и другое приводит к созданию довольно большого числа разделов. С обычными разделами msdos (MBR) это становится проблематичным из-за его ограничений (хотя нужно отметить, что с GPT такой проблемы уже нет). С LVM вы можете создать столько логических томов, сколько захотите, и обычно это довольно просто, поскольку обычно у вас остаётся много свободного места. Обычно люди выделяют весь диск на один раздел при первой установке, но, поскольку расширение раздела с помощью LVM настолько простое, для этого нет никаких причин и вы можете начать с создания раздела не в целый диск. Лучше выделить только то, что, по вашему мнению, вам понадобится, а остальное пространство оставить свободным для использования в будущем. Если в конечном итоге исходное выделенное место закончилось, добавление дополнительного пространства к этому тому — это всего лишь одна команда, которая выполняется немедленно, пока система работает в обычном режиме.
Снимки
Это то, что вы просто не можете сделать без LVM. Это позволяет вам заморозить существующий логический том во времени в любой момент, даже когда система работает. Вы можете продолжать использовать исходный том в обычном режиме, но том с моментальным снимком выглядит как образ оригинала, застывший во времени в момент его создания. Вы можете использовать это, чтобы получить целостный образ файловой системы для резервного копирования, не выключая систему. Вы также можете использовать его для сохранения состояния системы, чтобы позже можно было вернуться в это состояние, если вы что-то напутали. Вы даже можете смонтировать том моментального снимка и внести в него изменения, не затрагивая оригинал.
Как использовать LVM
Итак, как мне начать использовать LVM?
Установщик Linux может предложить вам создать раздел с LVM. Либо перед установкой Linux вы можете создать раздел LVM с помощью LIVE CD. Либо если вы планируете переустановку ОС, вы можете установить пакет lvm2 в существующую систему и вручную настроить LVM.
Во-первых, вам нужен физический том. Обычно вы начинаете с жёсткого диска и создаёте на нем раздел типа LVM. Вы можете создать его с помощью gparted или fdisk и обычно хотите, чтобы только один раздел использовал весь диск, поскольку LVM будет обрабатывать его разделение на логические тома. В gparted вам нужно проверить флаг lvm при создании раздела, а с помощью fdisk пометить тип кодом 8e.
Когда у вас есть раздел LVM, вам необходимо инициализировать его как физический том. Предполагая, что это раздел /dev/sda1:
sudo pvcreate /dev/sda1
Это записывает заголовок LVM в раздел, который идентифицирует его как физический том, и устанавливает небольшую область для хранения метаданных, описывающих всё о группе томов, а остальную часть раздела как неиспользуемые физические экстенты. После этого вам нужно создать группу томов с именем foo:
sudo vgcreate foo /dev/sda1
Теперь у вас есть группа томов с именем foo. Я предлагаю вам заменить foo значимым для вас именем. foo содержит только один физический том. Теперь вы хотите создать логический том из некоторого свободного места в foo:
sudo lvcreate -n bar -L 5g foo
Это создаёт логический том с именем bar в группе томов foo, используя 5 ГБ пространства. Если вы выполняете установку ОС Linux, вы, вероятно, захотите создать логический том, подобный этому, для использования в качестве корневой файловой системы, один для подкачки и, возможно, один для /home. В настоящее время у меня есть логический том для установки Lucid и один для установки Maverick, поэтому я назвал эти тома именно так. Вы можете найти блочное устройство для этого логического тома в '/dev/foo/bar' или 'dev/mapper/foo-bar'.
Вы также можете попробовать команды lvs и pvs, которые перечисляют логические тома и физические тома соответственно, а также их более подробные варианты; lvdisplay и pvdisplay.
Если вы делаете это с рабочего стола livecd, после создания логических томов из терминала вы можете запустить установщик и использовать ручное разбиение на разделы, чтобы выбрать, как использовать каждый логический том, а затем выполнить установку.
Изменение размера разделов
Вы можете расширить логический том с помощью:
sudo lvextend -L +5g foo/bar
Это добавит 5 ГБ к логическому тому bar в группе томов foo. Вы можете указать абсолютный размер, если хотите, вместо относительного, опуская начальный +. Пространство выделяется из любого свободного места в любом месте группы томов bar. Если у вас несколько физических томов, вы можете добавить имена одного или нескольких из них в конец команды, чтобы ограничить, какие из них следует использовать для удовлетворения запроса.
После расширения логического тома вам необходимо расширить файловую систему, чтобы использовать новое пространство. Для ext 3/4 вы просто запустите:
sudo resize2fs /dev/foo/bar
Перемещение разделов
Если у вас есть только один физический том, вам, вероятно, никогда не придётся перемещать его, но если вы добавите новый диск, возможно, вы захотите это сделать. Чтобы переместить логический том bar из физического тома /dev/sda1, выполните:
sudo pvmove -n bar /dev/sda1
Если вы опустите аргумент -n bar, все логические тома на физическом томе /dev/sda1 будут перемещены. Если у вас есть только один другой физический том, то он будет перемещён туда, или вы можете добавить имя одного или нескольких конкретных физических томов, которые должны использоваться для удовлетворения запроса, вместо любого физического тома в группе томов со свободным местом. Этот процесс можно безопасно возобновить, если он прерван из-за сбоя или отключения питания, и его можно выполнить, пока используются соответствующие логические тома. Вы также можете добавить -b, чтобы выполнить перемещение в фоновом режиме и немедленно вернуться, или -i СЕКУНДЫ, чтобы он печатал, какой прогресс он сделал каждые СЕКУНДЫ секунд. Если вы выбрали фоновый режим перемещения, вы можете проверить его ход с помощью команды lvs.
Снимки
Когда вы создаёте моментальный снимок, вы создаёте новый логический том, который будет действовать как клон исходного логического тома. Том моментального снимка изначально не использует никакого пространства, но по мере внесения изменений в исходный том изменённые блоки копируются в том моментального снимка перед их изменением, чтобы сохранить их. Это означает, что чем больше изменений вы вносите в исходную точку, тем больше места требуется для снимка. Если том моментального снимка использует всё выделенное ему пространство, то моментальный снимок повреждается и больше не может использоваться, оставляя вас только с измененным источником. Команда lvs сообщит вам, сколько места было использовано в логическом томе моментального снимка. Если он начинает заполняться, вы можете расширить его с помощью команды lvextend. Чтобы создать моментальный снимок логического тома bar и назвать его snap, запустите:
sudo lvcreate -s -n snap -L 5g foo/bar
Это создаст моментальный снимок с именем snap оригинального логического тома bar и выделит для него 5 ГБ пространства. Поскольку том моментального снимка хранит только те области диска, которые изменились с момента его создания, он может быть намного меньше исходного тома. Недавно я использовал моментальный снимок логического тома объёмом 12 Гбайт, содержащий мою корневую файловую систему Maverick, и выполнил dist-upgrade до Natty в источнике, который использовал только около 50-60% пространства моментального снимка.
Пока у вас есть моментальный снимок, вы можете смонтировать его, если хотите, и увидите исходную файловую систему такой, какой она была на момент создания моментального снимка. В приведённом выше примере вы должны смонтировать устройство /dev/foo/snap. Вы можете изменить снимок, не затрагивая оригинал, и изменит оригинал оригинал, не затрагивая снимок. Если вы сделаете снимок корневого логического тома, а затем обновите некоторые пакеты или целый дистрибутив до следующего выпуска, а затем решите, что вам не нравится, как он работает, вы можете объединить снимок обратно в исходный том, эффективно вернувшись к состоянию во время создания снимка. Для этого просто запустите:
sudo lvconvert --merge foo/snap
Если исходный том foo/snap уже используется, он сообщит вам, что слияние произойдёт при следующей активации томов. Если это корневой том, вам необходимо перезагрузить компьютер, чтобы это произошло. При следующей загрузке том будет активирован, и слияние начнётся в фоновом режиме, поэтому ваша система загрузится так, как будто вы никогда не вносили изменений с момента создания моментального снимка, а фактическое перемещение данных будет происходить в фоновом режиме, пока вы работаете в обычном режиме.
Связанные статьи:
- Как в Linux подключить новый диск, разметить и отформатировать разделы (67.5%)
- Как проверить дисковое пространство на Linux с командой df (51.2%)
- Диск Windows монтируется только для чтения (РЕШЕНО) (51.2%)
- Команда findmnt для просмотра смонтированных файловых систем в Linux (51.2%)
- 8 способов определить тип файловой системы в Linux (Ext2, Ext3 или Ext4, FAT32, NTFS) (51.2%)
- ncdu: графический интерфейс du чтобы быстро узнать, какие файлы и папки израсходовали место на диске (RANDOM - 50%)
Менеджер логических томов LVM
Logical Volume Manager (LVM) – это система управления дисковым пространством, абстрагирующаяся от физических устройств. Она позволяет создавать поверх физических разделов (или даже неразбитых винчестеров) логические тома, которые в самой системе будут видны как обычные блочные устройства с данными (т.е. как обычные разделы). Основные преимущества LVM в том, что, во-первых, одну группу логических томов можно создавать поверх любого количества физических разделов, а во-вторых, размер логических томов можно легко менять прямо во время работы.
Кроме того, LVM поддерживает механизм снапшотов, управление разделами «на лету» и зеркалирование, подобное RAID-1.

Из схемы на рисунке 1 видно, что в самом низу рисунка располагаются физические устройства — жесткие диски. Далее начинается зона LVM, а именно – создаются физические тома (PV) из разделов жесткого диска, которые потом объединяются в логические группы (VG). В качестве примера на схеме представлена единая логическая группа vgdata (/dev/vgdata), а уже на следующем уровне эта группа разбита на логические тома (LV), на которых могут быть созданы файловые системы.
PV, Physical volume, физический том. Обычно это раздел на диске или весь диск. В том числе, устройства программного и аппаратного RAID (которые уже могут включать в себя несколько физических дисков). Физические тома входят в состав группы томов.
VG, Volume group, группа томов. Это самый верхний уровень абстрактной модели, используемой системой LVM. С одной стороны группа томов состоит из физических томов, с другой – из логических и представляет собой единую административную единицу.
LV, Logical volume, логический том. Раздел группы томов, эквивалентен разделу диска в не-LVM-системе. Представляет собой блочное устройство и, как следствие, может содержать файловую систему.
PE, Physical extent, физический экстент. Каждый физический том делится на порции данных, называющиеся физическими экстентами. Их размеры те же, что и у логических экстентов.
LE, Logical extent, логический экстент. Каждый логический том делится на порции данных, называющиеся логическими экстентами. Размер логических экстентов не меняется в пределах группы томов.
Механизмы работы LVM
Снапшоты
Снапшот - моментальный снимок, копия файлов и каталогов файловой системы на определённый момент времени.
Снимки диска позволят откатить состояние на определенный момент. Это может послужить быстрым вариантом резервного копирования. Однако нужно понимать, что данные хранятся на одном и том же физическом носителе, а значит, данный способ не является полноценным резервным копированием.
Управление разделами «на лету»
LVM увеличивает удобство работы с жестким диском, аппаратные особенности работы скрываются программным обеспечением, поэтому можно изменять размеры дисков, перемещать их «на лету», без остановки приложений или размонтирования файловых систем. Это очень удобно на серверах, когда есть возможность добавить еще один диск или расширить существующие lvm-тома «на лету».
LVM работает на уровне ядра, поэтому гарантируется максимальная прозрачность настройки и использования дисков. Программы смогут работать с логическими, виртуальными LVM-разделами, точно так же, как и с обычными.
Зеркалирование
С помощью LVM можно создать зеркальный том — данные, которые мы будем на нем сохранять, будут отправляться на 2 диска. Таким образом, если один из дисков выходит из строя, мы не потеряем свои данные.
Зеркалирование томов выполняется из группы, где есть, минимум, 2 диска.
Система управления логическими томами особенно полезна в работе с серверами, поскольку обеспечивает масштабируемость и удобное управление дисковым пространством. Она упрощает планирование дискового пространства и предотвращает проблемы, возникающие при неожиданно быстром росте занятого места в разделах. LVM не предназначен для обеспечения отказоустойчивости или высокой производительности. Поэтому он часто используется в сочетании с системами RAID.
Примеры использования LVM в РЕД ОС см. в этой статье.
Эта информация оказалась полезной? ДА НЕТ
Дата последнего изменения: 25.11.2022
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.









