Управление устройствами хранения с помощью LVM в Ubuntu 16.04
Ubuntu | Комментировать запись
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