Very large directory

Phillip Salzman phill at sysctl.net
Thu Jan 20 09:57:54 PST 2005


Thanks Peter (along with everyone else who's responded.)

I've received a couple perl scripts from a few different people.  I can't
use any of them until this evening due to the current load of the machines
though.  Last night I ended up doing a strings on the directory, and taking
its output into a for loop removing the files.

--
Phillip Salzman

> -----Original Message-----
> From: Peter Jeremy [mailto:PeterJeremy at optushome.com.au] 
> Sent: January 20, 2005 3:46 AM
> To: Phillip Salzman
> Cc: stable at freebsd.org
> Subject: Re: Very large directory
> 
> 
> On Wed, 2005-Jan-19 21:30:53 -0600, Phillip Salzman wrote:
> >They've been running for a little while now - and recently we've 
> >noticed a lot of disk space disappearing.  Shortly after 
> that, a simple 
> >du into our /var/spool returned a not so nice error:
> >
> >	du: fts_read: Cannot allocate memory
> >
> >No matter what command I run on that directory, I just don't seem to 
> >have enough available resources  to show the files let alone delete 
> >them (echo *, ls, find, rm -rf, etc.)
> 
> I suspect you will need to write something that uses 
> dirent(3) to scan the offending directory and delete (or 
> whatever) the files one by one.
> 
> Skeleton code (in perl) would look like:
> 
> chdir $some_dir or die "Can't cd $some_dir: $!";
> opendir(DIR, ".") or die "Can't opendir: $!";
> while (my $file = readdir(DIR)) {
> 	next if ($file eq '.' || $file eq '..');
> 	next if (&this_file_is_still_needed($file));
> 	unlink $file or warn "Unable to delete $file: $!";
> }
> closedir DIR;
> 
> If you've reached the point where you can't actually read the 
> entire directory into user memory, expect the cleanup to take 
> quite a while.
> 
> Once you've finished the cleanup, you should confirm that the 
> directory has shrunk to a sensible size.  If not, you need to 
> re-create the directory and move the remaining files into the 
> new directory.
> 
> -- 
> Peter Jeremy
> 



More information about the freebsd-stable mailing list