MYCSS

2024-10-12

Restore a VM from a backup file on a ZFS snapshot over NFS in Proxmox VE by use GUI.

Умови:

Proxmox VE server  періодично робить резервні копії до NFS спільної теки котра розміщена на NAS сервері.

NAS це TrueNAS сервер що зберігає дані у ZFS файловій системі. TrueNAS автоматично налаштований робити періодичні знімки (snapshots) ZFS dataset де розміщенні дані для NFS теки.

У VM сервера знайдено підозрілі файли за назвою "." розміром 1024 bytes з бінарним вмістом. Необхідно провести аналіз в "offline copy" сервера.

Задача:

Відновити віртуальну машину з попередньої резервної копії. 

Рішення:

Під'єднати попередні періодичні знімки (snapshots) ZFS dataset, що створені на стороні NAS сервера, для відновлення віртуальної машини з її резервної копії.

Підключення до консолі Proxmox Node.

  • Proxmox node: ns21
  • NFS share: nfs-ns58-10g
  • Target data: 2024-10-11
  • Target VM ID: 150

Proxmox console.
ZFS snapshots зберігаються за замовчуванням у прихованій теці ".zfs".

Знайдено цільовий шлях де зберігаються потрібні резервні копії: /mnt/pve/nfs-ns58-10g/.zfs/snapshot/auto-2024-10-11_00-00

2024-10-05

Note. FreeBSD. pkg create. Backup of erlang-21. Сталася класична ситуація з оновленнями. Postmortem Report.

Умови:

Є віртуальна машина з FreeBSD під керуванням Proxmox VE.

Є застосунок 'pleroma' котрий працює на базі erlang

Причини:

Для підтримання інфраструктури операційна система оновлюється і пакунки підтримуються в актуальному стані.
Застосунок працює, в пам'яті, все нормально. Користувачі заносять нові дані...

Дії:

Snapshot VM with RAM state - 'before_upgrade'.
Сервісне оновлення 'pkg upgrade'

Oct 1 08:51:24 pleroma pkg[25416]: erlang upgraded: 21.3.8.24_1,4 -> 25.3.2.12_1,4
Oct 1 08:52:37 pleroma pkg[25416]: elixir upgraded: 1.11.3 -> 1.16.3 

Застосунок працює.

Вночі - сервісний перезапуск системи. Попередньо зроблено знімок віртуальної машини зі станом: Snapshot VM with RAM state - 'before_reboot'.

Проблеми:

І ось після перезапуску системи - вітаннячка: pleroma  -  не запускається вже під 'erlang -25'.

Error:

==> prometheus_ex
Compiling 19 files (.ex)

== Compilation error in file lib/prometheus/buckets.ex ==
** (UndefinedFunctionError) function Kernel.Utils.defdelegate/2 is undefined or private. Did you mean:

      * defdelegate_all/3
      * defdelegate_each/2

    (elixir 1.16.3) Kernel.Utils.defdelegate({:new, [line: 18, column: 12], [{:arg, [line: 18, column: 16], nil}]}, [])
    lib/prometheus/buckets.ex:18: (module)
could not compile dependency :prometheus_ex, "mix compile" failed. Errors may have been logged above. You can recompile this dependency with "mix deps.compile prometheus_ex --force", update it with "mix deps.update prometheus_ex" or clean it with "mix deps.clean prometheus_ex" 

Ігри з "prometheus_ex" - не допомагають. Оновити 'pleroma' наразі не можливо, додаткові налаштування краще не чіпати зараз. 

Proxmox VE. Disconnect netwok interface.

Рішення:

  1. Відновити "erlang-21", але є, але pkg не присутній вже в репозиторії версії "FreeBSD 13.4". В архівах швидко не знайшов пакунків. З ports знайшов архівні знімки, але з них не компілюється успішно. Відкладено.
  2. Відновлюю Snapshot VM with RAM state - 'before_reboot'. Допомагає. Система знову працює. Але працює поки не перезавантажити. Через те, що вона тільки в пам'яті з запущеним erlang-21/elixir-1.11.. Відновитися до "before_upgrade" не можу, з'явилася нова інформація.
  3. Відновлю Snapshot VM with RAM state - 'before_upgrade' у якості нової віртуальної машини 201. Через:
    qm disk-detach 201 scsi0
    zfs send storage/vm101-disk-0@before_upgrade | zfs receive -f storage/vm201-disk-0
    qm set 201 --scsi0  storage:vm-201-disk-0
  4. Disconnect netwok interface віртуальної машини 201. Запуск віртуальної машини 201: qm start 201.
  5. В консолі віртуальної машини 201 змінюю налаштування тимчасової IP адреси, щоб не було дублікатів. Connect netwok interface. Піддуюся SSH консоллю. Тут є ще пакунки: elixir-1.11.3 erlang-21.3.8.24_1,4 erlang-man-21.3_2.
  6. Створення резервних пакунків erlang-21 та elixir-1.11 з робочої системи:
    $ mkdir backup_pkg
    $ pkg info -r erlang
    erlang-21.3.8.24_1,4:
            elixir-1.11.3
    $ pkg create -o backup_pkg erlang 
    $ pkg create -o backup_pkg elixir
    $ pkg create -o backup_pkg erlang-man
    $ ls -lh backup_pkg/
    total 40576
    -rw-r--r--  1 root  wheel   5.1M Oct  2 15:58 elixir-1.11.3.pkg
    -rw-r--r--  1 root  wheel    33M Oct  2 15:58 erlang-21.3.8.24_1,4.pkg
    -rw-r--r--  1 root  wheel   1.0M Oct  2 15:58 erlang-man-21.3_2.pkg
    
  7. Перенесення файлів 'backup_pkg/*.pkg' на робочу віртуальну машину 101 через 'nfs' або через 'scp'.
  8. В консолі віртуальної машини 101 видаляю версії "erlang-25.3.2.12_1,4", "elixir-1.16.3", та встановлюю щойно завантаженні.
    $ pkg install erlang-21.3.8.24_1,4.pkg erlang-man-21.3_2.pkg elixir-1.11.3.pkg 
    
  9. Перезапуск застосунку і перевірка роботи, все працює.
  10. Блокування пакунків від майбутнього оновлення до розв'язування питання з оновленням самого застосунку.
    $ pkg lock erlang-21.3.8.24_1,4.pkg erlang-man-21.3_2.pkg elixir-1.11.3.pkg 

Висновок. 

На production це робити - гріх 😀
Рознести дані та застосунок за різним мікросервісам: Postgress database VM. NFS сервер для зображень.
Знімки стану віртуальних машин перед будь-якими важливим діями, має бути правило. Дяка ZFS що робить це дуже швидко.

Коли забув ти рідну мову, біднієш духом ти щодня...
When you forgot your native language you would become a poor at spirit every day ...

Д.Білоус / D.Bilous
Рабів до раю не пускають. Будь вільним!

ipv6 ready