<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3833586449746557798</id><updated>2026-02-08T09:44:01.843-05:00</updated><category term="netapp"/><category term="nas"/><category term="san"/><category term="CIFS"/><category term="emc"/><category term="cluster-mode"/><category term="NFS"/><category term="celerra"/><category term="migration"/><category term="vmax"/><category term="perl"/><category term="LIF"/><category term="scripting"/><category term="wafl"/><category term="aggr"/><category term="clariion"/><category term="dataontap"/><category term="disaster recovery"/><category term="ontap"/><category term="recoverpoint"/><category term="snap"/><category term="snapmirror"/><category term="storage"/><category term="switch"/><category term="symcli"/><category term="unix"/><category term="vnx"/><category term="windows"/><category term="zoning"/><category term="7-mode"/><category term="ALUA"/><category term="FAST"/><category term="FAST policy"/><category term="HBA"/><category term="MultiProtocol"/><category term="RPA"/><category term="allocation"/><category term="boxmgmt"/><category term="brocade"/><category term="cisco"/><category term="cli"/><category term="constructs"/><category term="dmx"/><category term="enginuity"/><category term="fiber channel"/><category term="fiberchannel"/><category term="iscsi"/><category term="lun"/><category term="m-host"/><category term="n-blade"/><category term="namespace"/><category term="nas_volume"/><category term="naviseccli"/><category term="ntfs"/><category term="performance"/><category term="programs"/><category term="raidgroup"/><category term="rdb"/><category term="recoverpoint applicance"/><category term="replication"/><category term="security style"/><category term="snippet"/><category term="snippets"/><category term="storage group"/><category term="subroutines"/><category term="symaudit"/><category term="symfast"/><category term="symmetrix"/><category term="thin pools"/><category term="vdm"/><category term="vldb"/><category term="vol"/><category term="volume"/><category term="vsan"/><category term="vserver"/><category term=".pl"/><category term="/etc/usermap.cfg"/><category term="/usr/bin/perl"/><category term="/vol/root"/><category term="/vol/vol0"/><category term="3240"/><category term="6280"/><category term="ASUP"/><category term="Active/Active"/><category term="Asymmetric Logical Unit Access"/><category term="Asynchronous"/><category term="BCOM"/><category term="CAS"/><category term="CG&#39;s"/><category term="CTA"/><category term="DACL"/><category term="DMP"/><category term="Defined Function"/><category term="FAST DP"/><category term="FAST VP"/><category term="FMA"/><category term="FTP"/><category term="HA pair"/><category term="HPC"/><category term="IPG"/><category term="Integers"/><category term="LIF roles"/><category term="MPFS"/><category term="MSCS"/><category term="NDO"/><category term="NDU"/><category term="NFSv4"/><category term="NFSv4.1"/><category term="NVRAM"/><category term="ONTAP 8.1"/><category term="PEA"/><category term="Passive Always Ready"/><category term="Passive Not Ready"/><category term="Perl Programming"/><category term="RDF"/><category term="SAN switch"/><category term="SID&#39;s"/><category term="SMB 1.0"/><category term="SMB 2.0"/><category term="SMB 2.1"/><category term="SRDF"/><category term="SRDF/A"/><category term="SRDF/S"/><category term="String Operators"/><category term="Symmetrix Remote Data Facility"/><category term="Synchronous"/><category term="V2"/><category term="VMAX allocation"/><category term="WAFL credential cache"/><category term="acl"/><category term="adaptive copy"/><category term="admin"/><category term="advanced"/><category term="aggregate"/><category term="aggregates"/><category term="anonynous"/><category term="archive"/><category term="array"/><category term="asymmetric"/><category term="automated tiering"/><category term="automation"/><category term="bandwidth"/><category term="baseline transfer"/><category term="binding"/><category term="black box"/><category term="block migration"/><category term="cabling"/><category term="cdp"/><category term="celerra replicator"/><category term="celerra to vnx migration"/><category term="celerra_fba"/><category term="celerracallback"/><category term="centera"/><category term="centera pool creation"/><category term="centera profile"/><category term="centera viewer"/><category term="cf disable"/><category term="cf enable"/><category term="cfgenable"/><category term="cfgsave"/><category term="chmod"/><category term="chomp"/><category term="cifs server"/><category term="cisco fiberchannel switch"/><category term="cisco san"/><category term="clr"/><category term="cluster"/><category term="cluster create"/><category term="cluster join"/><category term="cluster ports"/><category term="cluster services"/><category term="clustering"/><category term="commands"/><category term="comparison"/><category term="configuration file"/><category term="connection"/><category term="consistency groups"/><category term="content addressed storage"/><category term="control array"/><category term="cpan"/><category term="crr"/><category term="csm"/><category term="d-blade"/><category term="dart"/><category term="data"/><category term="data center"/><category term="data device"/><category term="data mover"/><category term="data movers"/><category term="data ontap"/><category term="data ports"/><category term="datadev"/><category term="datamotion"/><category term="datamover"/><category term="dell"/><category term="detect_bottlenecks"/><category term="diag"/><category term="directories"/><category term="disk groups"/><category term="disks"/><category term="disruptive"/><category term="donor_update"/><category term="emcopy"/><category term="emcopy.exe"/><category term="emulex"/><category term="engineering"/><category term="explicit"/><category term="export"/><category term="exports"/><category term="fabric"/><category term="failover modes"/><category term="failover policies"/><category term="fas filers"/><category term="fast audits"/><category term="fc"/><category term="fc switch"/><category term="fcp"/><category term="file"/><category term="file-based"/><category term="filemanagement"/><category term="filer"/><category term="filers"/><category term="flags"/><category term="flare"/><category term="flexclone"/><category term="flexible volume"/><category term="flogi"/><category term="fmbackup"/><category term="foreach"/><category term="fpolicycallback"/><category term="fqdn"/><category term="fractional reserve"/><category term="fractional_reseve"/><category term="fully automated"/><category term="functions"/><category term="gid"/><category term="give back"/><category term="global namespace"/><category term="group mapping"/><category term="group sets"/><category term="groups"/><category term="gui"/><category term="halt filers"/><category term="hardware"/><category term="hash"/><category term="hashing"/><category term="hashtable"/><category term="hdd"/><category term="headswap"/><category term="hello world"/><category term="hitachi"/><category term="host"/><category term="hotpull"/><category term="hp"/><category term="ifgrp"/><category term="implementation"/><category term="implicit"/><category term="initiator"/><category term="initiator group"/><category term="initiators"/><category term="intercconnect"/><category term="intercluster ports"/><category term="interpreter"/><category term="introduction"/><category term="ip"/><category term="journal volume"/><category term="journal volume sizing"/><category term="jverify"/><category term="lab"/><category term="leases"/><category term="leasing"/><category term="linear"/><category term="loaded"/><category term="local variables"/><category term="loops"/><category term="lun binding"/><category term="maintenance"/><category term="management ports"/><category term="map"/><category term="mapped"/><category term="mask"/><category term="masking view"/><category term="meta device"/><category term="meta lun"/><category term="mgwd"/><category term="microsoft"/><category term="migration User account"/><category term="mirror"/><category term="mixed mode"/><category term="mixedmode"/><category term="modifiers"/><category term="modules"/><category term="mount point"/><category term="mount points"/><category term="mounted"/><category term="multipath"/><category term="name service"/><category term="nas/sbin"/><category term="nas_migration"/><category term="nas_replicate"/><category term="nas_replicate –switchover"/><category term="navicli"/><category term="navisphere"/><category term="ndmp"/><category term="network drive"/><category term="nodeshell"/><category term="nsswitch.conf"/><category term="ntp"/><category term="object"/><category term="online migration"/><category term="open replicator"/><category term="operators"/><category term="opplock"/><category term="pNFS"/><category term="parameters"/><category term="pattern"/><category term="pea file"/><category term="permissions"/><category term="pl"/><category term="policy association"/><category term="pop"/><category term="port group"/><category term="power cycle"/><category term="power down"/><category term="power up"/><category term="powerpath"/><category term="practicals"/><category term="printing array"/><category term="program"/><category term="protocols"/><category term="qlogic"/><category term="qtree"/><category term="raid_dp"/><category term="rainfinity"/><category term="reboot"/><category term="reboot filer"/><category term="recover point performance"/><category term="recoverpoint cli"/><category term="recoverpoint log collection"/><category term="recoverpoint nodes"/><category term="recoverpoint statistics"/><category term="remote array"/><category term="replicated database"/><category term="restore"/><category term="returning values"/><category term="rffm"/><category term="rfuprade"/><category term="rlm"/><category term="robocopy"/><category term="root volume"/><category term="rootvolume"/><category term="rpo"/><category term="rto"/><category term="scalability"/><category term="scalar"/><category term="scale-out"/><category term="script"/><category term="scsi-blade"/><category term="server_devconfig"/><category term="server_ftp"/><category term="server_setup"/><category term="set-up"/><category term="share"/><category term="shares"/><category term="sis"/><category term="slustershell"/><category term="snapshot"/><category term="snapvault"/><category term="sort"/><category term="spcollect"/><category term="spcollects"/><category term="spin network protocol"/><category term="spinnp"/><category term="splitter"/><category term="stats"/><category term="storage provisioning"/><category term="storage tiering"/><category term="strings"/><category term="sub"/><category term="switchover"/><category term="switchshow"/><category term="symaccess"/><category term="symcfg"/><category term="symconfigue"/><category term="symdev"/><category term="symmetric"/><category term="symrcopy"/><category term="symsan"/><category term="systemshell"/><category term="takeover"/><category term="target"/><category term="tdev"/><category term="tftp"/><category term="thin device"/><category term="throttle"/><category term="tiering"/><category term="traditional"/><category term="traditional provisioning"/><category term="unified"/><category term="unix group"/><category term="upgrade"/><category term="user mapping"/><category term="usermap.cfg"/><category term="usermapping"/><category term="vault"/><category term="vifmgr"/><category term="virtual data movers"/><category term="virtual provisioning"/><category term="wan"/><category term="wcc"/><category term="while"/><category term="windows network server"/><category term="winscp"/><category term="wwn"/><category term="zone"/><category term="zonecreate"/><category term="zoneset"/><title type='text'>hippodata</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://hippodata.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default'/><link rel='alternate' type='text/html' href='http://hippodata.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default?start-index=26&amp;max-results=25'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>50</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3833586449746557798.post-7251687162834022433</id><published>2013-05-25T23:42:00.000-04:00</published><updated>2013-05-25T23:44:33.126-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bandwidth"/><category scheme="http://www.blogger.com/atom/ns#" term="celerra"/><category scheme="http://www.blogger.com/atom/ns#" term="CIFS"/><category scheme="http://www.blogger.com/atom/ns#" term="emc"/><category scheme="http://www.blogger.com/atom/ns#" term="IPG"/><category scheme="http://www.blogger.com/atom/ns#" term="migration"/><category scheme="http://www.blogger.com/atom/ns#" term="mirror"/><category scheme="http://www.blogger.com/atom/ns#" term="nas"/><category scheme="http://www.blogger.com/atom/ns#" term="nas_migration"/><category scheme="http://www.blogger.com/atom/ns#" term="netapp"/><category scheme="http://www.blogger.com/atom/ns#" term="robocopy"/><category scheme="http://www.blogger.com/atom/ns#" term="shares"/><category scheme="http://www.blogger.com/atom/ns#" term="throttle"/><category scheme="http://www.blogger.com/atom/ns#" term="vnx"/><category scheme="http://www.blogger.com/atom/ns#" term="windows"/><title type='text'>NAS migration using Robocopy</title><content type='html'>&lt;b&gt;Robocopy&lt;/b&gt; - A command line utility to copy files from one location to other&lt;br /&gt;
&lt;b&gt;Operating System -&amp;nbsp;&lt;/b&gt;&amp;nbsp;Windows (installed in 2008), older versions can download from &lt;a href=&quot;http://www.microsoft.com/en-us/download/details.aspx?id=17657&quot;&gt;here&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;Command&lt;/b&gt; - &#39;robocopy&#39;&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Highlights&lt;/b&gt;:&lt;br /&gt;
========&lt;br /&gt;
- Multithreaded copying&lt;br /&gt;
- Tolerates network interruptions and resume copying&lt;br /&gt;
- Skip NTFS junction points which can cause copying failures because of infinite loops&lt;br /&gt;
- Copy file data and attributes correctly, preserve original timestamps, as well as NTFS ACLs, owner information, and audit information using command line switches&lt;br /&gt;
- A &quot;mirror&quot; mode, which keeps trees in sync by optionally deleting files out of the destination that are no longer present in the source&lt;br /&gt;
- Skip files that already appear in the destination folder with identical size and timestamp&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Limitations&lt;/b&gt;:&lt;br /&gt;
=========&lt;br /&gt;
- Robocopy will not copy open files&lt;br /&gt;
- Systems prior to Windows Vista do not mirror properly, they ignore changed security attributes of previously mirrored files&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Syntax&lt;/b&gt;:&lt;br /&gt;
======&lt;br /&gt;
robocopy &amp;lt;Source&amp;gt; &amp;lt;Destination&amp;gt; [&amp;lt;File&amp;gt;[ ...]] [&amp;lt;Options&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
For more switches:&lt;br /&gt;
&lt;br /&gt;
robocopy /?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Throttle Bandwidth&lt;/b&gt; -&amp;nbsp;Switch is /IPG (Inter Packet Gap)&lt;br /&gt;
&lt;br /&gt;
Formula - Delay (D, in milliseconds) required to simulate a desired bandwidth (BD, in kilobits per second), over a network link with an available bandwidth of BA kbps:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjc4U_TvNdjRGn0aP5TfRKnUcX1q8vjzfhf9AKShfG92d6rSNv7XEZ26pfDo4L8Ynwi0p4uhpZt9CBqrAhxsEx5PMDDXdUnNIvDrM_keoERpqNuN7zu30pmY2HVI70Ht7TwICakN4adLs/s1600/bd.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;73&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjc4U_TvNdjRGn0aP5TfRKnUcX1q8vjzfhf9AKShfG92d6rSNv7XEZ26pfDo4L8Ynwi0p4uhpZt9CBqrAhxsEx5PMDDXdUnNIvDrM_keoERpqNuN7zu30pmY2HVI70Ht7TwICakN4adLs/s320/bd.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
For example, on a 4Mbps line, you could throttle down a copy to use a maximum of 2Mbps by using the /IPG:125 switch.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Example&lt;/b&gt;:&lt;br /&gt;
=======&lt;br /&gt;
To copy all files (*.*) from Source 10.10.10.10 to destination 20.20.20.20&lt;br /&gt;
&lt;br /&gt;
robocopy \\10.10.10.10\source\ \\20.20.20.20\destination\ *.* /mir&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Note&lt;/b&gt;: If you mix up you source and destination all of your data will be deleted instead of copied.&lt;br /&gt;
&lt;br /&gt;
To copy Only New Files and write to a log file&lt;br /&gt;
&lt;br /&gt;
If you want to copy in stages and don&#39;t want to copy all the files over again to copy any new files that were added since the first copy you can use the &quot;/XO&quot; flag which excludes older files. This means if the destination file exists and is the same date or newer than the source file robocopy will skip that file.&lt;br /&gt;
&lt;br /&gt;
robocopy x:\ y:\ *.* /e /w:0 /r:0 /secfix /xo /log+:c:\NAS_migration.log&lt;br /&gt;
&lt;br /&gt;
/e - Copies subdirectories&lt;br /&gt;
/w - Specifies the wait time between retries, in seconds, default value is 30&lt;br /&gt;
/r - Specifies the number of retries on failed copies, default value is 1,000,000&lt;br /&gt;
/secfix - Fixes file security on all files, even skipped ones&lt;br /&gt;
/xo - Excludes older files&lt;br /&gt;
/log+ - Writes the status output to the log file&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Scenario&lt;/b&gt;: Migrate NAS share by scheduling to Run Incremental Copies&lt;br /&gt;
&lt;br /&gt;
Scheduling as below will keep the new NAS share up-to-date until the final cut-over is scheduled.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:1&lt;/b&gt; Create a folder on the server&lt;br /&gt;
&lt;br /&gt;
Run - cmd&lt;br /&gt;
&lt;br /&gt;
mkdir c:\nas_migration&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:2&lt;/b&gt; Create a bat file with below command&lt;br /&gt;
&lt;br /&gt;
robocopy x:\ y:\ *.* /e /w:0 /r:0 /secfix /xo /log+:c:\NAS_migration.log&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:3&lt;/b&gt; Add this to scheduled tasks&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:4&lt;/b&gt; Plan a cut-over window&lt;br /&gt;
&lt;br /&gt;
During cut-over you may make the source &#39;read-only&#39; and do the final incremental update to make sure the new share is mirror of source and let the system admins work to map the new share&lt;br /&gt;
&lt;br /&gt;
Done!</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/7251687162834022433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/7251687162834022433'/><link rel='alternate' type='text/html' href='http://hippodata.blogspot.com/2013/05/cifs-migration-using-robocopy.html' title='NAS migration using Robocopy'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjc4U_TvNdjRGn0aP5TfRKnUcX1q8vjzfhf9AKShfG92d6rSNv7XEZ26pfDo4L8Ynwi0p4uhpZt9CBqrAhxsEx5PMDDXdUnNIvDrM_keoERpqNuN7zu30pmY2HVI70Ht7TwICakN4adLs/s72-c/bd.jpg" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-3833586449746557798.post-4611190659138475094</id><published>2013-05-24T23:28:00.001-04:00</published><updated>2013-05-24T23:30:35.498-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="anonynous"/><category scheme="http://www.blogger.com/atom/ns#" term="FTP"/><category scheme="http://www.blogger.com/atom/ns#" term="nas/sbin"/><category scheme="http://www.blogger.com/atom/ns#" term="server_ftp"/><category scheme="http://www.blogger.com/atom/ns#" term="vnx"/><title type='text'>Configure anonymous FTP access on VNX</title><content type='html'>Step:1 Disable FTP&lt;br /&gt;
&lt;br /&gt;
server_ftp server_2 -service -stop&lt;br /&gt;
&lt;br /&gt;
Step:2 Log in to Control Station as root&lt;br /&gt;
&lt;br /&gt;
Step:3 Change to /nas/sbin direcotry&lt;br /&gt;
&lt;br /&gt;
cd /nas/sbin&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
Step:4 Add ftp user&lt;br /&gt;
&lt;br /&gt;
/nas/sbin/server_user server_2 -add ftp&lt;br /&gt;
&lt;br /&gt;
At prompt:&lt;br /&gt;
a. Any UID and GID, except -2&lt;br /&gt;
b. Home directory specified and available on Data Mover&lt;br /&gt;
&lt;br /&gt;
Step:5 Disable ftp user&#39;s password&lt;br /&gt;
&lt;br /&gt;
/nas/sbin/server_user server_2 -passwd -disable ftp&lt;br /&gt;
&lt;br /&gt;
Step:6 Start FTP&lt;br /&gt;
&lt;br /&gt;
server_ftp server_2 -service -start&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/4611190659138475094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/4611190659138475094'/><link rel='alternate' type='text/html' href='http://hippodata.blogspot.com/2013/05/configure-anonymous-ftp-access-on-vnx.html' title='Configure anonymous FTP access on VNX'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3833586449746557798.post-5426853516911963304</id><published>2013-05-24T23:03:00.001-04:00</published><updated>2013-05-24T23:14:17.327-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="celerra replicator"/><category scheme="http://www.blogger.com/atom/ns#" term="celerra to vnx migration"/><category scheme="http://www.blogger.com/atom/ns#" term="CIFS"/><category scheme="http://www.blogger.com/atom/ns#" term="file"/><category scheme="http://www.blogger.com/atom/ns#" term="intercconnect"/><category scheme="http://www.blogger.com/atom/ns#" term="migration"/><category scheme="http://www.blogger.com/atom/ns#" term="nas"/><category scheme="http://www.blogger.com/atom/ns#" term="nas_replicate"/><category scheme="http://www.blogger.com/atom/ns#" term="nas_replicate –switchover"/><category scheme="http://www.blogger.com/atom/ns#" term="switchover"/><category scheme="http://www.blogger.com/atom/ns#" term="V2"/><category scheme="http://www.blogger.com/atom/ns#" term="vdm"/><title type='text'>Celerra to VNX CIFS migration</title><content type='html'>&lt;br /&gt;
&lt;b&gt;Scenario&lt;/b&gt;: Migrate CIFS shares on Celerra to VNX&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Tool&lt;/b&gt;: After experimenting with 4 different tools I recommend using Celerra Replicator as the best tool for this requirement&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;License&lt;/b&gt;: Get the free 180 day trial license for celerra replicator V2&lt;br /&gt;
&lt;br /&gt;
Click &lt;a href=&quot;http://hippodata.blogspot.com/2013/05/virtual-data-mover-vdm.html&quot;&gt;here&lt;/a&gt; to learn about VDM&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAqNmE7JXwozcp3HVypo7pzup9tLSqoGmTl9_JnZx67EFOYcNWoX1bYK69kdV7fjgg_AvTl9RDonvkj8oSXOpvZmOsIZ4ywo2w4p9HPRTmkVz-fHJ6QJXXjv8DWP8VhK3ZIgTxkVRtrhM/s1600/sc.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;142&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAqNmE7JXwozcp3HVypo7pzup9tLSqoGmTl9_JnZx67EFOYcNWoX1bYK69kdV7fjgg_AvTl9RDonvkj8oSXOpvZmOsIZ4ywo2w4p9HPRTmkVz-fHJ6QJXXjv8DWP8VhK3ZIgTxkVRtrhM/s640/sc.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:1&lt;/b&gt; Install temporary license&lt;br /&gt;
&lt;br /&gt;
nas_license -create replicatorv2&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:2&lt;/b&gt; Setup communication&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Source&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
nas_cel -create remote_cel -ip 20.20.20.21 -passphrase nasadmin&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;IP&lt;/b&gt;: IP address of remote control station in slot 0&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Destination&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
nas_cel -create source_cel -ip 10.10.10.11 -passphrase nasadmin&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;IP&lt;/b&gt;: IP address of source control station in slot 0&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Verify&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
nas_cel -list&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:3&lt;/b&gt; Verify if all interfaces are able to communicate&lt;br /&gt;
&lt;br /&gt;
server_ping server_2 -interface source_cel1 20.20.20.21&lt;br /&gt;
&lt;br /&gt;
Repeat on all interfaces&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:4&lt;/b&gt; Setup interconnect between source server2 and destination server3&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Source&lt;/b&gt;: &lt;br /&gt;
&lt;br /&gt;
nas_cel -interconnect -create soure_cel1_s2s3 -source_server server_2&lt;br /&gt;
-destination_system remote_cel -destination_server server_3 -source_interfaces&lt;br /&gt;
ip=10.10.10.11,ip=10.10.10.12,ip=10.10.10.13 -destination_interfaces&lt;br /&gt;
ip=20.20.20.21,ip=20.20.20.22, ip=20.20.20.23 -bandwidth&lt;br /&gt;
MoTuWe08:00-13:00/8000&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Note&lt;/b&gt;: If no bandwidth schedule is specified, all available bandwidth is used at all times.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Destination&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
nas_cel -interconnect -create remote_cel1_s3s2 -source_server server_3&lt;br /&gt;
-destination_system source_cel -destination_server server_2 -source_interfaces&lt;br /&gt;
ip=20.20.20.21,ip=20.20.20.22, ip=20.20.20.23 -destination_interfaces&lt;br /&gt;
ip=10.10.10.11,ip=10.10.10.12,ip=10.10.10.13 -bandwidth MoTuWeTh08:00-17:00/3000&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Validate&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
nas_cel -interconnect -list&lt;br /&gt;
nas_cel -interconnect -validate id=30005&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:5&lt;/b&gt; Create a VDM replication session&lt;br /&gt;
&lt;br /&gt;
nas_replicate -create rep_vdm1 -source -vdm vdm1 -destination -vdm dst_vdm -interconnect soure_cel1_s2s3 -max_time_out_of_sync 10&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Note&lt;/b&gt;: If you specify a pool instead of an existing destination VDM, the pool is used to create the destination VDM automatically as read-only and uses the same name and size as the source VDM.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Verify&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
nas_replicate -list&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:6&lt;/b&gt; Replicate the file system mounted to the VDM&lt;br /&gt;
&lt;br /&gt;
nas_replicate -create vdm_v2 -source -fs src_fs_vdm -destination -pool id=3 -vdm&lt;br /&gt;
Vdm_2 -interconnect soure_cel1_s2s3&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Note&lt;/b&gt;: Use the -vdm option used to indicate that the file system will be mounted on a VDM.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Verify&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
nas_replicate -info vdm_v2&lt;br /&gt;
&lt;br /&gt;
Look for last synchronization time&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:7&lt;/b&gt; Change the source file system to &quot;read only&quot;&lt;br /&gt;
&lt;br /&gt;
Plan the cutover time to let users start using file system on new VNX; this is disruptive operation and should not perform until you are ready for brief outage associated with switchover period&lt;br /&gt;
&lt;br /&gt;
1. quiesce or shutdown application that is using this file system&lt;br /&gt;
2. unmap the file system, change the properties to &quot;read only&quot; (better do it in unisphere)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:8&lt;/b&gt; Create server interface on VNX&lt;br /&gt;
&lt;br /&gt;
Failover from celerra to VNX by creating interface with same name as the source celerra server. If you are not sure of the name of source interface try executing the switchover from unisphere under &quot;Replcias&quot;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Source&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
nas_replicate –switchover src_fs_vdm&lt;br /&gt;
&lt;br /&gt;
After executing this command it will print a task id on the screen, please make a note of it.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Note:&lt;/b&gt; This command stops replication, mounts the source object as read-only, and marks the destination object as read-write sot that it can act as the new source object&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:9&lt;/b&gt; Check switch over status&lt;br /&gt;
&lt;br /&gt;
nas_task -info 4211&lt;br /&gt;
nas_task -info all&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:10&lt;/b&gt; Verify file systems are available by testing from hosts&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:11&lt;/b&gt; Clean up replication sessions&lt;br /&gt;
&lt;br /&gt;
nas_replicate –delete src_fs_vdm&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:12&lt;/b&gt; On VNX, back up file system data&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/5426853516911963304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/5426853516911963304'/><link rel='alternate' type='text/html' href='http://hippodata.blogspot.com/2013/05/celerra-to-vnx-cifs-migration.html' title='Celerra to VNX CIFS migration'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAqNmE7JXwozcp3HVypo7pzup9tLSqoGmTl9_JnZx67EFOYcNWoX1bYK69kdV7fjgg_AvTl9RDonvkj8oSXOpvZmOsIZ4ywo2w4p9HPRTmkVz-fHJ6QJXXjv8DWP8VhK3ZIgTxkVRtrhM/s72-c/sc.jpg" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-3833586449746557798.post-8248782771429803441</id><published>2013-05-18T21:40:00.002-04:00</published><updated>2013-05-18T21:41:16.790-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="celerra"/><category scheme="http://www.blogger.com/atom/ns#" term="CIFS"/><category scheme="http://www.blogger.com/atom/ns#" term="cli"/><category scheme="http://www.blogger.com/atom/ns#" term="commands"/><category scheme="http://www.blogger.com/atom/ns#" term="dart"/><category scheme="http://www.blogger.com/atom/ns#" term="data mover"/><category scheme="http://www.blogger.com/atom/ns#" term="nas"/><title type='text'>Useful Celerra commands</title><content type='html'>&lt;br /&gt;
&lt;b&gt;Command:1&lt;/b&gt; Create file system&lt;br /&gt;
&lt;br /&gt;
/nas/bin/nas_fs -name fs1 -type uxfs -create size=&amp;lt;initial size&amp;gt; pool=&amp;lt;from pool&amp;gt; -auto_extend yes -max_size &amp;lt;max size&amp;gt; -vp yes -option slice=y,mover=server_2&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Command:2&lt;/b&gt; Create Mount Point&lt;br /&gt;
&lt;br /&gt;
/nas/bin/server_mountpoint server_2 -create /fs1&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Command:3&lt;/b&gt; Mount File System&lt;br /&gt;
&lt;br /&gt;
/nas/bin/server_mount server_2 fs1 /fs1&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Command:4 &lt;/b&gt;Enable Unicode for CIFS Compatibility&lt;br /&gt;
&lt;br /&gt;
/nas/sbin/uc_config -on -mover server_2&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;Command:5&lt;/b&gt; Start CIFS protocol&lt;br /&gt;
&lt;br /&gt;
/nas/bin/server_setup server_2 -Protocol cifs -option start&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Command:6&lt;/b&gt; Create CIFS IP Interface&lt;br /&gt;
&lt;br /&gt;
/nas/bin/server_ifconfig server_2 -create -Device &amp;lt;network device&amp;gt; -name CIFS -protocol IP &amp;lt;cifs interface ip&amp;gt; &amp;lt;netmask&amp;gt; &amp;lt;broadcast ip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Command:7&lt;/b&gt; Start CIFS IP Interface&lt;br /&gt;
&lt;br /&gt;
/nas/bin/server_ifconfig server_2 CIFS up&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Command:8&lt;/b&gt; Add CIFS Server to serve UNC paths&lt;br /&gt;
&lt;br /&gt;
/nas/bin/server_cifs server_2 -add compname=&amp;lt;hostname&amp;gt;,domain=&amp;lt;domain name&amp;gt;,netbios=&amp;lt;hostname&amp;gt;,interface=CIFS,local_users&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Command:9&lt;/b&gt; Export CIFS shares for usage&lt;br /&gt;
&lt;br /&gt;
/nas/bin/server_export server_2 -name fs1 -option netbios=&amp;lt;hostname&amp;gt; /fs1&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Command:10&lt;/b&gt; Create Mount point for NFS&lt;br /&gt;
&lt;br /&gt;
/nas/bin/server_mountpoint server_2 -c /fs1&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Command:11&lt;/b&gt; Export NFS Share&lt;br /&gt;
&lt;br /&gt;
/nas/bin/server_export server_2 -Protocol nfs -option root=&amp;lt;ip network accessing export&amp;gt; /fs1&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Command:12&lt;/b&gt; Create replication interface -Source&lt;br /&gt;
&lt;br /&gt;
/nas/bin/server_ifconfig server_2 -create -Device &amp;lt;network device&amp;gt; -name REPL -protocol IP &amp;lt;ip of replication interface&amp;gt; &amp;lt;netmask of replication interface&amp;gt; &amp;lt;broadcast address of replication interface&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Command:13&lt;/b&gt; Start replication interface -Source&lt;br /&gt;
&lt;br /&gt;
/nas/bin/server_ifconfig server_2 REPL up&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Command:14 &lt;/b&gt;Create Link between control stations for replication communications -Source&lt;br /&gt;
&lt;br /&gt;
/nas/bin/nas_cel -create &amp;lt;name of remote control station&amp;gt; -ip &amp;lt;ip of remote control station&amp;gt; -passphrase pass1&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Command:15&lt;/b&gt; Create replication interface -Destination&lt;br /&gt;
&lt;br /&gt;
/nas/bin/server_ifconfig server_2 -create -Device &amp;lt;network device&amp;gt; -name REPL -protocol IP &amp;lt;ip of replication interface&amp;gt; &amp;lt;netmask of replication interface&amp;gt; &amp;lt;broadcast address of replication interface&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Command:16&lt;/b&gt; Start replication interface -Destination&lt;br /&gt;
&lt;br /&gt;
/nas/bin/server_ifconfig server_2 REPL up&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Command:17 &lt;/b&gt;Create Link between control stations for replication communications -Destination&lt;br /&gt;
&lt;br /&gt;
/nas/bin/nas_cel -create &amp;lt;name of remote control station&amp;gt; -ip &amp;lt;ip of remote control station&amp;gt; -passphrase pass1&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Command:18&lt;/b&gt; Create interconnect between primary and secondary control stations -Source&lt;br /&gt;
&lt;br /&gt;
/nas/bin/nas_cel -interconnect -create IC_&amp;lt;localcsname&amp;gt;_&amp;lt;remotecsname&amp;gt; -source_server server_2 -destination_system &amp;lt;remotecsname&amp;gt; -destination_server server_2 -source_interfaces ip=&amp;lt;source replication interface ip&amp;gt; -destination_interfaces ip=&amp;lt;destination replication interface ip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Command:19&lt;/b&gt; Create interconnect between secondary and primary control stations -Destination&lt;br /&gt;
&lt;br /&gt;
/nas/bin/nas_cel -interconnect -create IC_&amp;lt;localcsname&amp;gt;_&amp;lt;remotecsname&amp;gt; -source_server server_2 -destination_system &amp;lt;remotecsname&amp;gt; -destination_server server_2 -source_interfaces ip=&amp;lt;source replication interface ip&amp;gt; -destination_interfaces ip=&amp;lt;destination replication interface ip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Command:20 &lt;/b&gt;Setup replication between control stations -Source&lt;br /&gt;
&lt;br /&gt;
&quot;/nas/bin/nas_replicate -create RP_&amp;lt;localcsname&amp;gt;_&amp;lt;remotecsname&amp;gt; -source -fs fs1 -destination -fs fs1 -interconnect IC_&amp;lt;localcsname&amp;gt;_&amp;lt;remotecsname&amp;gt; -source_interface ip=&amp;lt;source replication interface ip&amp;gt; -destination_interface ip=&amp;lt;destination replication interface ip&amp;gt; -max_time_out_of_sync 1 -background -overwrite_destination&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Command:21&lt;/b&gt; Show virtual interfaces (port channels) status&lt;br /&gt;
&lt;br /&gt;
server_sysconfig server_2 -virtual -info trk0_fxg&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Command:22&lt;/b&gt; Set vlan tagging and mtu for interface&lt;br /&gt;
&lt;br /&gt;
server_ifconfig server_2 &amp;lt;interface name&amp;gt; vlan=&amp;lt;number&amp;gt; mtu=&amp;lt;mtu&amp;gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/8248782771429803441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/8248782771429803441'/><link rel='alternate' type='text/html' href='http://hippodata.blogspot.com/2013/05/useful-celerra-commands.html' title='Useful Celerra commands'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3833586449746557798.post-8013339935356147977</id><published>2013-05-18T21:21:00.000-04:00</published><updated>2013-05-18T21:21:44.616-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="celerra"/><category scheme="http://www.blogger.com/atom/ns#" term="datamover"/><category scheme="http://www.blogger.com/atom/ns#" term="emc"/><category scheme="http://www.blogger.com/atom/ns#" term="fqdn"/><category scheme="http://www.blogger.com/atom/ns#" term="initiator"/><category scheme="http://www.blogger.com/atom/ns#" term="iscsi"/><category scheme="http://www.blogger.com/atom/ns#" term="lun"/><category scheme="http://www.blogger.com/atom/ns#" term="san"/><category scheme="http://www.blogger.com/atom/ns#" term="target"/><title type='text'>Setup iSCSI storage on Celerra</title><content type='html'>&lt;br /&gt;
&lt;b&gt;Step:1&lt;/b&gt; Validate network interface on data mover&lt;br /&gt;
&lt;br /&gt;
server_ifconfig server_2 -all&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:2&lt;/b&gt; Create and mount a file system called iSCSI&lt;br /&gt;
&lt;br /&gt;
nas_fs -n iscsi -c size=100G pool=clar_r5_performance&lt;br /&gt;
&lt;br /&gt;
server_mount server_2 iscsi /iscsi&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:3&lt;/b&gt; Create the celerra iSCSI target&lt;br /&gt;
&lt;br /&gt;
server_iscsi server_2 -target -alias target -create 1000:np=172.12.32.189&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:4&lt;/b&gt; List iSCSI target&lt;br /&gt;
&lt;br /&gt;
server_iscsi server_2 -target -list&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:5&lt;/b&gt; Create 2 iSCSI LUNs&lt;br /&gt;
&lt;br /&gt;
server_iscsi server_2 -lun -number 1 -create target -size 1000 -fs iscsi&lt;br /&gt;
&lt;br /&gt;
server_iscsi server_2 -lun -number 2 -create target -size 1000 -fs iscsi&lt;br /&gt;
&lt;br /&gt;
#Size in MB&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:6&lt;/b&gt; List LUNs&lt;br /&gt;
&lt;br /&gt;
server_iscsi server_2 -lun -list&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:7&lt;/b&gt; List all LUNs on target&lt;br /&gt;
&lt;br /&gt;
server_iscsi server_2 -lun -info -all -target target&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:8&lt;/b&gt; Configure LUN mask&lt;br /&gt;
&lt;br /&gt;
server_iscsi server_2 -mask -set target -initiator &amp;lt;fqdn&amp;gt; -grant 1-2&lt;br /&gt;
&lt;br /&gt;
#Replace &amp;lt;fqdn&amp;gt; with the iscsi initiator&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:9&lt;/b&gt; Start iSCSI service&lt;br /&gt;
&lt;br /&gt;
server_iscsi server_2 -service -start&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
Done!&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/8013339935356147977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/8013339935356147977'/><link rel='alternate' type='text/html' href='http://hippodata.blogspot.com/2013/05/setup-iscsi-storage-on-celerra.html' title='Setup iSCSI storage on Celerra'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3833586449746557798.post-7784637926883715950</id><published>2013-05-18T20:53:00.000-04:00</published><updated>2013-05-18T20:53:25.033-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="celerra"/><category scheme="http://www.blogger.com/atom/ns#" term="CIFS"/><category scheme="http://www.blogger.com/atom/ns#" term="data movers"/><category scheme="http://www.blogger.com/atom/ns#" term="loaded"/><category scheme="http://www.blogger.com/atom/ns#" term="mount points"/><category scheme="http://www.blogger.com/atom/ns#" term="mounted"/><category scheme="http://www.blogger.com/atom/ns#" term="vdm"/><category scheme="http://www.blogger.com/atom/ns#" term="virtual data movers"/><category scheme="http://www.blogger.com/atom/ns#" term="vnx"/><title type='text'>Virtual Data Mover (VDM)</title><content type='html'>&lt;br /&gt;
&lt;b&gt;What is a VDM?&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;=============&lt;/b&gt;&lt;br /&gt;
-It is a feature that allows the separation of CIFS servers and their associated environment into virtual containers&lt;br /&gt;
-Enables replication of CIFS environments from a primary site to a secondary site without impacting server access&lt;br /&gt;
-Allows the movement of CIFS servers from one Data Mover to another&lt;br /&gt;
-VDMs store dynamic configuration data such as; local groups, shares, security credentials, audit logs, home dir information, kerberos&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;Benefits:&lt;/b&gt;&lt;br /&gt;
========&lt;br /&gt;
-Easier management of CIFS servers&lt;br /&gt;
-Provides server isolation and security&lt;br /&gt;
-CIFS servers within a VDM can be moved from one physical data mover to another without changing the share configurations&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Key Concepts:&lt;/b&gt;&lt;br /&gt;
=============&lt;br /&gt;
-A VDM can contain one or more CIFS servers&lt;br /&gt;
-Atleast one interface must be available for each CIFS server that is created&lt;br /&gt;
-CIFS servers in each VDM have access only to the filesystems mounted to that VDM&lt;br /&gt;
-In contrast, a physical data mover supports NFS and CIFS servers&lt;br /&gt;
-The UserMapper configuration is at the physical data mover level&lt;br /&gt;
-VDMs exist within a directory structure on a physical data mover&#39;s root file system, with VDM configuration information being stored in the root file system&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Four states of VDMs:&lt;/b&gt;&lt;br /&gt;
===================&lt;br /&gt;
Loaded: Fully functional active VDM with file system being loaded in read/write state&lt;br /&gt;
Mounted: In this state, the file system is mounted read only and CIFS servers are not active&lt;br /&gt;
PermUnloaded: The VDM file system is not mounted on the Data Mover&lt;br /&gt;
TempUnloaded: This is used to stop activity temporarily in preparation for replication&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Creating a Loaded VDM:&lt;/b&gt;&lt;br /&gt;
=====================&lt;br /&gt;
&lt;b&gt;Step:1&lt;/b&gt; Create a VDM in a loaded state with name &#39;vdm02&#39;&lt;br /&gt;
&lt;br /&gt;
nas_server -name vdm02 -type vdm -create server_2 -setstate loaded&lt;br /&gt;
&lt;br /&gt;
To create a VDM in a loaded state with root file system of default size being 128 MB&lt;br /&gt;
&lt;br /&gt;
nas_server -name vdm02 -type vdm -create server_2 -setstate loaded pool=clar_r5_performance&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:2&lt;/b&gt; Mount the above created file system&lt;br /&gt;
&lt;br /&gt;
Create mountpoint for the file system in VDM&lt;br /&gt;
&lt;br /&gt;
server_mountpoint vdm02 -create /mntvdm&lt;br /&gt;
&lt;br /&gt;
Mount the file system&lt;br /&gt;
&lt;br /&gt;
server_mount vdm02 fs01 /mntvdm&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:3&lt;/b&gt; Configure CIFS for VDM&lt;br /&gt;
&lt;br /&gt;
server_cifs vdm02 -add compname=hippodata,domain=corp.hippodata.com,interface=cge0-2&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:4&lt;/b&gt; Join the CIFS server to the domain&lt;br /&gt;
&lt;br /&gt;
server_cifs vdm02 -join compname=hippodata,domain=corp.hippodata.com,admin=administrator&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:5&lt;/b&gt; Create CIFS shares&lt;br /&gt;
&lt;br /&gt;
server_export vdm02 -protocol cifs -name vdmroot /mntvdm&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Moving a VDM:&lt;/b&gt;&lt;br /&gt;
============&lt;br /&gt;
To move a VDM from one data mover to another&lt;br /&gt;
&lt;br /&gt;
nas_server -vdm vdm02 -move server_3&lt;br /&gt;
&lt;br /&gt;
For this to happen:&lt;br /&gt;
-target data mover should have identical interface names to the source&lt;br /&gt;
-target data mover should not have CIFS servers with the same name as the source&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Remane a VDM:&lt;/b&gt;&lt;br /&gt;
=============&lt;br /&gt;
nas_server -rename vdm02 vdm01&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Deleting a VDM:&lt;/b&gt;&lt;br /&gt;
=============&lt;br /&gt;
nas_server -delete vdm01&lt;br /&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/7784637926883715950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/7784637926883715950'/><link rel='alternate' type='text/html' href='http://hippodata.blogspot.com/2013/05/virtual-data-mover-vdm.html' title='Virtual Data Mover (VDM)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3833586449746557798.post-4042378940234447239</id><published>2013-05-18T15:29:00.000-04:00</published><updated>2013-05-18T15:43:08.357-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ALUA"/><category scheme="http://www.blogger.com/atom/ns#" term="asymmetric"/><category scheme="http://www.blogger.com/atom/ns#" term="cluster ports"/><category scheme="http://www.blogger.com/atom/ns#" term="cluster-mode"/><category scheme="http://www.blogger.com/atom/ns#" term="data ports"/><category scheme="http://www.blogger.com/atom/ns#" term="failover policies"/><category scheme="http://www.blogger.com/atom/ns#" term="ifgrp"/><category scheme="http://www.blogger.com/atom/ns#" term="intercluster ports"/><category scheme="http://www.blogger.com/atom/ns#" term="LIF"/><category scheme="http://www.blogger.com/atom/ns#" term="LIF roles"/><category scheme="http://www.blogger.com/atom/ns#" term="management ports"/><category scheme="http://www.blogger.com/atom/ns#" term="multipath"/><category scheme="http://www.blogger.com/atom/ns#" term="nas"/><category scheme="http://www.blogger.com/atom/ns#" term="netapp"/><category scheme="http://www.blogger.com/atom/ns#" term="san"/><category scheme="http://www.blogger.com/atom/ns#" term="symmetric"/><title type='text'>NetApp Cluster-mode networking deep dive!</title><content type='html'>&lt;br /&gt;
While administering NetApp cluster-mode, it&#39;s very important to understand networking and related concepts for successful troubleshooting in case of network failures. In this post I will be discussing the key network concepts related to cluster-mode.&lt;br /&gt;
&lt;br /&gt;
Networking has gained special focus in cluster-mode with a goal to integrate fully qualified, high-performance switches into the sacle-out cluster and management networl&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Key concepts:&lt;/b&gt;&lt;br /&gt;
==========&lt;br /&gt;
-Each controller have multiple physical network ports depending upon the controller model&lt;br /&gt;
-Physical network ports and logical interfaces (LIFs) are two different entities&lt;br /&gt;
-SAN environments use HBA ports as data ports&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Roles:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Cluster ports:&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
==========&lt;br /&gt;
-Defaults to two ports for each node&lt;br /&gt;
-These ports are reserved strictly for the intracluster traffic&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Data ports:&lt;/b&gt;&lt;br /&gt;
========&lt;br /&gt;
-Defaults to two ports for each node&lt;br /&gt;
-These ports are used for client data access and for the cluster management LIF&lt;br /&gt;
-These can NICs or FC ports depending upon the NAS or FC SAN environments&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Node-Management ports:&lt;/b&gt;&lt;br /&gt;
===================&lt;br /&gt;
-Defaults to one port for each node&lt;br /&gt;
-These ports are used by administrators to configure the node&lt;br /&gt;
-Can be connected through SSH or a web-browser&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Intercluster ports:&lt;/b&gt;&lt;br /&gt;
=============&lt;br /&gt;
-Defaults to none for each node&lt;br /&gt;
-These are used to communicate with another cluster&lt;br /&gt;
-These can be failed over to data ports&lt;br /&gt;
-Data ONTAP cluster-mode has the ability to do intercluster (or cross-cluster) data-protection mirrors that is performed &amp;nbsp;over ports that have either the role of intercluster or data&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;To view available network ports:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
net port show&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;To view available fiber-channel ports:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
network fcp adapter show&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Interface group (ifgrp):&lt;/b&gt;&lt;br /&gt;
=================&lt;br /&gt;
-Same as a virtual interface (vif) and port trunk&lt;br /&gt;
-It combines two or more physical ports and presents them as single logical port&lt;br /&gt;
-ifgrp provides redundancy and more bandwidth&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Logical Interface (LIF):&lt;/b&gt;&lt;br /&gt;
=================&lt;br /&gt;
-IP addresses are associated with network ports; many data IP addresses can be assigned to a single network port&lt;br /&gt;
-A node can have a maximum of 128 LIFs&lt;br /&gt;
-Contains one node management LIF per node that cannot be failed over or migrated&lt;br /&gt;
-Contains one cluster management LIF per cluster that can be failed over or migrated throughout the cluster&lt;br /&gt;
-Contains two cluster LIFs per node that can be failed over or migrated within its node&lt;br /&gt;
-Contains multiple data LIFs per data port to face the client allowing NFS, CIFS, iSCSI and FCoE that can be migrated or failed over throughout the cluster&lt;br /&gt;
-FC LIFs use WWPNs&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;To view available logical interface ports:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
network interface show&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;LIF roles compatibility with port roles:&lt;/b&gt;&lt;br /&gt;
=============================&lt;br /&gt;
Data-----------------&amp;gt;Data&lt;br /&gt;
Cluster--------------&amp;gt;Cluster&lt;br /&gt;
Intercluster---------&amp;gt;Intercluster, Data&lt;br /&gt;
Node-management------&amp;gt;Node-management, Data&lt;br /&gt;
Cluster-management---&amp;gt;Node-management, Data&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;LIFs routing:&lt;/b&gt;&lt;br /&gt;
=========&lt;br /&gt;
-Configure routing groups and static routes to control LIFs in a Vserver to use network for outbound traffic&lt;br /&gt;
-A routing table contains each LIF association with one routing group to use the routes of that group&lt;br /&gt;
-Multiple LIFs can share a routing group&lt;br /&gt;
-A static route can be defined between a LIF and a specific destination IP address&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;To view the available routing-groups:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
network routing-groups show&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;To view the route information:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
network routing-groups route show&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;LIF failover&lt;/b&gt; - Automatic failover during outage or reboot&lt;br /&gt;
&lt;b&gt;LIF migrate&lt;/b&gt; - For manual failover scenario&lt;br /&gt;
&lt;b&gt;LIF revert &lt;/b&gt;- Manually or automatically sending LIF back to its home&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Note&lt;/b&gt;: LIF failover is controlled by the failover policies and failover rules&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;LIF failover policies:&lt;/b&gt;&lt;br /&gt;
==============&lt;br /&gt;
&lt;b&gt;nextavail&lt;/b&gt;: The LIF moves to the next available working port in a round-robin fashion&lt;br /&gt;
&lt;b&gt;priority&lt;/b&gt;: The LIF moves to the port or node as specified&lt;br /&gt;
&lt;b&gt;disabled&lt;/b&gt;: LIF does not failover&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;To view the LIF failover policy:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
network interface show&lt;br /&gt;
&lt;br /&gt;
-&amp;gt;look for failover policy&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;To view the summary of failover ports:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
network interface failover show&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Optimized and Nonoptiomized paths:&lt;/b&gt;&lt;br /&gt;
===========================&lt;br /&gt;
-Optimized paths are the primary or favored paths that are active between the initiator and target that have same latency level&lt;br /&gt;
-NonOptimized paths are the secondary or unfavored paths that are inactive between the initiator and target that have different latency level&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For us to provide multipath access there are two available choices:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Symmetric&lt;/b&gt;: In this all paths are favored or optimized&lt;br /&gt;
&lt;b&gt;Asymmetric&lt;/b&gt;: In this only certain paths are favored or optimized&lt;br /&gt;
&lt;br /&gt;
Choosing optimized paths can be done manually (you don&#39;t want to do it!) or automatically by using ALUA (asymmetric logical unit access)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;ALUA&lt;/b&gt;:&lt;br /&gt;
======&lt;br /&gt;
-Also known as Target Port Group Support (TPGS) in the SCSI primary commands (SPC) standard&lt;br /&gt;
-ALUA can operate in the following possible states:&lt;br /&gt;
&lt;br /&gt;
a. Active/optimized&lt;br /&gt;
b. Active/nonoptimized&lt;br /&gt;
c. Standby&lt;br /&gt;
d. Unavailable&lt;br /&gt;
&lt;br /&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/4042378940234447239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/4042378940234447239'/><link rel='alternate' type='text/html' href='http://hippodata.blogspot.com/2013/05/netapp-cluster-mode-networking-deep-dive.html' title='NetApp Cluster-mode networking deep dive!'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3833586449746557798.post-682658244269406310</id><published>2013-05-18T14:25:00.002-04:00</published><updated>2013-05-18T14:25:57.677-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="BCOM"/><category scheme="http://www.blogger.com/atom/ns#" term="cluster-mode"/><category scheme="http://www.blogger.com/atom/ns#" term="d-blade"/><category scheme="http://www.blogger.com/atom/ns#" term="m-host"/><category scheme="http://www.blogger.com/atom/ns#" term="mgwd"/><category scheme="http://www.blogger.com/atom/ns#" term="n-blade"/><category scheme="http://www.blogger.com/atom/ns#" term="nas"/><category scheme="http://www.blogger.com/atom/ns#" term="netapp"/><category scheme="http://www.blogger.com/atom/ns#" term="rdb"/><category scheme="http://www.blogger.com/atom/ns#" term="replicated database"/><category scheme="http://www.blogger.com/atom/ns#" term="san"/><category scheme="http://www.blogger.com/atom/ns#" term="vifmgr"/><category scheme="http://www.blogger.com/atom/ns#" term="vldb"/><title type='text'>Replicated database - NetApp cluster-mode</title><content type='html'>The RDB is the &#39;vol0&#39; volume which is created on every node of the cluster to manage the cluster operations. No user data is contained in it and is not available for client visibility. RDB&#39;s are made up of four units namely VLDB, Vifmgr, management and BCOM.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;Key features of RDB:&lt;/b&gt;&lt;br /&gt;
=================&lt;br /&gt;
-Cluster with &#39;n&#39; nodes will have &#39;n&#39; RDB&#39;s where in one of it will be the master and the rest are secondary&lt;br /&gt;
-RDBs are synchronized and the operations are transactional; which means the entire transactions are either committed or rolled back&lt;br /&gt;
-RDB database reads are performed locally on each node, but an RDB write is only performed to &quot;master&quot; RDB database and the changes are replicated to other databases in the cluster&lt;br /&gt;
-The master is elected by the members of the cluster management units; a secondary can become a master and viceversa when master has communication issues&lt;br /&gt;
-One node in the cluster has a special tie-breaking ability called &#39;epsilon&#39;, unlike the master that may be different for each RDB unit, epsilon is a single node that applies to all units&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;VLDB&lt;/b&gt;:&lt;br /&gt;
=====&lt;br /&gt;
-This is one of the RDB unit that runs as &#39;vldb&#39;&lt;br /&gt;
-Contains the index information of which the D-blade currently owns a volume and currently serves an aggregate&lt;br /&gt;
-The content of VLDB is cached in memory on each node for instant access by each N-blade and SCSI-blade&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Management:&lt;/b&gt;&lt;br /&gt;
==========&lt;br /&gt;
-It is the M-host, which enables management of the cluster from any node&lt;br /&gt;
-Runs as the management gateway daemon - &#39;mgwd&#39; on every node&lt;br /&gt;
-The information contained is used by the CLI and element manager&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;VifMgr&lt;/b&gt;:&lt;br /&gt;
=====&lt;br /&gt;
-Runs as &#39;vifmgr&#39;&lt;br /&gt;
-Contains LIF configuration and failover policies&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;BCOM (blocks configuration and operations manager):&lt;/b&gt;&lt;br /&gt;
=========================================&lt;br /&gt;
-Runs as &#39;bcomd&#39;, to manage the configuration of SAN data access&lt;br /&gt;
-Contains LUN maps and initiator groups&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Quorum:&lt;/b&gt;&lt;br /&gt;
=======&lt;br /&gt;
-It is a simple majority of connected, healthy nodes&lt;br /&gt;
-There will be a cluster-wide quorum and an individual unit being in or out of quorum&lt;br /&gt;
-When a unit goes out of quorum, reads from the unit can still occur, but not the writes&lt;br /&gt;
-The voting determines which node will be their master; so if a node is taken down for an extended period of time, it should be marked as ineligible so the quorum is not affected&lt;br /&gt;
&lt;br /&gt;
system node modify -node &amp;lt;node&amp;gt; -eligibility false&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/682658244269406310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/682658244269406310'/><link rel='alternate' type='text/html' href='http://hippodata.blogspot.com/2013/05/replicated-database-netapp-cluster-mode.html' title='Replicated database - NetApp cluster-mode'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3833586449746557798.post-33258984629778078</id><published>2013-05-18T13:20:00.001-04:00</published><updated>2013-05-18T13:20:57.751-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cluster-mode"/><category scheme="http://www.blogger.com/atom/ns#" term="csm"/><category scheme="http://www.blogger.com/atom/ns#" term="m-host"/><category scheme="http://www.blogger.com/atom/ns#" term="n-blade"/><category scheme="http://www.blogger.com/atom/ns#" term="nas"/><category scheme="http://www.blogger.com/atom/ns#" term="netapp"/><category scheme="http://www.blogger.com/atom/ns#" term="rdb"/><category scheme="http://www.blogger.com/atom/ns#" term="san"/><category scheme="http://www.blogger.com/atom/ns#" term="scsi-blade"/><category scheme="http://www.blogger.com/atom/ns#" term="spin network protocol"/><category scheme="http://www.blogger.com/atom/ns#" term="spinnp"/><category scheme="http://www.blogger.com/atom/ns#" term="vldb"/><category scheme="http://www.blogger.com/atom/ns#" term="wafl"/><title type='text'>Dataflow in NetApp cluster-mode</title><content type='html'>&lt;br /&gt;
To understand the dataflow in cluster-mode, one needs to understand the four major software components along with other key software components on every node in the cluster, they are as follows:&lt;br /&gt;
&lt;br /&gt;
a. N-blade, network &quot;blade&quot;&lt;br /&gt;
b. D-blade, data &quot;blade&quot;&lt;br /&gt;
c. SCSI-blase, SCSI SAN &quot;blade&quot;&lt;br /&gt;
d. M-host, Management blade&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;Other components:&lt;/b&gt;&lt;br /&gt;
==============&lt;br /&gt;
-The cluster session manager (CSM)&lt;br /&gt;
-RDB units, which is the volume location database&lt;br /&gt;
&lt;br /&gt;
All the above mentioned components are accessed only by well-defined application APIs. The N-blade and SCSI-blade translates client requests into Spin Network Protocol (SpinNP) requests. THe D-blade contains the WAFL file system that handles the SpinNP requests. The CSM is the SpinNP layer between the N-blade, the SCSI-blase and the D-blade.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Key Concepts:&lt;/b&gt;&lt;br /&gt;
============&lt;br /&gt;
&lt;b&gt;N-blade:&lt;/b&gt; The N-blade handles the networking, NFS and CIFS requests and then translates to SpinNP requests as inputs to CSM&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;SCSI-blade:&lt;/b&gt; The SCSI-blade handles the networking, FC, FCoE and iSCSI requests and then translates to SpinNP requests as inputs to CSM&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;CSM:&lt;/b&gt; CSM then acts as a communicator between N-bade or SCSI-blade SpinNP requests and input them to the D-blade over UDP/IP&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;D-blade:&lt;/b&gt; The D-blade which contains the WAFL file systems then handles the SpinNP requests and them communicate disks and tape devices using FC&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Dataflow on a local node:&lt;/b&gt;&lt;br /&gt;
===================&lt;br /&gt;
1. NAS or SAN clients sends the write requests to a data logical interface (LIF)&lt;br /&gt;
2. N-blade (NAS) or SCSI-blade (SAN) which are associated with that LIF translates the NFS or CIFS, FC, FCoE, or iSCSI request to a SpinNP request&lt;br /&gt;
3. The SpinNP requests then passed to the D-blade via CSM&lt;br /&gt;
4. D-blade then sends the data to NVRAM and to the disks&lt;br /&gt;
5. The acknowledgments then works its way back to the client&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1EK6sNz62FU-YTztrApwECa2B4dMGyStPpopSEt_w2LY41q7mYn2HTb6wIkr351xO0QLa8tvhZXB_UaXx3Wz-Lfrbe-S593_cC8wbK5u7kzWwM6_E1WWe6RDZjkHKhOdQPb5aNQq3ZZA/s1600/Untitled.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;242&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1EK6sNz62FU-YTztrApwECa2B4dMGyStPpopSEt_w2LY41q7mYn2HTb6wIkr351xO0QLa8tvhZXB_UaXx3Wz-Lfrbe-S593_cC8wbK5u7kzWwM6_E1WWe6RDZjkHKhOdQPb5aNQq3ZZA/s400/Untitled.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;Dataflow on a Remote node:&lt;/b&gt;&lt;br /&gt;
=====================&lt;br /&gt;
1. NAS or SAN clients sends the write requests to a data logical interface (LIF)&lt;br /&gt;
2. N-blade (NAS) or SCSI-blade (SAN) which are associated with that LIF translates the NFS or CIFS, FC, FCoE, or iSCSI request to a SpinNP request&lt;br /&gt;
3. The SpinNP requests then passed to the &quot;remote&quot; D-blade via CSM&lt;br /&gt;
4. D-blade then sends the data to NVRAM and to the disks&lt;br /&gt;
5. The acknowledgments then works its way back to the client&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZdM5Ru_F2H9bXXMgeWzGUmouHFkKLVDuze7v3X-ggkYxSbtL9MRJ6R4sq0b1zT8CqMdlWJf9Cg-JdOWUzs9mznObRJ83RBgYugwteAd_OPCmUP3pcNZgn_eJ5Tnsk1AW-y5-dxnocNho/s1600/Untitled1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;271&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZdM5Ru_F2H9bXXMgeWzGUmouHFkKLVDuze7v3X-ggkYxSbtL9MRJ6R4sq0b1zT8CqMdlWJf9Cg-JdOWUzs9mznObRJ83RBgYugwteAd_OPCmUP3pcNZgn_eJ5Tnsk1AW-y5-dxnocNho/s400/Untitled1.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/33258984629778078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/33258984629778078'/><link rel='alternate' type='text/html' href='http://hippodata.blogspot.com/2013/05/dataflow-in-netapp-cluster-mode.html' title='Dataflow in NetApp cluster-mode'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1EK6sNz62FU-YTztrApwECa2B4dMGyStPpopSEt_w2LY41q7mYn2HTb6wIkr351xO0QLa8tvhZXB_UaXx3Wz-Lfrbe-S593_cC8wbK5u7kzWwM6_E1WWe6RDZjkHKhOdQPb5aNQq3ZZA/s72-c/Untitled.jpg" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-3833586449746557798.post-5321434565836227684</id><published>2013-05-18T02:21:00.000-04:00</published><updated>2013-05-18T02:22:48.677-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cluster-mode"/><category scheme="http://www.blogger.com/atom/ns#" term="flexible volume"/><category scheme="http://www.blogger.com/atom/ns#" term="LIF"/><category scheme="http://www.blogger.com/atom/ns#" term="namespace"/><category scheme="http://www.blogger.com/atom/ns#" term="nas"/><category scheme="http://www.blogger.com/atom/ns#" term="netapp"/><category scheme="http://www.blogger.com/atom/ns#" term="rootvolume"/><category scheme="http://www.blogger.com/atom/ns#" term="san"/><category scheme="http://www.blogger.com/atom/ns#" term="vserver"/><title type='text'>Vserver and Flex Vol creation - NetApp Cluster-mode</title><content type='html'>&lt;br /&gt;
&lt;b&gt;Scenario&lt;/b&gt;:&lt;br /&gt;
======&lt;br /&gt;
a. Create a cluster virtual server (Vserver)&lt;br /&gt;
b. Create a flex vol&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:1&lt;/b&gt; View the available Vservers in the cluster&lt;br /&gt;
&lt;br /&gt;
vserver show&lt;br /&gt;
&lt;br /&gt;
&quot;node&quot; Vservers are the scope where vol0 volumes exist and the node management LIFs and cluster LIFs of each node. The &quot;admin&quot; Vserveris the scope in which the cluster management LIF exists&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;Step:2&lt;/b&gt; Create a Vserver with name vs2&lt;br /&gt;
&lt;br /&gt;
vserver create -vserver vs2 -rootvolume vs2root -aggr node1_aggr1 -ns-switch file -rootvolume-security-style unix&lt;br /&gt;
&lt;br /&gt;
With the above command we are creating a Vserver vs2 along with a root volume &#39;vs2root&#39;. vs2root is th root volume (root of this namespace) &amp;nbsp;of this Vserver.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Note:&lt;/b&gt; Vservers are independent of physical nodes and so &amp;nbsp;even though&#39;vs2&#39; resides on &#39;node1&#39; it does not essential mean it is assigned to node &#39;node1&#39;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:3&lt;/b&gt; Verify&lt;br /&gt;
&lt;br /&gt;
vserver show&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:4&lt;/b&gt; View summary of the Vserver just created&lt;br /&gt;
&lt;br /&gt;
vserver show -vserver vs2&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:5&lt;/b&gt; View list of volumes&lt;br /&gt;
&lt;br /&gt;
volume show&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Note&lt;/b&gt;: The Vserver root volume that was just created appears&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:6&lt;/b&gt; View default volume size&lt;br /&gt;
&lt;br /&gt;
With the &#39;vserver create&#39; command we cannot specify the volume size, there by this value is defaulted; however, the size can be changed with &#39;volume modify&#39; command.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:7&lt;/b&gt; View all the attributes of the volume just created&lt;br /&gt;
&lt;br /&gt;
volume show -vserver vs2 -volume vs2root&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Note&lt;/b&gt;: The slash (/) signifies that this is the root volume of this namespace. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:8 (b)&lt;/b&gt; Create a flex vol&lt;br /&gt;
&lt;br /&gt;
volume create -vserver vs2 -volume volume2 -aggr node1_aggr1 -junction-path /vol2&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:9&lt;/b&gt; Verify&lt;br /&gt;
&lt;br /&gt;
vol show&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:10&lt;/b&gt; View summary of the new volume&lt;br /&gt;
&lt;br /&gt;
vol show -vserver vs2 -volume volume2&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/5321434565836227684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/5321434565836227684'/><link rel='alternate' type='text/html' href='http://hippodata.blogspot.com/2013/05/vserver-and-flex-vol-creation-netapp.html' title='Vserver and Flex Vol creation - NetApp Cluster-mode'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3833586449746557798.post-5763636916635913945</id><published>2013-05-18T02:00:00.000-04:00</published><updated>2013-05-18T02:00:25.956-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aggr"/><category scheme="http://www.blogger.com/atom/ns#" term="aggregate"/><category scheme="http://www.blogger.com/atom/ns#" term="allocation"/><category scheme="http://www.blogger.com/atom/ns#" term="cluster-mode"/><category scheme="http://www.blogger.com/atom/ns#" term="disks"/><category scheme="http://www.blogger.com/atom/ns#" term="nas"/><category scheme="http://www.blogger.com/atom/ns#" term="netapp"/><category scheme="http://www.blogger.com/atom/ns#" term="san"/><category scheme="http://www.blogger.com/atom/ns#" term="storage provisioning"/><title type='text'>NetApp Cluster-mode aggregate creation</title><content type='html'>&lt;br /&gt;
&lt;b&gt;Scenario&lt;/b&gt;:&lt;br /&gt;
======&lt;br /&gt;
a. Create a new aggregate with name node1_aggr1 on node1&lt;br /&gt;
b. Add disks to the aggregate&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;Step:1&lt;/b&gt; View the available aggregates&lt;br /&gt;
&lt;br /&gt;
storage aggr show&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:2&lt;/b&gt; View the avaialable disks&lt;br /&gt;
&lt;br /&gt;
storage disk show&lt;br /&gt;
&lt;br /&gt;
Notice the disks that belongs to aggregates and the spare disks that are available to create additional aggregates&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:3&lt;/b&gt; Create an aggregate&lt;br /&gt;
&lt;br /&gt;
storage aggr create -aggr node1_aggr1 -node node1 -diskcount 6&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:4&lt;/b&gt; Verify&lt;br /&gt;
&lt;br /&gt;
stor aggr show&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:5&lt;/b&gt; Detail view of the new aggregate&lt;br /&gt;
&lt;br /&gt;
stor aggr show -aggr node1_aggr1&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:6 (b)&lt;/b&gt; Add disks to the aggregate&lt;br /&gt;
&lt;br /&gt;
aggr add-disks -aggr node1_aggr1 -diskcount 10&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:7 &lt;/b&gt;Verify the number of disks&lt;br /&gt;
&lt;br /&gt;
aggr show -aggr node1_aggr1 -instance&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/5763636916635913945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/5763636916635913945'/><link rel='alternate' type='text/html' href='http://hippodata.blogspot.com/2013/05/netapp-cluster-mode-aggregate-creation.html' title='NetApp Cluster-mode aggregate creation'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3833586449746557798.post-1734585174838947972</id><published>2013-05-18T01:35:00.000-04:00</published><updated>2013-05-18T01:36:49.603-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="clariion"/><category scheme="http://www.blogger.com/atom/ns#" term="naviseccli"/><category scheme="http://www.blogger.com/atom/ns#" term="navisphere"/><category scheme="http://www.blogger.com/atom/ns#" term="spcollect"/><category scheme="http://www.blogger.com/atom/ns#" term="spcollects"/><category scheme="http://www.blogger.com/atom/ns#" term="winscp"/><title type='text'>Run SPcollects on Clariion - Basics</title><content type='html'>&lt;br /&gt;
SPcollects contain detailed log and configuration data for a CLARiiON Storage Processor. &amp;nbsp;These are used by EMC Support to diagnose faults and configuration problems. &amp;nbsp;Gathering these files when creating a Service Request is highly recommended to troubleshoot a problem. &amp;nbsp;SPcollects should also be retrieved when gathering data for a performance analysis, along with NAR files.&lt;br /&gt;
&lt;br /&gt;
An SPcollect has the filename format of:&lt;br /&gt;
&lt;br /&gt;
Serial Number _ SP A/B _ Year_Month_Day _ Time _ signature _data.zip&lt;br /&gt;
&lt;br /&gt;
A file that ends with runlog.txt, indicates that an SPcollect is still running and this will disappear once the SPcollect file completes.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Navisphere CLI:&lt;/b&gt;&lt;br /&gt;
=============&lt;br /&gt;
&lt;b&gt;Step:1&lt;/b&gt; Open a command prompt on the Management Station.&lt;br /&gt;
&lt;br /&gt;
Windows:&amp;nbsp;cd c:\program files\emc\navisphere cli&lt;br /&gt;
&lt;br /&gt;
Unix:&amp;nbsp;export PATH=$PATH:/opt/Navisphere/bin&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:2&lt;/b&gt; Run SP collect&lt;br /&gt;
&lt;br /&gt;
naviseccli -h &amp;lt;SP_IP_address&amp;gt; spcollect &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
This starts the SPcollect script.&lt;br /&gt;
&lt;br /&gt;
Wait at least 10 minutes for the SPcollects to run, before attempting to retrieve them.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step: 3&lt;/b&gt; Verify&lt;br /&gt;
&lt;br /&gt;
naviseccli -h &amp;lt;SP_IP_address&amp;gt; managefiles -list &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
This will list the files created by SPcollect.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:4&lt;/b&gt; Copy the files to management station&lt;br /&gt;
&lt;br /&gt;
naviseccli -h &amp;lt;SP_IP_address&amp;gt; managefiles -retrieve &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
This will display the files that can be moved from the SP to the Management Station.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enter files to be retrieved with index separated by comma OR by a range OR enter &#39;all&#39; to retrieve all file OR &#39;quit&#39; to quit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:5&lt;/b&gt; Upload to EMC support&lt;br /&gt;
&lt;br /&gt;
Windows: Very intuitive&lt;br /&gt;
&lt;br /&gt;
Unix: Use Winscp to copy from management station to local work station and upload to EMC suppport&lt;br /&gt;
&lt;br /&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/1734585174838947972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/1734585174838947972'/><link rel='alternate' type='text/html' href='http://hippodata.blogspot.com/2013/05/run-spcollects-on-clariion-basics.html' title='Run SPcollects on Clariion - Basics'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3833586449746557798.post-2375120705351983739</id><published>2013-05-17T11:03:00.001-04:00</published><updated>2013-05-18T00:42:25.327-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CIFS"/><category scheme="http://www.blogger.com/atom/ns#" term="cluster-mode"/><category scheme="http://www.blogger.com/atom/ns#" term="leases"/><category scheme="http://www.blogger.com/atom/ns#" term="leasing"/><category scheme="http://www.blogger.com/atom/ns#" term="nas"/><category scheme="http://www.blogger.com/atom/ns#" term="netapp"/><category scheme="http://www.blogger.com/atom/ns#" term="NFS"/><category scheme="http://www.blogger.com/atom/ns#" term="NFSv4"/><category scheme="http://www.blogger.com/atom/ns#" term="NFSv4.1"/><category scheme="http://www.blogger.com/atom/ns#" term="opplock"/><category scheme="http://www.blogger.com/atom/ns#" term="pNFS"/><category scheme="http://www.blogger.com/atom/ns#" term="protocols"/><category scheme="http://www.blogger.com/atom/ns#" term="SMB 1.0"/><category scheme="http://www.blogger.com/atom/ns#" term="SMB 2.0"/><category scheme="http://www.blogger.com/atom/ns#" term="SMB 2.1"/><title type='text'>Enhancements to NFS and SMB - NetApp Cluster-mode support</title><content type='html'>&lt;b&gt;NFSv4:&lt;/b&gt;&lt;br /&gt;
=====&lt;br /&gt;
1. Data ONTAP 8.1 cluster-mode introduces support for NFSv4 protocol specification as well as elements of NFSv 4.1&lt;br /&gt;
2. cluster mode continues to fully support NFSv2 and NFSv3 although you should not use NFSv2 with cluster mode&lt;br /&gt;
3. NFSv4 support brings the Data ONTAP 8.1 cluster mode operating system in parity with the Data ONTAP 7.3 operating system&lt;br /&gt;
4. The key feature of NFSv4 is referrals, NFSv4.1 is a minor revision of version 4.0 and is an extension of version 4 not a modification, so it&#39;s fully compliant with the NFSv4 specification it extends delegations beyond files to directories and send links introduces NFS sessions for enhanced efficiency and reliability provides parallel NFS, pNFS&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;Remote file access:&lt;/b&gt;&lt;br /&gt;
==============&lt;br /&gt;
-It is defined as the file access in which a client connected to a logical interface LIF going to a physical port on one controller accesses a file that is hosted on a different controller in the same cluster&lt;br /&gt;
-Remote file access has traditionally been a performance concern for clients which has been fixed with Data ONTAP Cluster mode operating system&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Scenario:&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
=======&lt;br /&gt;
A client is mounted to a Data LIF that is hosted on node1 and has a file operation with the destination in a volume on node4 the request is serviced by the node1 protocol stack, that protocol stack looks for the location of the volume and directs the operation to node4; which hosts the volume. The request traverses the cluster network and the result is returned to the client along the same path&lt;br /&gt;
&lt;br /&gt;
With pNFS when a file is open by an NFS client that mounted data LIF on node1 serves as the metadata path, because this is the path that will be used to carry out discovery of the target volumes location. If the data is hosted by node1 the operation will be managed locally in this case the local node discovers that the data is on node4, based on the pNFS protocol the client will be redirected to a LIF hosted on node4 the request as well as subsequent requests to the volume are serviced locally bypassing the cluster network&lt;br /&gt;
&lt;br /&gt;
when a volume is moved to an aggregate on a different node the pNFS client data path is redirected to a Data LIF hosted on the destination node&lt;br /&gt;
&lt;br /&gt;
To enable pNFS:&lt;br /&gt;
&lt;br /&gt;
cluster1::&amp;gt; vserver nfs modify -v 4.1 -pnfs enabled&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Note&lt;/b&gt;: Clients should be able to support pNFS, it is supported with RHEL 6.2 and Fedora 14.&lt;br /&gt;
&lt;br /&gt;
NFSv4 referrals and pNFS do not work together. By keeping network accessing data local pNFS reduces the amount of traffic that traverses is the cluster network. Unlike with NFS referrals, pNFS works seamlessly to the client it does not require a file system remount to ensure an optimized path with pNFS because the network redirect does not happen at Mount time. The final handle will not be left stale when a volume is moved to an aggregate on a different node&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;SMB 2.0 and SMB 2.1&lt;/b&gt;&lt;br /&gt;
=================&lt;br /&gt;
1. In addition to the SMB 1.0 protocol, the Data ONTAP cluster-mode operating system now supports SMB 2.0 and SMB 2.1.&lt;br /&gt;
2. SMB 2.0 was a major revision of the SMB 1.0 protocol including a complete reworking of the packet format SMB 2.0 also introduces several performance improvements relative to previous versions.&lt;br /&gt;
3. Efficient network utilization request compounding which stacks, multiple SMB into a single network packet larger read and write sizes to exploit faster networks File and directory.&lt;br /&gt;
4. Property caching durable file handles to allow SMB connection to transparently reconnect to the server if a temporary disconnection occurs such as over a wireless connection.&lt;br /&gt;
5. Improve message signing with improved configuration and interoperability with HMAC SHA-256 replacing MD5 at a hashing algorithm SMB 2.1.&lt;br /&gt;
6. Provides important performance enhancements, these enhancements include the following -client opportunistic lock (Opplock leasing model)&lt;br /&gt;
-large maximum transmission unit MTU support&lt;br /&gt;
-improved energy efficiency for client computers support for previous versions of SMB&lt;br /&gt;
7. The SMB 2.1 protocol provides several minor enhancements to the SMB 2.0 specification 8. Data ONTAP 8.1 cluster mode supports most but not all of the SMB 2.1 features.&lt;br /&gt;
9. The following SMB 2.1 features are not supported&lt;br /&gt;
-large MTU resilient handles&lt;br /&gt;
-branch cache support for SMB 2.1 is automatically enabled when you enable the SMB 2.0 protocol on a virtual server (Vserver)&lt;br /&gt;
&lt;br /&gt;
Use the following command to enable SMB to point out for the server:&lt;br /&gt;
&lt;br /&gt;
cluster1::&amp;gt; vserver cifs options modify -vserver vs1 -smb2 -enabled true&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Features of SMB 2.1 Leases:&lt;/b&gt;&lt;br /&gt;
=====================&lt;br /&gt;
-File and metadata caching&lt;br /&gt;
-Reduces bandwidth consumption&lt;br /&gt;
-Retention of cached data after a file is closed&lt;br /&gt;
-Full caching with multiple handles as long as those handles are opened on same client</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/2375120705351983739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/2375120705351983739'/><link rel='alternate' type='text/html' href='http://hippodata.blogspot.com/2013/05/enhancements-of-nfs-and-smb-netapp.html' title='Enhancements to NFS and SMB - NetApp Cluster-mode support'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3833586449746557798.post-8053564306148654103</id><published>2013-05-17T01:44:00.001-04:00</published><updated>2013-05-20T09:35:12.483-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="7-mode"/><category scheme="http://www.blogger.com/atom/ns#" term="admin"/><category scheme="http://www.blogger.com/atom/ns#" term="advanced"/><category scheme="http://www.blogger.com/atom/ns#" term="cli"/><category scheme="http://www.blogger.com/atom/ns#" term="cluster-mode"/><category scheme="http://www.blogger.com/atom/ns#" term="diag"/><category scheme="http://www.blogger.com/atom/ns#" term="gui"/><category scheme="http://www.blogger.com/atom/ns#" term="LIF"/><category scheme="http://www.blogger.com/atom/ns#" term="netapp"/><category scheme="http://www.blogger.com/atom/ns#" term="nodeshell"/><category scheme="http://www.blogger.com/atom/ns#" term="slustershell"/><category scheme="http://www.blogger.com/atom/ns#" term="systemshell"/><title type='text'>Basics of NetApp Cluster-mode Shells  </title><content type='html'>Similar to 7-mode we have three administrative privilage levels: admin, advanced and diagnostic. Clustered ONTAP system can be managed either from CLI or GUI (system manager or element manager). There are three different shells available with different scopes: Clustershell, nodeshell, systemshell&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:1&lt;/b&gt; Access through CLI&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Clustershell&lt;/b&gt;:&lt;br /&gt;
=========&lt;br /&gt;
-SSH is default method&lt;br /&gt;
-One can access clustershell using cluster management LIF (recommended) or the node management LIFs&lt;br /&gt;
-Scope: entire cluster&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
LIFs Management: &#39;net int show&#39; with display the output of available cluster management and node management LIFs along with their IP&#39;s, current node, current port and status&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Nodeshell&lt;/b&gt;:&lt;br /&gt;
=======&lt;br /&gt;
-Access nodeshell within the clustershell&lt;br /&gt;
-Scope: limited to one node at a time&lt;br /&gt;
-Command to access nodeshell is:&lt;br /&gt;
&lt;br /&gt;
system node run&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Systemshell&lt;/b&gt;:&lt;br /&gt;
=========&lt;br /&gt;
-Access systemshell from within the clustershell&lt;br /&gt;
-This is to access BSD shell&lt;br /&gt;
-Scope: single node at a time&lt;br /&gt;
-To access systemshell:&lt;br /&gt;
a. security login unlock -username diag&lt;br /&gt;
b. system node systemshell&lt;br /&gt;
c. Login as &quot;diag&quot;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:2 &lt;/b&gt;Access through GUI&lt;br /&gt;
&lt;br /&gt;
-Start the system manager client using the IP address of the cluster management LIF&lt;br /&gt;
-This is well known interface to all the existing 7-mode administrators and I don&#39;t think more explanation is needed here</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/8053564306148654103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/8053564306148654103'/><link rel='alternate' type='text/html' href='http://hippodata.blogspot.com/2013/05/basics-of-netapp-cluster-mode-shells.html' title='Basics of NetApp Cluster-mode Shells  '/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3833586449746557798.post-4893650972838302411</id><published>2013-05-17T01:03:00.003-04:00</published><updated>2013-05-17T15:16:08.530-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CIFS"/><category scheme="http://www.blogger.com/atom/ns#" term="cluster"/><category scheme="http://www.blogger.com/atom/ns#" term="cluster create"/><category scheme="http://www.blogger.com/atom/ns#" term="cluster join"/><category scheme="http://www.blogger.com/atom/ns#" term="cluster-mode"/><category scheme="http://www.blogger.com/atom/ns#" term="fcp"/><category scheme="http://www.blogger.com/atom/ns#" term="flexclone"/><category scheme="http://www.blogger.com/atom/ns#" term="HA pair"/><category scheme="http://www.blogger.com/atom/ns#" term="iscsi"/><category scheme="http://www.blogger.com/atom/ns#" term="nas"/><category scheme="http://www.blogger.com/atom/ns#" term="netapp"/><category scheme="http://www.blogger.com/atom/ns#" term="NFS"/><category scheme="http://www.blogger.com/atom/ns#" term="ntp"/><category scheme="http://www.blogger.com/atom/ns#" term="NVRAM"/><category scheme="http://www.blogger.com/atom/ns#" term="ONTAP 8.1"/><category scheme="http://www.blogger.com/atom/ns#" term="rlm"/><category scheme="http://www.blogger.com/atom/ns#" term="san"/><category scheme="http://www.blogger.com/atom/ns#" term="set-up"/><category scheme="http://www.blogger.com/atom/ns#" term="tftp"/><title type='text'>Steps to setup NetApp Cluster-mode </title><content type='html'>&lt;br /&gt;
&lt;b&gt;Step: 1&lt;/b&gt; Hardware setup&lt;br /&gt;
&lt;br /&gt;
a. Connect controllers to disk shelves (FC connectivity)&lt;br /&gt;
b. NVRAM interconnect to high availability cable between partners (10GbE or infiniBand)&lt;br /&gt;
c. Connect controllers to network such that each node have exactly two connections to the dedicated cluster network, at least one data connection. Also the well known RLM connection for troubleshooting purposes when needed.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;Note&lt;/b&gt;: Cluster connections must be on a network with dedicated cluster traffic, where as data and management connections are on a distinct network.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:2&lt;/b&gt; Power-up&lt;br /&gt;
&lt;br /&gt;
a. Power up network switches&lt;br /&gt;
b. Power up disk shelves&lt;br /&gt;
c. Power up storage controllers&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:3 &lt;/b&gt;Firmware&lt;br /&gt;
&lt;br /&gt;
a. During boot process press any key to enter the firmware&lt;br /&gt;
b. Two compact flash images: flash0a and flash0b are available. To &#39;flash&#39; (put) a new image on primary flash one needs to configure management interface.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Note&lt;/b&gt;: For auto option of ifconfig, DHCP or BOOTP server must be available on management network. If it doesn&#39;t one must run ifconfig &amp;lt;interface&amp;gt; addr=&amp;lt;ip&amp;gt; mask=&amp;lt;netmask&amp;gt; gw=&amp;lt;gateway&amp;gt;&lt;br /&gt;
&lt;br /&gt;
c. Once the network is configured, ping to test and flash the image; run flash tftp://&amp;lt;tftp_server&amp;gt;/&amp;lt;path_to_image&amp;gt;flash0a&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:4&lt;/b&gt; Installing ONTAP 8.1&lt;br /&gt;
&lt;br /&gt;
a. Run option 7 to install new software first&lt;br /&gt;
b. Enter a URL to ONTAP 8.1 tgz image&lt;br /&gt;
c. Allow the system to boot when complete&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Note&lt;/b&gt;: One can type boot_primary if node stops at firmware prompt&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:5&lt;/b&gt; Initialize a Node&lt;br /&gt;
&lt;br /&gt;
a. Run option 4&lt;br /&gt;
b. This initialization clears the three disks that the system uses for the first aggr that it creates and a vol0 root volume on it&lt;br /&gt;
c. This must be run on both nodes of each HA pair&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:6 &lt;/b&gt;Cluster setup wizard&lt;br /&gt;
&lt;br /&gt;
a. From boot menu, boot normally and login as &quot;admin&quot; with no password&lt;br /&gt;
b. The first node creates the cluster&lt;br /&gt;
c. The following information is required for the setup:&lt;br /&gt;
-Cluster name&lt;br /&gt;
-Cluster network ports and MTU size&lt;br /&gt;
-Cluster base license key&lt;br /&gt;
-Cluster management port, IP address, netmask, and default gateway&lt;br /&gt;
-Node management port, IP adress, netmask, and default gateway&lt;br /&gt;
-DNS domain name&lt;br /&gt;
-IP address of DNS server&lt;br /&gt;
d. Subsequent nodes join the cluster&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:7&lt;/b&gt; Normal boot sequence&lt;br /&gt;
&lt;br /&gt;
a. Firmware loads the kernel from CF&lt;br /&gt;
b. Kernel mounts &quot;/&quot; root image from rootfs.img on CF&lt;br /&gt;
c. Init is loaded and startup scripts run&lt;br /&gt;
d. NVRAM kernel modules gets loaded&lt;br /&gt;
e. Tmgwd is started&lt;br /&gt;
f. D-blade, N-balde and other components are loaded&lt;br /&gt;
g. vol0 root volume is mounted from local D-blade&lt;br /&gt;
h. CLI and element manager are ready for use&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:8&lt;/b&gt; Create a cluster&lt;br /&gt;
&lt;br /&gt;
cluster create -license &amp;lt;name&amp;gt; -clustername &amp;lt;clustername&amp;gt; -mgmt-port &amp;lt;port&amp;gt; -mgmt-ip &amp;lt;mgmtip&amp;gt; -mgmt-netmask &amp;lt;mgmtnetmask&amp;gt; -mgmt-gateway &amp;lt;magmtgateway&amp;gt; -ipaddr1 &amp;lt;clusterip1&amp;gt; -ipaddr2 &amp;lt;clusterip2&amp;gt; -netmask &amp;lt;clusternetmask&amp;gt; -mtu 9000&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:9&lt;/b&gt; Join a cluster&lt;br /&gt;
&lt;br /&gt;
Run this command from the node that wants to join the cluster&lt;br /&gt;
&lt;br /&gt;
cluster join -clusteripaddr &amp;lt;remoteclusterip&amp;gt; -ipaddr &amp;lt;clusterip1&amp;gt; -ipaddr2 &amp;lt;clusterip2&amp;gt; -netmask &amp;lt;clusternetmask&amp;gt; -mtu 9000&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:10&lt;/b&gt; Licenses&lt;br /&gt;
&lt;br /&gt;
a. Base&lt;br /&gt;
b. NFS&lt;br /&gt;
c. CIFS&lt;br /&gt;
d. iSCSI&lt;br /&gt;
e. FCP&lt;br /&gt;
f. SnapMirror_DP&lt;br /&gt;
g. SnapRestore&lt;br /&gt;
h. Flexclone&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Note&lt;/b&gt;: One can add licenses in the cluster shell; system license add&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:11&lt;/b&gt; NTP&lt;br /&gt;
&lt;br /&gt;
a. NTP is disabled by default and needs manual set up of date, time and time zone&lt;br /&gt;
&lt;br /&gt;
system date modify&lt;br /&gt;
&lt;br /&gt;
b. Verify and monitor&lt;br /&gt;
&lt;br /&gt;
system services ntp config show&lt;br /&gt;
system services ntp server show</content><link rel='replies' type='application/atom+xml' href='http://hippodata.blogspot.com/feeds/4893650972838302411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3833586449746557798/4893650972838302411' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/4893650972838302411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/4893650972838302411'/><link rel='alternate' type='text/html' href='http://hippodata.blogspot.com/2013/05/steps-to-setup-netapp-cluster-mode.html' title='Steps to setup NetApp Cluster-mode '/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3833586449746557798.post-322332200011185322</id><published>2013-05-16T23:33:00.001-04:00</published><updated>2013-05-17T15:16:20.155-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="7-mode"/><category scheme="http://www.blogger.com/atom/ns#" term="cluster-mode"/><category scheme="http://www.blogger.com/atom/ns#" term="clustering"/><category scheme="http://www.blogger.com/atom/ns#" term="datamotion"/><category scheme="http://www.blogger.com/atom/ns#" term="global namespace"/><category scheme="http://www.blogger.com/atom/ns#" term="HPC"/><category scheme="http://www.blogger.com/atom/ns#" term="LIF"/><category scheme="http://www.blogger.com/atom/ns#" term="linear"/><category scheme="http://www.blogger.com/atom/ns#" term="namespace"/><category scheme="http://www.blogger.com/atom/ns#" term="NDO"/><category scheme="http://www.blogger.com/atom/ns#" term="NDU"/><category scheme="http://www.blogger.com/atom/ns#" term="netapp"/><category scheme="http://www.blogger.com/atom/ns#" term="performance"/><category scheme="http://www.blogger.com/atom/ns#" term="scalability"/><category scheme="http://www.blogger.com/atom/ns#" term="scale-out"/><category scheme="http://www.blogger.com/atom/ns#" term="unified"/><category scheme="http://www.blogger.com/atom/ns#" term="vserver"/><title type='text'>Basics of NetApp Data ONTAP Cluster-mode </title><content type='html'>&lt;br /&gt;
With ever increasing business needs the amount of data need to be stored, managed and backed up is getting complicated. To handle this kind of requirements industry has two models: scale up and scale out.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Scale up:&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
======&lt;br /&gt;
1. limits performance and capacity&lt;br /&gt;
2. additional controllers are managed independently and do not provide any shared resources&lt;br /&gt;
3. not the best model for larger environments&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;Scale out or clustering:&lt;/b&gt;&lt;br /&gt;
=================&lt;br /&gt;
1. no limit on performance and capacity&lt;br /&gt;
2. additional controllers are added seamlessly to take advantage of the shared resources&lt;br /&gt;
3. all the operations including hardware replacements, upgrades and almost everything can be done non-disruptively&lt;br /&gt;
4. NetApp Data ONTAP cluster mode supports both SAN and NAS environments along with features like thin provisioning, deduplication, compression and data replication&lt;br /&gt;
5. Unified architecture with ability to support multiple data access protocols like FC, FCoE, iSCSI, &amp;nbsp;NFS, pNFS, CIFS&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Non Disruptive Operations:&lt;/b&gt;&lt;br /&gt;
=====================&lt;br /&gt;
1. Businesses today have rigid requirements and downtime cannot be tolerated. &lt;br /&gt;
2. Data ONTAP Cluster-Mode was built in with NDO as its fundamental feature to keep storage infrastructure remain up and to serve data during hardware and software maintenance and refresh operations&lt;br /&gt;
3. Data volumes can be move non-disruptively with data motion across the cluster at any time&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;NetApp 7G to Cluster-mode transistion:&lt;/b&gt;&lt;br /&gt;
==============================&lt;br /&gt;
It has always been a big gap for netapp to merge both the products, but with ONTAP 8 it allowed 7G customers to run ONTAP 8 in 7-mode while giving first step in the eventual move to a clustered environment. ONTAP 8.1 OS is a major step in merging 7G and cluster-mode.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Difference between 7G and Cluster-mode:&lt;/b&gt;&lt;br /&gt;
===============================&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaR2i04MeimaJNCmzJ2lrZsWbRAE9s6RurjQCAUvPmip4pyDXs1THeh2NTvfpGbqeC56tLkyA6SCrGii72zal2IbVQZs5I36vvFLMCJV5RzKp1510Y24gGT2c4iY6rPxfddiwQXYIvuQE/s1600/7g.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;169&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaR2i04MeimaJNCmzJ2lrZsWbRAE9s6RurjQCAUvPmip4pyDXs1THeh2NTvfpGbqeC56tLkyA6SCrGii72zal2IbVQZs5I36vvFLMCJV5RzKp1510Y24gGT2c4iY6rPxfddiwQXYIvuQE/s640/7g.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
In ONTAP cluster-mode systems, each node has a vol0 root volume similar to the 7G systems. In addition, each Vserver has a root volume that is the root of the namespace that can be composed of many volumes spread throughout the cluster&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;7-mode features not in Cluster-mode:&lt;/b&gt;&lt;br /&gt;
============================&lt;br /&gt;
1. MetroCluster&lt;br /&gt;
2. SnapVault&lt;br /&gt;
3. Snaplock&lt;br /&gt;
4. Synchronous snapmirror, Qtree Snapmirror&lt;br /&gt;
5. Volume snapmirror between 32-bit and 64-bit aggr&lt;br /&gt;
6. Virtual storage console, SMVI&lt;br /&gt;
7. DataMotion for vFiler&lt;br /&gt;
8. SyncMirror&lt;br /&gt;
9. NetApp storage encryption disks&lt;br /&gt;
10. IPv6&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Cluster-mode features not in 7-mode:&lt;/b&gt;&lt;br /&gt;
===========================&lt;br /&gt;
1. LIF migration and failover&lt;br /&gt;
2. Cluster management as a single system&lt;br /&gt;
3. SMB 2.1&lt;br /&gt;
4. NFSv4.1, pNFS&lt;br /&gt;
5. Asynchronous volume-level replication&lt;br /&gt;
6. Load-sharing SnapMirror functionality&lt;br /&gt;
7. Onboard antivirus scanning (McAfee and Sophos)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Scalability:&lt;/b&gt;&lt;br /&gt;
========&lt;br /&gt;
1. 2 to 24 nodes, by looking like a single file system&lt;br /&gt;
2. Throughput scales linearly to multiple gigabytes per second&lt;br /&gt;
3. Can be scaled to petabytes&lt;br /&gt;
4. Online load balancing and scaling&lt;br /&gt;
5. High-performance computing (HPC)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Flexibility:&lt;/b&gt;&lt;br /&gt;
========&lt;br /&gt;
1. Mix of FC, SATA and SAS drives&lt;br /&gt;
2. NDU data movement between tiers&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Note&lt;/b&gt;: data doesn&#39;t need to be moved between tiers for clients to be able to access it. FAS 6200 series can access the SATA storage just as easily as they access the FC and SAS storage. The reason to use tiered storage within a cluster is to improve performance, not accessibility.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Cluster Resources:&lt;/b&gt;&lt;br /&gt;
==============&lt;br /&gt;
1. Three types of Vservers: nodes, cluster, administration&lt;br /&gt;
2. Nodes&lt;br /&gt;
3. Aggregates&lt;br /&gt;
4. Volumes&lt;br /&gt;
5. Namespaces&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Node Vserver:&lt;/b&gt;&lt;br /&gt;
===========&lt;br /&gt;
-Physical node&lt;br /&gt;
-Associated with cluster LIFs and node management LIFs&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Administration Vserver:&lt;/b&gt;&lt;br /&gt;
==================&lt;br /&gt;
-Physical cluster&lt;br /&gt;
-Associated with cluster management LIF&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Cluster Vservers:&lt;/b&gt;&lt;br /&gt;
=============&lt;br /&gt;
-Not associated with any single node&lt;br /&gt;
-Contains resources within scope: Namespace, volumes, data LIFs, protocol servers (NFS,CIFS,FC,FCoE and iSCSI)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Note&lt;/b&gt;: When a cluster is created, the administration Vserver is automatically created, where as a node Vserver is automatically created when a node is joined to cluster. Cluster Vservers are created by administrators to build global namespaces.</content><link rel='replies' type='application/atom+xml' href='http://hippodata.blogspot.com/feeds/322332200011185322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3833586449746557798/322332200011185322' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/322332200011185322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/322332200011185322'/><link rel='alternate' type='text/html' href='http://hippodata.blogspot.com/2013/05/basics-of-netapp-data-ontap-cluster-mode.html' title='Basics of NetApp Data ONTAP Cluster-mode '/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaR2i04MeimaJNCmzJ2lrZsWbRAE9s6RurjQCAUvPmip4pyDXs1THeh2NTvfpGbqeC56tLkyA6SCrGii72zal2IbVQZs5I36vvFLMCJV5RzKp1510Y24gGT2c4iY6rPxfddiwQXYIvuQE/s72-c/7g.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3833586449746557798.post-1092089466862594635</id><published>2013-05-15T23:40:00.002-04:00</published><updated>2013-05-17T15:16:31.209-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="/etc/usermap.cfg"/><category scheme="http://www.blogger.com/atom/ns#" term="CIFS"/><category scheme="http://www.blogger.com/atom/ns#" term="export"/><category scheme="http://www.blogger.com/atom/ns#" term="map"/><category scheme="http://www.blogger.com/atom/ns#" term="mixedmode"/><category scheme="http://www.blogger.com/atom/ns#" term="nas"/><category scheme="http://www.blogger.com/atom/ns#" term="netapp"/><category scheme="http://www.blogger.com/atom/ns#" term="network drive"/><category scheme="http://www.blogger.com/atom/ns#" term="NFS"/><category scheme="http://www.blogger.com/atom/ns#" term="qtree"/><category scheme="http://www.blogger.com/atom/ns#" term="share"/><category scheme="http://www.blogger.com/atom/ns#" term="unix"/><category scheme="http://www.blogger.com/atom/ns#" term="usermap.cfg"/><category scheme="http://www.blogger.com/atom/ns#" term="vol"/><category scheme="http://www.blogger.com/atom/ns#" term="windows"/><title type='text'>How a qtree be accessed by both Unix and Windows - NetApp</title><content type='html'>&lt;br /&gt;
&lt;b&gt;Caution:&lt;/b&gt; I don&#39;t recommend using mixed mode for different reasons. Use UNIX style!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:1&lt;/b&gt; Create a Unix qtree on the filer and export it for Unix clients&lt;br /&gt;
filer&amp;gt; qtree create /vol/vol0/share&lt;br /&gt;
filer&amp;gt; exportfs -o root=&amp;lt;unix_server&amp;gt; /vol/vol0/share&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:2&lt;/b&gt; From the Unix server mount the filer&#39;s share&lt;br /&gt;
unix&amp;gt; mount filer:/vol/vol0/share /share&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;Step:3&lt;/b&gt; On the filer share the resource for Windows users&lt;br /&gt;
filer&amp;gt; cifs shares -add share /vol/vol3/share&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:4&lt;/b&gt; From the Windows computer map the filer&#39;s resource&lt;br /&gt;
Right-click on My Computer &amp;gt; Map the network drive &amp;gt; enter the filer&#39;s name\share&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:5&lt;/b&gt; On the filer edit /etc/usermap.cfg and add the following entries for each user:&lt;br /&gt;
win_domain\userA =&amp;gt; unix_userA&lt;br /&gt;
&lt;br /&gt;
When a Windows userA tries to access the file on the filer&#39;s share, the filer as per the entry in /etc/usermap.cfg forwards the request to the unix, and the unix userA permissions are assigned to the windows userA. So all you need to do is, assign the proper permission to unix userA which in turn is applied to the respective Windows user.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Example:&lt;/b&gt;&lt;br /&gt;
=======&lt;br /&gt;
filer&amp;gt; wrfile /etc/usermap.cfg&lt;br /&gt;
&quot;hippo data&quot; == hippo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Windows name hippo data maps to the UNIX name hippo and vice versa.</content><link rel='replies' type='application/atom+xml' href='http://hippodata.blogspot.com/feeds/1092089466862594635/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3833586449746557798/1092089466862594635' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/1092089466862594635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/1092089466862594635'/><link rel='alternate' type='text/html' href='http://hippodata.blogspot.com/2013/05/how-qtree-be-accessed-by-both-unix-and.html' title='How a qtree be accessed by both Unix and Windows - NetApp'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3833586449746557798.post-4974768117783096595</id><published>2013-05-15T23:24:00.000-04:00</published><updated>2013-05-17T15:17:06.906-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="acl"/><category scheme="http://www.blogger.com/atom/ns#" term="CIFS"/><category scheme="http://www.blogger.com/atom/ns#" term="gid"/><category scheme="http://www.blogger.com/atom/ns#" term="groups"/><category scheme="http://www.blogger.com/atom/ns#" term="MultiProtocol"/><category scheme="http://www.blogger.com/atom/ns#" term="name service"/><category scheme="http://www.blogger.com/atom/ns#" term="nas"/><category scheme="http://www.blogger.com/atom/ns#" term="netapp"/><category scheme="http://www.blogger.com/atom/ns#" term="NFS"/><category scheme="http://www.blogger.com/atom/ns#" term="nsswitch.conf"/><category scheme="http://www.blogger.com/atom/ns#" term="ntfs"/><category scheme="http://www.blogger.com/atom/ns#" term="permissions"/><category scheme="http://www.blogger.com/atom/ns#" term="security style"/><category scheme="http://www.blogger.com/atom/ns#" term="sis"/><category scheme="http://www.blogger.com/atom/ns#" term="unix"/><category scheme="http://www.blogger.com/atom/ns#" term="usermapping"/><category scheme="http://www.blogger.com/atom/ns#" term="wafl"/><category scheme="http://www.blogger.com/atom/ns#" term="windows"/><title type='text'>UNIX host to access data with NTFS security style using NFS</title><content type='html'>&lt;br /&gt;
&lt;b&gt;Step:1&lt;/b&gt; User login from the UNIX host, the host requests user and group information for the user from the name services configured in the /etc/nsswitch.conf file. The data can be retrieved from local files, an NIS server, or an LDAP server.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:2&lt;/b&gt; The configured name service returns user and group information to the UNIX host.&lt;br /&gt;
All user information needed to log in, including UID, GID, and the user shell and home directory, is returned. Additionally, the user’s secondary group GIDs are returned.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;Step:3&lt;/b&gt; Using the user information retrieved from the identity store, the user is authenticated and allowed access to the UNIX host. The user and group information retrieved in step 1 is cached and used to determine access rights to local and remote resources.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:4&lt;/b&gt; The user requests access to a mounted NetApp file system.&lt;br /&gt;
&lt;br /&gt;
The storage system checks export options at the time the file system is mounted. Export options might affect the user’s ability to perform a requested action.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:5 &lt;/b&gt;The user requests access to data on the storage system that uses NTFS-style permissions, but the request contains UNIX-style UID and GIDs.&lt;br /&gt;
&lt;br /&gt;
The storage system cannot use the UID and GIDs sent in the access request for the access check. Instead, the storage system must compare Windows user and group information to the file’s Window ACL to determine access for the user. Therefore, the storage system maps the UNIX user to the corresponding Windows user.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:6 &lt;/b&gt;The system queries the configured UNIX identity store, supplying the user’s UID, and requests the user name.&lt;br /&gt;
&lt;br /&gt;
When the user requests access from a UNIX host, the request contains the user’s UID but does not contain the user name. After mapping is done by user name, the system must determine the UNIX user name before the mapping process can proceed.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:7&lt;/b&gt; The UNIX name service returns the name of the UNIX user to the storage system.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:8&lt;/b&gt; The storage system uses the UNIX user name to begin the user mapping process.&lt;br /&gt;
The storage system checks /etc/usermap.cfg and the LDAP user mapping entries, if configured, to see if there is a specific mapping entry for the UNIX user.&lt;br /&gt;
&lt;br /&gt;
If there is a specific mapping entry, the storage system uses this entry for the user mapping process.&lt;br /&gt;
&lt;br /&gt;
If there is not a specific mapping entry, the storage system assumes that the Windows user name is the same as the UNIX user name and automatically uses this name during the mapping process.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:9&lt;/b&gt; The storage system queries Active Directory to determine if the mapped user name is a valid Windows user.&lt;br /&gt;
&lt;br /&gt;
If the user name is a valid Windows user, the mapping process continues.&lt;br /&gt;
&lt;br /&gt;
If the user name is not a valid Windows user, the user is either mapped to the generic NT user or access is denied, depending on how the wafl option wafl.default_nt_user is configured.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:10&lt;/b&gt; Active Directory replies to the query, either supplying information on the user or returning an error indicating that the user was not found.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:11&lt;/b&gt; The storage system queries Active Directory for the mapped Windows user’s SIDs (user SID and all group SIDs).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:12&lt;/b&gt; Active Directory replies to the query, supplying information on the user, including the user’s SIDs.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:13&lt;/b&gt; The storage system uses the user’s SIDs and compares them to the ACLs of files and directories for which access has been requested.&lt;br /&gt;
&lt;br /&gt;
The system then determines whether the desired action is allowed.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:14&lt;/b&gt; The system replies to the access request, either permitting the requested action if the file permissions allow it or denying the action if the permissions do not allow it.</content><link rel='replies' type='application/atom+xml' href='http://hippodata.blogspot.com/feeds/4974768117783096595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3833586449746557798/4974768117783096595' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/4974768117783096595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/4974768117783096595'/><link rel='alternate' type='text/html' href='http://hippodata.blogspot.com/2013/05/unix-host-to-access-data-with-ntfs.html' title='UNIX host to access data with NTFS security style using NFS'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3833586449746557798.post-4494210834165456116</id><published>2013-05-15T23:09:00.001-04:00</published><updated>2013-05-17T15:17:21.546-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CIFS"/><category scheme="http://www.blogger.com/atom/ns#" term="data ontap"/><category scheme="http://www.blogger.com/atom/ns#" term="group mapping"/><category scheme="http://www.blogger.com/atom/ns#" term="mixed mode"/><category scheme="http://www.blogger.com/atom/ns#" term="MultiProtocol"/><category scheme="http://www.blogger.com/atom/ns#" term="nas"/><category scheme="http://www.blogger.com/atom/ns#" term="netapp"/><category scheme="http://www.blogger.com/atom/ns#" term="NFS"/><category scheme="http://www.blogger.com/atom/ns#" term="ntfs"/><category scheme="http://www.blogger.com/atom/ns#" term="security style"/><category scheme="http://www.blogger.com/atom/ns#" term="unix group"/><category scheme="http://www.blogger.com/atom/ns#" term="user mapping"/><category scheme="http://www.blogger.com/atom/ns#" term="WAFL credential cache"/><category scheme="http://www.blogger.com/atom/ns#" term="wcc"/><title type='text'>MultiProtocol on NetApp storage system - Part 1 </title><content type='html'>Ever wonder how to allocate same volume to both Windows and Unix environment on NetApp systems? Many of my colleagues and friends have questions on this and so I determined to write up a article on this, hope it makes good sense.&lt;br /&gt;
&lt;br /&gt;
After the drive is mapped or an export is mounted users that request data access on the network must be authenticated by whatever method is configured, typically windows clients are authenticated in a windows domain or very less frequently by the workstation. Unix users are authenticated by system or kerberos (network-based authentication).&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;Unix: &lt;/b&gt;NFS being connection less protocol, after the export is mounted and to request access of data a user needs to be authenticated to determine the user ID (UID) and group IDs (GIDs) and secondar/auxiliary GID&#39;s when user first logs in. This mapping information is retrieved from /etc/passwd and /etc/groups, network information system (NIS), or LDAP identity store.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Windows: &lt;/b&gt;CIFS being a session based protocol, the identity of the user can be determined just once when the session is first setup by mapping a drive. Data ONTAP always maps the user&#39;s windows identity to the user&#39;s UNIX identity during a CIFS session setup process.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Data ONTAP&lt;/b&gt; does not map the user&#39;s UNIX identity to the users windows identity during the UNIX/NFS authentication process. It only maps the user&#39;s UNIX identity to the user&#39;s Windows identity when a UNIX user tried to access files/folders with an effective windows NT ACL.&lt;br /&gt;
&lt;br /&gt;
Points to Note:&lt;br /&gt;
==========&lt;br /&gt;
1. UNIX export rules are host-based; Windows share permissions and NTFS Windows ACLs are both user based.&lt;br /&gt;
&lt;br /&gt;
2. CIFS share ACLs can be managed through the Windows Computer Management snap-in or through the cifs access command.&lt;br /&gt;
&lt;br /&gt;
3. Export options are set on the storage system with the /etc/exports file. Export options apply to the host; however, the effective permissions for the user are based on the combined export and file access controls.&lt;br /&gt;
&lt;br /&gt;
Data ONTAP Security Styles:&lt;br /&gt;
====================&lt;br /&gt;
Every volume and qtree is given a default security style at creation time. The default security style is set with the option options wafl.default_security_style [unix | ntfs | mixed] (default: unix).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Note&lt;/b&gt;: NEVER USE MIXED-MODE unless you determined to do so!&lt;br /&gt;
&lt;br /&gt;
UNIX security style. For the UNIX security style, authorization to access directories and files is based on access allowed to the user’s UNIX UID and GIDs, with access rules following the UNIX style of file permissions through mode bits (rwxrwxrwx) or through NFSv4 ACL.&lt;br /&gt;
&lt;br /&gt;
Windows security style. For the Windows security style, authorization to access folders and files is based on access allowed to the user’s Windows security identifier (SID) and Windows group SIDs, with access rules based on NTFS Windows security descriptors.&lt;br /&gt;
&lt;br /&gt;
UserMapping:&lt;br /&gt;
==========&lt;br /&gt;
User mapping between a Windows user and a UNIX user is a fundamental part of NetApp multiprotocol access. Multiprotocol access depends on user mapping between a user’s UNIX identity and Windows identity to evaluate the user’s rights to perform file and folder operations within volumes and qtrees.&lt;br /&gt;
&lt;br /&gt;
UNIX:&lt;br /&gt;
=====&lt;br /&gt;
If a user accesses data in a UNIX volume through CIFS, Data ONTAP first maps the Windows user name to its corresponding UNIX UID. If there is no corresponding UNIX user, by default the Windows user is mapped to the default UNIX user. The default user is designated with the following storage system option: options wafl.default_unix_user user_name (default: pcuser)&lt;br /&gt;
&lt;br /&gt;
The designated default UNIX user may be any valid UNIX user designated by the storage administrator, but the default user must exist in the storage system’s /etc/passwd file, the NIS database, or the LDAP database. If this option is set to the null string, Windows users who are not mapped to a UNIX user are not allowed to log in. Therefore, if this option is set to the null string, it is vital that each Windows user can map successfully to a specific UNIX user.&lt;br /&gt;
&lt;br /&gt;
NTFS:&lt;br /&gt;
====&lt;br /&gt;
If a CIFS user accesses NTFS security style files or folders with Windows ACLs, the SIDs of the CIFS user and groups are used to determine NTFS access rights. The user and group SIDs are compared to the file’s Windows security descriptor.&lt;br /&gt;
&lt;br /&gt;
If a UNIX user accesses files and folders with Windows ACLs in an NTFS qtree, Data ONTAP maps the UNIX user to the Windows user based on the user mapping policy. Upon failed identity mapping, Data ONTAP rejects the access request. Upon successful mapping, Data ONTAP grants access based on the user’s mapped Windows user. The user’s Windows user SID and Windows group SIDs are used to determine NTFS access rights.&lt;br /&gt;
&lt;br /&gt;
By default, if there is no corresponding Windows user, access is denied to the NTFS qtree from a UNIX host. This is because the option that is used to configure a generic Windows account is, by default, set to null.&lt;br /&gt;
&lt;br /&gt;
wafl.default_nt_user is a storage system option that can be used to allow mapping of Windows users with no corresponding UNIX account to a generic Windows account. The default for this option is null. To enable access from a default user, add a valid Windows account to this option:&lt;br /&gt;
&lt;br /&gt;
options wafl.default_nt_user corp\ntuser&lt;br /&gt;
&lt;br /&gt;
MultiProtocol Access and Group Mapping:&lt;br /&gt;
==============================&lt;br /&gt;
Data ONTAP user mapping maps user names. It does not map groups. Due to the fundamentally different way that Windows groups and UNIX groups are configured, it is not possible to perform a consistent, exact, and simple mapping between UNIX groups and Windows groups. However, because group membership is critically important when determining file access, as part of the mapping process the mapped user’s group membership is retrieved and cached along with the user mapping information.&lt;br /&gt;
&lt;br /&gt;
WAFL CREDENTIAL CACHE:&lt;br /&gt;
=======================&lt;br /&gt;
After performing UNIX-to-Windows user mapping, the results, including group membership for both the UNIX user and the Windows user, are stored in the storage system’s WAFL credential cache (wcc).&lt;br /&gt;
&lt;br /&gt;
Windows-user-to-UNIX-user mapping is not stored in the wcc. Instead, with Windows-to-UNIX-user mapping, the UNIX user information is kept as part of the CIFS session credential. A fresh Windows-to-UNIX user mapping is needed only when a new CIFS session is established for that user&lt;br /&gt;
&lt;br /&gt;
By default, the information is cached for 20 minutes. The cache time can be increased as follows:&lt;br /&gt;
&lt;br /&gt;
options wafl.wcc_minutes_valid minutes (Valid range is 1 through 20,160.) &lt;br /&gt;
&lt;br /&gt;
Please click &lt;a href=&quot;http://hippodata.blogspot.com/2013/05/unix-host-to-access-data-with-ntfs.html&quot;&gt;here for more on this&amp;nbsp;&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://hippodata.blogspot.com/feeds/4494210834165456116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3833586449746557798/4494210834165456116' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/4494210834165456116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/4494210834165456116'/><link rel='alternate' type='text/html' href='http://hippodata.blogspot.com/2013/05/multiprotocol-on-netapp-storage-system.html' title='MultiProtocol on NetApp storage system - Part 1 '/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3833586449746557798.post-1464922824423997357</id><published>2013-05-13T17:52:00.000-04:00</published><updated>2013-05-17T15:17:40.546-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="block migration"/><category scheme="http://www.blogger.com/atom/ns#" term="cluster services"/><category scheme="http://www.blogger.com/atom/ns#" term="control array"/><category scheme="http://www.blogger.com/atom/ns#" term="donor_update"/><category scheme="http://www.blogger.com/atom/ns#" term="hotpull"/><category scheme="http://www.blogger.com/atom/ns#" term="mapped"/><category scheme="http://www.blogger.com/atom/ns#" term="mask"/><category scheme="http://www.blogger.com/atom/ns#" term="microsoft"/><category scheme="http://www.blogger.com/atom/ns#" term="migration"/><category scheme="http://www.blogger.com/atom/ns#" term="MSCS"/><category scheme="http://www.blogger.com/atom/ns#" term="online migration"/><category scheme="http://www.blogger.com/atom/ns#" term="open replicator"/><category scheme="http://www.blogger.com/atom/ns#" term="powerpath"/><category scheme="http://www.blogger.com/atom/ns#" term="remote array"/><category scheme="http://www.blogger.com/atom/ns#" term="symmetrix"/><category scheme="http://www.blogger.com/atom/ns#" term="symrcopy"/><category scheme="http://www.blogger.com/atom/ns#" term="symsan"/><category scheme="http://www.blogger.com/atom/ns#" term="wwn"/><title type='text'>Open Replicator Hot Pull Migration Simplified!</title><content type='html'>&lt;b&gt;Scenario:&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
=======&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwrynBxUJvpNPPH5xQgG5HmhL7A9u3FOVzOpNdxCwfhZeAkq-7bxDJ70zIJxuh1Ffkx1gBbkUp_ZzNGVswH2Pv7lPY_CUjxBpmKj3hcHoPcou8wT5y75mnJEd_2AmttIHPi0FnlQkc3L0/s1600/scenario.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;152&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwrynBxUJvpNPPH5xQgG5HmhL7A9u3FOVzOpNdxCwfhZeAkq-7bxDJ70zIJxuh1Ffkx1gBbkUp_ZzNGVswH2Pv7lPY_CUjxBpmKj3hcHoPcou8wT5y75mnJEd_2AmttIHPi0FnlQkc3L0/s640/scenario.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;b&gt;&lt;/b&gt;&lt;/div&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;b&gt;Microsoft Cluster Service (MSCS) with two Nodes:&lt;/b&gt;&lt;/div&gt;
======================================&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqJL_ShriiXlchXJ2mEVfl9iDe5q4-RV4ftZ5E7N8awPYt-0mbYjs9lt2LLvM-ahT09K__PbGdaQfiECSLtX3472fwQunjG-c1zEOKRpKa_NvsGAwzW4tZWXIBRI2rGlNBe-aBUCplQLM/s1600/MSCS.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;80&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqJL_ShriiXlchXJ2mEVfl9iDe5q4-RV4ftZ5E7N8awPYt-0mbYjs9lt2LLvM-ahT09K__PbGdaQfiECSLtX3472fwQunjG-c1zEOKRpKa_NvsGAwzW4tZWXIBRI2rGlNBe-aBUCplQLM/s640/MSCS.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*have powerpath latest version installed.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:1&lt;/b&gt; Create a table similar to the one shown above and fill that information&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Remote (source):&lt;/b&gt;&lt;br /&gt;
----------------------&lt;br /&gt;
Device Information: inq –sym_wwn&lt;br /&gt;
FA’s Mapped: symdev list –dev 1A0 –sid 1000 –multiport&lt;br /&gt;
FA’ WWN: symcfg list –FA all –sid 1000&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Contol (target):&lt;/b&gt;&lt;br /&gt;
---------------------&lt;br /&gt;
1.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Create a new device of same or greater size; map it to the FA’s.&lt;br /&gt;
2.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Mask the newly create devices to the Control FA’s, this comes after zoning&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:2&lt;/b&gt; Zoning&lt;br /&gt;
&lt;br /&gt;
For hotpull, all ports on control array that the target devices are mapped to must have access to the remote devices&lt;br /&gt;
&lt;br /&gt;
In this case, zone as below:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsfob7-UfU5Z7PaYhDx8vcXnzJ3pHYPU5rqPv-ZTjKAtBOt8-E_c1tpNWjZmgQDI-tGiCD-Q6Hu5e0W8BnNdMYCZ3vPpXMERBrS5hAksQNq1D7az8woQFaiuqGkDhd_WHiAY97SB4nI_4/s1600/zone.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;66&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsfob7-UfU5Z7PaYhDx8vcXnzJ3pHYPU5rqPv-ZTjKAtBOt8-E_c1tpNWjZmgQDI-tGiCD-Q6Hu5e0W8BnNdMYCZ3vPpXMERBrS5hAksQNq1D7az8woQFaiuqGkDhd_WHiAY97SB4nI_4/s640/zone.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;&lt;/b&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;&lt;/b&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Step:3 &lt;/b&gt;Mask the newly created device on target array to the source FA’s&lt;br /&gt;
&lt;br /&gt;
Symmask –sid 2000 –wwn 5009035BAAA9BFE0 –dir 2A –p 0 add dev 1B0&lt;br /&gt;
Symmask –sid 2000 –wwn 5009035BAAA9BFE1 –dir 15A –p 1 add dev 1B0&lt;br /&gt;
Symmask –sid 2000 refresh&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:4&lt;/b&gt; &lt;b&gt;Caution&lt;/b&gt;! Zone the host (windows cluster MSCS) to the control (target) symmetrix. DO NOT MASK new storage to the host. You will do this in step 9!&lt;br /&gt;
&lt;br /&gt;
Which means the host still sees the old storage, we will let the host see new storage after the cutover process.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:5&lt;/b&gt; Verify control and remote FA’s have visibility&lt;br /&gt;
&lt;br /&gt;
Symsan list –sid 2000 –sanports –dir 2A –p0&lt;br /&gt;
Symsan list –sid 2000 –sanports –dir 15A –p1 &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:6&lt;/b&gt; Verify if WWN’s of the remote devices are visible on the target FA’s&lt;br /&gt;
&lt;br /&gt;
Symsan list –sid 2000 –sanluns –wwn 5009035BAAA9BFE0 –dir 2A –p 0&lt;br /&gt;
Symsan list –sid 2000 –sanluns –wwn 5009035BAAA9BFE1 –dir 15A –p 1&lt;br /&gt;
&lt;br /&gt;
These commands should output the LUN WWN of the source device&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Note&lt;/b&gt;: The device records might show incomplete due to SCSI reservations placed upon the devices by the cluster software&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:7&lt;/b&gt; Prepare the host for migration&lt;br /&gt;
&lt;br /&gt;
1.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Prior to begin the migration, the applications running on the cluster should be shutdown as the control (target) symm has no control on source IO activity, which might lead to data inconsistencies.&lt;br /&gt;
2.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Work with windows admin to make sure the cluster resources are taken offline with at-most caution to move all resources to one node. In this instance I consider win_node2&lt;br /&gt;
3.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Shut down the servers.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:8 &lt;/b&gt;Unassign the remote (source) devices from all cluster node HBA’s&lt;br /&gt;
&lt;br /&gt;
Symmask –sid 1000 –wwn 100000000c9535011 –dir 1A –p 0 remove dev 1A0&lt;br /&gt;
Symmask –sid 1000 –wwn 100000000c9535012 –dir 16A –p 1 remove dev 1A0&lt;br /&gt;
Symmask –sid 1000 refresh&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Note:&lt;/b&gt; This will prevent duplicate disks being visible to the cluster nodes when they are brought back online&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:9 &lt;/b&gt;Mask cluster node HBA’s to the control (target) devices&lt;br /&gt;
&lt;br /&gt;
Symmask –sid 2000 –wwn 100000000c9535011 –dir 2A –p 0 add dev 1A0&lt;br /&gt;
Symmask –sid 2000 –wwn 100000000c9535012 –dir 15A –p 1 add dev 1A0&lt;br /&gt;
Symmask –sid 2000 refresh&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:10&lt;/b&gt; Create device file that contains target (control) devices and remote (source) devices&lt;br /&gt;
&lt;br /&gt;
hippo@unix ~]$ vi pair.txt&lt;br /&gt;
&lt;br /&gt;
symdev=000180202000:1B0 60060160058714000090DE98F7DBDC11&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:11&lt;/b&gt; Create open replicator copy session&lt;br /&gt;
&lt;br /&gt;
hippo@unix ~]$ symrcopy –f pair.txt create –copy –hut –pull –donor_update&lt;br /&gt;
&lt;br /&gt;
-copy: Starts data transfer when the session is activated&lt;br /&gt;
-hot: Target (control) devices are online to the host during data transfer&lt;br /&gt;
-pull: Data being copied from remote array to the control array&lt;br /&gt;
-donor_update: All writes to the control device from the host will also be copied to the remote device. This protects against potential data loss that can be caused by failure of OR session during migration process.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:12&lt;/b&gt; Query the session that all pairs are successfully created&lt;br /&gt;
&lt;br /&gt;
hippo@unix ~]$ symrcopy –f pair.txt query&lt;br /&gt;
&lt;br /&gt;
Check if status column says ‘created’&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:13&lt;/b&gt; Activate the Open Replicator session&lt;br /&gt;
&lt;br /&gt;
hippo@unix ~]$ symrcopy –f pair.txt activate&lt;br /&gt;
hippo@unix ~]$ symrcopy –f pair.txt activate&lt;br /&gt;
&lt;br /&gt;
Check if status column says ‘CopyInProg’&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:14&lt;/b&gt; Restart the cluster&lt;br /&gt;
&lt;br /&gt;
1.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Work with server team to power on the cluster nose that owned all the resources prior to the cluster being shutdown.&lt;br /&gt;
2.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Confirm if the node sees all the devices, than restart the cluster service on the node.&lt;br /&gt;
3.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Bring the cluster resources back online&lt;br /&gt;
4.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Power on the other node in the cluster as well&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:15&lt;/b&gt; Monitor the open replicator session to ensure all the data is transferred successfully.&lt;br /&gt;
&lt;br /&gt;
hippo@unix ~]$ symrcopy –f pair.txt query&lt;br /&gt;
&lt;br /&gt;
Check if status column says ‘Copied’&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:16&lt;/b&gt; Terminate the open replicator session once the query shows data 100% copied for all the devices.&lt;br /&gt;
&lt;br /&gt;
hippo@unix ~]$ symrcopy –f pair.txt terminate&lt;br /&gt;
hippo@unix ~]$ symrcopy –f pair.txt query&lt;br /&gt;
&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://hippodata.blogspot.com/feeds/1464922824423997357/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3833586449746557798/1464922824423997357' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/1464922824423997357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/1464922824423997357'/><link rel='alternate' type='text/html' href='http://hippodata.blogspot.com/2013/05/open-replicator-hot-pull-migration.html' title='Open Replicator Hot Pull Migration Simplified!'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwrynBxUJvpNPPH5xQgG5HmhL7A9u3FOVzOpNdxCwfhZeAkq-7bxDJ70zIJxuh1Ffkx1gBbkUp_ZzNGVswH2Pv7lPY_CUjxBpmKj3hcHoPcou8wT5y75mnJEd_2AmttIHPi0FnlQkc3L0/s72-c/scenario.jpg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3833586449746557798.post-4452533328943077080</id><published>2013-05-12T15:33:00.000-04:00</published><updated>2013-05-17T15:18:46.320-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="celerra"/><category scheme="http://www.blogger.com/atom/ns#" term="CIFS"/><category scheme="http://www.blogger.com/atom/ns#" term="cifs server"/><category scheme="http://www.blogger.com/atom/ns#" term="DACL"/><category scheme="http://www.blogger.com/atom/ns#" term="directories"/><category scheme="http://www.blogger.com/atom/ns#" term="emc"/><category scheme="http://www.blogger.com/atom/ns#" term="emcopy"/><category scheme="http://www.blogger.com/atom/ns#" term="emcopy.exe"/><category scheme="http://www.blogger.com/atom/ns#" term="file-based"/><category scheme="http://www.blogger.com/atom/ns#" term="migration"/><category scheme="http://www.blogger.com/atom/ns#" term="migration User account"/><category scheme="http://www.blogger.com/atom/ns#" term="nas"/><category scheme="http://www.blogger.com/atom/ns#" term="SID&#39;s"/><category scheme="http://www.blogger.com/atom/ns#" term="windows network server"/><title type='text'>File-Based Migration using EMCopy</title><content type='html'>&lt;br /&gt;
&lt;b&gt;Overview&lt;/b&gt;:&lt;br /&gt;
=======&lt;br /&gt;
1. EMCopy is windows based tool which can be used for migrating the shares from windows file server to celerra CIFS server&lt;br /&gt;
2. It lets you copy a file or directory (and included subdirectories) from and to an NTFS partition, keeping security the same on the copy as on the original.&lt;br /&gt;
3. EMCOPY allows you to back up the file and directory security—ACLs, owner information, and audit information—from a source directory to a destination directory without copying the file data.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;Download EMCopy.exe:&lt;/b&gt;&lt;br /&gt;
==================&lt;br /&gt;
1. You need to contact your SAM or TC to have a copy of the emcopy.exe&lt;br /&gt;
2. I have a copy that I use --&amp;gt; send a email to hippodata@gmail.com&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Install&lt;/b&gt;:&lt;br /&gt;
=====&lt;br /&gt;
1. Download to any location on your local computer, in this example I did it to &quot;C:\emcopy&quot;&lt;br /&gt;
2. Open command prompt, change to the directory&lt;br /&gt;
&lt;br /&gt;
cd /d C:\emcopy&lt;br /&gt;
&lt;br /&gt;
3. Run the command to see available options&lt;br /&gt;
&lt;br /&gt;
C:\emcopy&amp;gt; emcopy.exe&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Requirements:&lt;/b&gt;&lt;br /&gt;
===========&lt;br /&gt;
1. The migration User account should have Domain Admin membership and must be logged onto the system that is conducting the actual migration of data and attributes.&lt;br /&gt;
2. Make sure there are no unresolvable SID&#39;s on the source&lt;br /&gt;
3. Proper Group Membership and User Rights for the Windows account used for the migration. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Example: 1&lt;/b&gt;&lt;br /&gt;
========&lt;br /&gt;
Copy one directory with all its contents and its owner to a different directory on a Data Mover.&lt;br /&gt;
&lt;br /&gt;
C:\emcopy&amp;gt;emcopy.exe c:\source\ h:\destination /o /s&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Note&lt;/b&gt;: By default, the DACLs are copied when the /NOSEC option is not set. The owner attribute of the directories and files is also duplicated.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Example: 2&lt;/b&gt;&lt;br /&gt;
========&lt;br /&gt;
Copy source directory to destination directory including the local groups security entries, use this command syntax:&lt;br /&gt;
&lt;br /&gt;
C:\emcopy&amp;gt;emcopy.exe c:\source\ h:\destination /o /s /lg&lt;br /&gt;
&lt;br /&gt;
Note: You must use LGDUP before using EMCOPY with the /lg option.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Example: 3&lt;/b&gt;&lt;br /&gt;
========&lt;br /&gt;
C:\emcopy&amp;gt;emcopy.exe \\source\share\directory \\destination\share /o /s /c /r:3 /w:5 /log:&quot;c:\log file.txt&quot;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Note&lt;/b&gt;: 1. The &quot;/o&quot; option enables the copy of a file&#39;s owner. Without this option, the account used for the copy will be the owner of the copied files and directories.&lt;br /&gt;
&lt;br /&gt;
2. The &quot;/s&quot; option enables the copy of the subdirectories.&lt;br /&gt;
&lt;br /&gt;
3. The &quot;/c&quot; switch allows the process to continue after the retries.&lt;br /&gt;
&lt;br /&gt;
4. The &quot;/r:n&quot; option specifies the maximum number of retries. By default it is set up&lt;br /&gt;
to 100.&lt;br /&gt;
&lt;br /&gt;
5. The &quot;/w:n&quot; option specifies the time in seconds to wait between two retries.&lt;br /&gt;
By default it is set up to 30 seconds.&lt;br /&gt;
&lt;br /&gt;
6. The &quot;/log:filename&quot; option allows to redirect the console messages to a new file.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Note&lt;/b&gt;: You can use /purge option as it enables the deletion of the files and directories fromt he destination tree which do not exist in the source one.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Post-Migration Activities:&lt;/b&gt;&lt;br /&gt;
===================&lt;br /&gt;
1. Analyse the emcopy log files that have been generated and run ‘Beyond Compare’ on source server to compare the directories copied&lt;br /&gt;
&lt;br /&gt;
Download Beyond Compare link: http://www.filehippo.com/download_beyond_compare/&lt;br /&gt;
&lt;br /&gt;
2. Right- click &amp;gt; Properties on the source and destination folders to check that windows can see the same amount of files and folders.&lt;br /&gt;
&lt;br /&gt;
3. Check NTFS permissions at each share have been brought across by EMCopy&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Useful EMC Primus:&lt;/b&gt;&lt;br /&gt;
===============&lt;br /&gt;
1. emc245596 - &quot;EMCOPY 4.0x shows multiple errors like &#39;Trying to DELETE due to copy &lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;ABORT&#39; and &#39;DELETED due to copy ABORT&#39;&quot;&lt;br /&gt;
2. emc288299 - &quot;EMCOPY 4.xx shows error &quot;DELETION FAILED&quot;&quot;&lt;br /&gt;
3. emc224742 - &quot;Warning EMCOPY and /z /d and /de command line switches&quot;&lt;br /&gt;
4. emc135845 - &quot;EMCopy data migration replaces UNIX primary group permission with default Windows Domain Users group when the /o switch is used in the EMCopy command.&quot;&lt;br /&gt;
5. emc195882 - &quot;Failure using EMCopy 3.01: &#39;Error (1203): No network provider accepted the given network path.&#39;&quot;&lt;br /&gt;
6. emc46968 - &quot;EMCopy utility fails with error &#39;Security Descriptor Error: Unable to set SD&#39; while migrating data from source to target server.&quot;&lt;br /&gt;
7. emc254769 - &quot;&#39;Unable to set access time to&#39; when copying files with EMCOPY&quot;&lt;br /&gt;
8. emc70946 - &quot;Emcopy fails to work as designed when using /purge command.&quot;&lt;br /&gt;
9. emc121242 -&quot;EMCOPY fails to copy all files to destination when there is a mixture of long filenames and short filenames&quot;&lt;br /&gt;
10. emc64705 - &quot;Celerra Best Practices recommends using EMCopy to backup the customer ACLs.&quot;</content><link rel='replies' type='application/atom+xml' href='http://hippodata.blogspot.com/feeds/4452533328943077080/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3833586449746557798/4452533328943077080' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/4452533328943077080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/4452533328943077080'/><link rel='alternate' type='text/html' href='http://hippodata.blogspot.com/2013/05/file-based-migration-using-emcopy.html' title='File-Based Migration using EMCopy'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3833586449746557798.post-6564976064048966240</id><published>2013-05-12T12:57:00.001-04:00</published><updated>2013-05-17T15:19:04.232-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="comparison"/><category scheme="http://www.blogger.com/atom/ns#" term="Defined Function"/><category scheme="http://www.blogger.com/atom/ns#" term="explicit"/><category scheme="http://www.blogger.com/atom/ns#" term="implicit"/><category scheme="http://www.blogger.com/atom/ns#" term="Integers"/><category scheme="http://www.blogger.com/atom/ns#" term="interpreter"/><category scheme="http://www.blogger.com/atom/ns#" term="lab"/><category scheme="http://www.blogger.com/atom/ns#" term="modules"/><category scheme="http://www.blogger.com/atom/ns#" term="perl"/><category scheme="http://www.blogger.com/atom/ns#" term="Perl Programming"/><category scheme="http://www.blogger.com/atom/ns#" term="practicals"/><category scheme="http://www.blogger.com/atom/ns#" term="scalar"/><category scheme="http://www.blogger.com/atom/ns#" term="script"/><category scheme="http://www.blogger.com/atom/ns#" term="String Operators"/><title type='text'>Perl practicals - Lab 1</title><content type='html'>&lt;br /&gt;
&lt;b&gt;Learning perl by practicing&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:1&lt;/b&gt; Find Perl Interpreter&lt;br /&gt;
&lt;br /&gt;
hippo-MacBook-Pro:~ hippo$ which perl&lt;br /&gt;
/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:2.a&lt;/b&gt; Implicit Execution&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
Every script starts with shebang:&quot;#!&quot; which is not read as a comment. First line is also a place where you put your interpreter which in this case is perl.&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl print &quot;Perl Programming\n&quot;;&lt;br /&gt;
&lt;br /&gt;
Make Perl Script Executable: chmod +x perl_script.pl&lt;br /&gt;
&lt;br /&gt;
hippo-MacBook-Pro:~ hippo$ chmod +x perl_script.pl&lt;br /&gt;
hippo-MacBook-Pro:~ hippo$ ./perl_script.pl&lt;br /&gt;
Perl Programming&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:2.b&lt;/b&gt; Explicit Execution&lt;br /&gt;
&lt;br /&gt;
print &quot;Perl Programming\n&quot;;&lt;br /&gt;
&lt;br /&gt;
Make Perl Script Executable: chmod +x perl_script.pl&lt;br /&gt;
&lt;br /&gt;
hippo-MacBook-Pro:~ hippo$ chmod +x perl_script.pl&lt;br /&gt;
hippo-MacBook-Pro:~ hippo$ perl perl_script.pl&lt;br /&gt;
Perl Programming&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:3&lt;/b&gt; Simple Perl script&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl # print &quot;Perl Programming Tutorial\n&quot;;&lt;br /&gt;
&lt;br /&gt;
hippo-MacBook-Pro:~ hippo$ ./simple_perl_script.pl&lt;br /&gt;
Perl Programming Tutorial&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:4&lt;/b&gt; Current path to Perl modules&lt;br /&gt;
&lt;br /&gt;
List all available current paths to perl modules:&lt;br /&gt;
&lt;br /&gt;
perl -e &#39;print &quot;@INC&quot; . &quot;\n&quot;;&#39;&lt;br /&gt;
&lt;br /&gt;
hippo-MacBook-Pro:~ hippo$ perl -e &#39;print &quot;@INC&quot; . &quot;\n&quot;;&#39;&lt;br /&gt;
/Library/Perl/5.12/darwin-thread-multi-2level /Library/Perl/5.12 /Network/Library/Perl/5.12/darwin-thread-multi-2level /Network/Library/Perl/5.12 /Library/Perl/Updates/5.12.4 /System/Library/Perl/5.12/darwin-thread-multi-2level /System/Library/Perl/5.12 /System/Library/Perl/Extras/5.12/darwin-thread-multi-2level /System/Library/Perl/Extras/5.12&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:5&lt;/b&gt; Variables&lt;br /&gt;
&lt;br /&gt;
$ - Scalar Variable&lt;br /&gt;
% - Hash Variable&lt;br /&gt;
@ - Array&lt;br /&gt;
&amp;amp; - Subroutines&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:6&lt;/b&gt; Using Perl default variable $_&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
$_ = &quot;Perl Programming default variable.\n&quot;;&lt;br /&gt;
print;&lt;br /&gt;
&lt;br /&gt;
hippo-MacBook-Pro:~ hippo$ ./perl_default_variable.pl&lt;br /&gt;
Perl Programming default variable.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:7&lt;/b&gt; Defined Function&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
# declare perl scalar do but not define value&lt;br /&gt;
$perl_scalar;&lt;br /&gt;
#we can use conditional operator &#39;?:&#39; to test perl defined funtion&lt;br /&gt;
$variable = defined($perl_scalar) ? &quot;Variable \$perl_scalar is Defined!&quot;&lt;br /&gt;
&amp;nbsp;: &quot;Variable \$perl_scalar is NOT Defined!&quot;;&lt;br /&gt;
print $variable.&quot;\n&quot;;&lt;br /&gt;
&lt;br /&gt;
# declare perl scalar with value&lt;br /&gt;
$perl_scalar=&quot;perl&quot;;&lt;br /&gt;
$variable = defined($perl_scalar) ? &quot;Variable \$perl_scalar is Defined!&quot;&lt;br /&gt;
: &quot;Variable \$perl_scalar is NOT Defined!&quot;;&lt;br /&gt;
print $variable.&quot;\n&quot;;&lt;br /&gt;
&lt;br /&gt;
hippo-MacBook-Pro:~ hippo$ ./defined.pl&lt;br /&gt;
Variable $perl_scalar is NOT Defined!&lt;br /&gt;
Variable $perl_scalar is Defined!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:8 &lt;/b&gt;Scalar variable&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
#Scalars hold just single data type: string, number or perl reference&lt;br /&gt;
#Scalars definition in Perl&lt;br /&gt;
$scalar_number = -5;&lt;br /&gt;
$scalar_string1 = &quot;In PERL Scalars are always referenced with \x24 in front of each variable name. &quot;;&lt;br /&gt;
$scalar_string2 = &quot;5 items&quot;;&lt;br /&gt;
#Undescore can be use for big numbers&lt;br /&gt;
$scalar_milion = 1_000_000;&lt;br /&gt;
#Print scalar values&lt;br /&gt;
print $scalar_number.&quot;\n&quot;;&lt;br /&gt;
print $scalar_string1.&quot;\n&quot;;&lt;br /&gt;
print $scalar_string2.&quot;\n&quot;;&lt;br /&gt;
print $scalar_milion.&quot;\n&quot;;&lt;br /&gt;
#perl scalar addition&lt;br /&gt;
print $scalar_number + $scalar_milion.&quot;\n&quot;;&lt;br /&gt;
&lt;br /&gt;
hippo-MacBook-Pro:~ hippo$ ./perl_scalars.pl&lt;br /&gt;
-5&lt;br /&gt;
In PERL Scalars are always referenced with $ in front of each variable name.&lt;br /&gt;
5 items&lt;br /&gt;
1000000&lt;br /&gt;
999995&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:9 &lt;/b&gt;Single-Quoted Strings&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#Single-Quoted scalar strings&lt;br /&gt;
$scalar_string1=&#39;perl&#39;;&lt;br /&gt;
print &quot;String 1: &quot;.$scalar_string1.&quot;\n&quot;;&lt;br /&gt;
$scalar_string2=&#39;#!/usr/bin/perl&#39;;&lt;br /&gt;
print &quot;String 2: &quot;.$scalar_string2.&quot;\n&quot;;&lt;br /&gt;
$scalar_string3=&#39;Perl&lt;br /&gt;
Programming&lt;br /&gt;
Tutorial&#39;;&lt;br /&gt;
print &quot;String 3: &quot;.$scalar_string3.&quot;\n&quot;;&lt;br /&gt;
$scalar_string4=&#39;Perl\n&#39;;&lt;br /&gt;
print &quot;String 4: &quot;.$scalar_string4.&quot;\n&quot;;&lt;br /&gt;
$scalar_string5=&#39;\&#39;\&#39;\\&#39;;&lt;br /&gt;
print &quot;String 5: &quot;.$scalar_string5.&quot;\n&quot;;&lt;br /&gt;
$scalar_string6=&#39;&#39;;&lt;br /&gt;
print &quot;String 6: &quot;.$scalar_string6.&quot;\n&quot;;&lt;br /&gt;
$scalar_string7=&#39;I\&#39;m reading Perl Programming Tutorial&#39;;&lt;br /&gt;
print &quot;String 7: &quot;.$scalar_string7.&quot;\n&quot;;&lt;br /&gt;
&lt;br /&gt;
hippo-MacBook-Pro:~ hippo$ ./perl_default_variable.pl&lt;br /&gt;
String 1: perl&lt;br /&gt;
String 2: #!/usr/bin/perl&lt;br /&gt;
String 3: Perl&lt;br /&gt;
Programming&lt;br /&gt;
Tutorial&lt;br /&gt;
String 4: Perl\n&lt;br /&gt;
String 5: &#39;&#39;\&lt;br /&gt;
String 6:&lt;br /&gt;
String 7: I&#39;m reading Perl Programming Tutorial&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:10 &lt;/b&gt;Double-Quoted Strings&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
#Double-Quoted scalar strings&lt;br /&gt;
$scalar_string1=&quot;perl&quot;;&lt;br /&gt;
print &quot;String 1: &quot;.$scalar_string1.&quot;\n&quot;;&lt;br /&gt;
$scalar_string2=&quot;#!/usr/bin/perl&quot;;&lt;br /&gt;
print &quot;String 2: &quot;.$scalar_string2.&quot;\n&quot;;&lt;br /&gt;
$scalar_string3=&quot;Perl&lt;br /&gt;
Programming&lt;br /&gt;
Tutorial&quot;;&lt;br /&gt;
print &quot;String 3: &quot;.$scalar_string3.&quot;\n&quot;;&lt;br /&gt;
$scalar_string4=&quot;Perl\n&quot;;&lt;br /&gt;
print &quot;String 4: &quot;.$scalar_string4.&quot;\n&quot;;&lt;br /&gt;
$scalar_string5=&quot;\&#39;\&#39;\\\&quot;&quot;;&lt;br /&gt;
print &quot;String 5: &quot;.$scalar_string5.&quot;\n&quot;;&lt;br /&gt;
$scalar_string6=&quot;&quot;;&lt;br /&gt;
print &quot;String 6: &quot;.$scalar_string6.&quot;\n&quot;;&lt;br /&gt;
# add &quot;!&quot; ASCII character in octal form !=041&lt;br /&gt;
$scalar_string7=&quot;I\&#39;m reading Perl Programming Tutorial \041&quot;;&lt;br /&gt;
print &quot;String 7: &quot;.$scalar_string7.&quot;\n&quot;;&lt;br /&gt;
# add &quot;@&quot; ASCII character in hexadecimal form @=40&lt;br /&gt;
&lt;br /&gt;
hippo-MacBook-Pro:~ hippo$ ./perl_strings.pl&lt;br /&gt;
String 1: perl&lt;br /&gt;
String 2: #!/usr/bin/perl&lt;br /&gt;
String 3: Perl&lt;br /&gt;
Programming&lt;br /&gt;
Tutorial&lt;br /&gt;
String 4: Perl&lt;br /&gt;
&lt;br /&gt;
String 5: &#39;&#39;\&quot;&lt;br /&gt;
String 6:&lt;br /&gt;
String 7: I&#39;m reading Perl Programming Tutorial !&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:11&lt;/b&gt; String Operators&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#Scalar string Operators&lt;br /&gt;
$scalar_string1=&quot;pe&quot;.&quot;rl&quot;;&lt;br /&gt;
print &quot;String 1: &quot;.$scalar_string1.&quot;\n&quot;;&lt;br /&gt;
$scalar_string2=&quot;Perl Programming Tutorial &quot; x (1+1);&lt;br /&gt;
print &quot;String 2: &quot;.$scalar_string2.&quot;\n&quot;;&lt;br /&gt;
$scalar_string3=&quot;3&quot;.&quot;\ttabs&quot; x 3;&lt;br /&gt;
print &quot;String 3: &quot;.$scalar_string3.&quot;\n&quot;;&lt;br /&gt;
$scalar_string4=&quot;Perl\x20&quot;.&#39;Programming &#39;.&quot;Tutorial&quot;;&lt;br /&gt;
print &quot;String 4: &quot;.$scalar_string4.&quot;\n&quot;;&lt;br /&gt;
$scalar_string5=9x5;&lt;br /&gt;
print &quot;String 5: &quot;.$scalar_string5.&quot;\n&quot;;&lt;br /&gt;
&lt;br /&gt;
hippo-MacBook-Pro:~ hippo$ ./perl_strings.pl&lt;br /&gt;
String 1: perl&lt;br /&gt;
String 2: Perl Programming Tutorial Perl Programming Tutorial&lt;br /&gt;
String 3: 3&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;tabs&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;tabs&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;tabs&lt;br /&gt;
String 4: Perl Programming Tutorial&lt;br /&gt;
String 5: 99999&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:12&lt;/b&gt; Non-Decimal Integers&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#perl binary integer&lt;br /&gt;
$hash_binary_integer = 0b10000;&lt;br /&gt;
#perl octal integer&lt;br /&gt;
$hash_octal_integer = 020;&lt;br /&gt;
#perl hexadecimal integer&lt;br /&gt;
$hash_hexadecimal_integer1 = 0x10;&lt;br /&gt;
$hash_hexadecimal_integer2 = 0x124c_78_aa;&lt;br /&gt;
&lt;br /&gt;
print $hash_octal_integer.&quot;\n&quot;;&lt;br /&gt;
print $hash_binary_integer.&quot;\n&quot;;&lt;br /&gt;
print $hash_hexadecimal_integer1.&quot;\n&quot;;&lt;br /&gt;
print $hash_hexadecimal_integer2.&quot;\n&quot;;&lt;br /&gt;
&lt;br /&gt;
hippo-MacBook-Pro:~ hippo$ ./non_decimal_integer.pl&lt;br /&gt;
16&lt;br /&gt;
16&lt;br /&gt;
16&lt;br /&gt;
307001514&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:13&lt;/b&gt; Scalar Constant Variable&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
$ordinary_scalar = 5;&lt;br /&gt;
$ordinary_scalar = 10;&lt;br /&gt;
&lt;br /&gt;
print $ordinary_scalar.&quot;\n&quot;;&lt;br /&gt;
&lt;br /&gt;
#perl constant declaration&lt;br /&gt;
*SCALAR_CONSTANT = 5;&lt;br /&gt;
$SCALAR_CONSTANT = 10;&lt;br /&gt;
&lt;br /&gt;
hippo-MacBook-Pro:~ hippo$ ./perl_constant.pl&lt;br /&gt;
10&lt;br /&gt;
Modification of a read-only value attempted at ./perl_constant.pl line 10.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step:14&lt;/b&gt; String And Numeric comparison Operators&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
# String comparison&lt;br /&gt;
if ( &#39;Perl&#39; eq &#39;perl&#39; ) {&lt;br /&gt;
print &quot;TRUE\n&quot;;&lt;br /&gt;
} else {&lt;br /&gt;
print &quot;FALSE\n&quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Numeric comparison&lt;br /&gt;
if ( &#39;2.4&#39; != &#39;2.6&#39; ) {&lt;br /&gt;
print &quot;TRUE\n&quot;;&lt;br /&gt;
} else {&lt;br /&gt;
print &quot;FALSE\n&quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
hippo-MacBook-Pro:~ hippo$ ./comparision.pl&lt;br /&gt;
FALSE&lt;br /&gt;
TRUE&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://hippodata.blogspot.com/feeds/6564976064048966240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3833586449746557798/6564976064048966240' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/6564976064048966240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/6564976064048966240'/><link rel='alternate' type='text/html' href='http://hippodata.blogspot.com/2013/05/perl-practicals-lab-1.html' title='Perl practicals - Lab 1'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3833586449746557798.post-5298380702382918653</id><published>2013-05-12T12:07:00.002-04:00</published><updated>2013-05-17T15:19:19.270-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="local variables"/><category scheme="http://www.blogger.com/atom/ns#" term="parameters"/><category scheme="http://www.blogger.com/atom/ns#" term="perl"/><category scheme="http://www.blogger.com/atom/ns#" term="programs"/><category scheme="http://www.blogger.com/atom/ns#" term="returning values"/><category scheme="http://www.blogger.com/atom/ns#" term="scripting"/><category scheme="http://www.blogger.com/atom/ns#" term="snippets"/><category scheme="http://www.blogger.com/atom/ns#" term="sub"/><category scheme="http://www.blogger.com/atom/ns#" term="subroutines"/><title type='text'>Perl Scripting - Part 3</title><content type='html'>&lt;br /&gt;
&lt;b&gt;Please click &lt;a href=&quot;http://hippodata.blogspot.com/2013/05/perl-scripting-part-2.html&quot;&gt;here for part-2&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Subroutines:&lt;/b&gt;&lt;br /&gt;
=========&lt;br /&gt;
-Like any good programming langauge Perl allows the user to define their own functions, called subroutines.&lt;br /&gt;
-They may be placed anywhere in your program but it&#39;s probably best to put them all at the beginning or all at the end.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
A subroutine has the form:&lt;br /&gt;
&lt;br /&gt;
sub mysubroutine&lt;br /&gt;
{&lt;br /&gt;
print &quot;Not a very interesting routine\n&quot;;&lt;br /&gt;
print &quot;This does the same thing every time\n&quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-Regardless of any parameters that we may want to pass to it.&lt;br /&gt;
-All of the following will work to call this subroutine.&lt;br /&gt;
&lt;br /&gt;
Notice that a subroutine is called with an “&amp;amp;” character in front of the name:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;mysubroutine; # Call the subroutine&lt;br /&gt;
&lt;br /&gt;
&amp;amp;mysubroutine($_); # Call it with a parameter&lt;br /&gt;
&lt;br /&gt;
&amp;amp;mysubroutine(1+2, $_); # Call it with two parameters&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Parameters:&lt;/b&gt;&lt;br /&gt;
=========&lt;br /&gt;
-In the above case the parameters are acceptable but ignored.&lt;br /&gt;
-When the subroutine is called, any parameters are passed as a list in the special @_ list array variable.&lt;br /&gt;
-This variable has absolutely nothing to do with the $_ scalar variable.&lt;br /&gt;
-The following subroutine merely prints out the list that it was called with. It is followed by a couple of examples of its use.&lt;br /&gt;
&lt;br /&gt;
sub printargs&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;print &quot;@_\n&quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;amp;printargs(&quot;perly&quot;, &quot;king&quot;); # Example prints &quot;perly king&quot;&lt;br /&gt;
&amp;amp;printargs(&quot;frog&quot;, &quot;and&quot;, &quot;toad&quot;); # Prints &quot;frog and toad&quot;&lt;br /&gt;
&lt;br /&gt;
-Just like any other list array, the individual elements of @_ can be accessed with the square bracket notation:&lt;br /&gt;
&lt;br /&gt;
sub printfirsttwo&lt;br /&gt;
{&lt;br /&gt;
print &quot;Your first argument was $_[0]\n&quot;;&lt;br /&gt;
print &quot;and $_[1] was your second\n&quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-Again it should be stressed that the indexed scalars $_[0] and $_[1] and so on have nothing to with the scalar $_ which can also be used without fear of a clash.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Returning Values:&lt;/b&gt;&lt;br /&gt;
=============&lt;br /&gt;
-Result of a subroutine is always the last thing evaluated.&lt;br /&gt;
-This subroutine returns the maximum of two input parameters.&lt;br /&gt;
&lt;br /&gt;
An example of its use follows.&lt;br /&gt;
&lt;br /&gt;
sub maximum&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if ($_[0] &amp;gt; $_[1])&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $_[0];&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $_[1];&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$biggest = &amp;amp;maximum(37, 24); # Now $biggest is 37&lt;br /&gt;
&lt;br /&gt;
-The &amp;amp;printfirsttwo subroutine above also returns a value, in this case 1. This is because the last thing that subroutine did was a print statement and the result of a successful print statement is always 1.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Local Variables:&lt;/b&gt;&lt;br /&gt;
============&lt;br /&gt;
-The @_ variable is local to the current subroutine, and so of course are $_[0], $_[1], $_[2], and so on.&lt;br /&gt;
&lt;br /&gt;
-Other variables can be made local too, and this is useful if we want to start altering the input parameters.&lt;br /&gt;
&lt;br /&gt;
-The following subroutine tests to see if one string is inside another, spaces not withstanding.&lt;br /&gt;
&lt;br /&gt;
An example follows.&lt;br /&gt;
&lt;br /&gt;
sub inside&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
local($a, $b); # Make local variables&lt;br /&gt;
($a, $b) = ($_[0], $_[1]); # Assign values&lt;br /&gt;
$a =~ s/ //g; # Strip spaces from&lt;br /&gt;
$b =~ s/ //g; # local variables&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $a = $b;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $b = $a; &amp;nbsp; &amp;nbsp; = &amp;nbsp;What result they will be?&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# $a = $_[1];&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# $b = $_[0];&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print &quot;the first element is: $a\n&quot;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print &quot;the second element is: $b\n&quot;;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;amp;inside(&quot;lemon&quot;, &quot;dole money&quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Please click&lt;a href=&quot;http://hippodata.blogspot.com/2013/05/perl-practicals-lab-1.html&quot;&gt; here for perl practicals - Lab1&lt;/a&gt;&lt;/b&gt;</content><link rel='replies' type='application/atom+xml' href='http://hippodata.blogspot.com/feeds/5298380702382918653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3833586449746557798/5298380702382918653' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/5298380702382918653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/5298380702382918653'/><link rel='alternate' type='text/html' href='http://hippodata.blogspot.com/2013/05/perl-scripting-part-3.html' title='Perl Scripting - Part 3'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3833586449746557798.post-511128379007716823</id><published>2013-05-12T11:57:00.001-04:00</published><updated>2013-05-17T15:19:42.860-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".pl"/><category scheme="http://www.blogger.com/atom/ns#" term="/usr/bin/perl"/><category scheme="http://www.blogger.com/atom/ns#" term="chmod"/><category scheme="http://www.blogger.com/atom/ns#" term="cpan"/><category scheme="http://www.blogger.com/atom/ns#" term="hello world"/><category scheme="http://www.blogger.com/atom/ns#" term="introduction"/><category scheme="http://www.blogger.com/atom/ns#" term="perl"/><category scheme="http://www.blogger.com/atom/ns#" term="program"/><category scheme="http://www.blogger.com/atom/ns#" term="scripting"/><category scheme="http://www.blogger.com/atom/ns#" term="snippet"/><title type='text'>Perl - Introduction</title><content type='html'>Ever wonder what&#39;s the starting point for learning any scripting for automating your environment? Well, this can be your place to start learning industry&#39;s one of the most powerful scripting tool &#39;perl&#39;. Make sure you follow all the related posts and practice more.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;Overview:&lt;/b&gt;&lt;br /&gt;
========&lt;br /&gt;
-Perl fits in between the C/C++ programming languages and shell level utilities like awk, grep and sed.&lt;br /&gt;
-Perl beats shell programming languages in speed and beats C/C++ in ease of use.&lt;br /&gt;
-Perl is quite high level with “dense” and portable codes with the following attributes:&lt;br /&gt;
-Faster to write and read&lt;br /&gt;
-Faster to debug&lt;br /&gt;
-Easy to maintain.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Perl Popularity:&lt;/b&gt;&lt;br /&gt;
============&lt;br /&gt;
-Just like many popular tools, the creator of perl released it to the Usenet community.&lt;br /&gt;
-Users of the early perl gave feedback and made requests to the creator.&lt;br /&gt;
-Perl grew in features as well as popularity.&lt;br /&gt;
-Perl was initially on Unix systems, and it is now available on nearly all systems.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;How to run a simple perl program?&lt;/b&gt;&lt;br /&gt;
==========================&lt;br /&gt;
-A perl program can be invoked by either execute it directly&lt;br /&gt;
-Or pass the source code to the perl interpreter.&lt;br /&gt;
-The first two characters in a shell program “#!” tells the computer what to use to execute the rest of the program.&lt;br /&gt;
-Perl is typically installed:&lt;br /&gt;
&amp;nbsp;/usr/bin/perl or /usr/local/bin/perl.&lt;br /&gt;
-If not, you need to find out and specify it in the first line of your perl code.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Snippet:&lt;/b&gt;&lt;br /&gt;
----------&lt;br /&gt;
unix&amp;gt;&lt;br /&gt;
unix&amp;gt; cat hello.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
print &quot;Hello World!\n&quot;;&lt;br /&gt;
&lt;br /&gt;
unix&amp;gt; ls -l hello.pl&lt;br /&gt;
-rw-r--r-- &amp;nbsp;1 hippo users 4 May &amp;nbsp;8 2:52 hello.pl&lt;br /&gt;
&lt;br /&gt;
unix&amp;gt; hello.pl&lt;br /&gt;
hello.pl: Permission denied.&lt;br /&gt;
&lt;br /&gt;
unix&amp;gt; perl hello.pl&lt;br /&gt;
Hello World!&lt;br /&gt;
&lt;br /&gt;
unix&amp;gt; chmod +x hello.pl&lt;br /&gt;
unix&amp;gt; ls -l hello.pl&lt;br /&gt;
-rwxr-xr-x &amp;nbsp;1 sun users 4 May 12 2:52 hello.pl&lt;br /&gt;
&lt;br /&gt;
unix&amp;gt; hello.pl&lt;br /&gt;
Hello World!&lt;br /&gt;
unix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Turn on warning:&lt;/b&gt;&lt;br /&gt;
=============&lt;br /&gt;
-By default, perl does not warn you of suspicious coding.&lt;br /&gt;
-To run a perl program with warning on, use the one of the two forms:  &lt;br /&gt;
&lt;br /&gt;
% perl –w perl_prog  &lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl –w&lt;br /&gt;
require 5.001; &lt;br /&gt;
&lt;br /&gt;
-The second line indicates which version of perl the program expects.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Help:&lt;/b&gt;&lt;br /&gt;
====&lt;br /&gt;
-Some websites for you to browse: &lt;br /&gt;
http://www.cpan.org &lt;br /&gt;
http://www.perl.com&lt;br /&gt;
-You can simply google for any questions you may have, and you have a good chance of getting your answers.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Please click &lt;a href=&quot;http://hippodata.blogspot.com/2013/05/perl-scripting-part-1.html&quot;&gt;here for Part-1&lt;/a&gt;&lt;/b&gt;</content><link rel='replies' type='application/atom+xml' href='http://hippodata.blogspot.com/feeds/511128379007716823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3833586449746557798/511128379007716823' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/511128379007716823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/511128379007716823'/><link rel='alternate' type='text/html' href='http://hippodata.blogspot.com/2013/05/perl-introduction.html' title='Perl - Introduction'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3833586449746557798.post-5942878325559476566</id><published>2013-05-12T11:42:00.003-04:00</published><updated>2013-05-17T15:19:57.287-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="binding"/><category scheme="http://www.blogger.com/atom/ns#" term="constructs"/><category scheme="http://www.blogger.com/atom/ns#" term="functions"/><category scheme="http://www.blogger.com/atom/ns#" term="hash"/><category scheme="http://www.blogger.com/atom/ns#" term="hashing"/><category scheme="http://www.blogger.com/atom/ns#" term="hashtable"/><category scheme="http://www.blogger.com/atom/ns#" term="modifiers"/><category scheme="http://www.blogger.com/atom/ns#" term="pattern"/><category scheme="http://www.blogger.com/atom/ns#" term="perl"/><category scheme="http://www.blogger.com/atom/ns#" term="pl"/><category scheme="http://www.blogger.com/atom/ns#" term="printing array"/><category scheme="http://www.blogger.com/atom/ns#" term="programs"/><category scheme="http://www.blogger.com/atom/ns#" term="scripting"/><category scheme="http://www.blogger.com/atom/ns#" term="snippet"/><category scheme="http://www.blogger.com/atom/ns#" term="subroutines"/><title type='text'>Perl Scripting: Part 2</title><content type='html'>&lt;br /&gt;
&lt;b&gt;(Please click &lt;a href=&quot;http://hippodata.blogspot.com/2013/05/perl-scripting-part-1.html&quot;&gt;here for part - 1&lt;/a&gt;)&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Key Concepts:&lt;/b&gt;&lt;br /&gt;
==========&lt;br /&gt;
Associate Arrays (Hash Arrays)&lt;br /&gt;
File Input and output&lt;br /&gt;
Strings&lt;br /&gt;
Subroutines&lt;br /&gt;
Running external programs&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;Hash arrays:&lt;/b&gt;&lt;br /&gt;
=========&lt;br /&gt;
-Hash arrays are also called associate arrays.&lt;br /&gt;
-Instead of using “@” and “[ ]”, “%” and “{ }” are used for hash arrays.&lt;br /&gt;
-Hash arrays are used to find the value based on a key. A key is used to retrieve the value associated with key.&lt;br /&gt;
-To access an element from an hash array:  &lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
$h_array{key}&lt;br /&gt;
-Perl borrowed associate array from awk.&lt;br /&gt;
-Hashing helps to speed up searching significantly specially for large amount of data.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Hashing and hash function:&lt;/b&gt;&lt;br /&gt;
====================&lt;br /&gt;
-Hashing is a method for directly referencing records in a table by doing arithmetic transformations on keys into table addresses.&lt;br /&gt;
-If keys are distinct integers from 1 to N, then the records can be stored in the table by the key position.&lt;br /&gt;
-In this case, the data can be retrieved directly from the table using the key.&lt;br /&gt;
-The first step in using hashing is to transform the search key into a table address.&lt;br /&gt;
-The function or method used to convert the key into table address is the hash function.&lt;br /&gt;
-Ideal hash functions should map different keys into different table addresses.&lt;br /&gt;
-If different keys hash into the same address, then hash collision happens.&lt;br /&gt;
Good hashing functions produce fewer collisions.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Array and Hash comparison:&lt;/b&gt;&lt;br /&gt;
=====================&lt;br /&gt;
Access Data From Array:&lt;br /&gt;
-Start from &amp;nbsp;index 0&lt;br /&gt;
-for each record, compare the key to that of the record.&lt;br /&gt;
-If match then access the data: retrieve or update.&lt;br /&gt;
&lt;br /&gt;
index&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;data&lt;br /&gt;
-----&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;----&lt;br /&gt;
0&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;record0&lt;br /&gt;
1&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;record1&lt;br /&gt;
2&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;record2&lt;br /&gt;
3&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;record3&lt;br /&gt;
4&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;record4&lt;br /&gt;
5&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;record5&lt;br /&gt;
&lt;br /&gt;
Access Data From Hash:&lt;br /&gt;
-convert the key to hash table index.&lt;br /&gt;
-Get the first record from the table index.&lt;br /&gt;
-Search thru the list until found.&lt;br /&gt;
&lt;br /&gt;
hashtable&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
---------&lt;br /&gt;
0&lt;br /&gt;
1 --------&amp;gt; record1a&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4 --------&amp;gt; record4a ------&amp;gt; record4b&lt;br /&gt;
5&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Hash Function:&lt;/b&gt;&lt;br /&gt;
===========&lt;br /&gt;
-Most of the time, the search key is a string.&lt;br /&gt;
-When converting a string into a hash table index, the following factors must be considered:&lt;br /&gt;
a. Speed of the function&lt;br /&gt;
b. Index less than zero&lt;br /&gt;
c. Index larger than table size&lt;br /&gt;
d. Frequency of collision&lt;br /&gt;
e. Since the names used for hash typically do not have limits, complex computation for a hash function may be too expensive.&lt;br /&gt;
f. The goal of the hash function is to minimize collision, but in practice, collisions always happen.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Closed Hash:&lt;/b&gt;&lt;br /&gt;
===========&lt;br /&gt;
-Closed hashing is used when the number of entries is known and it is less than the size of the hash table.&lt;br /&gt;
-Closed hash is also referred to as open-addressing (address, not hash. Do not let the terms confuse you).&lt;br /&gt;
-The simplest close hash (open addressing) is called linear probing.&lt;br /&gt;
-The way close hash works (for searching):&lt;br /&gt;
a. Use hash function to get the table index.&lt;br /&gt;
b. If the entry at the table index is the one then search is successful.&lt;br /&gt;
c. If the entry at the table index is empty, then search not found.&lt;br /&gt;
d. If the entry at the table index is not what is being searched, continue to search the next address.&lt;br /&gt;
e. Continue to search until an empty entry, a match or end of the table.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Open Hash:&lt;/b&gt;&lt;br /&gt;
==========&lt;br /&gt;
-Open hashing is also called separate chaining.&lt;br /&gt;
-When multiple entries hash to the same table index, a linked list is built to keep all the entries.&lt;br /&gt;
-Under open hash, the search within the table is eliminated.&lt;br /&gt;
-If the table size is H, entries will be distributed evenly to the H linked lists if the has function is good.&lt;br /&gt;
-Compare a hash table with size H and a single linked list, the search using a hash table can be close to H times faster (not exactly due to the hash function overhead and the imperfection of the hash function).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Hash array access: existence&lt;/b&gt;&lt;br /&gt;
====================&lt;br /&gt;
The function exists can be used to check the existence of a given key: &lt;br /&gt;
&lt;br /&gt;
if (exists $books{“cats”}) {  &amp;nbsp; &amp;nbsp;print “Yes, there is an entry for cats!\n”; }&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Hash array access: assign/overwrite&lt;/b&gt;&lt;br /&gt;
===========================&lt;br /&gt;
-If an entry does not exist, it can be assigned: $name{“john”} = “tall guy”; &lt;br /&gt;
-If an entry exists already, it will be overwritten.&lt;br /&gt;
-A hash array can be copied to another one:&lt;br /&gt;
%new_hash = %old_hash; %inverse_hash = reverse %old_hash; &lt;br /&gt;
-A hash array can also be assigned name/value pairs directly:&lt;br /&gt;
%name_hash = (“key1”, 12, “key2”, 13, “key3”, 14);&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Hash array access : name/value pair (=&amp;gt;)&lt;/b&gt;&lt;br /&gt;
==============================&lt;br /&gt;
-When assign name and value pairs to a hash array, it is difficult to tell which entry is key and which is value.&lt;br /&gt;
-Perl provides an easy way to represent name value pairs:&lt;br /&gt;
%names = (  &amp;nbsp; &amp;nbsp;“key1” =&amp;gt; “value1”,  &amp;nbsp; &amp;nbsp;“key2”=&amp;gt; “value2” )&lt;br /&gt;
-This way, it is very clear which entry is the name and which entry is the value.&lt;br /&gt;
-The big arrow (=&amp;gt;) can be used to replace a comma. It is also called fat comma.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Hash array access: delete&lt;/b&gt;&lt;br /&gt;
===================&lt;br /&gt;
-The delete function can be used to remove a given key.&lt;br /&gt;
-If there is no such key to be deleted, there will not be any warning or error.&lt;br /&gt;
Syntax: delete $h_array{“key”} ;&lt;br /&gt;
-It is not he same as storing undef into that hash element.&lt;br /&gt;
-The function exist returns true if a key value is “undef”.&lt;br /&gt;
-The function exist returns false if a key is deleted.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Hash array access: keys and values&lt;/b&gt;&lt;br /&gt;
==========================&lt;br /&gt;
-Hash array supports two functions:&lt;br /&gt;
a. keys: get the entire keys at once&lt;br /&gt;
b. values: get the entire values at once.&lt;br /&gt;
&lt;br /&gt;
-Both keys and values return empty lists if no elements exist.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Snippet:&lt;/b&gt;&lt;br /&gt;
----------&lt;br /&gt;
unix&amp;gt;cat &amp;nbsp; keys_values.pl&lt;br /&gt;
#!/usr/bin/perl &amp;nbsp; -w&lt;br /&gt;
%hash = (&quot;a&quot; =&amp;gt; 1, &quot;b&quot; =&amp;gt; 2, &quot;z&quot;=&amp;gt;4, &quot;x&quot; =&amp;gt;23);&lt;br /&gt;
&lt;br /&gt;
@ks = keys %hash;&lt;br /&gt;
@vs = values %hash;&lt;br /&gt;
&lt;br /&gt;
printf &amp;nbsp; &quot;keys:&quot;;&lt;br /&gt;
printf &amp;nbsp; &quot; %s &quot; x @ks, @ks ;&lt;br /&gt;
printf &amp;nbsp; &quot;\n&quot;;&lt;br /&gt;
printf &amp;nbsp; &quot;values:&quot;;&lt;br /&gt;
printf &amp;nbsp; &quot; %s &quot; x @vs, @vs ;&lt;br /&gt;
printf &amp;nbsp; &quot;\n&quot;;&lt;br /&gt;
snpsemt225:yinglir&amp;gt;keys_values.pl&lt;br /&gt;
keys: a &amp;nbsp;b &amp;nbsp;x &amp;nbsp;z&lt;br /&gt;
values: 1 &amp;nbsp;2 &amp;nbsp;23 &amp;nbsp;4&lt;br /&gt;
unix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;File Handles:&lt;/b&gt;&lt;br /&gt;
=========&lt;br /&gt;
-Variables that represent files are called file handles.&lt;br /&gt;
-File handles do not have any special character ($, @, &amp;amp;).&lt;br /&gt;
-They are typically created as UPPER case variables.&lt;br /&gt;
-All file handles in perl are global. They can not be allocated locally.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;The standard files:&lt;/b&gt;&lt;br /&gt;
=============&lt;br /&gt;
-Before a perl program runs, three standard files are opened:&lt;br /&gt;
STDIN&lt;br /&gt;
STDOUT&lt;br /&gt;
STDERR&lt;br /&gt;
-The &amp;lt; &amp;gt; operator returns one line from standard input. It returns undef when there is no more inputs. &lt;br /&gt;
&lt;br /&gt;
$line = &amp;lt;STDIN&amp;gt;  &lt;br /&gt;
while ($line = &amp;lt;STDIN&amp;gt;) {  &amp;nbsp; &amp;nbsp; &lt;br /&gt;
chomp ($line); &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Open and Close files:&lt;/b&gt;&lt;br /&gt;
===============&lt;br /&gt;
-The “open” and “close” operators work similar to other programming languages:&lt;br /&gt;
open (F1, “filename”); &amp;nbsp;# &amp;nbsp;open “filename” for read with handle F1.&lt;br /&gt;
open(F2, “&amp;gt;filename”); &amp;nbsp;# open “filename” for writing as file handle F2&lt;br /&gt;
open(F3, “&amp;gt;&amp;gt;filename”); # open “filename” for appending .&lt;br /&gt;
close (F1); &amp;nbsp;# close a file handle.&lt;br /&gt;
&lt;br /&gt;
-Open can be used to establish read/write connection to a separate process launched by the OS (on Unix):&lt;br /&gt;
open (F, “ls –l |”); &amp;nbsp;# open a pipe to read from an ls process&lt;br /&gt;
open (F, “| mail $addr”); # open a pipe to write to a mail process.&lt;br /&gt;
&lt;br /&gt;
-A convenient way to exit a program: open(F, $filename) || die “could not open $filename\n” ;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Read data from a file:&lt;/b&gt;&lt;br /&gt;
================&lt;br /&gt;
-In a scalar context, the input operator reads one line at a time.&lt;br /&gt;
$line = &amp;lt;F&amp;gt; ; # reads in a line at a time.&lt;br /&gt;
&lt;br /&gt;
-In an array context, the input operator reads the whole file into the memory as an array of its lines:&lt;br /&gt;
@a = &amp;lt;F&amp;gt; ; # reads the whole file&lt;br /&gt;
&lt;br /&gt;
-The global variable “$/” which is the end-of-line marker (default to \n). Setting this to undef will cause the file to be read in as a single line:&lt;br /&gt;
$/ = undef;&lt;br /&gt;
$all_lines = &amp;lt;F&amp;gt; ; # read the whole file into one string.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Print output:&lt;/b&gt;&lt;br /&gt;
==========&lt;br /&gt;
By default, print uses STDOUT to send the outputs.&lt;br /&gt;
An output file handle can be specified to print: print F “here”, “ comes”, “ the rain!\n”;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Snippet:&lt;/b&gt;&lt;br /&gt;
----------&lt;br /&gt;
#!/usr/bin/perl -w&lt;br /&gt;
$fname = &quot;fileline&quot;;&lt;br /&gt;
$line = &quot;&quot;;&lt;br /&gt;
&amp;nbsp; open (&quot;here&quot;, $fname) or die (&quot;Could not pen $fname\n&quot;);&lt;br /&gt;
&amp;nbsp; while (&amp;lt;here&amp;gt;) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; chomp($_);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; $line = $_;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; print &quot;$line\n&quot;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;}&lt;br /&gt;
&amp;nbsp; &amp;nbsp;close (&quot;here&quot;);&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&lt;b&gt;Printing array:&lt;/b&gt;&lt;br /&gt;
===========&lt;br /&gt;
-Neither print or printf can print arrays directly.&lt;br /&gt;
-printf can be used with a little effort to dump an array content.&lt;br /&gt;
-Note that when array is used in the context of a scalar, it returns the number of elements.&lt;br /&gt;
-“format_str x @ary” can be used to create the format string.&lt;br /&gt;
-“x” is the repetition operator and @ary gives the number of elements.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Snippet:&lt;/b&gt;&lt;br /&gt;
----------&lt;br /&gt;
unix&amp;gt;cat print_array.pl&lt;br /&gt;
#!/usr/bin/perl -w&lt;br /&gt;
my @ary = qw/cat dog pig fish fly/ ;&lt;br /&gt;
my $format = &quot;Array content: \n&quot; . (&quot;%15s \n&quot; x @ary);&lt;br /&gt;
my $ary_n = “”;&lt;br /&gt;
printf STDOUT $format, @ary;&lt;br /&gt;
&lt;br /&gt;
print &quot;Using print:\n&quot;;&lt;br /&gt;
print @ary ;&lt;br /&gt;
print &quot;\n&quot;;&lt;br /&gt;
&lt;br /&gt;
print &quot;Using printf:\n&quot;;&lt;br /&gt;
$ary_n=@ary;&lt;br /&gt;
printf “$ary_n\n” ;&lt;br /&gt;
print &quot;\n&quot;;&lt;br /&gt;
&lt;br /&gt;
unix&amp;gt;print_array.pl&lt;br /&gt;
Array content:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cat&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dog&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pig&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fish&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fly&lt;br /&gt;
Using print:&lt;br /&gt;
catdogpigfishfly&lt;br /&gt;
Using printf:&lt;br /&gt;
cat&lt;br /&gt;
unix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;String Processing (binding operator):&lt;/b&gt;&lt;br /&gt;
===========================&lt;br /&gt;
-String manipulation is one of Perl’s most powerful features.&lt;br /&gt;
-Perl utilizes regular expression extensively for string manipulation.&lt;br /&gt;
-Perl uses the binding operator (=~) to match pattern: ($string =~ /pattern/)&lt;br /&gt;
-The expression ( $string =~ /pattern/ ) returns true as long as the pattern exists in the string.&lt;br /&gt;
-($string =~ /pattern/i ) makes the matching case insensitive.&lt;br /&gt;
-If it matches, $1, $2 and etc will contain the tokens in the string. Note that this is equivalent to the \1 \2 in RegExp. It is supported by Perl as well.&lt;br /&gt;
-If the string matches, three special variables can be used:&lt;br /&gt;
a. $&amp;amp; (dollar-ampersand) &amp;nbsp;holds the matched string&lt;br /&gt;
b. $` (dollar-back-quote) holds the string before the matched portion&lt;br /&gt;
c. $’ (dollar-quote) holds the string after the matched portion.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;The m// construct:&lt;/b&gt;&lt;br /&gt;
=============&lt;br /&gt;
-The &amp;nbsp;/pattern/ in the previous examples is actually a short cut for m/pattern/. The slash used as the delimiter, the “m” character can be omitted.&lt;br /&gt;
-With the “m” (for match) character, then any character can be used as the delimiter.&lt;br /&gt;
-The following are equivalent: &lt;br /&gt;
“string” =~ m/str/ ; &lt;br /&gt;
“string” =~ m”str” ;&lt;br /&gt;
“string” =~ m’str’ ; &lt;br /&gt;
“string” =~ m#str# ;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Limit over matching with ?&lt;/b&gt;&lt;br /&gt;
===================&lt;br /&gt;
-Both * and + tend to be greedy and over match (for the largest match).&lt;br /&gt;
-m/{(.*)}/ will match the largest string with “{}”.&lt;br /&gt;
-If the string is “{ group 1} and {group 2}”, m/{(.*?)}/ will return “group 1} and {group 2”.&lt;br /&gt;
-If ? (matches at most one occurrence) is used after * or +, Perl will match the shortest string instead of longest string.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;String option modifiers: i, s, x, g&lt;/b&gt;&lt;br /&gt;
========================&lt;br /&gt;
-The “i” option makes the matching case insensitive.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Snippet:&lt;/b&gt;&lt;br /&gt;
----------&lt;br /&gt;
print “Do you want to continue?”&lt;br /&gt;
chomp ($_ = &amp;lt;STDIN&amp;gt;) ; &lt;br /&gt;
if (/yes/i) &amp;nbsp;{ # when matching to the default variable $_, &amp;nbsp;$_ =~ can be omitted.  &lt;br /&gt;
&amp;nbsp;print “Thank you for the positive response!\n” ;&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
-The “s” option makes the (.) dot match to include newline.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Snippet:&lt;/b&gt;&lt;br /&gt;
-----------&lt;br /&gt;
$str = “The dog runs \n after the cat.\n” ;&lt;br /&gt;
if ($str =~ /dog.*cat/s) { &amp;nbsp;# the matches fails w/o the “s”.  &amp;nbsp; &amp;nbsp;print “See dog ahead of cat.\n” ; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-The “x” allows white space in the pattern to improve readability.&lt;br /&gt;
“/-?\d+\.?\d*/” &amp;nbsp; &amp;nbsp;and &amp;nbsp; “/-? \d+ \.? \d* /x” are equivalent.&lt;br /&gt;
&lt;br /&gt;
-The “g” allows the string substitution applied repeatedly in the string&lt;br /&gt;
&lt;br /&gt;
-A “s” in front of the matching substring can be used to substitute the matching with a new substring: &lt;br /&gt;
$str =~ s/old/new/ig ; &amp;nbsp;# i for mixed case, g for matching repeatedly. &lt;br /&gt;
&lt;br /&gt;
-$1 and $2 can be used to refer to parts of the matched string (with groups):  &lt;br /&gt;
$x = “This dress exacerbates the generic betrayal that is my legacy.\n” ; &lt;br /&gt;
$x =~ s/(r|l)(\w)/z$2/ig ; # r or l followed by a word char.  ##&lt;br /&gt;
$x is now: “This dzess exacezbates the genezic betzayal that is my zegacy.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;String “split”:&lt;/b&gt;&lt;br /&gt;
==========&lt;br /&gt;
-The split construct takes a regular expression and a string to return an array of all the substrings.&lt;br /&gt;
-If “-1” is passed as the third argument, an empty element is added to the end of the array.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Snippet:&lt;/b&gt;&lt;br /&gt;
-----------&lt;br /&gt;
split (/\s+/, “this is a string”); gives  (“this”, “is”, “a”, “string”)&lt;br /&gt;
&lt;br /&gt;
split (/\s*,\s*/, “that , tree, &amp;nbsp;is,very ,tall”); gives (“that”, “tree”, “is”, “very”, “tall”)&lt;br /&gt;
split (/\s*,\s*/, “that , tree, &amp;nbsp;is,very ,tall”, -1); gives (“that”, “tree”, “is”, “very”, “tall”, “”)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;String “tr”:&lt;/b&gt;&lt;br /&gt;
========&lt;br /&gt;
-The “tr” construct can be used to convert characters in the string: &lt;br /&gt;
$str =~ tr/a/b/ ; $str =~ tr/A-Z/a-z/ ;&lt;br /&gt;
&lt;br /&gt;
-Note that the two sets should match in sizes:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Snippet:&lt;/b&gt;&lt;br /&gt;
----------&lt;br /&gt;
unix&amp;gt;cat tr.pl&lt;br /&gt;
&lt;br /&gt;
$str = &quot;this is a cat and my cat can take on a dog.\n&quot;;&lt;br /&gt;
print $str ;&lt;br /&gt;
$str =~ tr/cat/dog/;&lt;br /&gt;
print $str ;&lt;br /&gt;
&lt;br /&gt;
unix&amp;gt;&lt;br /&gt;
unix&amp;gt;perl tr.pl&lt;br /&gt;
this is a cat and my cat can take on a dog.&lt;br /&gt;
ghis is o dog ond my dog don goke on o dog.&lt;br /&gt;
unix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Local Variables:&lt;/b&gt;&lt;br /&gt;
============&lt;br /&gt;
-Starting with Perl version 5, the “my” construct were introduced to create local variables: &lt;br /&gt;
my $var ; # declares a variable $var &lt;br /&gt;
my $v1 = “cat” ; # declares v1 and assign it with “cat”. &lt;br /&gt;
my @ary = (1..10) ; # declars array @ary and assign 1 thru 10 to it. &lt;br /&gt;
my ($x, $y); &amp;nbsp;# declares two local variables $x and $y &lt;br /&gt;
my ($p, $q) = (100, 200) &amp;nbsp;;&lt;br /&gt;
&lt;br /&gt;
-Local variables are mostly used in subroutines.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Return multiple values:&lt;/b&gt;&lt;br /&gt;
=================&lt;br /&gt;
-What if multiple values need to be returned to caller?&lt;br /&gt;
-One approach can be packing multiple values into an array and return it.&lt;br /&gt;
… &lt;br /&gt;
my ($str1, $value1, $str2) = myroutine(); &lt;br /&gt;
…&lt;br /&gt;
sub myroutine { &lt;br /&gt;
…… @ary = (“this”, -1, “that”); &lt;br /&gt;
return (@ary); &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Running External Programs:&lt;/b&gt;&lt;br /&gt;
======================&lt;br /&gt;
-Perl can invoke other programs using the “system” function.&lt;br /&gt;
-Perl passes the argument to “system” as a command line to the operating system.&lt;br /&gt;
-System returns 0 when the program successfully completes and the global variable “$?” should be set to an error.  &lt;br /&gt;
&lt;br /&gt;
system (“mail hippo\@rkguru.com &amp;lt; mail.txt”) == 0 | die “system error $?”;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Please click &lt;a href=&quot;http://hippodata.blogspot.com/2013/05/perl-scripting-part-3.html&quot;&gt;here for part - 3&lt;/a&gt;&lt;/b&gt;</content><link rel='replies' type='application/atom+xml' href='http://hippodata.blogspot.com/feeds/5942878325559476566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3833586449746557798/5942878325559476566' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/5942878325559476566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3833586449746557798/posts/default/5942878325559476566'/><link rel='alternate' type='text/html' href='http://hippodata.blogspot.com/2013/05/perl-scripting-part-2.html' title='Perl Scripting: Part 2'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>