lfs.c
来自「lustre 1.6.5 source code」· C语言 代码 · 共 1,844 行 · 第 1/5 页
C
1,844 行
if (cooked) { int i; double cook_val; cook_val = (double)total; i = COOK(cook_val); if (i > 0) sprintf(tbuf, HDF"%c", cook_val, suffix[i - 1]); else sprintf(tbuf, CDF, total); cook_val = (double)used; i = COOK(cook_val); if (i > 0) sprintf(ubuf, HDF"%c", cook_val, suffix[i - 1]); else sprintf(ubuf, CDF, used); cook_val = (double)avail; i = COOK(cook_val); if (i > 0) sprintf(abuf, HDF"%c", cook_val, suffix[i - 1]); else sprintf(abuf, CDF, avail); } else { sprintf(tbuf, CDF, total); sprintf(ubuf, CDF, used); sprintf(abuf, CDF, avail); } sprintf(rbuf, RDF, (int)(ratio * 100)); printf(UUF" "CSF" "CSF" "CSF" "RSF" %-s", uuid, tbuf, ubuf, abuf, rbuf, mntdir); if (type) printf("[%s:%d]\n", type, index); else printf("\n"); break; case -ENODATA: printf(UUF": inactive device\n", uuid); break; default: printf(UUF": %s\n", uuid, strerror(-rc)); break; } return 0;}static int mntdf(char *mntdir, int ishow, int cooked){ struct obd_statfs stat_buf, sum = { .os_bsize = 1 }; struct obd_uuid uuid_buf; __u32 index; int rc; if (ishow) printf(UUF" "CSF" "CSF" "CSF" "RSF" %-s\n", "UUID", "Inodes", "IUsed", "IFree", "IUse%", "Mounted on"); else printf(UUF" "CSF" "CSF" "CSF" "RSF" %-s\n", "UUID", cooked ? "bytes" : "1K-blocks", "Used", "Available", "Use%", "Mounted on"); for (index = 0; ; index++) { memset(&stat_buf, 0, sizeof(struct obd_statfs)); memset(&uuid_buf, 0, sizeof(struct obd_uuid)); rc = llapi_obd_statfs(mntdir, LL_STATFS_MDC, index, &stat_buf, &uuid_buf); if (rc == -ENODEV) break; if (rc == -EAGAIN) continue; if (rc == -ENOTCONN || rc == -ETIMEDOUT || rc == -EIO || rc == -ENODATA || rc == 0) { showdf(mntdir, &stat_buf, obd_uuid2str(&uuid_buf), ishow, cooked, "MDT", index, rc); } else { fprintf(stderr, "error: llapi_obd_statfs(%s): %s (%d)\n", obd_uuid2str(&uuid_buf), strerror(-rc), rc); return rc; } if (rc == 0) { sum.os_ffree += stat_buf.os_ffree; sum.os_files += stat_buf.os_files; } } for (index = 0; ; index++) { memset(&stat_buf, 0, sizeof(struct obd_statfs)); memset(&uuid_buf, 0, sizeof(struct obd_uuid)); rc = llapi_obd_statfs(mntdir, LL_STATFS_LOV, index, &stat_buf, &uuid_buf); if (rc == -ENODEV) break; if (rc == -EAGAIN) continue; if (rc == -ENOTCONN || rc == -ETIMEDOUT || rc == -EIO || rc == -ENODATA || rc == 0) { showdf(mntdir, &stat_buf, obd_uuid2str(&uuid_buf), ishow, cooked, "OST", index, rc); } else { fprintf(stderr, "error: llapi_obd_statfs failed: %s (%d)\n", strerror(-rc), rc); return rc; } if (rc == 0) { sum.os_blocks += stat_buf.os_blocks * stat_buf.os_bsize; sum.os_bfree += stat_buf.os_bfree * stat_buf.os_bsize; sum.os_bavail += stat_buf.os_bavail * stat_buf.os_bsize; } } printf("\n"); showdf(mntdir, &sum, "filesystem summary:", ishow, cooked, NULL, 0,0); return 0;}static int lfs_df(int argc, char **argv){ FILE *fp; char *path = NULL; struct mntent *mnt = NULL; char mntdir[PATH_MAX] = {'\0'}; int ishow = 0, cooked = 0; int c, rc = 0; optind = 0; while ((c = getopt(argc, argv, "ih")) != -1) { switch (c) { case 'i': ishow = 1; break; case 'h': cooked = 1; break; default: return CMD_HELP; } } if (optind < argc ) path = argv[optind]; fp = setmntent(MOUNTED, "r"); if (fp == NULL) { rc = -errno; fprintf(stderr, "error: %s: open %s failed( %s )\n", argv[0], MOUNTED, strerror(errno)); return rc; } if (path) { rc = path2mnt(path, fp, mntdir, sizeof(mntdir)); if (rc) { endmntent(fp); return rc; } rc = mntdf(mntdir, ishow, cooked); printf("\n"); endmntent(fp); } else { mnt = getmntent(fp); while (feof(fp) == 0 && ferror(fp) == 0) { if (llapi_is_lustre_mnt(mnt)) { rc = mntdf(mnt->mnt_dir, ishow, cooked); if (rc) break; printf("\n"); } mnt = getmntent(fp); } endmntent(fp); } return rc;}static int lfs_check(int argc, char **argv){ int rc; FILE *fp; struct mntent *mnt = NULL; int num_types = 1; char *obd_types[2]; char obd_type1[4]; char obd_type2[4]; if (argc != 2) return CMD_HELP; obd_types[0] = obd_type1; obd_types[1] = obd_type2; if (strcmp(argv[1], "osts") == 0) { strcpy(obd_types[0], "osc"); } else if (strcmp(argv[1], "mds") == 0) { strcpy(obd_types[0], "mdc"); } else if (strcmp(argv[1], "servers") == 0) { num_types = 2; strcpy(obd_types[0], "osc"); strcpy(obd_types[1], "mdc"); } else { fprintf(stderr, "error: %s: option '%s' unrecognized\n", argv[0], argv[1]); return CMD_HELP; } fp = setmntent(MOUNTED, "r"); if (fp == NULL) { fprintf(stderr, "setmntent(%s): %s:", MOUNTED, strerror (errno)); } else { mnt = getmntent(fp); while (feof(fp) == 0 && ferror(fp) ==0) { if (llapi_is_lustre_mnt(mnt)) break; mnt = getmntent(fp); } endmntent(fp); } if (!mnt) { fprintf(stderr, "No suitable Lustre mount found\n"); return -1; } rc = llapi_target_check(num_types, obd_types, mnt->mnt_dir); if (rc) fprintf(stderr, "error: %s: %s status failed\n", argv[0],argv[1]); return rc;}static int lfs_catinfo(int argc, char **argv){ FILE *fp; struct mntent *mnt = NULL; int rc; if (argc < 2 || (!strcmp(argv[1],"config") && argc < 3)) return CMD_HELP; if (strcmp(argv[1], "config") && strcmp(argv[1], "deletions")) return CMD_HELP; fp = setmntent(MOUNTED, "r"); if (fp == NULL) { fprintf(stderr, "setmntent(%s): %s:", MOUNTED, strerror(errno)); } else { mnt = getmntent(fp); while (feof(fp) == 0 && ferror(fp) == 0) { if (llapi_is_lustre_mnt(mnt)) break; mnt = getmntent(fp); } endmntent(fp); } if (mnt) { if (argc == 3) rc = llapi_catinfo(mnt->mnt_dir, argv[1], argv[2]); else rc = llapi_catinfo(mnt->mnt_dir, argv[1], NULL); } else { fprintf(stderr, "no lustre_lite mounted.\n"); rc = -1; } return rc;}int lfs_join(int argc, char **argv){ char *name_head, *name_tail; int fd, rc; loff_t size; if (argc != 3) return CMD_HELP; name_head = argv[1]; fd = open(name_head, O_WRONLY); if (fd < 0) { fprintf(stderr, "Can not open name_head %s rc=%d\n", name_head, fd); return fd; } size = lseek(fd, 0, SEEK_END); if (size % JOIN_FILE_ALIGN) { fprintf(stderr,"head file %s size %llu must be mutiple of %d\n", name_head, (long long)size, JOIN_FILE_ALIGN); rc = -EINVAL; goto out; } name_tail = argv[2]; rc = ioctl(fd, LL_IOC_JOIN, name_tail);out: close(fd); if (rc) { fprintf(stderr, "Lustre joining files: %s, %s, failed\n", argv[1], argv[2]); } return rc;}#ifdef HAVE_QUOTA_SUPPORTstatic int lfs_quotachown(int argc, char **argv){ int c,rc; int flag = 0; optind = 0; while ((c = getopt(argc, argv, "i")) != -1) { switch (c) { case 'i': flag++; break; default: fprintf(stderr, "error: %s: option '-%c' " "unrecognized\n", argv[0], c); return CMD_HELP; } } if (optind == argc) return CMD_HELP; rc = llapi_quotachown(argv[optind], flag); if(rc) fprintf(stderr,"error: change file owner/group failed.\n"); return rc;}static int lfs_quotacheck(int argc, char **argv){ int c, check_type = 0; char *mnt; struct if_quotacheck qchk; struct if_quotactl qctl; char *obd_type = (char *)qchk.obd_type; int rc; memset(&qchk, 0, sizeof(qchk)); optind = 0; while ((c = getopt(argc, argv, "ug")) != -1) { switch (c) { case 'u': check_type |= 0x01; break; case 'g': check_type |= 0x02; break; default: fprintf(stderr, "error: %s: option '-%c' " "unrecognized\n", argv[0], c);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?