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 + -
显示快捷键?