Change Folder Target of DFSR Member

About to run out of space on the volume hosting a DFS folder target? I just about did, and had to take quick steps to move to a bigger volume. This page describes the process and commands used.

Note: This process will perform an initial replication within your replication group. As far as I’ve found, there is no way around it, so make sure you’re scheduling enough time for this to complete.

Note #2: A lot of this information was provided by Ned Pyle with Microsoft, through correspondence and the Ask DS blog. See this blog post for more information: http://blogs.technet.com/b/askds/archive/2010/09/07/replacing-dfsr-member-hardware-or-os-part-2-pre-seeding.aspx#comments

One of our replication groups is approaching 800 GB and almost 1 million files, and growing; and we were down to 2 GB free space remaining on the volume. Our environment at the time was fully Server 2008 x64.

Pre-Seed

After creating a larger volume for the files to move to, you will begin with Pre-Seeding your data. As recommended in the Ask DS post above, this should be a one-time operation. It was difficult for us to schedule this copy along with a time window for the initial sync, but we managed.

If you can, disable the folder targets so changes aren’t made during your file copy:

dfsutil property state offline \\domain.ca\files\jobs \\server\jobs$

The last two values of that command is the DFS path, and the folder target. Do this for each folder target.

Our pre-seed command was:

Robocopy.exe d:\jobs e:\jobs /b /e /copyall /r:6 /NFL /NDL /MT /xd dfsrprivate /log:robo.log /tee

It is VERY important that your destination folder does not exist before you pre-seed. Let the robocopy command create it for you. You can also use other pre-seed options mentioned in the Ask DS post above.

File Check

After the pre-seed, you’ll want to confirm DFSR recognizes the files as identical. If you don’t do this, you will get a ridiculous amount of conflicts in the event log during the inital sync. Trust me, I know this through experience.

To check the files you’ll need Server 2008 R2 or Windows 7 RSAT, and this command:

dfsrdiag.exe filehash /FilePath:"\\server\f$\Jobs\file1.txt"
dfsrdiag.exe filehash /FilePath:"\\server\e$\Jobs\file1.txt"

The same CRC value should be returned for each command. If not, then you’ve got a problem somewhere in your pre-seeding.

Change Share Path

Now you need to change the share target, so that the folder target will still be \\server\jobs$ (or whatever you’re using).

Open Regedit and navigate to: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanManServer\Shares

Find the REG_MULTI_SZ entry that corresponds to the DFS share and modify only the “Path” line to refer to the new path.
In my case, I changed Jobs$ share from F:\ to E:\. A restart is required before this takes effect, but we waited until after the next command.

Transfer DFSR Membership Settings

Now you need to tell DFSR that the location has changed. This is the command that starts the initial replication. Make sure this command is all one line.

dfsradmin membership set /rgname:domain.ca\files\jobs /rfname:Jobs /memname:domain\sw3010 /localpath:E:\Jobs /membershipenabled:true /stagingpath:E:\Jobs\DfsrPrivate\Staging /stagingsize:24000 /cdsize:660 /membershipdfsfolder:\\server\jobs$ /isprimary:false /force

Now restart the server. Once Windows comes back up, it will begin initial replication. You can check the progress by checking the backlog:

dfsrdiag Backlog /receivingmember:server1 /sendingmember:server2 /rgname:domain.ca\files\jobs /rfname:Jobs

In my environment, initial replication of ~800 GB and 1 million files takes approximately 8 hours.

Once initial replication is complete, make sure you re-enable the folder targets:

dfsutil property state online \\domain.ca\files\jobs \\server\jobs$

 

Now you’re done! Do a full backup after this is complete, and then delete the original source folder.

Wireless Bridge & Engenious 5611P

A quick review of the Engenious 5611P that we have been using for a few months to connect two offices.Engenious 5611P

My company recently leased space in a building adjacent to our head office. These two buildings are separated by 250 feet of parking lot, with clear line of sight.

We wanted network connectivity for data, as well as Voice Over IP, so that an additional phone system and receptionist aren’t required.

A wireless link is the obvious solution in this case, and we started with a Cisco WAP4410N. The interface for these devices was good, and setup was quick. We used the draft-N protocol and setup a WPA2 secured WDS bridge.

For ease of install we placed the two devices within the building behind the window.

Performance was acceptable, and after a few tests we deemed the link good. However, after about a week of activity in the office, there were severe performance issues, with packets dropping frequently and the Cisco devices locking up.

Ultimately we sourced the issue as being:

  • Cisco WAP4410N being a crappy device
  • Interference in the B/G/N network range within our area

 

Based on that, we purchased two Engenious EOC-5611P devices, to set up an 802.11a network.

Here’s a couple screenshots of the web interface:

Web Interface
Main Screen - Web Interface
Engenious WAP
Advanced Wireless - Web Interface

Since setting this up, the link has been rock solid, through hot weather (35 Celsius), cold weather (-40 Celsius), rain and heavy snow. (again, these are indoor behind a window). Our VOIP equipment has zero problems and we haven’t had any issues with the software on the devices.

The only downside that we have found of the Engenious devices is the lack of WPA2 encryption while using the bridge mode. Currently only WEP is supported for that mode.

I would immediately recommend these devices for anyone looking for a line of sight link, especially with 802.11a protocol. We purchased from NCIX here:

http://www.ncix.com/products/?sku=55480&vpn=EOC5611P&manufacture=EnGenius

MD3220i MPIO driver install on Hyper-V

We just finished setting up our Hyper-V failover cluster with a Dell MD3220i, and in the process I had a hard time finding information about the specific MPIO driver to use from Dell. Its actually very simple.

Here’s what you need to do:

  1. Install the MD Storage Manager software somewhere if you haven’t already
  2. On the server you installed it on, look in C:\Program Files (x86)\DSMDrivers. Copy the md3dsm folder to your Hyper-V host.
  3. On the Hyper-V host, enter the mpio control panel by typing mpiocpl:
  4. Click on the “DSM Install” tab, and then browse to the md3dsm folder.
    MPIO control panel
  5. Use the md3dsm.inf file, and then click “install”.
  6. Restart your Hyper-V host, and after going back into the mpiocpl, you should see additional providers listed:
    MPIO devices

PeerLock Review

Image from Ask DS blog
Image from Ask DS blog

A short review of PeerLock and how it has worked (and hasn’t) for us.

We use DFS through Windows Server to replicate our files to each branch office. This is preferable to having really slow access from the branch offices, or not having a consolidated file structure from which to work from.

One of the disadvantages of DFS is the lack of File Locking. If you have a file open on any member server, and someone opens the same file on a different member server, you will receive no notification that the file is in use.

This is explained in more detail here: http://blogs.technet.com/b/askds/archive/2009/02/20/understanding-the-lack-of-distributed-file-locking-in-dfsr.aspx

This review is mostly a grouping of my comments on that blog post.

What is it?

PeerLock (http://www.peersoftware.com/products/peerlock/peerlock.aspx) is software used to facilitate locking of files between servers.

It is installed (and licensed for) each member server that contains a copy of the files you want to lock. In our case, we have one hub DFSR member, and 3 spoke DFSR members. We set up the PeerLock program to watch each of our DFSR shares, with the target being the same DFSR share on the spoke servers.

How is it?

Well, for us, it didn’t work out. We are still using PeerLock, but in a much reduced role.

Note: this is based on version 2.02. We haven’t budgeted for an upgrade to the latest version, so performance may be improved.

Since we are replicating about 900 GB of data, with 100`s of files open at once, across business ADSL connections, PeerLock ended up causing many replication issues, conflicts and sharing violations.

At times, by 8:30AM we would have over 1000 files in the backlog, and they wouldn`t clear because DFSR had too many sharing violations. Through experimentation we found this was directly caused by PeerLock.

Because of this we have begun using it only for high-collaboration folders, instead of our entire DFSR shares.

On a smaller scale, it has been working great, and other than the steep price I would recommend it. Our files and folders that are commonly shared between offices are protected, while the majority of our files which are used by only one office are just monitored for conflicts.

Here are some considerations when using PeerLock:

  • Peerlock can run as a GUI, or a service, but not both. This means to run on a server that is logged off, you need to use the service, but to make configuration changes, you have to stop the service, start the GUI, make changes, close the GUI, start the service.
  • CPU usage is very high with a large amount of files protected. The program was using about 35% CPU constantly, on a 2009 PowerEdge 2900 server with a single Quad Core CPU.
  • Price – it was somewhere around $990 CAD per license, and you need one for each server.

If you are using PeerLock, here`s a knowledgebase article that really helped reduce some of the issues:

http://www.peersoftware.com/support/kb/kbarticleprintpreview.aspx?id=KBA-01128

Adobe Flash GPO Deploy error “InstallAx.exe”

Update: An updated script has been posted with some improvements, here.

“The file ‘installax.exe’ is not marked for installation”

This post details how to fix this issue, when Flash won’t uninstall correctly from a GPO deployment.

Adobe Flash PlayerThe Problem

I deploy the latest Flash versions through Group Policy, because it’s quick and simple. Some time ago, there was a version of Adobe Flash Player (10.1.5xx I think) that began causing problems with later versions.

What would happen is upon upgrades to Flash being pushed out, when updating the previous version an error would be logged. The GPO would successfully update the player, however it would continue to try updating every day, every time the computer started.

This occurred for both Windows 7 and Windows XP, and got to be quite annoying for my users.

When trying to update manually, the error that appeared was:

"The file 'installax.exe' is not marked for installation"

Here’s how I resolved it:

Based on various forum reports (http://forums.adobe.com/message/3124297) it seemed to be a problem with Flash leftovers.

On a test machine, I uninstalled all Flash versions, and then did a registry search, and removed these items:

[HKEY_CLASSES_ROOT\Installer\Features\4E867BFF724E3554CB631AF1E5269AD4]
[HKEY_CLASSES_ROOT\Installer\Features\6D98A6046E9005543B07D873D6BD65EB]
[HKEY_CLASSES_ROOT\Installer\Products\4E867BFF724E3554CB631AF1E5269AD4]
[HKEY_CLASSES_ROOT\Installer\Products\6D98A6046E9005543B07D873D6BD65EB]
[HKEY_CLASSES_ROOT\Installer\Features\00B86459180C72B4CA69A0A21353E906]
[HKEY_CLASSES_ROOT\Installer\Products\00B86459180C72B4CA69A0A21353E906]

These keys are a mix between Windows 7 x64 and Windows XP.

After that I manually installed the latest version, and it was successful. Now I needed to write a script that would remove these values and install the latest version.

The Script

I wanted to run this as a Shutdown script through group policy, rather than trying to push it out to all our clients through a scheduled task or something. This way it would eventually get applied to everyone. I think I’ll wait a period of time, and then disable this script and go back to a GPO msi install.

I made extensive use of echo and pause statements to ensure it was being applied correctly. Because I didn’t want a script for Windows 7 x64 and a separate one for Windows XP, there’s a bit of logic thrown in to check for version.

Here’s the script:

:: Adobe flash giving "installax" errors when updating from GPO :: This batch file will remove those errors and install 10.1.102.64
:: This batch file should be run from a shutdown or startup script

:: Check if Windows 7 or Windows XP, and goes to the proper section IF EXIST "C:\Program Files (x86)" goto :Win7Check
goto :WinXPCheck

:Win7Check
:: Check if the latest version is installed already in Windows 7. If so, exit. Otherwise install Set "AdobeVersion=" & setlocal & Set "$V="
:: Look in the Uninstall area of registry, where the installed version of Flash player is listed Set "RegKey=HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Adobe Flash Player ActiveX"
Set "RegItem=DisplayVersion"
:: Take the output of a REG QUERY to the location above, and put it into the AdobeVersion variable
For /f "tokens=3*" %%! in (
   '2^>nul Reg.exe QUERY "%RegKey%" /v "%RegItem%" ^|(
   Findstr.exe /ri "\<%RegItem%\>"^)') Do Set "$V=%%!"
endlocal & call Set "AdobeVersion=%$V%"

:: If what is currently installed matches latest version, exit. Otherwise, go to install section
if "%AdobeVersion%" == "10.1.102.64" goto :exit
goto :Install

:WinXPCheck
:: Check if the latest version is installed already in Windows XP. If so, exit. Otherwise install Set "AdobeVersionXP=" & setlocal & Set "$T="
:: Look in the Uninstall area of registry, where the installed version of Flash player is listed Set "RegKeyXP=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Adobe Flash Player ActiveX"
Set "RegItemXP=DisplayVersion"
:: Take the output of a REG QUERY to the location above, and put it into the AdobeVersion variable For /f "tokens=3*" %%! in (
   '2^>nul Reg.exe QUERY "%RegKeyXP%" /v "%RegItemXP%" ^|(
   Findstr.exe /ri "\<%RegItemXP%\>"^)') Do Set "$T=%%!"
endlocal & call Set "AdobeVersionXP=%$T%"

:: If what is currently installed matches latest version, exit. Otherwise, go to install section
if "%AdobeVersionXP%" == "10.1.102.64" goto :exit
goto :Install

:Install ::Uninstall current versions of Flash from DFS share start /wait \\domain.com\apps\Public\General\adobeflash\uninstall_flash_player.exe -uninstall

:: Remove offending registry entries causing the error (mentioned below) regedit /s \\domain.com\apps\Public\General\adobeflash\flash_remove_fix.reg

:: Install latest version of Flash start /wait \\domain.com\apps\Public\General\adobeflash\install_flash_player_10.1.102.64.exe -install
goto :exit


:exit

The registry file mentioned contains this (what is at the top of this post, with the removal switch):

[-HKEY_CLASSES_ROOT\Installer\Features\4E867BFF724E3554CB631AF1E5269AD4]
[-HKEY_CLASSES_ROOT\Installer\Features\6D98A6046E9005543B07D873D6BD65EB]
[-HKEY_CLASSES_ROOT\Installer\Products\4E867BFF724E3554CB631AF1E5269AD4]
[-HKEY_CLASSES_ROOT\Installer\Products\6D98A6046E9005543B07D873D6BD65EB]
[-HKEY_CLASSES_ROOT\Installer\Features\00B86459180C72B4CA69A0A21353E906]
[-HKEY_CLASSES_ROOT\Installer\Products\00B86459180C72B4CA69A0A21353E906]

This script successfully runs on Windows 7 and Windows XP, and merely exits when the latest version is already done.

Check what version of Adobe Flash Player you have, and what is current:

http://www.adobe.com/software/flash/about/

Uninstall Utility used to remove Flash Player

http://kb2.adobe.com/cps/141/tn_14157.html