Lumenate is a technical consulting firm focused on enabling the virtualized enterprise. With disciplines in Storage, Security and Networking, Lumenate designs and implements customized, integrated solutions which enable our customers to transition to a converged infrastructure and enjoy the benefits of virtualization with increased security and scalability. Not just storage. Storage meat. Our goal – design and deliver the optimal customer experience.
Friday, October 28, 2011
Storage MBps Performance Concepts
Monday, October 24, 2011
Cisco MDS switch interoperability with Brocade Access Gateway and Qlogic Adapters
Cisco MDS switch interoperability with Brocade Access Gateway and Qlogic Adapters
Monday, September 19, 2011
Recovering an NTFS Boot Sector in Symantec Storage Foundation for Windows
Recovering an NTFS Boot Sector in Symantec Storage Foundation for Windows
Monday, September 12, 2011
Integrating DB2 Advanced Copy Services with NetApp Snapshots
Setup of ACS is fairly easy in either a Linux or AIX environment. ACS uses RSH to communicate with the NetApp filer, so the RSH service must be enabled on the filer (options rsh.enable on). The database server can be included in the /etc/hosts.equiv file on the filer so that a password is not needed. ACS is intelligent enough to correlate the database and log file systems/volume groups on the server to the corresponding volumes/LUNs on the filer.
During testing under AIX, I found an issue with the setup.sh script where the acscim program caused the script to fail. The acscim module is used to communicate to IBM storage such as the DS series and requires supporting libraries that were not available on my system. I commented out the acscim check and the setup script completed normally. The setup script needs to be executed as root, but from the database instance user's home directory. The database instance user in the example below is db2int2.
ACS is installed under the database instance user's home directory. Go into the ACS directory and edit the setup.sh script to comment out the acscim binary check.
bash-3.00# cd /home/db2int2/sqllib/acs
bash-3.00# grep cim setup.sh
checkbin ${INST_DIR}/acs/acscim
enableSUID ${INST_DIR}/acs/acscim
bash-3.00# vi setup.sh
bash-3.00# grep cim setup.sh
# checkbin ${INST_DIR}/acs/acscim
enableSUID ${INST_DIR}/acs/acscim
Execute the setup.sh script to provide the necessary parameters to configure ACS. I chose defaults for most of the questions. The ACS_REPOSITORY needs to be set to desired directory path which will be created by the script. The COPYSERVICES_HARDWARE_TYPE is either NAS_NSERIES or SAN_NSERIES under AIX or NAS_NSERIES for Linux.
bash-3.00# pwd
/home/db2int2/sqllib/acs
bash-3.00# ./setup.sh
checking /home/db2int2/sqllib/acs/acsnnas ...
OK
checking /home/db2int2/sqllib/acs/acsnsan ...
OK
Do you have a full TSM license to enable all features of TSM for ACS ?[y/n]
n
****** Profile parameters for section GLOBAL: ******
ACS_DIR [/home/db2int2/sqllib/acs ]
ACSD [57329 ] 57328
TRACE [NO ]
****** Profile parameters for section ACSD: ******
ACS_REPOSITORY [/home/db2int2/sqllib/acs/acsrepository ]
****** Profile parameters for section CLIENT: ******
TSM_BACKUP [NO ]
MAX_VERSIONS [2 ]
LVM_FREEZE_THAW [YES ]
DEVICE_CLASS [STANDARD ]
****** Profile parameters for section STANDARD: ******
COPYSERVICES_HARDWARE_TYPE [SAN_NSERIES]
COPYSERVICES_PRIMARY_SERVERNAME [netappcntl1 ]
COPYSERVICES_USERNAME [root ]
======================================================================
The profile has beeen successfully created.
Do you want to continue by specifying passwords for the defined devices? [y/n]
y
Please specify the passwords for the following profile sections:
STANDARD
master
Creating password file at /home/db2int2/sqllib/acs/shared/pwd.acsd.
A copy of this file needs to be available to all components that connect to acsd.
BKI1555I: Profile successfully created. Performing additional checks. Make sure to restart all ACS components to reload the profile.
After setup is complete, check to see if the daemons are configured to start in /etc/inittab. Note: acsnnas is for NetApp NAS volumes and acsnsan is for NetApp SAN volumes.
bash-3.00# grep acs /etc/inittab
ac00:2345:respawn /home/db2int2sqllib/acs/acsd
ac00:2345:respawn /home/db2int2sqllib/acs/acsnnas –D
OR
ac00:2345:respawn /home/db2int2sqllib/acs/acsnsan –D
Check to see if the daemons are running:
bash-3.00# ps -ef | grep acs
root 12255442 6225980 0 16:25:07 pts/2 0:00 grep acs
db2int2 12451872 1 0 16:24:50 - 0:00 /home/db2int2/sqllib/acs/acsd
db2int2 12451873 1 0 16:26:35 - 0:00 /home/db2int2/sqllib/acs/acsnsan -D
bash-3.00#
Now that ACS is configured, we can perform snapshot backups and restores. As the database instance user execute the following commands to take backups, list backups or restore the database.
Execute the following to take an offline backup:
bash-3.00$ db2 backup db mydb use snapshot
You can specify the "online" parameter to take an online backup of the database:
bash-3.00$ db2 backup db mydb online use snapshot
To list the backups of the database as follows:
bash-3.00$ db2acsutil query
To restore the latest backup:
bash-3.00$ db2 restore db mydb use snapshot
Integrating DB2 Advanced Copy Services with NetApp Snapshots
Monday, September 5, 2011
"Unfortunately this has not been documented very well." Fun with VERITAS Cluster Server
The application team went through their testing over the last month or so and we completed our VCS test matrix in preparation for cutover. During the cutover, though, we noticed the following message in the alert
WARNING:Oracle instance running on a system with low open file descriptor
limit. Tune your system to increase this limit to avoid
severe performance degradation.
Thinking that we'd missed a resource control setting somewhere we went through the process of validating those settings. Then, seeing that they looked correct, we asked the DBA to stop and restart the database manually only to find that the error message above didn't appear. Using VCS to stop and start the database would generate this error every time, though.
We opened a case with Symantec and started to troubleshoot. Thankfully we found that in VCS 5.1 SP1 Symantec added a file called vcsenv that hardcodes limits for CPU time, core file size, data segment size, file size, and the number of open file descriptors before we ran out of window for the cutover.
The location and contents of the file are shown below, including where we set the number of file descriptors to 8192.
"Unfortunately this has not been documented very well." Fun with VERITAS Cluster Server
Monday, August 29, 2011
Working with NetBackup CTIME Timestamps in Excel
To convert between the timestamp and “human readable” time, Symantec provides the bpdbm command with the -ctime flag to convert from NetBackup’s timestamp to the current time zone. For example:
bash-3.00# bpdbm -ctime 1303936891Some of my favorite NetBackup reports output job start/stop times and other data using CTIME timestamps:
1303936891 = Wed Apr 27 15:41:31 2011
- bpmedialist shows the expiration date for tapes
- bpimagelist shows the start and stop times for backup images in the catalog, as well as image expiration dates
To convert from CTIME to “Excel” time you need the following information:
- The NetBackup timestamp (the number of seconds since 1/1/1970, in GMT)
- The number of seconds per day (86,400)
- The Excel serial number for 1/1/1970 (25,569)
- Your current timezone offset in hours (for US/Central this is currently -5)
timestamp/86400+25569+(-5/24)
Working with NetBackup CTIME Timestamps in Excel
Monday, August 22, 2011
How to Mount Cloned Volume Groups in AIX
Typically, creating a clone of a LUN and mounting the file system on the original server is a trivial process. The process becomes more complex if volume management is involved. Server based volume management software provides many benefits, but complicates matters where LUN clones are used. In the case of IBM's Logical Volume Management (LVM), mounting clones on the same server results in duplicate volume group information. Luckily, AIX allows LVM to have duplicate physical volume IDs (PVID) for a "short period" of time without crashing the system. Not sure exactly what a "short period" of time equates too, but in my testing I didn't experience a crash.
The process to "import" a cloned volume group for the first time is disruptive in that the original volume group must be exported. It is necessary to have the original volume group exported so that the physical volume IDs (PVIDs) on the cloned LUNs can be regenerated. The recreatevg command is used to generate new PVIDs and to rename the volume names in the cloned volume group. Note that the /etc/filesystem entries need to be manually updated because the recreatevg command prepends /fs to the original mount point names for the clones. Once the /etc/filesystem file is updated, the original volume group can be re-imported with importvg.
Subsequent refreshes of previously imported clones can be accomplished without exporting the original because ODM remembers the previous PVID to hdisk# association. It does not reread the actual PVID from the disk until an operation is performed against the volume group. The recreatevg command will change the PVIDs and volume names on the cloned volume group without affecting the source volume group.
Process for initial import of cloned volume group:
- Clone the LUNs comprising the volume group
- Make sure to clone in a consistent state
- Make sure to clone in a consistent state
- Unmount and export original volume groups
- Use df to associate file systems to volumes
- Unmount file systems
- Use lsvg to list the volume groups
- Issue varoffvg to each affected volume group
- Use lspv to view the PVIDs for each disk associated with the volume groups
- Remember the volume group names and which disks belong to each VG that will be exported
- Use varyoffvg to offline each VG
- Use exportvg to export the VGs
- Use df to associate file systems to volumes
- Bring in the new VG
- Execute cfgmgr to discover new disks
- Use lspv to identify the duplicate PVIDs
- Execute recreatevg on each new VG listing all disks associated with the volume group and –y option to name the VG
- Use lspv to verify no duplicate PVIDs
- Execute cfgmgr to discover new disks
- Import the original volume groups
- Execute importvg with the name of one member hdisk and the –y option with the original name
- Mount the original file systems.
- Execute importvg with the name of one member hdisk and the –y option with the original name
- Mount the cloned file systems
- Make mount point directories for the cloned file systems
- Edit /etc/filesystems to update the mount points for the cloned VG file systems
- Use mount command to mount the cloned file systems
- Make mount point directories for the cloned file systems
Process to refresh cloned volume group:
- Unmount and vary off the cloned volume groups to be refreshed
- Execute umount on associated file systems
- Use varyoffvg to offline each target VG
- Execute umount on associated file systems
- Refresh the clones on the storage system
- Bring in the refreshed clone VGs
- Execute cfgmgr
- Use lspv and notice that ODM remembers the hdisk/PVID and volume group associations
- Use lspv and notice that ODM remembers the hdisk/PVID and volume group associations
- Use exportvg to export the VGs noting the hdisk numbers for each VG
- Execute recreatevg on each refreshed VG naming all disks associated with the volume group and –y option to name the VG to its original name
- Now lspv displays new unique PVIDs for each hdisk
- Mounting the refreshed clone file systems
- Edit /etc/filesystem to correct the mount points for each volume
- Issue mount command to mount the refreshed clones
- Edit /etc/filesystem to correct the mount points for each volume
bash-3.00# df
Filesystem 512-blocks Free %Used Iused %Iused Mounted on
/dev/hd4 1048576 594456 44% 13034 17% /
/dev/hd2 20971520 5376744 75% 49070 8% /usr
/dev/hd9var 2097152 689152 68% 11373 13% /var
/dev/hd3 2097152 1919664 9% 455 1% /tmp
/dev/hd1 1048576 42032 96% 631 12% /home
/dev/hd11admin 524288 523488 1% 5 1% /admin
/proc - - - - - /proc
/dev/hd10opt 4194304 3453936 18% 9152 3% /opt
/dev/livedump 524288 523552 1% 4 1% /var/adm/ras/livedump
/dev/pocdbbacklv 626524160 578596720 8% 8 1% /proddbback
/dev/fspoclv 1254359040 1033501496 18% 2064 1% /cl3data
/dev/fspocdbloglv 206438400 193491536 7% 110 1% /cl3logs
/dev/poclv 1254359040 1033501480 18% 2064 1% /proddb
/dev/pocdbloglv 206438400 193158824 7% 115 1% /proddblog
/dev/datalv2 836239360 615477152 27% 2064 1% /datatest2
/dev/loglv2 208404480 195088848 7% 118 1% /logtest2
bash-3.00#
bash-3.00$ umount /datatest2/
bash-3.00# umount /logtest2/
bash-3.00# lsvg
rootvg
pocdbbackvg
dataclvg
logsclvg
pocvg
pocdblogvg
datavg2
logvg2
bash-3.00# varyoffvg datavg2
NOTE: remember the hdisk and vg names for the exported vg's.
bash-3.00# lspv
hdisk0 00f62aa942cec382 rootvg active
hdisk1 none None
hdisk2 00f62aa997091888 pocvg active
hdisk3 00f62aa9a608de30 dataclvg active
hdisk4 00f62aa9a60970fc logsclvg active
hdisk10 00f62aa9972063c0 pocdblogvg active
hdisk11 00f62aa997435bfa pocdbbackvg active
hdisk5 00f62aa9a6798a0c datavg2
hdisk6 00f62aa9a6798acf datavg2
hdisk7 00f62aa9a6798b86 datavg2
hdisk8 00f62aa9a6798c36 datavg2
hdisk9 00f62aa9a67d6c9c logvg2 active
hdisk12 00f62aa9a67d6d51 logvg2 active
bash-3.00# varyoffvg logvg2
bash-3.00# lsvg
rootvg
pocdbbackvg
dataclvg
logsclvg
pocvg
pocdblogvg
datavg2
logvg2
bash-3.00# exportvg datavg2
bash-3.00# exportvg logvg2
bash-3.00#
bash-3.00# exportvg datavg2
bash-3.00# exportvg logvg2
bash-3.00# cfgmgr
bash-3.00# lspv
hdisk0 00f62aa942cec382 rootvg active
hdisk1 none None
hdisk2 00f62aa997091888 pocvg active
hdisk3 00f62aa9a608de30 dataclvg active
hdisk4 00f62aa9a60970fc logsclvg active
hdisk10 00f62aa9972063c0 pocdblogvg active
hdisk11 00f62aa997435bfa pocdbbackvg active
hdisk5 00f62aa9a6798a0c None
hdisk6 00f62aa9a6798acf None
hdisk7 00f62aa9a6798b86 None
hdisk8 00f62aa9a6798c36 None
hdisk13 00f62aa9a6798a0c None
hdisk14 00f62aa9a6798acf None
hdisk15 00f62aa9a6798b86 None
hdisk9 00f62aa9a67d6c9c None
hdisk12 00f62aa9a67d6d51 None
hdisk16 00f62aa9a6798c36 None
hdisk17 00f62aa9a67d6c9c None
hdisk18 00f62aa9a67d6d51 None
bash-3.00#
Notice the duplicate PVIDs. Use the recreatevg command naming all of the new disks in each volume group of the newly mapped clones.
bash-3.00# recreatevg -y dataclvg2 hdisk13 hdisk14 hdisk15 hdisk16
dataclvg2
bash-3.00# recreatevg -y logclvg2 hdisk17 hdisk18
logclvg2
bash-3.00# importvg -y datavg2 hdisk5
datavg2
bash-3.00# importvg -y logvg2 hdisk9
logvg2
bash-3.00# lspv
hdisk0 00f62aa942cec382 rootvg active
hdisk1 none None
hdisk2 00f62aa997091888 pocvg active
hdisk3 00f62aa9a608de30 dataclvg active
hdisk4 00f62aa9a60970fc logsclvg active
hdisk10 00f62aa9972063c0 pocdblogvg active
hdisk11 00f62aa997435bfa pocdbbackvg active
hdisk5 00f62aa9a6798a0c datavg2 active
hdisk6 00f62aa9a6798acf datavg2 active
hdisk7 00f62aa9a6798b86 datavg2 active
hdisk8 00f62aa9a6798c36 datavg2 active
hdisk13 00f62aa9c63a5ec2 dataclvg2 active
hdisk14 00f62aa9c63a5f9b dataclvg2 active
hdisk15 00f62aa9c63a6070 dataclvg2 active
hdisk9 00f62aa9a67d6c9c logvg2 active
hdisk12 00f62aa9a67d6d51 logvg2 active
hdisk16 00f62aa9c63a6150 dataclvg2 active
hdisk17 00f62aa9c63bf6b2 logclvg2 active
hdisk18 00f62aa9c63bf784 logclvg2 active
bash-3.00#
Notice the PVID numbers are all unique now.
remount original file systems
bash-3.00# mount /datatest2
bash-3.00# mount /logtest2
bash-3.00#
create new mount points and edit /etc/filesystems
bash-3.00# mkdir /dataclone1test2
bash-3.00# mkdir /logclone1test2
bash-3.00# cat /etc/filesystems
…
/fs/datatest2:
dev = /dev/fsdatalv2
vfs = jfs2
log = /dev/fsloglv03
mount = true
check = false
options = rw
account = false
/fs/logtest2:
dev = /dev/fsloglv2
vfs = jfs2
log = /dev/fsloglv04
mount = true
check = false
options = rw
account = false
/datatest2:
dev = /dev/datalv2
vfs = jfs2
log = /dev/loglv03
mount = true
check = false
options = rw
account = false
/logtest2:
dev = /dev/loglv2
vfs = jfs2
log = /dev/loglv04
mount = true
check = false
options = rw
account = false
bash-3.00#
Notice the cloned duplicates are prefixed with /fs on the mount point by the recreatevg command. Also the volume names were changed to prevent duplicate entries in /dev. Update /etc/filesysems with the mount points created previously.
bash-3.00# mount /dataclone1test2
Replaying log for /dev/fsdatalv2.
bash-3.00# mount /logclone1test2
Replaying log for /dev/fsloglv2.
bash-3.00# df
Filesystem 512-blocks Free %Used Iused %Iused Mounted on
/dev/hd4 1048576 594248 44% 13064 17% /
/dev/hd2 20971520 5376744 75% 49070 8% /usr
/dev/hd9var 2097152 688232 68% 11373 13% /var
/dev/hd3 2097152 1919664 9% 455 1% /tmp
/dev/hd1 1048576 42032 96% 631 12% /home
/dev/hd11admin 524288 523488 1% 5 1% /admin
/proc - - - - - /proc
/dev/hd10opt 4194304 3453936 18% 9152 3% /opt
/dev/livedump 524288 523552 1% 4 1% /var/adm/ras/livedump
/dev/pocdbbacklv 626524160 578596720 8% 8 1% /proddbback
/dev/fspoclv 1254359040 1033501496 18% 2064 1% /cl3data
/dev/fspocdbloglv 206438400 193491536 7% 110 1% /cl3logs
/dev/poclv 1254359040 1033501480 18% 2064 1% /proddb
/dev/pocdbloglv 206438400 193158824 7% 115 1% /proddblog
/dev/datalv2 836239360 615477152 27% 2064 1% /datatest2
/dev/loglv2 208404480 195088848 7% 118 1% /logtest2
/dev/fsdatalv2 836239360 615477160 27% 2064 1% /dataclone1test2
/dev/fsloglv2 208404480 195744288 7% 114 1% /logclone1test2
bash-3.00#
How to Mount Cloned Volume Groups in AIX
Monday, August 15, 2011
Virtual Machine Migration Fails
Through an SSH session I validated the snapshot VMDK and VMDK flat file existed in the proper directory. The VMDK flat file had a non-zero size, suggesting to me this might be a configuration problem.
Out of curiosity I examined the snapshot’s VMDK configuration file and noticed the parentFileNameHint entry contained the full pathname and used the VMFS GUID value. Hmm. Is that the proper GUID? No it wasn’t.
Since the VM had other snapshots I reviewed those configuration files as well and noticed they used relative path names for the parentFileNameHint. Could it be that simple?
I edited the snapshot VMDK configuration file and removed the full path qualification.
Problem solved.
In my example above (which was reproduced in my lab), I changed:
parentFileNameHint=”/vmfs/volumes/4ab3ebbc-46f3c941-7c14-00144fe69d58/retro-000001.vmdk"
To:
parentFileNameHint="retro-000001.vmdk"
Virtual Machine Migration Fails
Monday, August 8, 2011
FCIP considerations for 10 GigE on Brocade FX8-24
FCIP considerations for 10 GigE on Brocade FX8-24
Monday, August 1, 2011
Storage Performance Concepts Entry 6
Storage Performance Concepts Entry 6
Monday, July 25, 2011
Demonstration of Hitachi Dynamic Tiering
Demonstration of Hitachi Dynamic Tiering
Monday, July 18, 2011
Hitachi Dynamic Provisioning (HDP) in practice
In brief, HDP brings three different things to the table:
- Wide striping - data from each LUN in an HDP pool is evenly distributed across the drives in the pool.
- Thin provisioning - space is only consumed from an HDP pool when data is written from the host. In addition, through Zero Page Reclaim (ZPR), you can recover unused capacity.
- Faster allocation - In a non-HDP environment there were two options. You could either have predetermined LUN sizes and format the array ahead of time, or you could create custom LUNs on-demand and wait for the format. With HDP you are able to create custom-sized LUNs and begin using them immediately.
Hitachi Dynamic Provisioning (HDP) in practice
Monday, July 11, 2011
ESX Site Recovery Manager with NetApp Storage
Other things you will need:
- A NetApp head at each site, running at least OnTAP 7.2.4
- A SnapMirror license installed at each site
- A SnapMirror relationship defined and established for your primary datastore
- A FlexClone license (required only to enable the test failover function, as demonstrated in the video)
- The datastore FlexVols can only have a single SnapMirror relationship, which is to the secondary location. No daisy-chains. This also limits the ability to have multiple recovery sites for a single primary site.
- Replication should be done with plain-old Volume SnapMirror. (Qtree-SnapMirror might work and isn't explicitly unsupported, but would be an unwise plan).
- SyncMirror however is explicitly unsupported in conjunction with SRM. That should present less of an issue. If you're lucky enough to have SyncMirror, your single ESX cluster should probably span the two sites. So no SRM required. You can still run regular SnapMirror along with SyncMirror to get the VMs off to a third more distant location.
ESX Site Recovery Manager with NetApp Storage
Monday, July 4, 2011
Storage Performance Concepts Entry 5
Storage Performance Concepts Entry 5
Monday, June 27, 2011
Performing a CommVault CommServe Recovery
Disregard the following error message. You will be overwriting the existing default CommServe database.
Performing a CommVault CommServe Recovery