解决ServerStatus云探针无法获取硬盘信息一例

cera cera

不知道为啥有些VPS上无法通过psutil获取硬盘信息,使用psutil.disk_partitions()总是返回空

ServerStatus里获取硬盘信息的核心代码如下:

def get_hdd():
	valid_fs = [ "ext4", "ext3", "ext2", "reiserfs", "jfs", "btrfs", "fuseblk", "zfs", "simfs", "ntfs", "fat32", "exfat", "xfs" ]
	disks = dict()
	size = 0
	used = 0
	for disk in psutil.disk_partitions():
		if not disk.device in disks and disk.fstype.lower() in valid_fs:
			disks[disk.device] = disk.mountpoint
	for disk in disks.itervalues():
		usage = psutil.disk_usage(disk)
		size += usage.total
		used += usage.used
	return int(size/1024.0/1024.0), int(used/1024.0/1024.0)

使用如上代码后,在不支持psutil获取硬盘信息的VPS上就会返回0

所以就重新修改一下,改为使用os.statvfs方法来获取硬盘信息

p.s 使用statvfs方法仅能获取到指定挂载路径的信息

def get_hdd():
    import os
    hd={}
    #使用statvfs方法仅能获取到指定挂载路径的信息,使用df -h查看
    disk = os.statvfs("/")
    hd['capacity'] = int(disk.f_bsize * disk.f_blocks/1024/1024)
    hd['used'] = int(disk.f_bsize * disk.f_bfree/1024/1024)
    return hd['capacity'],hd['used']

修改后即可成功获取到 挂载点为 根目录 / 的磁盘信息

cera cloudiplc tengxunyun

相关推荐