find_direct_disks(disk)
find_nvme_disks(disk)
- find_hp_disks(disk) if File.exist?("/usr/sbin/hpssacli")
+ find_hp_disks(disk) if File.exist?("/usr/sbin/ssacli")
find_megaraid_disks(disk) if File.exist?("/usr/sbin/megacli")
find_mpt1_disks(disk) if File.exist?("/usr/sbin/lsiutil")
find_mpt2_disks(disk) if File.exist?("/usr/sbin/sas2ircu")
array = nil
disk = nil
- IO.popen(%w(hpssacli controller all show config detail)).each do |line|
+ IO.popen(%w(ssacli controller all show config detail)).each do |line|
if line =~ /^Smart Array (\S+) /
controller = {
:id => devices[:controllers].count,
:controller => controller[:id],
:vendor => Regexp.last_match(4),
:model => Regexp.last_match(5),
- :bus => Regexp.last_match(1),
- :target => Regexp.last_match(2),
+ :sas_address => Regexp.last_match(6),
:arrays => []
}
disks.each do |disk|
slot = controllers[disk[:controller]][:pci_slot]
- bus = disk[:bus]
- target = disk[:target]
+ sas_address = "0x#{disk[:sas_address]}"
- if device = Dir.glob("/sys/bus/pci/devices/#{slot}/host*/port-*:*/end_device-*:*/target*:#{bus}:#{target}/*:#{bus}:#{target}:0/scsi_generic/sg*").first
- disk[:device] = "/dev/#{File.basename(device)}"
+ Dir.glob("/sys/bus/pci/devices/#{slot}/host*/port-*:*/end_device-*:*/sas_device/end_device-*:*").each do |sas_device|
+ if read_sysctl_file("#{sas_device}/sas_address") == sas_address
+ if device = Dir.glob("#{sas_device}/device/target*:0:*/*:0:*:0/scsi_generic/sg*").first
+ disk[:device] = "/dev/#{File.basename(device)}"
+ end
+ end
end
end
end