OpenSolaris/OpenIndiana utility to manage drive and map wmn device name (c1txxx) to real drive using lsi sas controller — Read more
This script will hopefully make your life easier if you use ZFS on OpenSolaris/OpenIndiana with LSI controllers and some kind of backplane.
It can:
- list connected drives, and see the mapping between wmn device name (c1txxx) and their physical location (controller, enclosure, slot);
- turn the error led of a drive on and off (for easy identification of the drive in large enclosures with many disks);
- be used as a pipe to enhance the output of programs like
iostat
to annotate disk information with the location of each disk.
It's a work in progress. It works for me, but I don't have the time to polish or clean it up; so if you want to add your favourite feature or fix some nasty bug, feel free to contribute.
You have to get the sas2ircu tool. Install it in /usr/sbin, or edit the path in the file). An outdated revision is available here.
There is some work in progress for smartmontools support.
Everything happens through a CLI:
# ./diskmap.py
Diskmap - berilia>
You can also run individual commands directly when invoking the program:
# ./diskmap.py ledoff all
You need to run discover whenever the layout has changed (disk have been added/removed). It will populate a cache, which will in turn be used by other commands.
Example:
Diskmap - berilia> discover
Warning : Got the serial 5629293 from prtconf, but can't find it in disk detected by sas2ircu (disk removed/not on backplane ?)
Warning : Got the serial 5629293 from prtconf, but can't find it in disk detected by sas2ircu (disk removed/not on backplane ?)
Warning : Got the disk /dev/rdsk/c3t0d0 from zpool status, but can't find it in disk detected by sas2ircu (disk removed ?)
Warning : Got the disk /dev/rdsk/c3t1d0 from zpool status, but can't find it in disk detected by sas2ircu (disk removed ?)
List all the disks, along with their associated slot, model, capacity, state, pool, and usage.
The format for the slot is <ctrl>:<enclosureid>:<drivenumber>
.
Example:
Diskmap - berilia> disks
0:02:00 c1t500151795944D1F0d0 INTEL SSDSA2M080 80.0G Ready (RDY) rpool: mirror-0 / data: cache
0:02:01 c1t50014EE6013FA92Ad0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-12
0:02:02 c1t50014EE058037AA6d0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-16
0:02:03 c1t5001517959419710d0 INTEL SSDSA2M080 80.0G Ready (RDY) rpool: mirror-0 / data: cache
0:02:04 c1t50014EE6AB8F0F8Cd0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-11
0:02:05 c1t50014EE002AE45C0d0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-16
0:02:06 c1t500151795941982Bd0 INTEL SSDSA2M080 80.0G Ready (RDY) rpool: mirror-0 / data: cache
0:02:07 c1t50014EE6AB8F2BC5d0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-10
0:02:08 c1t50014EE0AD591F51d0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-15
0:02:09 c1t50014EE600E466F2d0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-14
0:02:10 c1t50014EE058037F90d0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-15
0:02:11 c1t50014EE0AD00308Fd0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-3
1:02:00 c1t50014EE00295E662d0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-11
1:02:01 c1t50014EE00295E07Fd0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-7
1:02:02 c1t50014EE0AD40CB43d0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-2
1:02:03 c1t50014EE0AD40BE62d0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-1
1:02:04 c1t50014EE600FE429Ed0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-13
1:02:05 c1t50014EE6ABA7418Fd0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-10
1:02:06 c1t50014EE00295E6B4d0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-7
1:02:07 c1t50014EE0AD40C469d0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-2
1:02:08 c1t50014EE0AD40C373d0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-1
1:02:09 c1t50014EE057EB1AA1d0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-6
1:02:10 c1t50014EE65639A59Fd0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-12
1:02:11 c1t50014EE6AB8EEE8Fd0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-4
1:02:12 c1t50014EE600FE548Cd0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: spares
1:02:13 c1t50014EE0AD40CDAEd0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-3
1:02:14 c1t50014EE057EAEB0Fd0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-6
1:02:15 c1t50014EE0AD3BF57Dd0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-0
1:02:16 c1t50014EE600E4A577d0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-13
1:02:17 c1t50014EE6ABEA298Fd0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-9
1:02:18 c1t50014EE0AD3C068Cd0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-0
1:02:19 c1t50014EE057E63E46d0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-4
1:02:20 c1t50014EE057E64BBAd0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-5
1:02:21 c1t50014EE057E6558Dd0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-5
1:02:22 c1t50014EE6ABDA37BEd0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-9
1:02:23 c1t50014EE0AD592031d0 WDC WD2002FAEX-0 2.0T Ready (RDY) data: mirror-14
Drives : 36 Total Capacity : 66.3T
You can turn on and off the error LEDs of individual drives.
Examples:
Diskmap - berilia> ledon c1t50014EE6ABEA298Fd0
Turning leds on : 1/1
Diskmap - berilia> ledon 1:02:16
Turning leds on : 1/1
Diskmap - berilia> ledoff all
Turning leds on : 36/36
Various input format are supported; use completion to see them all.
List detected enclosures on your system. The main purpose is to give you the enclosures ID and define aliases.
Example:
Diskmap - berilia> enclosures
{'50030480:0070d090': {'controller': 1L,
'id': '50030480:0070d090',
'index': 1L,
'numslot': 8L},
'50030480:0070d320': {'controller': 0L,
'id': '50030480:0070d320',
'index': 1L,
'numslot': 8L},
'50030480:0075e67f': {'controller': 0L,
'id': '50030480:0075e67f',
'index': 2L,
'numslot': 13L},
'50030480:009f8c7f': {'controller': 1L,
'id': '50030480:009f8c7f',
'index': 2L,
'numslot': 25L}}
Give an alias to an enclosure. You need the enclosure ID as shown by enclosures
.
Examples:
Diskmap - berilia> alias 50030480:0075e67f BCK
Diskmap - berilia> alias 50030480:009f8c7f FNT
Diskmap - berilia> alias
{'50030480:0075e67f': 'BCK', '50030480:009f8c7f': 'FNT'}
The program can also be used in a pipe, to enhance the standard output of another program to add device locations to the output of the program.
Example (assuming the aliases defined above):
# iostat -x -e -n 1 | ./diskmap.py
extended device statistics ---- errors ---
r/s w/s kr/s kw/s wait actv wsvc_t asvc_t %w %b s/w h/w trn tot device
0.0 0.0 0.0 1.0 0.0 0.0 2.2 0.2 0 0 0 0 0 0 c3t0d0
0.0 0.0 0.0 1.0 0.0 0.0 2.2 0.2 0 0 0 0 0 0 c3t1d0
6.1 1.1 78.5 89.2 0.0 0.0 0.0 2.4 0 0 2 2 5 9 c1t5001517959419710d0/BCK03
6.2 1.1 79.4 89.2 0.0 0.0 0.0 2.3 0 0 2 2 7 11 c1t500151795944D1F0d0/BCK00
6.1 1.1 78.6 89.3 0.0 0.0 0.0 2.4 0 0 2 3 13 18 c1t500151795941982Bd0/BCK06
2.9 10.2 57.0 174.7 0.0 0.0 0.0 1.7 0 1 2 0 0 2 c1t50014EE0AD00308Fd0/BCK11
2.8 9.6 56.2 172.8 0.0 0.0 0.0 3.0 0 1 2 0 0 2 c1t50014EE057EB1AA1d0/FNT09
2.8 9.8 56.1 174.5 0.0 0.0 0.0 2.9 0 1 2 0 0 2 c1t50014EE0AD40BE62d0/FNT03
0.6 3.0 12.4 34.2 0.0 0.0 0.0 2.2 0 0 2 0 0 2 c1t50014EE00295E662d0/FNT00
2.8 9.8 56.3 174.5 0.0 0.0 0.0 3.0 0 1 2 0 0 2 c1t50014EE0AD40C373d0/FNT08
2.8 9.9 56.3 174.4 0.0 0.0 0.0 2.9 0 1 2 0 0 2 c1t50014EE0AD40CB43d0/FNT02
2.8 9.7 56.4 174.5 0.0 0.0 0.0 3.0 0 1 2 0 0 2 c1t50014EE00295E6B4d0/FNT06
3.0 9.9 68.1 175.5 0.0 0.0 0.0 3.3 0 1 2 0 0 2 c1t50014EE057E63E46d0/FNT19
2.8 9.9 56.4 174.4 0.0 0.0 0.0 2.9 0 1 2 0 0 2 c1t50014EE0AD40C469d0/FNT07
2.8 9.3 55.4 169.4 0.0 0.0 0.0 3.0 0 1 2 0 0 2 c1t50014EE057E64BBAd0/FNT20
2.8 10.0 56.5 175.6 0.0 0.0 0.0 2.9 0 1 2 0 0 2 c1t50014EE0AD3C068Cd0/FNT18
2.8 9.3 55.6 169.4 0.0 0.0 0.0 3.0 0 1 2 0 0 2 c1t50014EE057E6558Dd0/FNT21
2.9 10.0 56.7 175.6 0.0 0.0 0.0 2.9 0 1 2 0 0 2 c1t50014EE0AD3BF57Dd0/FNT15
2.8 9.9 56.6 174.7 0.0 0.0 0.0 2.9 0 1 2 0 0 2 c1t50014EE0AD40CDAEd0/FNT13
2.9 9.5 56.7 172.8 0.0 0.0 0.0 3.0 0 1 2 0 0 2 c1t50014EE057EAEB0Fd0/FNT14
2.8 9.7 56.5 174.5 0.0 0.0 0.0 3.0 0 1 2 0 0 2 c1t50014EE00295E07Fd0/FNT01
1.6 7.8 36.7 94.5 0.0 0.0 0.0 1.7 0 0 2 0 0 2 c1t50014EE600E466F2d0/BCK09
1.6 7.7 36.5 93.9 0.0 0.0 0.0 1.6 0 0 2 0 0 2 c1t50014EE058037F90d0/BCK10
1.6 7.4 37.1 91.8 0.0 0.0 0.0 1.6 0 0 2 0 0 2 c1t50014EE6013FA92Ad0/BCK01
1.5 7.4 35.9 91.8 0.0 0.0 0.0 1.6 0 0 2 0 0 2 c1t50014EE058037AA6d0/BCK02
1.5 8.5 35.0 100.8 0.0 0.0 0.0 2.3 0 0 2 0 0 2 c1t50014EE6ABA7418Fd0/FNT05
1.5 7.4 36.0 91.8 0.0 0.0 0.0 1.6 0 0 2 0 0 2 c1t50014EE002AE45C0d0/BCK05
1.5 7.8 34.0 94.4 0.0 0.0 0.0 2.4 0 0 2 0 0 2 c1t50014EE600FE429Ed0/FNT04
1.5 7.9 36.0 93.1 0.0 0.0 0.0 1.7 0 0 2 0 0 2 c1t50014EE6AB8F0F8Cd0/BCK04
1.5 7.4 34.2 91.8 0.0 0.0 0.0 2.6 0 0 2 9 32 43 c1t50014EE65639A59Fd0/FNT10
1.7 9.0 36.2 107.5 0.0 0.0 0.0 2.4 0 0 2 0 0 2 c1t50014EE6ABEA298Fd0/FNT17
1.6 7.7 36.6 93.9 0.0 0.0 0.0 1.6 0 0 2 0 0 2 c1t50014EE0AD591F51d0/BCK08
1.6 8.4 37.3 100.8 0.0 0.0 0.0 1.6 0 0 2 0 0 2 c1t50014EE6AB8F2BC5d0/BCK07
1.5 7.8 33.8 94.4 0.0 0.0 0.0 2.5 0 0 2 0 0 2 c1t50014EE600E4A577d0/FNT16
1.5 7.8 33.7 94.5 0.0 0.0 0.0 2.4 0 0 2 0 0 2 c1t50014EE0AD592031d0/FNT23
1.7 9.0 36.4 107.5 0.0 0.0 0.0 2.4 0 1 2 0 0 2 c1t50014EE6ABDA37BEd0/FNT22
2.2 9.3 47.3 122.1 0.0 0.0 0.0 3.2 0 1 2 0 0 2 c1t50014EE6AB8EEE8Fd0/FNT11
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.1 0 0 0 0 0 0 c1t50014EE600FE548Cd0/FNT12
See how BCK and FNT (as well as drive number in the enclosure) has been added to the output.