anchor.diff:    rescue Errno::ENOENT, Errno::EINVAL
     end
   
  -  def parse_disk_size(size)
  +  def parse_memory_size(size)
       if size =~ /^(\d+(?:\.\d+)?)\s*TB/i
  -      format "%dTB", Regexp.last_match(1).to_f * 2**40 / 1_000_000_000_000
  +      Regexp.last_match(1).to_f * 2**30
       elsif size =~ /^(\d+(?:\.\d+)?)\s*GB/i
  -      format "%dGB", Regexp.last_match(1).to_f * 2**30 / 1000000000
  +      Regexp.last_match(1).to_f * 2**20
       elsif size =~ /^(\d+(?:\.\d+)?)\s*MB/i
  -      format "%dGB", Regexp.last_match(1).to_f * 2**20 / 1000000000
  -    end
  +      Regexp.last_match(1).to_f * 2**10
  +    end
  +  end
  +
  +  def format_disk_size(kb)
  +    if kb == 0
  +      ""
  +    else
  +      kblog10 = Math.log10(kb)
  +
  +      if kblog10 >= 9
  +        format "%gTB", 10**(kblog10 - 9)
  +      elsif kblog10 >= 6
  +        format "%dGB", 10**(kblog10 - 6)
  +      else
  +        format "%dMB", 10**(kblog10 - 3)
  +      end
  +    end
  +  end
  +
  +  def memory_to_disk_size(size)
  +    format_disk_size(parse_memory_size(size))
     end
   
     def find_sas_device(address)
  
positive.code:   end
  
    def find_md_arrays(devices)
      File.new("/proc/mdstat", "r").each do |line|
        next unless line =~ /^(md\d+) : active raid(\d+)((?: [a-z]+\d+\[\d+\](?:\([A-Z]\))*)+)$/
  
        array = {
          :id => devices[:arrays].count,
          :device => "/dev/#{Regexp.last_match(1)}",
          :raid_level => Regexp.last_match(2),
          :disks => []
        }
  
        Regexp.last_match(3).scan(/ ([a-z]+)\d+\[\d+\](?:\([A-Z]\))*/).flatten.each do |device|
          if disk = devices[:disks].find { |d| d[:device] == "/dev/#{device}" }
            disk[:arrays] << array[:id]
            array[:disks] << disk[:id]
          end
        end
  
        devices[:arrays] << array
      end
    end
  
  
negative.code:             model = Regexp.last_match(2)
            end
  
            devices[:disks] << {
              :id => devices[:disks].count,
              :device => "/dev/#{File.basename(block)}",
              :vendor => vendor,
              :model => model,
              :firmware_version => read_sysctl_file("#{device}/rev"),
              :size => format_disk_size(size),
              :arrays => []
            }
          end
  