python實現Linux磁盤查看|清理

# Create your tests here.

import os
import time


def get_device(path="/mnt/data"):
    import os

    day = 7
    disk = os.statvfs(path)

    disk_size = disk.f_bsize * disk.f_blocks / (1024 ** 3)  # 1G = 1024M  1M = 1024KB 1KB = 1024bytes
    print("磁盤總容量: %s" % format(disk_size, '.2f'))

    disk_used = disk.f_bsize * (disk.f_blocks - disk.f_bfree) / (1024 ** 3)
    print("磁盤已使用: %s" % format(disk_used, '.2f'))
    print("磁盤空閒: %s" % format((disk_size - disk_used), '.2f'))

    disk_used = format((disk_used / float(disk_size)), '.2f')
    print("磁盤使用率: %s" % disk_used)

    if float(disk_used) > 0.5:
        print("磁盤使用率已超過 %s" % disk_used)
        print("執行清理指令")
        cmd = 'sudo find /mnt/data/fastdfs/files/snap/ -mtime +%s -type d -name "*"' % day
        os.system(cmd)
    else:
        print("磁盤空間充足,還剩 %s" % (1 - float(disk_used)))


class DeviceInfo:
    """獲取服務器磁盤信息"""
    def __init__(self, path, day):
        self.path = path
        self.day = day
        self.rate = 0.75

    @staticmethod
    def get_disk_info(path):
        """獲取磁盤掛載信息"""
        return os.statvfs(path)

    def get_disk_size(self):
        """獲取磁盤總容量"""
        disk = self.get_disk_info(self.path)
        disk_size = disk.f_bsize * disk.f_blocks / (1024 ** 3)  # 1G = 1024M  1M = 1024KB 1KB = 1024bytes
        print("磁盤總容量: %s" % format(disk_size, '.2f'))
        return disk_size

    def get_disk_used(self):
        """獲取磁盤已使用容量|磁盤空閒容量"""
        disk = self.get_disk_info(self.path)
        disk_size = self.get_disk_size()
        disk_used = disk.f_bsize * (disk.f_blocks - disk.f_bfree) / (1024 ** 3)
        print("磁盤已使用: %s" % format(disk_used, '.2f'))
        print("磁盤空閒: %s" % format((disk_size - disk_used), '.2f'))
        return disk_size, disk_used, disk_size - disk_used

    def get_disk_rate(self):
        """返回磁盤使用率|剩餘率"""
        disk_size, disk_used, _ = self.get_disk_used()
        print("磁盤使用率: %s" % format((disk_used / disk_size), '.2f'))
        print("磁盤空閒率: %s" % format((1 - (disk_used / disk_size)), '.2f'))
        return disk_used / disk_size, 1 - (disk_used / disk_size)

    def check(self):
        """磁盤清理主進程"""
        disk_rate, _ = self.get_disk_rate()  # 磁盤使用率
        if disk_rate > self.rate:  # 磁盤使用率大於默認配置(0.75)
            clear_cmd = 'sudo find /mnt/data/files/snap/ -mtime +%d -type d -name "*" -exec rm -rf {} \\'
            while self.day:
                cmd = clear_cmd % self.day
                print(cmd)
                # os.system(cmd)
                disk_rate, _ = self.get_disk_rate()  # 磁盤使用率

                if disk_rate < self.rate:  # 使用率小於默認配置,break
                    break
        else:
            print('已超標')


if __name__ == '__main__':
    device = DeviceInfo(path='/Users/zhangjianping', day=7)
    device.check()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章