summaryrefslogtreecommitdiffstats
path: root/sbin
diff options
context:
space:
mode:
authorjkh <jkh@FreeBSD.org>1996-07-21 23:34:04 +0000
committerjkh <jkh@FreeBSD.org>1996-07-21 23:34:04 +0000
commitc7085060925fdf483fee64aa03f20d3a2d3e0b02 (patch)
tree731b8d701580f8a15625ca9abd05be5d1dbfda84 /sbin
parentc6af739d2a68ea292932278921f1cea664a53706 (diff)
downloadFreeBSD-src-c7085060925fdf483fee64aa03f20d3a2d3e0b02.zip
FreeBSD-src-c7085060925fdf483fee64aa03f20d3a2d3e0b02.tar.gz
I have added a new option -p to the mount command. This was
inspired by SunOS version of mount which uses option -p to indicate that the mount information should be printed in fstab format. This is a neat way to create a new fstab file to use later when one has modified the mount points or mount options or added or removed mount some mount points. You just type mount -p > /etc/fstab.new and there is your new fstab file ready to be used though you will of course have to add any necessary noauto flags manually. [Committers note: This also seems to do the wrong thing for AMD mounts, but in the more average case this is a nifty feature nonetheless and one can always edit the bogus entries out] Submitted-By: Jukka Ukkonen <jau@jau.csc.fi>
Diffstat (limited to 'sbin')
-rw-r--r--sbin/mount/mount.810
-rw-r--r--sbin/mount/mount.c71
-rw-r--r--sbin/mount_ifs/mount.810
-rw-r--r--sbin/mount_ifs/mount.c71
4 files changed, 146 insertions, 16 deletions
diff --git a/sbin/mount/mount.8 b/sbin/mount/mount.8
index b141b75..3654075 100644
--- a/sbin/mount/mount.8
+++ b/sbin/mount/mount.8
@@ -39,13 +39,13 @@
.Nd mount file systems
.Sh SYNOPSIS
.Nm mount
-.Op Fl adfruvw
+.Op Fl adfpruvw
.Op Fl t Ar ufs | lfs | external_type
.Nm mount
-.Op Fl dfruvw
+.Op Fl dfpruvw
.Ar special | node
.Nm mount
-.Op Fl dfruvw
+.Op Fl dfpruvw
.Op Fl o Ar options
.Op Fl t Ar ufs | lfs | external_type
.Ar special node
@@ -167,6 +167,10 @@ to execute the equivalent of:
.Bd -literal -offset indent
/sbin/mount_mfs -o nosuid -N -s 4000 /dev/dk0b /tmp
.Ed
+.It Fl p
+Print mount information in fstab format. Implies also the
+.Fl v
+option.
.It Fl r
The file system is to be mounted read-only.
Mount the file system read-only (even the super-user may not write it).
diff --git a/sbin/mount/mount.c b/sbin/mount/mount.c
index 5dbe573..286c2a0 100644
--- a/sbin/mount/mount.c
+++ b/sbin/mount/mount.c
@@ -59,6 +59,9 @@ static char sccsid[] = "@(#)mount.c 8.19 (Berkeley) 4/19/94";
#include "pathnames.h"
int debug, verbose, skipvfs;
+int fstab_style = 0;
+
+static char *mnttype[] = INITMOUNTNAMES;
int badvfsname __P((const char *, const char **));
int badvfstype __P((int, const char **));
@@ -72,6 +75,7 @@ int mountfs __P((const char *, const char *, const char *,
int, const char *, const char *));
void prmount __P((const char *, const char *, int));
void usage __P((void));
+void putfsent __P((const struct statfs *));
/* From mount_ufs.c. */
int mount_ufs __P((int, char * const *));
@@ -112,8 +116,12 @@ main(argc, argv)
options = NULL;
vfslist = NULL;
vfstype = "ufs";
- while ((ch = getopt(argc, argv, "adfo:rwt:uv")) != EOF)
+ while ((ch = getopt(argc, argv, "padfo:rwt:uv")) != EOF)
switch (ch) {
+ case 'p':
+ fstab_style = 1;
+ verbose = 1;
+ break;
case 'a':
all = 1;
break;
@@ -173,6 +181,15 @@ main(argc, argv)
fs->fs_mntops))
rval = 1;
}
+ else if (fstab_style) {
+ if ((mntsize = getmntinfo(&mntbuf, MNT_NOWAIT)) == 0)
+ err(1, "getmntinfo");
+ for (i = 0; i < mntsize; i++) {
+ if (badvfstype(mntbuf[i].f_type, vfslist))
+ continue;
+ putfsent (&mntbuf[i]);
+ }
+ }
else {
if ((mntsize = getmntinfo(&mntbuf, MNT_NOWAIT)) == 0)
err(1, "getmntinfo");
@@ -372,7 +389,12 @@ mountfs(vfstype, spec, name, flags, options, mntopts)
warn("%s", name);
return (1);
}
- prmount(sf.f_mntfromname, sf.f_mntonname, sf.f_flags);
+
+ if (fstab_style)
+ putfsent (&sf);
+ else
+ prmount (sf.f_mntfromname,
+ sf.f_mntonname, sf.f_flags);
}
break;
}
@@ -530,9 +552,48 @@ usage()
(void)fprintf(stderr,
"usage: mount %s %s\n mount %s\n mount %s\n",
- "[-dfruvw] [-o options] [-t ufs | external_type]",
+ "[-dfpruvw] [-o options] [-t ufs | external_type]",
"special node",
- "[-adfruvw] [-t ufs | external_type]",
- "[-dfruvw] special | node");
+ "[-adfpruvw] [-t ufs | external_type]",
+ "[-dfpruvw] special | node");
exit(1);
}
+
+void
+putfsent (ent)
+ const struct statfs *ent;
+{
+ struct fstab *fst;
+
+ printf ("%s\t%s\t%s %s",
+ ent->f_mntfromname, ent->f_mntonname,
+ mnttype[ent->f_type],
+ (ent->f_flags & MNT_RDONLY) ? "ro" : "rw");
+
+ if (ent->f_flags & MNT_SYNCHRONOUS)
+ printf (",sync");
+
+ if (ent->f_flags & MNT_NOEXEC)
+ printf (",noexec");
+
+ if (ent->f_flags & MNT_NOSUID)
+ printf (",nosuid");
+
+ if (ent->f_flags & MNT_NODEV)
+ printf (",nodev");
+
+ if (ent->f_flags & MNT_UNION)
+ printf (",union");
+
+ if (ent->f_flags & MNT_ASYNC)
+ printf (",async");
+
+ if (fst = getfsspec (ent->f_mntfromname))
+ printf ("\t%u %u\n", fst->fs_freq, fst->fs_passno);
+ else if (fst = getfsfile (ent->f_mntonname))
+ printf ("\t%u %u\n", fst->fs_freq, fst->fs_passno);
+ else if (ent->f_type == MOUNT_UFS)
+ printf ("\t1 1\n");
+ else
+ printf ("\t0 0\n");
+}
diff --git a/sbin/mount_ifs/mount.8 b/sbin/mount_ifs/mount.8
index b141b75..3654075 100644
--- a/sbin/mount_ifs/mount.8
+++ b/sbin/mount_ifs/mount.8
@@ -39,13 +39,13 @@
.Nd mount file systems
.Sh SYNOPSIS
.Nm mount
-.Op Fl adfruvw
+.Op Fl adfpruvw
.Op Fl t Ar ufs | lfs | external_type
.Nm mount
-.Op Fl dfruvw
+.Op Fl dfpruvw
.Ar special | node
.Nm mount
-.Op Fl dfruvw
+.Op Fl dfpruvw
.Op Fl o Ar options
.Op Fl t Ar ufs | lfs | external_type
.Ar special node
@@ -167,6 +167,10 @@ to execute the equivalent of:
.Bd -literal -offset indent
/sbin/mount_mfs -o nosuid -N -s 4000 /dev/dk0b /tmp
.Ed
+.It Fl p
+Print mount information in fstab format. Implies also the
+.Fl v
+option.
.It Fl r
The file system is to be mounted read-only.
Mount the file system read-only (even the super-user may not write it).
diff --git a/sbin/mount_ifs/mount.c b/sbin/mount_ifs/mount.c
index 5dbe573..286c2a0 100644
--- a/sbin/mount_ifs/mount.c
+++ b/sbin/mount_ifs/mount.c
@@ -59,6 +59,9 @@ static char sccsid[] = "@(#)mount.c 8.19 (Berkeley) 4/19/94";
#include "pathnames.h"
int debug, verbose, skipvfs;
+int fstab_style = 0;
+
+static char *mnttype[] = INITMOUNTNAMES;
int badvfsname __P((const char *, const char **));
int badvfstype __P((int, const char **));
@@ -72,6 +75,7 @@ int mountfs __P((const char *, const char *, const char *,
int, const char *, const char *));
void prmount __P((const char *, const char *, int));
void usage __P((void));
+void putfsent __P((const struct statfs *));
/* From mount_ufs.c. */
int mount_ufs __P((int, char * const *));
@@ -112,8 +116,12 @@ main(argc, argv)
options = NULL;
vfslist = NULL;
vfstype = "ufs";
- while ((ch = getopt(argc, argv, "adfo:rwt:uv")) != EOF)
+ while ((ch = getopt(argc, argv, "padfo:rwt:uv")) != EOF)
switch (ch) {
+ case 'p':
+ fstab_style = 1;
+ verbose = 1;
+ break;
case 'a':
all = 1;
break;
@@ -173,6 +181,15 @@ main(argc, argv)
fs->fs_mntops))
rval = 1;
}
+ else if (fstab_style) {
+ if ((mntsize = getmntinfo(&mntbuf, MNT_NOWAIT)) == 0)
+ err(1, "getmntinfo");
+ for (i = 0; i < mntsize; i++) {
+ if (badvfstype(mntbuf[i].f_type, vfslist))
+ continue;
+ putfsent (&mntbuf[i]);
+ }
+ }
else {
if ((mntsize = getmntinfo(&mntbuf, MNT_NOWAIT)) == 0)
err(1, "getmntinfo");
@@ -372,7 +389,12 @@ mountfs(vfstype, spec, name, flags, options, mntopts)
warn("%s", name);
return (1);
}
- prmount(sf.f_mntfromname, sf.f_mntonname, sf.f_flags);
+
+ if (fstab_style)
+ putfsent (&sf);
+ else
+ prmount (sf.f_mntfromname,
+ sf.f_mntonname, sf.f_flags);
}
break;
}
@@ -530,9 +552,48 @@ usage()
(void)fprintf(stderr,
"usage: mount %s %s\n mount %s\n mount %s\n",
- "[-dfruvw] [-o options] [-t ufs | external_type]",
+ "[-dfpruvw] [-o options] [-t ufs | external_type]",
"special node",
- "[-adfruvw] [-t ufs | external_type]",
- "[-dfruvw] special | node");
+ "[-adfpruvw] [-t ufs | external_type]",
+ "[-dfpruvw] special | node");
exit(1);
}
+
+void
+putfsent (ent)
+ const struct statfs *ent;
+{
+ struct fstab *fst;
+
+ printf ("%s\t%s\t%s %s",
+ ent->f_mntfromname, ent->f_mntonname,
+ mnttype[ent->f_type],
+ (ent->f_flags & MNT_RDONLY) ? "ro" : "rw");
+
+ if (ent->f_flags & MNT_SYNCHRONOUS)
+ printf (",sync");
+
+ if (ent->f_flags & MNT_NOEXEC)
+ printf (",noexec");
+
+ if (ent->f_flags & MNT_NOSUID)
+ printf (",nosuid");
+
+ if (ent->f_flags & MNT_NODEV)
+ printf (",nodev");
+
+ if (ent->f_flags & MNT_UNION)
+ printf (",union");
+
+ if (ent->f_flags & MNT_ASYNC)
+ printf (",async");
+
+ if (fst = getfsspec (ent->f_mntfromname))
+ printf ("\t%u %u\n", fst->fs_freq, fst->fs_passno);
+ else if (fst = getfsfile (ent->f_mntonname))
+ printf ("\t%u %u\n", fst->fs_freq, fst->fs_passno);
+ else if (ent->f_type == MOUNT_UFS)
+ printf ("\t1 1\n");
+ else
+ printf ("\t0 0\n");
+}
OpenPOWER on IntegriCloud