Created
August 22, 2016 12:29
-
-
Save habedi/9ac334bc43bd18ab54db74b405d5b00a to your computer and use it in GitHub Desktop.
A python snippet to figure out disk usage
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os | |
from collections import namedtuple | |
disk_ntuple = namedtuple('partition', 'device mountpoint fstype') | |
usage_ntuple = namedtuple('usage', 'total used free percent') | |
def disk_partitions(all=False): | |
"""Return all mountd partitions as a nameduple. | |
If all == False return phyisical partitions only. | |
""" | |
phydevs = [] | |
f = open("/proc/filesystems", "r") | |
for line in f: | |
if not line.startswith("nodev"): | |
phydevs.append(line.strip()) | |
retlist = [] | |
f = open('/etc/mtab', "r") | |
for line in f: | |
if not all and line.startswith('none'): | |
continue | |
fields = line.split() | |
device = fields[0] | |
mountpoint = fields[1] | |
fstype = fields[2] | |
if not all and fstype not in phydevs: | |
continue | |
if device == 'none': | |
device = '' | |
ntuple = disk_ntuple(device, mountpoint, fstype) | |
retlist.append(ntuple) | |
return retlist | |
def disk_usage(path): | |
"""Return disk usage associated with path.""" | |
st = os.statvfs(path) | |
free = (st.f_bavail * st.f_frsize) | |
total = (st.f_blocks * st.f_frsize) | |
used = (st.f_blocks - st.f_bfree) * st.f_frsize | |
try: | |
percent = ret = (float(used) / total) * 100 | |
except ZeroDivisionError: | |
percent = 0 | |
# NB: the percentage is -5% than what shown by df due to | |
# reserved blocks that we are currently not considering: | |
# http://goo.gl/sWGbH | |
return usage_ntuple(total, used, free, round(percent, 1)) | |
if __name__ == '__main__': | |
for part in disk_partitions(): | |
print part | |
print " %s\n" % str(disk_usage(part.mountpoint)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment