From 85eafdf719d92f2c3ec751ea22e8c6e8baaf60fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20F=20Bj=C3=B6rklund?= Date: Fri, 14 Nov 2025 12:42:42 +0100 Subject: [PATCH 1/2] Allow using swap as a fstype for disks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This will call "mkswap" instead of mkfs. And will call "swapon" instead of mount. Signed-off-by: Anders F Björklund --- .../cidata.TEMPLATE.d/boot/05-lima-disks.sh | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/pkg/cidata/cidata.TEMPLATE.d/boot/05-lima-disks.sh b/pkg/cidata/cidata.TEMPLATE.d/boot/05-lima-disks.sh index d4816f9b39a..77e36b7e9b8 100644 --- a/pkg/cidata/cidata.TEMPLATE.d/boot/05-lima-disks.sh +++ b/pkg/cidata/cidata.TEMPLATE.d/boot/05-lima-disks.sh @@ -25,14 +25,24 @@ for i in $(seq 0 $((LIMA_CIDATA_DISKS - 1))); do # first time setup if [[ ! -b "/dev/disk/by-label/lima-${DISK_NAME}" ]]; then if $FORMAT_DISK; then - echo 'type=linux' | sfdisk --label gpt "/dev/${DEVICE_NAME}" - # shellcheck disable=SC2086 - mkfs.$FORMAT_FSTYPE $FORMAT_FSARGS -L "lima-${DISK_NAME}" "/dev/${DEVICE_NAME}1" + if [ "$FORMAT_FSTYPE" == "swap" ]; then + echo 'type=swap' | sfdisk --label gpt "/dev/${DEVICE_NAME}" + # shellcheck disable=SC2086 + mkswap $FORMAT_FSARGS -L "lima-${DISK_NAME}" "/dev/${DEVICE_NAME}1" + else + echo 'type=linux' | sfdisk --label gpt "/dev/${DEVICE_NAME}" + # shellcheck disable=SC2086 + mkfs.$FORMAT_FSTYPE $FORMAT_FSARGS -L "lima-${DISK_NAME}" "/dev/${DEVICE_NAME}1" + fi fi fi - mkdir -p "/mnt/lima-${DISK_NAME}" - mount -t "$FORMAT_FSTYPE" "/dev/${DEVICE_NAME}1" "/mnt/lima-${DISK_NAME}" + if [ "$FORMAT_FSTYPE" == "swap" ]; then + swapon "/dev/${DEVICE_NAME}1" + else + mkdir -p "/mnt/lima-${DISK_NAME}" + mount -t "$FORMAT_FSTYPE" "/dev/${DEVICE_NAME}1" "/mnt/lima-${DISK_NAME}" + fi if command -v growpart >/dev/null 2>&1 && command -v resize2fs >/dev/null 2>&1; then growpart "/dev/${DEVICE_NAME}" 1 || true # Only resize when filesystem is in a healthy state From 61d0a021faa86246115c231d5161bdc452bc7840 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20F=20Bj=C3=B6rklund?= Date: Fri, 14 Nov 2025 12:44:04 +0100 Subject: [PATCH 2/2] Check FSType to improve disk messages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previous disk had hardcoded mountpoint. But now it will not be used, for swap. Signed-off-by: Anders F Björklund --- cmd/limactl/disk.go | 10 +++++----- pkg/driver/krunkit/krunkit_darwin_arm64.go | 2 +- pkg/driver/qemu/qemu.go | 2 +- pkg/driver/vz/vm_darwin.go | 2 +- pkg/hostagent/hostagent.go | 2 +- pkg/instance/stop.go | 2 +- pkg/store/disk.go | 14 +++++++++++--- 7 files changed, 21 insertions(+), 13 deletions(-) diff --git a/cmd/limactl/disk.go b/cmd/limactl/disk.go index acc78ce2894..1dd7c32003d 100644 --- a/cmd/limactl/disk.go +++ b/cmd/limactl/disk.go @@ -180,7 +180,7 @@ func diskListAction(cmd *cobra.Command, args []string) error { if jsonFormat { for _, diskName := range disks { - disk, err := store.InspectDisk(diskName) + disk, err := store.InspectDisk(diskName, nil) if err != nil { logrus.WithError(err).Errorf("disk %q does not exist?", diskName) continue @@ -202,7 +202,7 @@ func diskListAction(cmd *cobra.Command, args []string) error { } for _, diskName := range disks { - disk, err := store.InspectDisk(diskName) + disk, err := store.InspectDisk(diskName, nil) if err != nil { logrus.WithError(err).Errorf("disk %q does not exist?", diskName) continue @@ -254,7 +254,7 @@ func diskDeleteAction(cmd *cobra.Command, args []string) error { } for _, diskName := range args { - disk, err := store.InspectDisk(diskName) + disk, err := store.InspectDisk(diskName, nil) if err != nil { if errors.Is(err, fs.ErrNotExist) { logrus.Warnf("Ignoring non-existent disk %q", diskName) @@ -325,7 +325,7 @@ $ limactl disk unlock DISK1 DISK2 ... func diskUnlockAction(cmd *cobra.Command, args []string) error { ctx := cmd.Context() for _, diskName := range args { - disk, err := store.InspectDisk(diskName) + disk, err := store.InspectDisk(diskName, nil) if err != nil { if errors.Is(err, fs.ErrNotExist) { logrus.Warnf("Ignoring non-existent disk %q", diskName) @@ -387,7 +387,7 @@ func diskResizeAction(cmd *cobra.Command, args []string) error { } diskName := args[0] - disk, err := store.InspectDisk(diskName) + disk, err := store.InspectDisk(diskName, nil) if err != nil { if errors.Is(err, fs.ErrNotExist) { return fmt.Errorf("disk %q does not exists", diskName) diff --git a/pkg/driver/krunkit/krunkit_darwin_arm64.go b/pkg/driver/krunkit/krunkit_darwin_arm64.go index 448886b64fe..39344f74d2e 100644 --- a/pkg/driver/krunkit/krunkit_darwin_arm64.go +++ b/pkg/driver/krunkit/krunkit_darwin_arm64.go @@ -54,7 +54,7 @@ func Cmdline(inst *limatype.Instance) (*exec.Cmd, error) { ctx := context.Background() diskUtil := proxyimgutil.NewDiskUtil(ctx) for _, d := range inst.Config.AdditionalDisks { - disk, derr := store.InspectDisk(d.Name) + disk, derr := store.InspectDisk(d.Name, d.FSType) if derr != nil { return nil, fmt.Errorf("failed to load disk %q: %w", d.Name, derr) } diff --git a/pkg/driver/qemu/qemu.go b/pkg/driver/qemu/qemu.go index ee7456d7b2c..9e0c83705b4 100644 --- a/pkg/driver/qemu/qemu.go +++ b/pkg/driver/qemu/qemu.go @@ -692,7 +692,7 @@ func Cmdline(ctx context.Context, cfg Config) (exe string, args []string, err er extraDisks := []string{} for _, d := range y.AdditionalDisks { diskName := d.Name - disk, err := store.InspectDisk(diskName) + disk, err := store.InspectDisk(diskName, d.FSType) if err != nil { logrus.Errorf("could not load disk %q: %q", diskName, err) return "", nil, err diff --git a/pkg/driver/vz/vm_darwin.go b/pkg/driver/vz/vm_darwin.go index 15cff0444e3..fc29203c642 100644 --- a/pkg/driver/vz/vm_darwin.go +++ b/pkg/driver/vz/vm_darwin.go @@ -499,7 +499,7 @@ func attachDisks(ctx context.Context, inst *limatype.Instance, vmConfig *vz.Virt for _, d := range inst.Config.AdditionalDisks { diskName := d.Name - disk, err := store.InspectDisk(diskName) + disk, err := store.InspectDisk(diskName, d.FSType) if err != nil { return fmt.Errorf("failed to run load disk %q: %w", diskName, err) } diff --git a/pkg/hostagent/hostagent.go b/pkg/hostagent/hostagent.go index 9355a2c91e9..9daa896a7a0 100644 --- a/pkg/hostagent/hostagent.go +++ b/pkg/hostagent/hostagent.go @@ -554,7 +554,7 @@ sudo chown -R "${USER}" /run/host-services` a.cleanUp(func() error { var unlockErrs []error for _, d := range a.instConfig.AdditionalDisks { - disk, inspectErr := store.InspectDisk(d.Name) + disk, inspectErr := store.InspectDisk(d.Name, d.FSType) if inspectErr != nil { unlockErrs = append(unlockErrs, inspectErr) continue diff --git a/pkg/instance/stop.go b/pkg/instance/stop.go index af4605b85ec..f02deea0b1f 100644 --- a/pkg/instance/stop.go +++ b/pkg/instance/stop.go @@ -118,7 +118,7 @@ func StopForcibly(inst *limatype.Instance) { for _, d := range inst.AdditionalDisks { diskName := d.Name - disk, err := store.InspectDisk(diskName) + disk, err := store.InspectDisk(diskName, d.FSType) if err != nil { logrus.Warnf("Disk %q does not exist", diskName) continue diff --git a/pkg/store/disk.go b/pkg/store/disk.go index 20a69f91e63..8bf726e894c 100644 --- a/pkg/store/disk.go +++ b/pkg/store/disk.go @@ -23,11 +23,15 @@ type Disk struct { Instance string `json:"instance"` InstanceDir string `json:"instanceDir"` MountPoint string `json:"mountPoint"` + + // if the Disk is in use and the FSType is specified + FSType *string `json:"fsType,omitempty"` } -func InspectDisk(diskName string) (*Disk, error) { +func InspectDisk(diskName string, fsType *string) (*Disk, error) { disk := &Disk{ - Name: diskName, + Name: diskName, + FSType: fsType, } diskDir, err := DiskDir(diskName) @@ -56,7 +60,11 @@ func InspectDisk(diskName string) (*Disk, error) { disk.InstanceDir = instDir } - disk.MountPoint = fmt.Sprintf("/mnt/lima-%s", diskName) + if disk.FSType != nil && *disk.FSType == "swap" { + disk.MountPoint = "swap" // only used for logging messages + } else { + disk.MountPoint = fmt.Sprintf("/mnt/lima-%s", diskName) + } return disk, nil }