Например, была виртуалка с большим разделом под хранилище. Покупалось всё с запасом, но через несколько лет место всё равно закончилось. В сервере были свободные слоты под диски. Добавили пару дисков, сделали RAID1, подключили его к виртуалке и расширили раздел с данными. Никаких рискованных движений, никаких переносов данных, даже перезапуск виртуалки не понадобился. Всё сделали наживую.
Расскажу про ещё одну фичу LVM, которую легко использовать, и которая в некоторых ситуациях может серьезно выручить. Речь пойдёт про снепшоты. Именно снепшот LVM спас Gitlab во время эпической аварии, когда они могли потерять все данные, но между делом сделанный снепшот их спас.
Снепшоты могут выручить, если у вас хранилище гипервизора без их поддержки, что не так уж редко бывает. Например, хранилище в Proxmox типа LVM, не LVMThin, снепшоты не поддерживает. Также актуально, если вы арендуете VPS без доступа к гипервизору. Обычно там можно только расширить диск, что достаточно для использования снепшотов.
Для того, чтобы использовать снепшоты LVM никаких настроек делать не надо. Главное условие – в VG должно быть свободное место. Если его нет, то надо его где-то найти. Покажу на конкретном примере.
Беру виртуалку, которая полностью установлена на LVM, что я чаще всего и делаю. На VG свободного места нет. Проверяем это:
# pvsДобавляем в виртуальную машину ещё один диск, либо расширяем существующий. Принципиальной разницы нет. У вас либо появится новый диск, либо новый раздел на текущем диске. Их и используем для расширения VG. Я добавил диск sdb размером 10G. Расширяю им VG:
# vgextend vgroup /dev/sdbПо хорошему лучше сначала сделать раздел sdb1, и расширить уже им, но для краткости опускаю этот момент.
# pvsPV VG Fmt Attr PSize PFree /dev/sda1 vgroup lvm2 a-- <20.00g 0 /dev/sdb vgroup lvm2 a-- <10.00g <10.00gТеперь могу создать снепшот корня. Делаю ему размер 9G:
# lvcreate -L 9G -s -n root_snap /dev/vgroup/rootСмотрю, что получилось:
# lvsПо сути появился ещё один LV. С ним можно работать, как с обычным разделом. Например, подмонтировать его:
# mount /dev/vgroup/root_snap /mntУвидим в /mnt состояние системы на момент создания снепшота.
Посмотрим, как снепшот работает. Полностью обновим систему и перезагрузимся:
# apt update && apt upgrade -y && rebootПосле перезагрузки посмотрим на статус LV и на версию загруженного ядра:
# lvsroot vgroup owi-aos--- <20.00g root_snap vgroup swi-a-s--- 9.00g root 15.85 # uname -aДопустим, что-то пошло не так и нам надо откатиться на состояние до обновления. Восстанавливаем снепшот:
# lvconvert --merge /dev/vgroup/root_snapВидим ошибку:
Delaying merge since origin is open.Merging of snapshot vgroup/root_snap will occur on next activation of vgroup/root.Это нормально, так как для восстановления нужно размонтировать LV. Наживую восстановить снепшот нельзя. Восстановление будет запущено после перезагрузки, во время активации LV. Текущий корневой LV будет помечен как (O)rigin with merging snapshot, это видно в lvs:
# lvsroot vgroup Owi-aos--- <20.00gПосле первой перезагрузки начнётся восстановление из снепшота. Так как это корневой раздел, полностью всё перезаписать не получится, так как раздел системный, файлы заняты рабочими процессами. Делаем
reboot ещё раз. После него система вернётся в состояние до снепшота. Можно проверить это по загруженному ядру:# uname -aДля несистемного раздела всё выполняется без перезагрузок. В случае, если всё ОК и снепшот не пригодился, удаляем его:
# lvremove /dev/vgroup/root_snap💥 Обязательно удалите снепшот после того, как убедитесь, что он не нужен.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#lvm
