* Copyright (c) 1983 The Regents of the University of California.
* Redistribution and use in source and binary forms are permitted
* provided that the above copyright notice and this paragraph are
* duplicated in all such forms and that any documentation,
* advertising materials, and other materials related to such
* distribution and use acknowledge that the software was developed
* by the University of California, Berkeley. The name of the
* University may not be used to endorse or promote products derived
* from this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
"@(#) Copyright (c) 1983 The Regents of the University of California.\n\
static char sccsid
[] = "@(#)tunefs.c 5.7 (Berkeley) %G%";
* tunefs: change layout parameters to an existing file system.
char *cp
, *special
, *name
;
char *chg
[2], device
[MAXPATHLEN
];
special
= argv
[argc
- 1];
if (stat(special
, &st
) < 0) {
(void)sprintf(device
, "/dev/%s", special
);
fprintf(stderr
, "tunefs: "); perror(special
);
if ((st
.st_mode
& S_IFMT
) != S_IFBLK
&&
(st
.st_mode
& S_IFMT
) != S_IFCHR
)
fatal("%s: not a block or character device", special
);
for (; argc
> 0 && argv
[0][0] == '-'; argc
--, argv
++) {
for (cp
= &argv
[0][1]; *cp
; cp
++)
name
= "maximum contiguous block count";
fatal("-a: missing %s", name
);
fatal("%s: %s must be >= 1",
fprintf(stdout
, "%s changes from %d to %d\n",
name
, sblock
.fs_maxcontig
, i
);
"rotational delay between contiguous blocks";
fatal("-d: missing %s", name
);
"%s changes from %dms to %dms\n",
name
, sblock
.fs_rotdelay
, i
);
"maximum blocks per file in a cylinder group";
fatal("-e: missing %s", name
);
fatal("%s: %s must be >= 1",
fprintf(stdout
, "%s changes from %d to %d\n",
name
, sblock
.fs_maxbpg
, i
);
name
= "minimum percentage of free space";
fatal("-m: missing %s", name
);
fatal("%s: bad %s", *argv
, name
);
"%s changes from %d%% to %d%%\n",
name
, sblock
.fs_minfree
, i
);
if (i
>= 10 && sblock
.fs_optim
== FS_OPTSPACE
)
fprintf(stdout
, "should optimize %s",
"for time with minfree >= 10%\n");
if (i
< 10 && sblock
.fs_optim
== FS_OPTTIME
)
fprintf(stdout
, "should optimize %s",
"for space with minfree < 10%\n");
name
= "optimization preference";
fatal("-o: missing %s", name
);
chg
[FS_OPTSPACE
] = "space";
chg
[FS_OPTTIME
] = "time";
if (strcmp(*argv
, chg
[FS_OPTSPACE
]) == 0)
else if (strcmp(*argv
, chg
[FS_OPTTIME
]) == 0)
fatal("%s: bad %s (options are `space' or `time')",
if (sblock
.fs_optim
== i
) {
"%s remains unchanged as %s\n",
"%s changes from %s to %s\n",
name
, chg
[sblock
.fs_optim
], chg
[i
]);
if (sblock
.fs_minfree
>= 10 && i
== FS_OPTSPACE
)
fprintf(stdout
, "should optimize %s",
"for time with minfree >= 10%\n");
if (sblock
.fs_minfree
< 10 && i
== FS_OPTTIME
)
fprintf(stdout
, "should optimize %s",
"for space with minfree < 10%\n");
fatal("-%c: unknown flag", *cp
);
bwrite(SBOFF
/ dev_bsize
, (char *)&sblock
, SBSIZE
);
for (i
= 0; i
< sblock
.fs_ncg
; i
++)
bwrite(fsbtodb(&sblock
, cgsblock(&sblock
, i
)),
(char *)&sblock
, SBSIZE
);
fprintf(stderr
, "Usage: tunefs tuneup-options special-device\n");
fprintf(stderr
, "where tuneup-options are:\n");
fprintf(stderr
, "\t-a maximum contiguous blocks\n");
fprintf(stderr
, "\t-d rotational delay between contiguous blocks\n");
fprintf(stderr
, "\t-e maximum blocks per file in a cylinder group\n");
fprintf(stderr
, "\t-m minimum percentage of free space\n");
fprintf(stderr
, "\t-o optimization preference (`space' or `time')\n");
fprintf(stderr
, "cannot open");
if (bread(SBOFF
, (char *)fs
, SBSIZE
)) {
fprintf(stderr
, "bad super block");
if (fs
->fs_magic
!= FS_MAGIC
) {
fprintf(stderr
, "%s: bad magic number\n", file
);
dev_bsize
= fs
->fs_fsize
/ fsbtodb(fs
, 1);
if (lseek(fi
, blk
* dev_bsize
, 0) < 0) {
if (write(fi
, buf
, size
) != size
) {
if (lseek(fi
, bno
* dev_bsize
, 0) < 0)
if ((i
= read(fi
, buf
, cnt
)) != cnt
) {
for(i
=0; i
<sblock
.fs_bsize
; i
++)
fprintf(stderr
, "tunefs: ");
fprintf(stderr
, fmt
, arg1
, arg2
);