<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>David Warburton &#187; Netapp</title>
	<atom:link href="http://blog.davidwarburton.net/category/storage-backups/netapp-storage/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.davidwarburton.net</link>
	<description>Musings of a VM and storage engineer with a subtle addiction to scripting</description>
	<lastBuildDate>Sun, 13 May 2012 17:04:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='blog.davidwarburton.net' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>David Warburton &#187; Netapp</title>
		<link>http://blog.davidwarburton.net</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://blog.davidwarburton.net/osd.xml" title="David Warburton" />
	<atom:link rel='hub' href='http://blog.davidwarburton.net/?pushpress=hub'/>
		<item>
		<title>Using Powershell to report on Netapp filer snapshots</title>
		<link>http://blog.davidwarburton.net/2010/03/02/using-powershell-to-report-on-netapp-filer-snapshots/</link>
		<comments>http://blog.davidwarburton.net/2010/03/02/using-powershell-to-report-on-netapp-filer-snapshots/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 09:21:17 +0000</pubDate>
		<dc:creator>DavidWarburton</dc:creator>
				<category><![CDATA[Netapp]]></category>
		<category><![CDATA[Powershell]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Storage / Backups]]></category>

		<guid isPermaLink="false">http://blog.davidwarburton.net/?p=79</guid>
		<description><![CDATA[We had a few issues recently where SnapManager for Exchange and SnapDrive were failing to communicate properly which resulted in a weeks worth of missed snapshots before anyone realised what was going on. I wrote this script to report on the status of snapshots. The filer name is passed as a variable and a list [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.davidwarburton.net&#038;blog=11246690&#038;post=79&#038;subd=davidwarburton&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>We had a few issues recently where SnapManager for Exchange and SnapDrive were failing to communicate properly which resulted in a weeks worth of missed snapshots before anyone realised what was going on.</p>
<p>I wrote this script to report on the status of snapshots. The filer name is passed as a variable and a list of volume names is stored as a variable at the top of the script. The output is nicely formatted email.</p>
<ol>
<li>The script uses SSH to connect to the filer (see my <a href="/2010/02/26/scripting-netapp-filers/">SSH guide for Netapp filers</a>)</li>
<li>For each vol listed in the array, the list of snapshots is returned</li>
<li>Any line with &#8220;__daily&#8221; in is processed &#8211; all others are ignored (we only care about our nightly verified snapshots which are all named __daily)</li>
<li>The snapshot name contains the date/time it was taken &#8211; this is read and if the date is within 24 hours of now a success is return (since reports are run the day after the verified job). If the date is over 24 hours a failure is returned.</li>
<li>A nicely formated HTML email is sent out which looks a little something like this&#8230;</li>
</ol>
<p><strong>Please see below for today&#8217;s backup report.</strong></p>
<table style="font-size:xx-small;" border="1" cellpadding="0">
<tbody>
<tr>
<td valign="top"><strong>VOL Name</strong></td>
<td valign="top"><strong>Status</strong></td>
<td valign="top"><strong>Snapshot name</strong></td>
</tr>
<tr>
<td valign="top">Vol_Exc02_DB</td>
<td valign="top"><span style="color:#0000ff;">Success</span></td>
<td valign="top">0% ( 0%) 0% ( 0%) Mar   02 01:44 exchsnap__exchange02_03-01-2010_23.00.14__daily   (busy,backup[0],dump)</td>
</tr>
<tr>
<td valign="top">Vol_Exc02_LOG</td>
<td valign="top"><span style="color:#0000ff;">Success</span></td>
<td valign="top">0% ( 0%) 0% ( 0%) Mar   02 04:38 eloginfo__exchange02_03-01-2010_23.00.14__daily</td>
</tr>
<tr>
<td valign="top">Vol_Exc02_DB1</td>
<td valign="top"><span style="color:#0000ff;">Success</span></td>
<td valign="top">0% ( 0%) 0% ( 0%) Mar 01 23:00 exchsnap__exchange02_03-01-2010_23.00.14__daily</td>
</tr>
<tr>
<td valign="top">Vol_Exc02_LOG1</td>
<td valign="top"><span style="color:#0000ff;">Success</span></td>
<td valign="top">1% ( 0%) 0% ( 0%) Mar   02 01:27 eloginfo__exchange02_03-01-2010_23.00.14__daily</td>
</tr>
<tr>
<td valign="top">Vol_Exc03_DB</td>
<td valign="top"><span style="color:#0000ff;">Success</span></td>
<td valign="top">1% ( 1%) 0% ( 0%) Mar   02 00:50 exchsnap__exchange03_03-01-2010_23.00.13__daily</td>
</tr>
<tr>
<td valign="top">Vol_Exc03_LOG</td>
<td valign="top"><span style="color:#0000ff;">Success</span></td>
<td valign="top">0% ( 0%) 0% ( 0%) Mar   02 02:06 eloginfo__exchange03_03-01-2010_23.00.13__daily</td>
</tr>
<tr>
<td valign="top">Vol_Exc03_DB1</td>
<td valign="top"><span style="color:#ff0000;">FAILURE</span></td>
<td valign="top">1% ( 1%) 0% ( 0%) Feb   26 23:00 exchsnap__exchange03_03-01-2010_23.00.13__daily</td>
</tr>
<tr>
<td valign="top">Vol_Exc03_LOG1</td>
<td valign="top"><span style="color:#ff0000;">FAILURE</span></td>
<td valign="top">0% ( 0%) 0% ( 0%) Feb   26 00:32 eloginfo__exchange03_03-01-2010_23.00.13__daily</td>
</tr>
</tbody>
</table>
<p>See the script and HTML files after the jump&#8230;<span id="more-79"></span></p>
<p>Don&#8217;t forget to change the name of your mail server, your sending and recipient email addresses and, most importantly, the location of plink.exe and your DSA keys used to establish the SSH connection (although you could easily modify this script to use RSH instead).</p>
<h4>snapReport.ps1 script</h4>
<pre># ==============================================================================================
#
# NAME:     Netapp filer snapshot reports
#
# AUTHOR:     David Warburton
# DATE:     12/03/2009
#
# PARAMETERS:    1. $filer
#        Specifies the name of the remote filer to connect to.
#        example: snapReport.ps1 myfiler01
#
# ==============================================================================================
$debugPreference = "continue"
$errorActionPreference = "stop"
$filer = $Args[0]
$htmlFile = "D:\Logs\Exchange Snapshot Report\exchange_Snapshot.html"
$volumes = ("Vol_Exc02_DB", "Vol_Exc02_LOG", "Vol_Exc02_DB1", "Vol_Exc02_LOG1", "Vol_Exc03_DB", "Vol_Exc03_LOG", "Vol_Exc03_DB1", "Vol_Exc03_LOG1")
$header = get-content "header.html"
$header &gt; $htmlFile
$today = get-date
function sendEmail() {
 $eServer = new-object system.net.mail.smtpClient("mailserver.yourdomain.com")
 $From = "youraddress@yourcompany.com"
 $To = "backup_reports@yourcompany.com"
 if ($checkType -eq "weekly") {
 $title = "Weekly "
 } else {
 $title = "Daily "
 }
 $todayDate = [string] $today.day + "/" + [string] $today.month + "/" + [string] $today.year
 $title += "Exchange snapshot Report for $todayDate"
 $Body = get-content $htmlFile
 $eMsg = new-object System.Net.Mail.MailMessage($from,$to,$Title,$body)
 $eMsg.IsBodyHTML = $True
 #$eMsg.cc.add($cc)
 $eServer.send($eMsg)
}
function checkSnap($volName) {
 $output = D:\Utils\PuTTY\plink.exe svc-ssh@$filer -i D:\Utils\PuTTY\id_dsa.ppk snap list $volName
 $validsnap = $False
 $snapname = ""
 foreach ($line in $output){
 if ($line.contains("__daily")) {
 $sMonth = $line.substring(62, 2)
 $sDay = $line.substring(65, 2)
 $sYear = $line.substring(68, 4)
 $sDate = [datetime] "$sMonth $sDay $sYear"
 if (($sDate.date).addDays(1) -eq $today.date) {
 $validsnap = $True
 $snapname = $line
 }
 }
 if ($validsnap) {
 return $snapname
 }
 }
 return $False
}
foreach ($vol in $volumes) {
 $line = "&lt;tr&gt;&lt;td&gt;$vol&lt;/td&gt;"
 $status = checkSnap $vol
 if ($status -eq $false) {
 $line += "&lt;td&gt;&lt;font color=red&gt;FAILED&lt;/font&gt;&lt;/td&gt;"
 } else {
 $line += "&lt;td&gt;&lt;font color=blue&gt;Success&lt;/font&gt;&lt;/td&gt;"
 }
 $line += "&lt;td&gt;$status&lt;/td&gt;&lt;/tr&gt;"
 $line &gt;&gt; $htmlFile
}
$footer = Get-Content "footer.html"
$footer &gt;&gt; $htmlFile
sendEmail
</pre>
<p>Here are the HTML bits for the header and footer of the email&#8230;</p>
<h4>header.html</h4>
<pre>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"&gt;
&lt;html&gt;
&lt;head&gt;
 &lt;title&gt;Backup Report&lt;/title&gt;
 &lt;style type="text/css"&gt;
 body {
 font-family: Calibri, Arial, Helvetica;
 color: black;
 font-size: xx-small;
 background-color: #FFFFFF }
 p {
 font-size: x-small }
 .big {
 font-size: x-small;
 font-weight: bold }
 table {
 padding: 0px ;
 border-spacing: 2px ;
 empty-cells: hide ;
 border: 1px solid #AAAAAA }
 td {
 background-color: #EEEEEE;
 vertical-align: top }
 th {
 background-color: #EEEEEE;
 vertical-align: top ;
 text-align: left}
 &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;p&gt;*** This email is now automatically generated ***&lt;br&gt;&lt;br&gt;&lt;b&gt;Please see below for today's backup report.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;
 &lt;b&gt;NOTE: &lt;/b&gt;&lt;br/&gt;
 - Exchange and SQL snapshots are managed by SnapManager and are alerted independantly to this report.&lt;br/&gt;
 - Not &lt;u&gt;all&lt;/u&gt; snapshots are shown in these reports. Hourly snapshots are currently not reported upon.
&lt;/p&gt;
&lt;table&gt;
&lt;tr&gt;
 &lt;th&gt;VOL Name&lt;/th&gt;&lt;th&gt;Status&lt;/th&gt;&lt;th&gt;Number of Snapshots&lt;/th&gt;&lt;th&gt;Last snapshot taken&lt;/th&gt;
&lt;/tr&gt;
</pre>
<h4>footer.html</h4>
<pre>&lt;/table&gt;
&lt;br/&gt;
&lt;p&gt;Regards.&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/davidwarburton.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/davidwarburton.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/davidwarburton.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/davidwarburton.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/davidwarburton.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/davidwarburton.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/davidwarburton.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/davidwarburton.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/davidwarburton.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/davidwarburton.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/davidwarburton.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/davidwarburton.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/davidwarburton.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/davidwarburton.wordpress.com/79/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.davidwarburton.net&#038;blog=11246690&#038;post=79&#038;subd=davidwarburton&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.davidwarburton.net/2010/03/02/using-powershell-to-report-on-netapp-filer-snapshots/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3a54ad2551bd756d17e5f75aab3c2acd?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">DavidWarburton</media:title>
		</media:content>
	</item>
		<item>
		<title>NTFS permissions lost when copying from a snapshot</title>
		<link>http://blog.davidwarburton.net/2010/03/01/ntfs-permissions-lost-when-copying-from-a-snapshot/</link>
		<comments>http://blog.davidwarburton.net/2010/03/01/ntfs-permissions-lost-when-copying-from-a-snapshot/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 10:04:24 +0000</pubDate>
		<dc:creator>DavidWarburton</dc:creator>
				<category><![CDATA[Netapp]]></category>
		<category><![CDATA[OnTAP 7.2.6]]></category>
		<category><![CDATA[Windows Server 2003]]></category>

		<guid isPermaLink="false">http://blog.davidwarburton.net/?p=75</guid>
		<description><![CDATA[Something I just remembered when performing a restore for a user. When copying files from a CIFS snapshot using the hidden .snapshot directory NTFS permissions are lost. Instead they are inherited from the folder you are copying to. To maintain permissions, use NDMPCOPY specifying the snapshot name in the source (first) parameter&#8230; ndmpcopy "filer1:/vol/vol_A/qtree_A/.snapshot/nightly.1/MyDocs" "filer1:/vol/vol_A/qtree_A/MyDocs" [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.davidwarburton.net&#038;blog=11246690&#038;post=75&#038;subd=davidwarburton&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Something I just remembered when performing a restore for a user.</p>
<p>When copying files from a CIFS snapshot using the hidden .snapshot directory NTFS permissions are lost. Instead they are inherited from the folder you are copying to.</p>
<p>To maintain permissions, use NDMPCOPY specifying the snapshot name in the source (first) parameter&#8230;</p>
<pre>ndmpcopy "filer1:/vol/vol_A/qtree_A/.snapshot/nightly.1/MyDocs" "filer1:/vol/vol_A/qtree_A/MyDocs"</pre>
<p>You can enclose the path in quotes if the path has spaces in.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/davidwarburton.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/davidwarburton.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/davidwarburton.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/davidwarburton.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/davidwarburton.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/davidwarburton.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/davidwarburton.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/davidwarburton.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/davidwarburton.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/davidwarburton.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/davidwarburton.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/davidwarburton.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/davidwarburton.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/davidwarburton.wordpress.com/75/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.davidwarburton.net&#038;blog=11246690&#038;post=75&#038;subd=davidwarburton&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.davidwarburton.net/2010/03/01/ntfs-permissions-lost-when-copying-from-a-snapshot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3a54ad2551bd756d17e5f75aab3c2acd?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">DavidWarburton</media:title>
		</media:content>
	</item>
		<item>
		<title>Netapp Rapid Cloning Utility v3.0</title>
		<link>http://blog.davidwarburton.net/2010/02/26/netapp-rapid-cloning-utility-v3-0/</link>
		<comments>http://blog.davidwarburton.net/2010/02/26/netapp-rapid-cloning-utility-v3-0/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 16:02:01 +0000</pubDate>
		<dc:creator>DavidWarburton</dc:creator>
				<category><![CDATA[ESX]]></category>
		<category><![CDATA[ESXi]]></category>
		<category><![CDATA[Netapp]]></category>
		<category><![CDATA[Storage / Backups]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[vSphere]]></category>

		<guid isPermaLink="false">http://blog.davidwarburton.net/?p=71</guid>
		<description><![CDATA[Netapp have released their new version of their Rapid Cloning Utility &#8211; a vCenter plugin which allows you to provision and new datastores and clone hosts (including VMware View 4 VDI&#8217;s) with ease right inside of the Virtual Infrastructure Client. vCenter 4 is needed but it is compatible with ESX 3.5 and 4. The great [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.davidwarburton.net&#038;blog=11246690&#038;post=71&#038;subd=davidwarburton&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Netapp have released their new version of their Rapid Cloning Utility &#8211; a vCenter plugin which allows you to provision and new datastores and clone hosts (including VMware View 4 VDI&#8217;s) with ease right inside of the Virtual Infrastructure Client. vCenter 4 is needed but it is compatible with ESX 3.5 and 4.</p>
<p>The great thing is that all the storage processing is offloaded from vCenter and is performed entirely on the filers. I&#8217;ve not had a chance to play with the RCU yet but this just looks utterly awesome! Check out this preview blog post and video from Netapp:</p>
<p><a href="http://blogs.netapp.com/virtualstorageguy/2009/12/preview-rapid-cloning-utility-30-vcenter-plug-in.html" target="_blank">http://blogs.netapp.com/virtualstorageguy/2009/12/preview-rapid-cloning-utility-30-vcenter-plug-in.html</a></p>
<p>If you don&#8217;t have time to sit and read, then at least check out the video. I dare you not to be impressed!</p>
<p><span style="text-align:center; display: block;"><a href="http://blog.davidwarburton.net/2010/02/26/netapp-rapid-cloning-utility-v3-0/"><img src="http://img.youtube.com/vi/dBSC-IOw93I/2.jpg" alt="" /></a></span><br />
Do any other storage vendors have similar tools?</p>
<address>Source: <a href="http://www.ntapgeek.com/2010/02/netapp-updates-rcu-for-vmware-vsphere-4.html" target="_blank">http://www.ntapgeek.com/2010/02/netapp-updates-rcu-for-vmware-vsphere-4.html</a></address>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/davidwarburton.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/davidwarburton.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/davidwarburton.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/davidwarburton.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/davidwarburton.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/davidwarburton.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/davidwarburton.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/davidwarburton.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/davidwarburton.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/davidwarburton.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/davidwarburton.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/davidwarburton.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/davidwarburton.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/davidwarburton.wordpress.com/71/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.davidwarburton.net&#038;blog=11246690&#038;post=71&#038;subd=davidwarburton&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.davidwarburton.net/2010/02/26/netapp-rapid-cloning-utility-v3-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3a54ad2551bd756d17e5f75aab3c2acd?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">DavidWarburton</media:title>
		</media:content>
	</item>
		<item>
		<title>Scripting Netapp filers</title>
		<link>http://blog.davidwarburton.net/2010/02/26/scripting-netapp-filers/</link>
		<comments>http://blog.davidwarburton.net/2010/02/26/scripting-netapp-filers/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 14:05:50 +0000</pubDate>
		<dc:creator>DavidWarburton</dc:creator>
				<category><![CDATA[Netapp]]></category>
		<category><![CDATA[Powershell]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Storage / Backups]]></category>

		<guid isPermaLink="false">http://blog.davidwarburton.net/?p=66</guid>
		<description><![CDATA[Scripting the Netapp filers can be accomplished by using either RSH or SSH. Both of these options must be enabled on the filer(s) in question using. In either case scripts are not processed on the filers themselves. They are scheduled and run on Windows/Linux systems using their native languages (e.g. Vbscript or Powershell). These scripts [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.davidwarburton.net&#038;blog=11246690&#038;post=66&#038;subd=davidwarburton&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Scripting the Netapp filers can be accomplished by using either RSH or SSH. Both of these options must be enabled on the filer(s) in question using.</p>
<p>In either case scripts are not processed on the filers themselves. They are scheduled and run on Windows/Linux systems using their native languages (e.g. Vbscript or Powershell). These scripts simply call native OnTAP commands against a filer which then returns data in the form of text. This is important to note as although Powershell is a useful language to use OnTAP will not return native PS objects which means you are limited to text/string based manipulation.</p>
<h3><strong>RSH</strong></h3>
<p>This method is the least secure but is the quickest and easiest to set up. Users need not necessarily be filer administrators. Although there is some degree of security in the sense that access is restricted to a set user account and accessible only via a set IP address, data is not encrypted.</p>
<p>RSH is not natively supported in Windows 2008 [from the command line] as it is in Windows 2003.</p>
<p>To enable RSH on the filer use the following command:</p>
<pre>options rsh.enable on</pre>
<p>You must also specify user accounts and IP addresses via the FilerView web interface.</p>
<h3>SSH</h3>
<p>Windows 2008 does not natively support SSH either so this is accomplished using <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html" target="_blank">plink</a>.</p>
<p>To enable SSH on the filer use the following commands:</p>
<pre style="padding-left:30px;">secureadmin setup
secureadmin enable ssh
</pre>
<p>Read more after the break&#8230;</p>
<h4><span id="more-66"></span>Configuring SSH</h4>
<ol>
<li>First create a local user      account on the filer using the following command:
<pre> useradmin user add svc-ssh -g Administrators</pre>
<ol type="a">
<li>the passwords are kept in the Password spreadsheet</li>
<li>The user must be a member of       Administrators to be granted the Login_ssh permission on the filer</li>
</ol>
</li>
<li>Using Powershell (whilst      running with your Admin Account) change directory to the hidden share on      the filer:
<pre> cd \\filer\c$\etc\sshd\</pre>
</li>
<li>Create a folder with the same      name as your account created in step 1 and then another folder to hold the      SSH keys:
<pre> md svc-ssh
 md svc-ssh\.ssh</pre>
</li>
<li>On the script server lunch      PUTTYGEN.EXE and under the &#8220;Key&#8221; menu change the type to      &#8220;SSH-2 DSA key&#8221;. Leave everything else on its default      setting.</li>
<li>Click on the <strong>Generate </strong>button      and follow the prompt</li>
<li>Enter the same password from      step 1 in the &#8220;Key passphrase&#8221; and &#8220;Confirm      passphrase&#8221; areas (they do not HAVE to be the same as step 1 but are      being kept so for simplicity)</li>
<li>When complete, click on Save      public key. Save it to the PuTTY folder with the name:<br />
<strong>id_dsa.pub</strong></li>
<li>Save the private key to the      same place with a similar name:<br />
i<strong>d_dsa.ppk</strong></li>
<li>Copy the contents of the      &#8220;Public key for pasting into OpenSSH authorised_key file&#8221; area      and paste it in to a new text document. You should use Wordpad to do this as Notepad does not      handle the line breaks properly. Save this document as authorized_keys.</li>
<li>You are now finished. You can test connection using PuTTY by selecting your private key. The first time you connect you will be prompted to accept the hosts key. You will still be prompted for a username but you should not need to enter a password as this is what the SSH keys are for.</li>
<p>For scripting purposes we use plink.exe to issue a command. For example:</p>
<pre>.\plink.exe svc-ssh@filer -i "id_dsa.ppk" df -s
</pre>
</ol>
<h4>Scripting using plink</h4>
<p>The basic use of plink.exe is as follows:</p>
<pre>.\plink.exe svc-ssh@filer -i "id_dsa.ppk" df -s</pre>
<p>Two methods can be used to script the filers depending on what you&#8217;re trying to achieve:</p>
<div>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>Reporting</td>
<td>Grabbing the   contents of a single command and piping it to a Powershell variable. This   allows us to manipulate the string (or lines of strings) that are returned.   Objects are not returned so true Powershell scripting (i.e. Object   Orientated) can not be done but PS gives us some very useful string   maniplation functions.</td>
</tr>
<tr>
<td>Maintenance</td>
<td>Issuing multiple   commands to the filer to perform repetitive/scheduled actions. For example,   deleting, renaming and taking new snapshots.</td>
</tr>
</tbody>
</table>
</div>
<p>NOTE: when calling plink.exe in Powershell the full or abbreviated path must be specified. So use either a full path, for example, D:\Utils\PuTTY\plink.exe or just .\plink.exe</p>
<h3>Reporting</h3>
<p>From a Powershell command prompt simply pipe the output of an SSH command in to a variable for later manipulation:</p>
<p>$output = .\plink.exe svc-ssh@filer -i &#8220;id_dsa.ppk&#8221; df -s</p>
<h3>Maintenance</h3>
<p>If multiple command need to be issued &#8211; for example, you need to delete a snapshot, rename the previous 5 snapshots, and then take a new snapshot &#8211; you should issue them all via the one SSH connection.</p>
<p>Commands can be concatenated using a semi-colon. Just be sure to enclose everything in quotes. For example:</p>
<pre> .\plink.exe svc-ssh@filer -i "id_dsa.ppk" "snap delete Vol_A hourly.6; snap rename Vol_A hourly.5 hourly.4; snap rename Vol_A hourly.4 hourly.3; snap rename Vol_A hourly.3 hourly.2; snap rename Vol_A hourly.2 hourly.1; snap create Vol_A hourly.0"

</pre>
<p>Well that&#8217;s it. It&#8217;s a pretty brief post &#8211; if you have any questions please feel free to post them in the comments&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/davidwarburton.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/davidwarburton.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/davidwarburton.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/davidwarburton.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/davidwarburton.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/davidwarburton.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/davidwarburton.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/davidwarburton.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/davidwarburton.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/davidwarburton.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/davidwarburton.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/davidwarburton.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/davidwarburton.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/davidwarburton.wordpress.com/66/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.davidwarburton.net&#038;blog=11246690&#038;post=66&#038;subd=davidwarburton&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.davidwarburton.net/2010/02/26/scripting-netapp-filers/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3a54ad2551bd756d17e5f75aab3c2acd?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">DavidWarburton</media:title>
		</media:content>
	</item>
	</channel>
</rss>
