fstab \- static information about the filesystems
.SH SYNOPSIS
.B /etc/fstab
+.sp
+.B /etc/fstab.d
.SH DESCRIPTION
The file
-.B fstab
+.B /etc/fstab
contains descriptive information about the various file systems.
.B fstab
is only read by programs, and not written; it is the duty of the system
.B fstab
doing their thing.
+The directory
+.B /etc/fstab.d
+is optional and contains fstab-like files. All files without .fstab extension or with '.' prefix
+are ignored. The directory
+.B /etc/fstab.d
+is supported by
+.BR mount (8)
+and
+.BR umount (8)
+programs only if linked with libmount. The files in the directory are parsed in
+order defined by
+.BR strverscmp (3)
+function. The command \fBfindmnt --fstab\fP returns complete list of the filesystems.
+
.B The first field
.RI ( fs_spec ).
.RS
.SH "SEE ALSO"
.BR mount (8),
.BR swapon (8),
+.BR findmnt (8),
.BR fs (5),
.BR nfs (5),
.BR xfs (5),
}
#ifdef HAVE_LIBMOUNT_MOUNT
-
-#define USE_UNSTABLE_LIBMOUNT_API
#include <libmount.h> /* libmount */
-static void read_mounttable()
+static int parser_errcb(struct libmnt_table *tb __attribute__((__unused__)),
+ const char *filename, int line)
{
- struct mntentchn *mc0 = &mounttable, *mc = mc0;
+ fprintf(stderr, _("%s: %d: parse error -- line ignored.\n"),
+ filename, line);
+
+ return 1; /* = recoverable error
+ * (the line is ignored, parsing continue) */
+}
+
+static void read_tab_common(struct mntentchn *mc0,
+ int (* reader)(struct libmnt_table *tb,
+ const char *filename),
+ const char *name_in_errmsg)
+{
+ struct mntentchn *mc = mc0;
struct libmnt_table *tb = mnt_new_table();
struct libmnt_iter *itr = mnt_new_iter(MNT_ITER_FORWARD);
struct libmnt_fs *fs;
- got_mtab = 1;
mc->nxt = mc->prev = NULL;
if (!tb || !itr)
goto err;
- if (mnt_table_parse_mtab(tb, NULL))
+
+ mnt_table_set_parser_errcb(tb, parser_errcb);
+
+ if (reader(tb, NULL))
goto err;
while(mnt_table_next_fs(tb, itr, &fs) == 0) {
mc0->prev = mc;
return;
err:
- error(_("warning: failed to read mtab"));
+ error(_("warning: failed to parse %s"), name_in_errmsg);
mnt_free_table(tb);
mnt_free_iter(itr);
mc->nxt = mc->prev = NULL;
}
+static void read_mounttable()
+{
+ got_mtab = 1;
+ read_tab_common(&mounttable, mnt_table_parse_mtab, "mtab");
+}
+
+static void read_fstab()
+{
+ got_fstab = 1;
+ read_tab_common(&fstab, mnt_table_parse_fstab, "fstab");
+}
#else /* !HAVE_LIBMOUNT_MOUNT */
/*
}
read_mntentchn(mfp, fnam, mc);
}
-#endif /* HAVE_LIBMOUNT_MOUNT */
static void
read_fstab() {
}
read_mntentchn(mfp, fnam, mc);
}
+#endif /* !HAVE_LIBMOUNT_MOUNT */
/* Given the name NAME, try to find it in mtab. */
.BR fstab (5)),
may contain lines describing what devices are usually
mounted where, using which options.
+
+If the
+.B mount
+command is linked with libmount, then filesystems could be also defined in
+.I /etc/fstab.d/*.fstab
+files. See
+.BR fstab (5)
+for more details.
.LP
The command
.RS
When mounting a filesystem mentioned in
.IR fstab
or
-.IR mtab ,
+.IR mtab,
it suffices to give only the device, or only the mount point.
.I /etc/fstab
filesystem table
.TP
+.I /etc/fstab.d
+directory with filesystem tables
+.TP
.I /etc/mtab
table of mounted filesystems
.TP
.BR fstab (5),
.BR umount (8),
.BR swapon (8),
+.BR findmnt (8),
.BR nfs (5),
.BR xfs (5),
.BR e2label (8),