]> Zhao Yanbai Git Server - minix.git/commitdiff
mkfs, mkproto: minor improvements
authorBen Gras <ben@minix3.org>
Wed, 7 Nov 2012 18:19:46 +0000 (19:19 +0100)
committerBen Gras <ben@minix3.org>
Wed, 7 Nov 2012 22:15:52 +0000 (23:15 +0100)
. mkfs: -x feature for extra space
. rename manpage to mkfs.mfs.1 to follow the binary
. move mkproto so it can become part of the tools easily

commands/Makefile
man/man1/Makefile
man/man1/mkfs.mfs.1 [new file with mode: 0644]
tools/mkproto/Makefile [new file with mode: 0644]
usr.sbin/Makefile
usr.sbin/mkfs.mfs/mkfs.c
usr.sbin/mkproto/Makefile [moved from commands/mkproto/Makefile with 100% similarity]
usr.sbin/mkproto/mkproto.c [moved from commands/mkproto/mkproto.c with 100% similarity]

index c237994a0262366acbdaaa6a93d13e375549037f..9dd01c41c26ecdadd178b2fcc8a5d255c6bcc8aa 100644 (file)
@@ -16,7 +16,7 @@ SUBDIR=       add_route arp ash at backup banner basename btrace cal \
        less loadkeys loadramdisk logger look lp \
        lpd ls lspci mail MAKEDEV \
        mesg mined mkfifo \
-       mkproto mount mt netconf nice acknm nohup \
+       mount mt netconf nice acknm nohup \
        nonamed od paste patch \
        ping postinstall poweroff pr prep printf printroot \
        profile progressbar pr_routes ps pwd pwdauth \
index b0563b34ca2814435cd84d8ff3cdfdbebea0f161..9ee8eec3c88f393aa30c6106d9f91b771789e694 100644 (file)
@@ -10,7 +10,7 @@ MAN=  ash.1 at.1 banner.1 basename.1 \
        install.1 isodir.1 isoinfo.1 isoread.1 join.1 kill.1 \
        last.1 loadfont.1 loadkeys.1 logger.1 \
        look.1 lp.1 ls.1 lspci.1 mail.1  \
-       mesg.1 mixer.1 mkfs.1 \
+       mesg.1 mixer.1 mkfs.mfs.1 \
        mkproto.1 mount.1 mt.1 nice.1 nm.1 nohup.1 od.1 \
        paste.1 ping.1 playwave.1 pr.1 prep.1 \
        profile.1 ps.1 pwd.1 rcp.1 recwave.1 \
diff --git a/man/man1/mkfs.mfs.1 b/man/man1/mkfs.mfs.1
new file mode 100644 (file)
index 0000000..2b23617
--- /dev/null
@@ -0,0 +1,113 @@
+.TH MKFS 1
+.SH NAME
+mkfs \- make a file system
+.SH SYNOPSIS
+\fBmkfs \fR[\fB\-Ldot\fR] [\fB\-B \fIblocksize\fR] [\fB\-i \fIinodes\fR] [\fB\-b \fIblocks\fR] \fIspecial \fIprototype\fR
+.br
+.de FL
+.TP
+\\fB\\$1\\fR
+\\$2
+..
+.de EX
+.TP 20
+\\fB\\$1\\fR
+# \\$2
+..
+.SH OPTIONS
+.TP 5
+.B \-L
+# Make a listing on standard output
+.TP 5
+.B \-d
+# Use mod time of \fImkfs\fR binary for all files
+.TP 5
+.B \-o
+# Use a drive other than 0 or 1 (safety precaution)
+.TP 5
+.B \-t
+# Do not test if file system fits on the medium
+.TP 5
+.B \-1
+# Make a version 1 file system (for backward compatibility)
+.TP 5
+.B \-i
+# Number of i-nodes (files)
+.TP 5
+.B \-B
+# Filesystem block size (in bytes)
+.TP 5
+.B \-b
+# Filesystem size (in blocks)
+.TP 5
+.B \-x
+# Extra space after dynamic sizing (blocks and inodes)
+.SH EXAMPLES
+.TP 20
+.B mkfs /dev/fd1 proto
+# Make a file system on \fI/dev/fd1\fR
+.TP 20
+.B mkfs -b 360 /dev/fd1
+# Make empty 360 block file system
+.TP 20
+.B mkfs /dev/fd1 360
+# Alternate way to specify the size
+.SH DESCRIPTION
+.PP
+.I Mkfs
+builds a file system and copies specified files to it.
+The prototype file tells which directories and files to copy to it.
+If the prototype file cannot be opened, and its name is just a string of
+digits, an empty file system will be made with the specified number of
+blocks.
+A sample prototype file follows.
+The text following the \fI#\fR sign in the example below is comment.
+In real prototype files, comments are not allowed.
+.PP
+.nf
+.ta 0.20i 0.70i 1.10i 3i 3.5i 4i
+       boot                    # boot block file (ignored)
+       360 63                  # blocks and i-nodes
+       d--755 1 1              # root directory
+          bin  d--755 \|2 1    # bin dir: mode (755), uid (2), gid (1)
+               sh      \|---755 2 1 /user/bin/shell    # shell has mode \fIrwxr-xr-x\fP
+               mv      -u-755 2 1 /user/bin/mv # u = SETUID bit
+               login   -ug755 2 1 /user/bin/login      # SETUID and SETGID
+          $                    # end of \fI/bin\fP
+          dev  d--755 2 1      # special files: tty (char), fd0 (block)
+               tty     c--777 2 1 4 0  # uid=2, gid=1, major=4, minor=0
+               fd0     b--644 2 1 2 0 360      # uid, gid, major, minor, blocks
+          $                    # end of \fI/dev\fP
+          user d--755 12 1     # user dir: mode (755), uid (12), gid (1)
+               ast     d--755 12 1     # \fI/user/ast\fP
+               $               # \fI/user/ast\fP is empty
+          $                    # end of \fI/user\fP
+       $                       # end of root directory
+.PP
+.fi
+The first entry on each line (except the first 3 and the $ lines, which
+terminate directories) is the name the file or directory will get on the
+new file system.  
+Next comes its mode, with the first character being
+\fB\-dbc\fR for regular files, directories, block special files and character 
+special files, respectively.
+The next two characters are used to specify the SETUID and SETGID bits, as
+shown above.
+The last three characters of the mode are the 
+.I rwx
+protection bits.
+.PP
+Following the mode are the uid and gid.
+For special files, the major and minor devices are needed.
+.PP
+The maximum size of a file system is 1 Gb for a version 2 file system,
+and 64 Mb for a version 1 file system.  Alas the 8086
+.I fsck
+runs out of memory on a V2 file system larger than 128 Mb, so for the 8086
+version of
+\s-1MINIX 3\s-1
+you have to limit yourself to file systems of that size.
+.SH "SEE ALSO"
+.BR mkproto (1),
+.BR fsck (1),
+.BR mount (1).
diff --git a/tools/mkproto/Makefile b/tools/mkproto/Makefile
new file mode 100644 (file)
index 0000000..6f2350c
--- /dev/null
@@ -0,0 +1,7 @@
+
+HOSTPROGNAME=  ${_TOOL_PREFIX}mkproto
+HOST_SRCDIR=   usr.sbin/mkproto
+#CPPFLAGS+=    -I${.CURDIR}/../compat/sys
+
+LDADD=  #defined
+.include "${.CURDIR}/../Makefile.host"
index ec3aa1d6b7ed7e9182f65478874c38e78b4fda91..0c19679f84a88e054787c9a5b1f4c8a718c4b8ad 100644 (file)
@@ -14,6 +14,7 @@ SUBDIR= \
        zic
 
 # LSC MINIX Specific
-SUBDIR+= mkfs.mfs
+SUBDIR+= mkfs.mfs \
+       mkproto
 
 .include <bsd.subdir.mk>
index 8e8649be2c66e81fd891b9b67639845473841bc3..1cbc761b73b75116466914011572db50d0573d85 100644 (file)
@@ -92,6 +92,7 @@ block_t zone_map;             /* where is zone map? (depends on # inodes) */
 int inodes_per_block;
 int fs_version;
 size_t block_size;
+int extra_space_percent;
 
 FILE *proto;
 
@@ -178,7 +179,8 @@ char *argv[];
   fs_version = 3;
   inodes_per_block = 0;
   block_size = 0;
-  while ((ch = getopt(argc, argv, "12b:di:lotB:")) != EOF)
+  extra_space_percent = 0;
+  while ((ch = getopt(argc, argv, "12b:di:lotB:x:")) != EOF)
        switch (ch) {
            case '1':
                fs_version = 1;
@@ -201,11 +203,17 @@ char *argv[];
            case 'o':   override = 1;   break;
            case 't':   donttest = 1;   break;
            case 'B':   block_size = atoi(optarg);      break;
+           case 'x':   extra_space_percent = atoi(optarg); break;
            default:    usage();
        }
 
   if (argc == optind) usage();
 
+  /* Percentage of extra size must be nonnegative.
+   * It can legitimately be bigger than 100 but has to make some sort of sense.
+   */
+  if(extra_space_percent < 0 || extra_space_percent > 2000) usage();
+
   if(fs_version == 3) {
        if(!block_size) block_size = _MAX_BLOCK_SIZE; /* V3 default block size */
        if(block_size%SECTOR_SIZE || block_size < _MIN_BLOCK_SIZE) {
@@ -283,10 +291,16 @@ char *argv[];
        usrid = atoi(token[1]);
        grpid = atoi(token[2]);
 
-       if(blocks == 0 && inodes == 0){
+       if(blocks <= 0 && inodes <= 0){
+               block_t extrablocks = 0;
+               ino_t extrainodes = 0;
+               if(blocks < 0) extrablocks = -blocks;
+               if(inodes < 0) extrainodes = -inodes;
                detect_fs_size();
-               blocks = blockcount;
-               inodes = inocount;
+               blocks = blockcount + extrablocks;
+               inodes = inocount + extrainodes;
+               blocks += blocks*extra_space_percent/100;
+               inodes += inodes*extra_space_percent/100;
                printf("dynamically sized filesystem: %d blocks, %d inodes\n", blocks, 
                        (unsigned int) inodes);
        }               
@@ -699,7 +713,6 @@ ino_t parent;
        mode = mode_con(p);
        usrid = atoi(token[2]);
        grpid = atoi(token[3]);
-       if (grpid & 0200) fprintf(stderr, "A.S.Tanenbaum\n");
        n = alloc_inode(mode, usrid, grpid);
 
        /* Enter name in directory and update directory's size. */
@@ -1487,7 +1500,8 @@ block_t n;
 void usage()
 {
   fprintf(stderr,
-         "Usage: %s [-12dlot] [-b blocks] [-i inodes] [-B blocksize] special [proto]\n",
+         "Usage: %s [-12dlot] [-b blocks] [-i inodes]\n"
+               "\t[-x extra] [-B blocksize] special [proto]\n",
          progname);
   exit(1);
 }