Глава 13. Гибкое управление хранилищем при помощи LVM
Содержание
- Глава 13. Гибкое управление хранилищем при помощи LVM
- Технические требования
- Основы LVM
- Создание, перемещение и удаление физических томов
- Комбинирование физических томов в группы томов
- Создание и расширение логических томов
- Добавление новых дисков в группу томов и расширение логического тома
- Удаление логических томов, групп томов и физических томов
- Просмотр команд LVM
- Заключение
При помощи Logical Volume Manager (LVM, Диспетчера логических томов) управление локальным хранилищем может быть выполнено более гибким образом, нежели в Главе 12, Управление локальным хранилищем и файловыми системами. LVM позволяет вам назначать более одного диска одному и тому же тому (который эквивалентен в LVM разделу), обладать реплицируемыми по различным дискам данными и выполнять моментальные снимки некого тома.
В данной главе мы выполним обзор основ применения LVM и самых основных объектов, которые используются для управления хранилищем. Мы изучим как готовить диски под применение с помощью LVM, а затем собирать их в некий пул, тем самым не только увеличивая имеющиеся доступным пространство, но также позволяя применять его согласованно. Также мы изучим как распределять такое агрегированное дисковое пространство в подобные разделам фрагменты, которые запросто можно расширять по мере необходимости. Для этого мы пройдёмся по следующим вопросам:
-
Основы LVM
-
Создание, перемещение и удаление физических томов
-
Комбинирование физических томов в группы томов
-
Создание и расширение логических томов
-
Добавление новых дисков в некую группу томов и расширение логического тома
-
Удаление логических томов, групп томоы и физических томов
-
Обзор команд LVM
Для этой главы мы добавим в свою машину, с которой мы работаем, два дополнительных диска, чтобы иметь возможность следовать упоминаемым в данной главе примерам. Вот ваши варианты:
-
Когда вы пользуетесь физической машиной, вы можете добавить пару накопителей USB
-
Когда вы пользуетесь локальной виртуальной машиной, вам потребуется добавить два новых виртуальных накопителя
-
Если вы применяете экземпляр облачного решения, вы можете добавить в него два новых блочных устройства
В качестве примера, давайте рассмотрим как эти диски добавляются в нашу виртуальную машину в Linux. Прежде всего, мы выключаем свою виртуальную машину, которую мы установили в Главе 1, Установка RHEL8. Затем мы открываем соответствующую страницу характеристик этой виртуальной машины. Там мы обнаруживаем кнопку Add Hardware:
![]() | Совет |
---|---|
В зависимости от применяемой вами платформы виртуализации, существуют различные пути для достижения характеристик вашей виртуальной машины. Тем не менее, наиболее распространено, когда имеется некий вариант непосредственного доступа из самого меню виртуальной машины. |
Кликнув по Add Hardware вы откроете необходимый диалог из показанного ниже снимка экрана. В нём мы выберем вариант Storage и определим значение размера своего подлежащего созданию виртуального диска и подключим его к своей виртуальной машине, в данном случае 1 GiB, а затем кликнем по Finish:
Для добавления двух дисков мы повторим этот процесс дважды. Конечный результат будет выглядеть как- то так:
Теперь мы включим свою виртуальную машину и зарегистрируемся в ней чтобы убедиться в доступности новых устройств:
[root@rhel8 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 252:0 0 10G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 9G 0 part
├─rhel-root 253:0 0 8G 0 lvm /
└─rhel-swap 253:1 0 1G 0 lvm [SWAP]
vdb 252:16 0 1G 0 disk
vdc 252:32 0 1G 0 disk
Мы можем видеть, что наши новые диски по 1 GiB, vdb
и vdc
,
доступны. Теперь, когда у нас имеется системный диск, в котором мы установили операционную систему RHEL 8 и два дополнительных диска для
работы с ними, мы готовы к продолжению этой главы.
![]() | Совет |
---|---|
Именование имеющихся в Linux дисковых устройств зависит от применяемого ими драйвера. Подключаемые к SATA или SCSI устройства
показываются как |
LVM для управления в нашей системе устройствами хранения пользуется тремя уровнями. Эти уровни таковы:
-
Physical Volumes (PV, Физические тома): Самый первый уровень LVM. Назначается непосредственно блочным устройствам. Физический том может быть либо неким разделом на диске, или целиком самим сырым диском.
-
Volume Groups (VG, Группы томов): Второй уровень LVM. Он группирует имеющиеся физические тома в некое собирательное пространство. Это некий промежуточный уровень и он не очень заметен, но его роль очень важна.
-
Logical Volumes (LV, Логические тома): Это третий уровень LVM. Он распределяет имеющееся пространство, которое собирают Группы томов.
Давайте рассмотрим тот пример, который мы желаем реализовать при помощи двух вновь добавленных дисков:
Давайте поясним этот пример схемы чтобы разобраться с нашими тремя уровнями:
-
У нас имеются два диска, которые на диаграмме обозначены как Disk1 и Disk2
-
Disk1 разбит на два раздела, Part1 и Part2.
-
Disk2 не подвергался разбиению на разделы.
-
Имеются три физических тома. Основное их предназначение состоит в подготовке имеющегося дискового пространства для применения в LVM. Вот наши физические тома:
-
PV1, созданный в разделе Part1 на Disk1
-
PV2, созданный в разделе Part2 на Disk1
-
PV3, созданный непосредственно на Disk2
-
-
Одна единственная Группа томов, VG1, агрегирует все три физических тома, PV1, PV2 и PV3. Теперь всё это дисковое пространство консолидировано и запросто может распределяться.
-
Для распределения имеющегося пространства существует четыре логических тома - LV1, LV2, LV3 и LV4. Обратите, пожалуйста, внимание на то, что эти логические тома не используют весь диск целиком. Таким образом, если потребуется расширить некий том или создать моментальный снимок, это будет возможным.
Именно это выступает основой описания того как распределяются имеющиеся уровни, причём не погружаясь в сложные варианты, такие как зеркалирование, динамичное выделение или моментальный снимок.
В качестве отлитого в граните правила нам требуется понимать, что PV (Физические тома) проектируются для подготовки устройств к их применению LVM, VG (Группы томов) для агрегации PV, а LV (Логические тома) для распределения агрегированного пространства.
Интересно отметить тот факт, что если мы создали Группу томов (VG), мы можем добавить в неё некий дополнительный диск, тем самым увеличивая её размер, причём без необходимости останова или перезапуска самой машины. Точно так же мы способны распределять добавленное пространство по имеющимся Логическим томам (LV), которым оно необходимо, причём без необходимости останова или перезапуска их машины. Именно это одна из основных причин почему LVM настолько мощен и рекомендуется для всех серверов, всего лишь с несколькими исключениями.
Теперь, кода мы знакомы с теми уровнями, на которые подразделяется LVM, давайте приступим к их применению чтобы начать разбираться с тем как они работают.
Получив сою машину готовой с двумя новыми дисками, vdb
и vdc
,
как это пояснялось в в нашем разделе Технические требования, мы можем приступить в своей
машине к реализации того примера схемы, который показан на Рисунке 13-4.
Самый первый шаг напрямую не относится к LVM, однако он всё ещё важен для продолжения этого примера. Этот первый шаг вовлекает в себя
разбиение на разделы нашего диска vdb
. Давайте рассмотрим это при помощи инструмента для управления
разделов, parted
:
[root@rhel8 ~]# parted /dev/vdb print
Error: /dev/vdb: unrecognised disk label
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 1074MB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:
![]() | Предостережение |
---|---|
Ваше дисковое устройство, когда вы пользуетесь физической машиной или иным драйвером диска, может быть другим. Например, если бы мы мы
пользовались дисками SATA, оно было бы |
Этот диск совсем не разбит на разделы, что мы можем обнаружить по сообщению unrecognised disk label
.
Как пояснялось в Главе 12, Управление локальным хранилищем и файловыми системами, существует два типа
меток дисков, которые мы можем применять; msdos
(также носящих название
MBR), старого типа, который могут применять для запуска машины с
Basic Input Output System
(BIOS) и gpt
, нового типа, который могут
использовать для запуска машины с Unifed Extensible Firmware Interface
(UEFI). В случае сомнений, пользуйтесь gpt
,
чего мы придерживаемся в данном примере. Для создания при помощи parted
новой метки применяется вариант
mklabel
:
[root@rhel8 ~]# parted /dev/vdb mklabel gpt
Information: You may need to update /etc/fstab.
[root@rhel8 ~]# parted /dev/vdb print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 1074MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
![]() | Совет |
---|---|
Для создания метки |
Теперь у нас имеется диск с меткой gpt
, однако без разделов. Давайте создадим некий раздел, воспользовавшись
параметром mkpart
в интерактивном режиме:
[root@rhel8 ~]# parted /dev/vdb mkpart
Теперь мы можем ввести название этого раздела, mypart0
:
Partition name? []? mypart0
В качестве своего следующего шага определим свою файловую систему, мы воспользуемся ext2
:
File system type? [ext2]? ext2
Теперь самое время установить значение начальной точки. Мы воспользуемся самым первым доступным сектором, а именно
2048s
:
Start? 2048s
![]() | Совет |
---|---|
Самый первый сектор в современных дисках это, по определению, |
И затем мы приступаем к своему заключительному шагу, установке значения конечной точки, которую мы можем описать через значение размера того раздела, который мы хотели бы создать:
End? 200MB
Данная команда завершается со следующим предупреждением:
Information: You may need to update /etc/fstab.
Чтобы гарантировать что имеющаяся таблица разделов обновлена в вашей системе и для того чтобы позволить вашим устройствам вырабатываться
под /dev
, мы можем исполнить такую команду:
[root@rhel8 ~]# udevadm settle
![]() | Совет |
---|---|
Вся команда целиком для запуска не в интерактивном режиме это
|
Мы можем наблюдать доступным свой новый раздел:
[root@rhel8 ~]# parted /dev/vdb print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 1074MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 200MB 199MB mypart0
Чтобы сделать этот раздел доступным для размещения Физических томов LVM
, нам требуется изменить её.
Команда parted
для изменения значения типа раздела пользуется параметром
set
. Нам требуется определить значение числа своих разделов, то есть
1
, а затем тип lvm
и
on
для активации:
root@rhel8 ~]# parted /dev/vdb set 1 lvm on
Information: You may need to update /etc/fstab.
[root@rhel8 ~]# udevadm settle
[root@rhel8 ~]# parted /dev/vdb print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 1074MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 200MB 199MB mypart0 lvm
Теперь мы видим, что значение флага для нашего раздела установлено равным lvm
.
Давайте добавим второй раздел, mypart1
:
[root@rhel8 ~]# parted /dev/vdb mkpart mypart1 xfs \
200MB 100%
Information: You may need to update /etc/fstab.
[root@rhel8 ~]# parted /dev/vdb set 2 lvm on
Information: You may need to update /etc/fstab.
[root@rhel8 ~]# parted /dev/vdb print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 1074MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 200MB 199MB mypart0 lvm
2 200MB 1073MB 872MB mypart1 lvm
Теперь, когда мы создали два раздела, /dev/vdb1
(с именем
mypart0
) и /dev/vdb2
(с именем
mypart1
), вот как выглядит наше хранилище:
![]() | Совет |
---|---|
Имеется и другой инструмент, который поставляется по умолчанию в RHEL 8 для управления разделами, которым является
|
Теперь настало время создавать постоянные тома. Мы будем делать их только во вновь созданных разделах. Прежде всего, мы проверим имеющиеся
доступными постоянные тома при помощи команды pvs
:
[root@rhel8 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/vda2 rhel lvm2 a-- <9,00g 0
Теперь мы продолжим создавать необходимые постоянные тома при помощи pvcreate
:
[root@rhel8 ~]# pvcreate /dev/vdb1
Physical volume "/dev/vdb1" successfully created.
[root@rhel8 ~]# pvcreate /dev/vdb2
Physical volume "/dev/vdb2" successfully created.
И мы снова проверим при помощи pvs
что они были созданы верно:
[root@rhel8 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/vda2 rhel lvm2 a-- <9,00g 0
/dev/vdb1 lvm2 --- 190,00m 190,00m
/dev/vdb2 lvm2 --- 832,00m 832,00m
Обратите внимание на то, что постоянные тома не обладают своими собственными именами, а вместо этого лишь именем того раздела (или устройства)
, в котором они созданы. Мы можем ссылаться на их как на PV1
и
PV2
для отображения на своей схеме.
Вот как выглядит их состояние:
Мы также можем создать некий постоянный том непосредственно в самом дисковом устройстве, vdc
. Давайте
сделаем это:
[root@rhel8 ~]# pvcreate /dev/vdc
Physical volume "/dev/vdc" successfully created.
[root@rhel8 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/vda2 rhel lvm2 a-- <9,00g 0
/dev/vdb1 lvm2 --- 190,00m 190,00m
/dev/vdb2 lvm2 --- 832,00m 832,00m
/dev/vdc lvm2 --- 1,00g 1,00g
Как и в нашем предыдущем примере, для созданного физического тома нет названия, причём мы будем ссылаться на него как на
PV3
. Вот как выглядит полученный результат:
Рисунок 13-7

Созданные в наших двух новых разделах и в нашем новом дисковом устройстве постоянные тома
Теперь, когда у нас имеются необходимые постоянные тома, давайте сгруппируем их в своём следующем разделе при помощи виртуальных групп.
Пришло время создать новую Группу томов (VG) с добавленными ранее нашими физическими томами. Прежде чем сделать это, мы можем проверить
имеющиеся доступными Группы томов при помощи команды vgs
:
[root@rhel8 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
rhel 1 2 0 wz--n- <9,00g 0
Мы можем наблюдать доступной лишь ту Группу томов, которая была создана при установке под нашу операционную систему. Давайте создадим свою
Группу томов storage
воспользовавшись разделами /dev/vdb1
и
/dev/vdb2
при помощи команды vgcreate
:
[root@rhel8 ~]# vgcreate storage /dev/vdb1 /dev/vdb2
Volume group "storage" successfully created
[root@rhel8 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
rhel 1 2 0 wz--n- <9,00g 0
storage 2 0 0 wz--n- 1016,00m 1016,00m
Как вы можете видеть, наша новая Группа томов storage
была создана. Схема текущего состояния
выглядела бы следующим образом:
![]() | Предостережение |
---|---|
Группы томов (VG) это очень тонкий уровень в LVM, чья единственная цель состоит в агрегировании дисков или разделов в некий пул хранения. Всё продвинутое управление таким хранилищем, например, такое как наличие зеркалирования на двух различных дисках, выполняется при помощи логических томов. |
Мы уже подготовили имеющиеся разделы и диски в качестве Физических томов и собрали их в Группы томов, поэтому у нас имеется некий пул дискового пространства. Давайте двинемся далее и в своём следующем разделе изучим как при помощи логических томов может быть выполнено необходимое распределение такого дискового пространства.
В настоящий момент у нас имеется несколько созданных физических томов и два из них сгруппированы в Группу томов. Давайте переместимся на
следующие уровни и проверим эти логические тома при помощи команды lvs
.
[root@rhel8 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rhel -wi-ao---- <8,00g
swap rhel -wi-ao---- 1,00g
Мы видим тома root
и swap
в Группе томов
rhel
, которая размещает саму операционную систему.
Теперь мы можем создать простой логический том с названием data
, с размером 200 МБ, в Группе томов
storage
:
[root@rhel8 ~]# lvcreate --name data --size 200MB storage
Logical volume "data" created.
[root@rhel8 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rhel -wi-ao---- <8,00g
swap rhel -wi-ao---- 1,00g
data storage -wi-a----- 200,00m
Наша конфигурация теперь выглядит так:
Этот созданный логический том является блочным устройством и ведёт себя аналогично дисковому разделу. Таким образом, чтобы его применять, нам
потребуется отформатировать его некой файловой системой. Давайте выполним это отформатировав его в формате
xfs
:
[root@rhel8 ~]# mkfs.xfs /dev/storage/data
meta-data=/dev/storage/data isize=512 agcount=4, agsize=12800 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=51200,imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=1368, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
Discarding blocks...Done.
Теперь он готов к монтированию. Мы можем создать каталог /srv/data
и смонтировать его тут:
[root@rhel8 ~]# mkdir /srv/data
[root@rhel8 ~]# mount -t xfs /dev/storage/data /srv/data
[root@rhel8 ~]# df -h /srv/data/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/storage-data 195M 12M 184M 6% /srv/data
Мы установили своё включаемое в LVM пространство доступным в своей операционной системе. Монтирование файловой системы вручную, как в нашем
предыдущем примере, работает пока эта система не будет выключена или перезапущена. Чтобы превратить её в постоянную, нам потребуется добавить в
/etc/fstab
следующую строку:
/dev/storage/data /srv/data xfs defaults 0 0
Для проверки того, что эта строка записана верно, мы можем выполнить следующие команды. Прежде всего выполним демонтирование этой файловой системы:
[root@rhel8 ~]# umount /srv/data
Проверим размер доступного пространства в этой точке монтирования:
[root@rhel8 ~]# df -h /srv/data/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 8,0G 2,8G 5,3G 35% /
Получаемый вывод этой команды df
(disk free) показывает,
что размер пространства в нашем каталоге /srv/data/
относится к разделу
root
, что подразумевает, что данная папка не обладает никакой связанной с ней файловой системой.
Давайте теперь выполним команду mount
при запуске своей системы:
[root@rhel8 ~]# mount –a
Все находящиеся в /etc/fstab
, которые не смонтированы, будут смонтированы, или же будет отображена
некая ошибка, если имеется некая проблема при их монтировании (например, опечатка в /etc/fstab
).
Давайте проверим что она смонтирована:
[root@rhel8 ~]# df -h /srv/data/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/storage-data 195M 12M 184M 6% /srv/data
![]() | Предостережение |
---|---|
Устройства |
Как мы можем видеть, наша файловая система смонтирована как положено. Теперь, когда нам понятно как создавать Логический том и назначать некую файловую систему и монтировать её в точке, мы можем перейти к более продвинутым задачам, таким как расширение дискового пространства в своих уровнях LVM и за его пределами.
Одним из великолепных моментов в LVM, а более конкретно, Групп томов, это то, что мы можем добавлять в неё новый диск и начинать применять такое вновь
расширенное пространство. Давайте попробуем это, добавляя имеющийся физический том из /dev/vdc
в свою
группу томов storage
:
[root@rhel8 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
rhel 1 2 0 wz--n- <9,00g 0
storage 2 1 0 wz--n- 1016,00m 816,00m
[root@rhel8 ~]# vgextend storage /dev/vdc
Volume group "storage" successfully extended
[root@rhel8 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
rhel 1 2 0 wz--n- <9,00g 0
storage 3 1 0 wz--n- <1,99g 1,79g
Теперь наше распределение дисков выглядит так:
Теперь давайте расширим свой Логический том data
, добавив в него 200 МБ:
[root@rhel8 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rhel -wi-ao---- <8,00g
swap rhel -wi-ao---- 1,00g
data storage -wi-ao---- 200,00m
[root@rhel8 ~]# lvextend --size +200MB /dev/storage/data
Size of logical volume storage/data changed from 200,00 MiB (50 extents) to 400,00 MiB (100 extents).
Logical volume storage/data successfully resized.
[root@rhel8 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rhel -wi-ao---- <8,00g
swap rhel -wi-ao---- 1,00g
data storage -wi-ao---- 400,00m
наш логический том был расширен. Однако имеющаяся поверх него файловая система не расширена:
[root@rhel8 ~]# df -h /srv/data/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/storage-data 195M 12M 184M 6% /srv/data
Нам необходимо расширить свою файловую систему. Применяемый для этого инструмент зависит от типа файловой системы. В нашем случае это
xfs
, а инструмент для её расширения это xfs_growfs
. Давайте
сделаем это:
[root@rhel8 ~]# xfs_growfs /dev/storage/data
meta-data=/dev/mapper/storage-data isize=512 agcount=4, agsize=12800 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=51200 imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=1368 version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 51200 to 102400
[root@rhel8 ~]# df -h /srv/data/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/storage-data 395M 14M 382M 4% /srv/data
И вот, теперь, наша файловая система имеет доступным некоторое добавленной дополнительное пространство.
![]() | Предостережение |
---|---|
При выполнении этой задачи наш Логический том может быть смонтирован и использоваться своей системой. LVM готова выполнять расширения томов в промышленных системах в рабочем состоянии. |
Достаточно просто перераспределять имеющееся пространство и добавлять другой Логический том:
[root@rhel8 ~]# lvcreate --size 100MB --name img storage
Logical volume "img" created.
[root@rhel8 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rhel -wi-ao---- <8,00g
swap rhel -wi-ao---- 1,00g
data storage -wi-ao---- 400,00m
img storage -wi-a----- 100,00m
[root@rhel8 ~]# mkfs.xfs /dev/storage/img
meta-data=/dev/storage/img isize=512 agcount=4, agsize=6400 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=25600 imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=1368, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
Discarding blocks...Done.
[root@rhel8 ~]# mkdir /srv/img
[root@rhel8 ~]# mount -t xfs /dev/storage/img /srv/img
[root@rhel8 ~]# df /srv/img/
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/storage-img 96928 6068 90860 7% /srv/img
[root@rhel8 ~]# df -h /srv/img/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/storage-img 95M 6,0M 89M 7% /srv/img
Параметры --size
и --extents
для используемой команды
lvcreate
обладают некоторыми опциями, которые могут применяться для определения подлежащего
потреблению размера пространства:
-
Human-readable: Мы можем определять значение размера в считываемых человеком блоках, таких как Гигабайты, применяя
GB
или мегабайты, при помощиMB
(иными словами,--size 3GB
). -
Extents: Если мы просто предоставляем некое число после
--extents
, наша команда воспользуется своей внутренней мерой,extents
, что аналогично размеру блока для дисковых разделов (то есть,--extents 125
).
Параметры --size
и --extents
также применимы и к команде
lvextend
. В этом случае, мы можем применять для определения значения нового размера Логического тома те
параметры, которые были показаны ранее для lvcreate
. У нас также имеются и иные опции для определения
приращений пространства для назначения им:
-
Добавление пространства: Если мы предоставим символ
+
перед соответствующим числом дляlvextend
, это увеличит значение размера в предоставляемом измерении (то есть,--size +1GB
добавляет один дополнительный Гигабайт к текущему Логическому тому). -
Процентное соотношение свободного пространства: Мы можем предоставлять значение процентного соотношения свободного пространства подлежащим созданию или расширению применяя
--extents
, и значение процентного соотношения свободного пространства для использования с последующим%FREE
(то есть,--extents 10%FREE
).
![]() | Совет |
---|---|
Как мы это уже наблюдали в иных инструментах, мы можем применять имеющиеся страницы руководства чтобы напоминать себе все имеющиеся
доступными параметры. Чтобы ознакомиться с соответствующими страницами, воспользуйтесь, пожалуйста, |
Мы собираемся создать некий Логический том для его применения в качестве swap (области подкачки), который является частью диска, которую ваша система применяет в качестве пространства парковки для оперативной памяти. Ваша система помещает туда процессы, которые потребляют память и которые не активны с тем, чтобы освобождать имеющуюся физическую память (которая намного быстрее чем диск). Она также применяется когда в вашей системе больше нет свободной физической оперативной памяти.
Давайте создадим в LVM устройство подкачки:
[root@rhel8 ~]# lvcreate --size 100MB --name swap storage
Logical volume "swap" created.
[root@rhel8 ~]# mkswap /dev/storage/swap
Setting up swapspace version 1, size = 100 MiB (104853504 bytes)
no label, UUID=70d07e58-7e8d-4802-8d20-38d774ae6c22
При помощи команды free
мы можем проверить размер памяти и состояние устройства подкачки:
[root@rhel8 ~]# free
total used free shared buff/cache available
Mem: 1346424 218816 811372 9140 316236 974844
Swap: 1048572 0 1048572
[root@rhel8 ~]# swapon /dev/storage/swap
[root@rhel8 ~]# free
total used free shared buff/cache available
Mem: 1346424 219056 811040 9140 316328 974572
Swap: 1150968 0 1150968
![]() | Предостережение |
---|---|
Эти два новых изменения потребуют добавления некой строки для каждого из них в |
Наше распределение дискового пространства будет теперь выглядеть так:
Это распределение выглядит во многом как наш первоначальный пример, который мы применяли для описания уровней LVM. Теперь мы попрактиковались со всеми имеющимися уровнями для создания необходимых в каждом из них фрагментов. Мы знаем как создавать, а потому настало время разобраться в нашем следующем разделе как удалять их.
Чтобы приступить к командам, применяемым для удаления, давайте проделаем простой этап удаления имеющегося Логического тома
img
. Прежде всего нам необходимо убедиться смонтирован ли он:
[root@rhel8 ~]# mount | grep img
/dev/mapper/storage-img on /srv/img type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
Поскольку он смонтирован, нам требуется демонтировать его:
[root@rhel8 ~]# umount /srv/img
[root@rhel8 ~]# mount | grep img
Самая последняя команда отображает пустой вывод, что означает что он не смонтирован. Давайте продолжим удалять его:
[root@rhel8 ~]# lvremove /dev/storage/img
Do you really want to remove active logical volume storage/img? [y/n]: y
Logical volume "img" successfully removed
Теперь мы также можем удалить саму точку монтирования:
[root@rhel8 ~]# rmdir /srv/img
И наше удаление Логического тома выполнено. Это процесс не восстановим, поэтому осуществляйте его аккуратно. Наше распределение дисков выглядит следующим образом:
Теперь пришло время для более сложной задачи, удаления Физического тома из Виртуальной группы. Основная причина для выполнения этого состоит в том,
что порой вы хотите передать все хранящиеся на неком физическом диске данные на другой диск, а затем отсоединить его и удалить из системы. Это
можно сделать, но сначала, давайте добавим некоторые файлы в свой Логический том data
:
[root@rhel8 ~]# cp -ar /usr/share/scap-security-guide \
/srv/data/
[root@rhel8 ~]# ls /srv/data/
scap-security-guide
[root@rhel8 ~]# du -sh /srv/data/
30M /srv/data/
Давайте теперь эвакуируем имеющиеся данные из /dev/vdb1
при помощи команды
pvmove
:
[root@rhel8 ~]# pvmove /dev/vdb1
/dev/vdb1: Moved: 7,75%
/dev/vdb1: Moved: 77,52%
/dev/vdb1: Moved: 100,00%
![]() | Предостережение |
---|---|
В зависимости от имеющегося выделения соответствующих экстентов вы можете получить сообщение, начинающееся с
|
Теперь нет никаких хранимых в /dev/vdb1
данных и он может быть удалён из своей Группы томов. Мы
можем осуществить это при помощи команды vgreduce
:
[root@rhel8 ~]# vgreduce storage /dev/vdb1
Removed "/dev/vdb1" from volume group "storage"
Мы можем обнаружить что теперь в Группе томов нашего хранилища меньше пространства:
root@rhel8 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
rhel 1 2 0 wz--n- <9,00g 0
storage 2 2 0 wz--n- 1,80g 1,30g
[root@rhel8 ~]# vgdisplay storage
--- Volume group ---
VG Name storage
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 20
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 2
Act PV 2
VG Size 1,80 GiB
PE Size 4,00 MiB
Total PE 462
Alloc PE / Size 129 / 516,00 MiB
Free PE / Size 333 / 1,30 GiB
VG UUID 1B6Nil-rvcM-emsU-mBLu-wdjL-mDlw-66dCQU
Мы также можем обнаружить, что наш Физический том, /dev/vdb1
, не подключён ни к какой Группе томов:
[root@rhel8 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/vda2 rhel lvm2 a-- <9,00g 0
/dev/vdb1 lvm2 --- 190,00m 190,00m
/dev/vdb2 storage lvm2 a-- 828,00m 312,00m
/dev/vdc storage lvm2 a-- 1020,00m 1020,00m
[root@rhel8 ~]# pvdisplay /dev/vdb1
"/dev/vdb1" is a new physical volume of "190,00 MiB"
--- NEW Physical volume ---
PV Name /dev/vdb1
VG Name
PV Size 190,00 MiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID veOsec-WV0n-JP9D-WMz8-UYeZ-Zjs6-sJSJst
![]() | Совет |
---|---|
Команды |
Самый важный момент состоит в том, что мы можем осуществлять эти действия пока наша система уверенно выполняет промышленные рабочие нагрузки. Распределение наших дисков теперь выглядит так:
Теперь настало время удалить саму Группу томов, однако нам прежде нужно удалить имеющиеся Логические тома, точно так же как мы это сделали ранее
(не смущайтесь выполнять lvs
и vgs
до и после каждой команды
для проверки хода действий):
[root@rhel8 ~]# swapoff /dev/storage/swap
[root@rhel8 ~]# lvremove /dev/storage/swap
Do you really want to remove active logical volume storage/swap? [y/n]: y
Logical volume "swap" successfully removed
При помощи этого мы удалили /dev/storage/swap
. Давайте теперь удалим
/dev/storage/data
, воспользовавшись параметром --yes
с тем,
чтобы не получали запрос на подтверждение (особенно важно при применении этой команды в неком сценарии)
[root@rhel8 ~]# umount /dev/storage/data
[root@rhel8 ~]# lvremove --yes /dev/storage/data
Logical volume "data" successfully removed
Теперь пришла пора удалить Группу томов storage
:
[root@rhel8 ~]# vgremove storage
Группа томов storage
была успешно удалена.
И, наконец, очищаем свои физические тома:
[root@rhel8 ~]# pvremove /dev/vdb1 /dev/vdb2
Labels on physical volume "/dev/vdb1" successfully wiped.
Labels on physical volume "/dev/vdb2" successfully wiped.
И, выполнив это, мы знаем как работать с каждой из частей LVM в наших системах RHEL8. Давайте сделаем в своём следующем разделе обзор всех применяемых команд.
В качестве итоговой таблицы команд, применяемых для управления Физическими томами давайте взглянем на приводимую ниже таблицу:
Команда | Применение |
---|---|
|
Создаёт Физический том в разделе или диске (также именуемым блочным устройством) |
|
Показывает базовые сведения о Физических томах в вашей системе |
|
Отображает расширенные сведения о Физических томах в вашей системе |
|
Эвакуирует данные с Физического тома, перемещая их на прочие доступные физические тома |
|
Удаляет Физические тома |
Теперь давайте рассмотрим команды, применяемые для управления Группами томов:
Команда | Применение |
---|---|
|
Создаёт Группу томов, сочетающую различные Физические тома |
|
Показывает базовые сведения о Группах томов в вашей системе |
|
Отображает расширенные сведения о Группах томов в вашей системе |
|
Расширяет некую имеющуюся Группу томов, добавляя в неё новые Физические тома |
|
Удаляет эвакуированные Физические тома из Группы томов |
|
Удаляет Группу томов |
И наконец, давайте рассмотрим те команды, которые применяются для управления Логическими томами
Команда | Применение |
---|---|
|
Создаёт Логический том в Группе томов, подготавливая его к форматированию файловой системой |
|
Показывает базовые сведения о Логических томах в вашей системе |
|
Отображает расширенные сведения о Логических томах в вашей системе |
|
Расширяет некий имеющийся Логический том, добавляя в него дополнительное пространство из Группы томов |
|
Удаляет Логический том |
Помните, что для получения дополнительных сведений по параметрам, которые вы бы хотели применять и узнать о новых, вы всегда можете
воспользоваться страницами руководств, доступными для каждой из команд просто исполнив
man <command>
.
![]() | Предостережение |
---|---|
Веб интерфейс администрирования Cockpit имеет некое расширение для управления командами хранилища. Он может быть установлен от имени
|
LVM чрезвычайно полезная часть Red Hat Enterprise Linux и он предоставляет мощные возможности для управления, повторного выделения, распространения и назначения дискового пространства без необходимости останавливать что бы то ни было в вашей системе. Проверенный годами в сражениях, он выступает ключевым компонентом для системных администраторов, а также в качестве средства облегчения включения прочих расширенных возможностей в ваши системы (удобный способ для предоставления хранилищ под совместное применение через iSCSI).
Практика LVM с тестовыми машинами чрезвычайно важна, поскольку мы сможем быть уверенными что соответствующая команды сработает в промышленной системе не будет означать что соответствующая служба подлежит останову или что данные будут утрачены.
В этой главе мы рассмотрели самые простые, но важные, задачи, которые могут выполняться LVM. Мы изучили как работают различные уровни LVM: Физические тома, Группы томов и Логические тома. Кроме того, мы видели как они взаимодействуют друг с другом и как ими можно управлять. Мы попрактиковались с созданием, расширением и удалением Логических томов, Групп томов и Физических томов. Будет важным практиковаться с ними чтобы закрепить полученные навыки и уметь применять их в производственных системах. Однако основа для этого уже имеется.
Теперь давайте перейдём к своей следующей главе чтобы открыть для себя новую функциональную возможность в RHEL8 для последующего улучшения имеющегося уровня хранения за счёт добавления к нему возможностей дедупликации - Virtual Data Optimizer (VDO, Оптимизатора виртуальных данных).