Рубрики
HDD \ SSD \ ISO \ CD-ROM \ LVM \ FS \ RAID \ Диск

LVM

Logical Volume Manager — менеджер логических томов

Ссылка - http://tldp.org/HOWTO/LVM-HOWTO/LVM-HO


sda1     sda2             sdb     sdc       <-- PV физические том (устройство)
 |        |                |       |
 |        |                |       |
 +--------+- name_pc_vg0  -+-------+        <-- VG том група
                 |
 +-------+-------+---------+
 |       |       |         |
root    usr     home      var               <-- LV логические тома
 |       |       |         | 
ext3 reiserfs reiserfs    xfs               <-- Файловые системы

PV, Physical volume, физический том. Обычно это раздел на диске или весь диск. 
    В том числе, устройства программного и аппаратного RAID (которые уже могут включать в себя несколько физических дисков).
    Физические тома входят в состав группы томов.
    
VG, Volume group, группа томов. Это самый верхний уровень абстрактной модели, используемой системой LVM. 
    С одной стороны группа томов состоит из физических томов, с другой -- из логических и представляет собой единую административную единицу.

LV, Logical volume, логический том. 
    Раздел группы томов, эквивалентен разделу диска в не-LVM системе. 
    Представляет собой блочное устройство и, как следствие, может содержать файловую систему.

PE, Physical extent, физический экстент. 
    Каждый физический том делится на порции данных, называющиеся физическими экстентами. 
    Их размеры те же, что и у логических экстентов.

LE, Logical extent, логический экстент. 
    Каждый логический том делится на порции данных, называющиеся логическими экстентами. 
    Размер логических экстентов не меняется в пределах группы томов. 

pv:
Управление физическими томами

pvchange    - изменить атрибуты физического тома 
pvcreate    - инициализировать физический том для использования в LVM 
pvdata      - показать информацию (из метаданных на диске) о физическом томе 
pvdisplay   - показать информацию о физическом томе 
pvmove      - переместить эстенты с одного физического тома на другой 
pvremove    - удалить метку LVM с физического тома 
pvresize    - изменить размер физического тома, использующегося в группе томов 
pvs         - показать информацию о физическом томе 
pvscan      - показать список всех физических томов 

vg:
Управление группами физических томов

vgcfgbackup    - сделать резервную копию конфигурации группы томов 
vgcfgrestore   - восстановить из резервной копии конфигурацию группы томов 
vgchange       - изменить атрибуты группы томов 
vgck           - проверить целостность группы томов 
vgconvert      - изменить формат метаданных группы томов 
vgcreate       - создать группу томов 
vgdisplay      - показать информацию о группе томов 
vgexport       - убрать регистрацию группу томов в системе 
vgextend       - добавить физический том в группу томов 
vgimport       - зарегистрировать экспортированную группу томов в системе 
vgmerge        - объединить группы томов 
vgmknodes      - создать файлы устройств для групп томов в каталоге /dev/ 
vgreduce       - удалить физический том из группы томов 
vgremove       - удалить группу томов 
vgrename       - переименовать группу томов 
vgs            - показать информацию о группах томов 
vgscan         - выполнить поиск групп томов 
vgsplit        - переместить физический том в новую группу томов

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

lvchange    - изменить атрибуты логического тома 
lvcreate    - создать логический том 
lvdisplay   - показать информацию о логическом томе 
lvextend    - добавить места в логический том 
lvmchange   - (команда устарела, её лучше не использовать) 
lvmdiskscan - показать список устройств, которые могут быть использованы как физический том 
lvmsadc     - собрать данные об активности использования LVM 
lvmsar      - создать отчёт об активности использования LVM 
lvreduce    - уменьшить размер логического тома 
lvremove    - удалить логический том из системы 
lvrename    - переименовать логический том 
lvresize    - изменить размер логического тома 
lvs         - показать информацию о логическом томе 
lvscan      -показать список логических томов во всех группах томов 

Пример использования 1:

pvcreate /dev/md0 - создание физ тома
vgcreate name_pc_vg0 /dev/md0 - создание логической группы (принято создавать по имяни пк)
lvcreate -n name_data -L 256M name_pc_vg0 - создадим логический том
mkfs.ext4 /dev/name_pc_vg0/name_data - создадим файловую систему для логического тома
lvextend -L +256M /dev/name_pc_vg0/name_data - увеличение логического тома  (!!!resizefs!!!)
resize2fs /dev/name_pc_vg0/name_data 256M - увеличение файловой системы для логического тома name_data
fsck.ext4 -f /dev/name_pc_vg0/name_data - проверка тома на ошибки name_data
vgscan - сканирует диски на предмет наличия групп томов
gchange -ay - сканирует,активирует все найденные группы томов
dd if=/dev/zero of=/dev/diskname bs=1k count=1 - уничтожит таблицу разделов на целевом диске
blockdev --rereadpt /dev/diskname - уничтожит таблицу разделов на целевом диске

Пример использования 2:

apt-get install lvm2 - установка для debian 9
fdisk -l - показать все диски
fdisk /dev/sdb - создаем 2 раздела \ тип 8e
pvcreate /dev/sdb1 - создаем физический раздел lvm на /dev/sdb1
pvcreate /dev/sdb2 - создаем физический раздел lvm на /dev/sdb2
vgcreate vg_mygroup /dev/sdb1 /dev/sdb2 - создаем группу для томов
lvcreate -n lv1 -L 2G vg_mygroup - создаем логические том lv1 размером 2Гб
lvcreate -n lv2 -L 3G vg_mygroup - создаем логические том lv2 размером 3Гб
fdisk -l - показать все диски,мы увидим диск sdb, на нем 2 раздела, а в конце новые LVM тома vg_mygroup-lv1 и vg_mygroup-lv2
mkfs.ext4 /dev/mapper/vg_mygroup-lv1 - создаем на логическом диске файловую систему ext4
mkfs.ext4 /dev/mapper/vg_mygroup-lv2 - создаем на логическом диске файловую систему ext4
lvresize -L 4G vg_mygroup/lv2 - изменить размер логического тома сделать = 4Gb

Создание томов LVM

fdisk - программа для работы с дисками
fdisk /dev/sdb - выполнит команду для управления разделами диска
m - помощь
p - отобразит список существующих разделов
n - создать новый раздел
p - сделать раздел основным (primary)
1 - назначим разделу номер 1
t - определяем тип раздела
8E - код LVM
p - отображает информацию о новом разделе
w - применить все изменения

sfdisk -l /dev/sdb - выводит список LVM разделов
pvcreate /dev/sdb1 - делает носитель sdb1 физическим томом LVM
vgcreate vgusb /dev/sdb1 - создает группу томов vgusb
lvcreate --size 10M --name lvm_u1 vgusb - создание нового LVM-раздела lvm_u1
                                          из группы томов vgusb
lvs - отображает информацию о логическом томе
vgs - объем доступного места

Использование томов LVM

mkdir /mnt/u1 - создаем каталог (точку монтирования)
mount -t ext3 /dev/mapper/vgusb-lvm_u1 /mnt/u1 - монтируем том
df -m /mnt/u1 - проверяем объем доступного пространство

Увеличение тома LVM

umount /mnt/u1 - отмонтируем том
lvresize --size 16M /dev/vgusb/lvm_u1 - изменяем размер тома lvm 
e2fsck -f /dev/vgusb/lvm_u1 - проверяем файловую систему тома lvm 
resize2fs /dev/vgusb/lvm_u1 16M - изменяем размер файловой системы
mount -t ext3 /dev/mapper/vgusb-lvm_u1 /mnt/u1 - монтируем том
df -m /mnt/u1 - проверяем объем доступного пространства

Уменьшение размера тома LVM

umaunt /mnt/u1 - размонтируем том
e2fsck -f /dev/vgusb/lvm_u1 - проверяем том на ошибки
resize2fs /dev/vgusb/lvm_u1 12M - изменяем размер фс на 12Мб
lvresize --size 12M /dev/vgusb/lvm_u1 - изменяем размер тома lvm 
mount -t ext3 /dev/mapper/vgusb-lvm_u1 /mnt/u1 - монтируем том
df -m /mnt/u1 - проверяем объем доступного пространства

Удаление логических томов и групп LVM

umaunt /mnt/u1 - размонтируем том
lvremove /dev/vgusb/lvm_u1 - удаление тома LVM
vgremove vgusb - удаление группы LVM

Пример работы с parted:

!!! подготовим диск для LVM
parted -l - все диски и их разметку
parted /dev/vdb - запустили партед и указали диск с которым будем работать
(parted)mklabel msdos - задали таблицу разделов MBR, если требуется поддержка диска более 2ТБ то необходимо таблицу разделов указывать GPT команда  (parted)mklabel gpt
(parted) unit MiB - выбрали единицу измерения мегабайты
(parted) mkpart - запросили создать раздел
        Partition type?  primary/extended? p - сказали что он первичный
        File system type?  [ext2]? ext4 - попросили создать файловую систему ext4
        Start? 0 - указали начало раздела
        End? -1 - указали  конец
        y - применили изменения 
(parted) q - выход из программы разметки

!!! Если диск будет использоваться не для LVM то надо создать на нем ФС
mkfs.ext4 /dev/vdb2 - для создания ФС на диске /dev/vdb2

Пример создания lvm из одного диска:

fdisk -l - показать диски и разделы
parted -lm - показать диски и разделы
ls /dev/vd* - показать диски и разделы

pvcreate /dev/vdb1 - создаем структуру LVM, пометим диск
vgcreate vg0 /dev/vdb1 - создадим группу vg0 и добавим туда помеченный диск vdb1
vgdisplay - показать используемое пространство

Пример создание lvm из нескольких дисков:

fdisk t e8 - LVM
pvdisplay  -  физические тома 
lvdisplay - логические тома 
vgdisplay - показал volume groupe 
pvcreate /dev/sdb1 - создаем физического тома
pvcreate /dev/sdb2 - создаем физического тома
vgcreate vg_NAME /dev/sdb1 /dev/sdb2 - создаем виртуальную группу vg_NAME для партиций sdb1  и sdb2
mkfs.ext4 /dev/vg_NAME/lvm2
mkfs.ext4 /dev/vg_NAME/lvm1
lvresize -L 4G /dev/vg_NAME/lvm2

Пошаговый пример создания тома:

0. Определяемся с имеющимися дисками
lsblk

1. Проверяем нет ли у нас уже LVM
lvmdiskscan

2. Размечаем диск под LVM
pvcreate /dev/sdb

3. Создаем первый уровень абстракции VG
!!! you_name_lvm - заменяем на свое желаемое имя
vgcreate you_name_lvm /dev/sdb

4. Создаем том test в VG you_name_lvm
lvcreate -l+80%FREE -n test you_name_lvm


5. Проверяем что у нас получилось
vgdisplay you_name_lvm
vgdisplay -v you_name_lvm | grep 'PV NAME'

6. Проверяем наш том 
lvdisplay 
lvdisplay /dev/you_name_lvm/test

7. Краткую информацию можно получить
pvs - показать устройства физические 
vgs - показать лог группы 
lvs - показать тома

8. Для примера создадим еще один том 
lvcreate -L100M -n small you_name_lvm

9. Для того что бы воспользоваться нашими томами нам не обходимо создать на них ФС
mkfs.ext4 /dev/you_name_lvm/test

10. И примонтировать в нашу ФС
mkdir /data
mount /dev/you_name_lvm/test /data/
mount | grep /data

Пошаговый пример расширения тома:

0. Подключили новый диск sdc

1. Добавили его в логику LVM
pvcreate /dev/sdc

2. Добавили его в группу
vgextend you_name_lvm /dev/sdc

3. Убедимся что диск добавился в VG и что место появилось
vgdisplay -v you_name_lvm | grep 'PV Name'
vgs
vgdisplay

4. Увеличиваем место
lvextend -l+80%FREE /dev/you_name_lvm/test

5. Проверяем что место увеличилось
!!! Увидим что место на ФС не прибавилось
lvs /dev/you_name_lvm/test
df -Th /data

6. Увеличим ФС
resize2fs /dev/you_name_lvm/test

7. Проверяем что теперь и на ФС место добавилось
df -Th /data

Пошаговый уменьшение ФС

!!!Сделай бэкап !!!
0. Отмонтируем раздел
umount /data/

1. Производим проверку ФС
e2fsck -fy /dev/you_name_lvm/test

2. Выполняем уменьшение ФС
resize2fs /dev/you_name_lvm/test 10G

3. Уменьшаем том LVM
lvreduce /dev/you_name_lvm/test -L 10G

4. Монтируем ФС
mount /dev/you_name_lvm/test /data/

5. Проверяем
df -Th /data/
lvs /dev/you_name_lvm/test


Пошаговый пример LVM snapshot

0. Снапшот создается командой lvcreate, только с флагом "-s", который и указывает на то что это снимок
lvcreate -L 500M -s -n test-snap /dev/you_name_lvm/test

1. Проверяется с помощью vgs
vgs -o +lv_size,lv_name | grep test

2. Также lsblk наглядно покажет что случилось
!!! Мы увидим you_name_lvm-test-rel - реальный раздел 
!!! you_name_lvm-test-snap - снапшот, 
!!! you_name_lvm-test-snap-cow куда пишет снапшот
!!! Copy to Write
lsblk


3. Снапшот можно смонтировать как любой другой том
mkdir /data-snap
mount /dev/you_name_lvm/test-snap /data-snap/
ll /data-snap/
unmount /data-snap


4. Восстановление из снапшота
umount /data
lvconvert --merge /dev/you_name_lvm/test-snap
mount /dev/you_name_lvm/test /data
ll /data

Пошаговый пример зеркала на LVM (RAID1)

0. Подключаем диски sdd и sde
pvcreate /dev/sd{d,e}

1. Создаем логическую группу VG
vgcreate vg0 /dev/sd{d,e}

2. Включаем зеркало
lvcreate -l+80%FREE -m1 -n mirror vg0

3. Проверяем 
lvs