Sunday, 31 July 2016

7MTT 3.0 CLI End to End Transition Commands for CBT

Continuing from the previous post, here’s a demonstration via an example of how to use 7MTT 3.0 CLI and PowerShell to transition from 7-Mode to cDOT (lab versions are 8.2.3 and 8.3.2).

In the demonstration, we just transition a standalone volume. To make it more interesting though and to test out some features, we add to the mix vFilers and IPSpaces.

Note: The colour coding has Clustershell ::> green, 7-Mode’s Nodeshell > grey, and PowerShell PS> blue.

Some Initial cDOT Setup

We create an IPSpace for the - to be - transitioned vFiler, with Intercluster LIFs in the IPSpace on each node for SnapMirror replication:

ipspace create -ipspace VF01-IPSPACE

broadcast-domain remove-ports -broadcast-domain Default -ports clu1n1:e0d,clu1n1:e0f,clu1n2:e0d,clu1n2:e0f

broadcast-domain create -broadcast-domain VF01 -ipspace VF01-IPSPACE -mtu 1500 -port clu1n1:e0d,clu1n1:e0f,clu1n2:e0d,clu1n2:e0f

net int create -vserver VF01-IPSPACE -lif vf01-n1-icl -role intercluster -home-node clu1n1 -home-port e0d -address -netmask

net int create -vserver VF01-IPSPACE -lif vf01-n2-icl -role intercluster -home-node clu1n2 -home-port e0d -address -netmask

Some Initial 7-Mode Setup

We allow snapmirror and create a vFiler VF01 with one volume and a test share:

options snapmirror.access host=,

options licensed_feature.multistore.enable on
vol create VF01_VOL0 -s none aggr0 10g
vfiler create VF01 -n -s default-ipspace -i /vol/VF01_VOL0

wrfile -a /etc/hosts VF01 FAS101-e0b
wrfile -a /etc/hosts FAS101-e0c
wrfile -a /etc/hosts FAS101-e0d
ifconfig e0b `hostname`-e0b mediatype auto flowcontrol none mtusize 1500
ifconfig e0c `hostname`-e0c mediatype auto flowcontrol none mtusize 1500
ifconfig e0d `hostname`-e0d mediatype auto flowcontrol none mtusize 1500
wrfile -a /etc/rc ifconfig e0b `hostname`-e0b mediatype auto flowcontrol none mtusize 1500
wrfile -a /etc/rc ifconfig e0c `hostname`-e0c mediatype auto flowcontrol none mtusize 1500
wrfile -a /etc/rc ifconfig e0d `hostname`-e0d mediatype auto flowcontrol none mtusize 1500

vol create VF01_VOL1 -s none aggr0 10g
vfiler add VF01 /vol/VF01_VOL1
vfiler disallow VF01 proto=nfs proto=iscsi proto=rsh proto=ftp

vfiler run VF01 options security.passwd.rules.history 0
vfiler run VF01 setup
vfiler run VF01 cifs setup
vfiler run VF01 cifs shares -add VF01_VOL1 /vol/VF01_VOL1

Image: Test share
Variables That We* Will Use in 7MTT 3.0 CLI for the Transition
*Not all are necessary for the most basic of transitions

$PG_NAME        # Project Group Name
$PG_DESCRIPTION # Project Group Description

$7M_HOST       # 7-Mode Host Name or Mgmt IP
$7M_ADMIN_USER # 7-Mode Administrative User Name
$CM_HOST       # C-Mode Cluster Name or Mgmt IP
$CM_ADMIN_USER # C-Mode Administrative User Name

$PROJECT      # Project Name
$PROJ_TYPE    # Project Type (primary, secondary, or standalone)
$7M_COPY_IP   # 7-Mode Data Copy IP
$7M_COPY_IP2  # 7-Mode Multipathing IP Address
$7M_VFILER    # 7-Mode vFiler
$CM_SVM       # C-Mode Destination SVM Name
$CM_SVM_RAGGR # C-Mode SVM's Root Aggr
$CM_IPSPACE   # C-Mode IPSpace of Target SVM

$LIF_IP       # Data LIF IP      
$LIF_NETMASK  # Data LIF Netmask 
$LIF_GATEWAY  # Data LIF Gateway 
$LIF_HOMEPORT # Data LIF Home port
$LIF_NODE     # Data LIF Home node

$7M_VOLUME # 7-Mode Volume Name
$CM_VOLUME # C-Mode Volume Name
$CM_AGGR   # C-Mode Destination Aggregate

$SCHEDULE          # Schedule Name
$SCHED_DAYS        # Days to run
$SCHED_START       # Start Time
$SCHED_DURATION    # Duration
$SCHED_AVAIL_TRANS # Available transfers percent
$SCHED_CONC_TRANS  # Maximum concurrent transfers
$SCHED_THROTTLE    # Project SnapMirror Throttle (MBps)
$SCHED_UPDATE      # Update Frequency

$PRECUT_MODE # Precutover operation mode: 'no_test', 'ro_test', or 'rw_test'

$CUTOVER_OFFLINE_SRC # Offline source volumes 'true' or 'false'

Variables with their Values

$PG_NAME = "VF01_Project_Group"
$PG_DESCRIPTION = "VF01 Project Group"

$7M_HOST = ""
$7M_ADMIN_USER = "root"
$CM_HOST = ""
$CM_ADMIN_USER = "admin"

$PROJ_TYPE = "standalone"
$7M_COPY_IP = ""
$7M_COPY_IP2 = ""
$7M_VFILER = "VF01"
$CM_SVM = "VF01"
$CM_SVM_RAGGR = "clu1n1_sata_aggr1"

$LIF_IP       = ""
$LIF_NODE     = "clu1n1"

$7M_VOLUME = "VF01_VOL1"
$CM_AGGR = "clu1n1_sata_aggr1"

$SCHEDULE = "Schedule_01"
$SCH_DAYS = "0-6"
$SCH_START = "0:0"  
$SCH_DURATION = "24:0"
$SCH_UPDATE = "5:0"

$PRECUT_MODE = "ro_test"


Step-by-Step Transitioning a Standalone Volume to cDOT with 7MTT 3.0 CLI*
*and a little bit of Clustershell

Note that some of the stuff used below is optional, such as: could have used the default project group; could have pre-created the SVM with management LIF, CIFS server, and CIFS test LIF (my preference); totally optional was the downing the transitioned CIFS server to give it the old AD machine account and NETBIOS name...

transition projectgroup create -g $PG_NAME -d $PG_DESCRIPTION

transition credentials add -h $7M_HOST -u $7M_ADMIN_USER
transition credentials add -h $CM_HOST -u $CM_ADMIN_USER

transition cbt create -p $PROJECT -t $PROJ_TYPE -n $7M_HOST -c $7M_COPY_IP -m $7M_COPY_IP2 -f $7M_VFILER -h $CM_HOST -v $CM_SVM -r $CM_SVM_RAGGR -i $CM_IPSPACE -g $PG_NAME

transition cbt lif add -p $PROJECT -i $LIF_IP -m $LIF_NETMASK -g $LIF_GATEWAY -u $LIF_HOMEPORT -n $LIF_NODE

transition cbt volumepair add -p $PROJECT -v $7M_VOLUME -c $CM_VOLUME -g $CM_AGGR


transition cbt show -p $PROJECT -r no

transition cbt precheck -p $PROJECT -r no

transition cbt start -p $PROJECT -n -r no

transition cbt update -p $PROJECT -t $SCH_AVAIL_TRANS -c $SCH_CONC_TRANS -x $SCH_THROTTLE -r no

net int create -vserver VF01 -lif VF01 -data-protocol cifs -address -netmask -home-port e0f -home-node clu1n1
vserver services dns create -vserver VF01 -domains lab.priv -name-servers
vserver cifs create -vserver VF01 -cifs-server VF01_B -domain lab.priv

transition cbt precutover -p $PROJECT -m $PRECUT_MODE -r no
transition cbt cutover -p $PROJECT -o $OFFLINE_SRC_VOLS -r no

set d
cifs server modify -vserver VF01 -status-admin down
cifs server modify -vserver VF01 -cifs-server VF01

transition cbt delete -p $PROJECT

Taking it Forward

Further investigations:

- Investigate transitioning primary and secondary 7-Mode volumes
- Create a spreadsheet that allows easy management of multiple projects, and automatic generation of 7MTT CLI commands
- See if my June 2016 7MTT Multiple Job Parser still works with 7MTT 3.0

Saturday, 30 July 2016

7MTT 3.0 is GA and 7MTT 3.0 CLI Commands

7MTT 3.0 General Availability (GA) Release is available for Windows and Linux!

The main thing is support for transitioning to ONTAP 9.0 (from pretty much any version of 7-Mode since 8.0). Also, the CBT and CFT binaries are combined now (the Windows version and GUI is required for CFT.) For further reading check out the 7-Mode Transition Tool 3.0 Documentation and especially the Release Notes for all the new features.

7MTT 3.0 CLI Commands List

The following lists all the 7MTT 3.0 CLI commands. Of course you can use GUI for mostly everything; if you’ve got a lot of transitions to do though, you’ll probably want to investigate automation; hence the listing of CLI commands. Note that this is only a list of the commands, for syntax, from a machine running 7MTT 3.0, in a shell (for a Windows guy like me, that’s PowerShell or Command Prompt), type the command and press enter for the complete help output.

transition bundle-tool-logs
transition job-results
transition job-status
transition jobs
transition version

transition cbt abort
transition cbt add-cluster-info
transition cbt add-primary-seven-mode-system
transition cbt add-secondary-cluster-mode-system
transition cbt create
transition cbt cutover
transition cbt delete
transition cbt modify
transition cbt pause
transition cbt precheck
transition cbt precutover
transition cbt property-get
transition cbt property-reset
transition cbt property-set
transition cbt remove-primary-seven-mode-system
transition cbt remove-secondary-cluster-mode-system
transition cbt resume
transition cbt resync
transition cbt show
transition cbt show-primary-seven-mode-systems
transition cbt show-secondary-cluster-mode-systems
transition cbt start
transition cbt update

transition cbt export lunmap
transition cbt ignorableerrors add
transition cbt ignorableerrors remove
transition cbt ignorableerrors show
transition cbt ignorableerrors show-all
transition cbt lif add
transition cbt lif modify
transition cbt lif remove
transition cbt lif show
transition cbt schedule add
transition cbt schedule modify
transition cbt schedule remove
transition cbt schedule show
transition cbt volumepair add
transition cbt volumepair modify
transition cbt volumepair remove
transition cbt volumepair show

transition cft property-reset
transition cft property-set
transition cft property-show
transition cft export lunmap
transition cft ignorableerrors add
transition cft ignorableerrors remove
transition cft ignorableerrors show
transition cft ignorableerrors show-all

transition credentials add
transition credentials get
transition credentials modify
transition credentials remove

transition imt import
transition imt restore
transition imt show

transition projectgroup create
transition projectgroup delete
transition projectgroup modify
transition projectgroup move-project
transition projectgroup rename
transition projectgroup show

Friday, 22 July 2016

Q: How does VSC 6.2 Create NFS Exports for VMware?

If for whatever reason, you don’t have access to the NetApp Virtual Storage Console for VMware, but still want to export a volume over NFS from your Clustered Data ONTAP system to VMware, this information might be useful to know.

Starting with only a default export policy on the SVM (8.3.2), and no rules, VSC 6.2P1 exports a volume to vSphere 6.0 like below (just showing one ESX host)

cluster::> set d

cluster1::*> export-policy show -instance

    Vserver: svm1
Policy Name: default
  Policy ID: 42949672961

cluster1::*> export-policy rule show -instance

                                    Vserver: svm1
                                Policy Name: default
                                 Rule Index: 1
                            Access Protocol: nfs
Client Match Hostname, IP Address, Netgroup, or Domain:
                             RO Access Rule: sys
                             RW Access Rule: sys
User ID To Which Anonymous Users Are Mapped: 65534
                   Superuser Security Types: sys
               Honor SetUID Bits in SETATTR: true
                  Allow Creation of Devices: true
                 NTFS Unix Security Options: fail
         Vserver NTFS Unix Security Options: use_export_policy
                      Change Ownership Mode: restricted
              Vserver Change Ownership Mode: use_export_policy

cluster1::*> volume show -fields policy,unix-permissions

vserver     volume policy unix-permissions
----------- ------ ------ ----------------
cluster1-01 vol0   -      ------------
cluster1-02 vol0   -      ------------
svm1        DATASTORE1 default ---rwxr-xr-x
svm1        svm1_root default ---rwxr-xr-x

Image: VSC 6.2P1 NetApp Datastore Provisioning Wizard - Ready to complete

Q: How do we do this from the Clustershell without VSC?

We’re going to do something a little different here and create a separate export-policy for our ESX cluster, also remembering that the SVM root volume needs to be exported read only, and that there’s likely to be load-sharing mirrors protecting the SVM root volume.

volume create -vserver svm1 -volume DATASTORE1 -junction-path /DATASTORE1 -size 150g -space-guarantee none -aggregate aggr1_02 -security-style unix -unix-permissions 755 -snapshot-policy none -percent-snapshot-space 0 -autosize-mode off

vserver export-policy create -vserver svm1 -policyname EXP_READONLY

vserver export-policy rule create -vserver svm1 -policyname EXP_READONLY -ruleindex 1 -protocol any -clientmatch -rorule any -rwrule never -anon 65534 -superuser none -allow-suid true -allow-dev true -ntfs-unix-security-ops fail -chown-mode restricted

volume modify -vserver svm1 -volume svm1_root -policy EXP_READONLY

vserver export-policy create -vserver svm1 -policyname EXP_ESXCLU1

vserver export-policy rule create -vserver svm1 -policyname EXP_ESXCLU1 -ruleindex 1 -protocol nfs -clientmatch -rorule sys -rwrule sys -anon 65534 -superuser sys -allow-suid true -allow-dev true

volume modify -vserver svm1 -volume DATASTORE1 -policy EXP_ESXCLU1

snapmirror update-ls-set svm1:svm1_root

Note: To keep the output brief, the above has only one host, for more hosts add more rules.

Image: Testing provisioning new datastore without using the VSC

Note: is the local (on the same node as the volume) NFS LIF on the SVM.

Sunday, 17 July 2016

7MTT Copy Free Transition (CFT): Step-by-Step High-Level Notes/Checklist

Just some high-level notes that can be formed into a check list, so we can tick things off once complete!

1) Pre-Work

1.1) 7MTT Collect & Assess

Run 7MTT Collect & Assess to collect a Transition Assessment Report
To include:
- Data ONTAP Storage
- Microsoft Windows SAN hosts
- Red Hat Enterprise Linux SAN hosts
- VMware ESXi SAN hosts
- FC SAN Switches (Brocade/Cisco)

Review the Transition Assessment Report
- Make remediation’s as required

1.2) Cluster Build

Design and create the Cluster

1.3) Placeholder SVMs

Design and create SVMs*
*each Storage System/vFiler Unit needs an SVM to map to
* if CIFS data is being migrated, DNS and CIFS servers must be configured

1.4) Physical Cabling Plan

Create cabling schedule to map shelf, ACP, and data connections, from the 7-Mode systems, to ports on the new Clustered Data ONTAP controllers as required.

1.5) Additional Checks

- Check 7MTT release notes for known issues
- Check ONTAP release notes for known issues
- Check ASUPs of involved 7-Mode systems
- Check ASUPs of involved cDOT systems

2) 7MTT Plan and Design

Plan a Copy-Free Transition project
- Add the 7-Mode Controllers
- Add the Clustered Data ONTAP Cluster

Plan CFT project: Select Source Systems
- Select Target Cluster
-- Select Target HA Pair Nodes
--- Select Source to Target Node Mapping

Plan CFT project: SVM and Volume Mapping
- Select a Target SVM for each source Storage System/vFiler Unit
-- Select Junction Path Policy
--- Choose Target Volume Name

Plan CFT project: Networking
- Either: Select 7-Mode IPs for transition
- And/or: Create New LIFs on the target SVMs
- And/or: Use LIFs created earlier

Plan CFT project: Run Prechecks*
- Make remediation’s as required
- Record any required post cutover activities
*Errors must be resolved before proceeding

Plan CFT project: Project Summary
- Review Project Details
- Review Mapped SVMs
- Review Mapped Volumes
- Review Aggregates
- Review Networking

IMPORTANT: Double check the Project Summary to ascertain things have been mapped as intended!

3) Migrate (7MTT Migration Dashboard)

3.1) Pre-Cutover

7MTT click “Run Prechecks”*
*If this is green we’re good to proceed to the next step!

7MTT click “Apply SVM Config”*
- Make remediation’s as required
- Record any required post cutover activities
*When/if this is green we’re good to proceed!

Note i: Any changes to the source 7-Mode systems after clicking “Apply SVM Config”, must be manually copied across.
Note ii: 7-Mode does not support SMB3, whereas cDOT does support SMB3. If you don’t want SMB3 enabled on your SVM, disable.

7MTT click “Check Readiness
- Make remediation’s as required
Note: “Check Readiness” can be run any number of times

Additional checks:
- Check ASUPs of involved 7-Mode systems
- Check ASUPs of involved cDOT systems

3.2) Cutover Day

7MTT click “Check Readiness
Note: Very final check…

- Confirm I/O on the 7-Mode systems is zero

Send Pre-Cutover Autosupports:
7-Mode> options autosupport.doit "Beginning CFT operation"
cDOT::> autosupport invoke -node * -type all -message "Beginning CFT operation"

Pre-cutover: Manipulate SnapMirrors as required

7MTT click “Export & Halt”*
- Resolve any issues that present
*When/if this is green we’re good to proceed!

Verify systems are halted (console access)

*As attached to the 7-Mode Controllers!

Cables shelves to cDOT Controllers are per cabling schedule
Cable ACP
Cable any required data connections
Visually double-check cabling


Basic cabling checks (per node)::>
node run local
options acp.enabled off
acpadmin configure
storage show disk -p
storage show acp

Note: You could plug your laptop into a node-mgmt port and run over the node mgmt IP.

7MTT click “Verify Cabling
- Resolve any issues that present
*When/if this is green we’re good to proceed!

7MTT click “Import
- Resolve any issues that present
*When/if this is green we’re good to proceed!

Apply any required post-cutover configurations
- As flagged by 7MTT Pre-Checks
- Any specific customer requirements

Verify the carried over configuration
- CIFS Shares, NFS Exports, iGroups, Mappings, Snapshot Policies, etcetera …
Note: If you had snap sched 0 0 0 on the source 7-Mode volumes, check the volume snapshot policy is set to none on the transitioned volumes!

Send Post-Cutover Autosupports:
cDOT::> autosupport invoke -node * -type all -message "Beginning CFT operation"


Post cutover: Manipulate SnapMirrors as required

3.3) Finalizing

7MTT click “Commit

Note: Whilst you’re in the pre-“Commit” phase, certain cluster operations are blocked. Once “Commit” is clicked there is no rollback to 7-Mode. Ideally, “Commit” should be done within a few days of the cutover. Whilst pre-“Commit” keep an eagle eye on aggregate utilization in case the aggregate snapshots start to eat up space!

4) Post Cutover Tidy Up

Tidy up 7-Mode Snapshots

Image: Completed Copy Free Transition (got 6 greens)

Final Comment: CFT is awesome - pretty simple to do and works nice! Thumbs up!

Thursday, 14 July 2016

7 to C Local Groups Creator

Sometimes one has to ignore transitioning local users and groups when doing a 7MTT assisted 7 to C transition, using the ignore-local-users-groups-transition 7MTT CLI switch, but there might still be some requirement for local users and groups.

In this following scenario, we’re only interested in the domain members of essentially the built-in local groups on the 7-Mode system, and we’re provided with a list of SIDs to Domain User/Group*, as lines of -


- and we also have the lug.txt file that was generated by 7MTT.

*Don’t have domain access, but would be quite simple to add SID translation to the script.

The following simple script will output the required Clustershell commands to create the local groups memberships. Copy and paste into notepad as say local_groups_creator.ps1 and run like>

.\local_groups_creator.ps1 -SIDsFile sids.txt -LUGfile lug.txt -Vserver VSERVERNAME

The Script


$SIDtoUser = @{}
[System.Array]$SIDs = Get-Content $SIDsFile
$SIDs | Foreach {
  [System.Array]$S = $_.Split(";")
  If($S.count -eq 2){
    $SIDtoUser.($S[0]) = $S[1]

$Output = @()
$SIDtoGroup = @{}
[System.Array]$LUGs = Get-Content $LUGfile
$LUGs | Foreach {
  [System.Array]$S = $_.Split(",")
  If($S.count -eq 9){
    $SIDtoGroup.($S[3]) = $S[5]
  If($S.count -eq 7){
    If($SIDtoGroup.($S[3]) -and $SIDtoUser.($S[5])){
      $Output += ('local-group add-members -group-name "' + $SIDtoGroup.($S[3]) + '" -vserver ' + $Vserver + ' -member-names "' + $SIDtoUser.($S[5]) + '"')


Note: This only creates ”local-group add-members” commands for adding members to local groups that already exist on the SVM (the BUILTIN groups.)