List All VM’s with snapshots – “One-liner Wednesdays”

Here is a quick way to list all of your virtual machines’ snapshots that are managed through the vCenter you are currently connected to.

get-vm | get-snapshot | select vm,powerstate | Out-GridView

I like using the “Out-GridView” cmdlet because it allows you to quickly filter the list. This is excellent when you want to sort specific types of vm’s. Example: “app”, “db”, “web” etc.

VMware PowerCLI Documentation
Microsoft PowerShell Documentation

Hindsight is 1024×768

Ever go through a bunch of “deep” steps in troubleshooting, only to realize the answer was right in front of you the whole time? This is my story.


While testing a new gui based app via RDP, I was presented with a warning prompt on app launch that cited a resolution requirement of at last 1024×768….My local display is at least this resolution, so Microsoft RDP should adjust accordingly. The app would launch as normal after clicking the sacred “ok” button. *scratch head* I need this warning to go away before testing/validation by said application owners.

My immediate reaction was to check the resolution. The drop-down was greyed out. I rebooted the box and was still unable to change the setting. After a quick google, I stumbled upon a KB article to increase the vRam size and tweak display settings at the hypervisor level…
VMware KB: “Adding video resolution modes to Windows guest operating systems”
After modifying the svga options in the vmx file and booting the vm back up…I was still unable to change the windows drop-down. This rules out any hypervisor based resource issue, I suppose.

At the bottom of the aforementioned KB, was another link/KB, aptly named “Increasing virtual machine display resolution to a custom resolution beyond the maximum resolution listed in Microsoft Windows” There is ACTUALLY a small utility that you can invoke, if and when display settings are unavailable in windows.

From an elevated command promot, I set it to my desired resolution and reboot.
VMwareResolutionSet.exe 0 1 , 0 0 1024 768

I sit back in my chair and stare at my screen for a moment and it dawned on me…. I have been testing the whole time using MS Remote Desktop Connection Manager and not the traditional RDP!

I connect using a normal RDP session and BAM!!! The app friggin works without prompt. The display settings are showing my resolution. Also, as NOW expected, the settings are greyed out.

RDP connection manager was forcing my display in it’s mirrored/server listing view mode and causing the issue the whole time. I learned some cool stuff about vmware, was reminded of some simple RDP display principles, but ultimately….


Extending a NetApp SnapMirror source/destination volume

I recently had a request from a client to extend an nfs volume living on a NetApp FAS6220. The volume is utilizing SnapMirror technology to replicate volumes to a DR site.
In this example, we show how to extend the volume by 100GB and ensure SnapMirror continues to function.

1. SSH into both source(Production) and destination(DR) controllers
2. On destination (DR site):
snapmirror break
vol options fs_size_fixed off
vol size +100g
vol options fs_size_fixed on

3. On source (Production Site):
vol size+100g
4. Back on destination (DR site):
snapmirror resync
Answer yes at prompt to confirm

5. Refresh your ESXi shared storage

List HA reboots within the past 5 days – PowerCLI

    On 4.1

$Date = Get-Date
$HAVMrestartold =5
Get-VIEvent -maxsamples 100000 -Start ($Date).AddDays(-$HAVMrestartold) -type info | Where {$_.FullFormattedMessage -match "was restarted"} |select CreatedTime,FullFormattedMessage |sort CreatedTime -Descending

    On 5.x

$Date = Get-Date
$HAVMrestartold =5
Get-VIEvent -maxsamples 100000 -Start ($Date).AddDays(-$HAVMrestartold) -type warning | Where {$_.FullFormattedMessage -match "restarted"} |select CreatedTime,FullFormattedMessage |sort CreatedTime -Descending

Documenting VMware IP’s via PowerCLI – “One-liner quickies”

I am finishing up the new VMware lab at work and need to document the setup. Part of this documentation includes getting all the ip’s on each VMhost and their corresponding use. A quick and easy way to do this is to leverage the awesomeness of PowerCLI.

So, here is a great one-liner that requires little post formatting to get what you need:

Get-VMHostNetworkAdapter | select vmhost,portgroupname,ip | Export-Csv c:\YourDirectory\network.csv

Some useful NetApp Commands

General Commands
setup (Re-Run initial setup)
halt (Reboots controller into bootrom)
reboot (Reboots controller back to Data Ontap)
sysconfig -a (System configuration and information)
java netapp.cmds.jsh (limited freebsd cli)
storage show disk (show physical information about disks)
passwd (Change password for logged in user)
sasadmin shelf (shows a graphical layout of your shelves with occupied disk slots)
options trusted.hosts x.x.x.x or x.x.x.x/nn (hosts that are allowed telnet, http, https and ssh admin access. x.x.x.x = ip address, /nn is network bits)
options trusted.hosts * (Allows all hosts to the above command)
sysstat -s 5 (Displays operating statistics every 5 seconds i.e. CPU, NFS, CIFS, NET, DISK, etc)
reallocate measure /vol/volname (Measure the amount of fragmentation in a volume)
options autologout.console.enable on (Turns on autologout for the console)
options autologout.console.timeout 300 (300 second autologout for the console)
options autologout.telnet.enable on (Turns on autologout for telnet)
options autologout.telnet.timeout 300 (300 second autologout for the console)

Press DEL at boot up during memory test followed by boot_diags and select all (Diagnostic tests for a new install)
priv set diags (Enter diagnostics CLI mode from the Ontap CLI)
priv set (Return to normal CLI mode from diagnostics mode)

software list (Lists software in the /etc/software directory)
software get http://x.x.x.x/ (Copy software from http to software directory)
software delete (Deletes software in the /etc/software directory)
software update -r (Install software. The -r prevents it rebooting afterwards)

Baseboard Management Controller BMC
bmc status (shows the status of the BMC remote management interface)
bmc setup (BMC remote management interface setup)

Service Port SP
sp status (shows the status of the SP remote management interface)
sp setup (SP remote management setup)

ACP (Alternate Control Path)
options acp.enabled on (Turns on ACP)
storage show acp -a (show ACP status)

Root Volume
If you have a 32-bit root volume that you wish to convert to 64-bit, the best way I found is to snapmirror the root volume to a 64-bit aggregate, break the snapmirror, set the new root volume as root, and either failover and failback the filer, or reboot.

aggr create aggregate_name (Creates an Aggregate)
aggr destroy aggregate_name (removes an Aggregate)
aggr offline aggregate_name (takes an Aggregate offline)
aggr online aggregate_name (bring an Aggregate online)
aggr options aggregate_name root (makes an Aggregate root|Only use if your Root Aggregate is damanged)
aggr status (shows status of all aggregates)
aggr status aggregate_name (show status of a specific Aggregate)
aggr status -r aggr0 (shows the root volume on aggr0 and the disk layout)
aggr status -s aggr0 (shows spare disks on aggr0)
aggr status -v aggr0 (MUST BE DONE IN PRIV SET DIAG MODE. Shows more detailed information of the aggregate status)
aggr show_space aggregate_name (shows specific aggregate space information)
aggr options aggregate_name nosnap=on (Disable snapshot autocreation)
aggr options aggregate_name raidsize=x (x being the number of drives in the RAID)
aggr scrub status -v (MUST BE DONE IN PRIV SET DIAG MODE. Shows scrub status of the aggregate)
aggr scrub resume (MUST BE DONE IN PRIV SET DIAG MODE. Resumes a susepended scrub)
aggr scrub suspend (MUST BE DONE IN PRIV SET DIAG MODE. Suspends a current scrub process)
aggr scrub start (MUST BE DONE IN PRIV SET DIAG MODE. Starts a new scrub process)
reallocate start -f -p /vol/volname (Run in priv set advanced, used after adding disks to an aggregate to evenly distribute blocks amongst raid groups)
snap reserve -A aggregate_name 0 (Set Aggregate snap reserve to 0% or any number you enter)
snap list -A aggregate_name (Lists snapshots on specified aggregate)
snap delete -A aggregate_name (Deletes a snapshot on a specified aggregate)
snap sched -A aggregate_name x x x@x,x,x (Creates a snapshot shedule in weeks days hours@time ie 0 2 1@9 means no weekly snaps, 2 daily, 1 hourly @ 9am)

vol create volume_name (Creates a volume)
vol autosize volume_name (Shows autosize settings for a given volume)
vol autosize volume_name on|off (Turns Volume autosize on or off)
vol options volume_name (Lists volume options)
vol size volume_name + size k|m|g|t (increase volume size by KB, MB, GB or TB)
vol status -f (lists broken or failed disks)
vol scrub status -v (Shows the scrubbing status of volumes)
vol options nosnapdir on|off (enables or disables snapshot visibility from the volume or LUN level)

qtree create /vol/volume_name/qtree_name (Create a qtree within a volume)
qtree security /vol/volume_name/qtree_name unix|ntfs|mixed (Change security settings of a qtree)
qtree stats qtree_name (Shows CIFS or NFS ops/sec for a given qtree)
qtree status (Displays all your Qtree’s)

snap create volume_name snapshot_name (create a snapshot)
snap list volume_name (List snapshots for a volume)
snap delete volume_name snapshot_name (delete a snapshot on a volume)
snap delete -a volume_name (Deletes all snapshots for a volume)
snap autodelete volume_name show (Shows snapshot autodelete settings for a volume)
snap restore -s snapshot_name volume_name (Restores a snapshot on the specified volume name)
snap sched volume_name weeks days hours@time (Creates a snapshot schedule on a volume i.e. snap sched volume 4 5 1@07 Weekly Snapshots are created at midnight on each Sunday, Daily snapshots are created each day except Sunday at midnight)
snap delta volume_name (Shows delta changes between snapshots for a given volume)
snap reserve volume_name (Shows the snap reserve for a given volume)
snap reclaimable volume_name snapshot_name (Shows the amount of space reclaimable if you remove this snapshot from the volume)
options cifs.show_snapshot on (Allows snapshot directory to be browse-able via CIFS)
options nfs.hide_snapshot off (Allows snapshot directory to be visible via NFS)

options snapmirror.enable on (turns on SnapMirror. Replace on with off to toggle)
rdfile /etc/snapmirror.allow (Performed on the Source Filer. You should see you destination filers in this file.)
wrfile /etc/snapmirror.allow (Performed on the Source Filer. Overwrites the file with the specified destination filer name and ip address)
vol restrict volume_name (Performed on the Destination. Makes the destination volume read only which must be done for volume based replication. Don’t use for Qtree based replication)
snapmirror initialize -S srcfiler:source_volume dstfiler:destination_volume (Performed on the destination. This is for full volume mirror. For example snapmirror initialize -S filer1:vol1 filer2:vol2)
snapmirror initialize -S srcfiler:/vol/vol1/qtree dstfiler:/vol/vol1/qtree (Performed on the destination. Performs the same as the command above but for Qtree’s only)
snapmirror initialize -S srcfiler/vol/vol1/- dstfiler:/vol/vol1/qtree (Performed on the destination. Performs volume to qtree replication. Includes all luns, exports on the source volume)
snapmirror status (Shows the status of snapmirror and replicated volumes or qtree’s)
snapmirror status -l (Shows much more detail that the command above, i.e. snapshot name, bytes transferred, progress, etc)
snapmirror quiesce volume_name (Performed on Destination. Pauses the SnapMirror Replication. If you are removing the snapmirror relationship this is the first step.)
snapmirror break volume_name (Performed on Destination. Breaks or disengages the SnapMirror Replication. If you are removing the snapmirror relationship this is the second step followed by deleting the snapshot)
snapmirror resync volume_name (Performed on Destination. When data is out of date, for example working off DR site and wanting to resync back to primary, only performed when SnapMirror relationship is broken)
snapmirror update -S srcfiler:volume_name dstfiler:volume_name (Performed on Destination. Forces a new snapshot on the source and performs a replication, only if an initial replication baseline has been already done)
snapmirror release volume_name dstfiler:volume_name (Performed on Destination. Removes a snapmirror destination)
/etc/snapmirror.conf (edit or wrfile this file on the destination filer or vfiler to enter in a snapmirror schedule. i.e. srcfiler:vol1 dstfiler:vol1 – 15 * * * This will replicate every 15 minutes. Each * represents a value. Starting from right to left you have day of week, month, day of month, hour minute. Minute 0-59, hours 0-23, day-of-month 1-31, day-of-week 0 for Sunday – 6 Saturday) Each value can only be a number.)
/vol/vfiler_vol/etc/snapmirror.conf (read or write this file for snapmirror configurations on a vfiler. vfiler_vol being the first volume with the /etc in the vfiler)
“priv set diag” followed by “snapmirror break -h ” followed by “priv set”. (If for some reason you snapmirror relationship has been orphaned, meaning it doesn’t exist in snapmirror status on the source but does exist on the destination, you can use these three commands to force the destination to become read/write. You can then do “snap list” and find the baseline snapshot for the destination. Followed by snap delete of the baseline snapshot. This will remove the snapmirror relationship if all else fails. Lastly don’t forget to remove the entry from snapmirror.conf)

cf enable (enable cluster)
cf disable (disable cluster)
cf takeover (take over resources from other controller)
cf giveback (give back controller resources after a take over)

vFiler – Multistore
vfiler limit (Performed on the host to see what the limit of vfilers is)
vfiler limit 16 (Performed on the host to change the limit of vfilers to 16 or any number you specify. Check the documentation for Memory Requirements before doing this)
vfiler status (Displays the status of the vfiler i.e. running or stopped)
vfiler status -r (On the host system. Shows which volumes are running on each vfiler)
vfiler rename old_vfiler_name new_vfiler_name (Renames a vfiler)
vfiler run vfiler_name setup (Runs the vfiler setup wizard)
vfiler run vfiler_name cifs setup (Runs the cifs setup wizard for a vfiler)
ipspace create ipspacename (Creates an ipspace – needed when 2 or more vfilers use the same network subnets)
ipspace list (Lists the available ipspace’s)
ipspace assign ipspacename interface_name (Assigns the interface to an ipspace.)
ipspace destroy ipspace_name (Removes/Deletes an ipspace)
vfiler create vfiler_name -s ipspace_name -i x.x.x.x /vol/volume_name or qtree_name (Creates a vfiler name with ip address x.x.x.x and assigns the volume or qtree to the vfiler. The -s is optional)NOTE: Creating a qtree as the base vfiler does not allow you to enable snapmirror. You must create the base as a volume!
vfiler add vfiler_name -i x.x.x.x /vol/volume_name (Adds an ip address and additional volume (can be qtree) to an existing vfiler name)
vfiler remove vfiler_name -i x.x.x.x /vol/volume_name (Removes an IP address and volume from an existing vfiler)
vfiler destroy vfiler_name (Deletes/removes a vfiler)
vfiler rename vfiler_name_old vfiler_name_new (Renames a vfiler from old name to new name)
vfiler context vfiler_name (Changes CLI into the context of the vfiler name)
vfiler allow vfiler_name proto=cifs proto=nfs proto=iscsi (Allows the following protocols cifs, nfs and iscsi. Disallows rsh, ssh, ftp and http)
vfiler stop vfiler_name (Stops a vfiler instance)
vfiler start vfiler_name (Starts a vfiler instance)
vfiler run vfiler_name route add default x.x.x.x 1 (Adds a default route to a vfiler. Performed from vfiler0)
route add x.x.x.x/x x.x.x.x 1 (Adds a route in a vfiler)

To add extra vlans to a vfiler you must do the following:
Check the ip space that the vfiler is using by typing ipspace list
Create the vlan interface on the host i.e. vif0-360 for vlan 360
Assign the interface to the ip space of the vfiler i.e. ipspace assign ipspace_name vif0-360
Add the ip address you wish to use on the vlan interface to the vfiler i.e. vfiler add vfiler_name -i
Once the vfiler has this ip address in it’s config we can add it onto the interface i.e. ifconfig vif0-360 netmask

options on (Turns Autosupport on)
options off (Turns Autosupport off)
autosupport.doit “description” (creates an autosupport alert with a user defined description)

Hot Spares
Any functioning disk that is not assigned to an aggregate but is assigned to a controller functions as a hot spare disk
disk show
vol status -r (displays which disks are allocated as spare)

disk show (Show disk information)
disk show -n (Show unowned disks)
disk assign 0d.02.0 -s unowned (Changes ownership from owned to unowned or to other cluster member)
disk assign 0d.02.0 (assigns the disk to the controller you perform the command on)
options disk.auto_assign off (turns auto assign of unowned disks to controllers to off)
options disk.auto_assign on (turns auto assign of unowned disks to controllers to on)
storage show disk -p (displays primary, secondary port, shelf and bay in a metro cluster)

lun setup (runs the cli lun setup wizard)
lun create -s 10g -t windows_2008 -o noreserve /vol/vol1/lun1 (creates a lun of 10GB with type Windows 2008, sets no reservation and places it in the following volume or qtree)
lun offline lun_path (takes a lun offline)
lun online lun_path (brings a lun online)
lun show -v (Verbose listing of luns)
lun move /lun_path_source /lun_path_destination (Move lun from source to destination)
lun resize -f lun_path +|- new_size k|m|g|t (Resizes a lun by adding space (+) or subtracting space (-) Note: a lun can only ever grow 10x it’s original size)
lun map /vol/vol1/lun1 igroup_name (Maps lun1 to the igroup_name)
lun alignment show (MUST BE DONE IN PRIV SET DIAG MODE. Shows which luns are aligned and which are not)

Fiber FCP
fcadmin config -t taget 0a (Changes adapter from initiator to target)
fcadmin config (lists adapter state)
fcadmin start (Start the FCP service)
fcadmin stop (Stop the FCP service)
fcp show adapters (Displays adapter type, status, FC Nodename, FC Portname and slot number)
fcp nodename (Displays fiber channel nodename)
fcp show initiators (Show fiber channel initiators)
fcp wwpn-alias set alias_name (Set a fiber channel alias name for the controller)
fcp wwpn-alias remove -a alias_name (Remove a fiber channel alias name for the controller)
igroup show (Displays initiator groups with WWN’s)

iscsi start (Start the iscsi service)
iscsi stop (Stop the iscsi server)
iscsi status (Show whether iscsi server is running or not running)
iscsi interface show (Show which interfaces are enabled or disabled for iscsi)
iscsi interface enable interface_name (Enable an interface for iscsi)
iscsi interface disableinterface_name (Disable an interface for iscsi)
iscsi nodename (Display the controllers iscsi nodename)
igroup show (Displays iSCSI initiators)
igroup create -i -t vmware sqlcluster_igroup (Creates an Initiator Group called sqlcluster_igroup with OS type vmware)
igroup add sqlcluster_igroup (Assigns the following iscsi initiator to the sqlcluster_igroup. This can also be FCP addresses)

cifs setup (cifs setup wizard)
cifs terminate (terminate the cifs service)
cifs restart (restarts cifs)
cifs shares (displays cifs shares)
cifs status (show status of cifs)
cifs lookup SID|name (Either displays the SID if you type in the name or name if you type in the SID)
cifs sessions (Show you current cifs sessions)
cifs sessions -s username (Shows the current session for a user)
cifs broadbast -v volume_name “message” (Broadcast a message to all users connected to volume_name)
cifs shares -add share_name /vol/volume_name/qtree_name (Create a cifs share on a specific volume or qtree)
cifs shares -delete share_name (Deletes a share name)
cifs shares share_name (Displays full path and permissions of the share)
cifs access share_name -g user_rights (Grants specific user rights to the share)
cifs access share_name user_name permission (Grants a specific permission to a user for a share. Permissions = Full Control, Change, Read, No Access)
cifs domain info (Lists information about the filers connected Windows Domain)
cifs testdc ip_address (Test a specific Windows Domain Controller for connectivity)
cifs prefdc (Displays configured preferred Windows Domain Controllers)
cifs prefdc add domain address_list (Adds a preferred dc for a specific domain i.e. cifs prefdc add netapplab.local
cifs prefdc delete domain (Delete a preferred Windows Domain Controllers)
cifs gpresult (Displays which Windows Group Policies apply to this filer)
cifs gpupdate (Forces an update of Windows Group Policy)
cifs top (Performance data for cifs. cifs.per_client_stats.enable option must be on to use this feature)
vscan on (Turns virus scanning on)
vscan off (Turns virus scanning off)
vscan reset (Resets virus scanning)

nfs setup (Runs the NFS setup wizard)
/etc/export (Enter in your export information here and save the file. Then proceed with exportfs -a to update memory buffer)
exportfs (Displays current exports)
exportfs -p path (Adds exports to the /etc/exports file)
exportfs -uav (Unexports all current exports)
exportfs -u path (Unexports a specific export from memory)
exportfs -z path (Unexports a specific export and also removes it from /etc/exports)
exportfs -a (Updates memory buffer with contents in /etc/exports)
nfsstat -d (Displays NFS statistics)

HTTP Admin
options httpd.admin.enable on (Turns on http web admin, na_admin)
options httpd.admin.access host=x.x.x.x,x.x.x.x (Allows admin access for specific hosts separated by a comma)

SIS (Deduplication)
sis status (Show SIS status)
sis config (Show SIS config)
sis on /vol/vol1 (Turn on deduplication on vol1)
sis config -s mon-fri@23 /vol/vol1 (Configure deduplication to run every monday – Friday at 11pm on vol1)
sis start -s /vol/vol1 (Run deduplication manually on vol1)
sis status -l /vol/vol1 (Display deduplication status on vol1)
df -s vol1 (View space savings with deduplication)
sis stop /vol/vol1 (Stop deduplication on vol1)
sis off /vol/vol1 (Disables deduplication on vol1)

User Accounts
useradmin user add user_name -g group_name (Adds a user to a group)
useradmin user list (Lists current users)
useradmin user list user_name (List specific user information)
useradmin group list (Lists current groups)
useradmin group delete group_name (Deletes a specific group name)
useradmin group modify group_name -g new_group_name (Modify group name)
useradmin user delete user_name (Delete a specific user)
useradmin user modify user_name -g group_name (Adds a user to a group)
useradmin domain user add user_name -g group_name (Adds a Windows Domain user to a local group)
useradmin domain user list -g group_name (List Windows Domain users in a specific group)

dns flush (Flushes the DNS cache)
/etc/resolv.conf (edit this file to change your dns servers)

ndmpd status (check status)
ndmpd on|off (turns ndmpd on or off)
ndmpd version (displays version information)
ndmpd version 4 (set ndmpd version to 4)
options ndmpd (Display ndmpd options)

Reading and Writing Files (Deduplication)
rdfile path/file (Reads a file)
wrfile path/file (Writes to a file. Warning this method overwrites the file. Make sure you copy out original contents if you wish to keep it. If you haven’t used this before try on the simulator.)
wrfile -a path/file (Writes to a file by appending the changes)

/etc/messages (All logging is for the system is stored here)

vif status (Displays the status of VIF interfaces)
vif create lacp vif0 ip e0a,e0b,e0c,e0d (Create a vif interface named VIF0 using lacp and a load balancing method of IP, bundled with interface e0a, e0b, e0c, e0d)
vif add vif0 e0a (Adds a down interface into an existing VIF)
vif destroy vif0 (deletes a VIF interface)

vlan create vif0 10 (create a vlan on interface vif0. The interface will be vifo-10)
vlan delete vif0 10 (deletes the vlan interface vif0-10)
ifconfig vif0-10 x.x.x.x netmask x.x.x.x partner vif0-10 (Sets IP information on the interface named vif0-10 with a partner interface of vif0-10)
route add default 1 (Adds a default route of with metric 1)

sysstat -x 1 (displays per second statistics for CPU, iSCSI, FCP, CIFS, NFS, Disk Util, etc)
sysstat -m 1 (displays per second statistics for each CPU)
sysstat -M 1 (MUST BE DONE IN PRIV SET DIAG MODE. Displays per second statictics for CPU’s, Kahuna, WAFL, etc)
statit b (MUST BE DONE IN PRIV SET DIAG MODE. Starts a performance snapshot)
statit e (MUST BE DONE IN PRIV SET DIAG MODE. Stops a performance snapshot and displays the stats on screen. TIP: Turn on logging in your terminal program before running this command)