Example #1
0
def detect_disks(hw_lst):
    """Detect disks."""

    names = diskinfo.disknames()
    sizes = diskinfo.disksizes(names)
    disks = [name for name, size in sizes.items() if size > 0]
    hw_lst.append(('disk', 'logical', 'count', str(len(disks))))
    for name in disks:
        diskinfo.get_disk_info(name, sizes, hw_lst)

        # nvme devices do not need standard cache mechanisms
        if not name.startswith('nvme'):
            diskinfo.get_disk_cache(name, hw_lst)

        diskinfo.get_disk_id(name, hw_lst)

        # smartctl support
        # run only if smartctl command is there
        if which("smartctl"):
            if name.startswith('nvme'):
                sys.stderr.write('Reading SMART for nvme\n')
                smart_utils.read_smart_nvme(hw_lst, name)
            else:
                smart_utils.read_smart(hw_lst, "/dev/%s" % name)
        else:
            sys.stderr.write("Cannot find smartctl, exiting\n")
Example #2
0
def detect_disks(hw_lst):
    'Detect disks.'
    names = diskinfo.disknames()
    sizes = diskinfo.disksizes(names)
    disks = [name for name, size in sizes.items() if size > 0]
    hw_lst.append(('disk', 'logical', 'count', str(len(disks))))
    for name in disks:
        hw_lst.append(('disk', name, 'size', str(sizes[name])))
        item_list = [
            'device/vendor', 'device/model', 'device/rev',
            'queue/optimal_io_size', 'queue/physical_block_size',
            'queue/rotational'
        ]
        for my_item in item_list:
            try:
                with open('/sys/block/%s/%s' % (name, my_item), 'r') as dev:
                    hw_lst.append(('disk', name, my_item.split('/')[1],
                                   dev.readline().rstrip('\n').strip()))
            except Exception as excpt:
                sys.stderr.write('Failed at getting disk information '
                                 'at /sys/block/%s/device/%s: %s\n' %
                                 (name, my_item, str(excpt)))

        item_list = ['WCE', 'RCD']
        item_def = {'WCE': 'Write Cache Enable', 'RCD': 'Read Cache Disable'}
        for my_item in item_list:
            sdparm_cmd = Popen("sdparm -q --get=%s /dev/%s | "
                               "awk '{print $2}'" % (my_item, name),
                               shell=True,
                               stdout=PIPE,
                               universal_newlines=True)
            for line in sdparm_cmd.stdout:
                hw_lst.append(('disk', name, item_def.get(my_item),
                               line.rstrip('\n').strip()))

        # In some VMs, the disk-by id doesn't exists
        if os.path.exists('/dev/disk/by-id/'):
            for entry in os.listdir('/dev/disk/by-id/'):
                idp = os.path.realpath('/dev/disk/by-id/' + entry).split('/')
                if idp[-1] == name:
                    id_name = "id"
                    if entry.startswith('wwn'):
                        id_name = "wwn-id"
                    elif entry.startswith('scsi'):
                        id_name = "scsi-id"
                    hw_lst.append(('disk', name, id_name, entry))

        detect_utils.read_SMART(hw_lst, "/dev/%s" % name)
Example #3
0
def detect_disks(hw_lst):
    "Detect disks."
    names = diskinfo.disknames()
    sizes = diskinfo.disksizes(names)
    disks = [name for name, size in sizes.items() if size > 0]
    hw_lst.append(("disk", "logical", "count", str(len(disks))))
    for name in disks:
        hw_lst.append(("disk", name, "size", str(sizes[name])))
        item_list = [
            "device/vendor",
            "device/model",
            "device/rev",
            "queue/optimal_io_size",
            "queue/physical_block_size",
            "queue/rotational",
        ]
        for my_item in item_list:
            try:
                with open("/sys/block/%s/%s" % (name, my_item), "r") as dev:
                    hw_lst.append(("disk", name, my_item.split("/")[1], dev.readline().rstrip("\n").strip()))
            except Exception as excpt:
                sys.stderr.write(
                    "Failed at getting disk information "
                    "at /sys/block/%s/device/%s: %s\n" % (name, my_item, str(excpt))
                )

        item_list = ["WCE", "RCD"]
        item_def = {"WCE": "Write Cache Enable", "RCD": "Read Cache Disable"}
        for my_item in item_list:
            sdparm_cmd = Popen(
                "sdparm -q --get=%s /dev/%s | " "awk '{print $2}'" % (my_item, name), shell=True, stdout=PIPE
            )
            for line in sdparm_cmd.stdout:
                hw_lst.append(("disk", name, item_def.get(my_item), line.rstrip("\n").strip()))

        # In some VMs, the disk-by id doesn't exists
        if os.path.exists("/dev/disk/by-id/"):
            for entry in os.listdir("/dev/disk/by-id/"):
                idp = os.path.realpath("/dev/disk/by-id/" + entry).split("/")
                if idp[-1] == name:
                    id_name = "id"
                    if entry.startswith("wwn"):
                        id_name = "wwn-id"
                    elif entry.startswith("scsi"):
                        id_name = "scsi-id"
                    hw_lst.append(("disk", name, id_name, entry))

        detect_utils.read_SMART(hw_lst, "/dev/%s" % name)
Example #4
0
def detect_disks(hw_lst):
    'Detect disks.'
    names = diskinfo.disknames()
    sizes = diskinfo.disksizes(names)
    disks = [name for name, size in sizes.items() if size > 0]
    hw_lst.append(('disk', 'logical', 'count', str(len(disks))))
    for name in disks:
        hw_lst.append(('disk', name, 'size', str(sizes[name])))
        item_list = ['device/vendor', 'device/model', 'device/rev',
                     'queue/optimal_io_size', 'queue/physical_block_size',
                     'queue/rotational']
        for my_item in item_list:
            try:
                with open('/sys/block/%s/%s' % (name, my_item), 'r') as dev:
                    hw_lst.append(('disk', name, my_item.split('/')[1],
                                   dev.readline().rstrip('\n').strip()))
            except Exception as excpt:
                sys.stderr.write(
                    'Failed at getting disk information '
                    'at /sys/block/%s/device/%s: %s\n' % (name,
                                                          my_item,
                                                          str(excpt)))

        item_list = ['WCE', 'RCD']
        item_def = {'WCE': 'Write Cache Enable', 'RCD': 'Read Cache Disable'}
        for my_item in item_list:
            sdparm_cmd = Popen("sdparm -q --get=%s /dev/%s | "
                               "awk '{print $2}'" % (my_item, name),
                               shell=True,
                               stdout=PIPE)
            for line in sdparm_cmd.stdout:
                hw_lst.append(('disk', name, item_def.get(my_item),
                               line.rstrip('\n').strip()))

        # In some VMs, the disk-by id doesn't exists
        if os.path.exists('/dev/disk/by-id/'):
            for entry in os.listdir('/dev/disk/by-id/'):
                idp = os.path.realpath('/dev/disk/by-id/' + entry).split('/')
                if idp[-1] == name:
                    id_name = "id"
                    if entry.startswith('wwn'):
                        id_name = "wwn-id"
                    elif entry.startswith('scsi'):
                        id_name = "scsi-id"
                    hw_lst.append(('disk', name, id_name, entry))

        detect_utils.read_SMART(hw_lst, "/dev/%s" % name)
Example #5
0
def detect_disks(hw_lst):
    """Detect disks."""

    names = diskinfo.disknames()
    sizes = diskinfo.disksizes(names)
    disks = [name for name, size in sizes.items() if size > 0]
    hw_lst.append(('disk', 'logical', 'count', str(len(disks))))
    for name in disks:
        diskinfo.get_disk_info(name, sizes, hw_lst)

        # nvme devices do not need standard cache mechanisms
        if not name.startswith('nvme'):
            diskinfo.get_disk_cache(name, hw_lst)

        diskinfo.get_disk_id(name, hw_lst)

        # TODO(rpittau): add smart-tools support for nvme devices
        if not name.startswith('nvme'):
            smart_utils.read_smart(hw_lst, "/dev/%s" % name)
Example #6
0
def detect_disks(hw_lst):
    'Detect disks.'
    names = diskinfo.disknames()
    sizes = diskinfo.disksizes(names)
    disks = [name for name, size in sizes.items() if size > 0]
    hw_lst.append(('disk', 'logical', 'count', str(len(disks))))
    for name in disks:
        hw_lst.append(('disk', name, 'size', str(sizes[name])))
        item_list = [
            'device/vendor', 'device/model', 'device/rev',
            'queue/optimal_io_size', 'queue/physical_block_size',
            'queue/rotational', 'queue/nr_requests'
        ]
        for my_item in item_list:
            try:
                with open('/sys/block/%s/%s' % (name, my_item), 'r') as dev:
                    hw_lst.append(('disk', name, my_item.split('/')[1],
                                   dev.readline().rstrip('\n').strip()))
            except Exception as excpt:
                sys.stderr.write('Failed at getting disk information '
                                 'at /sys/block/%s/device/%s: %s\n' %
                                 (name, my_item, str(excpt)))

        try:
            with open('/sys/block/%s/queue/scheduler' % name, 'r') as dev:
                s_line = dev.readline().rstrip('\n').strip()
                s = re.findall(r'\[(.*?)\]', s_line)
                if s:
                    hw_lst.append(('disk', name, 'scheduler', s[0]))

        except Exception:
            sys.stderr.write('Cannot extract scheduler for disk %s' % name)

        # WCE & RCD from sysfs
        # https://www.kernel.org/doc/Documentation/scsi/sd-parameters.txt
        my_item = '/sys/block/{0}/device'.format(name)
        try:
            _link_info = os.readlink(my_item)
            _scsi_addr = _link_info.rsplit('/', 1)[1]
            my_item = ('/sys/block/{0}/device' +
                       '/scsi_disk/{1}/cache_type').format(name, _scsi_addr)
            with open(my_item, 'r') as cache_info:
                my_text = cache_info.readline().rstrip('\n').strip()
                _wce = '1'
                _rcd = '0'
                if my_text == 'write through':
                    _wce = '0'
                elif my_text == 'none':
                    _wce = '0'
                    _rcd = '1'
                elif 'daft' in my_text:
                    _rcd = '1'
                hw_lst.append(('disk', name, 'Write Cache Enable', _wce))
                hw_lst.append(('disk', name, 'Read Cache Disable', _rcd))
        except Exception as excpt:
            sys.stderr.write('Failed at getting disk information '
                             'at %s: %s\n' % (my_item, str(excpt)))

        # In some VMs, the disk-by id doesn't exists
        if os.path.exists('/dev/disk/by-id/'):
            for entry in os.listdir('/dev/disk/by-id/'):
                idp = os.path.realpath('/dev/disk/by-id/' + entry).split('/')
                if idp[-1] == name:
                    id_name = "id"
                    if entry.startswith('wwn'):
                        id_name = "wwn-id"
                    elif entry.startswith('scsi'):
                        id_name = "scsi-id"
                    hw_lst.append(('disk', name, id_name, entry))

        detect_utils.read_SMART(hw_lst, "/dev/%s" % name)
Example #7
0
def detect_disks(hw_lst):
    'Detect disks.'
    names = diskinfo.disknames()
    sizes = diskinfo.disksizes(names)
    disks = [name for name, size in sizes.items() if size > 0]
    hw_lst.append(('disk', 'logical', 'count', str(len(disks))))
    for name in disks:
        hw_lst.append(('disk', name, 'size', str(sizes[name])))
        item_list = ['device/vendor', 'device/model', 'device/rev',
                     'queue/optimal_io_size', 'queue/physical_block_size',
                     'queue/rotational', 'queue/nr_requests']
        for my_item in item_list:
            try:
                with open('/sys/block/%s/%s' % (name, my_item), 'r') as dev:
                    hw_lst.append(('disk', name, my_item.split('/')[1],
                                   dev.readline().rstrip('\n').strip()))
            except Exception as excpt:
                sys.stderr.write(
                    'Failed at getting disk information '
                    'at /sys/block/%s/device/%s: %s\n' % (name,
                                                          my_item,
                                                          str(excpt)))

        try:
            with open('/sys/block/%s/queue/scheduler' % name, 'r') as dev:
                s_line = dev.readline().rstrip('\n').strip()
                sched = re.findall(r'\[(.*?)\]', s_line)
                if sched:
                    hw_lst.append(('disk', name, 'scheduler', sched[0]))

        except Exception:
            sys.stderr.write('Cannot extract scheduler for disk %s' % name)

        # WCE & RCD from sysfs
        # https://www.kernel.org/doc/Documentation/scsi/sd-parameters.txt
        my_item = '/sys/block/{0}/device'.format(name)
        try:
            _link_info = os.readlink(my_item)
            _scsi_addr = _link_info.rsplit('/', 1)[1]
            my_item = ('/sys/block/{0}/device' +
                       '/scsi_disk/{1}/cache_type').format(name, _scsi_addr)
            with open(my_item, 'r') as cache_info:
                my_text = cache_info.readline().rstrip('\n').strip()
                _wce = '1'
                _rcd = '0'
                if my_text == 'write through':
                    _wce = '0'
                elif my_text == 'none':
                    _wce = '0'
                    _rcd = '1'
                elif 'daft' in my_text:
                    _rcd = '1'
                hw_lst.append(('disk', name, 'Write Cache Enable', _wce))
                hw_lst.append(('disk', name, 'Read Cache Disable', _rcd))
        except Exception as excpt:
            sys.stderr.write(
                'Failed at getting disk information '
                'at %s: %s\n' % (my_item, str(excpt)))

        # In some VMs, the disk-by id doesn't exists
        if os.path.exists('/dev/disk/by-id/'):
            for entry in os.listdir('/dev/disk/by-id/'):
                idp = os.path.realpath('/dev/disk/by-id/' + entry).split('/')
                if idp[-1] == name:
                    id_name = "id"
                    if entry.startswith('wwn'):
                        id_name = "wwn-id"
                    elif entry.startswith('scsi'):
                        id_name = "scsi-id"
                    hw_lst.append(('disk', name, id_name, entry))

        detect_utils.read_SMART(hw_lst, "/dev/%s" % name)