linux disc space

D

DataSmash

I simply want to capture the free disc space in a variable so that I
can compare changes. I'm aware of a few commands like "df -h" or "du -
k", but I can't figure out how to capture those values as a variable.
I also looked at os.statvfs(), but that output doesn't seem to make
any sense at all to me, knowing the size of the disc.
Thanks for your help!
R.D.
 
T

Tobiah

DataSmash said:
I simply want to capture the free disc space in a variable so that I
can compare changes. I'm aware of a few commands like "df -h" or "du -
k", but I can't figure out how to capture those values as a variable.
I also looked at os.statvfs(), but that output doesn't seem to make
any sense at all to me, knowing the size of the disc.
Thanks for your help!
R.D.

You could use the subprocess module to capture the output
of your disk usage commands.
 
C

Chris

I simply want to capture the free disc space in a variable so that I
can compare changes. I'm aware of a few commands like "df -h" or "du -
k", but I can't figure out how to capture those values as a variable.
I also looked at os.statvfs(), but that output doesn't seem to make
any sense at all to me, knowing the size of the disc.
Thanks for your help!
R.D.

import os, statvfs
s = os.statvfs(".")
freebytes = s[statvfs.F_BSIZE] * s[statvfs.F_BAVAIL]

HTH,
Chris
 
J

Jeff Schwab

Chris said:
I simply want to capture the free disc space in a variable so that I
can compare changes. I'm aware of a few commands like "df -h" or "du -
k", but I can't figure out how to capture those values as a variable.
I also looked at os.statvfs(), but that output doesn't seem to make
any sense at all to me, knowing the size of the disc.
Thanks for your help!
R.D.

import os, statvfs
s = os.statvfs(".")
freebytes = s[statvfs.F_BSIZE] * s[statvfs.F_BAVAIL]

Is it worth distinguishing free bytes from available bytes? I've never
seen them differ, and I'm not sure how they ever would...

import os
import statvfs

def free_bytes(path):
stats = os.statvfs(path)
return stats[statvfs.F_BSIZE] * stats[statvfs.F_BFREE]

def avail_bytes(path):
stats = os.statvfs(path)
return stats[statvfs.F_BSIZE] * stats[statvfs.F_BAVAIL]

if __name__ == '__main__':
import sys
for path in sys.argv[1:]:
print "%s:" % path,
print "%dK free," % (free_bytes(path) / 1024),
print "%dK available" % (avail_bytes(path) / 1024)
 
D

DataSmash

import os, statvfs
s = os.statvfs(".")
freebytes = s[statvfs.F_BSIZE] * s[statvfs.F_BAVAIL]

Is it worth distinguishing free bytes from available bytes? I've never
seen them differ, and I'm not sure how they ever would...

import os
import statvfs

def free_bytes(path):
stats = os.statvfs(path)
return stats[statvfs.F_BSIZE] * stats[statvfs.F_BFREE]

def avail_bytes(path):
stats = os.statvfs(path)
return stats[statvfs.F_BSIZE] * stats[statvfs.F_BAVAIL]

if __name__ == '__main__':
import sys
for path in sys.argv[1:]:
print "%s:" % path,
print "%dK free," % (free_bytes(path) / 1024),
print "%dK available" % (avail_bytes(path) / 1024)


Chris,
Much thanks. That's just what I need.

Jeff,
Not sure what's taking up the "available" space, but it's about 12GB
on my system.
Interesting.

Thanks.
 
J

Jeff Schwab

DataSmash said:
Chris said:
I simply want to capture the free disc space in a variable so that I
can compare changes. I'm aware of a few commands like "df -h" or "du -
k", but I can't figure out how to capture those values as a variable.
I also looked at os.statvfs(), but that output doesn't seem to make
any sense at all to me, knowing the size of the disc.
Thanks for your help!
R.D.
import os, statvfs
s = os.statvfs(".")
freebytes = s[statvfs.F_BSIZE] * s[statvfs.F_BAVAIL]
Is it worth distinguishing free bytes from available bytes? I've never
seen them differ, and I'm not sure how they ever would...

import os
import statvfs

def free_bytes(path):
stats = os.statvfs(path)
return stats[statvfs.F_BSIZE] * stats[statvfs.F_BFREE]

def avail_bytes(path):
stats = os.statvfs(path)
return stats[statvfs.F_BSIZE] * stats[statvfs.F_BAVAIL]

if __name__ == '__main__':
import sys
for path in sys.argv[1:]:
print "%s:" % path,
print "%dK free," % (free_bytes(path) / 1024),
print "%dK available" % (avail_bytes(path) / 1024)


Chris,
Much thanks. That's just what I need.

Jeff,
Not sure what's taking up the "available" space, but it's about 12GB
on my system.
Interesting.

Available space is how much you can actually access as a non-root user.
Apparently (thank you Jean-Paul), space can be reserved for superuser
use only; such space is "free," but not "available."

I'm not sure how superuser-only space would be reserved in the first
place. I don't see anything relevant in the fdisk man page.
 
C

Christian Heimes

Jeff said:
I'm not sure how superuser-only space would be reserved in the first
place. I don't see anything relevant in the fdisk man page.

man mkfs

:)

Christian
 
M

Matthew Woodcraft

Available space is how much you can actually access as a non-root user.
Apparently (thank you Jean-Paul), space can be reserved for superuser
use only; such space is "free," but not "available."
I'm not sure how superuser-only space would be reserved in the first
place. I don't see anything relevant in the fdisk man page.

Look at mkfs.<whatever-your-filesystem-is>

-M-
 
J

Jeff Schwab

Christian said:

Thank you.

Looks like the feature is only supported by particular file systems. I
don't see anything at mkfs(8), but I do (for example) see the -m flag at
mke2fs(8).

What I've done in the past is to make the boot partition big enough for
emergency, super-user system administration. In the default boot
configuration, I just don't mount /boot. When the other partitions get
filled up by some runaway process (which happens with surprising (to me)
frequency), I mount the boot partition so I have some breathing room. I
guess the formally reserved blocks in the filesystem are meant to serve
the same purpose.
 
S

Steve Holden

Jeff said:
I'm not sure how superuser-only space would be reserved in the first
place. I don't see anything relevant in the fdisk man page.

The UFS and ext2 filesystem space allocation routines become very
inefficient when free space gets too low, so for regular uses the
filesystem is considered full before that threshold is reached. You can
adjust the threshold setting (amon others) with tunefs.

Root uid processes can continue to use disk space after that point so
that various daemon processes don't stop, and so that recovery actions
can be taken.

regards
Steve
 
J

Jeff Schwab

Steve said:
The UFS and ext2 filesystem space allocation routines become very
inefficient when free space gets too low, so for regular uses the
filesystem is considered full before that threshold is reached. You can
adjust the threshold setting (amon others) with tunefs.

Live and learn. I've been using primarily reiserfs for a while now,
which may be why my free blocks always == available blocks.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,780
Messages
2,569,611
Members
45,269
Latest member
vinaykumar_nevatia23

Latest Threads

Top