X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Futils%2Flctl.c;h=5c6892c28c42130b9431bbd66d84fd69a23d2793;hp=5d132938ee9b0b9422c6a84992c6971d012f47a9;hb=281671b5ee43c2aea5d5b708aadf10fd1df45b16;hpb=adde80ffefe375e113c0e4a2a5f8e37519205b5c diff --git a/lustre/utils/lctl.c b/lustre/utils/lctl.c index 5d13293..5c6892c 100644 --- a/lustre/utils/lctl.c +++ b/lustre/utils/lctl.c @@ -1,6 +1,4 @@ -/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: - * +/* * GPL HEADER START * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -16,8 +14,8 @@ * in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU General Public License - * version 2 along with this program; If not, see [sun.com URL with a - * copy of GPLv2]. + * version 2 along with this program; If not, see + * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, * CA 95054 USA or visit www.sun.com if you need additional information or @@ -26,8 +24,10 @@ * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. + * + * Copyright (c) 2012, 2013, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -45,6 +45,7 @@ #include #include "obdctl.h" #include +#include static int jt_quit(int argc, char **argv) { Parser_quit(argc, argv); @@ -85,7 +86,7 @@ command_t cmdlist[] = { /* Network configuration commands */ {"===== network config =====", jt_noop, 0, "network config"}, {"--net", jt_opt_net, 0,"run after setting network to \n" - "usage: --net "}, + "usage: --net "}, {"network", jt_ptl_network, 0, "configure LNET" "usage: network up|down"}, {"net", jt_ptl_network, 0, "configure LNET" @@ -94,6 +95,9 @@ command_t cmdlist[] = { "usage: list_nids [all]"}, {"which_nid", jt_ptl_which_nid, 0, "choose a NID" "usage: which_nid NID [NID...]"}, + {"replace_nids", jt_replace_nids, 0, + "replace primary NIDs for a device\n" + "usage: replace_nids [,nid2,nid3]"}, {"interface_list", jt_ptl_print_interfaces,0,"print interface entries\n" "usage: interface_list"}, {"peer_list", jt_ptl_print_peers, 0, "print peer entries\n" @@ -131,20 +135,37 @@ command_t cmdlist[] = { "abort recovery on a restarting MDT or OST device\n"}, {"set_timeout", jt_lcfg_set_timeout, 0, "usage: conf_param obd_timeout=\n"}, - {"conf_param", jt_lcfg_mgsparam, 0, "set a permanent config param. " +#if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(3, 0, 53, 0) + {"conf_param", jt_lcfg_mgsparam, 0,"set a permanent config parameter.\n" "This command must be run on the MGS node\n" - "usage: conf_param ...\n"}, + "usage: conf_param [-d] \n" + " -d Remove the permanent setting."}, +#endif {"local_param", jt_lcfg_param, 0, "set a temporary, local param\n" - "usage: local_param ...\n"}, + "usage: local_param \n"}, {"get_param", jt_lcfg_getparam, 0, "get the Lustre or LNET parameter\n" - "usage: get_param [-n|-N] name.of.param\n" - "Get the value of Lustre or LNET parameter from the specified path\n" - "Use '-n' to disable printing of parameter name when printing value\n" - "Use '-N' to print only parameter names and not the values."}, + "usage: get_param [-n|-N|-F] \n" + "Get the value of Lustre or LNET parameter from the specified path.\n" + "The path can contain shell-style filename patterns.\n" + " -n Print only the value and not parameter name.\n" + " -N Print only matched parameter names and not the values.\n" + " (Especially useful when using patterns.)\n" + " -F When -N specified, add '/', '@' or '=' for directories,\n" + " symlinks and writeable files, respectively."}, {"set_param", jt_lcfg_setparam, 0, "set the Lustre or LNET parameter\n" - "usage: set_param [-n] name.of.param=value\n" - "Set the value of the Lustre or LNET parameter at the specified path\n" - "Use '-n' to disable printing of parameter name when setting value\n"}, + "usage: set_param [-n] [-P] [-d]" + "\n" + "Set the value of the Lustre or LNET parameter at the specified path.\n" + " -n Disable printing of the key name when printing values.\n" + " -P Set the parameter permanently, filesystem-wide.\n" + " -d Remove the permanent setting (only with -P option).\n"}, + {"list_param", jt_lcfg_listparam, 0, + "list the Lustre or LNET parameter name\n" + "usage: list_param [-F|-R] \n" + "List the name of Lustre or LNET parameter from the specified path.\n" + " -F Add '/', '@' or '=' for dirs, symlinks and writeable files,\n" + "respectively.\n" + " -R Recursively list all parameters under the specified path.\n"}, /* Debug commands */ {"==== debugging control ====", jt_noop, 0, "debug"}, @@ -178,6 +199,74 @@ command_t cmdlist[] = { "provide gdb-friendly module information\n" "usage: modules "}, + /* virtual block operations */ + {"==== virtual block device ====", jt_noop, 0, "virtual block device"}, + {"blockdev_attach", jt_blockdev_attach, 0, + "attach a lustre regular file to a virtual block device\n" + "usage: blockdev_attach "}, + {"blockdev_detach", jt_blockdev_detach, 0, + "detach a lustre regular file from a virtual block device\n" + "usage: blockdev_detach "}, + {"blockdev_info", jt_blockdev_info, 0, + "get the device info of a attached file\n" + "usage: blockdev_info "}, + + /* Pool commands */ + {"=== Pools ==", jt_noop, 0, "pool management"}, + {"pool_new", jt_pool_cmd, 0, + "add a new pool\n" + "usage: pool_new ."}, + {"pool_add", jt_pool_cmd, 0, + "add the named OSTs to the pool\n" + "usage: pool_add . "}, + {"pool_remove", jt_pool_cmd, 0, + "remove the named OST from the pool\n" + "usage: pool_remove . "}, + {"pool_destroy", jt_pool_cmd, 0, + "destroy a pool\n" + "usage: pool_destroy ."}, + {"pool_list", jt_pool_cmd, 0, + "list pools and pools members\n" + "usage: pool_list [.] | "}, + + /* Nodemap commands */ + {"=== Nodemap ===", jt_noop, 0, "nodemap management"}, + {"nodemap_activate", jt_nodemap_activate, 0, + "activate nodemap idmapping functions\n" + "usage: nodemap_activate"}, + {"nodemap_add", jt_nodemap_add, 0, + "add a new nodemap\n" + "usage: nodemap_add "}, + {"nodemap_del", jt_nodemap_del, 0, + "remove a nodemap\n" + "usage: nodemap_del "}, + {"nodemap_add_range", jt_nodemap_add_range, 0, + "add a range to a nodemap\n" + "usage: nodemap_add_range "}, + {"nodemap_del_range", jt_nodemap_del_range, 0, + "add a range to a nodemap\n" + "usage: nodemap_del_range "}, + {"nodemap_modify", jt_nodemap_modify, 0, + "modify a nodemap parameters" + "usage: nodemap_modify nodemap_name param value"}, + {"nodemap_add_idmap", jt_nodemap_add_idmap, 0, + "add a UID or GID mapping to a nodemap"}, + {"nodemap_del_idmap", jt_nodemap_del_idmap, 0, + "delete a UID or GID mapping from a nodemap"}, + {"nodemap_test_nid", jt_nodemap_test_nid, 0, + "usage: nodemap_test_nid "}, + {"nodemap_test_id", jt_nodemap_test_id, 0, + "Usage: nodemap_test_id --nid --idtype [uid|gid] --id "}, + + /* Changelog commands */ + {"=== Changelogs ==", jt_noop, 0, "changelog user management"}, + {"changelog_register", jt_changelog_register, 0, + "register a new persistent changelog user, returns id\n" + "usage:\tdevice \n\tchangelog_register [-n]"}, + {"changelog_deregister", jt_changelog_deregister, 0, + "deregister an existing changelog user\n" + "usage:\tdevice \n\tchangelog_deregister "}, + /* Device configuration commands */ {"== device setup (these are not normally used post 1.4) ==", jt_noop, 0, "device config"}, @@ -196,18 +285,6 @@ command_t cmdlist[] = { "print log of recorded commands for this config to kernel debug log\n" "usage: dump_cfg config-uuid-name"}, - /* virtual block operations */ - {"==== virtual block device ====", jt_noop, 0, "virtual block device"}, - {"blockdev_attach", jt_blockdev_attach, 0, - "attach a lustre regular file to a virtual block device\n" - "usage: blockdev_attach "}, - {"blockdev_detach", jt_blockdev_detach, 0, - "detach a lustre regular file from a virtual block device\n" - "usage: blockdev_detach "}, - {"blockdev_info", jt_blockdev_info, 0, - "get the device info of a attached file\n" - "usage: blockdev_info "}, - /* Test only commands */ {"==== testing (DANGEROUS) ====", jt_noop, 0, "testing (DANGEROUS)"}, {"--threads", jt_opt_threads, 0, @@ -233,6 +310,8 @@ command_t cmdlist[] = { "usage: del_conn \n"}, {"disconnect", jt_ptl_disconnect, 0, "disconnect from a remote nid\n" "usage: disconnect []"}, + {"push", jt_ptl_push_connection, 0, "flush connection to a remote nid\n" + "usage: push []"}, {"mynid", jt_ptl_mynid, 0, "inform the socknal of the local nid. " "The nid defaults to hostname for tcp networks and is automatically " "setup for elan/myrinet networks.\n" @@ -241,13 +320,43 @@ command_t cmdlist[] = { "Omitting the count means indefinitely, 0 means restore, " "otherwise fail 'count' messages.\n" "usage: fail nid|_all_ [count]"}, + + /*Test commands for echo client*/ + {"test_create", jt_obd_test_create, 0, + "create files on MDT by echo client\n" + "usage: test_create [-d parent_basedir] <-D parent_count> " + "[-b child_base_id] <-c stripe_count> <-n count> <-t time>\n"}, + {"test_mkdir", jt_obd_test_mkdir, 0, + "mkdir on MDT by echo client\n" + "usage: test_mkdir [-d parent_basedir] <-D parent_count>" + "[-b child_base_id] [-n count] <-t time>\n"}, + {"test_destroy", jt_obd_test_destroy, 0, + "Destroy files on MDT by echo client\n" + "usage: test_destroy [-d parent_basedir] <-D parent_count>" + "[-b child_base_id] [-n count] <-t time>\n"}, + {"test_rmdir", jt_obd_test_rmdir, 0, + "rmdir on MDT by echo client\n" + "usage: test_rmdir [-d parent_basedir] <-D parent_count>" + "[-b child_base_id] [-n count] <-t time>\n"}, + {"test_lookup", jt_obd_test_lookup, 0, + "lookup files on MDT by echo client\n" + "usage: test_lookup [-d parent_basedir] <-D parent_count>" + "[-b child_base_id] [-n count] <-t time>\n"}, + {"test_setxattr", jt_obd_test_setxattr, 0, + "Set EA for files/directory on MDT by echo client\n" + "usage: test_setxattr [-d parent_baseid] <-D parent_count>" + "[-b child_base_id] [-n count] <-t time>\n"}, + {"test_md_getattr", jt_obd_test_md_getattr, 0, + "getattr files on MDT by echo client\n" + "usage: test_md_getattr [-d parent_basedir] <-D parent_count>" + "[-b child_base_id] [-n count] <-t time>\n"}, {"getattr", jt_obd_getattr, 0, "get attribute for OST object \n" "usage: getattr "}, {"setattr", jt_obd_setattr, 0, "set mode attribute for OST object \n" "usage: setattr "}, - {"create", jt_obd_create, 0, + {"create", jt_obd_create, 0, "create OST objects (with )\n" "usage: create [num [mode [verbose [lsm data]]]]"}, {"destroy", jt_obd_destroy, 0, @@ -262,66 +371,85 @@ command_t cmdlist[] = { {"test_brw", jt_obd_test_brw, 0, "do bulk read/writes ( per I/O, on OST object )\n" "usage: test_brw [t] [write [verbose [npages [[t]objid]]]]"}, - {"lwt", jt_ptl_lwt, 0, - "light-weight tracing\n" - "usage: lwt start\n" - " lwt stop [file]"}, {"memhog", jt_ptl_memhog, 0, "memory pressure testing\n" "usage: memhog []"}, + {"getobjversion", jt_get_obj_version, 0, + "get the version of an object on servers\n" + "usage: getobjversion \n" + " getobjversion -i -g "}, + + /* LFSCK commands */ + {"==== LFSCK ====", jt_noop, 0, "LFSCK"}, + {"lfsck_start", jt_lfsck_start, 0, "start LFSCK\n" + "usage: lfsck_start <-M | --device [MDT,OST]_device>\n" + " [-A | --all] [-c | --create_ostobj [swtich]]\n" + " [-e | --error error_handle] [-h | --help]\n" + " [-n | --dryrun [switch]] [-o | --orphan]\n" + " [-r | --reset] [-s | --speed speed_limit]\n" + " [-t | --type lfsck_type[,lfsck_type...]]\n" + " [-w | --windows win_size]"}, + {"lfsck_stop", jt_lfsck_stop, 0, "stop lfsck(s)\n" + "usage: lfsck_stop <-M | --device [MDT,OST]_device>\n" + " [-A | --all] [-h | --help]"}, - {"==== obsolete (DANGEROUS) ====", jt_noop, 0, "obsolete (DANGEROUS)"}, - /* some test scripts still use these */ - {"cfg_device", jt_obd_device, 0, - "set current device to \n" - "usage: device "}, - {"recover", jt_obd_recover, 0, - "try to restore a lost connection immediately\n" - "usage: recover [MDC/OSC device]"}, - /* saving for sanity 44a */ - {"lov_getconfig", jt_obd_lov_getconfig, 0, - "read lov configuration from an mds device\n" - "usage: lov_getconfig "}, - /* Llog operations */ - {"llog_catlist", jt_llog_catlist, 0, - "list all catalog logs on current device.\n" - "usage: llog_catlist"}, - {"llog_info", jt_llog_info, 0, - "print log header information.\n" - "usage: llog_info <$logname|#oid#ogr#ogen>\n" - " oid, ogr and ogen are hexadecimal."}, - {"llog_print", jt_llog_print, 0, - "print log content information.\n" - "usage: llog_print <$logname|#oid#ogr#ogen> [from] [to]\n" - " oid, ogr and ogen are hexadecimal.\n" - " print all records from index 1 by default."}, - {"llog_check", jt_llog_check, 0, - "print log content information.\n" - "usage: llog_check <$logname|#oid#ogr#ogen> [from] [to]\n" - " oid, ogr and ogen are hexadecimal.\n" - " check all records from index 1 by default."}, - {"llog_cancel", jt_llog_cancel, 0, - "cancel one record in log.\n" - "usage: llog_cancel "}, - {"llog_remove", jt_llog_remove, 0, - "remove one log from catalog, erase it from disk.\n" - "usage: llog_remove "}, - /* network operations */ - {"add_interface", jt_ptl_add_interface, 0, "add interface entry\n" - "usage: add_interface ip [netmask]"}, - {"del_interface", jt_ptl_del_interface, 0, "del interface entry\n" - "usage: del_interface [ip]"}, - {"add_route", jt_ptl_add_route, 0, - "add an entry to the portals routing table\n" - "usage: add_route []"}, - {"del_route", jt_ptl_del_route, 0, - "delete route via gateway to targets from the portals routing table\n" - "usage: del_route [] []"}, - {"set_route", jt_ptl_notify_router, 0, - "enable/disable routes via gateway in the portals routing table\n" - "usage: set_route [