Apps migration from Dragonfish to Electric Eel fails when ix-applications is on native encryption pool

Please advise how I might proceed with migrating most, if not all, of my Apps given that ‘ix-applications’ and host path datasets are all on encrypted pools and datasets. The following is the response I get for all of my Apps when I run midclt call -job k8s_to_docker.migrate <POOL_NAME_REDACTED>.

{"name": "plex", "error": "App is using encrypted ix-volumes which are not supported for migration", "successfully_migrated": false}

You will have to relocate your ix-applications dataset to an unencrypted dataset.

Encrypted Root Dataset:
Applications do not migrate to 24.10 if the ix-applications dataset is configured on a pool with an encrypted root dataset (see NAS-131561). Relocate installed applications to an unencrypted pool on 24.04 before attempting to upgrade to 24.10.

1 Like

Thank you for the information. I clearly should’ve started with the version notes before proceeding.

Aside from finding some other HDD to temporarily attach to TrueNAS to create a non-encrypted pool, what other options do I have to create a dataset (without encryption) so that I can complete the migration process?

I don’t know that there is one, unfortunately - because the creation of the ix-applications dataset is programmatic, it will automatically inherit the root encryption setting from the pool.

I believe I have a solution for migrating Apps from an encrypted dataset. Feel free to offer any suggestions. Ensure you have enough space on your pool to hold two copies of ‘ix-applications’ before following this process.

  1. Rename the current ‘ix-applications’ dataset to something else.
  2. Drop to a shell and run the following code.
  • Be sure to change variables to reflect your environment
  • ‘dstDataset’ needs to be ‘ix-applications’ for the migration process to work
  • If Apps is already setup on a pool, ‘dstPool’ needs to be the same pool or unset the pool before starting this process
srcPool=tank
dstPool=tank
srcDataset=ix-applications-bak
dstDataset=ix-applications

for dataset in $(zfs list -Hro name -s name ${srcPool}/${srcDataset}); do
    echo "Working on '$dataset'..."
    dest=${dataset##${srcPool}/${srcDataset}}
    snapshots=$(zfs list -Ho name -s creation -t snapshot $dataset)
    [ -z $snapshots ] && { zfs create -o encryption=off ${dstPool}/${dstDataset}${dest}; continue; }
    
    snapshot=${snapshots%%$'\n'*}
    zfs send ${snapshot} | zfs recv -o encryption=off -o canmount=off ${dstPool}/${dstDataset}${dest}@${snapshot##*@}
    if [ $(wc -l <<< "$snapshots") -gt 1 ]; then
        stream=''
        while IFS= read -r snapshot; do
            ! [ -z "${stream}" ] && stream="${stream#-I }" && stream="${stream%% *}" && stream="-I @${stream##*@} "
            stream+="${snapshot}"
        done <<< "$snapshots"

        eval zfs send ${stream} | zfs recv ${dstPool}/${dstDataset}${dest}
    fi
    zfs set canmount=on ${dstPool}/${dstDataset}${dest}
done

rsync -acX /mnt/${srcPool}/${srcDataset}/ /mnt/${dstPool}/${dstDataset}/

midclt call -job k8s_to_docker.migrate ${dstPool}