Nested ESXi install in Proxmox: Step-by-Step
Learn how to use Proxmox VE for nested ESXi virtualization in your home lab with this step-by-step guide. Learn ESXi clustering and other configurations with nested virtualization.
Daniel Micanek virtual Blog – Like normal Dan, but virtual.
Learn how to use Proxmox VE for nested ESXi virtualization in your home lab with this step-by-step guide. Learn ESXi clustering and other configurations with nested virtualization.
The Issue | I keep saying, there are no new ideas in technology, just re-hashes of old ones. That is also true for VMware and their data loss issues. The vSphere-based change block tracking (CBT) bug […]
So since all the announcement’s at VMware Explore 2023 in Vegas I thought it was time to get my lab back in order along with all the latest updates. I noticed during some of the sessions that a project called Holodeck was mentioned and soon found this was a great expansion of an automated full […]
vmss2core in 2026: where to download it, which .vmsn/.vmss/.vmem files it needs, -W/-W8/-N commands, WinDbg analysis and common errors.
Short answer: vmss2core converts a VM checkpoint (a snapshot with memory, .vmsn + .vmem, or a suspend file, .vmss + .vmem) into a memory dump for WinDbg or the Linux crash utility. Get the current build from VMware Workstation Pro or Fusion; the standalone Fling in Broadcom’s Free Downloads is older (build 8456865) and does not support Windows 11, Server 2019 or Server 2025. Run vmss2core.exe -W8 vm.vmsn vm.vmem for modern Windows, -N for Linux.

vmss2core reads VMware checkpoint state and writes a core or memory dump that standard debuggers understand: memory.dmp for Windows (WinDbg) or vmss.core for Linux (crash, GDB). It is useful when a guest hangs and you cannot force a crash dump from inside the OS.
| Method | Files to copy | Notes |
|---|---|---|
| Snapshot with memory | <name>-SnapshotN.vmsn + <name>-SnapshotN.vmem | VM keeps running. Pick the newest pair by timestamp. |
| Suspend | <name>.vmss + <name>.vmem | Hardware version 11 or newer, or VMs on vVols, write a separate .vmem. Hardware version 10 or lower keeps everything in the .vmss. |
The .vmem file is the guest memory image. The .vmsn/.vmss file holds the device and CPU state. You always pass the state file first and the .vmem second.
The old Flings site and vmwa.re/flings links are gone. Flings now live in the Free Downloads section of the Broadcom Support Portal, which needs a free Broadcom account (personal email addresses are accepted).
| Source | Version | Use it for |
|---|---|---|
| Broadcom Support Portal > Free Downloads > Flings > VMSS2Core | Legacy standalone build 8456865 (Windows and Linux binaries) | Older guests only. Not for Windows 11, Server 2019 or Server 2025. |
| VMware Workstation Pro (Free Downloads) | Current, bundled | Any supported guest, including Windows 11 and Server 2025 |
| VMware Fusion Pro (Free Downloads) | Current, bundled | Same, on macOS |
Once Workstation or Fusion is installed, the binary is here:
C:\Program Files (x86)\VMware\VMware Workstation\vmss2core.exeC:\Program Files\VMware\VMware Workstation\/usr/bin/ (Broadcom’s KB calls the Linux binary vmss2core-Linux64; same syntax)/Library/Application Support/VMware Fusion/VMware-Workstation-Full-25H2u1-25219725.exe).Workstation.cab inside it.vmss2core.exe and _zlib1.dll to one folder, for example C:\Temp\vmss2core._zlib1.dll to zlib1.dll. Without this you get “The code execution cannot proceed because zlib1.dll was not found.”
vim-cmd vmsvc/getallvms and vim-cmd vmsvc/power.suspend <VMID>./vmfs/volumes/<datastore>/<vm_name>/) and download the .vmsn or .vmss file and the matching .vmem.On vSAN the .vmem is an object; Broadcom KB 326327 describes reading its object ID and exposing it with objtool before copying. For Horizon desktops, put full clones in maintenance mode before suspending; for instant clones, use a memory snapshot instead. The Broadcom KBs are written for ESXi 8.x; memory snapshots and suspend work the same way in vSphere 9.
| Option | Guest OS (Broadcom KB 323788) |
|---|---|
-W | Windows 7, Windows 10, Windows Server 2008, 2008 R2 |
-W8 | Windows 8, 8.1, Windows 11, Windows Server 2012, 2016, 2019, 2025 |
-N | Linux |
vmss2core.exe -W8 test-vm.vmsn test-vm.vmem
vmss2core.exe -W8 test-vm.vmss test-vm.vmem
vmss2core.exe -W old-vm.vmsn old-vm.vmem
KB 181598 phrases it slightly differently: -W8 for Windows 8 / Server 2012 and later, -W for older Windows. The two KBs disagree on Windows 10. Success produces memory.dmp in the current folder.
./vmss2core-Linux64 -N vm-Snapshot1.vmsn vm-Snapshot1.vmem
vmss2core.exe -N vm-Snapshot1.vmsn vm-Snapshot1.vmem
The result is vmss.core, a Red Hat crash-format core. The tool’s help says -N uses kernel structure offsets passed with -l, generated by getlinuxoffsets. Here is my own -N run from the original version of this post (vmss2core build 20800274, about 2,000 MB written, progress lines shortened):
vmss2core.exe -N VM-Snapshot1.vmsn VM-Snapshot1.vmem
vmss2core version 20800274 Copyright (C) 1998-2022 VMware, Inc. All rights reserved.
Started core writing.
Writing note section header.
Writing 1 memory section headers.
Writing notes.
... 100 MBs written.
... 200 MBs written.
...
... 1900 MBs written.
... 2000 MBs written.
Finished writing core.
windbg -y <SymbolPath> -z memory.dmp, or File > Open Crash Dump (Ctrl+D). Start with !analyze -v, then .bugcheck, lm and !process 0 0.crash vmlinux vmss.core. crash needs two arguments for a dump file: the uncompressed kernel (vmlinux with debug info matching the guest kernel) and the dump.| Symptom | Cause and fix |
|---|---|
Unrecognized .vmss file (magic 4f434e45), 0 KB memory.dmp | VM files are encrypted (Windows 11 / Server 2025 with vTPM). Suspend the VM, decrypt on ESXi with crypto-util (below), convert the decrypted files with the current vmss2core. |
Error parsing Windows data. Cannot create memory.dmp | Windows kernel was not loaded yet (stuck in POST, no boot device, boot failure). Capture again after the OS is up. |
0 KB dump, or a .core file instead of memory.dmp | VBS or Hyper-V is enabled in the guest. Check vhv.enable = "TRUE" in the .vmx; the KB says to set it to "FALSE". Also update old Windows builds. |
Access is Denied | Use the latest vmss2core from Workstation Pro. |
EFI VM freezes on a black screen, Cannot translate linear address | EFI SMM deadlock on hardware version below 14 (ESXi 7.0). Fixed in ESXi 8.0; workaround is hardware version 14 or later (KB 318382). |
crypto-util encobj decrypt --related vm-###.vmx vm-###.vmem vm-###-decrypted.vmem
crypto-util encobj decrypt --related vm-###.vmx vm-###.vmss vm-###-decrypted.vmss
vmss2core.exe -W8 vm-###-decrypted.vmss vm-###-decrypted.vmem
Do not remove the vTPM to get around encryption: Broadcom warns that this makes encrypted data unrecoverable and stops Windows 11 from booting.
Output of vmss2core.exe without arguments on my machine (build 20800274, abridged):
Usage:
GENERAL: vmss2core [[options] | [-l linuxoffsets options]] \
<vmss file> [<vmem file>]
Without options one vmss.core<N> per vCPU with linear view of
memory is generated.
-q Quiet(er) operation.
-M Create core file with physical memory view (vmss.core).
-l str Offset stringset expressed as 0xHEXNUM,0xHEXNUM,... .
-N Red Hat crash core file for arbitrary Linux version
described by the "-l" option (vmss.core).
-N4 Red Hat crash core file for Linux 2.4 (vmss.core).
-N6 Red Hat crash core file for Linux 2.6 (vmss.core).
-O <x> Use <x> as the offset of the entrypoint.
-U <i> Create linear core file for vCPU <i> only.
-P Print list of processes in Linux VM.
-P<pid> Create core file for Linux process <pid> (core.<pid>).
-S Create core for 64-bit Solaris (vmcore.0, unix.0).
-S32 Create core for 32-bit Solaris (vmcore.0, unix.0).
-W Create WinDbg file (memory.dmp) with commonly used
build numbers ("2195" for Win32, "6000" for Win64).
-W<num> Create WinDbg file (memory.dmp), with <num> as the
build number (for example: "-W2600").
-WK Create a Windows kernel memory only dump file (memory.dmp).
-WDDB<num> or -W8DDB<num>
Create WinDbg file (memory.dmp), with <num> as the
debugger data block address in hex.
-WSCAN Scan all of memory for Windows debugger data blocks
(instead of just low 256 MB).
-W8 Generate a memory dump file from a suspended Windows 8 VM.
-X32 <mach_kernel> Create core for 32-bit Mac OS.
-X64 <mach_kernel> Create core for 64-bit Mac OS.
-F Create core for an EFI firmware exception.
Lost or corrupted .vmx? Rebuild it from vmware.log on ESXi 8 with a short shell script over SSH (KB 1023880), including the #!/bin/ash fix for ESXi 8.
Short answer: if a VM’s .vmx file is lost or corrupted, you can rebuild it from the configuration that ESXi writes into the VM’s vmware.log. SSH to the host, change to the VM’s folder, and run the small shell script below. On ESXi 8 the script needs #!/bin/ash as its first line, otherwise it fails with Operation not permitted. Back up the VM folder first.
Rebuilding a VMX file from vmware.log in VMware ESXi can be crucial for restoring a virtual machine’s configuration. This guide will walk you through the process using SSH according KB 1023880, but with update for ESXi 8.0. It was necessary add #!/bin/ash because of error “Operation not permitted”.

First, ensure SSH is enabled on your ESXi host. Then, use an SSH client to connect to the host.
Change to the directory where your VM resides. This is usually under /vmfs/volumes/.
cd /vmfs/volumes/name-volume/name-vm
Create a new file named vmxrebuild.sh and make it executable:
touch vmxrebuild.sh && chmod +x vmxrebuild.sh
Edit the vmxrebuild.sh file using the vi editor:
vi vmxrebuild.sh.i to enter insert mode.ESC, then type :wq! to save and exit.#!/bin/ash
VMXFILENAME=$(sed -n 's/^.*Config file: .*\/\(.\+\)$/\1/p' vmware.log)
echo -e "#\041/usr/bin/vmware" > ${VMXFILENAME}
echo '.encoding = "UTF-8"' >> ${VMXFILENAME}
sed -n '/DICT --- CONFIGURATION/,/DICT ---/ s/^.*DICT \+\(.\+\) = \(.\+\)$/\1 = \2/p' vmware.log >> ${VMXFILENAME}
Execute the script to rebuild the VMX file:
./vmxrebuild.sh
This process extracts the necessary configuration details from the vmware.log file and recreates the VMX file, which is vital for VM configuration. Always back up your VM files before performing such operations.
Optimizing NSX Performance Based on Workload Overview Performance tuning, in general, requires a holistic view of the application traffic profiles, features leveraged and the criteria for performance from the application perspective. In this blog, we will take a look at some of the factors to […]
Raspberry Pi 5 runs its external PCIe x1 link at Gen 2 by default. Enable Gen 3 with dtparam=pciex1_gen=3, verify with lspci LnkSta, know the risks.
Short answer: The external PCIe connector on the Raspberry Pi 5 runs PCIe Gen 2.0 x1 (5 GT/s) by default. To switch it to PCIe Gen 3.0 (8 GT/s), add dtparam=pciex1_gen=3 to /boot/firmware/config.txt, or use raspi-config → Advanced Options → PCIe Speed, then reboot. Raspberry Pi states that the Pi 5 is not certified for Gen 3.0, so the link may be unstable. Check the negotiated speed with sudo lspci -vv (the LnkSta line).

The BCM2712 SoC on the Raspberry Pi 5 drives two PCIe links. One goes to RP1, Raspberry Pi’s own I/O controller. RP1 handles USB, Gigabit Ethernet, the MIPI camera/display transceivers and GPIO. The other goes to the new 16-pin, 0.5 mm pitch FPC connector on the left edge of the board, which is meant for fast peripherals such as NVMe drives on an M.2 HAT+.
| Link | Lanes | Default | Gen 3.0 option |
|---|---|---|---|
| BCM2712 → RP1 (USB, Ethernet, MIPI, GPIO) | x4, PCIe 2.0 (16 Gb/s) | Gen 2.0 | Not affected by pciex1_gen |
| External FPC connector (M.2 HAT+, NVMe, other PCIe devices) | x1 | Gen 2.0, 5 GT/s (~500 MB/s peak) | dtparam=pciex1_gen=3, 8 GT/s, not certified |
Only the external x1 link changes. Gen 3.0 roughly doubles its raw signalling rate, from 5 GT/s to 8 GT/s. That is why NVMe benchmarks on the Pi 5 improve noticeably when the drive and the adapter can handle it.
Current Raspberry Pi OS keeps config.txt in the boot partition at /boot/firmware/config.txt. The original version of this post used /boot/config.txt, which was the path on older images. Edit whichever file your image actually boots from.
nvme is an alias for pciex1.sudo reboot.# /boot/firmware/config.txt
dtparam=pciex1
dtparam=pciex1_gen=3
The Raspberry Pi kernel overlay README describes both parameters. pciex1 “enable[s] the external PCIe link” (default off), and pciex1_gen sets the GEN/speed of that link (default 2).
sudo raspi-config.sudo reboot.After the reboot, look at the link capability and status of the PCIe devices. You need lspci from the pciutils package.
sudo lspci -vv | grep -E "^[0-9a-f]|LnkCap:|LnkSta:"
LnkCap shows what the device or port supports.LnkSta shows what was actually negotiated. For the external connector and the device behind it, Speed 8GT/s with Width x1 means Gen 3.0 is active. 5GT/s means the link is still at Gen 2.0.Raspberry Pi’s documentation says the Raspberry Pi 5 isn’t certified for Gen 3.0 speeds and that Gen 3.0 connections might be unstable. Whether it works depends on the ribbon cable, the adapter board and the device. If the drive doesn’t enumerate, disappears, or logs PCIe/NVMe errors in dmesg, go back to the default: remove the pciex1_gen=3 line (or set it to 2) and reboot. Don’t enable Gen 3 on a system you can’t afford to debug, especially if you boot from the NVMe drive.
In most homelab builds, the reason to care about PCIe speed is an NVMe boot drive. Boot from PCIe is not enabled by default. Edit the bootloader configuration with sudo rpi-eeprom-config --edit and set:
BOOT_ORDER=0xf416
# only for a non-HAT+ adapter:
PCIE_PROBE=1
Save and reboot to write the EEPROM. The official M.2 HAT+ (2230/2242) and M.2 HAT+ Compact (2230) are specified as single-lane PCIe 2.0 adapters with up to 3 A for the M.2 device. Anything above Gen 2.0 on them falls under the same “not certified” caveat.
Further reading (benchmarks): Jeff Geerling: Forcing PCI Express Gen 3.0 speeds on the Pi 5 and Testing PCIe on the Raspberry Pi 5.
LinuxServer.io makes some great Docker images. I’ve been using their UniFi Controller image for a very long time. Sadly it is being deprecated in January 2024. Fortunately, they have a new replacement image named UniFi Network Application. There’s a bit more to the setup as the database portion [..]
Welcome to the “12 days of Home Labs”! Over the course of the next twelve days, we will be sharing with you some fascinating home lab projects, ideas, and tips that will take your lab to the next level. Whether you are just starting or already an experienced home-labber, we have something for […]
During this week’s #VMware #vCommunity Podcast #674, host @ericnipro & @vFrankyB will preview our ever-popular #12DaysOfHomelabs holiday series, kicking off THIS Thurs, Dec. 21! Tune in Weds, tomorrow, at noon Pacific