Skip to content

Conversation

@norio-nomura
Copy link
Contributor

@norio-nomura norio-nomura commented Nov 10, 2025

Depends on lima-vm/go-qcow2reader#61

  • Add LIMA_VZ_ASIF environment variable to use ASIF on creating diffdisk
  • Add vmType.vz.diskImageFormat that accepts "raw" or "asif"
vmOpts:
  vz:
    diskImageFormat: null
    # Specify the disk image format: "raw" or "asif".
    # Currently only applies to the primary disk image.
    # "asif" requires macOS 26+, and does not support converting back to "raw".
    # 🟢 Builtin default: "raw"
  • pkg/imgutil: Change ImageDiskManager.ConvertToRaw() to ImageDiskManager.ConvertToRaw() that accepts raw.Type or asif.Type
Hide obsolete description

How to setup ASIF as diffdisk:

  1. Create an instance for test, then stop it.
$ limactl start template:ubuntu --name=asif-test --tty=false --log-level=fatal; limactl stop asif-test --log-level=fatal
  1. Convert diffdisk with ASIF image. (original will be renamed to diffdisk.raw)
$ hack/convert-diffdisk-to-asif.sh asif-test
+ instance=asif-test
++ limactl list asif-test --format '{{.Dir}}'
+ instance_dir=/Users/norio/.lima/asif-test
++ head -c 4 /Users/norio/.lima/asif-test/diffdisk
+ head4bytes=
+ case "${head4bytes}" in
++ limactl list asif-test --format '{{.Status}}'
+ instance_state=Stopped
+ [[ Stopped == \S\t\o\p\p\e\d ]]
+ diskutil image create blank --fs none --format ASIF --size 100GiB /Users/norio/.lima/asif-test/diffdisk.asif

/Users/norio/.lima/asif-test/diffdisk.asif created
++ diskutil image attach -n /Users/norio/.lima/asif-test/diffdisk.asif
+ attached_device=/dev/disk5
+ dd if=/Users/norio/.lima/asif-test/diffdisk of=/dev/disk5 status=progress conv=sparse
  107152496640 bytes (107 GB, 100 GiB) transferred 115.003s, 932 MB/s
209715200+0 records in
209715200+0 records out
107374182400 bytes transferred in 115.228413 secs (931837727 bytes/sec)
+ hdiutil detach /dev/disk5
"disk5" ejected.
+ mv /Users/norio/.lima/asif-test/diffdisk /Users/norio/.lima/asif-test/diffdisk.raw
+ mv /Users/norio/.lima/asif-test/diffdisk.asif /Users/norio/.lima/asif-test/diffdisk
+ echo 'Converted diffdisk to ASIF format successfully'
Converted diffdisk to ASIF format successfully
  1. Start the instance
$ limactl start asif-test

@norio-nomura norio-nomura force-pushed the vz-support-asif-as-diffdisk branch from 4845910 to b78a98d Compare November 11, 2025 10:33
@norio-nomura
Copy link
Contributor Author

Implemented conversion to ASIF

@norio-nomura norio-nomura force-pushed the vz-support-asif-as-diffdisk branch 2 times, most recently from 566d590 to a88474b Compare November 11, 2025 10:59
@norio-nomura
Copy link
Contributor Author

Expecting CI failures will be fixed by #4336 and #4341.

@norio-nomura norio-nomura force-pushed the vz-support-asif-as-diffdisk branch 2 times, most recently from f165c11 to 27ffe60 Compare November 18, 2025 06:26
@norio-nomura norio-nomura force-pushed the vz-support-asif-as-diffdisk branch from caec7af to d908a03 Compare November 19, 2025 05:10
@norio-nomura
Copy link
Contributor Author

Force pushed and updated PR description.

@norio-nomura norio-nomura force-pushed the vz-support-asif-as-diffdisk branch from d908a03 to 0dde51e Compare November 19, 2025 05:37
@norio-nomura
Copy link
Contributor Author

https://github.com/lima-vm/lima/actions/runs/19491065038/job/55783186209?pr=4327#step:10:1084

TEST| [INFO] Testing cloning
...
time="2025-11-19T06:00:05Z" level=error msg="[hostagent] failed to copy file to disk nerdctl-full.tgz: write /home/runner/.lima/test-misc-clone/cidata.iso: no space left on device" fields.level=fatal

Does sparsing work on clone?

Depends on lima-vm/go-qcow2reader#61

How to setup ASIF as diffdisk:
1. Create an instance for test, then stop it.
```console
$ limactl start template:ubuntu --name=asif-test --tty=false --log-level=fatal; limactl stop asif-test --log-level=fatal
```
2. Convert `diffdisk` with ASIF image. (original will be renamed to `diffdisk.raw`)
```console
$ hack/convert-diffdisk-to-asif.sh asif-test
+ instance=asif-test
++ limactl list asif-test --format '{{.Dir}}'
+ instance_dir=/Users/norio/.lima/asif-test
++ head -c 4 /Users/norio/.lima/asif-test/diffdisk
+ head4bytes=
+ case "${head4bytes}" in
++ limactl list asif-test --format '{{.Status}}'
+ instance_state=Stopped
+ [[ Stopped == \S\t\o\p\p\e\d ]]
+ diskutil image create blank --fs none --format ASIF --size 100GiB /Users/norio/.lima/asif-test/diffdisk.asif

/Users/norio/.lima/asif-test/diffdisk.asif created
++ diskutil image attach -n /Users/norio/.lima/asif-test/diffdisk.asif
+ attached_device=/dev/disk5
+ dd if=/Users/norio/.lima/asif-test/diffdisk of=/dev/disk5 status=progress conv=sparse
  107152496640 bytes (107 GB, 100 GiB) transferred 115.003s, 932 MB/s
209715200+0 records in
209715200+0 records out
107374182400 bytes transferred in 115.228413 secs (931837727 bytes/sec)
+ hdiutil detach /dev/disk5
"disk5" ejected.
+ mv /Users/norio/.lima/asif-test/diffdisk /Users/norio/.lima/asif-test/diffdisk.raw
+ mv /Users/norio/.lima/asif-test/diffdisk.asif /Users/norio/.lima/asif-test/diffdisk
+ echo 'Converted diffdisk to ASIF format successfully'
Converted diffdisk to ASIF format successfully
```
3. Start the instance
```console
$ limactl start asif-test
```

Signed-off-by: Norio Nomura <[email protected]>

Apply reviews

- hack/convert-diffdisk-to-asif.sh: Add description of script.
- pkg/driver/vz: Refine error text on detecting unexpected image type.

Signed-off-by: Norio Nomura <[email protected]>
- Add `LIMA_VZ_ASIF` environment variable to use ASIF on creating diffdisk
- pkg/imgutil: Add `ImageDiskManager.ConvertToASIF()`
- Remove `hack/convert-diffdisk-to-asif.sh`

Signed-off-by: Norio Nomura <[email protected]>
- Add `vmType.vz.diskImageFormat` that accepts "raw" or "asif"
```yaml
vmOpts:
  vz:
    diskImageFormat: null
    # Specify the disk image format: "raw" or "asif".
    # Currently only applies to the primary disk image.
    # "asif" requires macOS 26+, and does not support converting back to "raw".
    # 🟢 Builtin default: "raw"
```
- Dropped `LIMA_VZ_ASIF` environment variable

Signed-off-by: Norio Nomura <[email protected]>

# Conflicts:
#	pkg/driver/vz/vz_driver_darwin.go
#	pkg/driverutil/disk.go
- default.yaml: Fix comment placing
- pkg/qemuimgutil: Change `QemuImageUtil.Convert` to returns error on specifying other than `raw.Type`

Signed-off-by: Norio Nomura <[email protected]>
@norio-nomura norio-nomura force-pushed the vz-support-asif-as-diffdisk branch from 0dde51e to 6b5eb41 Compare November 19, 2025 14:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants