sahayman@iuvax.cs.indiana.edu (Steve Hayman) (08/11/90)
The man page for 'dump' suggests ... Dump should have some file that it consults that contain inode numbers, names of files and directories, ... to not dump to OD/Tape. This feature would come in especially handy to avoid dumping /private/vm/swapfile ... System administrators can get around this by writing a program that changes the modification time for the swapfile inode. You may find that your 22 Mb incremental dumps consist mainly of a 21 Mb /private/vm/swapfile, so there is good reason to avoid dumping this file if you can. Resetting the modification time on the swapfile inode is easy enough with 'utime()' (write a C program to call utimes(), or use perl -e 'utime 0, 0, "/private/vm/swapfile";' ) but this has the side-effect of changing the inode ctime to 'now', and dump checks both the mtime and ctime when deciding whether to dump a file. So your swapfile is dumped even if you did reset the 'mtime'. You need a way to reset both the mtime and the ctime to some ancient value. Unix provides no way that I can see to set the ctime directly. I considered writing a program to open the raw disk file, find the inode, and reset the atime/ctime/mtime to 0, but this rapidly became very ugly (and besides, I couldn't get it to work :-). The only quick solution I could think of is the following little hack, "zerotime". Warning. Use at your own risk. This program a) notes the current system time b) sets the system time to 0 (for a very brief period) c) calls 'utimes()' to set the access and modification time of the desired file to 0; this has the side effect of updating the inode's inode-change time (ctime) to the current time, which we just set to 0; d) resets the system time to the time noted in 'a'. So I put "zerotime /private/vm/swapfile" in my dump script, and I no longer do incremental dumps of that file, and my incrementals are much smaller. I really don't like the idea of tinkering with the system clock like this. If anybody has a better way to do this, please let me know; if you want to live dangerously, feel free to use this program. ..Steve --- cut here --- /* * zerotime file ... * reset atime, mtime *AND* ctime to 0 for a file * we are sneaky. we briefly set the time of day to 0, and then * call utime, then set the time of day back. * * The idea is that you put 'zerotime /private/vm/swapfile' in * your dump script, to avoid dumping that file. * * We really shouldn't be tinkering with the clock like this. * * Steve Hayman * sahayman@iuvax.cs.indiana.edu * 1990 08 09 */ #include <stdio.h> #include <sys/types.h> #include <sys/time.h> main(argc, argv) int argc; char **argv; { while ( --argc ) { zero_time(*++argv); } exit(0); } zero_time ( fname ) char *fname; { struct timeval now; struct timezone tz; struct timeval zero[2]; zero[0].tv_sec = zero[0].tv_usec = zero[1].tv_sec = zero[2].tv_usec = 0; /* * note current system time; set it to 0 (briefly) */ gettimeofday(&now, &tz); settimeofday(zero, &tz); /* * set file atime/mtime to 0 */ utimes(fname, zero); /* * reset system time */ settimeofday(&now, &tz); }