From owner-freebsd-questions@FreeBSD.ORG Tue May 25 11:39:22 2004 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id BFF8516A4CE for ; Tue, 25 May 2004 11:39:22 -0700 (PDT) Received: from dan.emsphone.com (dan.emsphone.com [199.67.51.101]) by mx1.FreeBSD.org (Postfix) with ESMTP id 5D3FA43D2F for ; Tue, 25 May 2004 11:39:22 -0700 (PDT) (envelope-from dan@dan.emsphone.com) Received: (from dan@localhost) by dan.emsphone.com (8.12.10/8.12.10) id i4PIcvCb032264; Tue, 25 May 2004 13:38:57 -0500 (CDT) (envelope-from dan) Date: Tue, 25 May 2004 13:38:57 -0500 From: Dan Nelson To: Jason DiCioccio Message-ID: <20040525183856.GN75036@dan.emsphone.com> References: <20040525154242.GL75036@dan.emsphone.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-OS: FreeBSD 5.2-CURRENT X-message-flag: Outlook Error User-Agent: Mutt/1.5.6i cc: freebsd-questions@freebsd.org Subject: Re: Question regarding reported directory sizes. X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 25 May 2004 18:39:22 -0000 In the last episode (May 25), Jason DiCioccio said: > wrote: > >In the last episode (May 25), Jason DiCioccio said: > >>I have a very large directory (say, a mail spool) whose directory entry > >>is approx 606K.. > >>drwx------ 5 cyrus cyrus 606208 May 25 10:29 . > >> > >>Now.. That directory had a lot of files in it. However, after > >>deleting all of the files in that directory, the directory entry's > >>size stays the same. I realize this is fairly unimportant, however > >>is there a way to 'garbage collect' that directory entry and all > >>others like it? > > > >Create another file in the directory, and you'll see it shrink down. > >The truncation code is in the file create codepath, not the delete > >one (which means it's not constantly trying to shrink the directory > >as you delete files). > > Thanks Dan.. However, this does not appear to be happening... I > could of course create a new directory and move everything into it as > was suggested earlier. However, this is more of a curiosity thing > than anything.. I'm wondering if at any point the entry does become > truncated, because it hasn't happened yet, even after the creation of > files. Your first post said you deleted all the files, but your second post mentions "move everything into it". The kernel can only truncate the directory past the last filename. If you happen to have an existing file in there that's sitting at the 600k mark in the directory, then that's as small as the directory can get. Run this script in a test directory to see it in action. Put the script itself someplace so it doesn't affect the dir sizes: #! /bin/sh echo Creating 1000 files for i in `jot 1000 10000` ; do touch $i ; done ls -ld . echo Deleting 999 files, leaving file 10500 for i in `jot 500 10000` `jot 499 10501` ; do rm $i ; done ls -ld . echo Creating 1 file. Directory should shrink by 50% touch 10000 ; ls -ld . echo Deleting last file rm 10500 ; ls -ld . echo Creating another file. Directory should shrink to one frag touch 10001 ; ls -ld . rm 10000 10001 -- Dan Nelson dnelson@allantgroup.com