Customizable template for creating migration runbooks for your specific VM migrations.
| Field | Value |
|---|---|
| Project Name | [PROJECT_NAME] |
| Migration ID | [MIG-YYYY-MM-DD-##] |
| Prepared By | [YOUR_NAME] |
| Date Prepared | [YYYY-MM-DD] |
| Last Updated | [YYYY-MM-DD] |
| Status | [DRAFT/APPROVED/IN-PROGRESS/COMPLETE] |
| Phase | Planned Date/Time | Actual Date/Time |
|---|---|---|
| Pre-Migration Testing | [YYYY-MM-DD HH:MM] | |
| Migration Execution | [YYYY-MM-DD HH:MM] | |
| Validation | [YYYY-MM-DD HH:MM] | |
| Production Cutover | [YYYY-MM-DD HH:MM] |
| VM Name | OS | Size (GB) | Priority | Dependencies |
|---|---|---|---|---|
| [VM-NAME-1] | [OS-VERSION] | [SIZE] | [HIGH/MEDIUM/LOW] | [LIST-DEPS] |
| [VM-NAME-2] | [OS-VERSION] | [SIZE] | [HIGH/MEDIUM/LOW] | [LIST-DEPS] |
| [VM-NAME-3] | [OS-VERSION] | [SIZE] | [HIGH/MEDIUM/LOW] | [LIST-DEPS] |
Total VMs: [NUMBER] Total Size: [SIZE] GB
Source Environment:
Target Environment:
Migration Server Details:
Hostname: [MIGRATION-SERVER]
IP Address: [IP-ADDRESS]
OS: [OS-VERSION]
CPUs: [NUMBER]
Memory: [SIZE] GB
Disk Space: [SIZE] GB
Network: [BANDWIDTH] Mbps
Source Access:
[USERNAME][PATH-TO-KEY]Target Access:
[USERNAME]@[HOSTNAME][OUTPUT-DIR][VERSION][VERSION]| VM | Backup Date | Backup Location | Verified |
|---|---|---|---|
| [VM-NAME-1] | [YYYY-MM-DD] | [LOCATION] | [ ] |
| [VM-NAME-2] | [YYYY-MM-DD] | [LOCATION] | [ ] |
| [VM-NAME-3] | [YYYY-MM-DD] | [LOCATION] | [ ] |
| Role | Name | Phone | Notified | |
|---|---|---|---|---|
| Project Manager | [NAME] | [EMAIL] | [PHONE] | [ ] |
| Technical Lead | [NAME] | [EMAIL] | [PHONE] | [ ] |
| Application Owner | [NAME] | [EMAIL] | [PHONE] | [ ] |
| Operations Team | [NAME] | [EMAIL] | [PHONE] | [ ] |
Notification Template:
Subject: VM Migration - [PROJECT_NAME] - [DATE]
Dear Team,
This is to inform you that we will be migrating the following VMs:
- [VM-LIST]
Schedule:
- Start: [START-TIME]
- Expected completion: [END-TIME]
- Expected downtime: [DURATION]
Impact:
- [DESCRIBE-IMPACT]
Rollback plan:
- [DESCRIBE-ROLLBACK]
Contact for issues:
- [CONTACT-INFO]
Time: [YYYY-MM-DD HH:MM]
# Verify backup dates
[BACKUP-VERIFICATION-COMMAND]
./pre-flight-check.sh
[CONFIG-DIR]/*.yamlPlanned Start: [HH:MM] Actual Start: ___ Actual End: ___
Pre-Migration:
IP Address: [IP]
Services running: [SERVICE-LIST]
Shutdown Source VM:
# On VMware
ssh root@[ESXI-HOST] "vim-cmd vmsvc/power.off [VM-ID]"
# Verify powered off
ssh root@[ESXI-HOST] "vim-cmd vmsvc/power.getstate [VM-ID]"
Execute Migration:
# Start migration
h2kvmctl --config /path/to/[VM-NAME-1].yaml 2>&1 | tee migration-[VM-NAME-1].log
# Monitor progress
tail -f migration-[VM-NAME-1].log
Configuration Used:
command: local
vmdk: [SOURCE-VMDK-PATH]
output_dir: [OUTPUT-DIR]
to_output: [VM-NAME-1].qcow2
# Options
fstab_mode: stabilize-all
regen_initramfs: true
update_grub: true
compress: [true/false]
# [Add any special options]
Validation:
# Verify output
qemu-img info [OUTPUT-DIR]/[VM-NAME-1].qcow2
qemu-img check [OUTPUT-DIR]/[VM-NAME-1].qcow2
Boot Test:
# Import to libvirt
virsh define [OUTPUT-DIR]/[VM-NAME-1].xml
# Start VM
virsh start [VM-NAME-1]
# Console access
virsh console [VM-NAME-1]
Application Validation:
Issues Encountered:
[DESCRIBE ANY ISSUES]
Resolution:
[DESCRIBE RESOLUTION]
[Repeat same structure as VM 1]
[Repeat same structure as VM 1]
Time: [HH:MM]
For each VM:
# Test VM-to-VM connectivity
ping [VM-2] from [VM-1]
ping [VM-3] from [VM-1]
# Test external access
curl [EXTERNAL-SERVICE]
# Test database connections
[DB-TEST-COMMAND]
Performance Test Results:
# Run performance tests
[PERFORMANCE-TEST-COMMAND]
Results:
[TEST-RESULTS]
Planned Time: [HH:MM] Actual Time: ___
[VM-NAME-1]: [OLD-IP] → [NEW-IP]
[VM-NAME-2]: [OLD-IP] → [NEW-IP]
[VM-NAME-3]: [OLD-IP] → [NEW-IP]
[LOAD-BALANCER-UPDATE-COMMAND]
[FIREWALL-UPDATE-COMMAND]
[SERVICE-RESTART-COMMANDS]
Rollback if:
Decision Point: [HH:MM] Decision Maker: [NAME]
Estimated Rollback Time: [DURATION]
# Stop all migrated VMs
virsh shutdown [VM-NAME-1]
virsh shutdown [VM-NAME-2]
virsh shutdown [VM-NAME-3]
# Force if necessary
virsh destroy [VM-NAME-1]
virsh destroy [VM-NAME-2]
virsh destroy [VM-NAME-3]
# On VMware
ssh root@[ESXI-HOST] "vim-cmd vmsvc/power.on [VM-ID-1]"
ssh root@[ESXI-HOST] "vim-cmd vmsvc/power.on [VM-ID-2]"
ssh root@[ESXI-HOST] "vim-cmd vmsvc/power.on [VM-ID-3]"
Rollback Notification:
Subject: Migration Rollback - [PROJECT_NAME]
The migration has been rolled back due to:
[REASON]
All systems have been restored to source environment.
Current status: [STATUS]
Next steps: [NEXT-STEPS]
Rollback Completed: ___
What went well:
[NOTES]
What could be improved:
[NOTES]
Issues encountered:
[NOTES]
| Role | Name | Phone | Escalation Order | |
|---|---|---|---|---|
| Primary | [NAME] | [PHONE] | [EMAIL] | 1 |
| Secondary | [NAME] | [PHONE] | [EMAIL] | 2 |
| Manager | [NAME] | [PHONE] | [EMAIL] | 3 |
| Vendor | Support Number | Support Email | Account Number |
|---|---|---|---|
| Hyper2KVM | [SUPPORT-INFO] | support@hyper2kvm.io | [ACCOUNT] |
| VMware | [SUPPORT-INFO] | [EMAIL] | [ACCOUNT] |
| [OTHER] | [SUPPORT-INFO] | [EMAIL] | [ACCOUNT] |
Location: [CONFIG-DIR]
Files:
[VM-NAME-1].yaml[VM-NAME-2].yaml[VM-NAME-3].yamlbatch.yaml (if applicable)Location: [SCRIPTS-DIR]
Scripts:
pre-flight-check.shmigration-monitor.shvalidation-check.shrollback.shLocation: [LOGS-DIR]
Logs:
migration-[VM-NAME].logvalidation-[VM-NAME].logsystem.log| Phase | Approver | Date | Signature |
|---|---|---|---|
| Pre-Migration | [NAME] | [DATE] | ___ |
| Migration | [NAME] | [DATE] | ___ |
| Validation | [NAME] | [DATE] | ___ |
| Cutover | [NAME] | [DATE] | ___ |
| Completion | [NAME] | [DATE] | ___ |
| Version | Date | Author | Changes |
|---|---|---|---|
| 1.0 | [YYYY-MM-DD] | [NAME] | Initial version |
| 1.1 | [YYYY-MM-DD] | [NAME] | [CHANGES] |
Runbook Template Version: 2.1.0 Last Updated: February 2026
Template: Download blank template Example: See example runbook
Last Updated: February 2026 Documentation Version: 2.1.0