Разбираем как работать с LVM (Logical Volume Manager). Создание, изменение, замена физических, логических и групп томов LVM.
Logical Volume Manager (LVM) — это очень мощная система управления томами с данными для Linux. Она позволяет создавать поверх физических разделов (или даже неразбитых винчестеров) логические тома, которые в самой системе будут видны как обычные блочные устройства с данными (т.е. как обычные разделы).
Основные преимущества LVM в том, что во-первых одну группу логических томов можно создавать поверх любого количества физических разделов, а во-вторых размер логических томов можно легко менять прямо во время работы. Кроме того, LVM поддерживает механизм снапшотов, копирование разделов «на лету» и зеркалирование, подобное RAID-1.
Разберем как пользоваться LVM в Ubuntu Server 14.04.
[stextbox id=’black’]Тестовый стенд — ОС Ubuntu Server 14.04 LTS, 2х HDD — 450Gb[/stextbox]
Подготовка системы
Перед началом установки обновляем систему до актуального состояния:
sudo apt-get update && sudo apt-get upgrade -y
Устанавливаем поддержку LVM в системе:
sudo apt-get install lvm2
Инициализация жестких дисков
Для того чтобы начать работу с LVM, необходимо жесткие диски сделать понятными для LVM, перевести их в LVM — 8E Linux LMV.
Вывод имеющихся жестких дисков в системе:
sudo fdisk -l
Диск /dev/sdb: 483.2 Гб, 483183820800 байт 255 головок, 63 секторов/треков, 58743 цилиндров, всего 943718400 секторов Units = секторы of 1 * 512 = 512 bytes Размер сектора (логического/физического): 512 байт / 512 байт I/O size (minimum/optimal): 512 bytes / 512 bytes Идентификатор диска: 0x00000000 На диске /dev/sdb отсутствует верная таблица разделов Диск /dev/sdc: 483.2 Гб, 483183820800 байт 255 головок, 63 секторов/треков, 58743 цилиндров, всего 943718400 секторов Units = секторы of 1 * 512 = 512 bytes Размер сектора (логического/физического): 512 байт / 512 байт I/O size (minimum/optimal): 512 bytes / 512 bytes Идентификатор диска: 0x00000000 На диске /dev/sdc отсутствует верная таблица разделов
Жесткие диски /dev/sdb, /dev/sdc переводим в формат LVM (pvcreate):
sudo pvcreate /dev/sdb Physical volume "/dev/sdb" successfully created sudo pvcreate /dev/sdc Physical volume "/dev/sdc" successfully created
Отобразить физические LVM разделы, можно командой (pvscan):
sudo pvscan PV /dev/sdb lvm2 [400,00 GiB] PV /dev/sdc lvm2 [450,00 GiB] Total: 2 [850,00 GiB] / in use: 0 [0 ] / in no VG: 2 [850,00 GiB]
Отобразить физические LVM разделы с подробными сведениями, можно командой (pvdisplay):
sudo pvdisplay --- Physical volume --- PV Name /dev/sda6 VG Name PV Size 1.86 GB / not usable 2.12 MB Allocatable yes PE Size (KByte) 4096 Total PE 476 Free PE 456 Allocated PE 20 PV UUID m67TXf-EY6w-6LuX-NNB6-kU4L-wnk8-NjjZfv --- Physical volume --- PV Name /dev/sda7 VG Name PV Size 1.86 GB / not usable 2.12 MB Allocatable yes PE Size (KByte) 4096 Total PE 476 Free PE 476 Allocated PE 0 PV UUID b031x0-6rej-BcBu-bE2C-eCXG-jObu-0Boo0x
Создание группы томов
Группа томов — это объединение физических томов, при котором создается общий пул памяти который будет распределен между логическими томами.
Создаем из физических томов /dev/sdb, /dev/sdc группу томов с названием (прим. jakonda):
sudo vgcreate jakonda /dev/sdb /dev/sdc Volume group "jakonda" successfully created
Отобразить имеющиеся группы томов, можно командой (vgdisplay):
sudo vgdisplay --- Volume group --- VG Name jakonda System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 2 Act PV 2 VG Size 899,99 GiB PE Size 4,00 MiB Total PE 230398 Alloc PE / Size 0 / 0 Free PE / Size 230398 / 899,99 GiB VG UUID 6e6XZ0-6wf1-Fuxj-mc7n-kilP-MyZF-oSCpN0
[stextbox id=’info’]VG Size — Общий размер дискового пространства группового тома.
Alloc PE / Size — Сколько уже выделено для создания логических томов.
Free PE / Size — Свободное, еще не распределенное дисковое пространство.[/stextbox]
Увеличить размер группы томов
Увеличить размер группы томов, можно путем добавления в него предварительно инициализированного физического тома (прим. /dev/sdd), командой (vgextend):
sudo vgextend jakonda /dev/sdd Volume group "jakonda" successfully extended
Уменьшить размер группы томов
Уменьшить размер группы томов, можно путем вывода из него физических томов (прим. /dev/sdb). Перед тем как выводить физический том из группы томов, необходимо убедится что что физический том не используется никакими логическими томами.
Если физический том (прим. /dev/sdb) не используется никакими логическими томами, вывести его можно командой (vgreduce):
sudo vgreduce jakonda /dev/sdb Removed "/dev/sdb" from volume group "jakonda"
Если физический том (прим. /dev/sdb) используется какими либо логическими томами, то перед тем как выводить его из группы томов, необходимо освободить его от имеющихся на нем данных.
[stextbox id=’warning’]Важный фактор вывода физического тома из группы томов является то, чтобы в группе томов было достаточно свободного места для размещения данных из выводимого физического тома.[/stextbox]
Освободить физический том (прим. /dev/sdb) от данных, можно несколькими путями:
- Путем автоматического распределения данных на другие физические тома этого логического тома (pvmove /dev/sdb)
- Путем указания на какой физический том переместить данные (pvmove /dev/sdb /dev/sdd)
sudo pvmove /dev/sdb pvmove -- moving physical extents in active volume group "dev" pvmove -- WARNING: moving of active logical volumes may cause data loss! pvmove -- do you want to continue? [y/n] y pvmove -- 249 extents of physical volume "/dev/sdb" successfully moved
Освобожденный от данных физический том (прим. /dev/sdb), можно выводить из группы томов, командой (vgreduce):
sudo vgreduce jakonda /dev/sdb Removed "/dev/sdb" from volume group "jakonda"
[stextbox id=’info’]Выводить физические тома из группы томов,можно без остановки работы системы.[/stextbox]
Физический перенос группы томов
Физический перенос группы томов с имеющимся в них логических томами, на другую систему выполняется командами (vgexport, vgimport).
Размонтируем все логические тома (прим. datastore1), входящие в группы томов (прим. jakonda) и деактивируем группу томов (прим. jakonda):
sudo unmount /mnt/jakonda/datastore1 sudo vgchange -an jakonda vgchange -- volume group "jakonda" successfully deactivated
Экспортируем группу томов (прим. jakonda), командой (vgexport):
sudo vgexport jakonda vgexport -- volume group "jakonda" sucessfully exported
[stextbox id=’info’]Процедура экспорта группы томов запрещает доступ к ней на данной системе и готовит ее к удалению.[/stextbox]
Выключаем машину, демонтируем диски (составляющие переносимую группу томов) и подключаем их к новой системе. Проверяем видит ли их система, командой (pvscan):
sudo pvscan pvscan -- reading all physical volumes (this may take a while...) pvscan -- inactive PV "/dev/sdb" is in EXPORTED VG "jakonda" [400 MB / 400 MB free] pvscan -- inactive PV "/dev/sdс" is in EXPORTED VG "jakonda" [450 MB / 244 MB free] pvscan -- total: 2 [1.95 GB] / in use: 2 [1.95 GB] / in no VG: 0 [0]
Импортируем группу томов (прим. jakonda), командой (vgimport):
sudo vgimport jakonda/dev/sdb /dev/sdс vgimport -- doing automatic backup of volume group "jakonda" vgimport -- volume group "jakonda" successfully imported and activated
Монтируем логические тома (прим. datastore1) в систему:
sudo mkdir -p /mnt/jakonda/datastore1 sudo mount /dev/jakonda/datastore1 /mnt/jakonda/datastore1
Резервирование/Восстановление конфигурации группы томов
Резервирование и восстановление конфигурации определенной группы томов, выполняется командами (vgcfgbackup, vgcfgrestore). Файлы резервных копий находятся (/etc/lvm/backup).
Резервное копирование конфигурации группы томов (прим. jakonda), командой (vgcfgbackup):
sudo vgcfgbackup jakonda Volume group "zoneminder" successfully backed up.
Восстановление конфигурации группы томов (прим. jakonda), командой (vgcfgrestore):
sudo vgcfgrestore jakonda Restored volume group zoneminder
Удаление группы томов
Перед тем как удалить группу томов, необходимо убедится, что группа томов не содержит логических томов. Если группа томов содержит логические тома, то сперва необходимо вывести их из группы томов, а затем выполнить удаление.
Деактивируем группу томов (прим. jakonda), командой (vgchange):
sudo vgchange -a n jakonda
Удаляем группу томов (прим. jakonda), командой (vgremove):
sudo vgremove jakonda Volume group "jakonda" successfully removed
Создание логического тома
Создадим логический том (прим. jakonda) состоящего в группе томов datastore1, размером 50G, командой:
lvcreate -L 50G -n jakonda datastore1 Logical volume "jakonda" created
[stextbox id=’info’]Используемые ключи:
-L — Размер логического тома. Используются суффиксы: K (килобайты), M (мегабайты), G (гигабайты), T (терабайты).
-n — Название логического тома и принадлежность его к группе томов[/stextbox]
Форматируем созданный логический том jakonda в формат ext4:
mkfs.ext4 /dev/datastore1/jakonda
Создаем каталог и монтируем логический том jakonda в него:
mkdir -p /mnt/datastore1/jakonda mount /dev/datastore1/jakonda /mnt/datastore1/jakonda
Отобразить информацию по логическим томам, можно командой (lvdisplay):
--- Logical volume --- LV Path /dev/datastore1/jakonda LV Name jakonda VG Name datastore1 LV UUID P1rdwe-Cpu5-6Dnj-RWPd-OZOn-NeNi-HeRuAY LV Write Access read/write LV Creation host, time srv-zm, 2018-02-14 09:02:05 +0300 LV Status available # open 0 LV Size 50,00 GiB Current LE 256 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:0
Увеличение логического тома
Увеличим размер логического тома (прим. jakonda) состоящего в группе томов datastore1 на 10Gb, командой:
lvextend -L +10G /dev/datastore1/jakonda Extending logical volume datastore1 to 60,00 GiB Logical volume jakonda successfully resized
После увеличения размера логического тома, необходимо увеличить размер его файловой системы:
resize2fs /dev/datastore1/jakonda resize2fs 1.42.9 (4-Feb-2014) Filesystem at /dev/datastore1/jakonda is mounted on /mnt/datastore1/jakonda ; on-line resizing required old_desc_blocks = 4, new_desc_blocks = 4 The filesystem on /dev/datastore1/jakonda is now 15728640 blocks long.
[stextbox id=’info’]Операцию по увеличению объема логического тома, можно производить на горячую, без остановки системы.[/stextbox]
Уменьшение логического тома
Операция по уменьшению размера логического тома, возможно только на размонтированном логическом томе, в ином состоянии уменьшить размер логического тома нельзя.
[stextbox id=’warning’]Перед выполнением операции уменьшения размера логического тома, желательно иметь резервную копию данных с логического тома.[/stextbox]
[stextbox id=’alert’]Важно соблюдать последовательность действий, во избежании потери данных с логического тома!!![/stextbox]
Выполним уменьшение логического тома (прим. jakonda) состоящего в группе томов datastore1 на 10Gb от текущего размера (60G).
Демонтируем логический том jakonda из системы и проверяем его на наличие ошибок:
umount /dev/datastore1/jakonda e2fsck -f /dev/datastore1/jakonda
[stextbox id=’info’]Используемый ключ -f в утилите e2fsck, означает выполнение принудительной проверки, даже если файловая система помечена как чистая[/stextbox]
Уменьшаем размер файловой системы логического тома jakonda, командой:
resize2fs /dev/datastore1/jakonda 50G
[stextbox id=’alert’]где 50G — это итоговый размер, который мы хотим задать для файловой системы, а не на который мы хотим уменьшить файловую систему.[/stextbox]
Теперь уменьшим размер самого логического тома jakonda, командой:
lvreduce -L -10G /dev/datastore1/jakonda WARNING: Reducing active logical volume to 50,00 GiB. THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce datastore1/jakonda? [y/n]: y Size of logical volume datastore1/acronis changed from 60,00 GiB (287744 extents) to 50,00 GiB (262144 extents). Logical volume datastore1/jakonda successfully resized.
После завершения операции, монтируем логический том jakonda в систему и следом монтируем его к папке:
mount /dev/datastore1/jakonda mount /dev/datastore1/jakonda /mnt/datastore1/jakonda
Удаление логического тома
Перед удалением логического тома он должен быть размонтирован из системы.
Размонтируем логический том (прим. jakonda) из группы томов datastore1 и выполняем его удаление:
umount /dev/datastore1/jakonda lvremove /dev/datastore1/jakonda Do you really want to remove and DISCARD active logical volume jakonda? [y/n]: y Logical volume "jakonda" successfully removed
а зачем везде перед командами писать sudo?
мне на тот момент было так удобней, а по сути можно перейти на уровень выше и не вводить каждый раз, тут дело каждого. Суть, дела не меняет.