def get_disk_statistics(self):
        """
        Create a map of disks in the machine.

        http://www.kernel.org/doc/Documentation/iostats.txt

        Returns:
          (major, minor) -> DiskStatistics(device, ...)
        """
        result = {}

        if (self.config['persistent_naming'] and not pyudev):
            self.log.warning("Unable to import pyudev which is required for" +
                " persistent_naming. Persistent naming support is now disabled.")
            self.config['persistent_naming'] = False

        if os.access('/proc/diskstats', os.R_OK):
            self.proc_diskstats = True
            fp = open('/proc/diskstats')

            try:
                for line in fp:
                    try:
                        columns = line.split()
                        # On early linux v2.6 versions, partitions have only 4
                        # output fields not 11. From linux 2.6.25 partitions
                        # have the full stats set.
                        if len(columns) < 14:
                            continue
                        major = int(columns[0])
                        minor = int(columns[1])
                        device = columns[2]

                        if ((device.startswith('ram') or
                             device.startswith('loop'))):
                            continue

                        result[(major, minor)] = {
                            'device': device,
                            'reads': float(columns[3]),
                            'reads_merged': float(columns[4]),
                            'reads_sectors': float(columns[5]),
                            'reads_milliseconds': float(columns[6]),
                            'writes': float(columns[7]),
                            'writes_merged': float(columns[8]),
                            'writes_sectors': float(columns[9]),
                            'writes_milliseconds': float(columns[10]),
                            'io_in_progress': float(columns[11]),
                            'io_milliseconds': float(columns[12]),
                            'io_milliseconds_weighted': float(columns[13])
                        }
                    except ValueError:
                        continue
            finally:
                fp.close()
        else:
            self.proc_diskstats = False
            if not psutil:
                self.log.error('Unable to import psutil')
                return None

            disks = psutil.disk_io_counters(True)
            sector_size = int(self.config['sector_size'])
            for disk in disks:
                result[(0, len(result))] = {
                    'device': disk,
                    'reads': disks[disk].read_count,
                    'reads_sectors': disks[disk].read_bytes / sector_size,
                    'reads_milliseconds': disks[disk].read_time,
                    'writes': disks[disk].write_count,
                    'writes_sectors': disks[disk].write_bytes / sector_size,
                    'writes_milliseconds': disks[disk].write_time,
                    'io_milliseconds':
                        disks[disk].read_time + disks[disk].write_time,
                    'io_milliseconds_weighted':
                        disks[disk].read_time + disks[disk].write_time
                }

        return result

        Create a map of disks in the machine.

        http://www.kernel.org/doc/Documentation/iostats.txt

        Returns:
          (major, minor) -> DiskStatistics(device, ...)
        
src/collectors/diskusage/diskusage.py