Rebuilt Astro site with BASE=vjailbreak; old build had base baked as vjailbreak-docs, causing all CSS/JS asset URLs to 404 on GH Pages. Co-Authored-By: Claude Sonnet 5 <[email protected]>
507 lines
131 KiB
HTML
507 lines
131 KiB
HTML
<!DOCTYPE html><html lang="en" dir="ltr" data-theme="dark" data-has-toc data-has-sidebar class="astro-bguv2lll"> <head><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title>vJailbreak Accelerated Copy | vJailbreak</title><link rel="canonical" href="https://platform9.github.io/vjailbreak/concepts/vjailbreak-accelerated-copy/"/><link rel="sitemap" href="/vjailbreak/sitemap-index.xml"/><link rel="shortcut icon" href="/vjailbreak/favicon.svg" type="image/svg+xml"/><meta name="generator" content="Astro v5.12.8"/><meta name="generator" content="Starlight v0.32.6"/><meta property="og:title" content="vJailbreak Accelerated Copy"/><meta property="og:type" content="article"/><meta property="og:url" content="https://platform9.github.io/vjailbreak/concepts/vjailbreak-accelerated-copy/"/><meta property="og:locale" content="en"/><meta property="og:description" content="High-performance VM migration using a Proxy VM for direct disk attachment and NBD-based data transfer"/><meta property="og:site_name" content="vJailbreak"/><meta name="twitter:card" content="summary_large_image"/><meta name="description" content="High-performance VM migration using a Proxy VM for direct disk attachment and NBD-based data transfer"/><script>
|
||
window.StarlightThemeProvider = (() => {
|
||
const storedTheme =
|
||
typeof localStorage !== 'undefined' && localStorage.getItem('starlight-theme');
|
||
const theme =
|
||
storedTheme ||
|
||
(window.matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark');
|
||
document.documentElement.dataset.theme = theme === 'light' ? 'light' : 'dark';
|
||
return {
|
||
updatePickers(theme = storedTheme || 'auto') {
|
||
document.querySelectorAll('starlight-theme-select').forEach((picker) => {
|
||
const select = picker.querySelector('select');
|
||
if (select) select.value = theme;
|
||
/** @type {HTMLTemplateElement | null} */
|
||
const tmpl = document.querySelector(`#theme-icons`);
|
||
const newIcon = tmpl && tmpl.content.querySelector('.' + theme);
|
||
if (newIcon) {
|
||
const oldIcon = picker.querySelector('svg.label-icon');
|
||
if (oldIcon) {
|
||
oldIcon.replaceChildren(...newIcon.cloneNode(true).childNodes);
|
||
}
|
||
}
|
||
});
|
||
},
|
||
};
|
||
})();
|
||
</script><template id="theme-icons"><svg aria-hidden="true" class="light astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M5 12a1 1 0 0 0-1-1H3a1 1 0 0 0 0 2h1a1 1 0 0 0 1-1Zm.64 5-.71.71a1 1 0 0 0 0 1.41 1 1 0 0 0 1.41 0l.71-.71A1 1 0 0 0 5.64 17ZM12 5a1 1 0 0 0 1-1V3a1 1 0 0 0-2 0v1a1 1 0 0 0 1 1Zm5.66 2.34a1 1 0 0 0 .7-.29l.71-.71a1 1 0 1 0-1.41-1.41l-.66.71a1 1 0 0 0 0 1.41 1 1 0 0 0 .66.29Zm-12-.29a1 1 0 0 0 1.41 0 1 1 0 0 0 0-1.41l-.71-.71a1.004 1.004 0 1 0-1.43 1.41l.73.71ZM21 11h-1a1 1 0 0 0 0 2h1a1 1 0 0 0 0-2Zm-2.64 6A1 1 0 0 0 17 18.36l.71.71a1 1 0 0 0 1.41 0 1 1 0 0 0 0-1.41l-.76-.66ZM12 6.5a5.5 5.5 0 1 0 5.5 5.5A5.51 5.51 0 0 0 12 6.5Zm0 9a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7Zm0 3.5a1 1 0 0 0-1 1v1a1 1 0 0 0 2 0v-1a1 1 0 0 0-1-1Z"/></svg> <svg aria-hidden="true" class="dark astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21.64 13a1 1 0 0 0-1.05-.14 8.049 8.049 0 0 1-3.37.73 8.15 8.15 0 0 1-8.14-8.1 8.59 8.59 0 0 1 .25-2A1 1 0 0 0 8 2.36a10.14 10.14 0 1 0 14 11.69 1 1 0 0 0-.36-1.05Zm-9.5 6.69A8.14 8.14 0 0 1 7.08 5.22v.27a10.15 10.15 0 0 0 10.14 10.14 9.784 9.784 0 0 0 2.1-.22 8.11 8.11 0 0 1-7.18 4.32v-.04Z"/></svg> <svg aria-hidden="true" class="auto astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21 14h-1V7a3 3 0 0 0-3-3H7a3 3 0 0 0-3 3v7H3a1 1 0 0 0-1 1v2a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3v-2a1 1 0 0 0-1-1ZM6 7a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v7H6V7Zm14 10a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-1h16v1Z"/></svg> </template><link rel="stylesheet" href="/vjailbreak/_astro/print.BJ0teN4y.css" media="print"><link rel="stylesheet" href="/vjailbreak/_astro/index.V9BDhjML.css">
|
||
<style>:root{--sl-badge-default-border: var(--sl-color-accent);--sl-badge-default-bg: var(--sl-color-accent-low);--sl-badge-default-text: #fff;--sl-badge-note-border: var(--sl-color-blue);--sl-badge-note-bg: var(--sl-color-blue-low);--sl-badge-note-text: #fff;--sl-badge-danger-border: var(--sl-color-red);--sl-badge-danger-bg: var(--sl-color-red-low);--sl-badge-danger-text: #fff;--sl-badge-success-border: var(--sl-color-green);--sl-badge-success-bg: var(--sl-color-green-low);--sl-badge-success-text: #fff;--sl-badge-caution-border: var(--sl-color-orange);--sl-badge-caution-bg: var(--sl-color-orange-low);--sl-badge-caution-text: #fff;--sl-badge-tip-border: var(--sl-color-purple);--sl-badge-tip-bg: var(--sl-color-purple-low);--sl-badge-tip-text: #fff}[data-theme=light]:root{--sl-badge-default-bg: var(--sl-color-accent-high);--sl-badge-note-bg: var(--sl-color-blue-high);--sl-badge-danger-bg: var(--sl-color-red-high);--sl-badge-success-bg: var(--sl-color-green-high);--sl-badge-caution-bg: var(--sl-color-orange-high);--sl-badge-tip-bg: var(--sl-color-purple-high)}.sl-badge:where(.astro-avdet4wd){display:inline-block;border:1px solid var(--sl-color-border-badge);border-radius:.25rem;font-family:var(--sl-font-system-mono);line-height:normal;color:var(--sl-color-text-badge);background-color:var(--sl-color-bg-badge);overflow-wrap:anywhere}.sidebar-content .sl-badge:where(.astro-avdet4wd){line-height:1;font-size:var(--sl-text-xs);padding:.125rem .375rem}.sidebar-content a[aria-current=page]>.sl-badge:where(.astro-avdet4wd){--sl-color-bg-badge: transparent;--sl-color-border-badge: currentColor;color:inherit}.default:where(.astro-avdet4wd){--sl-color-bg-badge: var(--sl-badge-default-bg);--sl-color-border-badge: var(--sl-badge-default-border);--sl-color-text-badge: var(--sl-badge-default-text)}.note:where(.astro-avdet4wd){--sl-color-bg-badge: var(--sl-badge-note-bg);--sl-color-border-badge: var(--sl-badge-note-border);--sl-color-text-badge: var(--sl-badge-note-text)}.danger:where(.astro-avdet4wd){--sl-color-bg-badge: var(--sl-badge-danger-bg);--sl-color-border-badge: var(--sl-badge-danger-border);--sl-color-text-badge: var(--sl-badge-danger-text)}.success:where(.astro-avdet4wd){--sl-color-bg-badge: var(--sl-badge-success-bg);--sl-color-border-badge: var(--sl-badge-success-border);--sl-color-text-badge: var(--sl-badge-success-text)}.tip:where(.astro-avdet4wd){--sl-color-bg-badge: var(--sl-badge-tip-bg);--sl-color-border-badge: var(--sl-badge-tip-border);--sl-color-text-badge: var(--sl-badge-tip-text)}.caution:where(.astro-avdet4wd){--sl-color-bg-badge: var(--sl-badge-caution-bg);--sl-color-border-badge: var(--sl-badge-caution-border);--sl-color-text-badge: var(--sl-badge-caution-text)}.small:where(.astro-avdet4wd){font-size:var(--sl-text-xs);padding:.125rem .25rem}.medium:where(.astro-avdet4wd){font-size:var(--sl-text-sm);padding:.175rem .35rem}.large:where(.astro-avdet4wd){font-size:var(--sl-text-base);padding:.225rem .45rem}.sl-markdown-content :is(h1,h2,h3,h4,h5,h6) .sl-badge:where(.astro-avdet4wd){vertical-align:middle}
|
||
.card-grid:where(.astro-zntqmydn){display:grid;grid-template-columns:100%;gap:1rem}.card-grid:where(.astro-zntqmydn)>*{margin-top:0!important}@media (min-width: 50rem){.card-grid:where(.astro-zntqmydn){grid-template-columns:1fr 1fr;gap:1.5rem}.stagger:where(.astro-zntqmydn){--stagger-height: 5rem;padding-bottom:var(--stagger-height)}.stagger:where(.astro-zntqmydn)>*:nth-child(2n){transform:translateY(var(--stagger-height))}}
|
||
.card:where(.astro-v5tidmuc){--sl-card-border: var(--sl-color-purple);--sl-card-bg: var(--sl-color-purple-low);border:1px solid var(--sl-color-gray-5);background-color:var(--sl-color-black);padding:clamp(1rem,calc(.125rem + 3vw),2.5rem);flex-direction:column;gap:clamp(.5rem,calc(.125rem + 1vw),1rem)}.card:where(.astro-v5tidmuc):nth-child(4n+1){--sl-card-border: var(--sl-color-orange);--sl-card-bg: var(--sl-color-orange-low)}.card:where(.astro-v5tidmuc):nth-child(4n+3){--sl-card-border: var(--sl-color-green);--sl-card-bg: var(--sl-color-green-low)}.card:where(.astro-v5tidmuc):nth-child(4n+4){--sl-card-border: var(--sl-color-red);--sl-card-bg: var(--sl-color-red-low)}.card:where(.astro-v5tidmuc):nth-child(4n+5){--sl-card-border: var(--sl-color-blue);--sl-card-bg: var(--sl-color-blue-low)}.title:where(.astro-v5tidmuc){font-weight:600;font-size:var(--sl-text-h4);color:var(--sl-color-white);line-height:var(--sl-line-height-headings);gap:1rem;align-items:center}.card:where(.astro-v5tidmuc) .icon:where(.astro-v5tidmuc){border:1px solid var(--sl-card-border);background-color:var(--sl-card-bg);padding:.2em;border-radius:.25rem}.card:where(.astro-v5tidmuc) .body:where(.astro-v5tidmuc){margin:0;font-size:clamp(var(--sl-text-sm),calc(.5rem + 1vw),var(--sl-text-body))}
|
||
svg:where(.astro-c6vsoqas){color:var(--sl-icon-color);font-size:var(--sl-icon-size, 1em);width:1em;height:1em}
|
||
starlight-tabs:where(.astro-esqgolmp){display:block}.tablist-wrapper:where(.astro-esqgolmp){overflow-x:auto}:where(.astro-esqgolmp)[role=tablist]{display:flex;list-style:none;border-bottom:2px solid var(--sl-color-gray-5);padding:0}.tab:where(.astro-esqgolmp){margin-bottom:-2px}.tab:where(.astro-esqgolmp)>:where(.astro-esqgolmp)[role=tab]{display:flex;align-items:center;gap:.5rem;padding:0 1.25rem;text-decoration:none;border-bottom:2px solid var(--sl-color-gray-5);color:var(--sl-color-gray-3);outline-offset:var(--sl-outline-offset-inside);overflow-wrap:initial}.tab:where(.astro-esqgolmp) :where(.astro-esqgolmp)[role=tab][aria-selected=true]{color:var(--sl-color-white);border-color:var(--sl-color-text-accent);font-weight:600}.tablist-wrapper:where(.astro-esqgolmp)~[role=tabpanel]{margin-top:1rem}
|
||
.sl-steps{--bullet-size: calc(var(--sl-line-height) * 1rem);--bullet-margin: .375rem;list-style:none;counter-reset:steps-counter var(--sl-steps-start, 0);padding-inline-start:0}.sl-steps>li{counter-increment:steps-counter;position:relative;padding-inline-start:calc(var(--bullet-size) + 1rem);padding-bottom:1px;min-height:calc(var(--bullet-size) + var(--bullet-margin))}.sl-steps>li+li{margin-top:0}.sl-steps>li:before{content:counter(steps-counter);position:absolute;top:0;inset-inline-start:0;width:var(--bullet-size);height:var(--bullet-size);line-height:var(--bullet-size);font-size:var(--sl-text-xs);font-weight:600;text-align:center;color:var(--sl-color-white);background-color:var(--sl-color-gray-6);border-radius:99rem;box-shadow:inset 0 0 0 1px var(--sl-color-gray-5)}.sl-steps>li:after{--guide-width: 1px;content:"";position:absolute;top:calc(var(--bullet-size) + var(--bullet-margin));bottom:var(--bullet-margin);inset-inline-start:calc((var(--bullet-size) - var(--guide-width)) / 2);width:var(--guide-width);background-color:var(--sl-color-hairline-light)}.sl-steps>li>:first-child{--lh: calc(1em * var(--sl-line-height));--shift-y: calc(.5 * (var(--bullet-size) - var(--lh)));transform:translateY(var(--shift-y));margin-bottom:var(--shift-y)}.sl-steps>li>:first-child:where(h1,h2,h3,h4,h5,h6){--lh: calc(1em * var(--sl-line-height-headings))}@supports (--prop: 1lh){.sl-steps>li>:first-child{--lh: 1lh}}
|
||
.sl-link-button:where(.astro-xwgiixxa){align-items:center;border:1px solid transparent;border-radius:999rem;display:inline-flex;font-size:var(--sl-text-sm);gap:.5em;line-height:1.1875;outline-offset:.25rem;padding:.4375rem 1.125rem;text-decoration:none}.sl-link-button:where(.astro-xwgiixxa).primary{background:var(--sl-color-text-accent);border-color:var(--sl-color-text-accent);color:var(--sl-color-black)}.sl-link-button:where(.astro-xwgiixxa).primary:hover{color:var(--sl-color-black)}.sl-link-button:where(.astro-xwgiixxa).secondary{border-color:inherit;color:var(--sl-color-white)}.sl-link-button:where(.astro-xwgiixxa).minimal{color:var(--sl-color-white);padding-inline:0}.sl-link-button:where(.astro-xwgiixxa) svg{flex-shrink:0}@media (min-width: 50rem){.sl-link-button:where(.astro-xwgiixxa){font-size:var(--sl-text-base);padding:.9375rem 1.25rem}}.sl-markdown-content .sl-link-button:where(.astro-xwgiixxa){margin-inline-end:1rem}.sl-markdown-content .sl-link-button:where(.astro-xwgiixxa):not(:where(p *)){margin-block:1rem}
|
||
</style><script type="module" src="/vjailbreak/_astro/page.Es7s6Xc5.js"></script></head> <body class="astro-bguv2lll"> <a href="#_top" class="astro-7q3lir66">Skip to content</a> <div class="page sl-flex astro-vrdttmbt"> <header class="header astro-vrdttmbt"><div class="header sl-flex astro-3ef6ksr2"> <div class="title-wrapper sl-flex astro-3ef6ksr2"> <a href="/vjailbreak/" class="site-title sl-flex astro-m46x6ez3"> <img class="astro-m46x6ez3" alt src="/vjailbreak/_astro/platform9-logo.PaszzYBQ.svg" width="120" height="60"> <span class="sr-only astro-m46x6ez3" translate="no"> vJailbreak </span> </a> </div> <div class="sl-flex print:hidden astro-3ef6ksr2"> <site-search class="astro-3ef6ksr2 astro-v37mnknz" data-translations="{"placeholder":"Search"}"> <button data-open-modal disabled aria-label="Search" aria-keyshortcuts="Control+K" class="astro-v37mnknz"> <svg aria-hidden="true" class="astro-v37mnknz astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21.71 20.29 18 16.61A9 9 0 1 0 16.61 18l3.68 3.68a.999.999 0 0 0 1.42 0 1 1 0 0 0 0-1.39ZM11 18a7 7 0 1 1 0-14 7 7 0 0 1 0 14Z"/></svg> <span class="sl-hidden md:sl-block astro-v37mnknz" aria-hidden="true">Search</span> <kbd class="sl-hidden md:sl-flex astro-v37mnknz" style="display: none;"> <kbd class="astro-v37mnknz">Ctrl</kbd><kbd class="astro-v37mnknz">K</kbd> </kbd> </button> <dialog style="padding:0" aria-label="Search" class="astro-v37mnknz"> <div class="dialog-frame sl-flex astro-v37mnknz"> <button data-close-modal class="sl-flex md:sl-hidden astro-v37mnknz"> Cancel </button> <div class="search-container astro-v37mnknz"> <div id="starlight__search" class="astro-v37mnknz"></div> </div> </div> </dialog> </site-search> <script>
|
||
(() => {
|
||
const openBtn = document.querySelector('button[data-open-modal]');
|
||
const shortcut = openBtn?.querySelector('kbd');
|
||
if (!openBtn || !(shortcut instanceof HTMLElement)) return;
|
||
const platformKey = shortcut.querySelector('kbd');
|
||
if (platformKey && /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)) {
|
||
platformKey.textContent = '⌘';
|
||
openBtn.setAttribute('aria-keyshortcuts', 'Meta+K');
|
||
}
|
||
shortcut.style.display = '';
|
||
})();
|
||
</script> <script type="module" src="/vjailbreak/_astro/Search.astro_astro_type_script_index_0_lang.PKSD7nbt.js"></script> </div> <div class="sl-hidden md:sl-flex print:hidden right-group astro-3ef6ksr2"> <div class="sl-flex social-icons astro-3ef6ksr2"> <a href="https://github.com/platform9/vjailbreak" rel="me" class="sl-flex astro-wy4te6ga"><span class="sr-only astro-wy4te6ga">GitHub</span><svg aria-hidden="true" class="astro-wy4te6ga astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M12 .3a12 12 0 0 0-3.8 23.38c.6.12.83-.26.83-.57L9 21.07c-3.34.72-4.04-1.61-4.04-1.61-.55-1.39-1.34-1.76-1.34-1.76-1.08-.74.09-.73.09-.73 1.2.09 1.83 1.24 1.83 1.24 1.08 1.83 2.81 1.3 3.5 1 .1-.78.42-1.31.76-1.61-2.67-.3-5.47-1.33-5.47-5.93 0-1.31.47-2.38 1.24-3.22-.14-.3-.54-1.52.1-3.18 0 0 1-.32 3.3 1.23a11.5 11.5 0 0 1 6 0c2.28-1.55 3.29-1.23 3.29-1.23.64 1.66.24 2.88.12 3.18a4.65 4.65 0 0 1 1.23 3.22c0 4.61-2.8 5.63-5.48 5.92.42.36.81 1.1.81 2.22l-.01 3.29c0 .31.2.69.82.57A12 12 0 0 0 12 .3Z"/></svg> </a><a href="https://join.slack.com/t/vjailbreak/shared_invite/zt-314pppw43-F1vzd6ZaPW5PoZqF~aa8lA" rel="me" class="sl-flex astro-wy4te6ga"><span class="sr-only astro-wy4te6ga">Slack</span><svg aria-hidden="true" class="astro-wy4te6ga astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52Zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313ZM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834Zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312Zm10.122 2.521a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834Zm-1.268 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312Zm-2.523 10.122a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52Zm0-1.268a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313Z"/></svg> </a> </div> <div class="sl-flex release-dropdown astro-3ef6ksr2"> <!-- Dropdown --><div class="select-container"> <label for="release-select" class="select-label">Latest Release:</label> <select id="release-select" class="release-select"> <option>Loading releases...</option> </select> </div> <script>(function(){const astroBaseURL = "https://platform9.github.io/";
|
||
|
||
document.addEventListener('DOMContentLoaded', async () => {
|
||
const CACHE_KEY = 'githubReleases';
|
||
const CACHE_EXPIRY = 60 * 60 * 1000; // 1 hour
|
||
const select = document.getElementById('release-select');
|
||
|
||
// Check cache first
|
||
if (typeof window !== 'undefined' && window.localStorage) {
|
||
const cachedReleases = localStorage.getItem(CACHE_KEY);
|
||
const cacheExpiry = localStorage.getItem(`${CACHE_KEY}_expiry`);
|
||
|
||
if (cachedReleases && cacheExpiry && Date.now() < Number(cacheExpiry)) {
|
||
try {
|
||
console.debug("Reading releases from cache:", JSON.parse(cachedReleases)); // Debug log
|
||
populateDropdown(JSON.parse(cachedReleases));
|
||
return;
|
||
} catch (e) {
|
||
console.warn("Cache corrupted clearing", e);
|
||
localStorage.removeItem(CACHE_KEY)
|
||
localStorage.removeItem(`${CACHE_KEY}_expiry`)
|
||
}
|
||
}
|
||
}
|
||
|
||
try {
|
||
console.debug("Fetching releases from GitHub"); // Debug log
|
||
const response = await fetch('https://api.github.com/repos/platform9/vjailbreak/releases');
|
||
const data = await response.json();
|
||
const releases = data.slice(0, 5);
|
||
|
||
// Store in cache
|
||
if (typeof window !== 'undefined' && window.localStorage) {
|
||
localStorage.setItem(CACHE_KEY, JSON.stringify(releases));
|
||
localStorage.setItem(`${CACHE_KEY}_expiry`, String(Date.now() + CACHE_EXPIRY));
|
||
}
|
||
|
||
populateDropdown(releases);
|
||
} catch (error) {
|
||
console.error("Error fetching releases:", error);
|
||
populateDropdown([{
|
||
id: 0,
|
||
name: "v0.1.7",
|
||
html_url: "https://github.com/platform9/vjailbreak/releases/tag/v0.1.7"
|
||
}]);
|
||
}
|
||
|
||
function populateDropdown(releases) {
|
||
const currentURL = astroBaseURL || window.location.origin; // Use Astro.site if available
|
||
const pathPrefix = astroBaseURL ? '/vjailbreak/release_docs/' : '/release_docs/';
|
||
select.innerHTML = releases.map(release => {
|
||
const nameModified = release.name.replace(/\./g, '');
|
||
const releaseDocsURL = `${currentURL}${pathPrefix}${nameModified}/`;
|
||
return `<option value="${release.name}">${release.name}</option>`;
|
||
}).join('');
|
||
|
||
select.selectedIndex = 0;
|
||
|
||
localStorage.setItem('vjailbreakSelectedVersion', select.value);
|
||
select.onchange = (e) => {
|
||
localStorage.setItem('vjailbreakSelectedVersion', e.target.value);
|
||
|
||
const version = e.target.value;
|
||
const btns = document.querySelectorAll('.version-btn');
|
||
btns.forEach(btn => {
|
||
if (btn.textContent === version) {
|
||
btn.click();
|
||
}
|
||
});
|
||
};
|
||
}
|
||
});
|
||
})();</script> </div> <starlight-theme-select> <label style="--sl-select-width: 6.25em" class="astro-4yphtoen"> <span class="sr-only astro-4yphtoen">Select theme</span> <svg aria-hidden="true" class="icon label-icon astro-4yphtoen astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21 14h-1V7a3 3 0 0 0-3-3H7a3 3 0 0 0-3 3v7H3a1 1 0 0 0-1 1v2a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3v-2a1 1 0 0 0-1-1ZM6 7a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v7H6V7Zm14 10a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-1h16v1Z"/></svg> <select value="auto" autocomplete="off" class="astro-4yphtoen"> <option value="dark" class="astro-4yphtoen">Dark</option><option value="light" class="astro-4yphtoen">Light</option><option value="auto" selected class="astro-4yphtoen">Auto</option> </select> <svg aria-hidden="true" class="icon caret astro-4yphtoen astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M17 9.17a1 1 0 0 0-1.41 0L12 12.71 8.46 9.17a1 1 0 1 0-1.41 1.42l4.24 4.24a1.002 1.002 0 0 0 1.42 0L17 10.59a1.002 1.002 0 0 0 0-1.42Z"/></svg> </label> </starlight-theme-select> <script>
|
||
StarlightThemeProvider.updatePickers();
|
||
</script> <script type="module">const r="starlight-theme",o=e=>e==="auto"||e==="dark"||e==="light"?e:"auto",c=()=>o(typeof localStorage<"u"&&localStorage.getItem(r));function n(e){typeof localStorage<"u"&&localStorage.setItem(r,e==="light"||e==="dark"?e:"")}const l=()=>matchMedia("(prefers-color-scheme: light)").matches?"light":"dark";function t(e){StarlightThemeProvider.updatePickers(e),document.documentElement.dataset.theme=e==="auto"?l():e,n(e)}matchMedia("(prefers-color-scheme: light)").addEventListener("change",()=>{c()==="auto"&&t("auto")});class s extends HTMLElement{constructor(){super(),t(c()),this.querySelector("select")?.addEventListener("change",a=>{a.currentTarget instanceof HTMLSelectElement&&t(o(a.currentTarget.value))})}}customElements.define("starlight-theme-select",s);</script> <script type="module">class s extends HTMLElement{constructor(){super();const e=this.querySelector("select");e&&(e.addEventListener("change",t=>{t.currentTarget instanceof HTMLSelectElement&&(window.location.pathname=t.currentTarget.value)}),window.addEventListener("pageshow",t=>{if(!t.persisted)return;const n=e.querySelector("option[selected]")?.index;n!==e.selectedIndex&&(e.selectedIndex=n??0)}))}}customElements.define("starlight-lang-select",s);</script> </div> </div> </header> <nav class="sidebar print:hidden astro-vrdttmbt" aria-label="Main"> <starlight-menu-button class="print:hidden astro-jif73yzw"> <button aria-expanded="false" aria-label="Menu" aria-controls="starlight__sidebar" class="sl-flex md:sl-hidden astro-jif73yzw"> <svg aria-hidden="true" class="astro-jif73yzw astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M3 8h18a1 1 0 1 0 0-2H3a1 1 0 0 0 0 2Zm18 8H3a1 1 0 0 0 0 2h18a1 1 0 0 0 0-2Zm0-5H3a1 1 0 0 0 0 2h18a1 1 0 0 0 0-2Z"/></svg> </button> </starlight-menu-button> <script type="module">class s extends HTMLElement{constructor(){super(),this.btn=this.querySelector("button"),this.btn.addEventListener("click",()=>this.toggleExpanded());const t=this.closest("nav");t&&t.addEventListener("keyup",e=>this.closeOnEscape(e))}setExpanded(t){this.setAttribute("aria-expanded",String(t)),document.body.toggleAttribute("data-mobile-menu-expanded",t)}toggleExpanded(){this.setExpanded(this.getAttribute("aria-expanded")!=="true")}closeOnEscape(t){t.code==="Escape"&&(this.setExpanded(!1),this.btn.focus())}}customElements.define("starlight-menu-button",s);</script> <div id="starlight__sidebar" class="sidebar-pane astro-vrdttmbt"> <div class="sidebar-content sl-flex astro-vrdttmbt"> <sl-sidebar-state-persist data-hash="0iup75e" class="astro-kku4brbg"> <script aria-hidden="true">
|
||
(() => {
|
||
try {
|
||
if (!matchMedia('(min-width: 50em)').matches) return;
|
||
/** @type {HTMLElement | null} */
|
||
const target = document.querySelector('sl-sidebar-state-persist');
|
||
const state = JSON.parse(sessionStorage.getItem('sl-sidebar-state') || '0');
|
||
if (!target || !state || target.dataset.hash !== state.hash) return;
|
||
window._starlightScrollRestore = state.scroll;
|
||
customElements.define(
|
||
'sl-sidebar-restore',
|
||
class SidebarRestore extends HTMLElement {
|
||
connectedCallback() {
|
||
try {
|
||
const idx = parseInt(this.dataset.index || '');
|
||
const details = this.closest('details');
|
||
if (details && typeof state.open[idx] === 'boolean') details.open = state.open[idx];
|
||
} catch {}
|
||
}
|
||
}
|
||
);
|
||
} catch {}
|
||
})();
|
||
</script> <ul class="top-level astro-3ii7xxms"> <li class="astro-3ii7xxms"> <details open class="astro-3ii7xxms"> <sl-sidebar-restore data-index="0"></sl-sidebar-restore> <summary class="astro-3ii7xxms"> <div class="group-label astro-3ii7xxms"> <span class="large astro-3ii7xxms">Introduction</span> </div> <svg aria-hidden="true" class="caret astro-3ii7xxms astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-3ii7xxms"> <li class="astro-3ii7xxms"> <a href="/vjailbreak/introduction/what_is_vjailbreak/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">What is vJailbreak</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/introduction/getting_started/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Getting Started</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/introduction/prerequisites/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Prerequisites</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/introduction/faq/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">FAQ</span> </a> </li> </ul> </details> </li><li class="astro-3ii7xxms"> <details open class="astro-3ii7xxms"> <sl-sidebar-restore data-index="1"></sl-sidebar-restore> <summary class="astro-3ii7xxms"> <div class="group-label astro-3ii7xxms"> <span class="large astro-3ii7xxms">Concepts</span> </div> <svg aria-hidden="true" class="caret astro-3ii7xxms astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-3ii7xxms"> <li class="astro-3ii7xxms"> <a href="/vjailbreak/concepts/user-management/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">User Credential Management</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/concepts/credential-management/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Credential Management</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/concepts/network-persistence/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Network Persistence</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/concepts/network-storage-mapping/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Network & Storage Mapping</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/concepts/migration-options/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Migration Options</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/concepts/cluster-conversion/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Cluster Conversion</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/concepts/storage-accelerated-copy/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Storage Accelerated Copy</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/concepts/vjailbreak-accelerated-copy/" aria-current="page" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">vJailbreak Accelerated Copy</span> </a> </li> </ul> </details> </li><li class="astro-3ii7xxms"> <details open class="astro-3ii7xxms"> <sl-sidebar-restore data-index="2"></sl-sidebar-restore> <summary class="astro-3ii7xxms"> <div class="group-label astro-3ii7xxms"> <span class="large astro-3ii7xxms">Architecture</span> </div> <svg aria-hidden="true" class="caret astro-3ii7xxms astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-3ii7xxms"> <li class="astro-3ii7xxms"> <a href="/vjailbreak/architecture/architecture-overview/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Architecture</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/architecture/vjailbreak-vm/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">vJailbreak VM</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/architecture/components/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Components</span> </a> </li> </ul> </details> </li><li class="astro-3ii7xxms"> <details open class="astro-3ii7xxms"> <sl-sidebar-restore data-index="3"></sl-sidebar-restore> <summary class="astro-3ii7xxms"> <div class="group-label astro-3ii7xxms"> <span class="large astro-3ii7xxms">Guide</span> </div> <svg aria-hidden="true" class="caret astro-3ii7xxms astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-3ii7xxms"> <li class="astro-3ii7xxms"> <details open class="astro-3ii7xxms"> <sl-sidebar-restore data-index="4"></sl-sidebar-restore> <summary class="astro-3ii7xxms"> <div class="group-label astro-3ii7xxms"> <span class="large astro-3ii7xxms">CLI-API</span> </div> <svg aria-hidden="true" class="caret astro-3ii7xxms astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-3ii7xxms"> <li class="astro-3ii7xxms"> <a href="/vjailbreak/guides/cli-api/migrating_rdm_disk_windows_cluster_machine_using_cli/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Migrating RDM Disk</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/guides/cli-api/migrating_using_cli_and_kubectl/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Use CLI to Migrate</span> </a> </li> </ul> </details> </li><li class="astro-3ii7xxms"> <details open class="astro-3ii7xxms"> <sl-sidebar-restore data-index="5"></sl-sidebar-restore> <summary class="astro-3ii7xxms"> <div class="group-label astro-3ii7xxms"> <span class="large astro-3ii7xxms">Cluster-Conversion</span> </div> <svg aria-hidden="true" class="caret astro-3ii7xxms astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-3ii7xxms"> <li class="astro-3ii7xxms"> <a href="/vjailbreak/guides/cluster-conversion/cluster-conversion/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Cluster Conversion</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/guides/cluster-conversion/maas-enablement/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Add ESXi to MAAS</span> </a> </li> </ul> </details> </li><li class="astro-3ii7xxms"> <details open class="astro-3ii7xxms"> <sl-sidebar-restore data-index="6"></sl-sidebar-restore> <summary class="astro-3ii7xxms"> <div class="group-label astro-3ii7xxms"> <span class="large astro-3ii7xxms">How-to</span> </div> <svg aria-hidden="true" class="caret astro-3ii7xxms astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-3ii7xxms"> <li class="astro-3ii7xxms"> <a href="/vjailbreak/guides/how-to/ai_analysis/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">AI-Powered Migration Failure Analysis</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/guides/how-to/building/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Build vJailbreak</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/guides/how-to/enable_kvm_nested_virtualization/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Enable KVM for virt-v2v (Nested Virtualization)</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/guides/how-to/firstboot_script_doc/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Firstboot Script</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/guides/how-to/gpo_migration/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Group Policy Object (GPO) VM Migration</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/guides/how-to/injecting_custom_env/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Inject Environment Variables</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/guides/how-to/migration_templates/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Migration Templates</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/guides/how-to/network-traffic-separation/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Configuring Dedicated Data Network for Migrations</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/guides/how-to/networking-101/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">One-Stop Migration Networking</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/guides/how-to/ntp_timezone/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Configure Time Zone and NTP Servers</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/guides/how-to/perform_admin_cutover/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Perform Admin Cutover</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/guides/how-to/profiles/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Profiles</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/guides/how-to/retry_failed_migration/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Retry a Failed Migration</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/guides/how-to/scaling/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Scale vJailbreak</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/guides/how-to/stream_logs/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Stream Logs</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/guides/how-to/upgrade_vjailbreak/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Upgrade vJailbreak</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/guides/how-to/virtio_doc/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Inject VirtIO Windows Driver</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/guides/how-to/vjailbreak_settings/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Use vJailbreak Settings</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/guides/how-to/vtpm_migration/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Virtual Trusted Platform Module (vTPM) VM Migration</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/guides/how-to/windows-ldm-migration/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Windows Dynamic Disk (LDM) Migration</span> </a> </li> </ul> </details> </li><li class="astro-3ii7xxms"> <details open class="astro-3ii7xxms"> <sl-sidebar-restore data-index="7"></sl-sidebar-restore> <summary class="astro-3ii7xxms"> <div class="group-label astro-3ii7xxms"> <span class="large astro-3ii7xxms">Troubleshooting</span> </div> <svg aria-hidden="true" class="caret astro-3ii7xxms astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-3ii7xxms"> <li class="astro-3ii7xxms"> <a href="/vjailbreak/guides/troubleshooting/debug_vjailbreak_install/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Debug vJailbreak Installation</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/guides/troubleshooting/debuglogs/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Debug Logs</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/guides/troubleshooting/nbdcopy-fails-after-vm-moved-esxi-host/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">nbdcopy fails during disk copy (often DNS resolution)</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/guides/troubleshooting/troubleshooting/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Troubleshooting vJailbreak</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/guides/troubleshooting/vmware_residual_artifacts/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">VMware Residual Artifacts</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/guides/troubleshooting/windows-offline-disks/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Windows Offline Disks After Migration</span> </a> </li> </ul> </details> </li> </ul> </details> </li><li class="astro-3ii7xxms"> <details open class="astro-3ii7xxms"> <sl-sidebar-restore data-index="8"></sl-sidebar-restore> <summary class="astro-3ii7xxms"> <div class="group-label astro-3ii7xxms"> <span class="large astro-3ii7xxms">Reference</span> </div> <svg aria-hidden="true" class="caret astro-3ii7xxms astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-3ii7xxms"> <li class="astro-3ii7xxms"> <a href="/vjailbreak/reference/reference/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">vJailbreak CRDs</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/reference/compatibility/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Compatibility Matrix</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/reference/known-limitations/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Known Limitations</span> </a> </li> </ul> </details> </li><li class="astro-3ii7xxms"> <details open class="astro-3ii7xxms"> <sl-sidebar-restore data-index="9"></sl-sidebar-restore> <summary class="astro-3ii7xxms"> <div class="group-label astro-3ii7xxms"> <span class="large astro-3ii7xxms">Release Notes</span> </div> <svg aria-hidden="true" class="caret astro-3ii7xxms astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-3ii7xxms"> <li class="astro-3ii7xxms"> <a href="/vjailbreak/release_docs/v0410/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">v0.4.10</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/release_docs/v046/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">v0.4.6</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/release_docs/v047/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">v0.4.7</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/release_docs/v048/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">v0.4.8</span> </a> </li><li class="astro-3ii7xxms"> <a href="/vjailbreak/release_docs/v049/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">v0.4.9</span> </a> </li> </ul> </details> </li><li class="astro-3ii7xxms"> <details open class="astro-3ii7xxms"> <sl-sidebar-restore data-index="10"></sl-sidebar-restore> <summary class="astro-3ii7xxms"> <div class="group-label astro-3ii7xxms"> <span class="large astro-3ii7xxms">Archives</span> </div> <svg aria-hidden="true" class="caret astro-3ii7xxms astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <ul class="astro-3ii7xxms"> <li class="astro-3ii7xxms"> <a href="/vjailbreak/archives/release_notes/" aria-current="false" class="astro-3ii7xxms"> <span class="astro-3ii7xxms">Archived Releases</span> </a> </li> </ul> </details> </li> </ul> <script aria-hidden="true">
|
||
(() => {
|
||
const scroller = document.getElementById('starlight__sidebar');
|
||
if (!window._starlightScrollRestore || !scroller) return;
|
||
scroller.scrollTop = window._starlightScrollRestore;
|
||
delete window._starlightScrollRestore;
|
||
})();
|
||
</script> </sl-sidebar-state-persist> <div class="md:sl-hidden"> <div class="mobile-preferences sl-flex astro-wu23bvmt"> <div class="sl-flex social-icons astro-wu23bvmt"> <a href="https://github.com/platform9/vjailbreak" rel="me" class="sl-flex astro-wy4te6ga"><span class="sr-only astro-wy4te6ga">GitHub</span><svg aria-hidden="true" class="astro-wy4te6ga astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M12 .3a12 12 0 0 0-3.8 23.38c.6.12.83-.26.83-.57L9 21.07c-3.34.72-4.04-1.61-4.04-1.61-.55-1.39-1.34-1.76-1.34-1.76-1.08-.74.09-.73.09-.73 1.2.09 1.83 1.24 1.83 1.24 1.08 1.83 2.81 1.3 3.5 1 .1-.78.42-1.31.76-1.61-2.67-.3-5.47-1.33-5.47-5.93 0-1.31.47-2.38 1.24-3.22-.14-.3-.54-1.52.1-3.18 0 0 1-.32 3.3 1.23a11.5 11.5 0 0 1 6 0c2.28-1.55 3.29-1.23 3.29-1.23.64 1.66.24 2.88.12 3.18a4.65 4.65 0 0 1 1.23 3.22c0 4.61-2.8 5.63-5.48 5.92.42.36.81 1.1.81 2.22l-.01 3.29c0 .31.2.69.82.57A12 12 0 0 0 12 .3Z"/></svg> </a><a href="https://join.slack.com/t/vjailbreak/shared_invite/zt-314pppw43-F1vzd6ZaPW5PoZqF~aa8lA" rel="me" class="sl-flex astro-wy4te6ga"><span class="sr-only astro-wy4te6ga">Slack</span><svg aria-hidden="true" class="astro-wy4te6ga astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52Zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313ZM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834Zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312Zm10.122 2.521a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834Zm-1.268 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312Zm-2.523 10.122a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52Zm0-1.268a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313Z"/></svg> </a> </div> <starlight-theme-select> <label style="--sl-select-width: 6.25em" class="astro-4yphtoen"> <span class="sr-only astro-4yphtoen">Select theme</span> <svg aria-hidden="true" class="icon label-icon astro-4yphtoen astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21 14h-1V7a3 3 0 0 0-3-3H7a3 3 0 0 0-3 3v7H3a1 1 0 0 0-1 1v2a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3v-2a1 1 0 0 0-1-1ZM6 7a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v7H6V7Zm14 10a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-1h16v1Z"/></svg> <select value="auto" autocomplete="off" class="astro-4yphtoen"> <option value="dark" class="astro-4yphtoen">Dark</option><option value="light" class="astro-4yphtoen">Light</option><option value="auto" selected class="astro-4yphtoen">Auto</option> </select> <svg aria-hidden="true" class="icon caret astro-4yphtoen astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M17 9.17a1 1 0 0 0-1.41 0L12 12.71 8.46 9.17a1 1 0 1 0-1.41 1.42l4.24 4.24a1.002 1.002 0 0 0 1.42 0L17 10.59a1.002 1.002 0 0 0 0-1.42Z"/></svg> </label> </starlight-theme-select> <script>
|
||
StarlightThemeProvider.updatePickers();
|
||
</script> </div> </div> </div> </div> </nav> <div class="main-frame astro-vrdttmbt"> <script type="module">const a=document.getElementById("starlight__sidebar"),n=a?.querySelector("sl-sidebar-state-persist"),o="sl-sidebar-state",i=()=>{let t=[];const e=n?.dataset.hash||"";try{const s=sessionStorage.getItem(o),r=JSON.parse(s||"{}");Array.isArray(r.open)&&r.hash===e&&(t=r.open)}catch{}return{hash:e,open:t,scroll:a?.scrollTop||0}},c=t=>{try{sessionStorage.setItem(o,JSON.stringify(t))}catch{}},d=()=>c(i()),l=(t,e)=>{const s=i();s.open[e]=t,c(s)};n?.addEventListener("click",t=>{if(!(t.target instanceof Element))return;const e=t.target.closest("summary")?.closest("details");if(!e)return;const s=e.querySelector("sl-sidebar-restore"),r=parseInt(s?.dataset.index||"");isNaN(r)||l(!e.open,r)});addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&d()});addEventListener("pageHide",d);</script> <div class="lg:sl-flex astro-67yu43on"> <aside class="right-sidebar-container print:hidden astro-67yu43on"> <div class="right-sidebar astro-67yu43on"> <div class="lg:sl-hidden astro-pb3aqygn"><mobile-starlight-toc data-min-h="2" data-max-h="3" class="astro-doynk5tl"><nav aria-labelledby="starlight__on-this-page--mobile" class="astro-doynk5tl"><details id="starlight__mobile-toc" class="astro-doynk5tl"><summary id="starlight__on-this-page--mobile" class="sl-flex astro-doynk5tl"><div class="toggle sl-flex astro-doynk5tl">On this page<svg aria-hidden="true" class="caret astro-doynk5tl astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </div><span class="display-current astro-doynk5tl"></span></summary><div class="dropdown astro-doynk5tl"><ul class="isMobile astro-g2bywc46" style="--depth: 0;"> <li class="astro-g2bywc46" style="--depth: 0;"> <a href="#_top" class="astro-g2bywc46" style="--depth: 0;"> <span class="astro-g2bywc46" style="--depth: 0;">Overview</span> </a> </li><li class="astro-g2bywc46" style="--depth: 0;"> <a href="#overview" class="astro-g2bywc46" style="--depth: 0;"> <span class="astro-g2bywc46" style="--depth: 0;">Overview</span> </a> <ul class="isMobile astro-g2bywc46" style="--depth: 1;"> <li class="astro-g2bywc46" style="--depth: 1;"> <a href="#how-it-works" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">How It Works</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#benefits" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Benefits</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#requirements" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Requirements</span> </a> </li> </ul> </li><li class="astro-g2bywc46" style="--depth: 0;"> <a href="#prerequisites" class="astro-g2bywc46" style="--depth: 0;"> <span class="astro-g2bywc46" style="--depth: 0;">Prerequisites</span> </a> <ul class="isMobile astro-g2bywc46" style="--depth: 1;"> <li class="astro-g2bywc46" style="--depth: 1;"> <a href="#1-proxy-vm-requirements" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">1. Proxy VM Requirements</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#2-vcenter-requirements" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">2. vCenter Requirements</span> </a> </li> </ul> </li><li class="astro-g2bywc46" style="--depth: 0;"> <a href="#setting-up-the-proxy-vm" class="astro-g2bywc46" style="--depth: 0;"> <span class="astro-g2bywc46" style="--depth: 0;">Setting Up the Proxy VM</span> </a> <ul class="isMobile astro-g2bywc46" style="--depth: 1;"> <li class="astro-g2bywc46" style="--depth: 1;"> <a href="#option-a-deploy-from-the-vjailbreak-ui-easiest" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Option A: Deploy from the vJailbreak UI (Easiest)</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#option-b-register-an-existing-linux-vm" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Option B: Register an Existing Linux VM</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#configure-diskenableuuid-on-the-proxy-vm" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Configure disk.EnableUUID on the Proxy VM</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#configure-the-scsi-controller-type-on-the-proxy-vm" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Configure the SCSI Controller Type on the Proxy VM</span> </a> </li> </ul> </li><li class="astro-g2bywc46" style="--depth: 0;"> <a href="#ssh-key-configuration" class="astro-g2bywc46" style="--depth: 0;"> <span class="astro-g2bywc46" style="--depth: 0;">SSH Key Configuration</span> </a> <ul class="isMobile astro-g2bywc46" style="--depth: 1;"> <li class="astro-g2bywc46" style="--depth: 1;"> <a href="#sub-option-1-let-vjailbreak-generate-the-key-pair" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Sub-option 1: Let vJailbreak Generate the Key Pair</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#sub-option-2-upload-your-own-private-key" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Sub-option 2: Upload Your Own Private Key</span> </a> </li> </ul> </li><li class="astro-g2bywc46" style="--depth: 0;"> <a href="#registering-the-proxy-vm-in-vjailbreak" class="astro-g2bywc46" style="--depth: 0;"> <span class="astro-g2bywc46" style="--depth: 0;">Registering the Proxy VM in vJailbreak</span> </a> </li><li class="astro-g2bywc46" style="--depth: 0;"> <a href="#using-vjailbreak-accelerated-copy-in-a-migration" class="astro-g2bywc46" style="--depth: 0;"> <span class="astro-g2bywc46" style="--depth: 0;">Using vJailbreak Accelerated Copy in a Migration</span> </a> <ul class="isMobile astro-g2bywc46" style="--depth: 1;"> <li class="astro-g2bywc46" style="--depth: 1;"> <a href="#step-1-create-a-migration" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Step 1: Create a Migration</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#step-2-select-proxy-vm" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Step 2: Select Proxy VM</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#step-3-start-the-migration" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Step 3: Start the Migration</span> </a> </li> </ul> </li><li class="astro-g2bywc46" style="--depth: 0;"> <a href="#migration-workflow" class="astro-g2bywc46" style="--depth: 0;"> <span class="astro-g2bywc46" style="--depth: 0;">Migration Workflow</span> </a> <ul class="isMobile astro-g2bywc46" style="--depth: 1;"> <li class="astro-g2bywc46" style="--depth: 1;"> <a href="#component-diagram" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Component Diagram</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#sequence-diagram" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Sequence Diagram</span> </a> </li> </ul> </li><li class="astro-g2bywc46" style="--depth: 0;"> <a href="#limitations" class="astro-g2bywc46" style="--depth: 0;"> <span class="astro-g2bywc46" style="--depth: 0;">Limitations</span> </a> </li><li class="astro-g2bywc46" style="--depth: 0;"> <a href="#troubleshooting" class="astro-g2bywc46" style="--depth: 0;"> <span class="astro-g2bywc46" style="--depth: 0;">Troubleshooting</span> </a> <ul class="isMobile astro-g2bywc46" style="--depth: 1;"> <li class="astro-g2bywc46" style="--depth: 1;"> <a href="#proxy-vm-verification-failed" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Proxy VM Verification Failed</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#nbd-connection-failed-during-copy" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">NBD Connection Failed During Copy</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#block-device-not-found-in-proxy-vm" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Block Device Not Found in Proxy VM</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#disk-attach-fails-when-several-migrations-start-together" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Disk Attach Fails When Several Migrations Start Together</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#snapshot-creation-failed" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Snapshot Creation Failed</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#migration-stuck-after-snapshot" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Migration Stuck After Snapshot</span> </a> </li> </ul> </li><li class="astro-g2bywc46" style="--depth: 0;"> <a href="#best-practices" class="astro-g2bywc46" style="--depth: 0;"> <span class="astro-g2bywc46" style="--depth: 0;">Best Practices</span> </a> </li> </ul> </div></details></nav></mobile-starlight-toc><script type="module" src="/vjailbreak/_astro/MobileTableOfContents.astro_astro_type_script_index_0_lang.C181hMzK.js"></script></div><div class="right-sidebar-panel sl-hidden lg:sl-block astro-pb3aqygn"><div class="sl-container astro-pb3aqygn"><starlight-toc data-min-h="2" data-max-h="3"><nav aria-labelledby="starlight__on-this-page"><h2 id="starlight__on-this-page">On this page</h2><ul class="astro-g2bywc46" style="--depth: 0;"> <li class="astro-g2bywc46" style="--depth: 0;"> <a href="#_top" class="astro-g2bywc46" style="--depth: 0;"> <span class="astro-g2bywc46" style="--depth: 0;">Overview</span> </a> </li><li class="astro-g2bywc46" style="--depth: 0;"> <a href="#overview" class="astro-g2bywc46" style="--depth: 0;"> <span class="astro-g2bywc46" style="--depth: 0;">Overview</span> </a> <ul class="astro-g2bywc46" style="--depth: 1;"> <li class="astro-g2bywc46" style="--depth: 1;"> <a href="#how-it-works" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">How It Works</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#benefits" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Benefits</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#requirements" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Requirements</span> </a> </li> </ul> </li><li class="astro-g2bywc46" style="--depth: 0;"> <a href="#prerequisites" class="astro-g2bywc46" style="--depth: 0;"> <span class="astro-g2bywc46" style="--depth: 0;">Prerequisites</span> </a> <ul class="astro-g2bywc46" style="--depth: 1;"> <li class="astro-g2bywc46" style="--depth: 1;"> <a href="#1-proxy-vm-requirements" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">1. Proxy VM Requirements</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#2-vcenter-requirements" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">2. vCenter Requirements</span> </a> </li> </ul> </li><li class="astro-g2bywc46" style="--depth: 0;"> <a href="#setting-up-the-proxy-vm" class="astro-g2bywc46" style="--depth: 0;"> <span class="astro-g2bywc46" style="--depth: 0;">Setting Up the Proxy VM</span> </a> <ul class="astro-g2bywc46" style="--depth: 1;"> <li class="astro-g2bywc46" style="--depth: 1;"> <a href="#option-a-deploy-from-the-vjailbreak-ui-easiest" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Option A: Deploy from the vJailbreak UI (Easiest)</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#option-b-register-an-existing-linux-vm" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Option B: Register an Existing Linux VM</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#configure-diskenableuuid-on-the-proxy-vm" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Configure disk.EnableUUID on the Proxy VM</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#configure-the-scsi-controller-type-on-the-proxy-vm" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Configure the SCSI Controller Type on the Proxy VM</span> </a> </li> </ul> </li><li class="astro-g2bywc46" style="--depth: 0;"> <a href="#ssh-key-configuration" class="astro-g2bywc46" style="--depth: 0;"> <span class="astro-g2bywc46" style="--depth: 0;">SSH Key Configuration</span> </a> <ul class="astro-g2bywc46" style="--depth: 1;"> <li class="astro-g2bywc46" style="--depth: 1;"> <a href="#sub-option-1-let-vjailbreak-generate-the-key-pair" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Sub-option 1: Let vJailbreak Generate the Key Pair</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#sub-option-2-upload-your-own-private-key" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Sub-option 2: Upload Your Own Private Key</span> </a> </li> </ul> </li><li class="astro-g2bywc46" style="--depth: 0;"> <a href="#registering-the-proxy-vm-in-vjailbreak" class="astro-g2bywc46" style="--depth: 0;"> <span class="astro-g2bywc46" style="--depth: 0;">Registering the Proxy VM in vJailbreak</span> </a> </li><li class="astro-g2bywc46" style="--depth: 0;"> <a href="#using-vjailbreak-accelerated-copy-in-a-migration" class="astro-g2bywc46" style="--depth: 0;"> <span class="astro-g2bywc46" style="--depth: 0;">Using vJailbreak Accelerated Copy in a Migration</span> </a> <ul class="astro-g2bywc46" style="--depth: 1;"> <li class="astro-g2bywc46" style="--depth: 1;"> <a href="#step-1-create-a-migration" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Step 1: Create a Migration</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#step-2-select-proxy-vm" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Step 2: Select Proxy VM</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#step-3-start-the-migration" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Step 3: Start the Migration</span> </a> </li> </ul> </li><li class="astro-g2bywc46" style="--depth: 0;"> <a href="#migration-workflow" class="astro-g2bywc46" style="--depth: 0;"> <span class="astro-g2bywc46" style="--depth: 0;">Migration Workflow</span> </a> <ul class="astro-g2bywc46" style="--depth: 1;"> <li class="astro-g2bywc46" style="--depth: 1;"> <a href="#component-diagram" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Component Diagram</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#sequence-diagram" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Sequence Diagram</span> </a> </li> </ul> </li><li class="astro-g2bywc46" style="--depth: 0;"> <a href="#limitations" class="astro-g2bywc46" style="--depth: 0;"> <span class="astro-g2bywc46" style="--depth: 0;">Limitations</span> </a> </li><li class="astro-g2bywc46" style="--depth: 0;"> <a href="#troubleshooting" class="astro-g2bywc46" style="--depth: 0;"> <span class="astro-g2bywc46" style="--depth: 0;">Troubleshooting</span> </a> <ul class="astro-g2bywc46" style="--depth: 1;"> <li class="astro-g2bywc46" style="--depth: 1;"> <a href="#proxy-vm-verification-failed" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Proxy VM Verification Failed</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#nbd-connection-failed-during-copy" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">NBD Connection Failed During Copy</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#block-device-not-found-in-proxy-vm" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Block Device Not Found in Proxy VM</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#disk-attach-fails-when-several-migrations-start-together" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Disk Attach Fails When Several Migrations Start Together</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#snapshot-creation-failed" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Snapshot Creation Failed</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#migration-stuck-after-snapshot" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Migration Stuck After Snapshot</span> </a> </li> </ul> </li><li class="astro-g2bywc46" style="--depth: 0;"> <a href="#best-practices" class="astro-g2bywc46" style="--depth: 0;"> <span class="astro-g2bywc46" style="--depth: 0;">Best Practices</span> </a> </li> </ul> </nav></starlight-toc><script type="module" src="/vjailbreak/_astro/TableOfContents.astro_astro_type_script_index_0_lang.CKWWgpjV.js"></script></div></div> </div> </aside> <div class="main-pane astro-67yu43on"> <main data-pagefind-body class="astro-bguv2lll" lang="en" dir="ltr"> <div class="content-panel astro-7nkwcw3z"> <div class="sl-container astro-7nkwcw3z"> <h1 id="_top" class="astro-j6tvhyss">vJailbreak Accelerated Copy</h1> </div> </div> <div class="content-panel astro-7nkwcw3z"> <div class="sl-container astro-7nkwcw3z"> <div class="sl-markdown-content"> <p>vJailbreak Accelerated Copy is an advanced data copy method that attaches source VM disks directly to a dedicated Proxy VM and streams the data over NBD (Network Block Device) to the destination. Instead of copying data over the NFC protocol from ESXi, this method leverages vCenter’s disk-attach capability to transfer data at near-disk speeds without requiring shared storage arrays.</p>
|
||
<blockquote>
|
||
<p><strong>Underlying feature:</strong> vJailbreak Accelerated Copy is powered by VMware’s <strong>hot-add</strong> disk transport mechanism to attach source disks to the Proxy VM.</p>
|
||
</blockquote>
|
||
<aside aria-label="Cold migration only: hot data copy is not supported" class="starlight-aside starlight-aside--danger"><p class="starlight-aside__title" aria-hidden="true"><svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor" class="starlight-aside__icon"><path d="M12 7C11.7348 7 11.4804 7.10536 11.2929 7.29289C11.1054 7.48043 11 7.73478 11 8V12C11 12.2652 11.1054 12.5196 11.2929 12.7071C11.4804 12.8946 11.7348 13 12 13C12.2652 13 12.5196 12.8946 12.7071 12.7071C12.8946 12.5196 13 12.2652 13 12V8C13 7.73478 12.8946 7.48043 12.7071 7.29289C12.5196 7.10536 12.2652 7 12 7ZM12 15C11.8022 15 11.6089 15.0586 11.4444 15.1685C11.28 15.2784 11.1518 15.4346 11.0761 15.6173C11.0004 15.8 10.9806 16.0011 11.0192 16.1951C11.0578 16.3891 11.153 16.5673 11.2929 16.7071C11.4327 16.847 11.6109 16.9422 11.8049 16.9808C11.9989 17.0194 12.2 16.9996 12.3827 16.9239C12.5654 16.8482 12.7216 16.72 12.8315 16.5556C12.9414 16.3911 13 16.1978 13 16C13 15.7348 12.8946 15.4804 12.7071 15.2929C12.5196 15.1054 12.2652 15 12 15ZM21.71 7.56L16.44 2.29C16.2484 2.10727 15.9948 2.00368 15.73 2H8.27C8.00523 2.00368 7.75163 2.10727 7.56 2.29L2.29 7.56C2.10727 7.75163 2.00368 8.00523 2 8.27V15.73C2.00368 15.9948 2.10727 16.2484 2.29 16.44L7.56 21.71C7.75163 21.8927 8.00523 21.9963 8.27 22H15.73C15.9948 21.9963 16.2484 21.8927 16.44 21.71L21.71 16.44C21.8927 16.2484 21.9963 15.9948 22 15.73V8.27C21.9963 8.00523 21.8927 7.75163 21.71 7.56ZM20 15.31L15.31 20H8.69L4 15.31V8.69L8.69 4H15.31L20 8.69V15.31Z"></path></svg>Cold migration only: hot data copy is not supported</p><div class="starlight-aside__content"><p>vJailbreak Accelerated Copy <strong>does not support live (hot) migration</strong>. The source VM is powered off
|
||
before its disks are attached to the Proxy VM. You must select <strong>“Power off VMs, then copy”</strong> as
|
||
the Data Copy Method when using vJailbreak Accelerated Copy. Attempting to use it with
|
||
<strong>“Copy live VMs, then power off”</strong> is not supported.</p></div></aside>
|
||
<aside aria-label="VDDK not required" class="starlight-aside starlight-aside--note"><p class="starlight-aside__title" aria-hidden="true"><svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor" class="starlight-aside__icon"><path d="M12 11C11.7348 11 11.4804 11.1054 11.2929 11.2929C11.1054 11.4804 11 11.7348 11 12V16C11 16.2652 11.1054 16.5196 11.2929 16.7071C11.4804 16.8946 11.7348 17 12 17C12.2652 17 12.5196 16.8946 12.7071 16.7071C12.8946 16.5196 13 16.2652 13 16V12C13 11.7348 12.8946 11.4804 12.7071 11.2929C12.5196 11.1054 12.2652 11 12 11ZM12.38 7.08C12.1365 6.97998 11.8635 6.97998 11.62 7.08C11.4973 7.12759 11.3851 7.19896 11.29 7.29C11.2017 7.3872 11.1306 7.49882 11.08 7.62C11.024 7.73868 10.9966 7.86882 11 8C10.9992 8.13161 11.0245 8.26207 11.0742 8.38391C11.124 8.50574 11.1973 8.61656 11.29 8.71C11.3872 8.79833 11.4988 8.86936 11.62 8.92C11.7715 8.98224 11.936 9.00632 12.099 8.99011C12.2619 8.97391 12.4184 8.91792 12.5547 8.82707C12.691 8.73622 12.8029 8.61328 12.8805 8.46907C12.9582 8.32486 12.9992 8.16378 13 8C12.9963 7.73523 12.8927 7.48163 12.71 7.29C12.6149 7.19896 12.5028 7.12759 12.38 7.08ZM12 2C10.0222 2 8.08879 2.58649 6.4443 3.6853C4.79981 4.78412 3.51809 6.3459 2.76121 8.17317C2.00433 10.0004 1.8063 12.0111 2.19215 13.9509C2.578 15.8907 3.53041 17.6725 4.92894 19.0711C6.32746 20.4696 8.10929 21.422 10.0491 21.8079C11.9889 22.1937 13.9996 21.9957 15.8268 21.2388C17.6541 20.4819 19.2159 19.2002 20.3147 17.5557C21.4135 15.9112 22 13.9778 22 12C22 10.6868 21.7413 9.38642 21.2388 8.17317C20.7363 6.95991 19.9997 5.85752 19.0711 4.92893C18.1425 4.00035 17.0401 3.26375 15.8268 2.7612C14.6136 2.25866 13.3132 2 12 2ZM12 20C10.4178 20 8.87104 19.5308 7.55544 18.6518C6.23985 17.7727 5.21447 16.5233 4.60897 15.0615C4.00347 13.5997 3.84504 11.9911 4.15372 10.4393C4.4624 8.88743 5.22433 7.46197 6.34315 6.34315C7.46197 5.22433 8.88743 4.4624 10.4393 4.15372C11.9911 3.84504 13.5997 4.00346 15.0615 4.60896C16.5233 5.21447 17.7727 6.23984 18.6518 7.55544C19.5308 8.87103 20 10.4177 20 12C20 14.1217 19.1572 16.1566 17.6569 17.6569C16.1566 19.1571 14.1217 20 12 20Z"></path></svg>VDDK not required</p><div class="starlight-aside__content"><p>As of v0.4.10, vJailbreak Accelerated Copy does not require VDDK at any stage. Data is transferred
|
||
directly via the hot-add disk transport and NBD streaming. VDDK is never used. This makes it the
|
||
recommended copy method when VMware’s VDDK download pages are unavailable.</p></div></aside>
|
||
<h2 id="overview">Overview</h2>
|
||
<h3 id="how-it-works">How It Works</h3>
|
||
<p>Traditional vJailbreak migrations copy VM disk data from VMware ESXi hosts to PCD Cinder volumes over the network using the NFC (Network File Copy) protocol, limited to approximately <strong>1 Gbps per VMDK</strong>.</p>
|
||
<p>vJailbreak Accelerated Copy bypasses this limitation by:</p>
|
||
<ol>
|
||
<li>Powering off the source VM and then taking a snapshot</li>
|
||
<li>Attaching the frozen snapshot disks directly to a Proxy VM running in vCenter</li>
|
||
<li>Identifying each disk as a block device inside the Proxy VM using disk UUID matching</li>
|
||
<li>Exposing each disk as an NBD resource on the Proxy VM via <code dir="auto">qemu-nbd</code></li>
|
||
<li>Running <code dir="auto">nbdcopy</code> on the vJailbreak VM to pull data from the Proxy VM directly to the destination Cinder volume</li>
|
||
</ol>
|
||
<h3 id="benefits">Benefits</h3>
|
||
<ul>
|
||
<li><strong>Faster migrations</strong>: Direct block-device access avoids NFC protocol overhead</li>
|
||
<li><strong>No shared storage required</strong>: Works with any datastore — NFS, VMFS, vSAN</li>
|
||
<li><strong>Lower ESXi host load</strong>: Data is streamed from the Proxy VM, not the ESXi NFC daemon</li>
|
||
</ul>
|
||
<h3 id="requirements">Requirements</h3>
|
||
<ul>
|
||
<li><strong>Proxy VM</strong>: A Linux VM running in the same vCenter with <code dir="auto">qemu-nbd</code> and <code dir="auto">openssh-server</code> installed</li>
|
||
<li><strong>SSH access</strong>: vJailbreak must be able to SSH into the Proxy VM as root</li>
|
||
<li><strong>Open ports</strong>: The Proxy VM must accept inbound TCP from the vJailbreak VM on <strong>22</strong> (SSH) and <strong>10809–11808</strong> (<code dir="auto">qemu-nbd</code>, one port per disk copied in parallel)</li>
|
||
<li><strong>disk.EnableUUID</strong>: Must be set to <code dir="auto">TRUE</code> on the Proxy VM in vCenter</li>
|
||
<li><strong>PVSCSI controller</strong>: The Proxy VM’s first SCSI controller (<strong>SCSI controller 0</strong>) must be of type <strong>VMware Paravirtual (PVSCSI)</strong></li>
|
||
<li><strong>Datastore accessibility</strong>: The HotAdd proxy must have access to the same datastore as the target virtual machine, and the VMFS version and data block sizes for the target VM must be the same as the datastore where the HotAdd proxy resides.</li>
|
||
<li><strong>vCenter permissions</strong>: Sufficient permissions to snapshot VMs and attach/detach disks</li>
|
||
</ul>
|
||
<h2 id="prerequisites">Prerequisites</h2>
|
||
<h3 id="1-proxy-vm-requirements">1. Proxy VM Requirements</h3>
|
||
<p>The Proxy VM must have the following utilities installed and running:</p>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<table><thead><tr><th>Utility</th><th>Purpose</th></tr></thead><tbody><tr><td><code dir="auto">openssh-server</code></td><td>SSH connectivity for vJailbreak to control the Proxy VM</td></tr><tr><td><code dir="auto">qemu-nbd</code></td><td>Expose attached block devices as NBD resources</td></tr></tbody></table>
|
||
<p>The Proxy VM must be a <strong>Linux-based OS</strong> (recommended: Ubuntu, Alpine, or Debian) with <strong>root SSH access</strong> enabled.</p>
|
||
<h3 id="2-vcenter-requirements">2. vCenter Requirements</h3>
|
||
<ul>
|
||
<li>The Proxy VM must have <strong>disk.EnableUUID = TRUE</strong> set in vCenter VM settings</li>
|
||
<li>The Proxy VM’s <strong>SCSI controller 0</strong> must be of type <strong>VMware Paravirtual (PVSCSI)</strong></li>
|
||
<li>vCenter must allow disk attach/detach operations on the Proxy VM</li>
|
||
<li>The Proxy VM must be powered on and reachable over SSH</li>
|
||
<li>The Proxy VM must be on the same datastore as the source VM’s disks, with a matching VMFS version and block size (see <strong>Datastore accessibility</strong> under <a href="#requirements">Requirements</a>)</li>
|
||
</ul>
|
||
<h2 id="setting-up-the-proxy-vm">Setting Up the Proxy VM</h2>
|
||
<h3 id="option-a-deploy-from-the-vjailbreak-ui-easiest">Option A: Deploy from the vJailbreak UI (Easiest)</h3>
|
||
<p>vJailbreak can deploy and register the Proxy VM in a single step directly from the UI:</p>
|
||
<ol>
|
||
<li>Navigate to <strong>vJailbreak Accelerated Copy</strong> in the left sidebar</li>
|
||
<li>Click <strong>Add Proxy VM</strong> and select <strong>Deploy a new vJailbreak Proxy VM</strong></li>
|
||
<li>Select your VMware credentials and fill in the deployment target (datacenter, datastore, network, and optionally a cluster or host)</li>
|
||
<li>Enter a unique VM name and click <strong>Deploy & Register VM</strong></li>
|
||
</ol>
|
||
<p>vJailbreak will import the pre-configured OVA into vCenter, power the VM on, generate and inject an SSH key pair automatically, and register the Proxy VM — no manual key setup required. The VM appears in the list with status <strong>Deploying</strong> and transitions to <strong>Ready</strong> once verification completes (typically 3–5 minutes).</p>
|
||
<aside aria-label="Caution" class="starlight-aside starlight-aside--caution"><p class="starlight-aside__title" aria-hidden="true"><svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor" class="starlight-aside__icon"><path d="M12 16C11.8022 16 11.6089 16.0587 11.4444 16.1686C11.28 16.2784 11.1518 16.4346 11.0761 16.6173C11.0004 16.8001 10.9806 17.0011 11.0192 17.1951C11.0578 17.3891 11.153 17.5673 11.2929 17.7071C11.4327 17.847 11.6109 17.9422 11.8049 17.9808C11.9989 18.0194 12.2 17.9996 12.3827 17.9239C12.5654 17.8482 12.7216 17.72 12.8315 17.5556C12.9413 17.3911 13 17.1978 13 17C13 16.7348 12.8946 16.4805 12.7071 16.2929C12.5196 16.1054 12.2652 16 12 16ZM22.67 17.47L14.62 3.47003C14.3598 3.00354 13.9798 2.61498 13.5192 2.3445C13.0586 2.07401 12.5341 1.9314 12 1.9314C11.4659 1.9314 10.9414 2.07401 10.4808 2.3445C10.0202 2.61498 9.64019 3.00354 9.38 3.47003L1.38 17.47C1.11079 17.924 0.966141 18.441 0.960643 18.9688C0.955144 19.4966 1.089 20.0166 1.34868 20.4761C1.60837 20.9356 1.9847 21.3185 2.43968 21.5861C2.89466 21.8536 3.41218 21.9964 3.94 22H20.06C20.5921 22.0053 21.1159 21.8689 21.5779 21.6049C22.0399 21.341 22.4234 20.9589 22.689 20.4978C22.9546 20.0368 23.0928 19.5134 23.0895 18.9814C23.0862 18.4493 22.9414 17.9277 22.67 17.47ZM20.94 19.47C20.8523 19.626 20.7245 19.7556 20.5697 19.8453C20.4149 19.935 20.2389 19.9815 20.06 19.98H3.94C3.76111 19.9815 3.5851 19.935 3.43032 19.8453C3.27553 19.7556 3.14765 19.626 3.06 19.47C2.97223 19.318 2.92602 19.1456 2.92602 18.97C2.92602 18.7945 2.97223 18.622 3.06 18.47L11.06 4.47003C11.1439 4.30623 11.2714 4.16876 11.4284 4.07277C11.5855 3.97678 11.766 3.92599 11.95 3.92599C12.134 3.92599 12.3145 3.97678 12.4716 4.07277C12.6286 4.16876 12.7561 4.30623 12.84 4.47003L20.89 18.47C20.9892 18.6199 21.0462 18.7937 21.055 18.9732C21.0638 19.1527 21.0241 19.3312 20.94 19.49V19.47ZM12 8.00003C11.7348 8.00003 11.4804 8.10538 11.2929 8.29292C11.1054 8.48046 11 8.73481 11 9.00003V13C11 13.2652 11.1054 13.5196 11.2929 13.7071C11.4804 13.8947 11.7348 14 12 14C12.2652 14 12.5196 13.8947 12.7071 13.7071C12.8946 13.5196 13 13.2652 13 13V9.00003C13 8.73481 12.8946 8.48046 12.7071 8.29292C12.5196 8.10538 12.2652 8.00003 12 8.00003Z"></path></svg>Caution</p><div class="starlight-aside__content"><p>The OVA image uses default credentials (<code dir="auto">root</code> / <code dir="auto">password</code>) for the initial SSH key injection step. Change the root password on the VM after deployment in production environments.</p></div></aside>
|
||
<aside aria-label="ESXi/vCenter version requirement" class="starlight-aside starlight-aside--caution"><p class="starlight-aside__title" aria-hidden="true"><svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor" class="starlight-aside__icon"><path d="M12 16C11.8022 16 11.6089 16.0587 11.4444 16.1686C11.28 16.2784 11.1518 16.4346 11.0761 16.6173C11.0004 16.8001 10.9806 17.0011 11.0192 17.1951C11.0578 17.3891 11.153 17.5673 11.2929 17.7071C11.4327 17.847 11.6109 17.9422 11.8049 17.9808C11.9989 18.0194 12.2 17.9996 12.3827 17.9239C12.5654 17.8482 12.7216 17.72 12.8315 17.5556C12.9413 17.3911 13 17.1978 13 17C13 16.7348 12.8946 16.4805 12.7071 16.2929C12.5196 16.1054 12.2652 16 12 16ZM22.67 17.47L14.62 3.47003C14.3598 3.00354 13.9798 2.61498 13.5192 2.3445C13.0586 2.07401 12.5341 1.9314 12 1.9314C11.4659 1.9314 10.9414 2.07401 10.4808 2.3445C10.0202 2.61498 9.64019 3.00354 9.38 3.47003L1.38 17.47C1.11079 17.924 0.966141 18.441 0.960643 18.9688C0.955144 19.4966 1.089 20.0166 1.34868 20.4761C1.60837 20.9356 1.9847 21.3185 2.43968 21.5861C2.89466 21.8536 3.41218 21.9964 3.94 22H20.06C20.5921 22.0053 21.1159 21.8689 21.5779 21.6049C22.0399 21.341 22.4234 20.9589 22.689 20.4978C22.9546 20.0368 23.0928 19.5134 23.0895 18.9814C23.0862 18.4493 22.9414 17.9277 22.67 17.47ZM20.94 19.47C20.8523 19.626 20.7245 19.7556 20.5697 19.8453C20.4149 19.935 20.2389 19.9815 20.06 19.98H3.94C3.76111 19.9815 3.5851 19.935 3.43032 19.8453C3.27553 19.7556 3.14765 19.626 3.06 19.47C2.97223 19.318 2.92602 19.1456 2.92602 18.97C2.92602 18.7945 2.97223 18.622 3.06 18.47L11.06 4.47003C11.1439 4.30623 11.2714 4.16876 11.4284 4.07277C11.5855 3.97678 11.766 3.92599 11.95 3.92599C12.134 3.92599 12.3145 3.97678 12.4716 4.07277C12.6286 4.16876 12.7561 4.30623 12.84 4.47003L20.89 18.47C20.9892 18.6199 21.0462 18.7937 21.055 18.9732C21.0638 19.1527 21.0241 19.3312 20.94 19.49V19.47ZM12 8.00003C11.7348 8.00003 11.4804 8.10538 11.2929 8.29292C11.1054 8.48046 11 8.73481 11 9.00003V13C11 13.2652 11.1054 13.5196 11.2929 13.7071C11.4804 13.8947 11.7348 14 12 14C12.2652 14 12.5196 13.8947 12.7071 13.7071C12.8946 13.5196 13 13.2652 13 13V9.00003C13 8.73481 12.8946 8.48046 12.7071 8.29292C12.5196 8.10538 12.2652 8.00003 12 8.00003Z"></path></svg>ESXi/vCenter version requirement</p><div class="starlight-aside__content"><p>The bundled OVA uses virtual hardware version <strong>vmx-21</strong>, which requires <strong>ESXi 8.0 U2 (vCenter 8.0 U2) or newer</strong>. Deploying it to an older host fails with an “unsupported hardware family” error. On ESXi/vCenter 7.x, use <strong>Option B</strong> to register a manually created Linux VM instead.</p></div></aside>
|
||
<h3 id="option-b-register-an-existing-linux-vm">Option B: Register an Existing Linux VM</h3>
|
||
<p>Any Linux VM can serve as the Proxy VM provided it meets the requirements. Install the necessary utilities:</p>
|
||
<p><strong>Ubuntu / Debian:</strong></p>
|
||
<div class="expressive-code"><link rel="stylesheet" href="/vjailbreak/_astro/ec.tm3va.css"><script type="module" src="/vjailbreak/_astro/ec.8zarh.js"></script><figure class="frame is-terminal not-content"><figcaption class="header"><span class="title"></span><span class="sr-only">Terminal window</span></figcaption><pre data-language="bash"><code><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">sudo</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">apt</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">update</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">sudo</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">apt</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">install</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#82AAFF;--1:#3B61B0">-y</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">openssh-server</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">qemu-utils</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="sudo apt updatesudo apt install -y openssh-server qemu-utils"><div></div></button></div></figure></div>
|
||
<p><strong>Alpine:</strong></p>
|
||
<div class="expressive-code"><figure class="frame is-terminal not-content"><figcaption class="header"><span class="title"></span><span class="sr-only">Terminal window</span></figcaption><pre data-language="bash"><code><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">apk</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">update</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">apk</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">add</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">openssh</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">qemu-nbd</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="apk updateapk add openssh qemu-nbd"><div></div></button></div></figure></div>
|
||
<aside aria-label="Note" class="starlight-aside starlight-aside--note"><p class="starlight-aside__title" aria-hidden="true"><svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor" class="starlight-aside__icon"><path d="M12 11C11.7348 11 11.4804 11.1054 11.2929 11.2929C11.1054 11.4804 11 11.7348 11 12V16C11 16.2652 11.1054 16.5196 11.2929 16.7071C11.4804 16.8946 11.7348 17 12 17C12.2652 17 12.5196 16.8946 12.7071 16.7071C12.8946 16.5196 13 16.2652 13 16V12C13 11.7348 12.8946 11.4804 12.7071 11.2929C12.5196 11.1054 12.2652 11 12 11ZM12.38 7.08C12.1365 6.97998 11.8635 6.97998 11.62 7.08C11.4973 7.12759 11.3851 7.19896 11.29 7.29C11.2017 7.3872 11.1306 7.49882 11.08 7.62C11.024 7.73868 10.9966 7.86882 11 8C10.9992 8.13161 11.0245 8.26207 11.0742 8.38391C11.124 8.50574 11.1973 8.61656 11.29 8.71C11.3872 8.79833 11.4988 8.86936 11.62 8.92C11.7715 8.98224 11.936 9.00632 12.099 8.99011C12.2619 8.97391 12.4184 8.91792 12.5547 8.82707C12.691 8.73622 12.8029 8.61328 12.8805 8.46907C12.9582 8.32486 12.9992 8.16378 13 8C12.9963 7.73523 12.8927 7.48163 12.71 7.29C12.6149 7.19896 12.5028 7.12759 12.38 7.08ZM12 2C10.0222 2 8.08879 2.58649 6.4443 3.6853C4.79981 4.78412 3.51809 6.3459 2.76121 8.17317C2.00433 10.0004 1.8063 12.0111 2.19215 13.9509C2.578 15.8907 3.53041 17.6725 4.92894 19.0711C6.32746 20.4696 8.10929 21.422 10.0491 21.8079C11.9889 22.1937 13.9996 21.9957 15.8268 21.2388C17.6541 20.4819 19.2159 19.2002 20.3147 17.5557C21.4135 15.9112 22 13.9778 22 12C22 10.6868 21.7413 9.38642 21.2388 8.17317C20.7363 6.95991 19.9997 5.85752 19.0711 4.92893C18.1425 4.00035 17.0401 3.26375 15.8268 2.7612C14.6136 2.25866 13.3132 2 12 2ZM12 20C10.4178 20 8.87104 19.5308 7.55544 18.6518C6.23985 17.7727 5.21447 16.5233 4.60897 15.0615C4.00347 13.5997 3.84504 11.9911 4.15372 10.4393C4.4624 8.88743 5.22433 7.46197 6.34315 6.34315C7.46197 5.22433 8.88743 4.4624 10.4393 4.15372C11.9911 3.84504 13.5997 4.00346 15.0615 4.60896C16.5233 5.21447 17.7727 6.23984 18.6518 7.55544C19.5308 8.87103 20 10.4177 20 12C20 14.1217 19.1572 16.1566 17.6569 17.6569C16.1566 19.1571 14.1217 20 12 20Z"></path></svg>Note</p><div class="starlight-aside__content"><p>Root access is required for SSH and for running <code dir="auto">qemu-nbd</code> commands on the Proxy VM. Ensure <code dir="auto">PermitRootLogin yes</code> is set in <code dir="auto">/etc/ssh/sshd_config</code> if root SSH is not already enabled.</p></div></aside>
|
||
<h3 id="configure-diskenableuuid-on-the-proxy-vm">Configure disk.EnableUUID on the Proxy VM</h3>
|
||
<p>This setting is required for vJailbreak to match attached disks to their block devices inside the Proxy VM:</p>
|
||
<ol>
|
||
<li>In vSphere Client, right-click the Proxy VM and select <strong>Edit Settings</strong></li>
|
||
<li>Click <strong>VM Options</strong> → <strong>Advanced</strong> → <strong>Edit Configuration</strong></li>
|
||
<li>Find or add the key <code dir="auto">disk.EnableUUID</code> and set the value to <code dir="auto">TRUE</code></li>
|
||
<li>Click <strong>OK</strong> and restart the VM if it was already running</li>
|
||
</ol>
|
||
<h3 id="configure-the-scsi-controller-type-on-the-proxy-vm">Configure the SCSI Controller Type on the Proxy VM</h3>
|
||
<p>Source disks are attached to the Proxy VM’s first SCSI controller, and vJailbreak can only match them to block devices when that controller is <strong>VMware Paravirtual</strong>:</p>
|
||
<ol>
|
||
<li>Power off the Proxy VM</li>
|
||
<li>In vSphere Client, right-click the Proxy VM and select <strong>Edit Settings</strong></li>
|
||
<li>Under <strong>Virtual Hardware</strong>, locate <strong>SCSI controller 0</strong></li>
|
||
<li>Set <strong>Change Type</strong> to <strong>VMware Paravirtual</strong></li>
|
||
<li>Click <strong>OK</strong> and power the VM back on</li>
|
||
</ol>
|
||
<aside aria-label="Caution" class="starlight-aside starlight-aside--caution"><p class="starlight-aside__title" aria-hidden="true"><svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor" class="starlight-aside__icon"><path d="M12 16C11.8022 16 11.6089 16.0587 11.4444 16.1686C11.28 16.2784 11.1518 16.4346 11.0761 16.6173C11.0004 16.8001 10.9806 17.0011 11.0192 17.1951C11.0578 17.3891 11.153 17.5673 11.2929 17.7071C11.4327 17.847 11.6109 17.9422 11.8049 17.9808C11.9989 18.0194 12.2 17.9996 12.3827 17.9239C12.5654 17.8482 12.7216 17.72 12.8315 17.5556C12.9413 17.3911 13 17.1978 13 17C13 16.7348 12.8946 16.4805 12.7071 16.2929C12.5196 16.1054 12.2652 16 12 16ZM22.67 17.47L14.62 3.47003C14.3598 3.00354 13.9798 2.61498 13.5192 2.3445C13.0586 2.07401 12.5341 1.9314 12 1.9314C11.4659 1.9314 10.9414 2.07401 10.4808 2.3445C10.0202 2.61498 9.64019 3.00354 9.38 3.47003L1.38 17.47C1.11079 17.924 0.966141 18.441 0.960643 18.9688C0.955144 19.4966 1.089 20.0166 1.34868 20.4761C1.60837 20.9356 1.9847 21.3185 2.43968 21.5861C2.89466 21.8536 3.41218 21.9964 3.94 22H20.06C20.5921 22.0053 21.1159 21.8689 21.5779 21.6049C22.0399 21.341 22.4234 20.9589 22.689 20.4978C22.9546 20.0368 23.0928 19.5134 23.0895 18.9814C23.0862 18.4493 22.9414 17.9277 22.67 17.47ZM20.94 19.47C20.8523 19.626 20.7245 19.7556 20.5697 19.8453C20.4149 19.935 20.2389 19.9815 20.06 19.98H3.94C3.76111 19.9815 3.5851 19.935 3.43032 19.8453C3.27553 19.7556 3.14765 19.626 3.06 19.47C2.97223 19.318 2.92602 19.1456 2.92602 18.97C2.92602 18.7945 2.97223 18.622 3.06 18.47L11.06 4.47003C11.1439 4.30623 11.2714 4.16876 11.4284 4.07277C11.5855 3.97678 11.766 3.92599 11.95 3.92599C12.134 3.92599 12.3145 3.97678 12.4716 4.07277C12.6286 4.16876 12.7561 4.30623 12.84 4.47003L20.89 18.47C20.9892 18.6199 21.0462 18.7937 21.055 18.9732C21.0638 19.1527 21.0241 19.3312 20.94 19.49V19.47ZM12 8.00003C11.7348 8.00003 11.4804 8.10538 11.2929 8.29292C11.1054 8.48046 11 8.73481 11 9.00003V13C11 13.2652 11.1054 13.5196 11.2929 13.7071C11.4804 13.8947 11.7348 14 12 14C12.2652 14 12.5196 13.8947 12.7071 13.7071C12.8946 13.5196 13 13.2652 13 13V9.00003C13 8.73481 12.8946 8.48046 12.7071 8.29292C12.5196 8.10538 12.2652 8.00003 12 8.00003Z"></path></svg>Caution</p><div class="starlight-aside__content"><p>Other controller types — including <strong>LSI Logic SAS</strong>, <strong>LSI Logic Parallel</strong>, and <strong>BusLogic Parallel</strong> — are not supported. Migrations using a Proxy VM without PVSCSI on SCSI controller 0 fail with <code dir="auto">could not identify block device for disk <uuid></code>. See <a href="../../reference/known-limitations/#proxy-vm-must-use-a-pvscsi-controller">Proxy VM Must Use a PVSCSI Controller</a>.</p></div></aside>
|
||
<h2 id="ssh-key-configuration">SSH Key Configuration</h2>
|
||
<aside aria-label="Note" class="starlight-aside starlight-aside--note"><p class="starlight-aside__title" aria-hidden="true"><svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor" class="starlight-aside__icon"><path d="M12 11C11.7348 11 11.4804 11.1054 11.2929 11.2929C11.1054 11.4804 11 11.7348 11 12V16C11 16.2652 11.1054 16.5196 11.2929 16.7071C11.4804 16.8946 11.7348 17 12 17C12.2652 17 12.5196 16.8946 12.7071 16.7071C12.8946 16.5196 13 16.2652 13 16V12C13 11.7348 12.8946 11.4804 12.7071 11.2929C12.5196 11.1054 12.2652 11 12 11ZM12.38 7.08C12.1365 6.97998 11.8635 6.97998 11.62 7.08C11.4973 7.12759 11.3851 7.19896 11.29 7.29C11.2017 7.3872 11.1306 7.49882 11.08 7.62C11.024 7.73868 10.9966 7.86882 11 8C10.9992 8.13161 11.0245 8.26207 11.0742 8.38391C11.124 8.50574 11.1973 8.61656 11.29 8.71C11.3872 8.79833 11.4988 8.86936 11.62 8.92C11.7715 8.98224 11.936 9.00632 12.099 8.99011C12.2619 8.97391 12.4184 8.91792 12.5547 8.82707C12.691 8.73622 12.8029 8.61328 12.8805 8.46907C12.9582 8.32486 12.9992 8.16378 13 8C12.9963 7.73523 12.8927 7.48163 12.71 7.29C12.6149 7.19896 12.5028 7.12759 12.38 7.08ZM12 2C10.0222 2 8.08879 2.58649 6.4443 3.6853C4.79981 4.78412 3.51809 6.3459 2.76121 8.17317C2.00433 10.0004 1.8063 12.0111 2.19215 13.9509C2.578 15.8907 3.53041 17.6725 4.92894 19.0711C6.32746 20.4696 8.10929 21.422 10.0491 21.8079C11.9889 22.1937 13.9996 21.9957 15.8268 21.2388C17.6541 20.4819 19.2159 19.2002 20.3147 17.5557C21.4135 15.9112 22 13.9778 22 12C22 10.6868 21.7413 9.38642 21.2388 8.17317C20.7363 6.95991 19.9997 5.85752 19.0711 4.92893C18.1425 4.00035 17.0401 3.26375 15.8268 2.7612C14.6136 2.25866 13.3132 2 12 2ZM12 20C10.4178 20 8.87104 19.5308 7.55544 18.6518C6.23985 17.7727 5.21447 16.5233 4.60897 15.0615C4.00347 13.5997 3.84504 11.9911 4.15372 10.4393C4.4624 8.88743 5.22433 7.46197 6.34315 6.34315C7.46197 5.22433 8.88743 4.4624 10.4393 4.15372C11.9911 3.84504 13.5997 4.00346 15.0615 4.60896C16.5233 5.21447 17.7727 6.23984 18.6518 7.55544C19.5308 8.87103 20 10.4177 20 12C20 14.1217 19.1572 16.1566 17.6569 17.6569C16.1566 19.1571 14.1217 20 12 20Z"></path></svg>Note</p><div class="starlight-aside__content"><p>This section applies to <strong>Option B</strong> (registering an existing VM). When using Option A (UI-based OVA deploy), SSH keys are generated and injected automatically — no manual key steps are needed.</p></div></aside>
|
||
<p>When registering an existing VM, vJailbreak needs SSH access to the Proxy VM. The UI offers two ways to provide the key pair:</p>
|
||
<h3 id="sub-option-1-let-vjailbreak-generate-the-key-pair">Sub-option 1: Let vJailbreak Generate the Key Pair</h3>
|
||
<ol>
|
||
<li>In the <strong>Add Proxy VM</strong> drawer, select <strong>Register an existing VM</strong></li>
|
||
<li>Select your VMware credentials and the VM</li>
|
||
<li>Under <strong>SSH Access</strong>, choose <strong>Generate Key Pair</strong> and click <strong>Generate</strong></li>
|
||
<li>The UI displays the public key — copy it and add it to the Proxy VM’s <code dir="auto">authorized_keys</code>:
|
||
<div class="expressive-code"><figure class="frame is-terminal not-content"><figcaption class="header"><span class="title"></span><span class="sr-only">Terminal window</span></figcaption><pre data-language="bash"><code><div class="ec-line"><div class="code"><span style="--0:#919F9F;--1:#5F636F"># On the Proxy VM (as root)</span></div></div><div class="ec-line"><div class="code"><span style="--0:#C5E478;--1:#3B61B0">echo</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#ECC48D;--1:#984E4D"><paste public key here></span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#7FDBCA;--1:#096E72">>></span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">~/.ssh/authorized_keys</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">chmod</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#F78C6C;--1:#AA0982">600</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">~/.ssh/authorized_keys</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="echo "<paste public key here>" >> ~/.ssh/authorized_keyschmod 600 ~/.ssh/authorized_keys"><div></div></button></div></figure></div>
|
||
</li>
|
||
<li>Click <strong>Register</strong></li>
|
||
</ol>
|
||
<p>vJailbreak stores the generated private key as a Kubernetes secret automatically.</p>
|
||
<h3 id="sub-option-2-upload-your-own-private-key">Sub-option 2: Upload Your Own Private Key</h3>
|
||
<p>If you have an existing key pair already configured on the VM:</p>
|
||
<ol>
|
||
<li>Under <strong>SSH Access</strong>, choose <strong>Upload Private Key</strong></li>
|
||
<li>Upload the private key file or paste its contents into the text area</li>
|
||
<li>Confirm the corresponding public key is already in the VM’s <code dir="auto">authorized_keys</code></li>
|
||
<li>Click <strong>Register</strong></li>
|
||
</ol>
|
||
<p>vJailbreak stores the uploaded private key as a Kubernetes secret and uses it during verification and migration.</p>
|
||
<h4 id="generating-a-key-pair-manually">Generating a Key Pair Manually</h4>
|
||
<p>If you prefer to generate the key pair yourself outside of vJailbreak:</p>
|
||
<div class="expressive-code"><figure class="frame is-terminal not-content"><figcaption class="header"><span class="title"></span><span class="sr-only">Terminal window</span></figcaption><pre data-language="bash"><code><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">ssh-keygen</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#82AAFF;--1:#3B61B0">-t</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">rsa</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#82AAFF;--1:#3B61B0">-b</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#F78C6C;--1:#AA0982">4096</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#82AAFF;--1:#3B61B0">-f</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">proxy_vm_key</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#82AAFF;--1:#3B61B0">-N</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#D9F5DD;--1:#111111">""</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="ssh-keygen -t rsa -b 4096 -f proxy_vm_key -N """><div></div></button></div></figure></div>
|
||
<p>This produces two files:</p>
|
||
<ul>
|
||
<li><code dir="auto">proxy_vm_key</code> — private key (upload this into vJailbreak)</li>
|
||
<li><code dir="auto">proxy_vm_key.pub</code> — public key (add this to the Proxy VM)</li>
|
||
</ul>
|
||
<p>On the Proxy VM, append the public key to root’s <code dir="auto">authorized_keys</code>:</p>
|
||
<div class="expressive-code"><figure class="frame is-terminal not-content"><figcaption class="header"><span class="title"></span><span class="sr-only">Terminal window</span></figcaption><pre data-language="bash"><code><div class="ec-line"><div class="code"><span style="--0:#919F9F;--1:#5F636F"># On the Proxy VM (as root)</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">mkdir</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#82AAFF;--1:#3B61B0">-p</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">~/.ssh</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">cat</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#7FDBCA;--1:#096E72">>></span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">~/.ssh/authorized_keys</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0"><</span><span style="--0:#7FDBCA;--1:#096E72"><</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#D9F5DD;--1:#111111">'</span><span style="--0:#ECC48D;--1:#984E4D">EOF</span><span style="--0:#D9F5DD;--1:#111111">'</span></div></div><div class="ec-line"><div class="code"><span style="--0:#7FDBCA;--1:#096E72"><</span><span style="--0:#D6DEEB;--1:#403F53">contents of proxy_vm_key.pub></span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">EOF</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">chmod</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#F78C6C;--1:#AA0982">600</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">~/.ssh/authorized_keys</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="mkdir -p ~/.sshcat >> ~/.ssh/authorized_keys << 'EOF'<contents of proxy_vm_key.pub>EOFchmod 600 ~/.ssh/authorized_keys"><div></div></button></div></figure></div>
|
||
<p>If you have temporary password SSH access, you can use <code dir="auto">ssh-copy-id</code> from your workstation as a shortcut:</p>
|
||
<div class="expressive-code"><figure class="frame is-terminal not-content"><figcaption class="header"><span class="title"></span><span class="sr-only">Terminal window</span></figcaption><pre data-language="bash"><code><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">ssh-copy-id</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#82AAFF;--1:#3B61B0">-i</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">proxy_vm_key.pub</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">root@<proxy-vm-ip></span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="ssh-copy-id -i proxy_vm_key.pub root@<proxy-vm-ip>"><div></div></button></div></figure></div>
|
||
<aside aria-label="Note" class="starlight-aside starlight-aside--note"><p class="starlight-aside__title" aria-hidden="true"><svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor" class="starlight-aside__icon"><path d="M12 11C11.7348 11 11.4804 11.1054 11.2929 11.2929C11.1054 11.4804 11 11.7348 11 12V16C11 16.2652 11.1054 16.5196 11.2929 16.7071C11.4804 16.8946 11.7348 17 12 17C12.2652 17 12.5196 16.8946 12.7071 16.7071C12.8946 16.5196 13 16.2652 13 16V12C13 11.7348 12.8946 11.4804 12.7071 11.2929C12.5196 11.1054 12.2652 11 12 11ZM12.38 7.08C12.1365 6.97998 11.8635 6.97998 11.62 7.08C11.4973 7.12759 11.3851 7.19896 11.29 7.29C11.2017 7.3872 11.1306 7.49882 11.08 7.62C11.024 7.73868 10.9966 7.86882 11 8C10.9992 8.13161 11.0245 8.26207 11.0742 8.38391C11.124 8.50574 11.1973 8.61656 11.29 8.71C11.3872 8.79833 11.4988 8.86936 11.62 8.92C11.7715 8.98224 11.936 9.00632 12.099 8.99011C12.2619 8.97391 12.4184 8.91792 12.5547 8.82707C12.691 8.73622 12.8029 8.61328 12.8805 8.46907C12.9582 8.32486 12.9992 8.16378 13 8C12.9963 7.73523 12.8927 7.48163 12.71 7.29C12.6149 7.19896 12.5028 7.12759 12.38 7.08ZM12 2C10.0222 2 8.08879 2.58649 6.4443 3.6853C4.79981 4.78412 3.51809 6.3459 2.76121 8.17317C2.00433 10.0004 1.8063 12.0111 2.19215 13.9509C2.578 15.8907 3.53041 17.6725 4.92894 19.0711C6.32746 20.4696 8.10929 21.422 10.0491 21.8079C11.9889 22.1937 13.9996 21.9957 15.8268 21.2388C17.6541 20.4819 19.2159 19.2002 20.3147 17.5557C21.4135 15.9112 22 13.9778 22 12C22 10.6868 21.7413 9.38642 21.2388 8.17317C20.7363 6.95991 19.9997 5.85752 19.0711 4.92893C18.1425 4.00035 17.0401 3.26375 15.8268 2.7612C14.6136 2.25866 13.3132 2 12 2ZM12 20C10.4178 20 8.87104 19.5308 7.55544 18.6518C6.23985 17.7727 5.21447 16.5233 4.60897 15.0615C4.00347 13.5997 3.84504 11.9911 4.15372 10.4393C4.4624 8.88743 5.22433 7.46197 6.34315 6.34315C7.46197 5.22433 8.88743 4.4624 10.4393 4.15372C11.9911 3.84504 13.5997 4.00346 15.0615 4.60896C16.5233 5.21447 17.7727 6.23984 18.6518 7.55544C19.5308 8.87103 20 10.4177 20 12C20 14.1217 19.1572 16.1566 17.6569 17.6569C16.1566 19.1571 14.1217 20 12 20Z"></path></svg>Note</p><div class="starlight-aside__content"><p><strong>SSH key requirements:</strong></p><ul>
|
||
<li>No passphrase — vJailbreak uses the key non-interactively</li>
|
||
<li>Any standard PEM format is accepted: RSA, EC, PKCS#8, or OpenSSH. PuTTY <code dir="auto">.ppk</code> format is not supported</li>
|
||
<li><code dir="auto">PermitRootLogin</code> must be <code dir="auto">yes</code> or <code dir="auto">prohibit-password</code> in <code dir="auto">/etc/ssh/sshd_config</code> on the Proxy VM</li>
|
||
</ul></div></aside>
|
||
<h2 id="registering-the-proxy-vm-in-vjailbreak">Registering the Proxy VM in vJailbreak</h2>
|
||
<p>Once the Proxy VM is set up and the SSH key is ready:</p>
|
||
<ol>
|
||
<li>In the vJailbreak UI, navigate to <strong>vJailbreak Accelerated Copy</strong> in the left sidebar</li>
|
||
<li>Click <strong>Add Proxy VM</strong></li>
|
||
<li>Fill in the form:
|
||
<ul>
|
||
<li><strong>Name</strong>: A unique identifier for this Proxy VM</li>
|
||
<li><strong>VM Name</strong>: The exact VM name as it appears in vCenter</li>
|
||
<li><strong>VMware Credentials</strong>: Select the VMware credentials that can see this VM</li>
|
||
<li><strong>SSH Private Key</strong>: Paste the contents of your private key file (e.g., <code dir="auto">~/.ssh/proxy_vm_key</code>)</li>
|
||
</ul>
|
||
</li>
|
||
<li>Click <strong>Add</strong></li>
|
||
</ol>
|
||
<p>vJailbreak will verify the Proxy VM by:</p>
|
||
<ul>
|
||
<li>Confirming the VM exists in vCenter</li>
|
||
<li>Retrieving the guest IP via VMware Tools</li>
|
||
<li>Checking <code dir="auto">disk.EnableUUID = TRUE</code> — if not set, vJailbreak will automatically enable it and reboot the Proxy VM, so onboarding may take longer than usual</li>
|
||
<li>Establishing an SSH connection</li>
|
||
<li>Verifying <code dir="auto">qemu-nbd</code> is available</li>
|
||
</ul>
|
||
<p>The Proxy VM status will update to <strong>Ready</strong> once all checks pass. Any failed checks are reported with a specific error message in the UI.</p>
|
||
<aside aria-label="Tip" class="starlight-aside starlight-aside--tip"><p class="starlight-aside__title" aria-hidden="true"><svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor" class="starlight-aside__icon"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.43909 8.85483L1.44039 8.85354L4.96668 5.33815C5.30653 4.99386 5.7685 4.79662 6.2524 4.78972L6.26553 4.78963L12.9014 4.78962L13.8479 3.84308C16.9187 0.772319 20.0546 0.770617 21.4678 0.975145C21.8617 1.02914 22.2271 1.21053 22.5083 1.4917C22.7894 1.77284 22.9708 2.13821 23.0248 2.53199C23.2294 3.94517 23.2278 7.08119 20.1569 10.1521L19.2107 11.0983V17.7338L19.2106 17.7469C19.2037 18.2308 19.0067 18.6933 18.6624 19.0331L15.1456 22.5608C14.9095 22.7966 14.6137 22.964 14.29 23.0449C13.9663 23.1259 13.6267 23.1174 13.3074 23.0204C12.9881 22.9235 12.7011 22.7417 12.4771 22.4944C12.2533 22.2473 12.1006 21.9441 12.0355 21.6171L11.1783 17.3417L6.65869 12.822L4.34847 12.3589L2.38351 11.965C2.05664 11.8998 1.75272 11.747 1.50564 11.5232C1.25835 11.2992 1.07653 11.0122 0.979561 10.6929C0.882595 10.3736 0.874125 10.034 0.955057 9.7103C1.03599 9.38659 1.20328 9.09092 1.43909 8.85483ZM6.8186 10.8724L2.94619 10.096L6.32006 6.73268H10.9583L6.8186 10.8724ZM15.2219 5.21703C17.681 2.75787 20.0783 2.75376 21.1124 2.8876C21.2462 3.92172 21.2421 6.31895 18.783 8.77812L12.0728 15.4883L8.51172 11.9272L15.2219 5.21703ZM13.9042 21.0538L13.1279 17.1811L17.2676 13.0414V17.68L13.9042 21.0538Z"></path><path d="M9.31827 18.3446C9.45046 17.8529 9.17864 17.3369 8.68945 17.1724C8.56178 17.1294 8.43145 17.1145 8.30512 17.1243C8.10513 17.1398 7.91519 17.2172 7.76181 17.3434C7.62613 17.455 7.51905 17.6048 7.45893 17.7835C6.97634 19.2186 5.77062 19.9878 4.52406 20.4029C4.08525 20.549 3.6605 20.644 3.29471 20.7053C3.35607 20.3395 3.45098 19.9148 3.59711 19.476C4.01221 18.2294 4.78141 17.0237 6.21648 16.5411C6.39528 16.481 6.54504 16.3739 6.65665 16.2382C6.85126 16.0016 6.92988 15.678 6.84417 15.3647C6.83922 15.3466 6.83373 15.3286 6.82767 15.3106C6.74106 15.053 6.55701 14.8557 6.33037 14.7459C6.10949 14.6389 5.84816 14.615 5.59715 14.6994C5.47743 14.7397 5.36103 14.7831 5.24786 14.8294C3.22626 15.6569 2.2347 17.4173 1.75357 18.8621C1.49662 19.6337 1.36993 20.3554 1.30679 20.8818C1.27505 21.1464 1.25893 21.3654 1.25072 21.5213C1.24662 21.5993 1.24448 21.6618 1.24337 21.7066L1.243 21.7226L1.24235 21.7605L1.2422 21.7771L1.24217 21.7827L1.24217 21.7856C1.24217 22.3221 1.67703 22.7579 2.2137 22.7579L2.2155 22.7579L2.22337 22.7578L2.23956 22.7577C2.25293 22.7575 2.27096 22.7572 2.29338 22.7567C2.33821 22.7555 2.40073 22.7534 2.47876 22.7493C2.63466 22.7411 2.85361 22.725 3.11822 22.6932C3.64462 22.6301 4.36636 22.5034 5.13797 22.2464C6.58274 21.7653 8.3431 20.7738 9.17063 18.7522C9.21696 18.639 9.26037 18.5226 9.30064 18.4029C9.30716 18.3835 9.31304 18.364 9.31827 18.3446Z"></path></svg>Tip</p><div class="starlight-aside__content"><p>If verification fails, address the reported issue (e.g., install missing utilities, fix SSH access) and click <strong>Retry</strong> to re-run the validation without re-entering the form.</p></div></aside>
|
||
<h2 id="using-vjailbreak-accelerated-copy-in-a-migration">Using vJailbreak Accelerated Copy in a Migration</h2>
|
||
<h3 id="step-1-create-a-migration">Step 1: Create a Migration</h3>
|
||
<ol>
|
||
<li>Navigate to the <strong>Migrations</strong> page and click <strong>New Migration</strong></li>
|
||
<li>Fill out the migration form with source VM and target configuration</li>
|
||
<li>For the <strong>Data Copy Method</strong>, select <strong>vJailbreak Accelerated Copy</strong></li>
|
||
</ol>
|
||
<h3 id="step-2-select-proxy-vm">Step 2: Select Proxy VM</h3>
|
||
<ol start="4">
|
||
<li>A <strong>Proxy VM</strong> dropdown appears — select a Proxy VM in <strong>Ready</strong> state</li>
|
||
<li>The UI will only show Proxy VMs that are verified and ready</li>
|
||
</ol>
|
||
<h3 id="step-3-start-the-migration">Step 3: Start the Migration</h3>
|
||
<ol start="6">
|
||
<li>Review <strong>Advanced Options</strong> if needed (network/storage mappings)</li>
|
||
<li>Click <strong>Start Migration</strong></li>
|
||
</ol>
|
||
<aside aria-label="Note" class="starlight-aside starlight-aside--note"><p class="starlight-aside__title" aria-hidden="true"><svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor" class="starlight-aside__icon"><path d="M12 11C11.7348 11 11.4804 11.1054 11.2929 11.2929C11.1054 11.4804 11 11.7348 11 12V16C11 16.2652 11.1054 16.5196 11.2929 16.7071C11.4804 16.8946 11.7348 17 12 17C12.2652 17 12.5196 16.8946 12.7071 16.7071C12.8946 16.5196 13 16.2652 13 16V12C13 11.7348 12.8946 11.4804 12.7071 11.2929C12.5196 11.1054 12.2652 11 12 11ZM12.38 7.08C12.1365 6.97998 11.8635 6.97998 11.62 7.08C11.4973 7.12759 11.3851 7.19896 11.29 7.29C11.2017 7.3872 11.1306 7.49882 11.08 7.62C11.024 7.73868 10.9966 7.86882 11 8C10.9992 8.13161 11.0245 8.26207 11.0742 8.38391C11.124 8.50574 11.1973 8.61656 11.29 8.71C11.3872 8.79833 11.4988 8.86936 11.62 8.92C11.7715 8.98224 11.936 9.00632 12.099 8.99011C12.2619 8.97391 12.4184 8.91792 12.5547 8.82707C12.691 8.73622 12.8029 8.61328 12.8805 8.46907C12.9582 8.32486 12.9992 8.16378 13 8C12.9963 7.73523 12.8927 7.48163 12.71 7.29C12.6149 7.19896 12.5028 7.12759 12.38 7.08ZM12 2C10.0222 2 8.08879 2.58649 6.4443 3.6853C4.79981 4.78412 3.51809 6.3459 2.76121 8.17317C2.00433 10.0004 1.8063 12.0111 2.19215 13.9509C2.578 15.8907 3.53041 17.6725 4.92894 19.0711C6.32746 20.4696 8.10929 21.422 10.0491 21.8079C11.9889 22.1937 13.9996 21.9957 15.8268 21.2388C17.6541 20.4819 19.2159 19.2002 20.3147 17.5557C21.4135 15.9112 22 13.9778 22 12C22 10.6868 21.7413 9.38642 21.2388 8.17317C20.7363 6.95991 19.9997 5.85752 19.0711 4.92893C18.1425 4.00035 17.0401 3.26375 15.8268 2.7612C14.6136 2.25866 13.3132 2 12 2ZM12 20C10.4178 20 8.87104 19.5308 7.55544 18.6518C6.23985 17.7727 5.21447 16.5233 4.60897 15.0615C4.00347 13.5997 3.84504 11.9911 4.15372 10.4393C4.4624 8.88743 5.22433 7.46197 6.34315 6.34315C7.46197 5.22433 8.88743 4.4624 10.4393 4.15372C11.9911 3.84504 13.5997 4.00346 15.0615 4.60896C16.5233 5.21447 17.7727 6.23984 18.6518 7.55544C19.5308 8.87103 20 10.4177 20 12C20 14.1217 19.1572 16.1566 17.6569 17.6569C16.1566 19.1571 14.1217 20 12 20Z"></path></svg>Note</p><div class="starlight-aside__content"><p>The selected Proxy VM must be in <strong>Ready</strong> state before the migration can proceed. If no Proxy VM is ready, register and verify one first.</p></div></aside>
|
||
<h2 id="migration-workflow">Migration Workflow</h2>
|
||
<p>When vJailbreak Accelerated Copy is selected, the migration follows this workflow:</p>
|
||
<div class="expressive-code"><figure class="frame not-content"><figcaption class="header"></figcaption><pre data-language="plaintext"><code><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">┌─────────────────────────────────────────────────────────────────┐</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ vJailbreak Accelerated Copy Flow │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">├─────────────────────────────────────────────────────────────────┤</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ 1. Validate Prerequisites │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ ├── Proxy VM is in Ready state │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ ├── SSH connectivity to Proxy VM │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ └── qemu-nbd available on Proxy VM │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ 2. Provision Destination Resources (standard workflow) │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ ├── Create Cinder volumes in PCD │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ └── Attach destination disks to vJailbreak VM │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ 3. Power Off Source VM, then Take Snapshot │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ 4. For Each Source Disk: │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ ├── Attach frozen snapshot disk to Proxy VM │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ ├── Identify block device via disk UUID matching │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ ├── Find a free port on the Proxy VM │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ ├── Expose disk as NBD via qemu-nbd on that port │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ ├── Run nbdcopy on vJailbreak VM to destination disk │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ └── Detach and clean up disk from Proxy VM │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ 5. Remove Source VM Snapshot │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ 6. Disk Conversion (same as normal migration) │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ 7. Create Target VM in PCD (standard post-copy flow) │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">└─────────────────────────────────────────────────────────────────┘</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="┌─────────────────────────────────────────────────────────────────┐│ vJailbreak Accelerated Copy Flow │├─────────────────────────────────────────────────────────────────┤│ ││ 1. Validate Prerequisites ││ ├── Proxy VM is in Ready state ││ ├── SSH connectivity to Proxy VM ││ └── qemu-nbd available on Proxy VM ││ ││ 2. Provision Destination Resources (standard workflow) ││ ├── Create Cinder volumes in PCD ││ └── Attach destination disks to vJailbreak VM ││ ││ 3. Power Off Source VM, then Take Snapshot ││ ││ 4. For Each Source Disk: ││ ├── Attach frozen snapshot disk to Proxy VM ││ ├── Identify block device via disk UUID matching ││ ├── Find a free port on the Proxy VM ││ ├── Expose disk as NBD via qemu-nbd on that port ││ ├── Run nbdcopy on vJailbreak VM to destination disk ││ └── Detach and clean up disk from Proxy VM ││ ││ 5. Remove Source VM Snapshot ││ ││ 6. Disk Conversion (same as normal migration) ││ ││ 7. Create Target VM in PCD (standard post-copy flow) ││ │└─────────────────────────────────────────────────────────────────┘"><div></div></button></div></figure></div>
|
||
<h3 id="component-diagram">Component Diagram</h3>
|
||
<p>The pieces involved and how they talk to each other:</p>
|
||
<pre class="mermaid">architecture-beta
|
||
service admin(internet)[Admin UI]
|
||
|
||
group vjb(cloud)[vJailbreak Appliance]
|
||
service ctrl(server)[Controller] in vjb
|
||
service pod(server)[Migration Pod] in vjb
|
||
|
||
group vmw(cloud)[VMware Environment]
|
||
service vc(server)[vCenter] in vmw
|
||
service proxy(server)[Proxy VM] in vmw
|
||
|
||
group pcd(cloud)[Platform9 PCD]
|
||
service os(disk)[Cinder Volume] in pcd
|
||
|
||
admin:R -- L:ctrl
|
||
ctrl:R -- L:vc
|
||
ctrl:B -- T:proxy
|
||
vc:B -- L:proxy
|
||
pod:L -- R:proxy
|
||
pod:B -- T:os</pre>
|
||
<ul>
|
||
<li><strong>Admin UI → Controller</strong>: manage Proxy VMs and MigrationPlans (Kubernetes API)</li>
|
||
<li><strong>Controller → vCenter/ESXi</strong>: deploy/register the Proxy VM (OVA import), read host inventory</li>
|
||
<li><strong>Controller → Proxy VM</strong>: push/verify SSH key, confirm <code dir="auto">qemu-nbd</code> and <code dir="auto">disk.EnableUUID</code></li>
|
||
<li><strong>vCenter/ESXi → Proxy VM</strong>: hot-add the frozen source-VM disks</li>
|
||
<li><strong>Migration Pod → Proxy VM</strong>: SSH — identify block devices, start <code dir="auto">qemu-nbd</code>, run <code dir="auto">nbdcopy</code></li>
|
||
<li><strong>Migration Pod → Cinder Volume</strong>: write the copied disk data to the destination</li>
|
||
</ul>
|
||
<h3 id="sequence-diagram">Sequence Diagram</h3>
|
||
<p>The same flow as a sequence diagram, including Proxy VM onboarding (only the operations specific to vJailbreak Accelerated Copy are shown — disk conversion and target VM creation follow the same path as every other copy method):</p>
|
||
<pre class="mermaid">sequenceDiagram
|
||
autonumber
|
||
actor Admin
|
||
participant Ctrl as vJailbreak Controller
|
||
participant vC as vCenter / ESXi
|
||
participant Proxy as Proxy VM
|
||
participant Pod as Migration Pod (v2v-helper)
|
||
participant OS as OpenStack (Cinder/Nova)
|
||
|
||
Note over Admin,OS: Onboarding — Option A: Deploy new Proxy VM (OVA)
|
||
Admin->>Ctrl: Deploy & Register VM (OVA)
|
||
Ctrl->>vC: Import OVA, power on VM
|
||
Ctrl->>Proxy: Auto-generate & inject SSH keypair
|
||
Ctrl->>Proxy: Verify SSH, qemu-nbd, disk.EnableUUID
|
||
Ctrl->>Ctrl: Store private key as Secret "{proxyVM}-hot-add-ssh-key"
|
||
Ctrl-->>Admin: Proxy VM ready
|
||
|
||
Note over Admin,OS: Onboarding — Option B: Register an existing VM
|
||
Admin->>Ctrl: Register VM + SSH key (generate or upload)
|
||
Note right of Admin: If generated, admin adds public key<br>to the VM's authorized_keys manually
|
||
Ctrl->>Proxy: Verify SSH, qemu-nbd, disk.EnableUUID
|
||
Ctrl->>Ctrl: Store private key as Secret "{proxyVM}-hot-add-ssh-key"
|
||
Ctrl-->>Admin: Proxy VM ready
|
||
|
||
Note over Admin,OS: Migration — vJailbreak Accelerated Copy
|
||
Admin->>Ctrl: Create MigrationPlan (StorageCopyMethod=HotAdd)
|
||
Ctrl->>Pod: Launch v2v-helper (Proxy VM IP + SSH secret)
|
||
Pod->>vC: Power off source VM, take snapshot
|
||
Pod->>vC: Hot-add frozen VMDKs to Proxy VM
|
||
Pod->>Proxy: SSH — match disk WWID to block device
|
||
Pod->>Proxy: SSH — start qemu-nbd per disk
|
||
Proxy-->>Pod: nbdcopy streams disk over NBD
|
||
Pod->>OS: Write stream into Cinder volume
|
||
Pod->>vC: Detach disks, delete snapshot
|
||
Pod-->>Ctrl: Migration succeeded</pre>
|
||
<h2 id="limitations">Limitations</h2>
|
||
<ul>
|
||
<li><strong>Cold copy only</strong>: The source VM is powered off before disk attachment — live (hot) copy of the running VM’s active disks is not supported</li>
|
||
<li><strong>Same vCenter</strong>: Proxy VM and source VM must be managed by the same vCenter instance</li>
|
||
<li><strong>VMware Tools required</strong>: The Proxy VM must have VMware Tools running so vJailbreak can retrieve its guest IP</li>
|
||
<li><strong>PVSCSI controller only</strong>: The Proxy VM’s first SCSI controller (<strong>SCSI controller 0</strong>) must be <strong>VMware Paravirtual (PVSCSI)</strong>. Disk UUID matching does not work on other controller types, and migrations fail with <code dir="auto">could not identify block device for disk <uuid></code>. See <a href="#configure-the-scsi-controller-type-on-the-proxy-vm">Configure the SCSI Controller Type</a>.</li>
|
||
<li><strong>Concurrent disk attach can fail</strong>: When several migrations reach the disk-attach step at the same time on the same Proxy VM, vCenter may reject some of the simultaneous reconfigure tasks and those migrations fail. This is a transient race — the migrations that attached first continue normally, and the failed ones succeed on retry. Stagger migration start times or spread migrations across multiple Proxy VMs to reduce the chance of it happening.</li>
|
||
<li><strong>Maximum 60 disks per Proxy VM (including its own boot disk)</strong>: vSphere allows at most <strong>60</strong> virtual disks per VM (4 SCSI controllers × 15 disks). The Proxy VM’s own boot disk counts toward this total, so the constraint is <strong>Proxy VM boot disk + attached source disks ≤ 60</strong> — a Proxy VM with a single boot disk can have up to <strong>59</strong> source disks attached at any one time. This is a shared ceiling across <strong>all</strong> migrations using the same Proxy VM concurrently, not a per-migration limit. To migrate more disks in parallel, register additional Proxy VMs and distribute migrations across them.</li>
|
||
</ul>
|
||
<h2 id="troubleshooting">Troubleshooting</h2>
|
||
<h3 id="proxy-vm-verification-failed">Proxy VM Verification Failed</h3>
|
||
<p><strong>Symptoms:</strong> Proxy VM stuck in <code dir="auto">Pending</code> or <code dir="auto">Failed</code> state with a validation error.</p>
|
||
<p><strong>Resolution by error:</strong></p>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<table><thead><tr><th>Error</th><th>Resolution</th></tr></thead><tbody><tr><td>VM not found in vCenter</td><td>Verify the VM name exactly matches the vCenter inventory name</td></tr><tr><td>Guest IP not available</td><td>Ensure VMware Tools is installed and running on the Proxy VM</td></tr><tr><td><code dir="auto">disk.EnableUUID</code> not set</td><td>Set <code dir="auto">disk.EnableUUID = TRUE</code> in VM advanced settings and reboot</td></tr><tr><td>SSH connection refused</td><td>Verify <code dir="auto">sshd</code> is running and port 22 is reachable from vJailbreak</td></tr><tr><td><code dir="auto">qemu-nbd</code> not found</td><td>Install <code dir="auto">qemu-utils</code> (Ubuntu) or <code dir="auto">qemu-nbd</code> (Alpine) on the Proxy VM</td></tr></tbody></table>
|
||
<h3 id="nbd-connection-failed-during-copy">NBD Connection Failed During Copy</h3>
|
||
<div class="expressive-code"><figure class="frame not-content"><figcaption class="header"></figcaption><pre data-language="plaintext"><code><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">Error: failed to connect to NBD endpoint on proxy VM</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="Error: failed to connect to NBD endpoint on proxy VM"><div></div></button></div></figure></div>
|
||
<p><strong>Resolution:</strong></p>
|
||
<ol>
|
||
<li>Verify the Proxy VM is still running and SSH is accessible</li>
|
||
<li>Check that <code dir="auto">qemu-nbd</code> started successfully — review v2v helper logs</li>
|
||
<li>Ensure the NBD ports (TCP <strong>10809–11808</strong>, one per disk copied in parallel) are not blocked by a firewall between the Proxy VM and vJailbreak</li>
|
||
<li>Confirm the Proxy VM’s guest IP is correct (VMware Tools must be running)</li>
|
||
</ol>
|
||
<h3 id="block-device-not-found-in-proxy-vm">Block Device Not Found in Proxy VM</h3>
|
||
<div class="expressive-code"><figure class="frame not-content"><figcaption class="header"></figcaption><pre data-language="plaintext"><code><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">Error: could not identify block device for disk <uuid></span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="Error: could not identify block device for disk <uuid>"><div></div></button></div></figure></div>
|
||
<p><strong>Resolution:</strong></p>
|
||
<ol>
|
||
<li>Verify <code dir="auto">disk.EnableUUID = TRUE</code> is set on the Proxy VM (this is the most common cause)</li>
|
||
<li>Verify the Proxy VM’s <strong>SCSI controller 0</strong> is of type <strong>VMware Paravirtual</strong> — no other controller type is supported. See <a href="#configure-the-scsi-controller-type-on-the-proxy-vm">Configure the SCSI Controller Type</a></li>
|
||
<li>Confirm the disk was actually attached — check vCenter → Proxy VM → Edit Settings → Hard Disks</li>
|
||
<li>SSH into the Proxy VM and run <code dir="auto">lsblk</code> to list visible block devices</li>
|
||
<li>Check vCenter events for disk attach errors on the Proxy VM</li>
|
||
</ol>
|
||
<h3 id="disk-attach-fails-when-several-migrations-start-together">Disk Attach Fails When Several Migrations Start Together</h3>
|
||
<p><strong>Symptoms:</strong> A batch of migrations is started at once and some of them fail early with a vCenter error while attaching disks to the Proxy VM. The remaining migrations proceed into the copy phase normally.</p>
|
||
<p><strong>Cause:</strong> vCenter does not always handle simultaneous VM reconfigure (disk attach) tasks on the same Proxy VM gracefully, so some attach requests are rejected. This is a transient race condition, not a misconfiguration.</p>
|
||
<p><strong>Resolution:</strong></p>
|
||
<ol>
|
||
<li>Wait until the surviving migrations have entered the copy phase</li>
|
||
<li><a href="../../guides/how-to/retry_failed_migration/">Retry</a> the failed migrations — they normally succeed on the second attempt</li>
|
||
<li>To reduce the chance of the race, stagger migration start times instead of starting a large batch at once, or register additional Proxy VMs and distribute migrations across them</li>
|
||
</ol>
|
||
<h3 id="snapshot-creation-failed">Snapshot Creation Failed</h3>
|
||
<div class="expressive-code"><figure class="frame not-content"><figcaption class="header"></figcaption><pre data-language="plaintext"><code><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">Error: failed to create snapshot on source VM</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="Error: failed to create snapshot on source VM"><div></div></button></div></figure></div>
|
||
<p><strong>Resolution:</strong></p>
|
||
<ol>
|
||
<li>Verify the VMware credentials have snapshot creation permissions</li>
|
||
<li>Check if a snapshot with the same name already exists on the source VM — remove stale <code dir="auto">vjailbreak-*</code> snapshots</li>
|
||
<li>Ensure the source VM’s datastore has sufficient free space for the snapshot delta files</li>
|
||
</ol>
|
||
<h3 id="migration-stuck-after-snapshot">Migration Stuck After Snapshot</h3>
|
||
<p>If the migration is stuck after taking the snapshot and the source VM remains powered off:</p>
|
||
<ol>
|
||
<li>Check v2v helper logs for the last successful phase</li>
|
||
<li>If the Proxy VM became unavailable, the migration will not auto-recover — clean up manually:
|
||
<div class="expressive-code"><figure class="frame is-terminal not-content"><figcaption class="header"><span class="title"></span><span class="sr-only">Terminal window</span></figcaption><pre data-language="bash"><code><div class="ec-line"><div class="code"><span style="--0:#919F9F;--1:#5F636F"># Remove the snapshot from vCenter</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">govc</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">snapshot.remove</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#82AAFF;--1:#3B61B0">-vm</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#ECC48D;--1:#984E4D"><source-vm></span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#ECC48D;--1:#984E4D">vjailbreak-hotadd-snap</span><span style="--0:#D9F5DD;--1:#111111">"</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="govc snapshot.remove -vm "<source-vm>" "vjailbreak-hotadd-snap""><div></div></button></div></figure></div>
|
||
</li>
|
||
<li>Detach any disks vJailbreak attached to the Proxy VM before retrying</li>
|
||
</ol>
|
||
<h2 id="best-practices">Best Practices</h2>
|
||
<ol>
|
||
<li><strong>Dedicate the Proxy VM</strong>: Avoid running other workloads on the Proxy VM during migrations to ensure stable performance</li>
|
||
<li><strong>Match network placement</strong>: Place the Proxy VM on a network with low latency to the vJailbreak VM for fast NBD transfers</li>
|
||
<li><strong>Verify before migrating</strong>: Always confirm the Proxy VM shows <strong>Ready</strong> status before starting a migration</li>
|
||
<li><strong>Monitor disk space</strong>: Snapshot delta files consume datastore space — ensure the source VM’s datastore has at least 20% free space</li>
|
||
<li><strong>Use the recommended OVA</strong>: The pre-built OVA is tested and configured correctly; custom VMs require manual validation of all prerequisites</li>
|
||
<li><strong>Rotate SSH keys</strong>: Use a dedicated key pair for vJailbreak and rotate it periodically</li>
|
||
</ol> </div> <footer class="sl-flex astro-3yyafb3n"> <div class="meta sl-flex astro-3yyafb3n"> <a href="https://platform9.github.io/vjailbreak/src/content/docs/concepts/vjailbreak-accelerated-copy.md" class="sl-flex print:hidden astro-eez2twj6"><svg aria-hidden="true" class="astro-eez2twj6 astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.2em;"><path d="M22 7.24a1 1 0 0 0-.29-.71l-4.24-4.24a1 1 0 0 0-1.1-.22 1 1 0 0 0-.32.22l-2.83 2.83L2.29 16.05a1 1 0 0 0-.29.71V21a1 1 0 0 0 1 1h4.24a1 1 0 0 0 .76-.29l10.87-10.93L21.71 8c.1-.1.17-.2.22-.33a1 1 0 0 0 0-.24v-.14l.07-.05ZM6.83 20H4v-2.83l9.93-9.93 2.83 2.83L6.83 20ZM18.17 8.66l-2.83-2.83 1.42-1.41 2.82 2.82-1.41 1.42Z"/></svg> Edit page</a> </div> <div class="pagination-links print:hidden astro-u2l5gyhi" dir="ltr"> <a href="/vjailbreak/concepts/storage-accelerated-copy/" rel="prev" class="astro-u2l5gyhi"> <svg aria-hidden="true" class="astro-u2l5gyhi astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.5rem;"><path d="M17 11H9.41l3.3-3.29a1.004 1.004 0 1 0-1.42-1.42l-5 5a1 1 0 0 0-.21.33 1 1 0 0 0 0 .76 1 1 0 0 0 .21.33l5 5a1.002 1.002 0 0 0 1.639-.325 1 1 0 0 0-.219-1.095L9.41 13H17a1 1 0 0 0 0-2Z"/></svg> <span class="astro-u2l5gyhi"> Previous <br class="astro-u2l5gyhi"> <span class="link-title astro-u2l5gyhi">Storage Accelerated Copy</span> </span> </a> <a href="/vjailbreak/architecture/architecture-overview/" rel="next" class="astro-u2l5gyhi"> <svg aria-hidden="true" class="astro-u2l5gyhi astro-c6vsoqas" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.5rem;"><path d="M17.92 11.62a1.001 1.001 0 0 0-.21-.33l-5-5a1.003 1.003 0 1 0-1.42 1.42l3.3 3.29H7a1 1 0 0 0 0 2h7.59l-3.3 3.29a1.002 1.002 0 0 0 .325 1.639 1 1 0 0 0 1.095-.219l5-5a1 1 0 0 0 .21-.33 1 1 0 0 0 0-.76Z"/></svg> <span class="astro-u2l5gyhi"> Next <br class="astro-u2l5gyhi"> <span class="link-title astro-u2l5gyhi">Architecture</span> </span> </a> </div> </footer> </div> </div> </main> </div> </div> </div> </div> </body></html> |