Broadcom-нан кейін VMware-ден кету: тексерілген көшу жоспары

Broadcom-нан кейін VMware-ден кету: тексерілген көшу жоспары

Broadcom-нан кейін VMware-ден кету: тексерілген көшу жоспары

Қысқа жауап (2026-11-03 тексерілді): VMware-ді сатып алғаннан бері Broadcom мерзімсіз лицензияларды сатуды тоқтатты, өнімдер тізімін екі жазылым пакетіне біріктірді, Еуропадағы бұрынғы бұлттық серіктестер бағдарламасын жапты, ал осы күзде VDDK-ның, яғни көшу құралдарының көбі VMware дискілерін оқу үшін пайдаланатын диск кітапханасының ашық жүктеп алуын алып тастады. Бүгін The Register осы кітапхананың ашық бастапқы кодты, тек оқуға арналған баламасы туралы хабарлады. Дегенмен кетудің барлық жолына VDDK қажет емес: OVA экспорты мен дискіні түрлендіру VMware кодын мүлдем пайдаланбайды. Төменде: күні көрсетілген өзгерістер, EU командасы үшін шынайы бағыттар, көшу қадам-қадаммен және нақты VMware форматындағы экспортта біз іске қосқан түрлендіргіш.

Дереккөз. "Architect creates open-source replacement for VM migration tool VMware has hidden" (Simon Sharwood, The Register сайтындағы мақала, 2026-11-03). Басқа деректердің сілтемелері олар кездескен жерде берілген. Сіздің келісімшартыңыз ашық шарттардан өзгеше болуы мүмкін, сондықтан лицензия егжей-тегжейін өз дилеріңізбен нақтылаңыз.

Broadcom не өзгертті: күндерімен

Күні Өзгеріс Дереккөз
2023-12-11 Мерзімсіз лицензиялар мен қолдауды ұзартуды сату тоқтатылды; ұсыныс VMware Cloud Foundation (VCF) және vSphere Foundation (VVF) жазылымдарына дейін қысқартылды Broadcom жаңалығы, Krish Prasad
2025-03-28 Дистрибьютор Arrow серіктестерге 2025-04-10 бастап ең аз тапсырыс әр өнім желісіне 16 ядродан 72 ядроға дейін өсетінін хабарлады The Register мақаласы
2026-01-26 EEA аумағындағы бұлттық провайдерлердің (VCSP) келісімшарттары ұзартылмады; ашық мәмілелер 2026-03-31 дейін жабылуы тиіс; одан кейін бағдарлама тек шақыру арқылы The Register мақаласы, 2026-01-31
2026 жылғы тамыз-қыркүйек VDDK ашық жүктеп алудан алынды: "The VDDK is not a customer entitlement" (VDDK клиенттің құқығына кірмейді), қолжетімділік таңдаулы TAP серіктестері арқылы TechTarget мақаласы, 2026-09-09
2026-11-03 Andrija Panić жасаған OpenVDDK: Apache лицензиясымен, libvixDiskLib.so.8.0.3 орнына қойылатын, тек оқуға арналған, "contains no VMware code" (құрамында VMware коды жоқ) кітапхана The Register, 2026-11-03

Екі ескерту. 72 ядролық ең аз көлемді дистрибьютор хабарлаған, біз оны Broadcom бетінен таба алмадық: Broadcom-ның ядроларды санау туралы мақаласында (KB 313548, 2026-11-03 тексерілді) "You must license a minimum of 16 physical cores for each CPU" (әр CPU үшін кемінде 16 физикалық ядроға лицензия алу керек) деп жазылған, ал кейбір дилерлер 72 ядролық ең аз тапсырыс қайта алынып тасталғанын айтады. Коммерциялық ұсыныстағы ядролар санын жазбаша сұраңыз. Сондай-ақ EU тарабындағы мәселе әлі шешілмеген: бұлттық салалық топ CISPE 2025 жылғы шілдеде EU General Court-тан Комиссияның бірігуді мақұлдауын жоюды сұрады (T-503/25 ісі); біз әзірге шешім таппадық.

VDDK неге маңызды және қай жолдар оны айналып өтеді

VDDK кітапханасы libvixDiskLib құралға әлі vSphere-де тұрған ВМ-дердің дискілерін оқуға мүмкіндік береді. The Register оны жүктейтін құралдар қатарында virt-v2v, nbdkit, Forklift / MTV импорттаушыларын, Apache CloudStack және ішкі скрипттерді атайды. Microsoft-тың Windows Admin Center-ге арналған VM Conversion кеңейтімі (vCenter-ден Hyper-V-ге, Change Block Tracking арқылы жылы синхрондаумен) оның құжаттамасында (2026-02-20 жаңартылған) әлі preview деп белгіленген, ал шығарылымы туралы шолу VDDK-ны оның алғышарттары қатарында атайды. OpenVDDK осылардың бәріне арналған жаңа нұсқа, бірақ авторы сынаушылардың есептері "not independently audited customer endorsements" (тәуелсіз тексерілмеген клиенттік ұсынымдар) екенін өзі ескертеді.

VDDK мүлдем қажет емес жолдар, virt-v2v-ның VMware кірісі туралы құжаттамасына сәйкес (2026-11-03 тексерілді): OVA экспорты (-i ova), ВМ файлдары NFS-те немесе SSH арқылы (-i vmx, -it ssh), NFC және кәдімгі vCenter HTTPS жолы, оны құжаттама "the slowest method" (ең баяу әдіс) деп атайды. 2024-03-27 жарияланған Proxmox VE-нің ESXi импорттау шебері дискілерді ESXi API арқылы, өзінің Rust тіліндегі user-space файлдық жүйесімен оқиды және ESXi 6.5-тен 8.0-ге дейінгі нұсқаларда сыналған (Proxmox форумындағы хабарлама).

Қайда көшу керек: бес шынайы бағыт

Бағыт Қашан сәйкес келеді Неге назар аудару керек
Өз жабдығыңыздағы Proxmox VE (KVM) 3+ хост, GUI мен кластерлеуді қалайтын команда Жаңартулар, сақтау жүйесі (ZFS, Ceph) және қолдау сіздің мойныңызда
OpenStack Көп тенант, барлығы API арқылы Пайдалану ауыр; тек үлкен ауқымда ақталады
Hyper-V (Windows Server) Windows басым инфрақұрылым, Datacenter лицензиялары бұрыннан төленген Microsoft құралы алдымен Linux қонақ жүйелерінде Hyper-V драйверлерін талап етеді
Бұлттық серверлер (KVM) Бірнешеден бірнеше ондаған ВМ-ге дейін, гипервизорды өзі басқарғысы келмейді Әр ВМ үшін бөлек импорт, жаңа IP мекенжайлар
Арнайы серверлер + өз гипервизорыңыз Тұрақты жүктеме, бүкіл машинаны қалайсыз Гипервизорды өзіңіз басқарып, жаңартасыз

ВМ-ді бес қадаммен көшіру

  1. Түгендеу және тазалау. Микробағдарламаны (BIOS немесе EFI), диск контроллерін, NIC түрін, статикалық IP-лерді және MAC мекенжайына байланған кез келген лицензияны жазып алыңыз. Бір ағымдағы дискіні экспорттау үшін снапшоттарды жойыңыз немесе біріктіріңіз.
  2. Қонақ жүйені ол әлі VMware-де жұмыс істеп тұрғанда дайындаңыз. Windows: virtio драйверлерін (virtio-win) қазір орнатыңыз; оларсыз virtio дискісіне көшірілген Windows қонақ жүйесі жүктелмейді. Linux: virtio драйверлері ядрода бар, бірақ host-only initramfs оларды қоспауы мүмкін; lsinitramfs немесе lsinitrd арқылы тексеріп, қажет болса қайта жинаңыз.
  3. Экспорттау немесе қосылу. ВМ-ді өшіріп, OVF / OVA экспорттаңыз (vSphere Client "Export OVF Template" немесе ovftool), не болмаса virt-v2v немесе Proxmox шеберіне оны өзі тартып алуға мүмкіндік беріңіз.
  4. Түрлендіру. Тек дискіні qemu-img арқылы, бүкіл қонақ жүйені virt-v2v арқылы (ол драйверлерді де бейімдейді), немесе OVF-тен тікелей Proxmox-қа.
  5. Консольде жүктеп, содан кейін тазалаңыз. NIC атауы мен IP-ді тексеріңіз, VMware Tools немесе open-vm-tools жойып, qemu-guest-agent орнатыңыз.
qemu-img convert -p -f vmdk -O qcow2 disk1.vmdk disk1.qcow2
virt-v2v -i ova VM.ova -o local -os /var/tmp -of qcow2
qm importovf 120 VM.ovf local-lvm

Бұл әр құралдың нұсқаулығындағы құжатталған түрлері; біз бұл үшеуін мұнда іске қосқан жоқпыз. Біз іске қосқан түрлендіру төменде.

Сыналды: түрлендіру шын мәнінде не істейді (ova2raw.js)

Құрамдас бөліктерді көрсету үшін біз түрлендіруді тәуелділіктерсіз, шамамен 100 жол Bun кодымен жаздық. Ол OVA-ны (кәдімгі tar) ашады, SHA-256 манифестін тексереді, OVF сұрайтын жабдықты шығарады, streamOptimized VMDK-ны grain-ге grain бойынша сирек (sparse) raw бейнесіне ашады және GPT-ні тексереді. Біз оған Ubuntu-дың ресми 24.04 OVA файлын, яғни нақты VMware форматындағы экспортты бердік: noble-server-cloudimg-amd64.ova, 2026-10-17 жинағы, оның SHA-256 мәні Ubuntu-дың SHA256SUMS файлымен сәйкес келді. ova2raw.js деп сақтаңыз:

// ova2raw.js - check a VMware OVA export and turn its disk into a raw image for KVM
// usage: bun ova2raw.js <export.ova> <out.raw>
import { openSync, readSync, writeSync, ftruncateSync, closeSync, fstatSync } from 'node:fs'
import { inflateSync } from 'node:zlib'
import { createHash } from 'node:crypto'

const [ova, out] = process.argv.slice(2)
const fd = openSync(ova, 'r')
const read = (pos, len) => {
  const b = Buffer.alloc(len)
  readSync(fd, b, 0, len, pos)
  return b
}

// 1. an OVA is a plain tar: list its members
const files = {}
for (let o = 0; o + 512 <= fstatSync(fd).size; ) {
  const h = read(o, 512)
  if (h.every(x => x === 0)) break
  const name = h.toString('utf8', 0, 100).replace(/\0.*$/s, '')
  const size = parseInt(h.toString('ascii', 124, 136).replace(/\0.*$/s, '').trim(), 8)
  files[name] = { pos: o + 512, size }
  o += 512 + Math.ceil(size / 512) * 512
}
const find = ext => Object.keys(files).find(n => n.endsWith(ext))
const text = n => read(files[n].pos, files[n].size).toString('utf8')
console.log('OVA members:', Object.entries(files).map(([n, f]) => `${n} (${f.size} B)`).join(', '))

// 2. the .mf manifest: every member's SHA-256 must match
const mf = find('.mf')
for (const line of mf ? text(mf).split('\n') : []) {
  const m = line.match(/^SHA(1|256)\((.+)\)\s*=\s*([0-9a-f]+)/i)
  if (!m || !files[m[2]]) continue
  const h = createHash('sha' + m[1])
  const f = files[m[2]]
  for (let p = 0; p < f.size; p += 1 << 24) h.update(read(f.pos + p, Math.min(1 << 24, f.size - p)))
  console.log(`  manifest ${m[2]}: ${h.digest('hex') === m[3].toLowerCase() ? 'OK' : 'MISMATCH'}`)
}

// 3. the .ovf descriptor: what the VM expects from its hardware
const ovf = text(find('.ovf'))
const items = [...ovf.matchAll(/<(?:ovf:)?Item\b[\s\S]*?<\/(?:ovf:)?Item>/g)].map(x => x[0])
const tag = (s, t) => s.match(new RegExp(`<(?:rasd:)?${t}>([^<]*)<`))?.[1]
const kind = { 3: 'CPU', 4: 'RAM', 5: 'IDE controller', 6: 'SCSI controller', 10: 'NIC', 17: 'disk', 20: 'SATA controller' }
console.log('OVF:', ovf.match(/vmw:osType="([^"]+)"/)?.[1] ?? '?', '| firmware',
  ovf.match(/key="firmware" ovf:value="([^"]+)"/)?.[1] ?? 'bios (default)')
for (const it of items) {
  const k = kind[tag(it, 'ResourceType')]
  if (k) console.log(`  ${k.padEnd(16)} ${tag(it, 'ElementName') ?? ''} ${tag(it, 'ResourceSubType') ?? ''} ${tag(it, 'VirtualQuantity') ?? ''}`.trimEnd())
}

// 4. the streamOptimized VMDK: a header, then compressed grains and markers
const vmdk = files[find('.vmdk')]
const hd = read(vmdk.pos, 512)
if (hd.readUInt32LE(0) !== 0x564d444b) throw new Error('not a sparse VMDK (no KDMV magic)')
const capacity = Number(hd.readBigUInt64LE(12)) * 512
const desc = read(vmdk.pos + Number(hd.readBigUInt64LE(28)) * 512, Number(hd.readBigUInt64LE(36)) * 512)
console.log(`VMDK ${desc.toString().match(/createType="([^"]+)"/)?.[1]}, virtual size ${capacity} B, grain ${Number(hd.readBigUInt64LE(20)) * 512} B`)

const ofd = openSync(out, 'w')
ftruncateSync(ofd, capacity) // sparse: unwritten grains stay holes = zeros
let pos = Number(hd.readBigUInt64LE(64)) * 512
let grains = 0
let written = 0
while (pos < vmdk.size) {
  const m = read(vmdk.pos + pos, 512)
  const val = Number(m.readBigUInt64LE(0))
  const size = m.readUInt32LE(8)
  if (size) { // compressed grain: lba, size, zlib data
    const raw = inflateSync(read(vmdk.pos + pos + 12, size))
    writeSync(ofd, raw, 0, raw.length, val * 512)
    grains++
    written += raw.length
    pos += Math.ceil((12 + size) / 512) * 512
  } else if (m.readUInt32LE(12) === 0) break // end-of-stream marker
  else pos += 512 + val * 512 // grain table / directory / footer: metadata only
}
closeSync(ofd)
console.log(`Wrote ${out}: ${grains} grains, ${written} B of data in ${capacity} B`)

// 5. check the result: a valid GPT, and the file systems where the partitions say they are
const rfd = openSync(out, 'r')
const at = (p, l) => { const b = Buffer.alloc(l); readSync(rfd, b, 0, l, p); return b }
const gpt = at(512, 92)
const crc = Buffer.from(gpt)
crc.writeUInt32LE(0, 16)
console.log(`GPT "${gpt.toString('ascii', 0, 8)}", header CRC ${(Bun.hash.crc32(crc) >>> 0) === gpt.readUInt32LE(16) ? 'OK' : 'BAD'}`)
const n = gpt.readUInt32LE(80)
const es = gpt.readUInt32LE(84)
const ents = at(Number(gpt.readBigUInt64LE(72)) * 512, n * es)
console.log(`  partition array CRC ${(Bun.hash.crc32(ents) >>> 0) === gpt.readUInt32LE(88) ? 'OK' : 'BAD'}`)
for (let i = 0; i < n; i++) {
  const e = ents.subarray(i * es, (i + 1) * es)
  if (e.subarray(0, 16).every(x => x === 0)) continue
  const first = Number(e.readBigUInt64LE(32))
  const last = Number(e.readBigUInt64LE(40))
  const sb = at(first * 512 + 1024, 136)
  const fs = sb.readUInt16LE(56) === 0xef53 ? `ext4 label "${sb.toString('ascii', 120, 136).replace(/\0.*$/s, '')}"`
    : at(first * 512, 512).toString('ascii', 82, 87) === 'FAT32' ? 'FAT32 (EFI system partition)'
    : e.toString('ascii', 0, 16) === 'Hah!IdontNeedEFI' ? 'BIOS boot (GRUB for legacy BIOS)' : 'unknown'
  console.log(`  p${i + 1} ${String((last - first + 1) * 512 / 2 ** 20 | 0).padStart(5)} MiB  ${fs}`)
}
bun ova2raw.js noble-server-cloudimg-amd64.ova noble.raw

Нәтиже, DCXV бұлттық серверінде Bun 1.4.4 арқылы 2026-11-03 іске қосылды:

OVA members: ubuntu-noble-24.04-cloudimg.ovf (11186 B), ubuntu-noble-24.04-cloudimg.mf (213 B), ubuntu-noble-24.04-cloudimg.vmdk (590749696 B)
  manifest ubuntu-noble-24.04-cloudimg.vmdk: OK
  manifest ubuntu-noble-24.04-cloudimg.ovf: OK
OVF: ubuntu64Guest | firmware bios (default)
  CPU              2 virtual CPU(s)  2
  RAM              1024MB of memory  1024
  SCSI controller  SCSI Controller 0 VirtualSCSI
  IDE controller   VirtualIDEController 1
  IDE controller   VirtualIDEController 0
  disk             Hard Disk 1
  NIC              Ethernet 1 VmxNet3
VMDK streamOptimized, virtual size 10737418240 B, grain 65536 B
Wrote noble.raw: 28663 grains, 1878458368 B of data in 10737418240 B
GPT "EFI PART", header CRC OK
  partition array CRC OK
  p1  2558 MiB  ext4 label "cloudimg-rootfs"
  p14     4 MiB  BIOS boot (GRUB for legacy BIOS)
  p15   106 MiB  FAT32 (EFI system partition)
  p16   913 MiB  ext4 label "BOOT"

Сол серверде үш іске қосу 14.6-дан 16.2 s-ке дейін нақты уақыт алды. Raw файлдың өлшемі 10 GiB, дискіде 1.8 GB орын алады.

Көшуге дейін нәтиже сізге не айтады

  1. VmxNet3 және VirtualSCSI - VMware құрылғылары. KVM-де олар virtio-net және virtio-blk немесе virtio-scsi болады. Қонақ жүйеге алғашқы жүктеуге дейін екеуіне де драйвер керек, ал желі интерфейсі әдетте жаңа атау алады, сондықтан ескі атауға байланған статикалық IP көтерілмейді. Алғашқы жүктеу үшін консольді пайдаланыңыз.
  2. Микробағдарлама сәйкес болуы керек. Бұл OVF ештеңе орнатпайды, демек BIOS; дискіде BIOS boot бөлімі де, EFI жүйелік бөлімі де бар, сондықтан ол екі жолмен де жүктеледі. firmware=efi параметрімен экспортталған ВМ мақсатты жүйеде UEFI (OVMF) талап етеді, әйтпесе жүктеуші таппайды.
  3. Thin диск тек сіз оны солай сақтасаңыз ғана thin болып қалады. 10 GiB виртуалды, 1.8 GB дерек. Сирек файлдарды қолдайтын құралдармен көшіріңіз (cp --sparse=always, rsync -S) немесе qcow2 пайдаланыңыз, әйтпесе нөлдерді тасып, сақтайсыз.
  4. Манифест - тасымалды тексеру құралыңыз. Сайттар арасындағы әр көшіруден кейін SHA-256 мәнін тексеріңіз: үзіліп қалған жүктеу ешбір қатесіз кейін істен шығатын дискіге түрленеді.

Тоқтап тұру уақытын жоспарлаңыз

Суық көшу = экспорт + тасымал + түрлендіру + алғашқы жүктеу. Әрқайсысын бір сынақ ВМ-де өлшеп, содан кейін көбейтіңіз. Тасымал есебі (біздікі, хаттама шығындарынсыз): 1 Gbit/s жылдамдықта 1.8 GB шамамен 15 s, 1 TB шамамен 2.2 сағат. Жылы құралдар ВМ жұмыс істеп тұрғанда көшіреді және соңында тек өзгерген блоктарды жібереді; The Register сынаушылары Forklift пен MTV арқылы суық және жылы іске қосуларды сипаттайды. Дерекқорлар мен жүктемесі жоғары қолданбалар үшін репликация мен DNS ауыстыру кез келген диск көшірмесінен тиімдірек: алдымен TTL-ді төмендетіңіз (DNS таралуы және TTL туралы қараңыз) және бұлттық серверге көшу жөніндегі нұсқаулықтағы тексеру тізімдерін орындаңыз.

DCXV бұлттық немесе арнайы серверлері қашан сәйкес келеді

  • Бірнеше ВМ, гипервизор командасы жоқ: біздің бұлттық серверлеріміз virtio дискілері бар KVM-де жұмыс істейді. Панельде Қайта орнату -> "Өз бейнеңіз (URL)" https арқылы qcow2, raw немесе vmdk файлын қабылдайды; тариф дискісінен үлкен бейне дискіні ұлғайтады және диск жаңартуы ретінде есептеледі, ал желі баптаулары тек бейнеде cloud-init болса ғана қолданылады. Тарифтер EUR 15.00/ай бастап (2 vCPU, 4 GB RAM, 40 GB; 2026-11-03 тексерілді, VAT-сыз).
  • Ондаған ВМ немесе өз Proxmox кластеріңіз: арнайы серверлер EUR 210/ай бастап, өзіңіз таңдаған гипервизормен.
  • Windows қонақ жүйелері: біз Windows Server лицензияларын қайта сатамыз; лицензия бірінші күннен дайын болуы үшін көшуге дейін сұраңыз.

Екеуі де Прага мен Ковильядағы Tier III деректер орталықтарымызда жұмыс істейді.

Көшуді бізбен бірге жоспарлаңыз

Экспортталған бір ВМ-де ova2raw.js іске қосып, нәтижесіндегі жабдық жолдарын sales@dcxv.com мекенжайына жіберіңіз немесе бұлттық серверді іске қосып, импортты өзіңіз сынап көріңіз.

Broadcom-нан кейін VMware-ден кету: тексерілген көшу жоспары
clouddedicatedinfrastructure

Broadcom-нан кейін VMware-ден кету: тексерілген көшу жоспары

Broadcom мерзімсіз лицензияларды тоқтатып, серіктестерді азайтып, VDDK-ны жасырды. ВМ-ді KVM, Proxmox не Hyper-V-ге көшіру: күндер, сыналған OVA түрлендіргіші.

DNS таралу уақыты: Cloudflare-дің 3 секунды мен сіздің TTL
networkingcloudinfrastructure

DNS таралу уақыты: Cloudflare-дің 3 секунды мен сіздің TTL

Cloudflare DNS жинау кідірісін 3,3 с-қа қысқартты. Бірақ жаңа серверге көшу TTL-ді, теріс кэшті және .com-ның 2 күндік делегациясын күтеді. Екі аймақта өлшедік.

АҚШ кеңестеріндегі 10 000 пікір: ДОО клиенттеріне не береді
clouddedicatedinfrastructure

АҚШ кеңестеріндегі 10 000 пікір: ДОО клиенттеріне не береді

Жаңа деректер жинағы АҚШ кеңестеріндегі дата-орталықтар туралы 10 202 пікірді қамтиды: 90,5% қарсы, су бірінші орында. Біз қайта санап, мәнін түсіндіреміз.

AWS қолдауы мен шоттары: ЕО үшін тексерілген нұсқаулық
cloudpricingcompare

AWS қолдауы мен шоттары: ЕО үшін тексерілген нұсқаулық

AWS қолдау жоспарлары мен бағалары, биллинг деректерінің кешігуі, шығыс трафик, шығынды тексеру скрипті және тұрақты бағалы ЕО провайдері қашан тиімдірек.

Бұлттық сервердегі жад кідірісі: болжам емес, өлшем
clouddedicatedinfrastructure

Бұлттық сервердегі жад кідірісі: болжам емес, өлшем

Танымал жазба бос емес CPU жиі тек RAM-ды күтеді дейді. Біз өз бұлттық серверімізде L1-ден DRAM-ға дейінгі кідірісті өлшеп, оның не беретінін түсіндіреміз.