When transitioning from Ubuntu to macOS, two commonly used commands in virtualization and disk management need equivalents:
genisoimage
for creating ISO images with metadataqemu-img
for converting disk image formats
The macOS equivalent for genisoimage
is hdiutil
, Apple's native disk image utility. Here's how to create a similar ISO:
hdiutil makehybrid \
-o init.iso \
-hfs -joliet -iso -default-volume-name cidata \
user-data meta-data
Key parameters explanation:
-o
: Specifies output file-hfs -joliet -iso
: Sets filesystem formats-default-volume-name
: Equivalent to-volid
If you prefer a more Linux-like experience, install cdrtools
via Homebrew:
brew install cdrtools
Then use mkisofs
(which is what genisoimage
typically aliases to):
mkisofs -output init.iso -volid cidata -joliet -rock user-data meta-data
For qemu-img
functionality, you have several options:
Option 1: Using qemu installed via Homebrew
brew install qemu
qemu-img convert -O raw disk.img disk.img.raw
Option 2: Using hdiutil for native conversion
hdiutil convert disk.img -format UDRW -o disk.img.raw
Note that UDRW
format is equivalent to raw format.
When working with large disk images:
- For
hdiutil
, add-shadow
flag to enable incremental operations - For
qemu-img
, use-p
flag to show progress - Consider using
pv
pipe viewer for better progress monitoring
Creating a cloud-init ISO with multiple files:
hdiutil makehybrid -o cloud-init.iso \
-hfs -joliet -iso -default-volume-name cidata \
-filemode 0644 -mode 0644 \
user-data meta-data network-config
Converting a VMDK to raw format:
qemu-img convert -p -O raw virtualdisk.vmdk virtualdisk.raw
If you encounter permission problems with hdiutil
:
hdiutil makehybrid -o init.iso \
-hfs -joliet -iso -default-volume-name cidata \
-uid 0 -gid 80 \
user-data meta-data
For sparse image conversion with qemu-img
:
qemu-img convert -O raw -S 0 disk.img disk.img.raw
When transitioning between Linux (Ubuntu) and macOS development environments, you'll frequently encounter situations where equivalent toolchains are needed. Two particularly important utilities for virtualization and disk image manipulation are:
genisoimage
for creating ISO imagesqemu-img
for disk image conversion
The native solution on macOS is hdiutil
, Apple's disk image utility. However, for ISO creation that mimics genisoimage behavior, consider these options:
# Using hdiutil (native macOS)
hdiutil makehybrid -iso -joliet -o output.iso source_folder
# Using mkisofs (available via Homebrew)
brew install cdrtools
mkisofs -output init.iso -volid cidata -joliet -rock user-data meta-data
For qemu-img
functionality on macOS, these options are available:
# Using qemu-img (via Homebrew)
brew install qemu
qemu-img convert -O raw disk.img disk.img.raw
# Using hdiutil for basic conversion
hdiutil convert disk.img -format UDRW -o disk.img.raw
Here's a complete workflow for creating cloud-init data and converting a QCOW2 image on macOS:
# Create cloud-init ISO
mkisofs -output cloud-init.iso -volid cidata -joliet -rock user-data meta-data
# Convert QCOW2 to raw format
qemu-img convert -f qcow2 -O raw ubuntu.qcow2 ubuntu.raw
When working with large disk images on macOS:
- qemu-img tends to be faster than hdiutil for format conversions
- For ISO creation, mkisofs offers more compatibility with Linux-generated images
- Consider using
pv
(pipe viewer) for monitoring progress with large files
If you encounter permission problems with Homebrew-installed tools:
# Fix qemu-img permissions
sudo chmod +x $(brew --prefix qemu)/bin/qemu-img
For mkisofs/joliet compatibility issues:
mkisofs -J -r -V "VOLUME_ID" -o output.iso source_dir