Monday, 25 April 2016

W16 Lab Series: Part 3 - What Next (Some Ideas)?

I’m anticipating being quite busy for the next few weeks at least, so may not get time to do any more posts on this series for a while (my last 5 posts - including this one - I actually finished off/wrote on … ahem … vacation).

In part 1 we setup our AD users and groups, in part 2 we setup DNS, now for “What would come next?”

Cluster build is to a great extent down to preference and requirements, so not all of the below is for everyone The below considers real-world systems, and no point re-inventing the wheel, so the below adapts some work from a real-world cluster build doc I compiled.

Section 1: Pre WFA Cluster Build (Stuff that won’t be WFA-erized)

1.1) Basic Cluster Setup
We leave this to the Installation Engineer to complete via simple Cluster Setup Wizard. We just need:
- Cluster Name
- Cluster Management IP
- Node Management IP(s)
- (temporary) admin password
- Service-Processors configured

1.2) Making sure the root aggr is on the right disk/stack
Again, since this may require physical intervention, we leave this to the Installation Engineer to complete.

Section 2: WFA Cluster Build

A lot of the below could be prefixed with “verify/modify/configure/create”
 A lot of the below could be suffixed with “as required”

2.1) Service-Processor configuration
2.2) System timeout value for CLI sessions
2.3) Cluster HA/Storage Failover (SFO) settings
2.4) Cluster Switch Health Monitoring
2.5) Rename nodes as per naming convention
2.6) Disk ownership
2.7) Root aggregating naming as per naming convention
2.8) Aggregate creation
2.9) Aggregate snapshot settings
2.10) Resize root volumes to 75% root aggr size
2.11) Per-node vol0 snapshot settings (like snap sched)
2.12) Timezone configuration
2.13) NTP server configuration
2.14) IPspaces
2.15) Broadcast domains/VLANs
2.16) Network routes
2.17) Failover groups
2.18) Rename cluster mgmt. LIF as per convention
2.19) Rename node mgmt. LIFs as per convention
2.20) Tuning - flow control settings
2.21) Tuning - aggregate free space reallocation
2.22) Tuning - wafl.optimize_write_once off
2.23) Flash cache options
2.24) Firewall policies
2.25) Autosupport configuration
2.26) Create Intercluster LIFs
2.27) Custom Cron Schedules
2.28) Custom Snapshot Policies
2.29) Custom SnapMirror Policies
2.30) Generate CSRs (Certificate Signing Requests)
2.31) Install SSL certs (this would require WFA access to a Certification Authority, otherwise would need to be post WFA Cluster Build)
2.32) Banner (MOTD)
2.33) AD Authentication SVM
2.34) RBAC (Role Based Access Control) / security roles, users and groups
2.35) Change temporary admin password

W16 Lab Series: Part 2 - DNS Setup

Note: The DNS cmdlets used in this post require the WFA server is on Windows 2012 or better.

Every single IP address used on the network should have a corresponding DNS A-Record and PTR record; this is basic good network housekeeping. Ping by name to get the IP, ping -a by IP to get what it is. We need DNS entries in place for our Cluster Build. This post assumes the required reverse lookup zones already exist (they damn well should do if the DNS admins are doing their job properly.)

The awesome thing about OnCommand Workflow Automation is that, even though it is a NetApp product, you can use it to automate pretty much anything that has APIs exposed and a PowerShell/PERL way of utilizing those APIs. In this post, we use WFA to generate the DNS A and PTR records prior to the Cluster build (this is unlikely to be the job of the Storage Admin, still it’s nice to see how it could be done).

1) Installing DNS Tools on the WFA Server

Run the following command in PowerShell>

Add-WindowsFeature RSAT-DNS-Server

2) Giving the WFA User DNS Permission

We did this in Part 1, but here it is again (done on the Domain Conroller):

Add-ADGroupMember -Identity "DnsAdmins" -Members "WFA"

3) The PowerShell Code to do the DNS Job

The following code works without alteration both inside and outside WFA (using “WFA Environment Detection”). It takes as input a file path to a file containing the Hostnames and IP addresses we want to add to DNS, the DNS Domain where we want to create these, and the DNS server name where the records will first be created (prior to replication to other DNS servers.)

  [Parameter(Mandatory=$True,HelpMessage="File path")]
  [Parameter(Mandatory=$True,HelpMessage="DNS Domain")]
  [Parameter(Mandatory=$True,HelpMessage="DNS Server")]

[Boolean]$WfaDetected = $FALSE
If(Get-Command Get-WFALogger -ErrorAction SilentlyContinue){ $WfaDetected = $TRUE }

## ===== OUTPUT FUNCTION ===== ##
Function Wr{
  Param([String]$Echo = "",[String]$Ink = "WHITE")
  If($WfaDetected -and $Echo){
    If($Ink -eq "RED"){ Get-WFALogger -Error -message $("$Echo") }
    elseif($Ink -eq "YELLOW"){ Get-WFALogger -Warn -message $("$Echo") }
    else{ Get-WFALogger -Error -message $("$Echo") }
  If(!$WfaDetected){ Write-Host $Echo -ForegroundColor $Ink }

## ===== ADD-DNSRECORD ===== ##
[System.Array]$Content = @()
If(Test-Path $FilePath){
  Wr "Loaded file from $FilePath" GREEN;Wr
  $GetContent = Get-Content $FilePath
  $GetContent | Foreach{ $Content += $_.Trim("`t"," ") }
  $Content = $Content | Where { ($_ -ne "") -and !($_.StartsWith("#")) -and (($_.Split("`t").Count -ge 2) -or ($_.Split(" ").Count -ge 2)) }
  If($Content.Count -ge 2){
    $Content = $Content[1..($Content.Count -1)]
    $Content | Foreach {
      [String]$Separator = "`t"
      If($_.Split($Separator).Count -lt 2){ $Separator = " " }
      $Length    = $_.Split($Separator).Count
      $Hostname  = $_.Split($Separator)[0].Trim("`t"," ")
      $IpAddress = $_.Split($Separator)[$Length -1].Trim("`t"," ")
      Wr ("Running: Add-DnsServerResourceRecordA $HostName" + "." + "$DnsDomain $IpAddress") CYAN
      Add-DnsServerResourceRecordA -Name $HostName -ZoneName $DnsDomain -IPv4Address $IpAddress -CreatePtr -ComputerName $DnsServer
    Wr "Not enough content, require at least 1 line header, and 1 line of Hostname IP Address" RED
  Wr "Failed to load file from $FilePath" RED

Note: A lot of the script is simply checking the input. The action line is the Add-DnsServerResourceRecordA line (the cmdlet requires Server 2012+).

4) The Input File

Here’s an example. The script can handle tab delimited, or space delimited lines, or a mixture of tab and space delimited. The first line is always assumed to be a heading line. It will not process lines beginning with # or empty lines. Each valid input line should just have a hostname and an IP Address.


Note: These represent, cluster management, node management, svm0 is a management LIF that will be used by an Active Directory authentication SVM (will have no data volumes, just used for the Domain Tunnel), and rep1 and rep2 for node intercluster LIFs (replication).

5) Testing in PowerShell

Image: An example testing the script in PowerShell with the example input file above

6) Creating Command in WFA

6.1: Login to WFA
6.2: Click on Designer tab
6.3: Click on Commands
6.4: Click to add a new Command
6.5: Click on the Code tab and paste the script in as PowerShell, and click the button to ‘Discover Parameters’
6.6: Click on the Properties tab
6.7: Give the command a Name ‘Add DNS Records’
6.8: Give the command a String Representation like - DnsDomain + " update DNS from file " + FilePath
6.9: Click Save

Image: Creating the Add DNS Records Command in WFA

7) Creating the Workflow

7.1: Click on Workflows
7.2: Click on Add

Image: Creating a New Workflow

7.3: Drag the new ‘Add DNS Records’ command to the panel

Image: Creating a New Workflow - Adding a Command

7.4.1: Hover the pointer beneath “Add DNS Records” and click on the +
7.4.2: For DNS Domain, we’ll use a static entry “lab.priv” since only one DNS domain in lab corp.
7.4.3: For FilePath specify $FilePath - this will be a required input
7.4.4: For DnsServer, we again use a static entry “MSDMC01” for one of the DNS servers in lab corp.
7.4.5: Click OK

Image: Parameters for ‘Add DNS Records’

7.5.1: Click on the Details tab
7.5.2: Give the workflow a name “Add DNS Records”
7.5.3: Tick ‘Ready for production’

Image: Add Workflow Details tab

7.6.1: Click on the ‘User Inputs’ tab
7.6.2: Double-click on FilePath
7.6.3: Click on ‘Display Name’ and make more user friendly
7.6.4: Click on ‘Description’ and make more descriptive
7.6.5: Tick the ‘Mandatory’ tick box
7.6.6: Click OK
7.6.7: Click Save
7.6.8: Click Close

Image: New Workflow ‘User Inputs’ tab

8) Running the Workflow

IMPORTANT NOTE: This workflow requires NetApp WFA Server service to run as LAB\WFA.

Image: NetApp WFA Server service running as LAB\WFA

8.1: Find the new workflow in the Portal
8.2: Click the ‘Add DNS Records’ workflow
8.3: Enter the file path
8.4: Click Execute

Image: Running the Workflow

And - all being well - the workflow should run and the required DNS entries created.

Image: Add DNS Records successful execution

Installing OnCommand Workflow Automation 3.1 (on Windows 2012 R2)

A sort-of-update of this post (same but different); I needed WFA running on 2012 R2 to take advantage of some PowerShell DNS cmdlets available only in Server 2012+. The following is a quick from scratch install guide here using VMware Workstation as the host hypervisor.

Hardware and Basic Components

OS: Windows Server 2012 R2 Standard
Hardware: 4 GB RAM (3 GB is the minimum) and 2 vCPU
Browser 1: Google Chrome (Flash Player is pre-installed)
Browser 2: Internet Explorer 11 + download latest Adobe Flash Player
Local Admin User: LAB\WFA


.NET 4.0 and PowerShell 3.0 don’t need adding to 2012 R2, since it comes with .NET 4.5 and PowerShell 4.0. The following commands in PowerShell can be used to verify this>

dir ‘HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full’

Bizarrely though, you still need to enable the .NET Framework 3.5 Feature (via Administrator: Windows PowerShell and requires the installation media)>

Install-WindowsFeature Net-Framework-Core -Source D:\Sources\sxs

Part 1: Setting up the Windows Server

1.1) Deploy the server using bootable Windows Server 2012 R2 installation media - since this is very straightforward to do, I will not detail it here. In the following walkthrough we use an evaluation edition.
1.2) Install VMware tools
1.3) From Administrator: PowerShell, the following commands will rename the server, rearm the eval, and restart the computer>

rename-computer MSWFA1
slmgr.vbs /rearm

1.4) From Administrator: PowerShell, verify eval has time left, set IP addressing, set DNS server, and join computer to the domain, and restart>

slmgr.vbs /dlv
New-NetIPAddress -IPAddress -InterfaceAlias "Ethernet" -DefaultGateway -AddressFamily IPv4 -PrefixLength 22
$IntIndex = (Get-NetIPAddress -AddressFamily IPv4 -InterfaceAlias "Ethernet*").InterfaceIndex
Set-DNSClientServerAddress -InterfaceIndex $IntIndex -ServerAddress ("")
Add-Computer -DomainName lab.priv

Note: In this lab there’s only one DNS server, for more just add them separated by commas in the brackets after -ServerAddress.

1.5) Login as with domain administrator account and run the below to add the LAB\WFA user to the local administrators (we add the group LAB\StorageAdmins of which LAB\WFA is a member)>

$Computer = hostname
$group = [ADSI]"WinNT://$Computer/Administrators,group"

1.6) Disable Certificate Revocation for the SYSTEM User using PowerShell (if you run the NetApp WFA Server service using domain credentials like LAB\WFA, you should disable certificate revocation for that user)>

REG ADD "HKU\S-1-5-18\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing" /v State /t REG_DWORD /d 0x00023e00 /f

IMPORTANT: If you run the NetApp WFA Server service using domain credentials like LAB\WFA, you should disable certificate revocation for that user. This can easily be done when logged into the server as that user with>

REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing" /v State /t REG_DWORD /d 0x00023e00 /f

Note: Generally, the most common slow running workflow issues in WFA with PowerShell commands are due to CRL Checking. An interesting link which I came across but not needed to add to my build is

1.7) Disable the Windows Firewall on the WFA server using PowerShell>

Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False

Installing OnCommand Workflow Automation 3.1

Note: Refer to the “OnCommand Workflow Automation 3.1: Installation and Setup Guide for Windows” for full instructions.

Logged in as LAB\WFA (note that the instructions do say log in to Windows using the default local administrator account, but many organizations will disable this), you can either install WFA 3.1 interactively by right-clicking the WFA install executable and selecting “Run as administrator” and answering the prompts -

Image: Starting WFA 3.1 Interactive Installation

- or silent install via the DOS Administrator: Command Prompt (which is the method used here) as in the example below (navigate to the folder containing the EXE):


Note 1: Replace YourPassword as required.
Note 2: The default ports 80 and 443 are specified here.
Note 3: WFA_ENABLE_HTTP is set to 0 in the above (the default) which allows only HTTPS for external communication.
Note 4: You’ll know the install is complete when the NetApp WFA Server service starts (see NA_WFA_SRV.exe in Windows Task Manager), and the install log should say:

MSI (s) (CC:C4) [14:17:46:786]: Product: OnCommand Workflow Automation -- Installation operation completed successfully.

Image: NA_WFA_SRV.exe and mysqld.exe running in task manager

What Comes Next?

Log into WFA via http(s)://WFA_Server_DNS_Name_or_IP and follow the WFA Setup Wizard (or not - can re-run Setup Wizard from the Administration menu later). And complete the WFA configuration to your hearts content.

Further Configuration Ideas (also see the original post)

1) Disable IE ESC on the server (so we can test the WFA site from the WFA server) via the Administrator: Windows PowerShell>

$AdminKey = "HKLM:\SOFTWARE\Microsoft\Active Setup\Installed Components\{A509B1A7-37EF-4b3f-8CFC-4F3A74704073}"
$UserKey = "HKLM:\SOFTWARE\Microsoft\Active Setup\Installed Components\{A509B1A8-37EF-4b3f-8CFC-4F3A74704073}"
Set-ItemProperty -Path $AdminKey -Name "IsInstalled" -Value 0
Set-ItemProperty -Path $UserKey -Name "IsInstalled" -Value 0
Stop-Process -Name Explorer

2) Replace the Self-Signed SSL Certificate - see How to Replace the Self-Signed SSL Cert for WFA 3.1.
3) Disabling HTTP Access to OnCommand Workflow Automation

By default, OnCommand Workflow Automation (WFA) can be accessed by using both HTTP and HTTPS. You can enable HTTPS-only access if you want to secure access to WFA. Before you begin you must have logged in to the WFA host system as an administrator. Enabling HTTPS-only access does not automatically redirect HTTP to HTTPS.

Run the below in PowerShell>

cd (Get-ItemProperty 'HKLM:\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0\NA_WFA_SRV\Parameters\Java' | select -ExpandProperty Options | where {$_ -match '-Djboss.home.dir'}).split('=')[1]
cd ../bin
Import-Module ../PoSH/Modules/WFAWrapper/WfaConfig.psm1

Set-WfaConfig -Name HTTPAccess -Enable $false

And test from a remote client that access over http to {WFASERVER/IP} is not possible but https is.

Saturday, 23 April 2016

Windows Server 2012 R2 Domain Controller Setup (with Eval Edition notes)

Well, I had a funny feeling it would bite me in the b*tt starting a new lab with a 6 year old O/S (Server 2008 R2 is really Server 2010.) So, time to dust out the Windows Server 2012 R2 Evaluation ISO (Server 2014 really.) If you’re wondering what bit - there’s some nice PowerShell DNS cmdlets I wanted to use, and these only work with Server 2012+ (to be revealed in a future post.) Of course, it would have worked fine using 2008 R2 DCs and just have a Windows 2012 R2 server for running the DNS cmdlets (future WFA server), this post is written whilst away from home though, and had no existing DC on my laptop.

Installing the O/S

Using an ISO downloaded ages ago, stick it in the DVD drive, boot the system, and follow the prompts to install. It’s super easy so I’m not going to detail it here.

For reference, the ISO I used is the below - I’m sure Microsoft could have given it a longer name:


Rearming the Eval

If you’re like me and downloaded a 2012 R2 eval ages ago, and don’t fancy using an expired eval that reboots every hour, run the below in the Administrator: Command Prompt (or PowerShell), to buy yourself another 180 days>

slmgr.vbs /rearm

To see how much time you’ve got left>

slmgr.vbs /dlv

Setting up the Domain Controller using PowerShell

Note: This is taken from an old 10 February 2013 post. Change variables used as per requirements.

The following commands rename the computer, configure IP address, install ADDS, create a new DC in a new forest, and configure DNS reverse lookup zones.

rename-computer MSDMC01

{Server reboots}

New-NetIPAddress -IPAddress -InterfaceAlias "Ethernet" -DefaultGateway -AddressFamily IPv4 -PrefixLength 22

Install-WindowsFeature AD-Domain-Services -IncludeManagementTools

Install-ADDSForest -DomainName lab.priv

{Server reboots}

Add-DnsServerPrimaryZone -ZoneFile
Add-DnsServerPrimaryZone -ZoneFile
Add-DnsServerPrimaryZone -ZoneFile

Other Things Not Done in PowerShell

A couple of habitual things I do with new Windows Server builds:

1) Set the pagefile manually (for this lab DC, 1.5 GB is plenty of RAM, and we’ll have an arbitrary fixed pagefile of 1 GB.)
2) Disable indexing on disk (minor performance gain where there’s no need to search for files on disk).

Image: Uncheck the box to disable indexing on disk

Other things to add on later

Not researched the PowerShell commands to do it (not in a good internet area whilst I write this) - will be adding a Certification Authority later on.

Pre-Cluster Setup Image Build Recipe for 8.3.2 SIM

A minor update to the 8.3.1 build recipe, partly because there is an 8.3.2 version of the VSIM available which I really should be using, partly because I’m … ahem … on holiday (I’ve not shipped my lab machine with me on the plane), but mostly because of Bushmr’s awesome comment to the previous recipe - thank you so much Bushmr!

Note: This is in VMware Workstation 12.

Part 1) Up to Completing Node Setup

1.1) Download and deploy the OVA (vsim-netapp-DOT8.3.2-cm.ova) - this is very simple to do!

Image: Deploying the OVA

1.2) Add additional Virtual Network Adapters as required.
1.3) Power on the virtual machine
1.4) When it says -

Hit [Enter] to boot immediately, or any other key for command prompt

- press any other key

1.5) Run the following commands from VLOADER>

setenv bootarg.vm.no_poweroff_on_halt false
setenv bootarg.nvram.sysid XXXXXXXXXX
setenv bootarg.sim.vdevinit 31:14:0,31:14:1,31:14:2,31:14:3
setenv bootarg.vm.sim.vdevinit 31:14:0,31:14:1,31:14:2,31:14:3
printenv bootarg.vm.no_poweroff_on_halt
printenv bootarg.nvram.sysid
printenv bootarg.sim.vdevinit
printenv bootarg.vm.sim.vdevinit

Note on serial number/sysid:
Replace XXXXXXX-XX-X and XXXXXXXXXX with the serial number you want to give your SIM. You will need license keys for that serial. If you only intend to have one SIM, don’t bother changing the Serial Number and Sysid. The 8.3.2 SIM serial numbers are below:
4082368511 (Original ESX build)
4082368507 (Original VM Workstation/Player/Fusion build)
4034389062 (Second node in a cluster)
And if you’ve been recording all the serial numbers and license keys for all the cDOT Simulators ever released with V2 licenses codes, then by now you’ll have a lot of different sets of serial number and - serial-number-linked - feature license keys.

Note on vdevinit:
The simulator as standard has 2 shelves of 14 x 1 GB disks (28 GB total). The vdevinit environment variables allow the simulator be initialized differently. The entries above initialize the SIM with 4 shelves of 14 x 4 GB (type 31) disks (224 GB total.) There is a 9 GB (type 36) disk - which would allow up to 504 GB total - and you can use this no problem, you will likely at some point need to resize Hard Disk 4 on the SIM though (which is only 230.7 GB).
{See the Appendix below for different types of VSIM disks}

1.6) When it says -

* Press Ctrl-C for Boot Menu *

- press Ctrl-C

1.7) In the Boot Menu, select -

(4) Clean configuration and initialize all disks

- and follow the prompts with y, to kick off the wipeconfig request:

Zero disks, reset config and install a new file system? y
This will erase all the data on the disks, are you sure? y

Wait for the wipeconfig request to complete

1.8) Welcome to node setup...

Type yes to confirm (AutoSupport) and continue {yes}: yes
Enter the node management interface port [e0c]:
Enter the node management interface IP address: X.X.X.X
Enter the node management interface netmask: X.X.X.X
Enter the node management interface default gateway: X.X.X.X

Note: Replace X.X.X.X as required.

1.9) Login as admin (initially there is no password):

login: admin

Part 2) Pre-Cluster Setup Enabling SSH (PuTTY) Access

Since it’s a pain doing stuff via the console (no copy and paste), we enable SSH access to our pre-cluster setup node.

::> security login password

Please enter your current password:
Enter a new password:
Enter it again:

::> security login create -vserver Default -user-or-group-name admin -application ssh -authmethod password -role admin

Then use an SSH client to access the node management IP

Part 3) Assigning Disks, Making the Root Vol and Root Aggregate bigger, Halt and VM Snapshot

Note: The following assumes we’re using the 4 GB (type 31) disks.

The root vol on a VSIM is small - the standard VSIM with 1 GB disks, has a root aggr of ~1 GB and the root vol is 95% of this size -  and can fill up with logs and take the node offline. So, we do the following:

1) Assign all disks
2) Add two more disks to aggr0
3) Verify no snapshot schedule on aggr0
4) Delete any aggregate snapshots on aggr0
5) Make sure aggr0 has 0% snapshot space
6) Resize vol0 to ~75% of aggr0’s size

::> node run local
> disk assign all
> aggr add aggr0 2
> snap sched -A aggr0 0 0 0
> snap delete -a -A aggr0
> aggr options aggr0 percent_snapshot_space 0
> df -A -m
> vol size vol0 8100m
> exit
::> rows 0
::> disk show -container-type aggregate
::> disk show -container-type spare
::> aggr show

You should have 56 disks - 5 in aggr0 and 51 spares, and an aggr0 of size 10.55 GB and 75% used (by vol0).

Finally, halt the node and take a snapshot of this nice pre-Cluster setup build.

::> system node halt local

Appendix: Different Types of VSIM Disk

Type Vendor ID Product ID       Usable Size[B] Actual Size[B]  Zero  BPS   RPM
  0  NETAPP__  VD-16MB_________     16,777,216     38,273,024   No   512  10000
  1  NETAPP__  VD-35MB_________     35,913,728     57,409,536   No   512  10000
  2  NETAPP__  VD-50MB_________     52,428,800     73,924,608   No   512  10000
  3  NETAPP__  VD-100MB________    104,857,600    126,353,408   No   512  10000
  4  NETAPP__  VD-500MB________    524,288,000    545,783,808   No   512  10000
  5  NETAPP__  VD-1000MB_______  1,048,576,000  1,070,071,808   No   512  10000
  6  NETAPP__  VD-16MB-FZ______     16,777,216     38,273,024   Yes  512  15000
  7  NETAPP__  VD-35MB-FZ______     35,913,728     57,409,536   Yes  512  15000
  8  NETAPP__  VD-50MB-FZ______     52,428,800     73,924,608   Yes  512  15000
  9  NETAPP__  VD-100MB-FZ_____    104,857,600    126,353,408   Yes  512  15000
 10  NETAPP__  VD-500MB-FZ_____    524,288,000    545,783,808   Yes  512  15000
 11  NETAPP__  VD-1000MB-FZ____  1,048,576,000  1,070,071,808   Yes  512  15000
 12  NETAPP__  VD-16MB-520_____     16,777,216     38,273,024   No   520  10000
 13  NETAPP__  VD-35MB-520_____     35,913,728     57,409,536   No   520  10000
 14  NETAPP__  VD-50MB-520_____     52,428,800     73,924,608   No   520  10000
 15  NETAPP__  VD-100MB-520____    104,857,600    126,353,408   No   520  10000
 16  NETAPP__  VD-500MB-520____    524,288,000    545,783,808   No   520  10000
 17  NETAPP__  VD-1000MB-520___  1,048,576,000  1,070,071,808   No   520  10000
 18  NETAPP__  VD-16MB-FZ-520__     16,777,216     38,273,024   Yes  520  15000
 19  NETAPP__  VD-35MB-FZ-520__     35,913,728     57,409,536   Yes  520  15000
 20  NETAPP__  VD-50MB-FZ-520__     52,428,800     73,924,608   Yes  520  15000
 21  NETAPP__  VD-100MB-FZ-520_    104,857,600    126,353,408   Yes  520  15000
 22  NETAPP__  VD-500MB-FZ-520_    524,288,000    545,783,808   Yes  520  15000
 23  NETAPP__  VD-1000MB-FZ-520  1,048,576,000  1,070,071,808   Yes  520  15000
 24  NETAPP__  VD-16MB-FZ-ATA__     16,777,216     51,388,416   Yes  512   7200
 25  NETAPP__  VD-35MB-FZ-ATA__     36,700,160     73,801,728   Yes  512   7200
 26  NETAPP__  VD-50MB-FZ-ATA__     52,428,800     91,496,448   Yes  512   7200
 27  NETAPP__  VD-100MB-FZ-ATA_    104,857,600    150,478,848   Yes  512   7200
 28  NETAPP__  VD-500MB-FZ-ATA_    524,288,000    622,338,048   Yes  512   7200
 29  NETAPP__  VD-1000MB-FZ-ATA  1,048,576,000  1,212,162,048   Yes  512   7200
 30  NETAPP__  VD-2000MB-FZ-520  2,097,512,000  2,119,007,808   Yes  520  15000
 31  NETAPP__  VD-4000MB-FZ-520  4,194,304,000  4,215,799,808   Yes  520  15000
 32  NETAPP__  VD-2000MB-FZ-ATA  2,097,512,000  2,391,810,048   Yes  512   7200
 33  NETAPP__  VD-4000MB-FZ-ATA  4,194,304,000  4,751,106,048   Yes  512   7200
 34  NETAPP__  VD-100MB-SS-512_    104,857,600    126,353,408   Yes  512  15000
 35  NETAPP__  VD-500MB-SS-520_    524,288,000    545,783,808   Yes  520  15000
 36  NETAPP__  VD-9000MB-FZ-520  9,437,184,000  9,458,679,808   Yes  520  15000
 37  NETAPP__  VD-9000MB-FZ-ATA  9,437,184,000 10,649,346,048   Yes  512   7200