Opened 12 years ago
Last modified 12 years ago
#252 closed enhancement
add disks on megaraid sas controller to DEVICESCAN — at Version 2
Reported by: | Alex Samorukov | Owned by: | Alex Samorukov |
---|---|---|---|
Priority: | minor | Milestone: | |
Component: | all | Version: | 6.0 |
Keywords: | linux, megaraid | Cc: |
Description (last modified by )
I decided to add autoscan functionality for drives on MegaSAS controllers. Main motivation for this was that devices on such controllers having random numbers, from 0 to ~250 and it is very annoying to write smartd configuration (i used shell + MegaCli in the past). There is no ioctl documentation provided, so i did patch based on MegaCli tool behavior (with strace and LD_PRELAOD for IOCTL) and FreeBSD driver sources which contain similar code. What this patch is doing:
- In autoscan mode, if megaraid_sas_ioctl is found in /proc/devices it is trying to identify SCSI host number with megasas controllers using sysfs (/sys/class/scsi_host/hostN/proc_name). If sysfs is not mounted it scans first 16 buses. I believe that native tool do the same.
- If controller is found i am getting device list using driver ioctl and adding them to device list
Code changes:
- megaraid.h updated to include constant/structures to get drive list
- set_fd added to linux_smart_device. I need this to override is_open check in megaraid.
- -d megaraid allows to specify devices in pseudo /dev/bus/N format. We can`t easy get drive name from the bus number, and also it is possible that drive name is not exists at all (unconfigured RAID).
- Added private functions get_dev_megasas, megasas_dcmd_cmd and megasas_pd_get_list to the linux_smart_interface.
- I disabled "MegaRAID SAT layer is reportedly buggy" error. Everything was fixed after chk_cond check was added. I am unable to reproduce problem with different hardware.
- I added set_info().dev_type = strprintf("megaraid,%d", tgt) to set device number in type. Without it --scan will show just -"d megaraid" devices. Not sure if this is correct.
- scsiata.cpp - set device type as sat+<oldname> if scsidev->get_dev_type() is not "scsi".
Example:
[root@p2986890 smartmontools]# ./smartctl --scan /dev/sda -d scsi # /dev/sda, SCSI device /dev/bus/0 -d megaraid,5 # /dev/bus/0 [megaraid_disk_05], SCSI device /dev/bus/0 -d megaraid,7 # /dev/bus/0 [megaraid_disk_07], SCSI device [root@p2986890 smartmontools]# ./smartctl --scan-open # /dev/sda -d scsi # /dev/sda, SCSI device open failed: DELL or MegaRaid controller, please try adding '-d megaraid,N' /dev/bus/0 -d sat+megaraid,5 # /dev/bus/0 [megaraid_disk_05] [SAT], ATA device /dev/bus/0 -d sat+megaraid,7 # /dev/bus/0 [megaraid_disk_07] [SAT], ATA device [root@p2986890 smartmontools]# ./smartd -d smartd 6.1 2012-12-14 r3732M [x86_64-linux-2.6.32-279.14.1.el6.x86_64] (local build) Copyright (C) 2002-12, Bruce Allen, Christian Franke, www.smartmontools.org No configuration file /usr/local/etc/smartd.conf found, scanning devices glob(3) found no matches for pattern /dev/hd[a-t] glob(3) found no matches for pattern /dev/sd[a-c][a-z] Device: /dev/sda, open() failed: DELL or MegaRaid controller, please try adding '-d megaraid,N' Device: /dev/bus/0 [megaraid_disk_05], type changed from 'megaraid,5' to 'sat+megaraid,5' Device: /dev/bus/0 [megaraid_disk_05] [SAT], opened Device: /dev/bus/0 [megaraid_disk_05] [SAT], WDC WD1003FBYX-01Y7B1, S/N:WD-XXXX, WWN:XXXX, FW:01.01V02, 1.00 TB Device: /dev/bus/0 [megaraid_disk_05] [SAT], found in smartd database: Western Digital RE4 Serial ATA Device: /dev/bus/0 [megaraid_disk_05] [SAT], not capable of SMART Health Status check Device: /dev/bus/0 [megaraid_disk_05] [SAT], is SMART capable. Adding to "monitor" list. Device: /dev/bus/0 [megaraid_disk_07], type changed from 'megaraid,7' to 'sat+megaraid,7' Device: /dev/bus/0 [megaraid_disk_07] [SAT], opened Device: /dev/bus/0 [megaraid_disk_07] [SAT], WDC WD1003FBYX-01Y7B1, S/N:WD-XXXX, WWN:XXXX, FW:01.01V02, 1.00 TB Device: /dev/bus/0 [megaraid_disk_07] [SAT], found in smartd database: Western Digital RE4 Serial ATA Device: /dev/bus/0 [megaraid_disk_07] [SAT], not capable of SMART Health Status check Device: /dev/bus/0 [megaraid_disk_07] [SAT], is SMART capable. Adding to "monitor" list. Monitoring 2 ATA and 0 SCSI devices Device: /dev/bus/0 [megaraid_disk_05] [SAT], opened ATA device Device: /dev/bus/0 [megaraid_disk_05] [SAT], previous self-test completed without error Device: /dev/bus/0 [megaraid_disk_07] [SAT], opened ATA device Device: /dev/bus/0 [megaraid_disk_07] [SAT], previous self-test completed without error
Change History (3)
comment:1 by , 12 years ago
Description: | modified (diff) |
---|---|
Owner: | changed from | to
Status: | new → assigned |
comment:2 by , 12 years ago
Description: | modified (diff) |
---|
by , 12 years ago
Attachment: | patch.diff added |
---|
Note:
See TracTickets
for help on using tickets.
Updated patch with --scan-open fix