Управление устройствами хранения с помощью LVM в Ubuntu 16.04

LVM (Logical Volume Management), или управление логическими томами – это технология управления устройствами хранения, позволяющая объединять области различных физических устройств в один логический том. С помощью подсистемы device mapper текущая версия LVM2 может объединять физические устройства хранения в группы и по мере необходимости выделять логические единицы из полученного тома.

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

 Требования

  • Сервер Ubuntu 16.04.
  • Пользователь с доступом к sudo (о настройке можно прочитать здесь). Все действия в руководстве выполняются в сессии этого пользователя.
  • Понимание базовой терминологии и операций LVM (подробнее об этом – в руководстве Введение в LVM: основные понятия и операции).

1: Информация о физических томах, группах томов и логических томах

В работе с LVM очень важно знать, как найти информацию о компонентах LVM.

Отображение информации обо всех блочных устройствах, совместимых с LVM

Чтобы отобразить все доступные блочные устройства, которыми может управлять LVM, введите команду lvmdiskscan.

sudo lvmdiskscan
/dev/ram0  [      64.00 MiB] /dev/sda   [     200.00 GiB] /dev/ram1  [      64.00 MiB] . . .
/dev/ram15 [      64.00 MiB] /dev/sdb   [     100.00 GiB] 2 disks
17 partitions
0 LVM physical volume whole disks
0 LVM physical volumes

На экране появится список потенциальных физических томов LVM (кроме /dev/ram* – эти устройства принадлежат диску Linux).

Как правило, такую информацию запрашивают перед добавлением нового устройства LVM

Запрос информации о физических томах

Физические тома – это физические блочные устройства или другие устройства, подобные дискам (например, созданные device mapper устройства, такие как RAID-массивы). LVM отмечает свободные физические устройства с помощью специального хедера.

Чтобы вывести список доступных физических устройств, добавьте флаг –l:

sudo lvmdiskscan -l
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
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
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
--- 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

Как видите, pvdisplay предоставляет более подробную информацию о физических томах.

Чтобы получить информацию о логических экстентах каждого тома, добавьте опцию –m:

sudo pvdisplay -m
--- 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
Reading all physical volumes.  This may take a while...
Found volume group "LVMVolGroup" using metadata type lvm2

Команда предоставляет немного информации, тем не менее, она может найти все доступные группы томов.

Чтобы получить больше информации, используйте vgs или vgdisplay.

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

sudo vgs -o +devices,lv_path
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
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
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
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
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
--- 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
/dev/ram0  [      64.00 MiB] /dev/sda   [     200.00 GiB] /dev/ram1  [      64.00 MiB] . . .
/dev/ram15 [      64.00 MiB] /dev/sdb   [     100.00 GiB] 2 disks
17 partitions
0 LVM physical volume whole disks
0 LVM physical volumes

В выводе вы увидите все потенциальные устройства (не считая /dev/ram*).

Важно! Убедитесь, что устройства, которые вы собираетесь использовать в LVM, не содержат важных данных. Использование этих устройств в LVM перезапишет текущее содержимое. Если на устройствах уже есть важные данные, сделайте их резервные копии.

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

sudo pvcreate /dev/sda /dev/sdb

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

Создание группы томов

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

sudo vgcreate volume_group_name /dev/sda

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

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

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

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

suod vgcreate -s 8M volume_group_name /dev/sda

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

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

Чтобы добавить в существующую группу томов новый физический том, используйте команду 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 указывает тип логического тома, который определяет, как распределяется пространство этого тома. При небольшом количестве физических томов некоторые опции будут недоступны. Наиболее распространённые типы:
    • linear: тип по умолчанию. Физические устройства (если их больше одного) будут присоединены друг к другу по очереди.
    • striped: как и в RAID 0, данные делятся на куски и распространяются по круговой системе между существующими физическими томами. Такой тип повышает производительность, но при этом данные могут быть очень уязвимы. Этот тип использует опцию –i (больше информации ниже) и два физических тома минимум.
    • raid1: создаёт зеркальный том RAID 1. По умолчанию зеркало создаст две копии. Увеличить количество копий можно с помощью опции –m. Для этого нужно иметь два физических тома минимум.
    • raid5: создаёт том RAID 5. Требует три физических тома минимум.
    • raid6: создаёт том RAID 6. Требует четыре физических тома минимум.
  • -m: указывает количество дополнительных копий данных. К примеру, при значении 1 будет храниться одна дополнительная копия (всего будет два набора данных).
  • -i: определяет количество полос. Эта опция необходима типу striped и может менять поведение некоторых типов RAID.
  • -s: создаёт снапшот существующего логического тома вместо нового независимого тома.

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

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

Чтобы создать зеркальный массив, используйте тип raid1. Если вам нужно иметь больше двух наборов данных, используйте опцию –m. В этом примере опция -m 2 в итоге создаст 3 набора данных (1 исходный набор + две копии). Для этого нужно иметь три физических тома минимум.

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

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

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

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

Сначала укажите имя группы томов, затем поставьте слеш и укажите имя логического тома.

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

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

Также файловую систему можно расширить вручную с помощью опции –resizefs. Например:

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

4: Удаление и уменьшение размеров компонентов LVM

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

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

Запросите объём используемого пространства.

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

В данном случае используется около 512 М пространства. Теперь вы можете оптимизировать размер тома.

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

cd ~
sudo umount /dev/LVMVolGroup/test

Убедитесь, что файловая система в рабочем состоянии. Для этого введите:

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

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

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

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

Затем можно изменить размер логического тома. Для этого введите:

sudo lvresize -L 3G LVMVolGroup/test

LVM предупредит вас о риске потери данных. Чтобы продолжить, введите 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

Затем можно удалить группу томов:

sudo vgremove LVMVolGroup

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

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

Процедура удаления физического тома зависит от того, используется ли он в LVM.

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

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

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

sudo pvmove /dev/sda

Этот процесс займёт некоторое время.

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

sudo vgreduce LVMVolGroup /dev/sda

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

sudo pvremove /dev/sda

Tags: ,

Добавить комментарий