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]>
755 lines
133 KiB
HTML
755 lines
133 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>Storage Accelerated Copy | vJailbreak</title><link rel="canonical" href="https://platform9.github.io/vjailbreak/concepts/storage-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="Storage Accelerated Copy"/><meta property="og:type" content="article"/><meta property="og:url" content="https://platform9.github.io/vjailbreak/concepts/storage-accelerated-copy/"/><meta property="og:locale" content="en"/><meta property="og:description" content="High-performance VM migration using storage array level XCOPY operations"/><meta property="og:site_name" content="vJailbreak"/><meta name="twitter:card" content="summary_large_image"/><meta name="description" content="High-performance VM migration using storage array level XCOPY operations"/><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="page" 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="false" 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="#supported-storage-arrays" class="astro-g2bywc46" style="--depth: 0;"> <span class="astro-g2bywc46" style="--depth: 0;">Supported Storage Arrays</span> </a> </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-storage-array-configuration" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">1. Storage Array Configuration</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#2-esxi-ssh-access" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">2. ESXi SSH Access</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#3-network-connectivity" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">3. Network Connectivity</span> </a> </li> </ul> </li><li class="astro-g2bywc46" style="--depth: 0;"> <a href="#configuration" class="astro-g2bywc46" style="--depth: 0;"> <span class="astro-g2bywc46" style="--depth: 0;">Configuration</span> </a> <ul class="isMobile astro-g2bywc46" style="--depth: 1;"> <li class="astro-g2bywc46" style="--depth: 1;"> <a href="#understanding-auto-discovery" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Understanding Auto-Discovery</span> </a> </li> </ul> </li><li class="astro-g2bywc46" style="--depth: 0;"> <a href="#using-the-ui" class="astro-g2bywc46" style="--depth: 0;"> <span class="astro-g2bywc46" style="--depth: 0;">Using the UI</span> </a> <ul class="isMobile astro-g2bywc46" style="--depth: 1;"> <li class="astro-g2bywc46" style="--depth: 1;"> <a href="#step-1-add-pcd-credentials" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Step 1: Add PCD Credentials</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#step-2-configure-storage-array-credentials" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Step 2: Configure Storage Array Credentials</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#step-3-configure-esxi-ssh-key" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Step 3: Configure ESXi SSH Key</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#step-4-create-migration-with-storage-accelerated-copy" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Step 4: Create Migration with Storage-Accelerated Copy</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> </li><li class="astro-g2bywc46" style="--depth: 0;"> <a href="#migration-phases" class="astro-g2bywc46" style="--depth: 0;"> <span class="astro-g2bywc46" style="--depth: 0;">Migration Phases</span> </a> </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="#common-issues" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Common Issues</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#checking-arraycreds-status" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Checking ArrayCreds Status</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="#supported-storage-arrays" class="astro-g2bywc46" style="--depth: 0;"> <span class="astro-g2bywc46" style="--depth: 0;">Supported Storage Arrays</span> </a> </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-storage-array-configuration" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">1. Storage Array Configuration</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#2-esxi-ssh-access" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">2. ESXi SSH Access</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#3-network-connectivity" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">3. Network Connectivity</span> </a> </li> </ul> </li><li class="astro-g2bywc46" style="--depth: 0;"> <a href="#configuration" class="astro-g2bywc46" style="--depth: 0;"> <span class="astro-g2bywc46" style="--depth: 0;">Configuration</span> </a> <ul class="astro-g2bywc46" style="--depth: 1;"> <li class="astro-g2bywc46" style="--depth: 1;"> <a href="#understanding-auto-discovery" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Understanding Auto-Discovery</span> </a> </li> </ul> </li><li class="astro-g2bywc46" style="--depth: 0;"> <a href="#using-the-ui" class="astro-g2bywc46" style="--depth: 0;"> <span class="astro-g2bywc46" style="--depth: 0;">Using the UI</span> </a> <ul class="astro-g2bywc46" style="--depth: 1;"> <li class="astro-g2bywc46" style="--depth: 1;"> <a href="#step-1-add-pcd-credentials" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Step 1: Add PCD Credentials</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#step-2-configure-storage-array-credentials" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Step 2: Configure Storage Array Credentials</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#step-3-configure-esxi-ssh-key" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Step 3: Configure ESXi SSH Key</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#step-4-create-migration-with-storage-accelerated-copy" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Step 4: Create Migration with Storage-Accelerated Copy</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> </li><li class="astro-g2bywc46" style="--depth: 0;"> <a href="#migration-phases" class="astro-g2bywc46" style="--depth: 0;"> <span class="astro-g2bywc46" style="--depth: 0;">Migration Phases</span> </a> </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="#common-issues" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Common Issues</span> </a> </li><li class="astro-g2bywc46" style="--depth: 1;"> <a href="#checking-arraycreds-status" class="astro-g2bywc46" style="--depth: 1;"> <span class="astro-g2bywc46" style="--depth: 1;">Checking ArrayCreds Status</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">Storage Accelerated Copy</h1> </div> </div> <div class="content-panel astro-7nkwcw3z"> <div class="sl-container astro-7nkwcw3z"> <div class="sl-markdown-content"> <p>Storage Accelerated Copy is an advanced data copy method that leverages storage array level XCOPY operations to dramatically improve migration performance. Instead of copying data over the network via the traditional NBD/NFC protocol, this method offloads the data copy to the storage array itself, achieving significantly faster transfer speeds.</p>
|
||
<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>Storage-Accelerated Copy does not require VDDK at any stage. Disk data is copied directly by the
|
||
storage array via <code dir="auto">vmkfstools</code> XCOPY. VDDK is never used. This method is unaffected by VDDK
|
||
availability.</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. This approach is limited to approximately <strong>1 Gbps per VMDK</strong> due to VMware’s NFC protocol constraints.</p>
|
||
<p>Storage-Accelerated Copy bypasses this limitation by:</p>
|
||
<ol>
|
||
<li>Creating a target volume directly on the storage array</li>
|
||
<li>Importing the volume into PCD Cinder</li>
|
||
<li>Mapping the volume to the ESXi host</li>
|
||
<li>Using ESXi’s <code dir="auto">vmkfstools</code> to perform an XCOPY clone operation directly on the storage array</li>
|
||
<li>The storage array handles the data copy internally.</li>
|
||
</ol>
|
||
<h3 id="benefits">Benefits</h3>
|
||
<ul>
|
||
<li><strong>Dramatically faster migrations</strong>: Array-level copy operations are significantly faster than network-based transfers</li>
|
||
<li><strong>Reduced network load</strong>: Data doesn’t traverse the network between VMware and PCD.</li>
|
||
<li><strong>Lower ESXi host CPU usage</strong>: The storage array handles the heavy lifting</li>
|
||
<li><strong>Ideal for large VMs</strong>: Especially beneficial for VMs with large disks (hundreds of GB to TB)</li>
|
||
</ul>
|
||
<h3 id="requirements">Requirements</h3>
|
||
<ul>
|
||
<li><strong>Supported storage arrays</strong>: Pure Storage FlashArray or NetApp ONTAP</li>
|
||
<li><strong>Shared storage</strong>: Both VMware datastores and PCD must be backed by the same storage array.</li>
|
||
<li><strong>ESXi SSH access</strong>: SSH access to ESXi hosts with root privileges</li>
|
||
<li><strong>Storage connectivity</strong>: ESXi hosts must be connected to the storage array via iSCSI (initiators configured) or Fibre Channel</li>
|
||
</ul>
|
||
<h2 id="supported-storage-arrays">Supported Storage Arrays</h2>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<table><thead><tr><th>Vendor</th><th>Product</th></tr></thead><tbody><tr><td>Pure Storage</td><td>FlashArray</td></tr><tr><td>NetApp</td><td>ONTAP</td></tr></tbody></table>
|
||
<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>Additional storage vendors may be added in future releases. The storage SDK is designed to be extensible.</p></div></aside>
|
||
<h2 id="prerequisites">Prerequisites</h2>
|
||
<p>Before using Storage-Accelerated Copy, ensure the following prerequisites are met:</p>
|
||
<h3 id="1-storage-array-configuration">1. Storage Array Configuration</h3>
|
||
<ul>
|
||
<li>Storage array must be accessible from both VMware ESXi hosts and PCD compute nodes</li>
|
||
<li>VMware datastores must be VMFS volumes backed by LUNs on the supported storage array</li>
|
||
<li>PCD Cinder must be configured with a backend driver for the same storage array</li>
|
||
<li>Cinder volume types must be created and mapped to the storage array backend</li>
|
||
</ul>
|
||
<h3 id="2-esxi-ssh-access">2. ESXi SSH Access</h3>
|
||
<p>Storage-Accelerated Copy requires SSH access to ESXi hosts to execute <code dir="auto">vmkfstools</code> commands. Follow these steps to set up SSH access:</p>
|
||
<h4 id="step-1-enable-ssh-on-esxi-hosts">Step 1: Enable SSH on ESXi Hosts</h4>
|
||
<p><strong>Option A: Using vSphere Client (GUI)</strong></p>
|
||
<ol>
|
||
<li>Log in to vSphere Client</li>
|
||
<li>Navigate to the ESXi host</li>
|
||
<li>Click on the <strong>Configure</strong> tab</li>
|
||
<li>Under <strong>System</strong>, select <strong>Services</strong></li>
|
||
<li>Find <strong>SSH</strong> in the list of services</li>
|
||
<li>Right-click on <strong>SSH</strong> and select <strong>Start</strong></li>
|
||
<li>(Optional) Right-click again and select <strong>Policy</strong> → <strong>Start and stop with host</strong> to enable SSH automatically on boot</li>
|
||
</ol>
|
||
<p><strong>Option B: Using ESXi Host Client (Direct)</strong></p>
|
||
<ol>
|
||
<li>Log in to the ESXi host directly via web browser: <code dir="auto">https://<esxi-host-ip></code></li>
|
||
<li>Navigate to <strong>Host</strong> → <strong>Actions</strong> → <strong>Services</strong> → <strong>Enable Secure Shell (SSH)</strong></li>
|
||
</ol>
|
||
<p><strong>Option C: Using ESXi Shell (Console)</strong></p>
|
||
<ol>
|
||
<li>Access the ESXi host console (physical or via iLO/iDRAC)</li>
|
||
<li>Press <code dir="auto">F2</code> to customize system/view logs</li>
|
||
<li>Log in with root credentials</li>
|
||
<li>Navigate to <strong>Troubleshooting Options</strong></li>
|
||
<li>Select <strong>Enable SSH</strong></li>
|
||
<li>Press <code dir="auto">Enter</code> to confirm</li>
|
||
</ol>
|
||
<h4 id="step-2-generate-ssh-key-pair">Step 2: Generate SSH Key Pair</h4>
|
||
<p>On your workstation or the vJailbreak VM, generate an SSH key pair:</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:#919F9F;--1:#5F636F"># Generate RSA key pair (recommended for ESXi compatibility)</span></div></div><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">~/.ssh/esxi_migration_key</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#82AAFF;--1:#3B61B0">-C</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#ECC48D;--1:#984E4D">vjailbreak-migration</span><span style="--0:#D9F5DD;--1:#111111">"</span></div></div><div class="ec-line"><div class="code">
|
||
</div></div><div class="ec-line"><div class="code"><span style="--0:#919F9F;--1:#5F636F"># When prompted:</span></div></div><div class="ec-line"><div class="code"><span style="--0:#919F9F;--1:#5F636F"># - Enter passphrase: Leave empty (press Enter) for passwordless authentication</span></div></div><div class="ec-line"><div class="code"><span style="--0:#919F9F;--1:#5F636F"># - Confirm passphrase: Press Enter again</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 ~/.ssh/esxi_migration_key -C "vjailbreak-migration""><div></div></button></div></figure></div>
|
||
<p>This will create two files:</p>
|
||
<ul>
|
||
<li><code dir="auto">~/.ssh/esxi_migration_key</code> - Private key (keep this secure)</li>
|
||
<li><code dir="auto">~/.ssh/esxi_migration_key.pub</code> - Public key (to be copied to ESXi)</li>
|
||
</ul>
|
||
<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><strong>Use RSA keys, not Ed25519</strong></p><p>Ed25519 keys are not reliably accepted for passwordless authentication on ESXi 8.x. Even with the public key correctly installed in <code dir="auto">/etc/ssh/keys-root/authorized_keys</code> (correct permissions, <code dir="auto">PubkeyAuthentication</code> enabled, SSH restarted), the host may keep prompting for a password. Use the 4096-bit RSA key shown above, which works for passwordless SSH across supported ESXi versions.</p></div></aside>
|
||
<h4 id="step-3-copy-public-key-to-esxi-hosts">Step 3: Copy Public Key to ESXi Hosts</h4>
|
||
<p><strong>Option A: Using ssh-copy-id (Easiest)</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:#919F9F;--1:#5F636F"># Copy public key to ESXi host</span></div></div><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">~/.ssh/esxi_migration_key.pub</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">root@<esxi-host-ip></span></div></div><div class="ec-line"><div class="code">
|
||
</div></div><div class="ec-line"><div class="code"><span style="--0:#919F9F;--1:#5F636F"># Enter the root password when prompted</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="ssh-copy-id -i ~/.ssh/esxi_migration_key.pub root@<esxi-host-ip>"><div></div></button></div></figure></div>
|
||
<p><strong>Option B: Manual Copy</strong></p>
|
||
<p>If <code dir="auto">ssh-copy-id</code> is not available:</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"># Display the public key</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:#ECC48D;--1:#3B61B0">~/.ssh/esxi_migration_key.pub</span></div></div><div class="ec-line"><div class="code">
|
||
</div></div><div class="ec-line"><div class="code"><span style="--0:#919F9F;--1:#5F636F"># SSH into the ESXi host</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">ssh</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">root@<esxi-host-ip></span></div></div><div class="ec-line"><div class="code">
|
||
</div></div><div class="ec-line"><div class="code"><span style="--0:#919F9F;--1:#5F636F"># On the ESXi host, add the public key to authorized_keys</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">/etc/ssh/keys-root/authorized_keys</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:#D9F5DD;--1:#111111">'EOF'</span></div></div><div class="ec-line"><div class="code"><span style="--0:#ECC48D;--1:#984E4D">ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC... vjailbreak-migration</span></div></div><div class="ec-line"><div class="code"><span style="--0:#D9F5DD;--1:#111111">EOF</span></div></div><div class="ec-line"><div class="code">
|
||
</div></div><div class="ec-line"><div class="code"><span style="--0:#919F9F;--1:#5F636F"># Set correct permissions</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">/etc/ssh/keys-root/authorized_keys</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="cat ~/.ssh/esxi_migration_key.pubssh root@<esxi-host-ip>cat >> /etc/ssh/keys-root/authorized_keys << 'EOF'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC... vjailbreak-migrationEOFchmod 600 /etc/ssh/keys-root/authorized_keys"><div></div></button></div></figure></div>
|
||
<h4 id="step-4-test-ssh-connection">Step 4: Test SSH Connection</h4>
|
||
<p>Verify passwordless SSH access works:</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"># Test SSH connection (should not prompt for password)</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">ssh</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">~/.ssh/esxi_migration_key</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">root@<esxi-host-ip></span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="ssh -i ~/.ssh/esxi_migration_key root@<esxi-host-ip>"><div></div></button></div></figure></div>
|
||
<p>If successful, you should be able to login to esxi.</p>
|
||
<h4 id="step-5-configure-ssh-key-in-vjailbreak">Step 5: Configure SSH Key in vJailbreak</h4>
|
||
<ol>
|
||
<li>Navigate to <strong>Storage Management</strong> page</li>
|
||
<li>At the top, find the <strong>ESXi SSH Key</strong> section</li>
|
||
<li>Click <strong>Configure</strong></li>
|
||
<li>Get your private key contents:
|
||
<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">cat</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">~/.ssh/esxi_migration_key</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="cat ~/.ssh/esxi_migration_key"><div></div></button></div></figure></div>
|
||
</li>
|
||
<li>Copy the entire output (including <code dir="auto">-----BEGIN OPENSSH PRIVATE KEY-----</code> and <code dir="auto">-----END OPENSSH PRIVATE KEY-----</code>)</li>
|
||
<li>Paste into the UI textarea</li>
|
||
<li>Click <strong>Save</strong></li>
|
||
</ol>
|
||
<h4 id="step-6-repeat-for-all-esxi-hosts">Step 6: Repeat for All ESXi Hosts</h4>
|
||
<p>Repeat Steps 3-4 for <strong>all ESXi hosts</strong> in your vCenter cluster that host VMs you plan to migrate. The same SSH key pair can be used for all hosts.</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"># Example: Copy to multiple hosts</span></div></div><div class="ec-line"><div class="code"><span style="--0:#C792EA;--1:#8844AE">for</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#C5E478;--1:#3B61B0">host</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#C792EA;--1:#8844AE">in</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">esxi-host1.example.com</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">esxi-host2.example.com</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">esxi-host3.example.com</span><span style="--0:#D6DEEB;--1:#403F53">; </span><span style="--0:#C792EA;--1:#8844AE">do</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><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">Configuring </span><span style="--0:#C5E478;--1:#3B61B0">$host</span><span style="--0:#ECC48D;--1:#984E4D">...</span><span style="--0:#D9F5DD;--1:#111111">"</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><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">~/.ssh/esxi_migration_key.pub</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">root@</span><span style="--0:#C5E478;--1:#3B61B0">$host</span></div></div><div class="ec-line"><div class="code"><span style="--0:#C792EA;--1:#8844AE">done</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="for host in esxi-host1.example.com esxi-host2.example.com esxi-host3.example.com; do echo "Configuring $host..." ssh-copy-id -i ~/.ssh/esxi_migration_key.pub root@$hostdone"><div></div></button></div></figure></div>
|
||
<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><strong>Security Best Practices:</strong></p><ul>
|
||
<li>Use a dedicated SSH key pair for vJailbreak migrations (don’t reuse existing keys)</li>
|
||
<li>Store the private key securely and restrict access</li>
|
||
<li>Consider disabling SSH on ESXi hosts after migrations are complete</li>
|
||
<li>Use SSH key passphrases in production environments (requires additional configuration)</li>
|
||
<li>Regularly rotate SSH keys</li>
|
||
<li>Monitor SSH access logs on ESXi hosts</li>
|
||
</ul></div></aside>
|
||
<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>Troubleshooting SSH Issues:</strong></p><p>If SSH connection fails:</p><ol>
|
||
<li>Verify SSH service is running: <code dir="auto">ssh root@<esxi-host> "/etc/init.d/ssh status"</code></li>
|
||
<li>Check firewall rules: ESXi firewall must allow SSH (port 22)</li>
|
||
<li>Verify authorized_keys permissions: Should be <code dir="auto">600</code> or <code dir="auto">400</code></li>
|
||
<li>Check ESXi logs: <code dir="auto">/var/log/auth.log</code> for authentication errors</li>
|
||
<li>Ensure the private key format is correct (OpenSSH format, not PuTTY format)</li>
|
||
</ol></div></aside>
|
||
<h3 id="3-network-connectivity">3. Network Connectivity</h3>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<table><thead><tr><th>Source</th><th>Destination</th><th>Port</th><th>Protocol</th><th>Purpose</th></tr></thead><tbody><tr><td>vJailbreak</td><td>ESXi hosts</td><td>22</td><td>TCP</td><td>SSH for vmkfstools commands</td></tr><tr><td>ESXi hosts</td><td>Storage array</td><td>3260</td><td>TCP</td><td>iSCSI (if using iSCSI)</td></tr><tr><td>ESXi hosts</td><td>Storage array</td><td>Various</td><td>FC</td><td>Fibre Channel (if using FC)</td></tr><tr><td>vJailbreak</td><td>Storage array</td><td>443</td><td>TCP</td><td>Storage array API</td></tr></tbody></table>
|
||
<h2 id="configuration">Configuration</h2>
|
||
<h3 id="understanding-auto-discovery">Understanding Auto-Discovery</h3>
|
||
<p>When you add PCD credentials to vJailbreak, the system automatically discovers all storage volume backends configured in your PCD environment. For each detected storage backend (NetApp, Pure Storage, etc.), vJailbreak creates a placeholder ArrayCreds entry with status “Auto-discovered” and credentials marked as “Pending”.</p>
|
||
<h4 id="how-auto-discovery-works">How Auto-Discovery Works</h4>
|
||
<ol>
|
||
<li>
|
||
<p><strong>PCD Configuration</strong>: In PCD, you configure multiple storage volume backends under “Persistent Storage Connectivity” (Cluster Blueprint → Storage). Each volume backend represents a storage array with its driver type (NetApp Data ONTAP, Pure Storage iSCSI, NFS, etc.).</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>Backend Detection</strong>: When PCD credentials are added to vJailbreak, the system queries the Cinder API to discover all configured volume backends and their properties:</p>
|
||
<ul>
|
||
<li>Volume Type (e.g., <code dir="auto">netapp</code>, <code dir="auto">vt-pure-iscsi</code>)</li>
|
||
<li>Backend Name (e.g., <code dir="auto">netapp</code>, <code dir="auto">pure-iscsi-1</code>)</li>
|
||
<li>Driver Type (e.g., <code dir="auto">NetApp Data ONTAP</code>, <code dir="auto">Pure Storage iSCSI</code>)</li>
|
||
<li>Cinder Host string</li>
|
||
</ul>
|
||
</li>
|
||
<li>
|
||
<p><strong>Placeholder Creation</strong>: For each discovered backend, vJailbreak automatically creates an ArrayCreds resource with:</p>
|
||
<ul>
|
||
<li><strong>Name</strong>: Derived from the volume type and backend name (e.g., <code dir="auto">netapp-netapp</code>, <code dir="auto">vt-pure-iscsi-pure-iscsi-1</code>)</li>
|
||
<li><strong>Vendor</strong>: Automatically identified from the driver type</li>
|
||
<li><strong>Source</strong>: Marked as “Auto-discovered”</li>
|
||
<li><strong>Credentials</strong>: Status shows “Pending” (requires user input)</li>
|
||
<li><strong>PCD Mapping</strong>: Pre-populated with volume type, backend name, and Cinder host</li>
|
||
</ul>
|
||
</li>
|
||
<li>
|
||
<p><strong>User Completion</strong>: Users then update these auto-discovered entries with the actual storage array credentials (hostname, username, password) to enable Storage Accelerated Copy.</p>
|
||
</li>
|
||
</ol>
|
||
<h4 id="storage-management-page">Storage Management Page</h4>
|
||
<p>The Storage Management page displays all auto-discovered storage backends:</p>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<table><thead><tr><th>Column</th><th>Description</th></tr></thead><tbody><tr><td><strong>Name</strong></td><td>Auto-generated name based on volume type and backend</td></tr><tr><td><strong>Vendor</strong></td><td>Storage array vendor (NetApp Storage, Pure Storage, N/A)</td></tr><tr><td><strong>Volume Type</strong></td><td>Cinder volume type name</td></tr><tr><td><strong>Backend Name</strong></td><td>Cinder backend name from configuration</td></tr><tr><td><strong>Source</strong></td><td>”Auto-discovered” for automatically detected backends</td></tr><tr><td><strong>Credentials</strong></td><td>”Pending” until user provides array credentials</td></tr><tr><td><strong>Actions</strong></td><td>Edit (to add credentials) and Delete</td></tr></tbody></table>
|
||
<p><img alt="Storage Management Page" loading="lazy" decoding="async" fetchpriority="auto" width="2880" height="1626" src="/vjailbreak/_astro/storagemanagementpage.BaaeeGQ5_D0Axi.webp" ></p>
|
||
<h4 id="example-pcd-with-multiple-storage-backends">Example: PCD with Multiple Storage Backends</h4>
|
||
<p>In PCD, storage backends are configured in the <strong>Cluster Blueprint</strong> under <strong>Persistent Storage Connectivity</strong>. Each volume backend can have multiple configurations, and each configuration represents a connection to a storage array.</p>
|
||
<p><img alt="PCD Cluster Blueprint - Storage Configuration" loading="lazy" decoding="async" fetchpriority="auto" width="2880" height="1628" src="/vjailbreak/_astro/clusterblueprint.BBS-dMpm_ZQoSUN.webp" ></p>
|
||
<p>In the example above, PCD has three volume backends configured:</p>
|
||
<ol>
|
||
<li><strong>nfs</strong> - NFS backend with driver “NFS”</li>
|
||
<li><strong>netapp</strong> - NetApp backend with driver “NetApp Data ONTAP”</li>
|
||
<li><strong>vt-pure-iscsi</strong> - Pure Storage backend with driver “Pure Storage iSCSI”</li>
|
||
</ol>
|
||
<p>Each backend can have multiple configurations (shown as “Volume Backend Configurations” with the + button). For example:</p>
|
||
<ul>
|
||
<li>The <code dir="auto">nfs</code> volume backend might have one configuration named <code dir="auto">nfs-backend</code></li>
|
||
<li>The <code dir="auto">netapp</code> volume backend might have one configuration named <code dir="auto">netapp</code></li>
|
||
<li>The <code dir="auto">vt-pure-iscsi</code> volume backend might have multiple configurations: <code dir="auto">pure-iscsi-1</code>, <code dir="auto">pure-iscsi-2</code>, etc.</li>
|
||
</ul>
|
||
<p><strong>Important</strong>: For each volume type, you can configure multiple storage arrays. This is useful when you have multiple Pure Storage or NetApp arrays in your environment, each serving different datastores.</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">Storage Volume Backend Configuration (Example):</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">├── nfs (Volume Type)</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ └── nfs-backend (Backend Configuration)</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ ├── Driver: NFS</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ └── Backend Name: nfs-backend</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">├── netapp (Volume Type)</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ └── netapp (Backend Configuration)</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ ├── Driver: NetApp Data ONTAP</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ └── Backend Name: netapp</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">└── vt-pure-iscsi (Volume Type)</span></div></div><div class="ec-line"><div class="code"><span class="indent"><span style="--0:#d6deeb;--1:#403f53"> </span></span><span style="--0:#d6deeb;--1:#403f53">├── pure-iscsi-1 (Backend Configuration #1)</span></div></div><div class="ec-line"><div class="code"><span class="indent"><span style="--0:#d6deeb;--1:#403f53"> </span></span><span style="--0:#d6deeb;--1:#403f53">│ ├── Driver: Pure Storage iSCSI</span></div></div><div class="ec-line"><div class="code"><span class="indent"><span style="--0:#d6deeb;--1:#403f53"> </span></span><span style="--0:#d6deeb;--1:#403f53">│ └── Backend Name: pure-iscsi-1</span></div></div><div class="ec-line"><div class="code"><span class="indent"><span style="--0:#d6deeb;--1:#403f53"> </span></span><span style="--0:#d6deeb;--1:#403f53">└── pure-iscsi-2 (Backend Configuration #2)</span></div></div><div class="ec-line"><div class="code"><span class="indent"><span style="--0:#d6deeb;--1:#403f53"> </span></span><span style="--0:#d6deeb;--1:#403f53">├── Driver: Pure Storage iSCSI</span></div></div><div class="ec-line"><div class="code"><span class="indent"><span style="--0:#d6deeb;--1:#403f53"> </span></span><span style="--0:#d6deeb;--1:#403f53">└── Backend Name: pure-iscsi-2</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="Storage Volume Backend Configuration (Example):├── nfs (Volume Type)│ └── nfs-backend (Backend Configuration)│ ├── Driver: NFS│ └── Backend Name: nfs-backend├── netapp (Volume Type)│ └── netapp (Backend Configuration)│ ├── Driver: NetApp Data ONTAP│ └── Backend Name: netapp└── vt-pure-iscsi (Volume Type) ├── pure-iscsi-1 (Backend Configuration #1) │ ├── Driver: Pure Storage iSCSI │ └── Backend Name: pure-iscsi-1 └── pure-iscsi-2 (Backend Configuration #2) ├── Driver: Pure Storage iSCSI └── Backend Name: pure-iscsi-2"><div></div></button></div></figure></div>
|
||
<p>After adding PCD credentials to vJailbreak, the system automatically creates ArrayCreds placeholders for each backend configuration:</p>
|
||
<ul>
|
||
<li><code dir="auto">nfs-nfs-backend</code> (Vendor: N/A, Credentials: Pending) - <em>Cannot be used for Storage Accelerated Copy</em></li>
|
||
<li><code dir="auto">netapp-netapp</code> (Vendor: NetApp Storage, Credentials: Pending)</li>
|
||
<li><code dir="auto">vt-pure-iscsi-pure-iscsi-1</code> (Vendor: Pure Storage, Credentials: Pending)</li>
|
||
<li><code dir="auto">vt-pure-iscsi-pure-iscsi-2</code> (Vendor: Pure Storage, Credentials: Pending)</li>
|
||
</ul>
|
||
<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>Only storage backends with supported vendors (Pure Storage and NetApp) can be configured for array-level XCOPY operations. NFS and other backends are still auto-discovered, but cannot be used for Storage Accelerated Copy. Support for additional storage vendors will be added in future releases.</p></div></aside>
|
||
<h2 id="using-the-ui">Using the UI</h2>
|
||
<p>Storage-Accelerated Copy can be configured entirely through the vJailbreak UI with automatic backend discovery:</p>
|
||
<h3 id="step-1-add-pcd-credentials">Step 1: Add PCD Credentials</h3>
|
||
<p>If not already done:</p>
|
||
<ol>
|
||
<li>Navigate to <strong>Credentials</strong> → <strong>PCD/OpenStack</strong></li>
|
||
<li>Add your PCD credentials</li>
|
||
<li>vJailbreak will automatically discover all storage volume backends configured in PCD</li>
|
||
</ol>
|
||
<h3 id="step-2-configure-storage-array-credentials">Step 2: Configure Storage Array Credentials</h3>
|
||
<ol>
|
||
<li>
|
||
<p>Navigate to <strong>Storage Management</strong> (Beta feature)</p>
|
||
</li>
|
||
<li>
|
||
<p>You’ll see auto-discovered entries for each PCD storage backend:</p>
|
||
<ul>
|
||
<li><strong>Name</strong>: Auto-generated (e.g., <code dir="auto">netapp-netapp</code>, <code dir="auto">vt-pure-iscsi-pure-iscsi-1</code>)</li>
|
||
<li><strong>Vendor</strong>: Auto-identified from driver type</li>
|
||
<li><strong>Volume Type</strong>: Pre-populated from PCD configuration</li>
|
||
<li><strong>Backend Name</strong>: Pre-populated from PCD configuration</li>
|
||
<li><strong>Source</strong>: “Auto-discovered”</li>
|
||
<li><strong>Credentials</strong>: “Pending” (requires your input)</li>
|
||
</ul>
|
||
</li>
|
||
<li>
|
||
<p>Click the <strong>Edit</strong> icon for a storage array entry</p>
|
||
</li>
|
||
</ol>
|
||
<p><img alt="Storage Array Credentials Edit" loading="lazy" decoding="async" fetchpriority="auto" width="1230" height="1628" src="/vjailbreak/_astro/credsedit.DmnE1SVA_1CMw0B.webp" ></p>
|
||
<ol start="4">
|
||
<li>Fill in the storage array credentials:
|
||
<ul>
|
||
<li><strong>Hostname/IP</strong>: Storage array management IP address</li>
|
||
<li><strong>Username</strong>: Array administrator username</li>
|
||
<li><strong>Password</strong>: Array administrator password</li>
|
||
<li><strong>Skip SSL Verification</strong>: Enable for testing environments (disable in production)</li>
|
||
</ul>
|
||
</li>
|
||
<li>Click <strong>Save</strong></li>
|
||
<li>The system will:
|
||
<ul>
|
||
<li>Validate the credentials</li>
|
||
<li>Connect to the storage array</li>
|
||
<li>Auto-discover VMware datastores backed by this array</li>
|
||
<li>Update the status to show validation results</li>
|
||
</ul>
|
||
</li>
|
||
</ol>
|
||
<h3 id="step-3-configure-esxi-ssh-key">Step 3: Configure ESXi SSH Key</h3>
|
||
<ol>
|
||
<li>At the top of the Storage Management page, find the <strong>ESXi SSH Key</strong> section</li>
|
||
<li>Click <strong>Configure</strong> if not already configured</li>
|
||
<li>Paste your ESXi SSH private key (see <a href="#2-esxi-ssh-access">ESXi SSH Access</a> section for key generation steps)</li>
|
||
<li>Click <strong>Save</strong></li>
|
||
</ol>
|
||
<h3 id="step-4-create-migration-with-storage-accelerated-copy">Step 4: Create Migration with Storage-Accelerated Copy</h3>
|
||
<ol>
|
||
<li>When creating a migration plan, select <strong>Storage-Accelerated Copy</strong> as the storage copy method</li>
|
||
</ol>
|
||
<p><img alt="Storage Accelerated Copy" loading="lazy" decoding="async" fetchpriority="auto" width="2560" height="1005" src="/vjailbreak/_astro/trigger-mig.B25Si21e_25Tmjy.webp" ></p>
|
||
<ol start="2">
|
||
<li>The UI will automatically map datastores to ArrayCreds if everything is configured correctly</li>
|
||
<li>Start the migration - it will use array-level XCOPY for data transfer</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><strong>Auto-Discovery Benefits:</strong></p><ul>
|
||
<li>No manual typing of volume types, backend names, or Cinder host strings</li>
|
||
<li>Automatic vendor identification from driver type</li>
|
||
<li>Pre-populated PCD mapping configuration</li>
|
||
<li>Automatic datastore-to-array mapping</li>
|
||
<li>Reduced configuration errors</li>
|
||
</ul></div></aside>
|
||
<h2 id="migration-workflow">Migration Workflow</h2>
|
||
<p>When Storage-Accelerated Copy is enabled, 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">│ Storage-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">│ ├── Storage provider credentials │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ ├── ESXi SSH key │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ └── Array connectivity │</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. Connect to ESXi Host via SSH │</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 (required for XCOPY) │</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 Disk: │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ ├── Create target volume on storage array │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ ├── Import volume to Cinder (manage existing) │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ ├── Create/update initiator group with ESXi IQN │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ ├── Map volume to ESXi host │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ ├── Rescan ESXi storage adapters │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ ├── Wait for target device to appear │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ ├── Execute vmkfstools XCOPY clone │</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">│ └── Monitor clone progress │</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. Convert Volumes (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">│ 6. Create Target VM in PCD │</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="┌─────────────────────────────────────────────────────────────────┐│ Storage-Accelerated Copy Flow │├─────────────────────────────────────────────────────────────────┤│ ││ 1. Validate Prerequisites ││ ├── Storage provider credentials ││ ├── ESXi SSH key ││ └── Array connectivity ││ ││ 2. Connect to ESXi Host via SSH ││ ││ 3. Power Off Source VM (required for XCOPY) ││ ││ 4. For Each Disk: ││ ├── Create target volume on storage array ││ ├── Import volume to Cinder (manage existing) ││ ├── Create/update initiator group with ESXi IQN ││ ├── Map volume to ESXi host ││ ├── Rescan ESXi storage adapters ││ ├── Wait for target device to appear ││ ├── Execute vmkfstools XCOPY clone ││ └── Monitor clone progress ││ ││ 5. Convert Volumes (same as normal migration) ││ ││ 6. Create Target VM in PCD ││ │└─────────────────────────────────────────────────────────────────┘"><div></div></button></div></figure></div>
|
||
<h2 id="migration-phases">Migration Phases</h2>
|
||
<p>When using Storage-Accelerated Copy, you’ll see these additional migration phases:</p>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<table><thead><tr><th>Phase</th><th>Description</th></tr></thead><tbody><tr><td><code dir="auto">ConnectingToESXi</code></td><td>Establishing SSH connection to ESXi host</td></tr><tr><td><code dir="auto">CreatingInitiatorGroup</code></td><td>Creating/updating initiator group on storage array</td></tr><tr><td><code dir="auto">CreatingVolume</code></td><td>Creating target volume on storage array</td></tr><tr><td><code dir="auto">ImportingToCinder</code></td><td>Importing volume to PCD Cinder</td></tr><tr><td><code dir="auto">MappingVolume</code></td><td>Mapping volume to ESXi host</td></tr><tr><td><code dir="auto">RescanningStorage</code></td><td>Rescanning ESXi storage adapters</td></tr><tr><td><code dir="auto">StorageAcceleratedCopyInProgress</code></td><td>XCOPY clone operation in progress</td></tr></tbody></table>
|
||
<h2 id="limitations">Limitations</h2>
|
||
<ul>
|
||
<li><strong>Cold migration only</strong>: VMs must be powered off during the copy operation (no live migration support)</li>
|
||
<li><strong>Shared storage required</strong>: Source and destination must be on the same storage array</li>
|
||
<li><strong>VMFS datastores only</strong>: NFS datastores are not supported</li>
|
||
<li><strong>No CBT support</strong>: Change Block Tracking is not used; full disk copy is performed</li>
|
||
<li><strong>Single array per datastore</strong>: Each datastore can only be mapped to one ArrayCreds</li>
|
||
</ul>
|
||
<h2 id="troubleshooting">Troubleshooting</h2>
|
||
<h3 id="common-issues">Common Issues</h3>
|
||
<h4 id="esxi-ssh-connection-failed">ESXi SSH Connection Failed</h4>
|
||
<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 ESXi via SSH</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="Error: failed to connect to ESXi via SSH"><div></div></button></div></figure></div>
|
||
<p><strong>Resolution</strong>:</p>
|
||
<ul>
|
||
<li>Verify SSH is enabled on the ESXi host</li>
|
||
<li>Check that the SSH private key is correctly stored in the <code dir="auto">esxi-ssh-key</code> secret</li>
|
||
<li>Ensure network connectivity between vJailbreak and ESXi host on port 22</li>
|
||
</ul>
|
||
<h4 id="storage-array-connection-failed">Storage Array Connection Failed</h4>
|
||
<p><strong>Symptoms:</strong></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">Error: failed to connect to storage array: authentication failed</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="Error: failed to connect to storage array: authentication failed"><div></div></button></div></figure></div>
|
||
<p><strong>Solutions:</strong></p>
|
||
<ol>
|
||
<li>
|
||
<p>Verify credentials in the Storage Management UI:</p>
|
||
<ul>
|
||
<li>Navigate to <strong>Storage Management</strong></li>
|
||
<li>Check the array credentials are correct</li>
|
||
<li>Re-enter credentials if needed</li>
|
||
</ul>
|
||
</li>
|
||
<li>
|
||
<p>Test connectivity from vJailbreak to storage array:</p>
|
||
<ul>
|
||
<li>Ensure network connectivity on port 443 (HTTPS)</li>
|
||
<li>Check firewall rules between vJailbreak and storage array</li>
|
||
<li>Verify API access is enabled on the array</li>
|
||
</ul>
|
||
</li>
|
||
<li>
|
||
<p>Check array-specific requirements:</p>
|
||
<ul>
|
||
<li><strong>Pure Storage</strong>: Ensure API token or username/password has sufficient permissions</li>
|
||
<li><strong>NetApp</strong>: Verify ONTAP management interface is accessible</li>
|
||
</ul>
|
||
</li>
|
||
</ol>
|
||
<h4 id="esxi-device-not-found">ESXi Device Not Found</h4>
|
||
<p><strong>Symptoms:</strong></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">Error: timeout waiting for device naa.624a9370... to appear on ESXi host</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="Error: timeout waiting for device naa.624a9370... to appear on ESXi host"><div></div></button></div></figure></div>
|
||
<p><strong>Solutions:</strong></p>
|
||
<ol>
|
||
<li>
|
||
<p>Verify iSCSI initiator is configured on ESXi:</p>
|
||
<ul>
|
||
<li>Log into ESXi via SSH</li>
|
||
<li>Run: <code dir="auto">esxcli iscsi adapter list</code></li>
|
||
<li>Ensure iSCSI software adapter is enabled</li>
|
||
</ul>
|
||
</li>
|
||
<li>
|
||
<p>Check network connectivity from ESXi to storage array:</p>
|
||
<ul>
|
||
<li>Verify ESXi can reach storage array management IP</li>
|
||
<li>Check iSCSI network configuration</li>
|
||
<li>Verify VLAN/network segmentation allows iSCSI traffic</li>
|
||
</ul>
|
||
</li>
|
||
<li>
|
||
<p>Manually rescan storage:</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">esxcli</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">storage</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">core</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">adapter</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">rescan</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#82AAFF;--1:#3B61B0">--all</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">esxcli</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">storage</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">core</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">device</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">list</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:#82AAFF;--1:#3B61B0">grep</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">naa.624a9370</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="esxcli storage core adapter rescan --allesxcli storage core device list | grep naa.624a9370"><div></div></button></div></figure></div>
|
||
</li>
|
||
<li>
|
||
<p>Verify LUN masking/mapping on the storage array:</p>
|
||
<ul>
|
||
<li>Check initiator group includes ESXi IQN</li>
|
||
<li>Verify volume is mapped to the correct initiator group</li>
|
||
<li>Check for iSCSI authentication issues (CHAP)</li>
|
||
</ul>
|
||
</li>
|
||
</ol>
|
||
<h4 id="cinder-manage-volume-failed">Cinder Manage Volume Failed</h4>
|
||
<p><strong>Symptoms:</strong></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">Error: failed to manage existing volume: volume not found on backend</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="Error: failed to manage existing volume: volume not found on backend"><div></div></button></div></figure></div>
|
||
<p><strong>Solutions:</strong></p>
|
||
<ol>
|
||
<li>
|
||
<p>Verify volume exists on the storage array:</p>
|
||
<ul>
|
||
<li>Check storage array management interface</li>
|
||
<li>Confirm volume was created successfully</li>
|
||
</ul>
|
||
</li>
|
||
<li>
|
||
<p>Check Cinder backend configuration:</p>
|
||
<ul>
|
||
<li>Verify Cinder services are running in PCD</li>
|
||
<li>Ensure volume backend name matches ArrayCreds configuration</li>
|
||
<li>Check that the Cinder host string is correct</li>
|
||
</ul>
|
||
</li>
|
||
<li>
|
||
<p>Ensure volume naming matches backend expectations:</p>
|
||
<ul>
|
||
<li><strong>Pure Storage</strong>: Volume name must match exactly</li>
|
||
<li><strong>NetApp</strong>: Full LUN path must be provided</li>
|
||
</ul>
|
||
</li>
|
||
<li>
|
||
<p>Review Cinder logs for detailed errors:</p>
|
||
<ul>
|
||
<li>Check PCD Cinder volume service logs</li>
|
||
<li>Look for backend connection issues</li>
|
||
<li>Verify the <code dir="auto">cinderHost</code> field in ArrayCreds matches a running Cinder service</li>
|
||
</ul>
|
||
</li>
|
||
</ol>
|
||
<h4 id="vmkfstools-clone-failed">vmkfstools Clone Failed</h4>
|
||
<p><strong>Symptoms:</strong></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">Error: vmkfstools clone failed: Unable to create raw disk</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="Error: vmkfstools clone failed: Unable to create raw disk"><div></div></button></div></figure></div>
|
||
<p><strong>Solutions:</strong></p>
|
||
<ol>
|
||
<li>
|
||
<p>Check ESXi SSH connectivity and authentication:</p>
|
||
<ul>
|
||
<li>Verify SSH key is configured correctly in vJailbreak</li>
|
||
<li>Test SSH connection manually</li>
|
||
<li>Check ESXi SSH service is running</li>
|
||
</ul>
|
||
</li>
|
||
<li>
|
||
<p>Verify vmkfstools is available:</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">vmkfstools</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#82AAFF;--1:#3B61B0">--version</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="vmkfstools --version"><div></div></button></div></figure></div>
|
||
</li>
|
||
<li>
|
||
<p>Check source VMDK accessibility:</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">ls</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#82AAFF;--1:#3B61B0">-lh</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">/vmfs/volumes/<datastore>/<vm-name>/<disk>.vmdk</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="ls -lh /vmfs/volumes/<datastore>/<vm-name>/<disk>.vmdk"><div></div></button></div></figure></div>
|
||
</li>
|
||
<li>
|
||
<p>Verify target device is visible:</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">ls</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#82AAFF;--1:#3B61B0">-lh</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">/vmfs/devices/disks/naa.</span><span style="--0:#7FDBCA;--1:#096E72">*</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="ls -lh /vmfs/devices/disks/naa.*"><div></div></button></div></figure></div>
|
||
</li>
|
||
<li>
|
||
<p>Check ESXi host logs:</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">tail</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">/var/log/vmkernel.log</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="tail -f /var/log/vmkernel.log"><div></div></button></div></figure></div>
|
||
</li>
|
||
<li>
|
||
<p>Ensure sufficient free space on ESXi:</p>
|
||
<ul>
|
||
<li>RDM descriptor files require space on the datastore</li>
|
||
<li>Check datastore free space</li>
|
||
</ul>
|
||
</li>
|
||
</ol>
|
||
<h4 id="clone-progress-stalled">Clone Progress Stalled</h4>
|
||
<p><strong>Symptoms:</strong></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">Error: clone progress stalled - no update for 5 minutes</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="Error: clone progress stalled - no update for 5 minutes"><div></div></button></div></figure></div>
|
||
<p><strong>Solutions:</strong></p>
|
||
<ol>
|
||
<li>
|
||
<p>Check storage array performance and load:</p>
|
||
<ul>
|
||
<li>Review array management interface for performance metrics</li>
|
||
<li>Check for high I/O load or resource contention</li>
|
||
<li>Verify no array-level issues or alerts</li>
|
||
</ul>
|
||
</li>
|
||
<li>
|
||
<p>Verify ESXi storage adapter health:</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">esxcli</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">storage</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">core</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">adapter</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">list</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="esxcli storage core adapter list"><div></div></button></div></figure></div>
|
||
</li>
|
||
<li>
|
||
<p>Review vmkfstools process on ESXi:</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">ps</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:#82AAFF;--1:#3B61B0">grep</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">vmkfstools</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">ps</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#82AAFF;--1:#3B61B0">-c</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:#82AAFF;--1:#3B61B0">grep</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">vmkfstools</span></div></div></code></pre><div class="copy"><button title="Copy to clipboard" data-copied="Copied!" data-code="ps | grep vmkfstoolsps -c | grep vmkfstools"><div></div></button></div></figure></div>
|
||
<ul>
|
||
<li>Check if process is still running</li>
|
||
<li>Look for any error indicators</li>
|
||
</ul>
|
||
</li>
|
||
<li>
|
||
<p>Check for network issues:</p>
|
||
<ul>
|
||
<li>Verify stable connectivity between ESXi and storage array</li>
|
||
<li>Check for packet loss or latency issues</li>
|
||
</ul>
|
||
</li>
|
||
<li>
|
||
<p>Consider increasing timeout settings:</p>
|
||
<ul>
|
||
<li>For very large disks, the operation may take longer than expected</li>
|
||
<li>Monitor array performance to ensure copy is progressing</li>
|
||
</ul>
|
||
</li>
|
||
</ol>
|
||
<h3 id="checking-arraycreds-status">Checking ArrayCreds Status</h3>
|
||
<p>You can check the status of your storage array credentials in the UI:</p>
|
||
<ol>
|
||
<li>Navigate to <strong>Storage Management</strong></li>
|
||
<li>Check the <strong>Credentials</strong> column - it should show “Valid” after successful configuration</li>
|
||
<li>The system will display discovered datastores for each array</li>
|
||
<li>Any validation errors will be shown in the status column</li>
|
||
</ol>
|
||
<h2 id="best-practices">Best Practices</h2>
|
||
<ol>
|
||
<li><strong>Validate prerequisites first</strong>: Ensure all connectivity and credentials are working before starting migrations</li>
|
||
<li><strong>Schedule during maintenance windows</strong>: VMs must be powered off during copy</li>
|
||
<li><strong>Monitor array performance</strong>: Large migrations can impact array performance</li>
|
||
<li><strong>Use for large VMs</strong>: The setup overhead makes this most beneficial for VMs with large disks</li>
|
||
<li><strong>Batch similar VMs</strong>: Group VMs on the same datastore for efficient migrations</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/storage-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/cluster-conversion/" 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">Cluster Conversion</span> </span> </a> <a href="/vjailbreak/concepts/vjailbreak-accelerated-copy/" 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">vJailbreak Accelerated Copy</span> </span> </a> </div> </footer> </div> </div> </main> </div> </div> </div> </div> </body></html> |