Détecter un disque SSD sous Linux

Ayant un parc de serveurs dédiés avec des configurations matérielles diverses et variées (disques SATA, SAS, SSD …) j’ai récemment eu le besoin de déterminer si un disque est un SSD, ou pas.

L’objectif ? Créer des customs facts pour affiner la configuration de certains services comme MySQL via Puppet, enrichir mon inventaire …

Après quelques recherches je suis tombé sur cette solution :

cat /sys/block/sda/queue/rotational

La valeur 0 est retournée pour les disques SSD, 1 pour ceux à plateaux.

Mis en pratique avec Facter, cela donne quelque chose dans ce style :

require 'facter'

Facter.add('ssd') do
  confine :kernel => 'Linux'

  ssd = []
  Facter::value('blockdevices').split(',').each do |disk|
    file = "/sys/block/#{disk}/queue/rotational"
    output = Facter::Util::FileRead.read(file)
    ssd.push(disk) if output.to_i == 0
  end

  setcode { ssd.join(',') }
end

Si vous connaissez d’autres solutions, je suis preneur !