Let’s go a little bit deeper into clustershell. In my last post (NetApp cDOT – Clustered Data ONTAP Command Line) I have described clustershell as a default CLI shell you will use when managing Clustered Data ONTAP. What I haven’t described yet, is how it actually works, what additional features it has – comparing to 7-mode admin shell.
Command directories
In Clustered Data ONTAP commands are organized into a hierarchy by command directories. If you are familiar with managing NetApp 7-mode, you are aware that there are, for instance, bunch of commands related with volume, such us ‘vol create’, ‘vol rename’, ‘vol status’ etc. NetApp cDOT has very similar structure, but it went one step futher creating a directories of commands. Don’t worry – it’s actually useful feature. You can still use the commands “old fasion way” – by entering the full command path (for example vol create), but you can also navigate through the directory structure. I think it will be best shown on the example:
cDOT01::> volume show
Vserver Volume Aggregate State Type Size Available Used%
--------- ------------ ------------ ---------- ---- ---------- ---------- -----
cDOT01-01 vol0 aggr0 online RW 851.5MB 584.4MB 31%
cDOT01::>
In the first example I have entered t he full command volume show. As you can see currently my cluster cDOT01 has only one volume – vol0. Now let’s do the same by navigating through the directory structure:
cDOT01::> volume
cDOT01::volume> ?
autosize Set/Display the autosize settings of the flexible volume.
clone> Manage FlexClones
copy> Manage volume copy operations
create Create a new volume
delete Delete an existing volume
efficiency> Manage volume efficiency
file> File related commands
flexcache> Manage FlexCache
modify Modify volume attributes
mount Mount a volume on another volume with a junction-path
move> Manage volume move operations
offline Take an existing volume offline
online Bring an existing volume online
qtree> Manage qtrees
quota> Manage Quotas, Policies, Rules and Reports
rename Rename an existing volume
restrict Restrict an existing volume
show Display a list of volumes
show-footprint Display a list of volumes and their data and metadata footprints in their associated aggregate.
show-space Display space usage for volume(s)
size Set/Display the size of the volume.
snapshot> Manage snapshots
unmount Unmount a volume
cDOT01::volume> show
Vserver Volume Aggregate State Type Size Available Used%
--------- ------------ ------------ ---------- ---- ---------- ---------- -----
cDOT01-01 vol0 aggr0 online RW 851.5MB 584.4MB 31%
cDOT01::volume> top
cDOT01::>
Few things you should notice. First, when I entered a command volume the Data ONTAP went into volume directory (you can notice the change of the prompt from cdOT01::> to cDOT01::volume>). Next, by typing ? I have listed all available choices inside that directory. Some of the choices were another directories – you can notice them with > sign at the end, for example qtree> or quota>. Then I have executed command show, which gave me the same output as “volume show” executed from the root directory. Once I was finished with executing commands from volume directory I have moved to root directory with command top.
Question Mark
As shown in the example above, typing question mark (?) key is very useful to show the command directories and commands that are available at that command level. You can also type ? if you don’t know how to continue with the command, for example:
cDOT01::> volume create ?
-vserver <vserver name> Vserver Name
[-volume] <volume name> Volume Name
[-aggregate] <aggregate name> Aggregate Name
[[-size] {<integer>[KB|MB|GB|TB|PB]}] Volume Size
[ -state {online|restricted|offline|force-online|force-offline|mixed} ] Volume State (default: online)
[ -type {RW|DP|DC} ] Volume Type (default: RW)
[ -policy <text> ] Export Policy
[ -user <user name> ] User ID
[ -group <group name> ] Group ID
[ -security-style {unix|ntfs|mixed|unified} ] Security Style
[ -unix-permissions <unix perm> ] UNIX Permissions (default: ---rwxr-xr-x)
[ -junction-path <junction path> ] Junction Path
[ -comment <text (size 0..1023)> ] Comment
{ [ -max-autosize {<integer>[KB|MB|GB|TB|PB]} ] Maximum Autosize (for flexvols only)
[ -autosize-increment|-i {<integer>[KB|MB|GB|TB|PB]} ] Autosize Increment (for flexvols only)
[ -autosize-increment-percent|-p <percent> ] Autosize Increment Percent (for flexvols only)
[ -min-autosize {<integer>[KB|MB|GB|TB|PB]} ] Minimum Autosize
[ -autosize-grow-threshold-percent <percent> ] Autosize Grow Threshold Percentage
[ -autosize-shrink-threshold-percent <percent> ] Autosize Shrink Threshold Percentage
{ [ -autosize-mode {off|grow|grow_shrink} ] Autosize Mode
| [ -autosize {true|false} ] } Autosize Enabled (for flexvols only)
[ -space-guarantee|-s {none|volume|file} ] Space Guarantee Style (default: volume)
[ -percent-snapshot-space <percent> ] Space Reserved for Snapshots
[ -snapshot-policy <snapshot policy> ] Snapshot Policy (default: default)
[ -language <language_code> ] Language
[ -foreground {true|false} ] Foreground Process (default: true)
[ -nvfail {on|off} ] NVFAIL Option
[ -flexcache-origin-volume <volume name> ] FlexCache Origin Volume Name
[ -enable-snapdiff {true|false} ] Create Namespace Mirror Constituents For SnapDiff Use
[ -qos-policy-group <text> ] QoS Policy Group Name
cDOT01::> volume create
Question mark has printed all the options that are available for volume create command.
Tab Completion
This feature will be difficult to show on the written article, but stick with me for a second. Do you have any experience with linux bash shell? If you do, I’m sure you know what an extra feature is to press TAB key during command completion. It will complete the command or give you the possible options. Same is with NetApp c-mode (cDOT)!
cDOT01::> volume <TAB pressed - p1>
autosize clone copy create delete
efficiency file flexcache modify mount
move offline online qtree quota
rename restrict show show-footprint show-space
size snapshot unmount
cDOT01::> volume show<TAB pressed - p2>
show show-footprint show-space
cDOT01::> volume show <TAB pressed - p3>
cDOT01::> volume show -vserver cDOT01 <TAB pressed p4>
cDOT01 cDOT01-01
cDOT01::> volume show -vserver cDOT01 -volume
<volume name> Volume Name
On the above example I have used TAB key three times. Let me walk you through them:
- I have entered volume command and pressed TAB. That have listed all available command from volume directory.
- Based on my options from the first step I have chosen show and pressed TAB again. Since I haven’t put space after command show, NetApp has listed me all available commands that start with show, such as show itself, show-footprint and show-space.
- I decided to go with volume show command, so after the command I have pressed space and hit TAB again. NetApp has automatically completed next parameter -vserver, listed all of my available vservers (cDOT01 and cDOT01-01). If you are a little bit confused of what vserver is – do not worry, I will explain that in future post, for now just think about it as storage virtual machine.
- One I have chosen the vserver name clustershell has completed my command with next paramenter -volume and gave me a brief explaination what ouput is needed for that parameter.
Other features
Clustershell has some other, useful features as well, such as
Abbreviation
You can use only the shortest unambiguous sequences of characters that specify to the command you want to use, for example you can go with “volume show” command, but you can also stick with “vo show” command, since “vo” already points only to one available command family:
cDOT01::> vo show
(volume show)
Vserver Volume Aggregate State Type Size Available Used%
--------- ------------ ------------ ---------- ---- ---------- ---------- -----
cDOT01-01 vol0 aggr0 online RW 851.5MB 584.2MB 31%
The full command was given by NetApp in brackets.
Running commands outside the directories
To make life easier for 7-mode administrators (that’s my guess 🙂 ) NetApp has enabled to run some commands outside the directories. For example, within 7-mode when you wanted to do any operations on qtrees, you executed qtree <subcommand>. As you may have already noticed in above examples within NetApp cDOT command qtree is placed under volume directory, so You should go with the command: volume qtree <subcommand>. However, I guess to make life easier for us, NetApp allows us to run some commands outside the directories, for example:
cDOT01::> qtree show
This table is currently empty.
cDOT01::> qtree
cDOT01::volume qtree> show
This table is currently empty.
cDOT01::volume qtree>
My cluster currently doesn’t have any qtree, that’s why the output states that this table is empty 🙂 . As you can noticed when I executed just qtree command it took me to the right directory which is volume > qtree.
Queries with patterns and wildcards
You can run some queries with patterns or wildcards. For example if you want to list all Your aggregates that are larger than 100MB, and then larger than 1GB:
cDOT01::> aggr show -size >100m
Aggregate Size Available Used% State #Vols Nodes RAID Status
--------- -------- --------- ----- ------- ------ ---------------- ------------
aggr0 900MB 43.55MB 95% online 1 cDOT01-01 raid_dp,
normal
aggr1 2.64GB 2.64GB 0% online 0 cDOT01-01 raid_dp,
normal
2 entries were displayed.
cDOT01::> aggr show -size >1g
Aggregate Size Available Used% State #Vols Nodes RAID Status
--------- -------- --------- ----- ------- ------ ---------------- ------------
aggr1 2.64GB 2.64GB 0% online 0 cDOT01-01 raid_dp,
normal
History
You can also type the history command to list all your commands executed during current session, or use ‘up arrow’ key to go through commands previously executed.
As I mentioned before, some of those features are a little bit hard to show on the written text, since clustershell is much more dynamic that 7-mode admin shell was. In upcomming days I will create a short screencast to give you a brief introduction to the clustershell.