вторник, 5 июня 2012 г.

LVM: основные операции

небольшое отступление: после zfs - lvm кажется дико кривым и неудобным, поэтому и возникла необходимость в памятке об основных операциях.

Плюс, поскольку оно не умеет и уровни рейда кроме jbod (объединение пачки дисков в единое пространство), необходимо сначала создать нужные рейды средствами системы/контроллера, и работать уже с этими дисками.

шаг 0: в дебиане надо поставить пакет lvm2 (apt-get install lvm2), а то ничего не получится.

На 2 уровне из реальных дисков (PV, physical volume) собираем "диски" VG (volume group), с которыми уже работает lvm. Можно собрать 1 диск из нескольких реальных, но это опасно: отказ любого из реальных дисков приведет к недоступности всей группы, поэтому лучше собрать рейд нужного уровня, создать на нём pv, и чисто из него сделать vg.

"Загрузка с LVM возможна, но не рекомендуется. Так что у Вас есть отдельный раздел для этого." (линк)

Также есть заблуждение, что расширить том lvm легко, но это не совсем так: если у нас есть куда расширять, делается lvextend, для ext2 расширяемый раздел перемонтируется в режим чтения и потом (xfs_grow|resize2fs).
Другое дело, если мы в облаке (selectel, parking...) и увеличили жесткий диск. Тут нужен будет бубен, потому что скорее всего придется поплясать. Пример запущенного случая: 3 раздела (boot, своп, и extended, на котором еще 1 раздел уже с lvm). Описание ниже.

Устройство по слоям
> pv > vg > lv
PV, Physical volume, физический том. Обычно это раздел на диске или весь диск. В том числе, устройства программного и аппаратного RAID (которые уже могут включать в себя несколько физических дисков). Физические тома входят в состав группы томов.
VG, Volume group, группа томов. Это самый верхний уровень абстрактной модели, используемой системой LVM. С одной стороны группа томов состоит из физических томов, с другой -- из логических и представляет собой единую административную единицу.
LV, Logical volume, логический том. Раздел группы томов, эквивалентен разделу диска в не-LVM системе. Представляет собой блочное устройство и, как следствие, может содержать файловую систему.
PE, Physical extent, физический экстент. Каждый физический том делится на порции данных, называющиеся физическими экстентами. Их размеры те же, что и у логических экстентов.
LE, Logical extent, логический экстент. Каждый логический том делится на порции данных, называющиеся логическими экстентами. Размер логических экстентов не меняется в пределах группы томов.
http://xgu.ru/wiki/LVM

Создание раздела
Последовательность pvcreate /dev/sda -> vgcreate vg0 /dev/sda -> lvcreate -l +10%FREE -n lv-name

Сначала надо разметить раздел или весь диск как lvm. Лучше отдать под лвм весь диск, но это накладывает некоторые ограничения, в частности не получится поставить потом в зеркало диск такого же размера "на бумаге", но меньший по секторам, зато обслуживать такой диск куда проще. Если же создать хоть 1 раздел и уже его добавлять, то не будут зеркалироваться такие вещи как загрузочные сектора.
pvcreate /dev/sda

Потом из этих pv собираем "диски" VG (volume group), с которыми уже работает lvm. Можно собрать 1 диск из нескольких реальных, но это опасно: отказ любого из реальных дисков приведет к недоступности всей группы, поэтому лучше собрать рейд нужного уровня, создать на нём pv, и чисто из него сделать vg.
Получили vg-диск, который уже можно нарезать на разделы, это уровень lv (logical volumes). так что lvcreate в помощь.
Можно изменять размеры в байтах (-L +10G), в блоках по 4М (-l +100), в процентах (-l +10%FREE)

Изменение размеров
Если просто использовать свободное место из резерва, то это делается в 2 команды - lvresize и resize2fs.
Если же изменился жесткий диск (облако или dd на новый бОльшего размера) и надо расширять vg - придётся повозиться.
Тут 2 пути:
1) увеличиваем размер базового тома (возможно не всегда, например если следом уже есть раздел)
2) создаём ещё том и подключаем его в текущую структуру

1 сводит на нет и без того скудные возможности lvm, поэтому правильнее использовать 2.

Итак, 3 раздела (boot, своп, и extended, на котором еще 1 раздел уже с lvm). Чтобы изменить размер в таком случае, действия:
1) расширить физический диск. К слову, на паркинге изменение с 20 до 40 гиг - даунтайм 1.5 часа.
2) растянуть extended, в помощь parted, cfdisk, sfdisk. Есть ещё fdisk, но в дебиане он неюзабелен абсолютно, в других операционках работает как надо. Впрочем, в дебиане вообще с разметкой диска очень грустно, но это система для гуру и извращенцев. parted тоже отличается особым "умом" в любом линуксе (хинт: есть опция print free, цифры оттуда используем для mkpart). А cfdisk хорош, но любит ругаться на выравнивание разделов, причём считает любое отклонение критической ошибкой.
3) Создать на пустом месте в extended новый раздел
4) сделать на этот раздел pvcreate
5) добавить его в группу vgextend
6) увеличиваем lv: lvextend -l +100%FREE /dev/vg0/root
7) А теперь увеличим фс.. для ext* в помощь resize2fs(e2fsprogs), только для ext2 сначала перемонтировать систему в RO, иначе можно всё сломать.. если вообще даст что-то сделать. Или вообще отмонтировать. Про ext2 подробнее

Всего 7 шагов, на которые без опыта спокойно уходит неделя и есть реальные шансы всё убить.

Отдельно стоит уменьшение, но это нужно редко..

Комментариев нет:

Отправить комментарий