var out of space

Jerry McAllister jerrymc at msu.edu
Mon Dec 18 09:13:43 PST 2006


Howdy,

> Hello,
> 
> 
> I inherited a freebsd installation with a var slice/mount that is to  
> small and filling up all the time.
> 
> What type of info should I provide to allow someone to help me with a  
> solution?
> 
> I would very much prefer to not install another drive just for /var.
> 
> /usr has plenty of space. Can I mount var off of /usr?
> 
> Here is the output of df for starters:
> 
> /dev/ad0s1a    128990  119970    -1298   101%    /
> /dev/ad0s1f    257998  185246    52114    78%    /tmp
> /dev/ad0s1g 112755734 4533434 99201842     4%    /usr
> /dev/ad0s1e    257998  206956    30404    87%    /var
> procfs              4       4        0   100%    /proc


You are right, whoever built that machine put all the spare space 
in to /usr (wouldn't be my choice, but...) so you can make use of
that space.

The first thing to do is to figure out what is using the space.
use du(1) for that.
probably something like:      (NOTE: do this as root or single user)
  cd /var
  du -sk *

The most like culprits are /var/mail,  var/spool,  /var/log,  and /var/db
Rather than moving all of /var in to /usr, just move the worst of
those and make symlinks.

Of course you might also want to clean up some of the stuff, for example
if /var/log is taking up all the space, use newsyslog(8) to manage
rotation of logs and clearing of old logs.

But, really your /var is too small so even after you clean up you will
have to move some things.

For example, you can move /var/spool to /usr by:

  cd /var/spool
  tar cpf /usr/spool.tar *
  cd /usr
  mkdir var.spool
  cd var.spool
  tar xpf ../spool.tar
  cd /var
  mv spool old-spool
  ln -s /usr/var.spool spool
Now check things out by doing looking around:   cd /var/spool  should
get you to /usr/var.spool and find all the files in place.  When you
are convinced it is good, then:
  cd /var
  rm -rf old-spool
You might just find some files it refused to rm because flags are
set on them, particularly 'schg'  so you will have to unset those
flags to nuke the files.  
  chflags noschg file_name    for example
Then remove those files by hand.
See chflags(1)

At this point you would have /var/spool actually living in /usr
with no problem.

NOTE that doing the tar to a file and then untarring and also moving 
/var/spool to a different file and checking things first is being a
little more careful(chicken) than absolutely necessary, but I prefer
being safe.   Also, my naming convention (making the directory be
var.spool) helps me keep track of things sort of like using mnemonic
variable names.

This doesn't muck with your partition layout like moving all of /var
in to /usr would.

But, if you really want to move all of /var to /usr and change the
mounts, then use dump/restore as follows:

  cd /usr
  mkdir newvar
  cd newvar
  dump 0af - /var | restore -rf -
  umount /var
  cd /etc
Edit /etc/fstab to remove or comment out the /var line 
  cd /
  rmdir var
  ln -s /usr/newvar var
Check it out - it should work just fine.

Of course, you don't have to use the name 'newvar' for the
directory name in /usr, but it makes it clearer what happened.
  
Now the 260MB in the ad0s1e partition will be essentially unused
for anything unless you mount it as something else.
  
I really think the former solution is a little better, but either 
will work.

NOTE also that a possibly better overall solution that either is to 
completely reinstall FreeBSD from scratch and completely reorganize 
your disk at the same time especially if it is below version 6.1.
Of course, you would want to make complete backups before doing that
so you can put what parts of your data you want to keep back on after
the installation.

But, if you are new to FreeBSD, just moving a couple of things to free
up space in /var will easily give you time to play around and become 
familiar and then you can do the complete re-install later when you 
have a better picture of what you want and after 6.2 RELEASE comes out.
  
////jerry

> 
> 
> and ls -la at / looks like this:
> 
> -rw-r--r--   2 root  wheel      802 May 25  2004 .cshrc
> -rw-r--r--   2 root  wheel      251 May 25  2004 .profile
> -r--r--r--   1 root  wheel     6355 May 25  2004 COPYRIGHT
> drwxr-xr-x   2 root  wheel     1024 Nov 29 17:39 bin
> drwxr-xr-x   3 root  wheel      512 Nov  5 15:27 boot
> drwxr-xr-x   2 root  wheel      512 Jan 16  2005 cdrom
> lrwxr-xr-x   1 root  wheel       10 Jan 16  2005 compat -> usr/compat
> drwxr-xr-x   3 root  wheel    20480 Jan 16  2005 dev
> drwxr-xr-x  16 root  wheel     2560 Dec  1 16:11 etc
> lrwxrwxrwx   1 root  wheel        9 Jan 16  2005 home -> /usr/home
> -r-xr-xr-x   1 root  wheel  4344469 Nov  5 13:22 kernel
> -r-xr-xr-x   1 root  wheel  4344469 Nov  5 13:22 kernel.GENERIC
> drwxr-xr-x   2 root  wheel      512 May 25  2004 mnt
> drwxr-xr-x   2 root  wheel     4608 Nov  5 13:22 modules
> dr-xr-xr-x   1 root  wheel      512 Dec 17 01:10 proc
> drwxr-xr-x   3 root  wheel      512 Nov  5 13:36 root
> drwxr-xr-x   2 root  wheel     2048 Nov  5 15:27 sbin
> drwxr-xr-x   4 root  wheel     1024 Jan 16  2005 stand
> lrwxr-xr-x   1 root  wheel       11 Nov  5 15:27 sys -> usr/src/sys
> drw-------   7 root  wheel     2048 Dec 17 01:09 tmp
> drwxr-xr-x  18 root  wheel      512 Jan 16  2005 usr
> drwxr-xr-x  21 root  wheel      512 Nov  6 11:54 var

That doesn't affect anything.   It looks about normal.

The only problem is that you need more space in root or something
cleaned out.   Do a du -sk * in root to see what is hogging
all the space.    Also, you might want to use the -F flag on ls
as in ls -laF so it marks the directories for you.  Makes it easier
to see what is going on.

////jerry

> 
> 
> Thanks for any help,
> Brad
> 
> _______________________________________________
> freebsd-questions at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-questions
> To unsubscribe, send any mail to "freebsd-questions-unsubscribe at freebsd.org"


More information about the freebsd-questions mailing list