X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Futils%2Flctl.c;h=7e7bb7ccc45ccbf27a541c0f0fffb2fa969ad6a4;hp=32473b58a6530eb7808b8929b0b6a797ed7d25c8;hb=b0efebdaef52d8ac9b02857166ceb00079612ebc;hpb=7a16f18ae1ef5d21812c916470022280617c4e91 diff --git a/lustre/utils/lctl.c b/lustre/utils/lctl.c index 32473b5..7e7bb7c 100644 --- a/lustre/utils/lctl.c +++ b/lustre/utils/lctl.c @@ -23,11 +23,10 @@ * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2012, 2016, Intel Corporation. + * Copyright (c) 2012, 2017, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. * * lustre/utils/lctl.c * @@ -49,11 +48,42 @@ static int lctl_list_commands(int argc, char **argv); -static int jt_opt_ignore_errors(int argc, char **argv) { - Parser_ignore_errors(1); - return 0; +static int jt_opt_ignore_errors(int argc, char **argv) +{ + Parser_ignore_errors(1); + return 0; } +static int jt_pcc_list_commands(int argc, char **argv); +static int jt_pcc(int argc, char **argv); + +/** + * command_t pccdev_cmdlist - lctl pcc commands. + */ +command_t pccdev_cmdlist[] = { + { .pc_name = "add", .pc_func = jt_pcc_add, + .pc_help = "Add a PCC backend to a client.\n" + "usage: lctl pcc add [--param|-p ]\n" + "\tmntpath: Lustre mount point.\n" + "\tpccpath: Path of the PCC backend.\n" + "\tparam: Setting parameters for PCC backend.\n" }, + { .pc_name = "del", .pc_func = jt_pcc_del, + .pc_help = "Delete the specified PCC backend on a client.\n" + "usage: clt pcc del \n" }, + { .pc_name = "clear", .pc_func = jt_pcc_clear, + .pc_help = "Remove all PCC backend on a client.\n" + "usage: lctl pcc clear \n" }, + { .pc_name = "list", .pc_func = jt_pcc_list, + .pc_help = "List all PCC backends on a client.\n" + "usage: lctl pcc list \n" }, + { .pc_name = "list-commands", .pc_func = jt_pcc_list_commands, + .pc_help = "list commands supported by lctl pcc"}, + { .pc_name = "help", .pc_func = Parser_help, .pc_help = "help" }, + { .pc_name = "exit", .pc_func = Parser_quit, .pc_help = "quit" }, + { .pc_name = "quit", .pc_func = Parser_quit, .pc_help = "quit" }, + { .pc_help = NULL } +}; + command_t cmdlist[] = { /* Metacommands */ {"===== metacommands =======", NULL, 0, "metacommands"}, @@ -84,17 +114,17 @@ command_t cmdlist[] = { {"===== network config =====", NULL, 0, "network config"}, {"--net", jt_opt_net, 0, "run after selecting network \n" "usage: --net "}, - {"network", jt_ptl_network, 0, "configure LNET" + {"network", jt_ptl_network, 0, "configure LNET\n" "usage: network up|down"}, - {"net", jt_ptl_network, 0, "configure LNET" + {"net", jt_ptl_network, 0, "configure LNET\n" "usage: net up|down"}, - {"list_nids", jt_ptl_list_nids, 0, "list local NIDs" + {"list_nids", jt_ptl_list_nids, 0, "list local NIDs\n" "usage: list_nids [all]"}, - {"which_nid", jt_ptl_which_nid, 0, "choose a NID" + {"which_nid", jt_ptl_which_nid, 0, "choose a NID\n" "usage: which_nid NID [NID...]"}, {"replace_nids", jt_replace_nids, 0, "replace primary NIDs for a device\n" - "usage: replace_nids [,nid2,nid3]"}, + "usage: replace_nids [,nid2,nid3:nid4,nid5:nid6]"}, {"interface_list", jt_ptl_print_interfaces, 0, "print network interface entries\n" "usage: interface_list"}, @@ -104,10 +134,10 @@ command_t cmdlist[] = { "print all the remote LNet connections\n" "usage: conn_list"}, {"route_list", jt_ptl_print_routes, 0, - "print the LNet routing table, same as show_route\n" + "print the LNet routing table, same as 'show_route'\n" "usage: route_list"}, {"show_route", jt_ptl_print_routes, 0, - "print the LNet routing table, same as route_list\n" + "print the LNet routing table, same as 'route_list'\n" "usage: show_route"}, {"ping", jt_ptl_ping, 0, "Check LNET connectivity\n" "usage: ping nid [timeout] [pid]"}, @@ -115,9 +145,10 @@ command_t cmdlist[] = { "usage: net_drop_add <-s | --source NID>\n" " <-d | --dest NID>\n" " <<-r | --rate DROP_RATE> |\n" - " <-i | --interval SECONDS>>\n" + " <-i | --interval SECONDS>>\n" " [<-p | --portal> PORTAL...]\n" - " [<-m | --message> ...]\n"}, + " [<-m | --message> ...]\n" + " [< -e | --health_error]\n"}, {"net_drop_del", jt_ptl_drop_del, 0, "remove LNet drop rule\n" "usage: net_drop_del <[-a | --all] |\n" " <-s | --source NID>\n" @@ -148,9 +179,12 @@ command_t cmdlist[] = { {"device", jt_obd_device, 0, "set current device to \n" "usage: device <%name|$name|devno>"}, + {"cfg_device", jt_obd_device, 0, + "set current device to , same as 'device'\n" + "usage: cfg_device "}, {"device_list", jt_obd_list, 0, "show all devices\n" "usage: device_list"}, - {"dl", jt_obd_list, 0, "show all devices\n" + {"dl", jt_obd_list, 0, "show all devices, same as 'device_list'\n" "usage: dl [-t]"}, /* Device operations */ @@ -160,10 +194,16 @@ command_t cmdlist[] = { "This command should be used on failed OSC devices in an MDT LOV.\n"}, {"abort_recovery", jt_obd_abort_recovery, 0, "abort recovery on a restarting MDT or OST device\n"}, + {"abort_recovery_mdt", jt_obd_abort_recovery_mdt, 0, + "abort recovery between MDTs\n"}, + {"recover", jt_obd_recover, 0, + "try to restore a lost connection immediately\n" + "usage: recover [MDC/OSC device]"}, {"set_timeout", jt_lcfg_set_timeout, 0, "usage: conf_param obd_timeout=\n"}, #if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(3, 0, 53, 0) - {"conf_param", jt_lcfg_mgsparam, 0,"set a permanent config parameter.\n" + {"conf_param", jt_lcfg_confparam, 0, + "set a permanent config parameter.\n" "This command must be run on the MGS node\n" "usage: conf_param [-d] \n" " -d Delete the permanent setting from the configuration."}, @@ -181,12 +221,13 @@ command_t cmdlist[] = { " (Especially useful when using patterns.)\n" " -R Get parameters recursively from the specified entry.\n"}, {"set_param", jt_lcfg_setparam, 0, "set the Lustre or LNET parameter\n" - "usage: set_param [-n] [-P] [-d]" + "usage: set_param [-n] [-P] [-d] [-F]" "\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"}, + " -d Remove the permanent setting (only with -P option).\n" + " -F Read permanent configuration from a YAML file.\n"}, {"list_param", jt_lcfg_listparam, 0, "list the Lustre or LNET parameter name\n" "usage: list_param [-F|-R|-D] \n" @@ -202,16 +243,16 @@ command_t cmdlist[] = { "debug daemon control and dump to a file\n" "usage: debug_daemon {start file [#MB]|stop}"}, {"debug_kernel", jt_dbg_debug_kernel, 0, - "get debug buffer and dump to a file, same as dk\n" + "get debug buffer and dump to a file, same as 'dk'\n" "usage: debug_kernel [file] [raw]"}, {"dk", jt_dbg_debug_kernel, 0, - "get debug buffer and dump to a file, same as debug_kernel\n" + "get debug buffer and dump to a file, same as 'debug_kernel'\n" "usage: dk [file] [raw]"}, {"debug_file", jt_dbg_debug_file, 0, "convert a binary debug file dumped by the kernel to ASCII text\n" "usage: debug_file [output]"}, {"df", jt_dbg_debug_file, 0, - "read debug buffer from input and dump to output, same as debug_file\n" + "read debug log from input convert to ASCII, same as 'debug_file'\n" "usage: df [output]"}, {"clear", jt_dbg_clear_debug_buf, 0, "clear kernel debug buffer\n" "usage: clear"}, @@ -299,6 +340,12 @@ command_t cmdlist[] = { "usage: snapshot_umount <-F | --fsname fsname> [-h | --help]\n" " <-n | --name ssname>\n" " [-r | --rsh remote_shell]"}, + {"fork_lcfg", jt_lcfg_fork, 0, + "copy configuration files for named filesystem with given name\n" + "usage: fork_lcfg "}, + {"erase_lcfg", jt_lcfg_erase, 0, + "permanently erase configuration for the named filesystem\n" + "usage: erase_lcfg "}, #endif /* HAVE_SERVER_SUPPORT */ /* Nodemap commands */ {"=== Nodemap ===", NULL, 0, "nodemap management"}, @@ -318,7 +365,7 @@ command_t cmdlist[] = { "add a range to a nodemap\n" "usage: nodemap_del_range "}, {"nodemap_modify", jt_nodemap_modify, 0, - "modify a nodemap parameters" + "modify a nodemap parameters\n" "usage: nodemap_modify nodemap_name param value"}, {"nodemap_add_idmap", jt_nodemap_add_idmap, 0, "add a UID or GID mapping to a nodemap"}, @@ -327,6 +374,9 @@ command_t cmdlist[] = { {"nodemap_set_fileset", jt_nodemap_set_fileset, 0, "set a fileset on a nodemap\n" "usage: nodemap_set_fileset "}, + {"nodemap_set_sepol", jt_nodemap_set_sepol, 0, + "set SELinux policy info on a nodemap\n" + "usage: nodemap_set_sepol "}, {"nodemap_test_nid", jt_nodemap_test_nid, 0, "usage: nodemap_test_nid "}, {"nodemap_test_id", jt_nodemap_test_id, 0, @@ -343,6 +393,15 @@ command_t cmdlist[] = { "deregister an existing changelog user\n" "usage: --device changelog_deregister "}, + /* Persistent Client Cache (PCC) commands */ + {"=== Persistent Client Cache ===", NULL, 0, "PCC user management"}, + {"pcc", jt_pcc, pccdev_cmdlist, + "lctl commands used to interact with PCC features:\n" + "lctl pcc add - add a PCC backend to a client\n" + "lctl pcc del - delete a PCC backend on a client\n" + "lctl pcc clear - remove all PCC backends on a client\n" + "lctl pcc list - list all PCC backends on a client\n"}, + /* Device configuration commands */ {"== device setup (these are not normally used post 1.4) ==", NULL, 0, "device config"}, @@ -357,6 +416,9 @@ command_t cmdlist[] = { "usage: setup "}, {"cleanup", jt_obd_cleanup, 0, "cleanup previously setup device\n" "usage: cleanup [force | failover]"}, + {"clear_conf", jt_lcfg_clear, 0, + "drop unused config logs for a device or filesystem\n" + "usage: clear_conf "}, {"fork_lcfg", jt_lcfg_fork, 0, "copy configuration files for named filesystem with given name\n" "usage: fork_lcfg "}, @@ -364,6 +426,68 @@ command_t cmdlist[] = { "permanently erase configuration for the named filesystem\n" "usage: erase_lcfg "}, +#ifdef HAVE_SERVER_SUPPORT + /* LFSCK commands */ + {"==== LFSCK ====", NULL, 0, "LFSCK"}, + {"lfsck_start", jt_lfsck_start, 0, "start LFSCK\n" + "usage: lfsck_start [--device|-M [MDT,OST]_device]\n" + " [--all|-A] [--create-ostobj|-c [on | off]]\n" + " [--create-mdtobj|-C [on | off]]\n" + " [--delay-create-ostobj|-d [on | off]]\n" + " [--error|-e {continue | abort}] [--help|-h]\n" + " [--dryrun|-n [on | off]] [--orphan|-o]\n" + " [--reset|-r] [--speed|-s speed_limit]\n" + " [--type|-t lfsck_type[,lfsck_type...]]\n" + " [--window-size|-w size]"}, + {"lfsck_stop", jt_lfsck_stop, 0, "stop lfsck(s)\n" + "usage: lfsck_stop [--device|-M [MDT,OST]_device]\n" + " [--all|-A] [--help|-h]"}, + {"lfsck_query", jt_lfsck_query, 0, "check lfsck(s) status\n" + "usage: lfsck_query [--device|-M MDT_device] [--help|-h]\n" + " [--type|-t lfsck_type[,lfsck_type...]]\n" + " [--wait|-w]"}, +#endif /* HAVE_SERVER_SUPPORT */ + + /* Llog operations */ + {"==== LLOG ====", NULL, 0, "LLOG"}, + {"llog_catlist", jt_llog_catlist, 0, + "list all catalog files on current device. If current device is not\n" + "set, MGS device is used by default.\n" + "usage: llog_catlist"}, + {"llog_info", jt_llog_info, 0, + "print log header information.\n" + "usage: llog_info \n"}, + {"llog_print", jt_llog_print, 0, + "print log content information.\n" + "usage: llog_print [--start ] [--end j]\n" + " print all records by default, or within given index range."}, + {"llog_cancel", jt_llog_cancel, 0, + "cancel one record in specified log.\n" + "usage:llog_cancel --log_idx \n"}, + {"llog_check", jt_llog_check, 0, + "verify that log content is valid.\n" + "usage: llog_check [--start ] [--end j]\n" + " check all records from index 1 by default."}, + {"llog_remove", jt_llog_remove, 0, + "remove one log from catalog or plain log, erase it from disk.\n" + "usage: llog_remove [--log_id ]"}, + + {"==== obsolete (DANGEROUS) ====", NULL, 0, "obsolete (DANGEROUS)"}, + /* 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 LNet routing table\n" + "usage: add_route [ []]"}, + {"del_route", jt_ptl_del_route, 0, + "delete route via gateway to targets from the LNet routing table\n" + "usage: del_route [] []"}, + {"set_route", jt_ptl_notify_router, 0, + "enable/disable routes via gateway in the LNet routing table\n" + "usage: set_route [