LVM позволяет уйти от понятия физический раздел жесткого диска. Мы приходим к логической структуре и в этой логической структуре, мы можем иметь столько дисков и разделов, сколько нам необходимо, и как угодно ими распоряжаться.
Заметки:
- VG следует создавать под конкретные задачи. Например, vg0 - под систему, vg1 - под бекапы. Далее в группы добавлять определенные физические жесткие диски.
GPT+EFI:
- При установке Debian на раздел с GPT в EFI режиме, достаточно создать обычный раздел (256M) и пометить его как efi (/dev/sda1). Далее создать раздел под lvm (/dev/sda2). И уже внутри lvm, достаточно создать LV для "/" и "/home". Если нужен отдельный для /boot, то и его, например 128M;
- Директория /boot/efi будет смонтирована в /dev/sda1;
GPT:
- При установке Debian на раздел с GPT в не EFI режиме, необходим обычный раздел /boot. Далее создается раздел для LVM;
MBR: (dos)
- При установке Debian на раздел MBR (dos), нет необходимости выносить /boot на обычный раздел и создания отдельного раздела для LVM;
Подготовка жесткого диска:
У нас имеется 2 жестких диска vdb,vdc.
- Выводим список всех дисков и разделов:
# ls -l /dev/vd*
# ls -l /dev/disk/by-id/
# ls -l /dev/disk/by-label/
# ls -l /dev/disk/by-uuid/
# ls -l /dev/mapper/
Настраиваем таблицу разделов:
Для msdos (mbr) достаточно создать только таблицу разделов. Для gpt необходимо создать еще и физический раздел.
- Table - MSDOS
# parted /dev/vdb
(parted) help mklabel или mktable
- Создаем таблицу разделов:
(parted) mklabel msdos
- Проверяем:
(parted) p
- Выходим:
(parted) quit
- Table - GPT
# parted /dev/vdc
(parted) mklabel gpt
(parted) p
(parted) mkpart
Partition name? []? lvm
File system type? [ext2]? ext4
Start? 1
End? -1
(parted) p
(parted) q
(parted) rm 1 - удалить 1ый раздел;
- Задать еденицы измерения:
(parted) unit mib | (parted) help unit
- Flags: установить раздел как загрузочный;
(parted) set 1 bios_grub on
Создание LVM структуры: physical volume(s)
Для таблицы разделов msdos диска vdb создаем PV метку.
- Помечаем устройство которое будет входить в LVM-структуру:
# pvcreate /dev/vdb
- Вывести диск из LVM-структуры: удалить метку PV
# pvremove /dev/vdb
- Вывести список физических устройств которые ранее быле помечены как PV:
# pvdisplay
Создаем логический пул куда будут входить наши жесткие диски или разделы: volume group(s)
- Диски и разделы которые будут входить в vg0 можно указывать через пробел:
# vgcreate vg0 /dev/vdb
- Просмотреть информацию о volume group(s):
# vgdisplay
VG Name - Имя volume group(s);
Format - Формат группы;
VG Access - Доступ на чтение/запись;
VG Status - Изменение размера;
Cur LV - Количество LV;
Cur PV - Текущее VG;
Act PV - Активное VG;
VG Size - Текущий размер VG;
PE Size - Размер блоков для обработки LV;
Total PE (physicl extendet) = PE Size * Total PE = VG Size
VG Size - Сколько распределено пространства;
VG UUID - Уникальный идентификатор;
- Расширить VG, добавив в VG PV:
# vgextendet vg0 /dev/vdc1
Создаем логические разделы:
-n - Задает имя логического раздела;
-L - Задает размер логического раздела;
-l - Задает размер оставшееся пространства в %;
- vg0 - Указываем в какой VG мы выделяем 1G;
# lvcreate -n iso -L1G vg0
- Выделить оставшееся логическое пространство которое есть в vg0;
# lvcreate -n image-vms -l100%FREE vg0
# ls -l /dev/vg0 - Вывести ссылки на блочные устройства;
# ls -l /dev/dm* - Вывести список блочных устройств;
Разрушение структуры LVM производится в обратном порядке:
Производим удаление уровней
# lvremove /dev/vg0/image-vms /dev/vg0/iso
# vgremove vg0
# pvremove /dev/vdb
Увеличение размера:
- Увеличиваем размер раздела LVM:
# lvextend -L+512MB /dev/vg0/iso | -L11G - Увеличить на заданный размер, + добавить;
- Увеличиваем размер файловой системы:
# resize2fs /dev/vg0/iso - Для FS EXT{2,3,4};
- Или одной командой:
-r - использовать resize2fs;
# lvextend -r -L+256MB /dev/vg0/iso
Уменьшение размера:
Перед уменьшением необходимо размонтировать логический раздел.
- Проверяем файловую систему на ошибки:
# umount /mnt/image-vms
# e2fsck -f /dev/vg0/image-vms
- Уменьшаем размер файловой системы:
# lvreduce -r -L-1GB /dev/vg0/image-vms
Перенесем домашнюю директорию /home на LV:
# lvcreate -n home -L3G vg0
# lvdisplay /dev/vg0/home
# mkfs.ext4 -L home /dev/vg0/home
# mkdir /mnt/home
# mount /dev/vg0/home /mnt/home
# ls -l /mnt/home
# df -h
# rsync -avXP /home/. /mnt/home/.
# ls -l /mnt/home/
# nano /etc/fstab
/dev/mapper/vg0-home /home ext4 defaults 0
Замена вышедшего из строя диска:
Допустим, у нас имеется диск vdc, который в скором времени может выйти из строя. Нам необходимо заменить его на новый vdd.
- Определяем в какой VG он находится:
# pvdispaly
- Проверяем сколько свободно Free PE в группе vg0:
# vgdisplay
Проверяем сколько занятого пространства имеется на диске vdc. Для переноса нужно чтобы Free PE (в VG или PV) >= Allocated PE (на диске который заменяем). Allocated PE * Pe Size = Занятое пространство. Далее ищем диск, у которого будет достаточное количество свободного пространства Free PE, в моем случае это диск vdd и он находится в той же группе томов. Или же можно проверить Free PE в vg0, если дисков больше чем 2.
Перемещение данных:
Данные будут перемещены в пределах доступного пространства VG - Группы томов, в которой состоит диск vdc. Соответственно диск vdd находится в той же группе томов.
-v - Отобразить дополнительную информацию;
# pvmove /dev/vdс -v
- Проверяем:
# pvdisplay
- Удаляем диск из VG:
# vgreduce vg0 /dev/vdc
- Удаляем метку PV:
# pvremove /dev/vdc
Управление Snapshots:
Размер буфера должен быть таким, чтобы он мог вместить в себя все изменения в ФС. Для создания необходимо чтобы в VG были свободные Free PE.
Создать снимок:
-L - Размер буфера для этого снэпшота, в него будут попадать все изменения от начала существования снимка от источника снэпшота.
# lvcreate -s -n root_snap -L512MB /dev/vg0/root
Если указанный буфер будет переполнен, то "LV snapshot status" изменится на "INACTIVE" и также вернутся к первоначальному состоянию COW-*. Т.е. снимок теперь не является целостным и не отражает полностью те данные, которые находились на начальном этапе создания снимка.
После создания снэпшота:
Ориентируемся на показания "LV snapshot status", "COW-table size", "COW-table LE", "Allocated to snapshot".
# lvdisplay /dev/vg0/root* | less
Чтобы просмотреть какие данные попали в снэпшот, его можно примонтировать в нужную директорию. Там будут данные которые находились на момент создания снэпшота.
Отменить снимок:
Это никак не отразится на текущих данных. Данные которые были добавлены после создания снимка.
# lvremove /dev/vg0/root_snap
Восстановить из снимка:
# lvconvert --merge /dev/vg0/root_snap
# reboot
Hypervisor VM:
После изменения размера диска в гипервизоре для виртуальной машины.
Увеличиваем размер раздела:
# parted /dev/sdb | p
(parted) resizepart 2 | -1 | p | q
Проверяем, какой диск или раздел помечен как pv, смотрим (PV Name):
# pvdisplay
Расширяем physical volume до максимума:
# pvresize /dev/sdb[2]
Проверяем, изменился ли размер тома:
# pvdisplay
Проверяем, появилось ли "Free PE / Size":
# vgdisplay
Изменяем размер logical volume, используя максимум доступного места:
# lvextend -l+100%FREE /dev/VolGroup/lv
Изменяем размер файловой системы с учётом появившегося места:
# xfs_growfs /dev/VolGroup/lv
- Для FS EXT{2,3,4}
# resize2fs /dev/VolGroup/lv