Hey everyone,
first of all thanks upfront for all the helpful stuff in here - really glad for this community.
I face some serious issues with double mount (/mnt/mnt) and ix apps not working.
I spent some 4h with this forum and Perplexity to try and figure this out but I did not manage to solve it, so hopefully someone here has an inspiration on what might be the issue here.
Below I posted the generated report / discussion I had with Perplexity and what I tried in the terminal.
Thanks upfront for any help ![]()
System
- TrueNAS SCALE:
25.04.2.6(fromboot-pool/ROOT/25.04.2.6dataset) - Pools:
raider(has its own.ix-virtandix-appstree, currently not the active Apps pool)zfsa(intended Apps pool, holds media, Immich data, etc.)zfsb(another pool with its ownix-appstree, not active)
- Apps: using the built‑in Apps (not TrueCharts); one key app is Immich.
I’m running into a persistent mountpoint problem with the ix-apps dataset on pool zfsa. The short version:
- The GUI Apps page can load the catalog again, but
- Apps refuse to start, and
- The
ix-appsdataset forzfsakeeps ending up mounted on/mnt/mnt/.ix-apps(or mounted there internally), despite multiple attempts to fix the ZFS mountpoints and export/import the pool.
I’ve gone as far as stopping middlewared, Docker, and k3s, killing dockerd, resetting properties, and performing zpool export/import, but ZFS still insists that zfsa/ix-apps is mounted at /mnt/mnt/.ix-apps according to its own view, even when mount initially looks clean.
I’d really appreciate guidance on the canonical / supported way to repair ix-apps on an existing Apps pool without destroying user data (zfsa/immich, zfsa/share, etc.).
Initial symptom
Initially, my Apps pool was zfsa. The GUI Apps page complained that the Apps dataset was not mounted at the expected path, and the catalog / apps did not work.
The core dataset looked like this:
sudo zfs get mountpoint,canmount,readonly zfsa/ix-apps
NAME PROPERTY VALUE SOURCE
zfsa/ix-apps mountpoint /mnt/mnt/.ix-apps local
zfsa/ix-apps canmount noauto local
zfsa/ix-apps readonly off inherited from zfsa
Recursive mountpoint output for the ix-apps tree on zfsa:
sudo zfs get -r mountpoint zfsa | egrep 'NAME|ix-apps'
NAME PROPERTY VALUE SOURCE
zfsa/ix-apps mountpoint /mnt/mnt/.ix-apps local
...
zfsa/ix-apps/app_configs mountpoint /mnt/mnt/.ix-apps/app_configs inherited from zfsa/ix-apps
zfsa/ix-apps/app_mounts mountpoint /mnt/mnt/.ix-apps/app_mounts inherited from zfsa/ix-apps
...
zfsa/ix-apps/docker mountpoint /mnt/mnt/.ix-apps/docker inherited from zfsa/ix-apps
zfsa/ix-apps/truenas_catalog mountpoint /mnt/mnt/.ix-apps/truenas_catalog inherited from zfsa/ix-apps
And it was effectively mounted there:
mount | egrep 'ix-apps'
zfsa/ix-apps on /mnt/mnt/.ix-apps type zfs (rw,noatime,xattr,posixacl,casesensitive)
From the docs and other threads, the expected situation for the Apps dataset is that it’s mounted under /mnt/.ix-apps (hidden directory under /mnt, not under /mnt/<pool>).
Fix attempt 1: Correct pool root mountpoint
I realized the root cause of the double /mnt/mnt might be the pool root mountpoint of zfsa itself, so I fixed that first.
After a previous export/import, I now have:
sudo zfs get mountpoint zfsa
NAME PROPERTY VALUE SOURCE
zfsa mountpoint /mnt/zfsa default
And ZFS mounts it correctly:
mount | egrep 'zfsa'
zfsa on /mnt/zfsa type zfs (rw,noatime,xattr,posixacl,casesensitive)
zfsa/pCloudMirror on /mnt/zfsa/pCloudMirror type zfs (...)
zfsa/share on /mnt/zfsa/share type zfs (...)
zfsa/immich on /mnt/zfsa/immich type zfs (...)
...
So the pool root is now cleanly at /mnt/zfsa (no more /mnt/mnt/zfsa).
Fix attempt 2: Set ix-apps → /mnt/.ix-apps
With zfsa root clean, I tried to update zfsa/ix-apps:
sudo zfs set mountpoint=/mnt/.ix-apps zfsa/ix-apps
sudo zfs set canmount=on zfsa/ix-apps
sudo zfs mount zfsa/ix-apps
At einem Punkt sah das sogar korrekt aus:
sudo zfs get mountpoint,canmount zfsa/ix-apps
NAME PROPERTY VALUE SOURCE
zfsa/ix-apps mountpoint /mnt/.ix-apps local
zfsa/ix-apps canmount on local
mount | egrep 'ix-apps'
zfsa/ix-apps on /mnt/.ix-apps type zfs (rw,noatime,xattr,posixacl,casesensitive)
In diesem Zustand konnte der App‑Katalog im Web‑UI wieder geladen werden, aber Apps wie Immich starteten trotzdem nicht:
CallError: [EFAULT] Failed 'up' action for 'immich' app.
Please check /var/log/app_lifecycle.log for more details
(I haven’t pasted the full app_lifecycle.log here to keep this post from exploding, but I can provide it if needed.)
Fix attempt 3: Stop all app-related services, deal with busy /mnt/.ix-apps/docker
To be safe while changing mountpoints, I stopped middlewared, Docker, and k3s and then checked who was still using /mnt/.ix-apps/docker:
sudo systemctl stop middlewared
sudo systemctl stop docker docker.socket containerd
sudo systemctl stop k3s
Despite that, dockerd was still holding files under /mnt/.ix-apps/docker:
sudo fuser -vm /mnt/.ix-apps/docker
USER PID ACCESS COMMAND
/mnt/.ix-apps/docker:
root kernel mount /mnt/.ix-apps/docker
root 10540 F...m dockerd
sudo lsof +f -- /mnt/.ix-apps/docker | head -n 10
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
dockerd 10540 root mem-W REG 0,101 32768 98311 /mnt/.ix-apps/docker/buildkit/history.db
dockerd 10540 root mem-W REG 0,101 32768 98614 /mnt/.ix-apps/docker/buildkit/cache.db
dockerd 10540 root mem-W REG 0,101 16384 98612 /mnt/.ix-apps/docker/buildkit/metadata_v2.db
...
I then killed dockerd and verified that it was gone:
sudo killall dockerd
sleep 2
ps aux | grep dockerd
admin 16484 0.0 0.0 3744 1604 pts/0 S+ 03:09 0:00 grep dockerd
So no more dockerd running.
The stubborn part: ZFS still thinks zfsa/ix-apps is mounted at /mnt/mnt/.ix-apps
Despite stopping services and killing dockerd, ZFS itself insists that zfsa/ix-apps is mounted on /mnt/mnt/.ix-apps:
sudo zfs list -o name,mountpoint,mounted | grep ix-apps
raider/ix-apps /mnt/raider/ix-apps no
...
zfsa/ix-apps /mnt/mnt/.ix-apps yes
zfsa/ix-apps/app_configs /mnt/mnt/.ix-apps/app_configs no
zfsa/ix-apps/app_mounts /mnt/mnt/.ix-apps/app_mounts no
zfsa/ix-apps/docker /mnt/mnt/.ix-apps/docker no
zfsa/ix-apps/truenas_catalog /mnt/mnt/.ix-apps/truenas_catalog no
zfsb/ix-apps /mnt/zfsb/ix-apps no
...
And /proc/self/mounts agrees:
cat /proc/self/mounts | egrep 'ix-apps'
zfsa/ix-apps /mnt/mnt/.ix-apps zfs rw,noatime,xattr,posixacl,casesensitive 0 0
Even when mount | egrep 'ix-apps' temporarily looked empty after umount -lf, ZFS still reported mounted=yes and /mnt/mnt/.ix-apps as the mountpoint. Any attempt to re‑mount with zfs mount fails:
sudo zfs mount zfsa/ix-apps
cannot mount 'zfsa/ix-apps': filesystem already mounted
Changing the property also doesn’t “stick” the way I expect:
sudo zfs inherit mountpoint zfsa/ix-apps
echo "RC inherit: $?"
sudo zfs set -u mountpoint=/.ix-apps zfsa/ix-apps
echo "RC set: $?"
sudo zfs get mountpoint zfsa zfsa/ix-apps
RC inherit: 0
RC set: 0
NAME PROPERTY VALUE SOURCE
zfsa mountpoint /mnt/zfsa default
zfsa/ix-apps mountpoint /mnt/.ix-apps local
So zfs set -u mountpoint=/.ix-apps returns RC 0, but the value remains /mnt/.ix-apps, not /.ix-apps as suggested in other /mnt/mnt threads.
If I try to export the pool to reset the internal mount state:
sudo zpool export zfsa
cannot unmount '/mnt/.ix-apps/docker': pool or dataset is busy
Earlier that was due to dockerd holding files there; after killing dockerd and attempting unmounts by hand, ZFS still thinks zfsa/ix-apps is mounted at /mnt/mnt/.ix-apps, but the shell commands to unmount sometimes refuse with “does not exist” (likely because of the /mnt/mnt vs /mnt mismatch and previous attempts).
Current state
Right now:
-
zfsaroot is cleanly at/mnt/zfsa. -
ZFS believes
zfsa/ix-appsis mounted at/mnt/mnt/.ix-apps:sudo zfs get mountpoint zfsa/ix-apps NAME PROPERTY VALUE SOURCE zfsa/ix-apps mountpoint /mnt/mnt/.ix-apps local sudo zfs list -o name,mountpoint,mounted | grep ix-apps zfsa/ix-apps /mnt/mnt/.ix-apps yes ... -
/proc/self/mountsconfirms the active mount at/mnt/mnt/.ix-apps. -
Apps do not start; Immich throws
Failed 'up' actionand points toapp_lifecycle.log. -
The Apps catalog can load again when
ix-appswas temporarily at/mnt/.ix-apps, but the system falls back to this inconsistent state and/or apps still fail.
What I’m looking for
Given all this:
-
What is the supported way to completely reset the
ix-appsmountpoint for a specific pool (zfsa) on SCALE 25.04.x so that:- ZFS has a consistent internal view (
mounted=nowhen unmounted, then mounted at the correct path), and - TrueNAS re‑creates or re‑uses the Apps dataset at the canonical location (
/mnt/.ix-apps), without breaking my user data onzfsa(zfsa/immich,zfsa/share, etc.)?
- ZFS has a consistent internal view (
-
In the known
/mnt/mntcases, the advice is usually “set mountpoint to/.ix-appsand import the pool withaltroot=/mntso it becomes/mnt/.ix-apps”.- In my case,
zfs set -u mountpoint=/.ix-appsreturns 0 but the value remains/mnt/.ix-apps. Is there a SCALE‑specific mechanism or middleware logic that overwrites this on import?
- In my case,
-
Is there a safe, documented procedure to “factory‑reset” the Apps pool for one pool only (i.e. destroy/recreate only the
ix-appstree forzfsa, then let Apps → Settings → Choose Pool re‑initialize it), while preserving:- Other datasets on
zfsa(immich,share,pCloudMirror), and ix-appstrees on other pools (raider,zfsb)?
- Other datasets on
-
If this is a known bug/regression in Electric Eel / 25.04.x, is there a public issue or recommended workaround I should follow?
Why I’m asking here
I’ve tried to carefully follow the usual ZFS steps (unmount, fix properties, export/import, kill processes that keep datasets busy) and the TrueNAS SCALE docs for Apps storage, but the ix-apps dataset on zfsa keeps ending up in this half‑broken /mnt/mnt/.ix-apps state according to ZFS’ own point of view.