Поиск по сайту:

Как использовать 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:

  1. 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, которая возвращает только физические тома:

  1. 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 на всех доступных устройствах. Выходной формат включает небольшое количество дополнительной информации:

  1. 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 легко настраивается и может отображать информацию в различных форматах. Поскольку его вывод можно жестко контролировать, он часто используется, когда требуется создание сценариев или автоматизация. Его основной вывод предоставляет полезную краткую сводку, аналогичную предыдущим командам:

  1. 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:

  1. 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:

  1. 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 можно использовать для сканирования системы на наличие доступных групп томов. Он также перестраивает файл кэша, когда это необходимо. Это хорошая команда для импорта группы томов в новую систему:

  1. sudo vgscan
Output
Reading all physical volumes. This may take a while... Found volume group "LVMVolGroup" using metadata type lvm2

Эта команда не выводит очень много информации, но она должна быть в состоянии найти каждую доступную группу томов в системе. Для отображения дополнительной информации доступны команды vgs и vgdisplay.

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

  1. 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 предоставляет информацию о физических томах, на которых построена группа томов, и логических томах, которые были созданы с использованием группы томов:

  1. 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 сканирует систему и выводит минимальную информацию о найденных логических томах:

  1. 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, которую можно использовать в скриптах:

  1. 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:

  1. 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 инструмент также будет отображать информацию о том, как логический том разбивается и распределяется:

  1. 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 может получить доступ и использовать:

  1. 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. Вы можете передать сразу несколько устройств:

  1. sudo pvcreate /dev/sda /dev/sdb

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

Создание новой группы томов из физических томов

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

  1. sudo vgcreate volume_group_name /dev/sda

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

  1. sudo vgcreate volume_group_name /dev/sda /dev/sdb /dev/sdc

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

Одной из причин, по которой вам может понадобиться более одной группы томов, является необходимость использования разных размеров экстентов для разных томов. Обычно вам не нужно устанавливать размер экстента (размер по умолчанию 4M подходит для большинства применений), но если вам нужно, вы можете сделать это при создании группы томов, передав -s вариант:

  1. suod vgcreate -s 8M volume_group_name /dev/sda

Это создаст новую группу томов с размером экстента 8M.

Добавление физического тома в существующую группу томов

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

  1. sudo vgextend volume_group_name /dev/sdb

Физический том будет добавлен в группу томов, что расширит доступную емкость пула хранения.

Создание логического тома путем указания размера

Чтобы создать логический том из пула хранения группы томов, используйте команду lvcreate. Укажите размер логического тома с помощью параметра -L, затем укажите имя с помощью параметра -n и передайте группу томов, из которой будет выделено пространство.

Например, чтобы создать логический том 10G с именем test из группы томов LVMVolGroup, напишите:

  1. sudo lvcreate -L 10G -n test LVMVolGroup

Если в группе томов достаточно свободного места для размещения емкости тома, будет создан новый логический том.

Создание логического тома из всего оставшегося свободного места

Если вы хотите создать том, используя оставшееся свободное пространство в группе томов, используйте команду vgcreate с параметром -n, чтобы назвать и передать группу томов, как предыдущий шаг. Вместо передачи размера используйте параметр -l 100%FREE, который использует оставшиеся экстенты в группе томов для формирования логического тома:

  1. sudo lvcreate -l 100%FREE -n test2 LVMVolGroup

Это должно израсходовать оставшееся пространство в логическом томе.

Создание логических томов с дополнительными параметрами

Логические тома можно создавать с некоторыми дополнительными параметрами. Вот некоторые варианты, которые вы, возможно, захотите рассмотреть:

  • --type: указывает тип логического тома, который определяет способ его выделения. Некоторые доступные типы будут недоступны, если базовых физических томов недостаточно для корректного создания выбранной топографии. Некоторые из наиболее распространенных типов:
    • линейный: тип по умолчанию. Базовые используемые физические устройства, если их несколько, будут добавляться друг к другу одно за другим.
    • чередование. Подобно RAID 0, чередующаяся топология делит данные на фрагменты и распределяет их по базовым физическим томам в циклическом режиме. Это может привести к повышению производительности, но может привести к большей уязвимости данных. Для этого требуется параметр -i и как минимум два физических тома.
    • raid1: создает зеркальный том RAID 1. По умолчанию зеркало будет иметь две копии, но с помощью -m можно указать больше. Для этого требуется как минимум два физических тома.
    • raid5: создает том RAID 5. Для этого требуется как минимум три физических тома.
    • raid6: создает том RAID 6. Для этого требуется как минимум четыре физических тома.

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

    1. sudo lvcreate --type striped -i 2 -L 10G -n striped_vol LVMVolGroup

    Чтобы создать зеркальный том, используйте тип raid1. Если вам нужно более двух наборов данных, используйте параметр -m. В этом примере -m 2 используется для создания всего трех наборов данных. LVM считает это одним исходным набором данных с двумя зеркалами. Для этого вам потребуется как минимум три физических тома:

    1. sudo lvcreate --type raid1 -m 2 -L 20G -n mirrored_vol LVMVolGroup

    Чтобы создать моментальный снимок тома, вы должны указать исходный логический том для моментального снимка вместо группы томов. Снапшоты изначально не занимают много места, но увеличиваются в размере по мере внесения изменений в отслеживаемый логический том. Размер, используемый во время этой процедуры, является максимальным размером моментального снимка. Моментальные снимки, размер которых превышает этот размер, ломаются и не могут быть использованы, однако моментальные снимки, приближающиеся к их емкости, могут быть расширены:

    1. sudo lvcreate -s -L 10G -n snap_test LVMVolGroup/test

    Примечание. Чтобы вернуть логический том к состоянию моментального снимка, используйте команду lvconvert --merge:

    1. sudo lvconvert --merge LVMVolGroup/snap_test

    Это вернет источник моментального снимка в состояние, когда снимок был сделан.

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

    Увеличение размера логического тома

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

    Чтобы увеличить размер существующего логического тома, используйте команду lvresize. Используйте флаг -L, чтобы указать новый размер. Вы также можете использовать относительные размеры, добавив размер +. В этом случае LVM увеличит размер логического тома на указанную величину. Чтобы автоматически изменить размер файловой системы, используемой на логическом томе, передайте флаг --resizefs.

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

    1. sudo lvresize -L +5G --resizefs LVMVolGroup/test

    В этом примере и логический том, и файловая система логического тома test в группе томов LVMVolGroup будут увеличены на 5G.

    Если вы хотите обрабатывать расширение файловой системы вручную, отключите параметр --resizefs и впоследствии используйте встроенную утилиту расширения файловой системы. Например, для файловой системы Ext4 напишите:

    1. sudo lvresize -L +5G LVMVolGroup/test
    2. sudo resize2fs /dev/LVMVolGroup/test

    Это возвращает тот же результат.

    Шаг 3 – Удаление или уменьшение компонентов LVM

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

    Уменьшение размера логического тома

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

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

    1. df -h
    Output
    Filesystem Size Used Avail Use% Mounted on . . . /dev/mapper/LVMVolGroup-test 4.8G 521M 4.1G 12% /mnt/test

    В этом примере в настоящее время используется чуть более 521 МБ пространства. Используйте это, чтобы помочь вам оценить размер, до которого вы можете уменьшить объем.

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

    1. cd ~

    Далее размонтируем файловую систему:

    1. sudo umount /dev/LVMVolGroup/test

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

    1. sudo fsck -t ext4 -f /dev/LVMVolGroup/test

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

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

    1. sudo resize2fs -p /dev/LVMVolGroup/test 3G

    После завершения операции измените размер логического тома, передав тот же размер команде lvresize с флагом -L:

    1. sudo lvresize -L 3G LVMVolGroup/test

    Вы предупреждены о возможности потери данных. Если вы готовы, введите y, чтобы продолжить.

    После уменьшения логического тома снова проверьте файловую систему:

    1. sudo fsck -t ext4 -f /dev/LVMVolGroup/test

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

    1. sudo mount /dev/LVMVolGroup/test /mnt/test

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

    Удаление логического тома

    Если вам больше не нужен логический том, вы можете удалить его с помощью команды lvremove.

    Сначала размонтируйте логический том, если он в данный момент смонтирован:

    1. cd ~
    2. sudo umount /dev/LVMVolGroup/test

    После этого удалите логический том, введя эту команду:

    1. sudo lvremove LVMVolGroup/test

    Вас попросят подтвердить процедуру. Если вы уверены, что хотите удалить логический том, нажмите y.

    Удаление группы томов

    Чтобы удалить всю группу томов, включая все входящие в нее логические тома, используйте команду vgremove.

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

    1. sudo umount /dev/LVMVolGroup/www
    2. sudo umount /dev/LVMVolGroup/projects
    3. sudo umount /dev/LVMVolGroup/db

    После этого вы можете удалить всю группу томов, передав имя группы томов команде vgremove:

    1. sudo vgremove LVMVolGroup

    Затем вам будет предложено подтвердить, что вы хотите удалить группу томов. Если у вас все еще есть какие-либо логические тома, вам будут выданы индивидуальные запросы подтверждения для них перед удалением.

    Удаление физического тома

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

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

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

    1. sudo pvmove /dev/sda

    Этот процесс может занять некоторое время в зависимости от размера томов и объема передаваемых данных.

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

    1. sudo vgreduce LVMVolGroup /dev/sda

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

    1. sudo pvremove /dev/sda

    Теперь вы можете использовать удаленное запоминающее устройство для других целей или полностью удалить его из системы.

    Заключение

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