Как использовать LVM для управления устройствами хранения в Ubuntu 18.04
Введение
Управление логическими томами, или LVM, – это технология управления устройствами хранения, которая дает пользователям возможность объединять и абстрагировать физическое расположение компонентов устройств хранения для гибкого администрирования. Используя структуру ядра Linux для сопоставления устройств, текущая итерация, LVM2, может использоваться для объединения существующих устройств хранения в группы и выделения логических единиц из объединенного пространства по мере необходимости.
В этом руководстве вы узнаете, как управлять LVM, отображая информацию о томах и потенциальных целях, создавать и уничтожать тома различных типов, а также изменять существующие тома путем изменения размера или преобразования.
Предпосылки
Чтобы продолжить, вам понадобится пользователь без полномочий root с привилегиями sudo
, настроенный на сервере Ubuntu 18.04. Вы можете следовать нашему руководству по первоначальной настройке сервера Ubuntu 18.04, чтобы начать работу.
Кроме того, если вы не знакомы с компонентами и концепциями LVM, вы можете просмотреть наше руководство «Введение в LVM» для получения дополнительной информации.
Когда будете готовы, войдите на сервер под своим пользователем sudo
.
Шаг 1. Отображение информации о физических томах, группах томов и логических томах
Доступ к информации о различных компонентах LVM в вашей системе необходим для управления вашими физическими и логическими томами. LVM предоставляет ряд инструментов для отображения информации о каждом уровне в стеке LVM.
Отображение информации обо всех блочных запоминающих устройствах, совместимых с LVM
Чтобы отобразить все доступные блочные устройства хранения, которыми потенциально может управлять LVM, используйте команду lvmdiskscan
:
- sudo lvmdiskscan
Output /dev/sda [ 200.00 GiB]
/dev/sdb [ 100.00 GiB]
2 disks
2 partitions
0 LVM physical volume whole disks
0 LVM physical volumes
Обратите внимание на устройства, которые потенциально могут использоваться в качестве физических томов для LVM.
Скорее всего, это будет вашим первым шагом при добавлении новых устройств хранения для использования с LVM.
Отображение информации о физических томах
Заголовок записывается на устройства хранения, чтобы пометить их как свободные для использования в качестве компонентов LVM. Устройства с такими заголовками называются физическими томами.
Вы можете отобразить все физические устройства в вашей системе, используя lvmdiskscan
с опцией -l
, которая возвращает только физические тома:
- sudo lvmdiskscan -l
Output WARNING: only considering LVM devices
/dev/sda [ 200.00 GiB] LVM physical volume
/dev/sdb [ 100.00 GiB] LVM physical volume
2 LVM physical volume whole disks
0 LVM physical volumes
Команда pvscan
аналогична тому, что она ищет физические тома LVM на всех доступных устройствах. Выходной формат включает небольшое количество дополнительной информации:
- sudo pvscan
Output PV /dev/sda VG LVMVolGroup lvm2 [200.00 GiB / 0 free]
PV /dev/sdb VG LVMVolGroup lvm2 [100.00 GiB / 10.00 GiB free]
Total: 2 [299.99 GiB] / in use: 2 [299.99 GiB] / in no VG: 0 [0 ]
Если вам нужны дополнительные сведения о вашем томе, команды pvs
и pvdisplay
могут сделать это за вас.
Команда pvs
легко настраивается и может отображать информацию в различных форматах. Поскольку его вывод можно жестко контролировать, он часто используется, когда требуется создание сценариев или автоматизация. Его основной вывод предоставляет полезную краткую сводку, аналогичную предыдущим командам:
- sudo pvs
Output PV VG Fmt Attr PSize PFree
/dev/sda LVMVolGroup lvm2 a-- 200.00g 0
/dev/sdb LVMVolGroup lvm2 a-- 100.00g 10.00g
Для более подробных, удобочитаемых выходных данных хорошим вариантом будет команда pvdisplay
:
- sudo pvdisplay
Output --- Physical volume ---
PV Name /dev/sda
VG Name LVMVolGroup
PV Size 200.00 GiB / not usable 4.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 51199
Free PE 0
Allocated PE 51199
PV UUID kRUOyU-0ib4-ujPh-kAJP-eeQv-ztRL-4EkaDQ
--- Physical volume ---
PV Name /dev/sdb
VG Name LVMVolGroup
PV Size 100.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 25599
Free PE 2560
Allocated PE 23039
PV UUID udcuRJ-jCDC-26nD-ro9u-QQNd-D6VL-GEIlD7
Чтобы обнаружить логические экстенты, сопоставленные с каждым томом, передайте параметр -m
в pvdisplay
:
- sudo pvdisplay -m
Output --- Physical volume ---
PV Name /dev/sda
VG Name LVMVolGroup
PV Size 200.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 51199
Free PE 38395
Allocated PE 12804
PV UUID kRUOyU-0ib4-ujPh-kAJP-eeQv-ztRL-4EkaDQ
--- Physical Segments ---
Physical extent 0 to 0:
Logical volume /dev/LVMVolGroup/db_rmeta_0
Logical extents 0 to 0
Physical extent 1 to 5120:
Logical volume /dev/LVMVolGroup/db_rimage_0
Logical extents 0 to 5119
. . .
Это может быть очень полезно при попытке определить, какие данные хранятся на каком физическом диске для целей управления.
Отображение информации о группах томов
LVM также имеет множество инструментов для отображения информации о группах томов.
Команду vgscan
можно использовать для сканирования системы на наличие доступных групп томов. Он также перестраивает файл кэша, когда это необходимо. Это хорошая команда для импорта группы томов в новую систему:
- sudo vgscan
Output Reading all physical volumes. This may take a while...
Found volume group "LVMVolGroup" using metadata type lvm2
Эта команда не выводит очень много информации, но она должна быть в состоянии найти каждую доступную группу томов в системе. Для отображения дополнительной информации доступны команды vgs
и vgdisplay
.
Как и аналог физического тома, команда vgs
универсальна и может отображать большой объем информации в различных форматах. Поскольку его выводом можно манипулировать, он часто используется, когда необходимы сценарии или автоматизация. Например, некоторые полезные модификации вывода должны отображать физические устройства и путь к логическому тому:
- sudo vgs -o +devices,lv_path
Output VG #PV #LV #SN Attr VSize VFree Devices Path
LVMVolGroup 2 4 0 wz--n- 299.99g 10.00g /dev/sda(0) /dev/LVMVolGroup/projects
LVMVolGroup 2 4 0 wz--n- 299.99g 10.00g /dev/sda(2560) /dev/LVMVolGroup/www
LVMVolGroup 2 4 0 wz--n- 299.99g 10.00g /dev/sda(3840) /dev/LVMVolGroup/db
LVMVolGroup 2 4 0 wz--n- 299.99g 10.00g /dev/sda(8960) /dev/LVMVolGroup/workspace
LVMVolGroup 2 4 0 wz--n- 299.99g 10.00g /dev/sdb(0) /dev/LVMVolGroup/workspace
Аналогичным образом, для получения более подробных, удобочитаемых результатов используйте команду vgdisplay
. Добавление флага -v
предоставляет информацию о физических томах, на которых построена группа томов, и логических томах, которые были созданы с использованием группы томов:
- sudo vgdisplay -v
Output Using volume group(s) on command line.
--- Volume group ---
VG Name LVMVolGroup
. . .
--- Logical volume ---
LV Path /dev/LVMVolGroup/projects
. . .
--- Logical volume ---
LV Path /dev/LVMVolGroup/www
. . .
--- Logical volume ---
LV Path /dev/LVMVolGroup/db
. . .
--- Logical volume ---
LV Path /dev/LVMVolGroup/workspace
. . .
--- Physical volumes ---
PV Name /dev/sda
. . .
PV Name /dev/sdb
. . .
Команда vgdisplay
полезна, потому что она может связать воедино информацию о многих различных элементах стека LVM.
Отображение информации о логических томах
Для отображения информации о логических томах в LVM есть соответствующий набор инструментов.
Как и в случае с другими компонентами LVM, опция lvscan
сканирует систему и выводит минимальную информацию о найденных логических томах:
- sudo lvscan
Output ACTIVE '/dev/LVMVolGroup/projects' [10.00 GiB] inherit
ACTIVE '/dev/LVMVolGroup/www' [5.00 GiB] inherit
ACTIVE '/dev/LVMVolGroup/db' [20.00 GiB] inherit
ACTIVE '/dev/LVMVolGroup/workspace' [254.99 GiB] inherit
Более полную информацию можно найти в гибкой и мощной команде lvs
, которую можно использовать в скриптах:
- sudo lvs
Output LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
db LVMVolGroup -wi-ao---- 20.00g
projects LVMVolGroup -wi-ao---- 10.00g
workspace LVMVolGroup -wi-ao---- 254.99g
www LVMVolGroup -wi-ao---- 5.00g
Чтобы узнать количество полос и тип логического тома, используйте параметр --segments
:
- sudo lvs --segments
Output LV VG Attr #Str Type SSize
db LVMVolGroup rwi-a-r--- 2 raid1 20.00g
mirrored_vol LVMVolGroup rwi-a-r--- 3 raid1 10.00g
test LVMVolGroup rwi-a-r--- 3 raid5 10.00g
test2 LVMVolGroup -wi-a----- 2 striped 10.00g
test3 LVMVolGroup rwi-a-r--- 2 raid1 10.00g
Наиболее удобочитаемый вывод создается командой lvdisplay
.
При добавлении флага -m
инструмент также будет отображать информацию о том, как логический том разбивается и распределяется:
- sudo lvdisplay -m
Output --- Logical volume ---
LV Path /dev/LVMVolGroup/projects
LV Name projects
VG Name LVMVolGroup
LV UUID IN4GZm-ePJU-zAAn-DRO3-1f2w-qSN8-ahisNK
LV Write Access read/write
LV Creation host, time lvmtest, 2016-09-09 21:00:03 +0000
LV Status available
# open 1
LV Size 10.00 GiB
Current LE 2560
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:0
--- Segments ---
Logical extents 0 to 2559:
Type linear
Physical volume /dev/sda
Physical extents 0 to 2559
. . .
В этом примере логический том /dev/LVMVolGroup/projects
полностью содержится в физическом томе /dev/sda
. Эта информация полезна, если вам нужно удалить базовое устройство и переместить данные в определенные места.
Шаг 2 – Создание или расширение компонентов LVM
В этом разделе обсуждается, как создавать и расширять физические тома, группы томов и логические тома.
Создание физических томов из необработанных устройств хранения
Чтобы использовать устройства хранения с LVM, их необходимо сначала пометить как физический том. Это указывает, что LVM может использовать устройство в группе томов.
Во-первых, используйте команду lvmdiskscan
, чтобы найти все блочные устройства, к которым LVM может получить доступ и использовать:
- sudo lvmdiskscan
Output /dev/sda [ 200.00 GiB]
/dev/sdb [ 100.00 GiB]
2 disks
2 partitions
0 LVM physical volume whole disks
0 LVM physical volumes
Здесь обратите внимание на устройства, которые можно превратить в физические тома для LVM.
Предупреждение: убедитесь, что вы еще раз проверили, что на устройства, которые вы собираетесь использовать с LVM, не записаны какие-либо важные данные. Использование этих устройств в LVM перезапишет текущее содержимое. Если у вас есть важные данные на вашем сервере, сделайте резервные копии, прежде чем продолжить.
Чтобы пометить устройства хранения как физические тома LVM, используйте pvcreate
. Вы можете передать сразу несколько устройств:
- sudo pvcreate /dev/sda /dev/sdb
Эта команда записывает заголовок LVM на все целевые устройства, чтобы пометить их как физические тома LVM.
Создание новой группы томов из физических томов
Чтобы создать новую группу томов из физических томов LVM, используйте команду vgcreate
. Вы должны указать имя группы томов, за которым следует хотя бы один физический том LVM:
- sudo vgcreate volume_group_name /dev/sda
В этом примере создается группа томов с одним исходным физическим томом. Вы можете передать более одного физического тома при создании, если хотите:
- sudo vgcreate volume_group_name /dev/sda /dev/sdb /dev/sdc
Обычно для каждого сервера требуется только одна группа томов. Все хранилища, управляемые LVM, могут быть добавлены в этот пул, а затем из него могут быть выделены логические тома.
Одной из причин, по которой вам может понадобиться более одной группы томов, является необходимость использования разных размеров экстентов для разных томов. Обычно вам не нужно устанавливать размер экстента (размер по умолчанию 4M подходит для большинства применений), но если вам нужно, вы можете сделать это при создании группы томов, передав -s
вариант:
- suod vgcreate -s 8M volume_group_name /dev/sda
Это создаст новую группу томов с размером экстента 8M.
Добавление физического тома в существующую группу томов
Чтобы расширить группу томов, добавив дополнительные физические тома, используйте команду vgextend
. Эта команда принимает группу томов, за которой следуют добавляемые физические тома. Вы можете передать несколько устройств одновременно, если хотите:
- sudo vgextend volume_group_name /dev/sdb
Физический том будет добавлен в группу томов, что расширит доступную емкость пула хранения.
Создание логического тома путем указания размера
Чтобы создать логический том из пула хранения группы томов, используйте команду lvcreate
. Укажите размер логического тома с помощью параметра -L
, затем укажите имя с помощью параметра -n
и передайте группу томов, из которой будет выделено пространство.
Например, чтобы создать логический том 10G с именем test
из группы томов LVMVolGroup
, напишите:
- sudo lvcreate -L 10G -n test LVMVolGroup
Если в группе томов достаточно свободного места для размещения емкости тома, будет создан новый логический том.
Создание логического тома из всего оставшегося свободного места
Если вы хотите создать том, используя оставшееся свободное пространство в группе томов, используйте команду vgcreate
с параметром -n
, чтобы назвать и передать группу томов, как предыдущий шаг. Вместо передачи размера используйте параметр -l 100%FREE
, который использует оставшиеся экстенты в группе томов для формирования логического тома:
- sudo lvcreate -l 100%FREE -n test2 LVMVolGroup
Это должно израсходовать оставшееся пространство в логическом томе.
Создание логических томов с дополнительными параметрами
Логические тома можно создавать с некоторыми дополнительными параметрами. Вот некоторые варианты, которые вы, возможно, захотите рассмотреть:
--type
: указывает тип логического тома, который определяет способ его выделения. Некоторые доступные типы будут недоступны, если базовых физических томов недостаточно для корректного создания выбранной топографии. Некоторые из наиболее распространенных типов:линейный
: тип по умолчанию. Базовые используемые физические устройства, если их несколько, будут добавляться друг к другу одно за другим.чередование
. Подобно RAID 0, чередующаяся топология делит данные на фрагменты и распределяет их по базовым физическим томам в циклическом режиме. Это может привести к повышению производительности, но может привести к большей уязвимости данных. Для этого требуется параметр-i
и как минимум два физических тома.raid1
: создает зеркальный том RAID 1. По умолчанию зеркало будет иметь две копии, но с помощью-m
можно указать больше. Для этого требуется как минимум два физических тома.raid5
: создает том RAID 5. Для этого требуется как минимум три физических тома.raid6
: создает том RAID 6. Для этого требуется как минимум четыре физических тома.
Для демонстрации начните с создания чередующегося тома. Для этого метода необходимо указать как минимум две полосы. Для этой топологии и количества полос требуется как минимум два физических тома с доступной емкостью:
- sudo lvcreate --type striped -i 2 -L 10G -n striped_vol LVMVolGroup
Чтобы создать зеркальный том, используйте тип
raid1
. Если вам нужно более двух наборов данных, используйте параметр-m
. В этом примере-m 2
используется для создания всего трех наборов данных. LVM считает это одним исходным набором данных с двумя зеркалами. Для этого вам потребуется как минимум три физических тома:- sudo lvcreate --type raid1 -m 2 -L 20G -n mirrored_vol LVMVolGroup
Чтобы создать моментальный снимок тома, вы должны указать исходный логический том для моментального снимка вместо группы томов. Снапшоты изначально не занимают много места, но увеличиваются в размере по мере внесения изменений в отслеживаемый логический том. Размер, используемый во время этой процедуры, является максимальным размером моментального снимка. Моментальные снимки, размер которых превышает этот размер, ломаются и не могут быть использованы, однако моментальные снимки, приближающиеся к их емкости, могут быть расширены:
- sudo lvcreate -s -L 10G -n snap_test LVMVolGroup/test
Примечание. Чтобы вернуть логический том к состоянию моментального снимка, используйте команду
lvconvert --merge
:- sudo lvconvert --merge LVMVolGroup/snap_test
Это вернет источник моментального снимка в состояние, когда снимок был сделан.
Существует ряд параметров, которые могут существенно изменить способ функционирования ваших логических томов.
Увеличение размера логического тома
Одним из основных преимуществ LVM является гибкость, которую он обеспечивает при предоставлении логических томов. Вы можете настроить количество или размер томов на лету, не останавливая систему.
Чтобы увеличить размер существующего логического тома, используйте команду
lvresize
. Используйте флаг-L
, чтобы указать новый размер. Вы также можете использовать относительные размеры, добавив размер+
. В этом случае LVM увеличит размер логического тома на указанную величину. Чтобы автоматически изменить размер файловой системы, используемой на логическом томе, передайте флаг--resizefs
.Чтобы правильно указать имя расширяемого логического тома, вам необходимо указать группу томов, а затем косую черту, а затем логический том:
- sudo lvresize -L +5G --resizefs LVMVolGroup/test
В этом примере и логический том, и файловая система логического тома
test
в группе томовLVMVolGroup
будут увеличены на 5G.Если вы хотите обрабатывать расширение файловой системы вручную, отключите параметр
--resizefs
и впоследствии используйте встроенную утилиту расширения файловой системы. Например, для файловой системы Ext4 напишите:- sudo lvresize -L +5G LVMVolGroup/test
- sudo resize2fs /dev/LVMVolGroup/test
Это возвращает тот же результат.
Шаг 3 – Удаление или уменьшение компонентов LVM
Поскольку уменьшение емкости может привести к потере данных, процедуры по уменьшению доступной емкости за счет уменьшения размера или удаления компонентов обычно несколько сложнее.
Уменьшение размера логического тома
Чтобы уменьшить логический том, вы должны сначала создать резервную копию своих данных. Поскольку это уменьшает доступную емкость, ошибки могут привести к потере данных.
Когда вы будете готовы, проверьте, сколько места в настоящее время используется:
- df -h
OutputFilesystem Size Used Avail Use% Mounted on . . . /dev/mapper/LVMVolGroup-test 4.8G 521M 4.1G 12% /mnt/testВ этом примере в настоящее время используется чуть более 521 МБ пространства. Используйте это, чтобы помочь вам оценить размер, до которого вы можете уменьшить объем.
В отличие от расширения, сжатие файловой системы должно выполняться при размонтировании. Во-первых, убедитесь, что вы находитесь в корневом каталоге:
- cd ~
Далее размонтируем файловую систему:
- sudo umount /dev/LVMVolGroup/test
После размонтирования проверьте файловую систему, чтобы убедиться, что все в порядке. Передайте тип файловой системы с опцией
-t
. Используйте-f
, чтобы проверить, появляется ли файловая система:- sudo fsck -t ext4 -f /dev/LVMVolGroup/test
После проверки файловой системы вы можете уменьшить размер файловой системы, используя собственные инструменты файловой системы. Для файловых систем Ext4 это будет команда
resize2fs
. Передайте окончательный размер для файловой системы:Предупреждение: самый безопасный вариант здесь — выбрать окончательный размер, который значительно больше вашего текущего использования. Выделите себе место в буфере, чтобы избежать потери данных, и убедитесь, что у вас есть резервные копии.
- sudo resize2fs -p /dev/LVMVolGroup/test 3G
После завершения операции измените размер логического тома, передав тот же размер команде
lvresize
с флагом-L
:- sudo lvresize -L 3G LVMVolGroup/test
Вы предупреждены о возможности потери данных. Если вы готовы, введите
y
, чтобы продолжить.После уменьшения логического тома снова проверьте файловую систему:
- sudo fsck -t ext4 -f /dev/LVMVolGroup/test
Если все работает правильно, вы можете перемонтировать файловую систему, используя обычную команду монтирования:
- sudo mount /dev/LVMVolGroup/test /mnt/test
Теперь ваш логический том должен быть уменьшен до соответствующего размера.
Удаление логического тома
Если вам больше не нужен логический том, вы можете удалить его с помощью команды
lvremove
.Сначала размонтируйте логический том, если он в данный момент смонтирован:
- cd ~
- sudo umount /dev/LVMVolGroup/test
После этого удалите логический том, введя эту команду:
- sudo lvremove LVMVolGroup/test
Вас попросят подтвердить процедуру. Если вы уверены, что хотите удалить логический том, нажмите
y
.Удаление группы томов
Чтобы удалить всю группу томов, включая все входящие в нее логические тома, используйте команду
vgremove
.Перед удалением группы томов следует удалить логические тома, используя описанную ранее процедуру. По крайней мере, вы должны убедиться, что вы размонтировали все логические тома, содержащиеся в группе томов:
- sudo umount /dev/LVMVolGroup/www
- sudo umount /dev/LVMVolGroup/projects
- sudo umount /dev/LVMVolGroup/db
После этого вы можете удалить всю группу томов, передав имя группы томов команде
vgremove
:- sudo vgremove LVMVolGroup
Затем вам будет предложено подтвердить, что вы хотите удалить группу томов. Если у вас все еще есть какие-либо логические тома, вам будут выданы индивидуальные запросы подтверждения для них перед удалением.
Удаление физического тома
Чтобы удалить физический том из-под управления LVM, необходимая процедура зависит от того, используется ли устройство в данный момент LVM.
Если физический том используется, вы должны переместить физические экстенты, расположенные на устройстве, в другое место. Это требует, чтобы в группе томов было достаточно других физических томов для обработки физических экстентов. Если вы используете более сложные типы логических томов, вам могут понадобиться дополнительные физические тома, даже если у вас достаточно свободного места для размещения топологии.
Когда у вас будет достаточно физических томов в группе томов для обработки физических экстентов, переместите их с физического тома, который вы хотите удалить, выполнив:
- sudo pvmove /dev/sda
Этот процесс может занять некоторое время в зависимости от размера томов и объема передаваемых данных.
После перемещения экстентов на одноранговые тома вы можете удалить физический том из группы томов:
- sudo vgreduce LVMVolGroup /dev/sda
Это удалит освободившийся физический том из группы томов. После этого вы можете удалить маркер физического тома с устройства хранения:
- sudo pvremove /dev/sda
Теперь вы можете использовать удаленное запоминающее устройство для других целей или полностью удалить его из системы.
Заключение
Теперь вы понимаете, как управлять устройствами хранения данных в Ubuntu 18.04 с помощью LVM. Вы также знаете, как получить информацию о состоянии существующих компонентов LVM, как использовать LVM для компоновки вашей системы хранения и как модифицировать тома в соответствии с вашими потребностями. Не стесняйтесь проверить эти концепции в безопасной среде, чтобы лучше понять, как они сочетаются друг с другом.