\fB<dirname|filename>\fR
.br
.B lfs osts
+.RB [ path ]
.br
.B lfs getstripe [--obd|-O <uuid>] [--quiet|-q] [--verbose|-v]
\fB[--count | -c ] [--index | -i | --offset | -o ]
To search the directory tree rooted at the given dir/file name for the files that match the given parameters: \fB--atime\fR (file was last accessed N*24 hours ago), \fB--ctime\fR (file's status was last changed N*24 hours ago), \fB--mtime\fR (file's data was last modified N*24 hours ago), \fB--obd\fR (file has an object on a specific OST or OSTs), \fB--size\fR (file has size in bytes, or \fBk\fRilo-, \fBM\fRega-, \fBG\fRiga-, \fBT\fRera-, \fBP\fReta-, or \fBE\fRxabytes if a suffix is given), \fB--type\fR (file has the type: \fBb\fRlock, \fBc\fRharacter, \fBd\fRirectory, \fBp\fRipe, \fBf\fRile, sym\fBl\fRink, \fBs\fRocket, or \fBD\fRoor (Solaris)), \fB--uid\fR (file has specific numeric user ID), \fB--user\fR (file owned by specific user, numeric user ID allowed), \fB--gid\fR (file has specific group ID), \fB--group\fR (file belongs to specific group, numeric group ID allowed). The option \fB--maxdepth\fR limits find to decend at most N levels of directory tree. The options \fB--print\fR and \fB--print0\fR print full file name, followed by a newline or NUL character correspondingly. Using \fB!\fR before an option negates its meaning (\fIfiles NOT matching the parameter\fR). Using \fB+\fR before a numeric value means \fIfiles with the parameter OR MORE\fR, while \fB-\fR before a numeric value means \fIfiles with the parameter OR LESS\fR.
.TP
.B osts
-List all the OSTs for the filesystem
+.RB [ path ]
+List all the OSTs for all mounted filesystems. If a \fBpath\fR is provided
+that is located on a lustre mounted file system then only the OSTs belonging
+to that filesystem are displayed.
.TP
.B getstripe [--obd|-O <uuid>] [--quiet|-q] [--verbose|-v]
\fB[--count | -c ] [--index | -i | --offset | -o ]
{"join", lfs_join, 0,
"join two lustre files into one.\n"
"obsolete, HEAD does not support it anymore.\n"},
- {"osts", lfs_osts, 0, "osts"},
+ {"osts", lfs_osts, 0, "list OSTs connected to client "
+ "[for specified path only]\n" "usage: osts [path]"},
{"df", lfs_df, 0,
"report filesystem disk space usage or inodes usage"
"of each MDS and all OSDs or a batch belonging to a specific pool .\n"
static int lfs_osts(int argc, char **argv)
{
- char mntdir[PATH_MAX] = {'\0'};
+ char mntdir[PATH_MAX] = {'\0'}, path[PATH_MAX] = {'\0'};
struct find_param param;
int index = 0, rc=0;
- if (argc != 1)
+ if (argc > 2)
return CMD_HELP;
- while (llapi_search_mounts(NULL, index++, mntdir, NULL) == 0) {
+ if (argc == 2 && !realpath(argv[1], path)) {
+ rc = -errno;
+ fprintf(stderr, "error: invalid path '%s': %s\n",
+ argv[1], strerror(-rc));
+ return rc;
+ }
+
+ while (!llapi_search_mounts(path, index++, mntdir, NULL)) {
+ /* Check if we have a mount point */
+ if (mntdir[0] == '\0')
+ continue;
+
memset(¶m, 0, sizeof(param));
rc = llapi_ostlist(mntdir, ¶m);
if (rc) {
fprintf(stderr, "error: %s: failed on %s\n",
argv[0], mntdir);
}
+ if (path[0] != '\0')
+ break;
memset(mntdir, 0, PATH_MAX);
}
printf("\n");
showdf(mntdir, &sum, "filesystem summary:", ishow, cooked, NULL, 0,0);
-
+ printf("\n");
return 0;
}
static int lfs_df(int argc, char **argv)
{
- char *path = NULL;
- char *mntdir = NULL;
+ char mntdir[PATH_MAX] = {'\0'}, path[PATH_MAX] = {'\0'};
int ishow = 0, cooked = 0;
- int c, rc = 0;
+ int c, rc = 0, index = 0;
char fsname[PATH_MAX] = "", *pool_name = NULL;
struct option long_opts[] = {
{"pool", required_argument, 0, 'p'},
return CMD_HELP;
}
}
- if (optind < argc )
- path = argv[optind];
-
- if ((mntdir = malloc(PATH_MAX)) == NULL) {
- fprintf(stderr, "error: cannot allocate %d bytes\n",
- PATH_MAX);
- return -ENOMEM;
+ if (optind < argc && !realpath(argv[optind], path)) {
+ rc = -errno;
+ fprintf(stderr, "error: invalid path '%s': %s\n",
+ argv[optind], strerror(-rc));
+ return rc;
}
- memset(mntdir, 0, PATH_MAX);
- if (path) {
- char rpath[PATH_MAX] = {'\0'};
-
- if (!realpath(path, rpath)) {
- rc = -errno;
- fprintf(stderr, "error: invalid path '%s': %s\n",
- path, strerror(-rc));
- } else {
- rc = llapi_search_mounts(rpath, 0, mntdir, fsname);
- if (rc == 0 && mntdir[0] != '\0') {
- rc = mntdf(mntdir, fsname, pool_name,
- ishow, cooked);
- printf("\n");
- }
- }
- } else {
- int index = 0;
+ while (!llapi_search_mounts(path, index++, mntdir, fsname)) {
+ /* Check if we have a mount point */
+ if (mntdir[0] == '\0')
+ continue;
- while (llapi_search_mounts(NULL, index++, mntdir, fsname)==0) {
- rc = mntdf(mntdir, fsname, pool_name,
- ishow, cooked);
- if (rc)
- break;
- printf("\n");
- fsname[0] = '\0'; /* avoid matching in next loop */
- mntdir[0] = '\0'; /* avoid matching in next loop */
- }
+ rc = mntdf(mntdir, fsname, pool_name, ishow, cooked);
+ if (rc || path[0] != '\0')
+ break;
+ fsname[0] = '\0'; /* avoid matching in next loop */
+ mntdir[0] = '\0'; /* avoid matching in next loop */
}
- free(mntdir);
return rc;
}