Disk
Disk list main info
You can use the disk sub-menu to query and manage the available disks in the cluster.
To display all available disks in all server instances in the cluster:
# storpool disk list
disk | server | size | used | est.free | % | free entries | on-disk size | allocated objects | errors | flags
1101 | 11.1 | 893 GiB | 2.6 GiB | 857 GiB | 0 % | 3719946 | 664 KiB | 41000 / 930000 | 0 / 0 |
1102 | 11.1 | 446 GiB | 2.6 GiB | 424 GiB | 1 % | 1919946 | 664 KiB | 41000 / 480000 | 0 / 0 |
1103 | 11.0 | 893 GiB | 2.6 GiB | 857 GiB | 0 % | 3719948 | 660 KiB | 41000 / 930000 | 0 / 0 |
1104 | 11.0 | 446 GiB | 2.6 GiB | 424 GiB | 1 % | 1919946 | 664 KiB | 41000 / 480000 | 0 / 0 |
1105 | 11.0 | 446 GiB | 2.6 GiB | 424 GiB | 1 % | 1919947 | 664 KiB | 41000 / 480000 | 0 / 0 |
1111 | 11.1 | 930 GiB | 2.6 GiB | 893 GiB | 0 % | 974950 | 716 KiB | 41000 / 975000 | 0 / 0 |
1112 | 11.1 | 930 GiB | 2.6 GiB | 893 GiB | 0 % | 974949 | 736 KiB | 41000 / 975000 | 0 / 0 |
1113 | 11.1 | 930 GiB | 2.6 GiB | 893 GiB | 0 % | 974943 | 760 KiB | 41000 / 975000 | 0 / 0 |
1114 | 11.1 | 930 GiB | 2.6 GiB | 893 GiB | 0 % | 974937 | 844 KiB | 41000 / 975000 | 0 / 0 |
[snip]
1425 | 14.1 | 931 GiB | 2.6 GiB | 894 GiB | 0 % | 974980 | 20 MiB | 40100 / 975000 | 0 / 0 |
1426 | 14.1 | 931 GiB | 2.6 GiB | 894 GiB | 0 % | 974979 | 20 MiB | 40100 / 975000 | 0 / 0 |
----------------------------------------------------------------------------------------------------------------------------------------
47 | 8.0 | 30 TiB | 149 GiB | 29 TiB | 0 % | 53308967 | 932 MiB | 1844600 / 32430000 | 0 / 0 |
To mark a device as temporarily unavailable:
# storpool disk 1111 eject
OK
Ejecting a disk from the cluster will stop the data replication for this disk, but will keep the metadata about the placement groups in which it participated and the volume objects from these groups it contained.
Note
The command above will refuse to eject the disk if this operation
would lead to volumes or snapshots going into the down
state
(usually when the last up-to-date copy for some parts of a
volume/snapshot is on this disk).
This disk will be shown as missing in the storpool disk list
output, for
example:
# storpool disk list
disk | server | size | used | est.free | % | free entries | on-disk size | allocated objects | errors | flags
[snip]
1422 | 14.1 | - | - | - | - % | - | - | - / - | - / - |
[snip]
Attention
This operation leads to degraded redundancy for all volumes and snapshots that have data on the ejected disk.
Such a disk will not return by itself back into the cluster, and would have to
be manually reinserted by removing its EJECTED flag with
storpool_initdisk -r /dev/$path
.
Disk list additional information
To display additional information about the disks:
# storpool disk list info
disk | server | device | model | serial | description | flags |
1101 | 11.1 | 0000:04:00.0-p1 | SAMSUNG MZQLB960HAJR-00007 | S437NF0M500149 | | S |
1102 | 11.1 | /dev/sdj1 | Micron_M500DC_MTFDDAK480MBB | 14250C6368E5 | | S |
1103 | 11.0 | /dev/sdi1 | SAMSUNG_MZ7LH960HAJR-00005 | S45NNE0M229767 | | S |
1104 | 11.0 | /dev/sdd1 | Micron_M500DC_MTFDDAK480MBB | 14250C63689B | | S |
1105 | 11.0 | /dev/sdc1 | Micron_M500DC_MTFDDAK480MBB | 14250C6368EC | | S |
1111 | 11.1 | /dev/sdl1 | Hitachi_HUA722010CLA330 | JPW9K0N13243ZL | | W |
1112 | 11.1 | /dev/sda1 | Hitachi_HUA722010CLA330 | JPW9J0N13LJEEV | | W |
1113 | 11.1 | /dev/sdb1 | Hitachi_HUA722010CLA330 | JPW9J0N13N694V | | W |
1114 | 11.1 | /dev/sdm1 | Hitachi_HUA722010CLA330 | JPW9K0N132R7HL | | W |
[snip]
1425 | 14.1 | /dev/sdm1 | Hitachi_HDS721050CLA360 | JP1532FR1BY75C | | W |
1426 | 14.1 | /dev/sdh1 | Hitachi_HUA722010CLA330 | JPW9K0N13RS95L | | W, J |
To set additional information for some of the disks shown in the output of
storpool disk list info
:
# storpool disk 1111 description HBA2_port7
OK
# storpool disk 1104 description FAILING_SMART
OK
Disk list server internal information
To display internal statistics about each disk:
# storpool disk list internal
--------------------------------------------------------------------------------------------------------------------------------------------------------
| disk | server | aggregate scores | wbc pages | scrub bw | scrub ETA | last scrub completed |
--------------------------------------------------------------------------------------------------------------------------------------------------------
| 1101 | 11.1 | 0 | 0 | 0 | - + - / - | - | - | 2022-09-08 18:23:07 |
| 1102 | 11.1 | 0 | 0 | 0 | - + - / - | - | - | 2022-09-08 18:23:07 |
| 1103 | 11.0 | 0 | 0 | 0 | - + - / - | - | - | 2022-09-08 18:23:08 |
| 1104 | 11.0 | 0 | 0 | 0 | - + - / - | - | - | 2022-09-08 18:23:09 |
| 1105 | 11.1 | 0 | 0 | 0 | - + - / - | - | - | 2022-09-08 18:23:10 |
| 1111 | 11.0 | 0 | 0 | 0 | 0 + 0 / 2560 | - | - | 2022-09-08 18:23:12 |
| 1112 | 11.1 | 0 | 0 | 0 | 0 + 0 / 2560 | - | - | 2022-09-08 18:23:15 |
| 1113 | 11.1 | 0 | 0 | 0 | 0 + 0 / 2560 | - | - | 2022-09-08 18:23:17 |
| 1114 | 11.1 | 0 | 0 | 0 | 0 + 0 / 2560 | - | - | 2022-09-08 18:23:13 |
[snip]
| 1425 | 14.1 | 0 | 0 | 0 | 0 + 0 / 2560 | - | - | 2022-09-08 18:23:15 |
| 1426 | 14.1 | 0 | 0 | 0 | 0 + 0 / 2560 | - | - | 2022-09-08 18:23:19 |
--------------------------------------------------------------------------------------------------------------------------------------------------------
The sections in this output are as follows:
aggregate scores
Internal values representing how much data is about to be defragmented on the particular drive. Usually between 0 and 1, on heavily loaded clusters the rightmost column might get into the hundreds or even thousands if some drives are severely loaded.
wbc pages
Internal statistics for each drive that have the write back cache or journaling in StorPool enabled.
scrub bw
The scrubbing speed in MB/s.
scrub ETA
Approximate time/date when the scrubbing operation will complete for this drive.
last scrub completed
The last time/date when the drive was scrubbed.
Note
The default installation includes a cron job on the management nodes that starts a scrubbing job for one drive per node. You can increase the number of disks that are scrubbing in parallel per node (the example is for four drives) by running the following:
# . /usr/lib/storpool/storpool_confget.sh
# storpool_q -d '{"set":{"scrubbingDiskPerNode":"4"}}' KV/Set/conf
And you can see the number of drives that are scrubbing per node with:
# . /usr/lib/storpool/storpool_confget.sh
# storpool_q KV/Get/conf/scrubbingDiskPerNode | jq -re '.data.pairs.scrubbingDiskPerNode'
To configure a local or remote recovery override for a particular
disk that is different than the overrides configured with mgmtConfig
:
# storpool disk 1111 maxRecoveryRequestsOverride local 2
OK
# storpool disk 1111 maxRecoveryRequestsOverride remote 4
OK
To remove a configured override:
# storpool disk 1111 maxRecoveryRequestsOverride remote clear
OK
This will remove the override, and the default configured for the whole cluster at Management configuration will take precedence.
Disk list performance information
To display performance related in-server statistics for each disk use:
# storpool disk list perf
| latencies | thresholds | times exceeded | flags
disk | disk (avg) | disk (max) | jrn (avg) | jrn (max) | disk | journal | disk | journal |
2301 | 0.299ms | 0.400ms | - | - | 0.000ms | - | 0 | - |
2302 | 0.304ms | 0.399ms | - | - | 0.000ms | - | 0 | - |
2303 | 0.316ms | 0.426ms | - | - | 0.000ms | - | 0 | - |
[snip]
2621 | 4.376ms | 4.376ms | 0.029ms | 0.029ms | 0.000ms | 0.000ms | 0 | 0 |
2622 | 4.333ms | 4.333ms | 0.025ms | 0.025ms | 0.000ms | 0.000ms | 0 | 0 |
Note
Global latency thresholds are configured through the mgmtConfig section.
To configure a single disk latency threshold override use:
# storpool disk 2301 latencyLimitOverride disk 500
OK
# storpool disk list perf
| latencies | thresholds | times exceeded | flags
disk | disk (avg) | disk (max) | jrn (avg) | jrn (max) | disk | journal | disk | journal |
2301 | 0.119ms | 0.650ms | - | - | 500.000ms | - | 0 | - | D
[snip]
The D
flag means there is a disk latency override, visible in the thresholds
section.
Similarly, to configure a single disk journal latency threshold override:
# storpool disk 2621 latencyLimitOverride journal 100
OK
storpool disk list perf
| latencies | thresholds | times exceeded | flags
disk | disk (avg) | disk (max) | jrn (avg) | jrn (max) | disk | journal | disk | journal |
[snip]
2621 | 8.489ms | 13.704ms | 0.052ms | 0.669ms | 0.000ms | 100.000ms | 0 | 0 | J
The J
flag means there is a disk journal latency override, visible in the
thresholds section.
To override a single disk to no longer oblige the global limit:
# storpool disk 2301 latencyLimitOverride disk unlimited
OK
This will show the disk threshold as unlimited
:
# storpool disk list perf
| latencies | thresholds | times exceeded | flags
disk | disk (avg) | disk (max) | jrn (avg) | jrn (max) | disk | journal | disk | journal |
2301 | 0.166ms | 0.656ms | - | - | unlimited | - | 0 | - | D
To clear an override and leave the global limit:
# storpool disk 2601 latencyLimitOverride disk off
OK
# storpool disk 2621 latencyLimitOverride journal off
OK
If a disk was ejected due to an excessive latency the server will keep a log from the last 128 requests sent to the disk, to list them use:
# storpool disk 2601 ejectLog
log creation time | time of first event
2022-03-31 17:50:16 | 2022-03-31 17:31:08 +761,692usec
req# | start | end | latency | addr | size | op
1 | +0us | +424us | 257us | 0x0000000253199000 | 128 KiB | DISK_OP_READ
[snip]
126 | +1147653582us | +1147653679us | 97us | 0x0000000268EBE000 | 12 KiB | DISK_OP_WRITE_FUA
127 | +1147654920us | +1147655192us | 272us | 0x0000000012961000 | 128 KiB | DISK_OP_WRITE_FUA
total | maxTotal | limit | generation | times exceeded (for this eject)
23335us | 100523us | 1280us | 15338 | 1
The same data is available if a disk journal was ejected after breaching the threshold with:
# storpool disk 2621 ejectLog journal
[snip]
(the output is similar to that of the disk ejectLog above)
Ejecting disks and internal server tests
When a server controlling a disk notices some issues with it (like a write error, or stalled request above a predefined threshold), the disk is also marked as “test pending”. This happens when there are many transient errors when a disk drive (or its controller) stalls a request for more than a predefined threshold.
Note
See also Automatic drive tests.
An eject option is available for manually initiating such a test, which will flag the disk that it requires test and will eject it. The server instance will then perform a quick set of non-intrusive read-write tests on this disk and will return it back into the cluster if all tests did well; for example:
# storpool disk 2331 eject test
OK
The tests are done usually couple of seconds up to a minute, to check the results from the last test:
# storpool disk 2331 testInfo
times tested | test pending | read speed | write speed | read max latency | write max latency | failed
1 | no | 1.0 GiB/sec | 971 MiB/sec | 8 msec | 4 msec | no
If the disk was already marked for testing the option “now” will skip the test on the next attempt to re-open the disk:
# storpool disk 2301 eject now
OK
Attention
Note that this is exactly the same as “eject”, the disk would have to be manually returned into the cluster.
To mark a disk as unavailable by first re-balancing all data out to the other disks in the cluster and only then eject it:
# storpool disk 1422 softEject
OK
Balancer auto mode currently OFF. Must be ON for soft-eject to complete.
Note
This option requires StorPool balancer to be started after the above was issued; for details, see Balancer.
To remove a disk from the list of reported disks and all placement groups it participates in:
# storpool disk 1422 forget
OK
To get detailed information about given disk:
# storpool disk 1101 info
agAllocated | agCount | agFree | agFreeing | agFull | agMaxSizeFull | agMaxSizePartial | agPartial
7 | 462 | 455 | 1 | 0 | 0 | 1 | 1
entriesAllocated | entriesCount | entriesFree | sectorsCount
50 | 1080000 | 1079950 | 501215232
objectsAllocated | objectsCount | objectsFree | objectStates
18 | 270000 | 269982 | ok:18
serverId | 1
id | objectsCount | onDiskSize | storedSize | objectStates
#bad_id | 1 | 0 B | 0 B | ok:1
#clusters | 1 | 8.0 KiB | 768 B | ok:1
#drive_state | 1 | 8.0 KiB | 4.0 B | ok:1
#drives | 1 | 100 KiB | 96 KiB | ok:1
#iscsi_config | 1 | 12 KiB | 8.0 KiB | ok:1
[snip]
To get detailed information about the objects on a particular disk:
# storpool disk 1101 list
object name | stored size | on-disk size | data version | object state | parent volume
#bad_id:0 | 0 B | 0 B | 1480:2485 | ok (1) |
#clusters:0 | 768 B | 8.0 KiB | 711:992 | ok (1) |
#drive_state:0 | 4.0 B | 8.0 KiB | 1475:2478 | ok (1) |
#drives:0 | 96 KiB | 100 KiB | 1480:2484 | ok (1) |
[snip]
test:4094 | 0 B | 0 B | 0:0 | ok (1) |
test:4095 | 0 B | 0 B | 0:0 | ok (1) |
----------------------------------------------------------------------------------------------------
4115 objects | 394 KiB | 636 KiB | | |
To get detailed information about the active requests that the disk is performing at the moment:
# storpool disk 1101 activeRequests
-----------------------------------------------------------------------------------------------------------------------------------
| request ID | request IDX | volume | address | size | op | time active |
-----------------------------------------------------------------------------------------------------------------------------------
| 9226469746279625682:285697101441249070 | 9 | testvolume | 85276782592 | 4.0 KiB | read | 0 msec |
| 9226469746279625682:282600876697431861 | 13 | testvolume | 96372936704 | 4.0 KiB | read | 0 msec |
| 9226469746279625682:278097277070061367 | 19 | testvolume | 46629707776 | 4.0 KiB | read | 0 msec |
| 9226469746279625682:278660227023482671 | 265 | testvolume | 56680042496 | 4.0 KiB | write | 0 msec |
-----------------------------------------------------------------------------------------------------------------------------------
To issue retrim operation on a disk (available for SSD disks only):
# storpool disk 1101 retrim
OK
To start, pause, or continue a scrubbing operation for a disk:
# storpool disk 1101 scrubbing start
OK
# storpool disk 1101 scrubbing pause
OK
# storpool disk 1101 scrubbing continue
OK
Note
Use storpool disk list internal
to check the status of a running
scrub operation or when was the last completed scrubbing operation for
this disk.