Pool imported but dataset unable to mount after sudden loss of power to drives

Hi all!

My HDDs lost power suddenly and the Proxmox server I have TrueNAS virtulised on rebooted once the HDDs started spinning.

A similar thing has happened before but after starting both up again all my data was intact.

After powering the drives and proxmox back on, TrueNAS reported no pool but could see the drives. The “Import Pool“ drop down list was empty. But I was able to import the pool using the CLI with an error “cannot mount ‘/Main’: failed to create mountpoint: Read-only file system
Import was successful, but unable to mount some datasets”.

The storage is reporting correctly - 2 x MIRROR | 2 wide | 1.82 TiB and the same capacity as before but the dataset seems to be incorrect or old. It has my Main dataset with paths but has the wrong available space and in the Permissions tile says “Dataset is not mounted”.

I would like to try and fix the dataset, if that is the issue. Happy to add any information that is relevant.

Version: 25.10.5 - Goldeye

TrueNAS CE on a Proxmox VM with drives pass through using ASM1166 SATA controller.

truenas_admin@truenas[~]$ sudo zpool import Main
cannot mount ‘/Main’: failed to create mountpoint: Read-only file system
Import was successful, but unable to mount some datasets
truenas_admin@truenas[~]$ zpool status Main
pool: Main
state: ONLINE
status: Some supported and requested features are not enabled on the pool.
The pool can still be used, but some features are unavailable.
action: Enable all features using ‘zpool upgrade’. Once this is done,
the pool may no longer be accessible by software that does not support
the features. See zpool-features(7) for details.
scan: scrub repaired 0B in 04:07:11 with 0 errors on Sun Aug 9 12:59:29 2026
config:

    NAME                                      STATE     READ WRITE CKSUM
    Main                                      ONLINE       0     0     0
      mirror-0                                ONLINE       0     0     0
        1769118d-3f28-45b6-abf2-5eee57fc0d2c  ONLINE       0     0     0
        5607efb3-6b78-48e2-a989-26ba59143fb9  ONLINE       0     0     0
      mirror-1                                ONLINE       0     0     0
        70d2617e-72a4-4b74-b739-cefb6b7ad2ec  ONLINE       0     0     0
        9c932556-03f3-42c1-bcf1-4be0a0ea1550  ONLINE       0     0     0

errors: No known data errors
truenas_admin@truenas[~]$

Thanks! :slight_smile: Relatively new the the NAS hobby and would like to learn more.

Do you have a good backup of all your data?
TrueNAS virtualized on Proxmox needs to be done like a production server. You pass through an entire controller, like a HBA, and blacklist the controller from Proxmox so it doesn’t attempt to mount the ZFS file system. See last link

The other, possible issue is your ASM1166 SATA controller. It is listed as a ‘port multiplier’ and may not be a good fit with ZFS (TrueNAS)

You should have a real HBA.
What’s all the noise about HBA’s, and why can’t I use a RAID controller?

Multiply your problems with SATA Port Multipliers and cheap SATA controllers

3 Likes

Not sure why the GUI or middleware claims there are no importable pools, nor have I ever used a virtualized TrueNAS instance, but you did not use -R /mnt for your import command.

Something closer to what the middleware issues looks like this.

sudo zpool import -R /mnt -d /dev/disk/by-partuuid Main

Since you imported the pool, see if you’re able to safely export it with the GUI and then try to import it again normally with the GUI.

1 Like

Thanks for your reply.

I don’t have a backup, mostly due to not having the hardware/storage to but the data is nonprecious. If I wasn’t able to recover it that would be fine, just trying to see if this can be fixed. This current setup is for me to learn before I spend money on hardware for a full like production server NAS with a HBA and proper backups. All the hardware in this build is free second hand, so I was making do with a mini pc that has a GPU in its PCIex4 and old HDDs. Thanks for the links though, I did not know that you can get HBAs that cheap.

I did blacklist the controller on setup and was aware it wasn’t a good setup but didn’t know why. Thanks again for linking those articles.

Thanks for the suggestion.

I was able to export and import the pool with the GUI but the dataset had the same issue and I got this error:

Error Name: ENOENT
Error Code: 2
Reason: \[ENOENT\] Path /Main not found
Error Class: CallError
Trace: Traceback (most recent call last):
File “/usr/lib/python3/dist-packages/middlewared/api/base/server/ws_handler/rpc.py”, line 361, in process_method_call
result = await method.call(app, id\_, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/lib/python3/dist-packages/middlewared/api/base/server/method.py”, line 57, in call
result = await self.middleware.call_with_audit(self.name, self.serviceobj, methodobj, params, app,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/lib/python3/dist-packages/middlewared/main.py”, line 956, in call_with_audit
result = await self.\_call(method, serviceobj, methodobj, params, app=app,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/lib/python3/dist-packages/middlewared/main.py”, line 784, in \_call
return await self.run_in_executor(prepared_call.executor, methodobj, \*prepared_call.args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/lib/python3/dist-packages/middlewared/main.py”, line 667, in run_in_executor
return await loop.run_in_executor(pool, functools.partial(method, \*args, \*\*kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/lib/python3.11/concurrent/futures/thread.py”, line 58, in run
result = self.fn(\*self.args, \*\*self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/lib/python3/dist-packages/middlewared/api/base/decorator.py”, line 116, in wrapped
result = func(\*args)
^^^^^^^^^^^
File “/usr/lib/python3/dist-packages/middlewared/plugins/filesystem.py”, line 467, in stat
raise CallError(f’Path {\_path} not found’, errno.ENOENT)
middlewared.service_exception.CallError: \[ENOENT\] Path /Main not found^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/lib/python3/dist-packages/middlewared/main.py”, line 956, in call_with_audit
result = await self.\_call(method, serviceobj, methodobj, params, app=app,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/lib/python3/dist-packages/middlewared/main.py”, line 784, in \_call
return await self.run_in_executor(prepared_call.executor, methodobj, \*prepared_call.args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/lib/python3/dist-packages/middlewared/main.py”, line 667, in run_in_executor
return await loop.run_in_executor(pool, functools.partial(method, \*args, \*\*kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/lib/python3.11/concurrent/futures/thread.py”, line 58, in run
result = self.fn(\*self.args, \*\*self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/lib/python3/dist-packages/middlewared/api/base/decorator.py”, line 116, in wrapped
result = func(\*args)
^^^^^^^^^^^
File “/usr/lib/python3/dist-packages/middlewared/plugins/filesystem.py”, line 467, in stat
raise CallError(f’Path {\_path} not found’, errno.ENOENT)
middlewared.service_exception.CallError: \[ENOENT\] Path /Main not found

What would be the difference between using the GUI and that command?

Thanks for your help :grin:

Export the pool with the GUI, but try to import it with this in the command-line.

sudo zpool import -R /mnt -d /dev/disk/by-partuuid Main

Not sure why the GUI is omitting the “altroot” property.

1 Like

Looks like it the import was successful:

zpool status
  pool: Main
 state: ONLINE
status: Some supported and requested features are not enabled on the pool.
        The pool can still be used, but some features are unavailable.
action: Enable all features using 'zpool upgrade'. Once this is done,
        the pool may no longer be accessible by software that does not support
        the features. See zpool-features(7) for details.
  scan: resilvered 7.90M in 00:00:01 with 0 errors on Mon Aug 10 18:14:00 2026
config:

        NAME                                      STATE     READ WRITE CKSUM
        Main                                      ONLINE       0     0     0
          mirror-0                                ONLINE       0     0     0
            1769118d-3f28-45b6-abf2-5eee57fc0d2c  ONLINE       0     0     0
            5607efb3-6b78-48e2-a989-26ba59143fb9  ONLINE       0     0     0
          mirror-1                                ONLINE       0     0     0
            70d2617e-72a4-4b74-b739-cefb6b7ad2ec  ONLINE       0     0     0
            9c932556-03f3-42c1-bcf1-4be0a0ea1550  ONLINE       0     0     0

errors: No known data errors

But got the same error on my dataset page:

Error Name: ENOENT
Error Code: 2
Reason: [ENOENT] Path /Main not found
Error Class: CallError
Trace: Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/middlewared/api/base/server/ws_handler/rpc.py", line 361, in process_method_call
    result = await method.call(app, id_, params)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/middlewared/api/base/server/method.py", line 57, in call
    result = await self.middleware.call_with_audit(self.name, self.serviceobj, methodobj, params, app,
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/middlewared/main.py", line 956, in call_with_audit
    result = await self._call(method, serviceobj, methodobj, params, app=app,
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/middlewared/main.py", line 784, in _call
    return await self.run_in_executor(prepared_call.executor, methodobj, *prepared_call.args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/middlewared/main.py", line 667, in run_in_executor
    return await loop.run_in_executor(pool, functools.partial(method, *args, **kwargs))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/middlewared/api/base/decorator.py", line 116, in wrapped
    result = func(*args)
             ^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/middlewared/plugins/filesystem.py", line 467, in stat
    raise CallError(f'Path {_path} not found', errno.ENOENT)
middlewared.service_exception.CallError: [ENOENT] Path /Main not found

Sounds like the root dataset also needs to have its mountpoint property set to /mnt/Main, instead of its current value of /Main. Try zfs set mountpoint=/mnt/Main Main.

1 Like

Okay, it’s given an error about my child dataset:

truenas_admin@truenas[~]$ zfs set mountpoint=/mnt/Main Main
cannot unmount '/mnt/Main/jellyfin': permission denied

I have two more under my Main dataset but that wasn’t shown in the error.

Thanks :smiley:

OK, what’s the output of zfs get mountpoint -R Main? Let’s see which specific datasets are affected.

I used a lower case r flag, is that right?

truenas_admin@truenas[~]$ zfs get mountpoint -r Main
NAME                                       PROPERTY    VALUE                                       SOURCE
Main                                       mountpoint  /mnt/Main                                   default
Main/ImmichShare                           mountpoint  /mnt/Main/ImmichShare                       default
Main/Vm-CT-Backup                          mountpoint  /mnt/Main/Vm-CT-Backup                      default
Main/ix-apps                               mountpoint  /mnt/.ix-apps                               local
Main/ix-apps/app_configs                   mountpoint  /mnt/.ix-apps/app_configs                   inherited from Main/ix-apps
Main/ix-apps/app_mounts                    mountpoint  /mnt/.ix-apps/app_mounts                    inherited from Main/ix-apps
Main/ix-apps/app_mounts/scrutiny           mountpoint  /mnt/.ix-apps/app_mounts/scrutiny           inherited from Main/ix-apps
Main/ix-apps/app_mounts/scrutiny/config    mountpoint  /mnt/.ix-apps/app_mounts/scrutiny/config    inherited from Main/ix-apps
Main/ix-apps/app_mounts/scrutiny/influxdb  mountpoint  /mnt/.ix-apps/app_mounts/scrutiny/influxdb  inherited from Main/ix-apps
Main/ix-apps/docker                        mountpoint  /mnt/.ix-apps/docker                        inherited from Main/ix-apps
Main/ix-apps/truenas_catalog               mountpoint  /mnt/.ix-apps/truenas_catalog               inherited from Main/ix-apps
Main/jellyfin                              mountpoint  /mnt/Main/jellyfin                          default

Looks OK. I’ll need to look at my system at home after work, but I question why the source for the shares aren’t inheriting from the root dataset. What happens if you export your pool from the GUI, and then try to reimport from the GUI?

1 Like

Appreciate the help.

I got this error here: Pool imported but dataset unable to mount after sudden loss of power to drives - #5 by zfsNewbie

I have a feeling that you’ve been fine since importing with the GUI. I think this error message is a bug itself.

Even when your altroot is correct and confirmed with the command-line info, you get this error message about a path that has nothing to do with the pool or its root dataset.

1 Like

Maybe time for downloading System Configuration, new install over boot-pool and uploading System Configuration?

2 Likes

This may be the best solution. I hope there’s nothing in the db’s config file that will carry over this error.

@zfsNewbie can we start again, one at a time?

Export the pool with the GUI. Does it finish without errors?

What is the output of these while the pool is exported:

zpool status
zpool list -o name,altroot
zfs list -t fs,vol -r -o name,mountpoint
zfs mount
ls -l / | grep '^d'
ls -l /mnt | grep '^d'

All of it, even for other pools and paths that show up.

Paste each output into its own preformatted text.

2 Likes

I went to export the pool in the GUI but there was no pool available, the page was empty and prompting me to create a pool. But zpool status reported my boot pool and main pool imported (the last thing I did was run zfs get mountpoint -r Main).

So I restarted Truenas from the GUI just incase, and was able to import the pool with the GUI.

But it didn’t error this time :partying_face: and my shares/permission tiles were populated on the dataset page. Jellyfin is loading the media fine. I did restart Truenas a few times while troubleshooting before making this post. Not sure why its working now. Happy to send more information if that is helpful.

Thanks for you help @winnielinnie @SmallBarky @Samuel_Tai

1 Like

Please provide details of your hardware. This might be due to a slightly undersized power supply. It’s also worth doing some RAM tests, to see if you might have a marginal stick.

Lenovo P320 Tiny Workstation (ThinkStation) - Type 30C1 - 30C1S0WT00 :

Intel Core i5-7500T Processor(Core i5-7500T)

16GBDDR42400 + 8GBDDR42400 (the VM has 6GB)

512GB NVMe

NVIDIA P600

135W Lenovo PSU

Not sure where to start with RAM test, please can you advise?

For the RAM test, create a bootable USB from https://www.memtest86.com/.

6 GB is not recommended for TrueNAS. Minimum recommended is 8 GB, but TrueNAS runs much more comfortably and reliably with a minimum of 16 GB.

How are your HDDs connected within the P320? That 135W PSU may not be able to supply enough 5V to reliably power your HDDs. Or are you using the USB ports on the P320 to connect your HDDs? That’s also not recommended, and has been known to cause data loss.

1 Like