Linux command df is used to report file system disk space usage. A sample output of the df command is as below,

Filesystem           1K-blocks      Used Available Use% Mounted on

/dev/sda1              5597680   3732772   1580560  71% /

udev                    254684       232    254452   1% /dev

none                    254684       360    254324   1% /dev/shm

none                    254684        96    254588   1% /var/run

none                    254684         0    254684   0% /var/lock

none                    254684         0    254684   0% /lib/init/rw

/dev/sr0                 32780     32780         0 100% /media/cdrom0

Sometimes we want to get similar information in our program. Linux system has a library function called statvfs. Python has a wrapper for this function. It takes an input path and returns a structure with information about the mounted disk containing the input file.

Below is a sample python program,

#!/usr/bin/python

import os

disk = os.statvfs("/var/")

print "preferred file system block size: " + str(disk.f_bsize)

print "fundamental file system block size: " + str(disk.f_frsize)

print "total number of blocks in filesystem: " + str(disk.f_blocks)

print "total number of free blocks: " + str(disk.f_bfree)

print "free blocks available to non-super user: " + str(disk.f_bavail)

print "total number of file nodes: " + str(disk.f_files)

print "total number of free file nodes: " + str(disk.f_ffree)

print "free nodes available to non-super user: " + str(disk.f_favail)

print "flags: " + str(disk.f_flag)

print "miximum file name length: " + str(disk.f_namemax)

print "~~~~~~~~~~calculation of disk usage:~~~~~~~~~~"

totalBytes = float(disk.f_bsize*disk.f_blocks)

print "total space: %d Bytes = %.2f KBytes = %.2f MBytes = %.2f GBytes" % (totalBytes, totalBytes/1024, totalBytes/1024/1024, totalBytes/1024/1024/1024)

totalUsedSpace = float(disk.f_bsize*(disk.f_blocks-disk.f_bfree))

print "used space: %d Bytes = %.2f KBytes = %.2f MBytes = %.2f GBytes" % (totalUsedSpace, totalUsedSpace/1024, totalUsedSpace/1024/1024, totalUsedSpace/1024/1024/1024)

totalAvailSpace = float(disk.f_bsize*disk.f_bfree)

print "available space: %d Bytes = %.2f KBytes = %.2f MBytes = %.2f GBytes" % (totalAvailSpace, totalAvailSpace/1024, totalAvailSpace/1024/1024, totalAvailSpace/1024/1024/1024)

totalAvailSpaceNonRoot = float(disk.f_bsize*disk.f_bavail)

print "available space for non-super user: %d Bytes = %.2f KBytes = %.2f MBytes = %.2f GBytes " % (totalAvailSpaceNonRoot, totalAvailSpaceNonRoot/1024, totalAvailSpaceNonRoot/1024/1024, totalAvailSpaceNonRoot/1024/1024/1024) 

The first part of the program print out each field of the returned structure. The second part of this program print out the disk space information. The output in my Ubuntu Linux gives the following output,

preferred file system block size: 4096

fundamental file system block size: 4096

total number of blocks in filesystem: 1399420

total number of free blocks: 465629

free blocks available to non-super user: 394542

total number of file nodes: 355520

total number of free file nodes: 186598

free nodes available to non-super user: 186598

flags: 0

miximum file name length: 255

~~~~~~~~~~calculation of disk usage:~~~~~~~~~~

total space: 5732024320 Bytes = 5597680.00 KBytes = 5466.48 MBytes = 5.34 GBytes

used space: 3824807936 Bytes = 3735164.00 KBytes = 3647.62 MBytes = 3.56 GBytes

available space: 1907216384 Bytes = 1862516.00 KBytes = 1818.86 MBytes = 1.78 GBytes

available space for non-super user: 1616044032 Bytes = 1578168.00 KBytes = 1541.18 MBytes = 1.51 GBytes 

 

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Set your Twitter account name in your settings to use the TwitterBar Section.