Гибернация на PROXMOX2

от автора

Для чего это надо

Гибернация (спящий режим) — это режим выключения системы при котором её текущее состояние, включая состояние ОЗУ, сохраняется на энергонезависимое хранилище.

Этот режим при использовании совместно с Proxmox позволяет значительно ускорить процесс завершения работы основной — хост-системы без необходимости завершать работу гостевых виртуальных систем. Особенно удобно, когда в качестве гостевой системы развернуты терминальные сервера на Windows. Ведь при штатном завершении работы такой системы, в окнах пользователей появляется запрос на сохранение редактируемого документа и если у пользователя тоже отключился свет вместе с его компьютером и монитором пользователь отсутствует на месте, принудительное завершение системы вызовет предынфарктное состояние потерю редактируемых сотрудником/ми данных. Вот тут и спасет гибернация хостовых нод и после восстановления электроснабжения пользователи продолжать работать с того-же места!
Конечно, что-бы такое произошло нужно еще настроить ИБП сервера. Переход в режим гибернации удобно назначить в качестве события при разряде батареи ИБП, а благодаря скорости перехода в этот режим можно серьезно снизить требования к ёмкости его батарей.

Как это работает

Proxmox 2.2 работает на базе debian 6 и практически всё, что описано ниже в той или иной степени относится и к нему.

Активация режима гибернации требует наличия выделенного диска который будет видет GRUB напрямую при загрузке или отдельного раздела swap на таком диске. С томами находящимися внутри LVM запустить не удалось. При этом proxmox не позволяет создать нужную для такого режима структуру диска при установке. Связанно это вероятно с концепцией максимальной простоты развертывания системы с которой может справится даже домохозяйка.

Самое простое решение, это просто добавить еще один жесткий диск в сервер и назначить его хранилищем для режима гибернации, но мы рассмотрим более сложный вариант с изысканием свободного места на том-же диске куда поставился proxmox.

Исходные данные

При установке proxmox полностью задействует 1 из дисков уничтожая всю информацию на нём и создавая определенную структуру разделов:

# parted /dev/sda print free  Model: ATA WDC WD3200AAKS-7 (scsi) Disk /dev/sda: 320GB Sector size (logical/physical): 512B/512B Partition Table: msdos  Number  Start   End     Size    Type     File system  Flags         32.3kB  1049kB  1016kB           Free Space  1      1049kB  537MB   536MB   primary  ext3         boot  2      537MB   320GB   320GB   primary               lvm         320GB   320GB   352kB            Free Space 

Таким образом мы узнали, что на физическом диске место не занятое под разделы составляет всего 352kB, что явно не достаточно для раздела подкачки на который система будет сохранять состояние занятой оперативной памяти при гибернации. Такой раздел должен иметь размер не менее чем размер ОЗУ ноды.

Примем, что необходимый нам размер, это 32 Гб.

Посмотрим теперь, из каких логических томов состоит наш физический том расположенный на втором разделе

 # lvs 

видим

 LV   VG   Attr     LSize   Pool Origin Data%  Move Log Copy%  Convert  data pve  -wi-ao-- 203.09g                                             root pve  -wi-ao--  74.50g                                             swap pve  -wi-ao--   4.00g   

Подготовка носителя

Выясним то, сколько свободного места уже сейчас внутри физического тома LVM2.

# pvs 

Смотрим значение PFree

   PV         VG   Fmt  Attr PSize   PFree    /dev/sda2  pve  lvm2 a--  297.59g 16.00g 

Это значит, что мы сразу можем уменьшить раздел на физическом диске на 16.00 Гб, но наша задача получить 32 Гб, поэтому будем изыскивать дополнительные данные.
Будем обирать нужное нам пространство у логического тома data. Для этого мы уменьшим размер /dev/pve/data на 16 Гб. Данный процесс выполняется в 2 этапа. Сначала уменьшается размер файловой системы, а уже затем уменьшается размер самого логического тома. Так как процедура потенциально не безопасная, то будет выполнено отмонтирование файловой системы на период ресайзинга, соответственно все виртуальные машины, расположенные в /var/lib/vz должны быть остановлены на это время.

 # lvresize /dev/pve/data -r -L-16Gb 

Do you want to unmount "/var/lib/vz"? [Y|n] Ответим y

Теперь вновь выполним

 # pvs    PV         VG   Fmt  Attr PSize   PFree    /dev/sda2  pve  lvm2 a--  297.59g 32.00g 

Мы видим, что объем свободного места внутри физического тома возрос до 32 Гб.

Теперь мы можем спокойно сократить его размер размер на размер доступного свободного места + 1 Гб для подстраховки:

Подсчитаем итоговый размер физического тома 297-32+1=266

# pvresize /dev/sda2 --setphysicalvolumesize 266Gb 

Вновь посмотрим, что у нас получилось

 # pvs    PV         VG   Fmt  Attr PSize   PFree     /dev/sda2  pve  lvm2 a--  266.00g 412.00m 

Размер физического тома LVM сократился на:
297.59 — 266 + 0.412 = 32,002 Гб
Но несмотря на это, размер раздела содержащего структуру LVM на жестком диске остался неизменным:

 # parted /dev/sda print free    Number  Start   End     Size    Type     File system  Flags          32.3kB  1049kB  1016kB           Free Space   1      1049kB  537MB   536MB   primary  ext3         boot   2      537MB   320GB   320GB   primary               lvm          320GB   320GB   352kB            Free Space 

Это нас не устраивает, так как необходимо получить свободное место под новый раздел в таблице разделов физического диска.

На данный момент не удалось обнаружить готовых утилит, способных изменять разделы содержащие структуру lvm2, поэтому просто удалим и заново создадим раздел на жестком диске с началом как у исходного но меньшего размера. Это потенциально довольно опасная процедура.

Рассчитаем параметры 2-го раздела, который мы в результате хотим получить. Он должен быть меньше текущего на 32 Гб
320 — 32 = 288 Гб
Таким образом 2-й раздел будет иметь параметры:

Тип primary
Начало 537MB
Конец 288Gb

Удалим раздел 2 подверждая игнорирование предупреждений

# parted /dev/sda rm 2 

Создаем раздел заного, но меньшего размера чем было

# parted /dev/sda mkpart primary 537MB 288GB 

Назначим флаг lvm разделу

# parted /dev/sda set 2 lvm on 

Смотрим результат

#  parted /dev/sda print free 

Видим, что на физическом диске появилось свободное место под будущий раздел

 Number  Start   End     Size    Type     File system  Flags         32.3kB  1049kB  1016kB           Free Space  1      1049kB  537MB   536MB   primary  ext3         boot  2      537MB   288GB   287GB   primary               lvm         288GB   320GB   32.1GB           Free Space 

Создаем раздел типа swap. Его параметры:

Тип primary
fs linux-swap
Начало 288GB
Конец 320GB

Выполним:

# parted /dev/sda mkpart primary linux-swap 288GB 320GB # mkswap /dev/sda3 

Подготовительная работа закончена и теперь можно приступать непосредственно к настройке гибернации

Активация hibernate

Установка компонентов

# apt-get update # apt-get install pm-utils 

Добавление параметров в grub и fstab

# echo 'GRUB_CMDLINE_LINUX_DEFAULT="resume=/dev/sda3"' >> /etc/default/grub # echo '/dev/sda3 none swap sw 0 0' >> /etc/fstab 

Подключим новый раздел в качестве файла подкачки к системе

# swapon /dev/sda3 

Обновим загрузчик

# update-grub 

Можно приступать к тестированию непосредственно режима гибернации. Но прежде очень желательно выполнить перезагрузку сервера, если такая возможность имеется, так как произошли довольно серьезные изменения в структуре носителя!

# reboot 

Выполним полную гибернацию с выключением питания системы

# pm-hibernate 

Теперь осталось назначить выполнение этой команды при событии разряда батареи на ИБП, но это уже другая история которую я надеюсь опишу в следующей статье.

Все вышеописаное проверено на свежеустановленом proxmox 2.2

ссылка на оригинал статьи http://habrahabr.ru/post/159113/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *