Як клонувати віртуальну машину: детальний посібник зі створення знімків миттєвого стану
Клонування віртуальної машини (ВМ) – це критично важлива операція для тестування, резервного копіювання та швидкого розгортання ідентичних середовищ. Однак повне клонування, особливо великих ВМ, може займати значний час та дисковий простір. У цій статті ми детально розглянемо більш ефективний метод: створення знімків миттєвого стану (snapshots) і клонування на їх основі. Ми розглянемо різні сценарії, інструменти та передові практики для ефективного використання цього методу, забезпечуючи швидке та надійне клонування ваших ВМ.
Зміст:
- Переваги клонування на основі знімків миттєвого стану
- Створення знімка миттєвого стану у VMware ESXi
- Клонування ВМ зі знімка у Proxmox VE
- Автоматизація процесу клонування за допомогою Terraform
- Управління та зберігання знімків: передові практики
Переваги клонування на основі знімків миттєвого стану

- Економія часу: Створення знімка і клонування з нього відбувається значно швидше, ніж повне клонування, особливо для великих ВМ.
- Економія дискового простору: Клонування на основі знімка займає менше місця, оскільки не потребує повної копії диска. Зміни записуються тільки в delta disk.
- Швидке відновлення: Можливість швидкого відкату до попереднього стану ВМ, що корисно при тестуванні і розробці.
- Не впливає на продуктивність основної ВМ: Створення знімка має мінімальний вплив на продуктивність основної ВМ, на відміну від повного клонування. Однак, тривале зберігання і велика кількість знімків можуть впливати на продуктивність.
Створення знімка миттєвого стану у VMware ESXi

- Увійдіть до vSphere Client і підключіться до ESXi хосту або vCenter Server.
- Оберіть ВМ, для якої хочете створити знімок.
- Клікніть правою кнопкою миші на ВМ і виберіть "Snapshots" -> "Take Snapshot...".
- Введіть ім'я та опис знімка.
- Оберіть опцію "Memory" (включити пам'ять ВМ у знімок) за необхідності. Включення пам'яті збільшує розмір знімка і час його створення, але дозволяє повернутися до точного стану ВМ, включаючи стан запущених програм.
- Клікніть "OK".
vim-cmd vmfs/snapshot/create
Де - це ID вашої віртуальної машини. Щоб дізнатися ID, можна використовувати команду:
vim-cmd vmsvc/getallvms
Повний приклад:
vim-cmd vmfs/snapshot/create 123 snapshot-name snapshot-description 0 0
У цій команді:
123- ID віртуальної машини.snapshot-name- Ім'я знімка.snapshot-description- Опис знімка.0- Включити пам'ять (0 - ні, 1 - так).0- Quiesce (0 - ні, 1 - так). Quiesce намагається призупинити файлову систему гостьової ОС для забезпечення консистентності даних. Потребує встановлених VMware Tools.
vmware-cmd
Де - це шлях до конфігураційного файлу ВМ (.vmx). Наприклад:
vmware-cmd /vmfs/volumes/datastore1/MyVM/MyVM.vmx createsnapshot "SnapshotName" "SnapshotDescription" 0 0
Ця команда робить те ж саме, що і приклад з ESXi Shell, але виконується з клієнтської машини, де встановлено vCLI.
Потрібен надійний VPS для ваших клонованих ВМ?
Забезпечте безперебійну роботу ваших віртуальних машин з нашими високопродуктивними VPS-планами. Ідеально для масштабування і тестування. — from €4.49/mo.
Вибрати VPS-план →Шукаєте сервер, який просто працює?
Valebyte VPS — NVMe, підтримка 24/7, розгортання за 60 секунд.
Клонування ВМ зі знімка у Proxmox VE
Proxmox VE також підтримує створення знімків і клонування з них. Процес клонування зі знімка в Proxmox VE трохи відрізняється від VMware, але також відносно простий. Створення знімка в Proxmox VE:- Увійдіть у веб-інтерфейс Proxmox VE.
- Виберіть ВМ, для якої хочете створити знімок.
- Перейдіть на вкладку "Snapshots".
- Натисніть кнопку "Take Snapshot".
- Введіть ім'я знімка та опис (опціонально).
- Натисніть кнопку "Take Snapshot".
- Виберіть ВМ, яку ви хочете клонувати зі знімка.
- Перейдіть на вкладку "Snapshots".
- Виберіть знімок, з якого хочете клонувати.
- Натисніть кнопку "Clone".
- У вікні, що з'явиться, вкажіть:
- "Target Storage": виберіть сховище для клонованої ВМ.
- "VMID": вкажіть новий ID для клонованої ВМ (має бути унікальним).
- "Name": вкажіть ім'я для клонованої ВМ.
- "Mode": виберіть "Full Clone" (створить повну копію диска) або "Linked Clone" (створить клон, який посилається на вихідний знімок, займаючи менше місця, але залежний від вихідного знімка). Для клонування зі знімка рекомендовано "Linked Clone".
- "Target Node": виберіть ноду, на якій буде запущена клонована ВМ.
- "Start after creation": запустити клоновану ВМ одразу після створення.
- Натисніть кнопку "Clone".
qm clone --newid --name --storage --snapshot
Наприклад:
qm clone 100 --newid 200 --name clonevm --storage local-lvm --snapshot snap1
У цій команді:
100- ID вихідної ВМ.200- ID клонованої ВМ.clonevm- Ім'я клонованої ВМ.local-lvm- Ім'я сховища, де буде розміщена клонована ВМ.snap1- Ім'я знімка, з якого буде клонована ВМ.
Для створення linked clone, додайте опцію --linked 1:
qm clone 100 --newid 200 --name clonevm --storage local-lvm --snapshot snap1 --linked 1
Важливо: При використанні linked clone, видалення вихідного знімка призведе до пошкодження клонованої ВМ.
Автоматизація процесу клонування за допомогою Terraform
Terraform – це потужний інструмент Infrastructure as Code (IaC), який дозволяє автоматизувати створення, зміну та управління інфраструктурою, включаючи віртуальні машини. Використання Terraform для клонування ВМ дозволяє зробити цей процес повторюваним, передбачуваним та автоматизованим. Ми розглянемо приклад автоматизації клонування ВМ у VMware vSphere. Попередні вимоги:- Встановлений Terraform.
- Налаштований провайдер VMware vSphere для Terraform.
- Акаунт з достатніми правами в vSphere.
resource "vsphere_virtual_machine" "template_vm" {
name = "template-vm"
resource_pool_id = data.vsphere_compute_cluster.cluster.resource_pool_id
datastore_id = data.vsphere_datastore.datastore.id
num_cpus = 2
memory = 4096
guest_id = "ubuntu64Guest"
network_interface {
network_id = data.vsphere_network.network.id
adapter_type = "e1000e"
}
disk {
label = "disk0"
size = 20
eagerly_scrub = false
thin_provisioned = true
}
}
resource "vsphere_virtual_machine" "cloned_vm" {
name = "cloned-vm"
resource_pool_id = data.vsphere_compute_cluster.cluster.resource_pool_id
datastore_id = data.vsphere_datastore.datastore.id
num_cpus = 2
memory = 4096
guest_id = "ubuntu64Guest"
network_interface {
network_id = data.vsphere_network.network.id
adapter_type = "e1000e"
}
clone {
template_uuid = vsphere_virtual_machine.template_vm.id
customize {
linux_options {
host_name = "cloned-vm"
domain = "example.com"
}
network_interface {
ipv4_address = "192.168.1.100"
ipv4_netmask = 24
}
ipv4_gateway = "192.168.1.1"
}
}
}
У цьому прикладі:
vsphere_virtual_machine "template_vm"- Визначає вихідну ВМ (шаблон), з якої буде проводитися клонування. В даному прикладі створюється нова ВМ "template-vm". В реальному сценарії можна використовувати існуючу ВМ.vsphere_virtual_machine "cloned_vm"- Визначає клоновану ВМ "cloned-vm".clone { template_uuid = vsphere_virtual_machine.template_vm.id }- Вказує, що ВМ "cloned-vm" має бути клонована з ВМ "template_vm".template_uuidвказує на ID вихідної ВМ.customize- Дозволяє налаштувати параметри клонованої ВМ, такі як ім'я хоста, IP-адреса та шлюз. Це важливо для уникнення конфліктів IP-адрес та імен в мережі.
data "vsphere_virtual_machine" "template_vm" {
name = "MyTemplateVM"
}
data "vsphere_virtual_machine_snapshot" "latest_snapshot" {
virtual_machine_uuid = data.vsphere_virtual_machine.template_vm.id
sort = "modify_time_descending"
most_recent = true
}
resource "vsphere_virtual_machine" "cloned_vm" {
name = "ClonedVMFromSnapshot"
resource_pool_id = data.vsphere_compute_cluster.cluster.resource_pool_id
datastore_id = data.vsphere_datastore.datastore.id
num_cpus = 2
memory = 4096
guest_id = "ubuntu64Guest"
network_interface {
network_id = data.vsphere_network.network.id
adapter_type = "e1000e"
}
clone {
template_uuid = data.vsphere_virtual_machine.template_vm.id
snapshot_uuid = data.vsphere_virtual_machine_snapshot.latest_snapshot.id
customize {
linux_options {
host_name = "ClonedVMFromSnapshot"
domain = "example.com"
}
network_interface {
ipv4_address = "192.168.1.101"
ipv4_netmask = 24
}
ipv4_gateway = "192.168.1.1"
}
}
}
У цьому прикладі:
data "vsphere_virtual_machine" "template_vm"- Отримує інформацію про існуючу ВМ "MyTemplateVM".data "vsphere_virtual_machine_snapshot" "latest_snapshot"- Отримує інформацію про останній знімок цієї ВМ.clone { snapshot_uuid = data.vsphere_virtual_machine_snapshot.latest_snapshot.id }- Вказує, що клонування має бути виконане з вказаного знімка.
- Збережіть конфігурацію в файл, наприклад,
main.tf. - Виконайте команду
terraform initдля ініціалізації Terraform. - Виконайте команду
terraform planдля перегляду змін, які будуть внесені. - Виконайте команду
terraform applyдля застосування конфігурації та створення клонованої ВМ.
Управління та зберігання знімків: передові практики
Знімки моментального стану – це потужний інструмент, але неправильне управління ними може призвести до проблем з продуктивністю та нестачі дискового простору. Важливо дотримуватися передових практик для управління та зберігання знімків. Передові практики:- Обмежте кількість знімків: Намагайтеся не створювати занадто багато знімків для однієї ВМ. Велика кількість знімків може значно знизити продуктивність ВМ і збільшити час відкоту до знімку. Рекомендується не більше 2-3 знімків на ВМ.
- Обмежте час зберігання знімків: Знімки не призначені для довгострокового зберігання. Використовуйте їх лише для короткочасних завдань, таких як тестування або резервне копіювання перед важливими змінами. Видаляйте знімки, як тільки вони більше не потрібні. Рекомендується зберігати знімки не більше 72 годин.
- Моніторинг дискового простору: Регулярно перевіряйте використання дискового простору, особливо на сховищах, де зберігаються знімки. Знімки можуть швидко займати багато місця, що може призвести до проблем з продуктивністю та стабільністю. Використовуйте інструменти моніторингу, які надає ваша платформа віртуалізації, для відстеження використання дискового простору.
- Плануйте видалення знімків: Розробіть план з видалення старих знімків. Наприклад, можна встановити правило, яке автоматично видаляє знімки старше певного віку.
- Уникайте знімків на виробничих ВМ: За можливості, уникайте створення знімків на виробничих ВМ, особливо під час пікових навантажень. Створення знімку може призвести до короткочасної зупинки ВМ, що може вплинути на доступність сервісу. Якщо необхідно створити знімок на виробничій ВМ, плануйте це на час мінімального навантаження.
- Використовуйте повне клонування для довгострокового резервного копіювання: Знімки не є заміною повноцінному резервному копіюванню. Для довгострокового зберігання даних використовуйте повне клонування або інші методи резервного копіювання.
- Розуміння типів знімків: Знайте різницю між знімками з пам'яттю і без пам'яті. Знімки з пам'яттю корисні для відкоту до точного стану ВМ, включаючи стан запущених програм, але вони займають більше місця і вимагають більше часу на створення.
- Увійдіть до vSphere Client.
- Виберіть сховище (datastore), яке ви хочете перевірити.
- Перейдіть на вкладку "Monitor" -> "Performance".
- Виберіть "Disk" у випадаючому списку "Chart options".
- Перевірте графіки "Used space" і "Free space".
qm snapshot-delete
Де - це ID ВМ і - ім'я знімку, який потрібно видалити. Наприклад:
qm snapshot-delete 100 snap1
Ця команда видалить знімок "snap1" у ВМ з ID 100.
Дотримуючись цих передових практик, ви зможете ефективно керувати знімками моментального стану і уникнути проблем, пов'язаних з їх використанням. Правильне управління знімками допоможе вам підтримувати високу продуктивність і стабільність вашої віртуальної інфраструктури.Масштабуйте свої проєкти з хмарними інстансами
Перенесіть свої клоновані ВМ у хмару для максимальної гнучкості та масштабованості. Створюйте та керуйте інстансами легко.
Почати з хмари →