Adding full disk without partitioning to raidz2 pool breaks Storage UI
Description
Problem/Justification
None
Impact
None
Activity
Show:
William Gryzbowski July 14, 2023 at 3:34 PM
Operations not made through TrueNAS are not supported.
Thanks for the report though.
Automation for Jira July 8, 2023 at 9:21 AM
Thank you for submitting this TrueNAS Bug Report! So that we can quickly investigate your issue, please attach a Debug file and any other information related to this issue through our secure and private upload service below. Debug files can be generated in the UI by navigating to System -> Advanced -> Save Debug.
https://ixsystems.atlassian.net/servicedesk/customer/portal/15/group/37/create/153
Behaves as Intended
Pinned fields
Click on the next to a field label to start pinning.
Details
Details
Assignee
Triage Team
Triage TeamReporter
Ville-Pekka Vainio
Ville-Pekka VainioComponents
Fix versions
Affects versions
Priority
More fields
Time tracking
More fields
Time trackingKatalon Platform
Linked Test Cases, Katalon Defect Results, Katalon Studio Test Results
Katalon Platform
Linked Test Cases, Katalon Defect Results, Katalon Studio Test Results
Created July 8, 2023 at 9:21 AM
Updated February 27, 2025 at 9:27 PM
Resolved July 14, 2023 at 3:34 PM
I had a disk fail. I replaced the disk by using zfs commands from the command line. I didn’t partition the new disk, I added it to the pool as a whole disk. Now the Storage UI breaks with the following traceback:
Error: Traceback (most recent call last): File "/usr/lib/python3/dist-packages/middlewared/main.py", line 204, in call_method result = await self.middleware._call(message['method'], serviceobj, methodobj, params, app=self) File "/usr/lib/python3/dist-packages/middlewared/main.py", line 1344, in _call return await methodobj(*prepared_call.args) File "/usr/lib/python3/dist-packages/middlewared/schema.py", line 1246, in nf res = await f(*args, **kwargs) File "/usr/lib/python3/dist-packages/middlewared/schema.py", line 1378, in nf return await func(*args, **kwargs) File "/usr/lib/python3/dist-packages/middlewared/service.py", line 927, in query result = await self.middleware.call( File "/usr/lib/python3/dist-packages/middlewared/main.py", line 1395, in call return await self._call( File "/usr/lib/python3/dist-packages/middlewared/main.py", line 1344, in _call return await methodobj(*prepared_call.args) File "/usr/lib/python3/dist-packages/middlewared/schema.py", line 1378, in nf return await func(*args, **kwargs) File "/usr/lib/python3/dist-packages/middlewared/plugins/datastore/read.py", line 165, in query result = await self._queryset_serialize( File "/usr/lib/python3/dist-packages/middlewared/plugins/datastore/read.py", line 217, in _queryset_serialize return [ File "/usr/lib/python3/dist-packages/middlewared/plugins/datastore/read.py", line 218, in <listcomp> await self._extend(data, extend, extend_context, extend_context_value, select) File "/usr/lib/python3/dist-packages/middlewared/plugins/datastore/read.py", line 231, in _extend data = await self.middleware.call(extend, data, extend_context_value) File "/usr/lib/python3/dist-packages/middlewared/main.py", line 1395, in call return await self._call( File "/usr/lib/python3/dist-packages/middlewared/main.py", line 1355, 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 1258, in run_in_executor return await loop.run_in_executor(pool, functools.partial(method, *args, **kwargs)) File "/usr/lib/python3.9/concurrent/futures/thread.py", line 52, in run result = self.fn(*self.args, **self.kwargs) File "/usr/lib/python3/dist-packages/middlewared/plugins/pool.py", line 606, in pool_extend pool |= self.middleware.call_sync('pool.pool_normalize_info', pool['name']) File "/usr/lib/python3/dist-packages/middlewared/main.py", line 1414, in call_sync return self.run_coroutine(methodobj(*prepared_call.args)) File "/usr/lib/python3/dist-packages/middlewared/main.py", line 1454, in run_coroutine return fut.result() File "/usr/lib/python3.9/concurrent/futures/_base.py", line 433, in result return self.__get_result() File "/usr/lib/python3.9/concurrent/futures/_base.py", line 389, in __get_result raise self._exception File "/usr/lib/python3/dist-packages/middlewared/schema.py", line 1378, in nf return await func(*args, **kwargs) File "/usr/lib/python3/dist-packages/middlewared/schema.py", line 1246, in nf res = await f(*args, **kwargs) File "/usr/lib/python3/dist-packages/middlewared/plugins/pool.py", line 571, in pool_normalize_info 'topology': await self.middleware.call('pool.transform_topology', info['groups']), File "/usr/lib/python3/dist-packages/middlewared/main.py", line 1395, in call return await self._call( File "/usr/lib/python3/dist-packages/middlewared/main.py", line 1355, 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 1258, in run_in_executor return await loop.run_in_executor(pool, functools.partial(method, *args, **kwargs)) File "/usr/lib/python3.9/concurrent/futures/thread.py", line 52, in run result = self.fn(*self.args, **self.kwargs) File "/usr/lib/python3/dist-packages/middlewared/plugins/pool.py", line 508, in transform_topology x[key] = self.transform_topology(x[key], dict(options, geom_scan=False)) File "/usr/lib/python3/dist-packages/middlewared/plugins/pool.py", line 511, in transform_topology x[i] = self.transform_topology(x[i], dict(options, geom_scan=False)) File "/usr/lib/python3/dist-packages/middlewared/plugins/pool.py", line 508, in transform_topology x[key] = self.transform_topology(x[key], dict(options, geom_scan=False)) File "/usr/lib/python3/dist-packages/middlewared/plugins/pool.py", line 511, in transform_topology x[i] = self.transform_topology(x[i], dict(options, geom_scan=False)) File "/usr/lib/python3/dist-packages/middlewared/plugins/pool.py", line 492, in transform_topology disk = self.middleware.call_sync('disk.label_to_disk', *args) File "/usr/lib/python3/dist-packages/middlewared/main.py", line 1425, in call_sync return methodobj(*prepared_call.args) File "/usr/lib/python3/dist-packages/middlewared/plugins/disk_/disk_info.py", line 122, in label_to_disk return self.get_disk_from_partition(part_disk) if part_disk else None File "/usr/lib/python3/dist-packages/middlewared/plugins/disk_/disk_info.py", line 128, in get_disk_from_partition with open(os.path.join('/sys/class/block', part_name, 'partition'), 'r') as f: FileNotFoundError: [Errno 2] No such file or directory: '/sys/class/block/sdb/partition'
I may just try to remove the disk from the pool, wipe it and it via the web UI again to fix this, but I wanted to report it to you first.