Migration failure - x86

I have a physical x86 machine I’m trying to convert into an incus container. It’s running Debian 12.13 (Bookworm), with all updates applied. Migrating to a server running Ubuntu 24.04.3 LTS. And bin.linux.incus-migrate.x86_64 v6.22 downloaded from github yesterday.

There’s no 32-bit version of bin.linux.incus-migrate that I can find.

I tried copying the disk image to the incus server (dd|nc>file.raw) and using bin.linux.incus-migrate.x86_64 to import the raw image. Incus does not seem recognize the raw disk image:

./bin.linux.incus-migrate.x86_64
The local Incus server is the target [default=yes]:

What would you like to create?
1) Container
2) Virtual Machine
3) Virtual Machine (from .ova)
4) Custom Volume

Please enter the number of your choice: 1
Name of the new instance: test32bit
Please provide the path to a root filesystem: /tmp/test32bit.raw
Do you want to add additional filesystem mounts? [default=no]:

Instance to be created:
  Name: test32bit
  Project: default
  Type: container
  Source: /tmp/test32bit.raw

Additional overrides can be applied at this stage:
1) Begin the migration with the above configuration
2) Override profile list
3) Set additional configuration options
4) Change instance storage pool or volume size
5) Change instance network
6) Add additional disk
7) Change additional disk storage pool

Please pick one of the options above [default=1]:
Error: Failed to setup the source: Failed to mount /tmp/test32bit.raw: not a directory

I tried using losetup to try pointing to just the root fs in the disk image:

./bin.linux.incus-migrate.x86_64
The local Incus server is the target [default=yes]:

What would you like to create?
1) Container
2) Virtual Machine
3) Virtual Machine (from .ova)
4) Custom Volume

Please enter the number of your choice: 1
Name of the new instance: test32bit
Please provide the path to a root filesystem: /dev/loop0p2
Do you want to add additional filesystem mounts? [default=no]:

Instance to be created:
  Name: test32bit
  Project: default
  Type: container
  Source: /dev/loop0p2

Additional overrides can be applied at this stage:
1) Begin the migration with the above configuration
2) Override profile list
3) Set additional configuration options
4) Change instance storage pool or volume size
5) Change instance network
6) Add additional disk
7) Change additional disk storage pool

Please pick one of the options above [default=1]:
Error: Failed to setup the source: Failed to mount /dev/loop0p2: not a directory

I tried mounting the image (losetup + mount), and get a different, but still not working migration. Now it complains about rsync xattr mismatches:

./bin.linux.incus-migrate.x86_64
The local Incus server is the target [default=yes]:

What would you like to create?
1) Container
2) Virtual Machine
3) Virtual Machine (from .ova)
4) Custom Volume

Please enter the number of your choice: 1
Name of the new instance: test32bit
Please provide the path to a root filesystem: /mnt/
Do you want to add additional filesystem mounts? [default=no]:

Instance to be created:
  Name: test32bit
  Project: default
  Type: container
  Source: /mnt/

Additional overrides can be applied at this stage:
1) Begin the migration with the above configuration
2) Override profile list
3) Set additional configuration options
4) Change instance storage pool or volume size
5) Change instance network
6) Add additional disk
7) Change additional disk storage pool

Please pick one of the options above [default=1]:
Error: Offered rsync features ([xattrs delete compress]) differ from those in the migration response ([xattrs delete])

Any ideas on how to get this machine converted into a container?

Thanks

The last one is definitely the way to go though I’m surprised that rsync compression isn’t getting correctly negotiated…

What storage driver are you using on the receiving server?

The server is using zfs as the backing store

Can you show incus storage show NAME for the target storage pool?

From reading the code, the most likely cause of the missing compress feature on the receiving side would be the storage pool having rsync.compress=false in its configuration.

1 Like
incus storage show zfs-hopper0
config:
rsync.compression: “false”
source: incpool/incus-vm
volatile.initial_source: incpool/incus-vm
zfs.pool_name: incpool/incus-vm
description: “”
name: zfs-hopper0
driver: zfs
used_by:

/1.0/instances/d-vm

/1.0/instances/f-vm

/1.0/instances/n-vm
status: Created
locations:

none

I tried changing the compression setting

incus storage set zfs-hopper0 rsync.compression=true

And still fail out with this error

Error: Offered rsync features ([xattrs delete compress]) differ from those in the migration response ([xattrs delete])

Hmm, that’s weird. From what I can tell, that’s the only code path that would lead to the missing feature.

I’ve also done a quick test here with an empty filesystem tree (as its content is irrelevant here) on a system using ZFS and things are working fine:

stgraber@castiana:~/Code/lxc/incus (git:stgraber/main)$ sudo incus-migrate 
Please touch the FIDO authenticator.
The local Incus server is the target [default=yes]: 

What would you like to create?
1) Container
2) Virtual Machine
3) Virtual Machine (from .ova)
4) Custom Volume

Please enter the number of your choice: 1
Project to create the instance in [default=default]: 
Name of the new instance: foo
Please provide the path to a root filesystem: /mnt
Do you want to add additional filesystem mounts? [default=no]: 

Instance to be created:
  Name: foo
  Project: default
  Type: container
  Source: /mnt

Additional overrides can be applied at this stage:
1) Begin the migration with the above configuration
2) Override profile list
3) Set additional configuration options
4) Change instance storage pool or volume size
5) Change instance network
6) Add additional disk
7) Change additional disk storage pool

Please pick one of the options above [default=1]: 
Instance foo successfully created
stgraber@castiana:~/Code/lxc/incus (git:stgraber/main)$ incus delete -f foo
stgraber@castiana:~/Code/lxc/incus (git:stgraber/main)$ 

Do you have multiple pools? Is that the correct target pool for this migration?

Ah ha! Looks like it was not auto-detecting the storage-pool correctly, This run seems to have worked.

./bin.linux.incus-migrate.x86_64
The local Incus server is the target [default=yes]:

What would you like to create?
1) Container
2) Virtual Machine
3) Virtual Machine (from .ova)
4) Custom Volume

Please enter the number of your choice: 1
Name of the new instance: test32bit
Please provide the path to a root filesystem: /mnt
Do you want to add additional filesystem mounts? [default=no]:

Instance to be created:
  Name: test32bit
  Project: default
  Type: container
  Source: /mnt

Additional overrides can be applied at this stage:
1) Begin the migration with the above configuration
2) Override profile list
3) Set additional configuration options
4) Change instance storage pool or volume size
5) Change instance network
6) Add additional disk
7) Change additional disk storage pool

Please pick one of the options above [default=1]: 4
Please provide the storage pool to use: zfs-hopper0
Do you want to change the storage size? [default=no]:

Instance to be created:
  Name: test32bit
  Project: default
  Type: container
  Source: /mnt
  Storage pool: zfs-hopper0

Additional overrides can be applied at this stage:
1) Begin the migration with the above configuration
2) Override profile list
3) Set additional configuration options
4) Change instance storage pool or volume size
5) Change instance network
6) Add additional disk
7) Change additional disk storage pool

Please pick one of the options above [default=1]:
Instance test32bit successfully created


Thank you!