Qcow2 To Iso Review

virt-copy-out -a disk.qcow2 / dest/ mkisofs -o intermediate.iso dest/ But virt-make-fs outputs ext4, not ISO. So manual ISO creation remains necessary. Below is a robust bash script using guestmount (requires root) for full partition extraction to ISO.

xorriso -as mkisofs -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o bootable.iso iso/ This only works if the QCOW2 contains a Linux kernel and initrd. Windows QCOW2 cannot be directly turned into a bootable ISO because Windows requires a writable system drive. 4.4 Using virt-make-fs for Simplicity libguestfs provides virt-make-fs to create filesystem images from directories. To go QCOW2 → ISO, combine virt-copy-out with mkisofs or use virt-make-fs to create a raw filesystem, then convert that to ISO.

#!/bin/bash # qcow2_to_iso.sh - Convert QCOW2 to ISO (non-bootable) set -e QCOW2="$1" ISO_OUT="$2:-output.iso" MOUNT_POINT="/mnt/qcow2_mnt" EXTRACT_DIR="/tmp/iso_extract" qcow2 to iso

guestfish -a disk.qcow2 -i ><fs> copy-out / /tmp/extracted/ ><fs> exit Then create ISO:

echo "ISO created: $ISO_OUT"

Example:

if [ -z "$QCOW2" ]; then echo "Usage: $0 <disk.qcow2> [output.iso]" exit 1 fi sudo modprobe nbd Attach QCOW2 sudo qemu-nbd -c /dev/nbd0 "$QCOW2" sudo partprobe /dev/nbd0 Prepare directories sudo mkdir -p "$MOUNT_POINT" mkdir -p "$EXTRACT_DIR" Mount all partitions for part in /dev/nbd0p*; do if [ -b "$part" ]; then echo "Mounting $part" sudo mount "$part" "$MOUNT_POINT" 2>/dev/null || continue sudo cp -a "$MOUNT_POINT"/* "$EXTRACT_DIR/" 2>/dev/null || true sudo umount "$MOUNT_POINT" fi done Detach NBD sudo qemu-nbd -d /dev/nbd0 Create ISO sudo mkisofs -o "$ISO_OUT" -R -J -V "QCOW2_TO_ISO" "$EXTRACT_DIR" Cleanup sudo rm -rf "$EXTRACT_DIR" virt-copy-out -a disk

sudo mkisofs -o output.iso -R -J /tmp/iso_contents/ Loses partition metadata, bootloaders, and multiple independent root filesystems. The resulting ISO is non-bootable unless manually configured. 4.2 Selective File Extraction (Using libguestfs) More precise and does not require root (beyond libguestfs setup).