Last time, I mentioned Creating Ventoy VDI for Linux Live USB , however, it may not boot on some strange hardware and I unfortunately have quite a few of those. So in such cases, it’s better to boot Linux natively.

By doing this, we need Rescuezilla/Clonezilla to extract the Linux system out of Virtualbox’s hard drive (VDI/VMDK).

Download and load the ISO of Rescuezilla, a GUI version of Clonezilla, it’s larger but eaiser to use.

https://github.com/rescuezilla/rescuezilla/releases/download/2.5.1/rescuezilla-2.5.1-64bit.noble.iso

Load the ISO through the Host (Phisical) machine, both Virtuablbox and VMware Workstation should has a similar way to do this. Then Boot into the ISO.

When the superhero pengune shows up, select the language and Clone as option.

Before click next, make sure connect a external drive to be used on the Host machine. Either a flash drive for portable or a hard drive for internal use are applicable. It is recommend to use a portable SSD for the optimal performance and durability. Because a regular flash drive would be weared off pretty quick as a system drive. It’s eaiser to mitigate the NAND longevity issue for Linux by using a dedicated portable distros rather than cloning Linux from desktop.

Select the VBOX HARDDISK with the system to be cloned as Srouce Drive, and the external USB drive as Destination Drive.

Confirm the selection with Overwrite partition table selected with Rescue unchecked. Then the cloning task will be started.

After clone finished, the program would update partition record and grub automatically and the USB drive should be ready to go.

(Optional) Troubleshooting:

Use system built-in Recovery Mode or boot-repair-disk to update grub, or

Start a Terminal from Rescuezilla and run fdisk -l to check devices

Device           Start        End    Sectors   Size Type
/dev/sdb1    2048    4095    2048   1M BIOS boot
/dev/sdb2 4096    xxxx    xxxx   512M EFI System
/dev/sdb3 xxxx    xxxx    xxxx     20G Linux filesystem

In my case, the USB drive is sdb, and run blkid to get UUID for each device

/dev/sdb1: PARTUUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
/dev/sdb2: UUID="xxxx-xxxx" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
/dev/sdb3: UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

Close the Rescuezilla tool window and run mount /dev/sdb3 /mnt and mount sdb2 /mnt/boot, then run chroot /mnt to login the system on USB drive.

Runmousepad /etc/fstab to replace the old UUID

UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /                       ext4   errors=remount-ro 0 1
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /boot                   ext4    defaults        1 2
UUID=xxxx-xxxx          /boot/efi               vfat    umask=0077,shortname=winnt 0 2

Finally, run update-grub or grub-mkconfig -o /boot/grub/grub.cfg before reboot.