Calculating Disc Space

Ok....

Can someone please point me in the right direction.

I simply want to know how to take the results of a dfspace or df command and be able to know how to determine how much disk space is either used or remaining.

1$ dfspace
Filesystem 512-blocks Free %Used Iused %Iused Mounted on
/dev/hd4 32768 19896 40% 1227 15% /
/dev/hd2 802816 277248 66% 1035 11% /usr
/dev/hd9var 32768 22480 32% 201 5% /var
/dev/hd3 65536 44680 32% 137 2% /tmp
/dev/hd1 16384 15568 5% 126 7% /home
/dev/lv00 98304 43992 56% 355 3% /versyss
/dev/lv01 6012928 1989648 67% 5022 1% /versyss/data

1$ df -k
Filesystem 1024-blocks Free %Used Iused %Iused Mounted on
/dev/hd4 16384 9948 40% 1227 15% /
/dev/hd2 401408 138624 66% 11035 11% /usr
/dev/hd9var 16384 11240 32% 201 5% /var
/dev/hd3 32768 22340 32% 137 2% /tmp
/dev/hd1 8192 7784 5% 126 7% /home
/dev/lv00 49152 21996 56% 355 3% /versyss
/dev/lv01 3006464 994824 67% 5022 1% /versyss/data

One section shows 512-blocks and the other shows 1024-blocks

I am sure there is a simple procedure for calculating disk space..

Please help =)

I'd just add up the numbers in the columns...

You can do it rather easily with a Perl script

#!/usr/bin/perl

open(STATS, "df -k|") || die "$!";

my $lineNumber  = 0;
my $totalUsed   = 0;
my $totalSpace  = 0;

while ($inputLine = <STATS>) {
  if ($lineNumber++ != 0) {  # Skip the first entry of the `df -k` results
    $inputLine =~ s/\s+/ /g; # Force multiple spaces to be a single space for splitting
    my @columns = split(/ /, $inputLine);
    $totalSpace += $columns[1];
    $totalUsed += $columns[2];
  };
};

print "There are a total of $totalSpace 1K Blocks.\n";
print "There are a total of $totalUsed 1K Blocks in use.\n";

That'll turn this:

FreeBSD:auswipe:/home/auswipe/sample $ df -k
Filesystem  1K-blocks     Used    Avail Capacity  Mounted on
/dev/ad0s1a    128990    83050    35622    70%    /
/dev/ad0s1f    257998      870   236490     0%    /tmp
/dev/ad0s1g  15222640  9194730  4810100    66%    /usr
/dev/ad0s1e    257998   157116    80244    66%    /var
procfs              4        4        0   100%    /proc
linprocfs           4        4        0   100%    /usr/compat/linux/proc

Into this:

FreeBSD:auswipe:/home/auswipe/sample $ ./freespace
There are a total of 15867634 1K Blocks.
There are a total of 9435674 1K Blocks in use.

You can modify the code as necessary. In this case, I really need to omit the procfs and linprocfs entries as these actually reside on a previously mentioned filesystem and is used for Linux compatibility under FreeBSD.

Any way, that's the jist of it. The rest is up to you.

Thank you for the script, however, what I am looking for.. is the following:

I want to translate 1k blocks into kilobytes or megabytes.

Or rather I want to take the number and calculate the disk space in megabytes or gigabytes.

Using 1K Blocks:

(NumBlocks1024)/2^20 will yield MegaBytes
(NumBlocks
1024)/2^30 will yield GigaBytes

I don't have perl installed on any of my machines.. seems that the OS comes as a "Base" operating system and 'perl' isn't included. UGHHHHHH!!!!!!

Thanks alot for your help... I'll get it figured out.. =)

1024 kilobytes is a megabyte. So roughly, 1000 kilobytes is a megabyte. When you see something like: 11035 1k blocks are available, simply divide by 1000 in your head. So roughly, you have 11.035 megabytes or just 11 megabytes. That's close enough.

And likewise 6012928 1k blocks is 6012.928 megabytes. Or 6.012928 Gigabytes. Or just 6 Gigabytes. Again, this is fast and it's close enough.

For the record, the real values are
6012928 1k blocks = 5.734 Gigabytes
6012928 1k blocks = 5872 Megabytes
11035 1k blocks = 10.776 Megabytes

You can use the standard unix program bc to get these results. Type "bc" and then press return to start running bc. Then enter, as an example:
scale=3
6012928/1024
Type control d to exit bc when you're done.