Whamcloud - gitweb
LU-8900 doc: Lustre snapshot man page
[fs/lustre-release.git] / lustre / doc / lctl.8
index 1e112dd..c5042bd 100644 (file)
@@ -1,4 +1,4 @@
-.TH lctl 1 "2003 Oct 8" Lustre "configuration utilities"
+.TH lctl 8 "2017 Jan 12" Lustre "configuration utilities"
 .SH NAME
 lctl \- Low level Lustre filesystem configuration utility
 .SH SYNOPSIS
@@ -7,301 +7,724 @@ lctl \- Low level Lustre filesystem configuration utility
 .br
 .B lctl --device <devno> <command [args]>
 .br
-.B lctl --threads <numthreads> <verbose> <devno> <command [args]>
+.B lctl --version
+.br
+.B lctl --list-commands
 .br
 .SH DESCRIPTION
 .B lctl
-can be invoked in interactive mode by issuing lctl command. After that, commands are issued as below. The most common commands in lctl are (in matching pairs) 
-.B device 
-and 
-.B attach
-, 
-.B detach 
-and 
-.B setup
-,
-.B cleanup 
-and
-.B connect
-,
-.B disconnect 
-and
-.B help
-, and
-.B quit.
+is used to directly control Lustre via an ioctl interface, allowing
+various configuration, maintenance, and debugging features to be accessed.
+
+.B lctl
+can be invoked in interactive mode by issuing lctl command. After that, commands are issued as below. The most common commands in lctl are
+.BR dl ,
+.BR dk ,
+.BR device ,
+.B network
+.IR <up/down> ,
+.BR list_nids ,
+.B ping
+.IR nid ,
+.BR help ,
+.BR quit .
 
-To get a complete listing of available commands, type help at the lctl prompt.  To get basic help on the meaning and syntax of a command, type help command.  Command completion is activated with the TAB key, and command history is available via the up- and down-arrow keys. 
+To get a complete listing of available commands, type
+.B --list-commands
+at the lctl prompt.  To get basic help on the meaning and syntax of a
+command, type
+.B help
+.I command
+.  Command completion is activated with the TAB key, and command history is available via the up- and down-arrow keys.
 
-For non-interactive single-threaded use, one uses the second invocation, which runs command after connecting to the device. 
+For non-interactive use, one uses the second invocation, which runs command after connecting to the device.
 
-.B Network Configuration
-.TP 
-network <tcp/elans/myrinet> 
-Indicate what kind of network applies for the configuration commands that follow.
-.TP 
-connect [[<hostname> <port>] | <elan id>] 
-This will establish a connection to a remote network network id given by the hostname/port combination, or the elan id.
-.TP 
-disconnect <nid> 
-Disconnect from a remote nid.
-.TP 
-mynid [nid] 
-Informs the socknal of the local nid. It defaults to hostname for tcp networks and is automatically setup for elan/myrinet networks.
-.TP 
-add_uuid <uuid> <nid> 
-Associate a given UUID with an nid.
-.TP 
-close_uuid <uuid> 
-Disconnect a UUID.
-.TP 
-del_uuid <uuid> 
-Delete a UUID association.
-.TP 
-add_route <gateway> <target> [target] 
-Add an entry to the routing table for the given target.
-.TP 
-del_route <target> 
-Delete an entry for the target from the routing table.
-.TP 
-route_list 
+.SS Network Configuration
+.TP
+.BR network " <" up / down >|< tcp / o2ib >
+Start or stop LNET, or select a network type for other
+.I lctl
+LNET commands
+.TP
+.BI list_nids
+Print all Network Identifiers on the local node. LNET must be running.
+.TP
+.BI which_nid " <nidlist>"
+From a list of nids for a remote node, show which interface communication
+will take place on.
+.TP
+.BI replace_nids " <devicename> <nid1>[,nid2,nid3 ...]"
+Replace the LNET Network Identifiers for a given device,
+as when the server's IP address has changed.
+This command must be run on the MGS node.
+Only MGS server should be started (command execution returns error
+in another cases). To start the MGS service only:
+mount -t lustre <MDT partition> -o nosvc <mount point>
+Note the replace_nids command skips any invalidated records in the configuration log.
+The previous log is backed up with the suffix '.bak'.
+.TP
+.BI ping " <nid> timeout"
+Check LNET connectivity via an LNET ping. This will use the fabric
+appropriate to the specified NID. By default lctl will attempt to
+reach the remote node up to 120 seconds and then timeout. To disable
+the timeout just specify an negative timeout value.
+.TP
+.BI interface_list
+Print the network interface information for a given
+.B network
+type.
+.TP
+.BI peer_list
+Print the known peers for a given
+.B network
+type.
+.TP
+.BI conn_list
+Print all the connected remote NIDs for a given
+.B network
+type.
+.TP
+.BI route_list
 Print the complete routing table.
-.TP 
-recv_mem [size] 
-Set the socket receive buffer size; if the size is omitted, the default size for the buffer is printed.
-.TP 
-send_mem [size] 
-Set send buffer size for the socket; if size is omitted, the default size for the buffer is printed.
-.TP 
-nagle [on/off] 
-Enable/disable nagle; omitting the argument will cause the default value to be printed.
-.TP 
-fail nid|all [count] 
-Fail/restore communications. Ommiting tha count implies fail indefinitely, count of zero indicates that communication should be restored. A non-zero count indicates the number of portals messages to be dropped after which the communication is restored.
-.PP
-.B Device Selection
-.TP 
-newdev 
-Create a new device.
-.TP 
-name2dev 
-This command can be used to determine a device number for the given device name.
-.TP 
-device 
-This will select the specified OBD device.  All other commands depend on the device being set. 
-.TP 
-device_list 
-Show all the devices.
-.TP 
-lustre_build_version 
-Print the Lustre build version.
 .PP
-.B Device Configuration
-.TP 
-attach type [name [uuid]] 
-Attach a type to the current device (which you need to set using the device command) and give that device a name and UUID.  This allows us to identify the device for use later, and also tells us what type of device we will have.
-.TP 
-setup <args...> 
-Type specific device setup commands. For obdfilter, a setup command tells the driver which block device it should use for storage and what type of filesystem is on that device. 
-.TP 
-cleanup 
-Cleanup a previously setup device.
-.TP 
-detach 
-Remove driver (and name and UUID) from the current device.
-.TP 
-lov_setconfig lov-uuid stripe-count default-stripe-size offset pattern UUID1 [UUID2...] 
-Write LOV configuration to an MDS device.
-.TP 
-lov_getconfig lov-uuid 
-Read LOV configuration from an MDS device. Returns default-stripe-count, default-stripe-size, offset, pattern, and a list of OST UUID's.
-.PP
-.B Device Operations
-.TP 
-probe [timeout] 
-Build a connection handle to a device. This command is used to suspend configuration until the lctl command has ensured that the MDS and OSC services are available. This is to avoid mount failures in a rebooting cluster.
-.TP 
-close 
-Close the connection handle
-.TP 
-getattr <objid> 
-Get attributes for an OST object <objid> .
-.TP 
-setattr <objid> <mode> 
-Set mode attribute for OST object <objid>.
-.TP 
-create [num [mode [verbose]]] 
-Create the specified number <num> of OST objects with the given <mode>.
-.TP 
-destroy <num> 
-Starting at <objid>, destroy <num> number of objects starting from the object with object id <objid>.
-.TP 
-test_getattr <num> [verbose [[t]objid]] 
-Do <num> getattrs on OST object <objid> (objectid+1 on each thread).
-.TP 
-test_brw [t]<num> [write [verbose [npages [[t]objid]]]] 
-Do <num> bulk read/writes on OST object <objid> (<npages> per I/O).
-.TP 
-test_ldlm 
-Perform lock manager test.
-.TP 
-ldlm_regress_start %s [numthreads [refheld [numres [numext]]]] 
-Start lock manager stress test.
-.TP 
-ldlm_regress_stop 
-Stop lock manager stress test.
-.TP 
-dump_ldlm 
-Dump all lock manager state, this is very useful for debugging
-.TP 
-activate 
-Activate an import
-.TP 
-deacttivate 
-De-activate an import
-.TP 
-recover <connection UUID> 
-.TP 
-lookup <directory> <file>
-.TP 
-notransno 
-Disable sending of committed transnumber updates
-.TP 
-readonly 
-Disable writes to the underlying device
-.TP 
-abort_recovery 
-Abort recovery on MDS device
-.TP 
-mount_option 
-Dump mount options to a file
-.TP 
-get_stripe 
-Show stripe info for an echo client object.
-.TP 
-set_stripe <objid>[ width!count[@offset] [:id:id....] 
-Set stripe info for an echo client
-.TP 
-unset_stripe <objid> 
-Unset stripe info for an echo client object.
-.PP
-.B Debug
-.TP 
-debug_daemon 
-Debug daemon control and dump to a file
-.TP 
-debug_kernel [file] [raw] 
-Get debug buffer and dump to a fileusage.
-.TP 
-debug_file <input> [output] [raw] 
-Read debug buffer from input and dump to outputusage.
-.TP 
-clear 
-Clear kernel debug buffer.
-.TP 
-mark <text> 
-Insert marker text in kernel debug buffer.
-.TP 
-filter <subsystem id/debug mask> 
-Filter message type from the kernel debug buffer.
-.TP 
-show <subsystem id/debug mask> 
-Show specific type of messages.
-.TP 
-debug_list <subs/types> 
-List all the subsystem and debug types.
-.TP 
-panic 
-Force the kernel to panic.
+.SS Device Selection
+.TP
+.BI device " <devname> "
+This will select the specified OBD device.  All other commands depend on the device being set.
+.TP
+.BI device_list
+Show all the local Lustre OBDs. AKA
+.B dl
 .PP
-.B Control
-.TP 
-help 
-Show a complete list of commands; help <command name> can be used to get help on specific command.
-.TP 
-exit 
-Close the lctl session.
-.TP 
-quit 
-Close the lctl session.
-
-.SH OPTIONS
-The following options can be used to invoke lctl. 
+.SS Device Operations
 .TP
-.B --device 
-The device number to be used for the operation. The value of devno is an integer, normally found by calling lctl name2dev on a device name. 
+.BI list_param " [-F|-R] <param_search ...>"
+List the Lustre or LNet parameter name
+.B -F
+Add '/', '@' or '=' for dirs, symlinks and writeable files, respectively.
+.br
+.B -R
+Recursively list all parameters under the specified parameter search string. If
+.I param_search
+is unspecified, all the parameters will be shown.
+.br
+.B Examples:
+.br
+.B
+# lctl list_param ost.*
+.br
+  ost.OSS
+.br
+  ost.num_refs
+.br
+.B
+# lctl list_param -F ost.* debug
+.br
+  ost.OSS/
+.br
+  ost.num_refs
+.br
+  debug=
+.br
+.B
+# lctl list_param -R mdt
+.br
+  mdt
+.br
+  mdt.lustre-MDT0000
+.br
+  mdt.lustre-MDT0000.capa
+.br
+  mdt.lustre-MDT0000.capa_count
+.br
+  mdt.lustre-MDT0000.capa_key_timeout
+.br
+  mdt.lustre-MDT0000.capa_timeout
+.br
+  mdt.lustre-MDT0000.commit_on_sharing
+.br
+  mdt.lustre-MDT0000.evict_client
+.br
+  ...
 .TP
-.B --threads 
-How many threads should be forked doing the command specified. The numthreads variable is a strictly positive integer indicating how many threads should be started. The devno option is used as above.
+.BI get_param " [-F|-n|-N|-R] <parameter ...>"
+Get the value of Lustre or LNET parameter.
+.br
+.B -F
+When -N specified, add '/', '@' or '=' for directories, symlinks and writeable files, respectively.
+.br
+.br
+.B -n
+Print only the value and not parameter name.
+.br
+.B -N
+Print only matched parameter names and not the values. (Especially useful when using patterns.)
+.br
+.B -R
+Print all of the parameter names below the specified name.
+.br
+.B Examples:
+.br
+.B
+# lctl get_param ost.*
+.br
+  ost.OSS
+.br
+  ost.num_refs
+.br
+.B
+# lctl get_param -n debug timeout
+.br
+  super warning dlmtrace error emerg ha rpctrace vfstrace config console
+.br
+  20
+.br
+.B
+# lctl get_param -N ost.* debug
+.br
+  ost.OSS
+.br
+  ost.num_refs
+.br
+  debug
+.br
+lctl "get_param -NF" is equivalent to "list_param -F".
 .TP
-.B --ignore_errors | ignore_errors 
-Ignore errors during script processing
+.BI set_param " [-n] [-P] [-d] <parameter=value ...>"
+Set the value of Lustre or LNET parameter.
+.br
+.B -n
+Disable printing of the key name when printing values.
+.br
+.B -P
+Set the parameter permanently, filesystem-wide.
+This parameters are only visible to 2.5.0 and later clients, older clients will not see these parameters.
+.br
+.B -d
+Remove the permanent setting (only with -P option)
+.br
+.B Examples:
+.br
+.B
+# lctl set_param fail_loc=0 timeout=20
+.br
+  fail_loc=0
+.br
+  timeout=20
+.br
+.B
+# lctl set_param -n fail_loc=0 timeout=20
+.br
+  0
+.br
+  20
+.br
+.B
+# lctl set_param -P osc.*.max_dirty_mb=32
+.br
 .TP
-.B dump 
-Save ioctls to a file 
-.SH EXAMPLES
-.B attach
-
-# lctl
+.BI conf_param " [-d] <device|fsname>.<parameter>=<value>"
+Set a permanent configuration parameter for any device via the MGS.  This
+command must be run on the MGS node.
 .br
-lctl > newdev
+.B -d <device|fsname>.<parameter>
+Delete a parameter setting (use the default value at the next restart).  A null value for <value> also deletes the parameter setting.
 .br
-lctl > attach obdfilter OBDDEV OBDUUID
-
-.B connect
-
-lctl > name2dev OSCDEV 2 
+.B Parameters:
+.br
+All of the writable parameters under
+.B lctl list_param
+(e.g.
+.I lctl list_param -F osc.*.* | grep =
+) can be permanently set using
+.B lctl conf_param
+, but the format is slightly different.  For conf_param, the device is specified first, then the obdtype. (See examples below.)  Wildcards are not supported.
+.br
+Additionally, failover nodes may be added (or removed), and some system-wide parameters may be set as well (sys.at_max, sys.at_min, sys.at_extra, sys.at_early_margin, sys.at_history, sys.timeout, sys.ldlm_timeout.)  <device> is ignored for system wide parameters.
+.br
+.B Examples:
+.br
+# lctl conf_param testfs.sys.at_max=1200
 .br
-lctl > device 2
+# lctl conf_param testfs.llite.max_read_ahead_mb=16
 .br
-lctl > connect
+# lctl conf_param testfs-MDT0000.lov.stripesize=2M
+.br
+# lctl conf_param lustre-OST0001.osc.active=0
+.br
+# lctl conf_param testfs-OST0000.osc.max_dirty_mb=29.15
+.br
+# lctl conf_param testfs-OST0000.ost.client_cache_seconds=15
+.br
+# lctl conf_param testfs-OST0000.failover.node=1.2.3.4@tcp1
+.TP
+.BI activate
+Reactivate an import after deactivating, below.  This setting is only effective until the next restart (see
+.B conf_param
+).
+.TP
+.BI deactivate
+Deactivate an import, in particular meaning do not assign new file stripes
+to an OSC.  This command should be used on the OSC in the MDT LOV
+corresponding to a failed OST device, to prevent further attempts at
+communication with the failed OST.
+.TP
+.BI abort_recovery
+Abort the recovery process on a restarting MDT or OST device
+.PP
+.SS Changelogs
+.TP
+.BI changelog_register " [-n]"
+Register a new changelog user for a particular device.  Changelog entries
+will not be purged beyond any registered users' set point. (See lfs changelog_clear.)
+.br
+.B -n
+Print only the ID of the newly registered user.
+.TP
+.BI changelog_deregister " <id>"
+Unregister an existing changelog user.  If the user's "clear" record number
+is the minimum for the device, changelog records will be purged until the
+next minimum.
+.PP
+.SS Nodemap
+An identity mapping feature that facilitates mapping of client UIDs and GIDs to
+local file system UIDs and GIDs, while maintaining POSIX ownership, permissions,
+and quota.
 
-.B getattr
+While the nodemap feature is enabled, all client file system access is subject
+to the nodemap identity mapping policy, which consists of the 'default' catchall
+nodemap, and any user-defined nodemaps. The 'default' nodemap maps all client
+identities to 99:99 (nobody:nobody). Administrators can define nodemaps for a
+range of client NIDs which map identities, and these nodemaps can be flagged as
+ 'trusted' so identities are accepted without translation, as well as flagged
+as 'admin' meaning that root is not squashed for these nodes.
 
-lctl > getattr 12
-.br
-id: 12
+Note: In the current phase of implementation, to use the nodemap functionality
+you only need to enable and define nodemaps on the MDS. The MDSes must also be
+in a nodemap with the admin and trusted flags set. To use quotas with nodemaps,
+you must also use set_param to enable and define nodemaps on the OSS (matching
+what is defined on the MDS). Nodemaps do not currently persist, unless you
+define them with set_param and use the -P flag. Note that there is a hard limit
+to the number of changes you can persist over the lifetime of the file system.
+
+See also:
+
+.PP
+\fBlctl-nodemap-activate\fR(8)
+.RS 4
+Activate/deactivate the nodemap feature.
+.RE
+.PP
+\fBlctl-nodemap-add\fR(8)
+.RS 4
+Add a new nodemap, to which NID ranges, identities, and properties can be added.
+.RE
+.PP
+\fBlctl-nodemap-del\fR(8)
+.RS 4
+Delete an existing nodemap.
+.RE
+.PP
+\fBlctl-nodemap-add-range\fR(8)
+.RS 4
+Define a range of NIDs for a nodemap.
+.RE
+.PP
+\fBlctl-nodemap-del-range\fR(8)
+.RS 4
+Delete an existing NID range from a nodemap.
+.RE
+.PP
+\fBlctl-nodemap-add-idmap\fR(8)
+.RS 4
+Add a UID or GID mapping to a nodemap.
+.RE
+.PP
+\fBlctl-nodemap-del-idmap\fR(8)
+.RS 4
+Delete an existing UID or GID mapping from a nodemap.
+.RE
+.PP
+\fBlctl-nodemap-modify\fR(8)
+.RS 4
+Modify a nodemap property.
+.RE
+
+.SS LFSCK
+An on-line Lustre consistency check and repair tool. It is used for totally
+replacing the old lfsck tool for kinds of Lustre inconsistency verification,
+including: corrupted or lost OI mapping, corrupted or lost link EA, corrupted
+or lost FID in name entry, dangling name entry, multiple referenced name entry,
+unmatched MDT-object and name entry pairs, orphan MDT-object, incorrect
+MDT-object links count, corrupted namespace, corrupted or lost lov EA, lost
+OST-object, multiple referenced OST-object, unmatched MDT-object and OST-object
+pairs, orphan OST-object, and so on.
+
+See also:
+
+.PP
+\fBlctl-lfsck-start\fR(8)
+.RS 4
+Start LFSCK on the specified MDT or OST device with specified parameters.
+.RE
+.PP
+\fBlctl-lfsck-stop\fR(8)
+.RS 4
+Stop LFSCK on the specified MDT or OST device.
+.RE
+.PP
+\fBlctl-lfsck-query\fR(8)
+.RS 4
+Get the LFSCK global status via the specified MDT device.
+.RE
+.SS BARRIER
+The tools set for write (modify) barrier on all MDTs.
+.TP
+.B barrier_freeze \fR<fsname> [timeout]
 .br
-grp: 0
+Set write barrier on all MDTs. The barrier_freeze command will not return
+until the barrier is set (frozen) or failed. With the write barrier set,
+any subsequent metadata modification will be blocked until the barrier is
+thawed or expired. The barrier lifetime is started when triggering
+barrier_freeze, and will be terminated when barrier thawed. To avoid the
+system being frozen for very long time if miss/fail to call barrier_thaw,
+you can specify its lifetime via the 'timeout' parameter in second, the
+default value is 60 (seconds). If the barrier is not thawed before that,
+it will be expired automatically.
+A barrier_freeze can only succeed when all registered MDTs are available.
+If some MDT has ever registered but become offline, then barrier_freeze
+will fail. To check and update current status of MDTs, see the command
+barrier_rescan.
+.TP
+.B barrier_thaw \fR<fsname>
 .br
-atime: 1002663714
+Reset write barrier on all MDTs. With the write barrier thawed, all blocked
+metadata modifications (by the former barrier_freeze) will be handled normally.
+.TP
+.B barrier_stat \fR<fsname>
 .br
-mtime: 1002663535
+Query the write barrier status, the possible status and related meanings are
+as following:
 .br
-ctime: 1002663535
+  'init': has never set barrier on the system
+  'freezing_p1': in the first stage of setting the write barrier
+  'freezing_p2': in the second stage of setting the write barrier
+  'frozen': the write barrier has been set successfully
+  'thawing': in thawing the write barrier
+  'thawed': the write barrier has been thawed
+  'failed': fail to set write barrier
+  'expired': the write barrier is expired
+  'rescan': in scanning the MDTs status, see the command barrier_rescan
+  'unknown': other cases
 .br
-size: 10
+If the barrier is in 'freezing_p1', 'freezing_p2' or 'frozen' status, then
+the left lifetime will be returned also.
+.TP
+.B barrier_rescan \fR<fsname> [timeout]
 .br
-blocks: 8
+Scan the system to check which MDTs are active. The status of the MDTs is
+required because a barrier_freeze will be unsuccessful if any of the MDTs
+are permenantly offline. During barrier_rescan, the MDT status is updated.
+If an MDT does not respond the barrier_rescan within the given "timeout"
+seconds (where the default value is 60 seconds), then it will be marked
+as unavailable or inactive.
+
+.SS SNAPSHOT
+ZFS backend based snapshot tools set. The tool loads system configuration
+from the file /etc/ldev.conf on the MGS, and call related ZFS commands to
+maintain Lustre snapshot pieces on all targets (MGS/MDT/OST).
+The configuration file /etc/ldev.conf is not only for snapshot, but also
+for other purpose. The format is:
+  <host> foreign/- <label> <device> [journal-path]/- [raidtab]
+
+The format of <label> is:
+  fsname-<role><index> or <role><index>
+
+The format of <device> is:
+  [md|zfs:][pool_dir/]<pool>/<filesystem>
+
+Snapshot only uses the fields <host>, <label> and <device>.
 .br
-blksize: 4096
+.B Example:
 .br
-mode: 100644
+.B
+# cat /etc/ldev.conf
 .br
-uid: 0
+ host-mdt1 - myfs-MDT0000 zfs:/tmp/myfs-mdt1/mdt1
+ host-mdt2 - myfs-MDT0001 zfs:myfs-mdt2/mdt2
+ host-ost1 - OST0000 zfs:/tmp/myfs-ost1/ost1
+ host-ost2 - OST0001 zfs:myfs-ost2/ost2
+
+For old snasphot tools, the configration is in /etc/lsnapshot/${fsname}.conf,
+the format is as following (per target, per line):
+  <host> <pool_dir> <pool> <local_filesystem> <role(,s)> <index>
 .br
-gid: 0
+.B Examples:
 .br
-flags: 0
+.B
+# cat /etc/lsnapshot/testfs.conf
 .br
-obdflags: 0
+  VM6_1 /tmp testfs-mdt1 mdt1 MGS,MDT  0
+  VM6_2 /tmp testfs-mdt2 mdt2 MDT      1
+  VM6_3 /tmp testfs-ost1 ost1 OST      0
+  VM6_3 /tmp testfs-ost2 ost2 OST      1
+  VM6_4 /tmp testfs-ost3 ost3 OST      2
+  VM6_4 /tmp testfs-ost4 ost4 OST      3
+
+.TP
+.B snapshot_create \fR[-b | --barrier [on | off]] [-c | --comment comment]
+         \fR<-F | --fsname fsname> [-h | --help] <-n | --name ssname>
+         \fR[-r | --rsh remote_shell] [-t | --timeout timeout]
 .br
-nlink: 1
+Create snapshot with the given name.
+.TP
+  -b, --barrier [on | off]
+Set write barrier on all MDTs before creating the snapshot. The default behavior
+is 'on'. If you are confident about the system consistency, or you do not care
+about the system consistency when create the snapshot, then you can specify
+barrier 'off'. That will save your time of creating the snapshot. If the barrier
+is 'on', then the timeout of the barrier can be specified via '-t' option as
+described in the subsequent section.
+.TP
+  -c, --comment <comment>
+Add an optional comment to the snapshot_create request. The comment can include
+anything to describe what the snapshot is for or for reminder. The comment can
+be shown via snapshot_list.
+.TP
+  -F, --fsname
+The filesystem name.
+.TP
+  -h, --help
+For help information.
+.TP
+  -n, --name <ssname>
+The snapshot's name must be specified. It follows the general ZFS snapshot name
+rules, such as the max length is 256 bytes, cannot be conflict with the reserved
+names, and so on.
+.TP
+  -r, --rsh <remote_shell>
+Specify a shell to communicate with remote targets. The default value is 'ssh'.
+It is the system admin's duty to guarantee that the specified 'remote_shell'
+works well among targets without password authentication.
+.TP
+  -t, --timeout <timeout>
+If write barrier is 'on', then the 'timeout' specified the write barrier's
+lifetime in second. The default vaule is 60 (seconds).
+.TP
+.B snapshot_destroy \fR[-f | --force] <-F | --fsname fsname> [-h | --help]
+          \fR<-n | --name ssname> [-r | --rsh remote_shell]
 .br
-valid: ffffffff
+Destroy the specified snapshot.
+.TP
+  -f, --force
+Destory the specified snapshot by force. If the snapshot is mounted, it will be
+umounted firstly, then destroyed. Even if some pieces of the snapshot are lost
+or broken for some reason(s), the remained parts of the snapshot still can be
+destroyed with this option specified.
+.TP
+  -F, --fsname
+The filesystem name.
+.TP
+  -h, --help
+For help information.
+.TP
+  -n, --name <ssname>
+The snapshot (to be destroyed) name must be specified.
+.TP
+  -r, --rsh <remote_shell>
+Specify a shell to communicate with remote targets. The default value is 'ssh'.
+It is the system admin's duty to guarantee that the specified 'remote_shell'
+works well among targets without password authentication.
+.TP
+.B snapshot_modify \fR[-c | --comment comment] <-F | --fsname fsname>
+         \fR[-h | --help] <-n | --name ssname> [-N | --new new_ssname]
+         \fR[-r | --rsh remote_shell]
 .br
-inline:
+Modify the specified snapshot.
+.TP
+  -c, --comment <comment>
+Add comment (if it has not been specified when snapshot_create) or change the
+comment for the given snapshot.
+.TP
+  -F, --fsname
+The filesystem name.
+.TP
+  -h, --help
+For help information.
+.TP
+  -n, --name <ssname>
+The snapshot (to be modified) name must be specified.
+.TP
+  -N, --new <new_ssname>
+Rename the snapshot to the new name. It follows the general ZFS snapshot name
+rules, such as the max length is 256 bytes, cannot be conflict with the reserved
+names, and so on.
+.TP
+  -r, --rsh <remote_shell>
+Specify a shell to communicate with remote targets. The default value is 'ssh'.
+It is the system admin's duty to guarantee that the specified 'remote_shell'
+works well among targets without password authentication.
+.TP
+.B snapshot_list \fR[-d | --detail] <-F | --fsname fsname> [-h | --help]
+       \fR[-n | --name ssname] [-r | --rsh remote_shell]
 .br
-obdmd:
+Query the snapshot information, such as fsname of the snapshot, comment,
+create time, the latest modification time, whether mounted or not, and so on.
+.TP
+  -d, --detail
+List all the information available for each piece of the snapshot on each
+target. Usually, the information for each piece of the snapshot are the same
+unless an error occurred during the snapshot operations, such as partly
+modification or mount. This option allow to check related issues.
+.TP
+  -F, --fsname
+The filesystem name.
+.TP
+  -h, --help
+For help information.
+.TP
+  -n, --name <ssname>
+The snapshot's name to be queried. If no name is specified, then all the
+snapshots belong to current Lustre filesystem will be listed.
+.TP
+  -r, --rsh <remote_shell>
+Specify a shell to communicate with remote targets. The default value is 'ssh'.
+It is the system admin's duty to guarantee that the specified 'remote_shell'
+works well among targets without password authentication.
+.TP
+.B snapshot_mount \fR<-F | --fsname fsname> [-h | --help] <-n | --name ssname>
+        \fR[-r | --rsh remote_shell]
 .br
-lctl > disconnect 
+Mount the specified snapshot on the servers. Be as read only mode Lustre
+filesystem, if the snapshot is mounted, then it cannot be renamed. It is
+the user's duty to mount client (must as read only mode "-o ro") to the
+snapshot when need.
+NOTE: the snapshot has its own fsname that is different from the original
+filesystem fsname, it can be queried via snapshot_list.
+.TP
+  -F, --fsname
+The filesystem name.
+.TP
+  -h, --help
+For help information.
+.TP
+  -n, --name <ssname>
+The snapshot (to be mounted) name must be specified.
+.TP
+  -r, --rsh <remote_shell>
+Specify a shell to communicate with remote targets. The default value is 'ssh'.
+It is the system admin's duty to guarantee that the specified 'remote_shell'
+works well among targets without password authentication.
+.TP
+.B snapshot_umount \fR<-F | --fsname fsname> [-h | --help] <-n | --name ssname>
+         \fR[-r | --rsh remote_shell]
 .br
-Finished (success)
+Umount the specified snapshot.
+.TP
+  -F, --fsname
+The filesystem name.
+.TP
+  -h, --help
+For help information.
+.TP
+  -n, --name <ssname>
+The snapshot (to be umounted) name must be specified.
+.TP
+  -r, --rsh <remote_shell>
+Specify a shell to communicate with remote targets. The default value is 'ssh'.
+It is the system admin's duty to guarantee that the specified 'remote_shell'
+works well among targets without password authentication.
+.SS Debug
+.TP
+.BI debug_daemon
+Start and stop the debug daemon, and control the output filename and size.
+.TP
+.BI debug_kernel " [file] [raw]"
+Dump the kernel debug buffer to stdout or file.
+.TP
+.BI debug_file " <input> [output]"
+Convert kernel-dumped debug log from binary to plain text format.
+.TP
+.BI clear
+Clear the kernel debug buffer.
+.TP
+.BI mark " <text>"
+Insert marker text in the kernel debug buffer.
+.TP
+.BI filter " <subsystem id/debug mask>"
+Filter kernel debug messages by subsystem or mask.
+.TP
+.BI show " <subsystem id/debug mask>"
+Show specific type of messages.
+.TP
+.BI debug_list " <subs/types>"
+List all the subsystem and debug types.
+.TP
+.BI modules " <path>"
+Provide gdb-friendly module information.
 
-.B setup 
+.SH OPTIONS
+The following options can be used to invoke lctl.
+.TP
+.B --device
+The device to be used for the operation. This can be specified by name or
+number. See
+.B device_list
+.TP
+.B --ignore_errors | ignore_errors
+Ignore errors during script processing
+.TP
+.B lustre_build_version
+Output the build version of the Lustre kernel modules
+.TP
+.B --version
+Output the build version of the lctl utility
+.TP
+.B --list-commands
+Output a list of the commands supported by the lctl utility
+.TP
+.B help
+Provides brief help on the various arguments
+.TP
+.B exit/quit
+Quit the interactive lctl session
 
-lctl > setup /dev/loop0 extN
+.SH EXAMPLES
+# lctl
+.br
+lctl > dl
+  0 UP mgc MGC192.168.0.20@tcp bfbb24e3-7deb-2ffa-eab0-44dffe00f692 5
+  1 UP ost OSS OSS_uuid 3
+  2 UP obdfilter testfs-OST0000 testfs-OST0000_UUID 3
+.br
+lctl > dk /tmp/log
+Debug log: 87 lines, 87 kept, 0 dropped.
 .br
 lctl > quit
 
-.SH BUGS
-None are known.
+.SH AVAILABILITY
+.B lctl
+is part of the
+.BR Lustre (7)
+filesystem package.
+.SH SEE ALSO
+.BR lustre (7),
+.BR mkfs.lustre (8),
+.BR mount.lustre (8),
+.BR lctl (8),
+.BR lctl-lfsck-start (8),
+.BR lctl-lfsck-stop (8),
+.BR lctl-lfsck-query (8),
+.BR lctl-llog_catlist (8),
+.BR lctl-llog_info (8),
+.BR lctl-llog_print (8),
+.BR lctl-network (8),
+.BR lctl-nodemap-activate (8),
+.BR lctl-nodemap-add-idmap (8),
+.BR lctl-nodemap-add-range (8),
+.BR lctl-nodemap-add (8),
+.BR lctl-nodemap-del-idmap (8),
+.BR lctl-nodemap-del-range (8),
+.BR lctl-nodemap-del (8),
+.BR lctl-nodemap-modify (8),
+.BR lfs (1)