Why in the world are you using roaming profiles? It's generally a bad idea, so don't do it unless you have to. Why? Because the database which is your user hive (HKeyCurrentUser in the registry) is saved up to the network and then down to your hard drive on each logoff and logon event, respectively. If anything goes wrong during the file transfer operation, the database (ntuser.dat) gets corrupt, and you need to either restore from backup or start from scratch.
Ok, that said, of course a lot of people use it, including me. There are good business reasons to do it in many situations, including ours. I wanted to give you some tips you won't easily find at Microsoft.
(e.g. http://technet2.microsoft.com/windowsserver/en/library/ede493f2-0327-4e65-879c-c952427578821033.mspx; http://technet.microsoft.com/en-us/library/bb490855.aspx)
Also, most of the documentation assumes you have full access to modify GPO settings willy-nilly. The documentation also usually assumes you're an idiot. Not Microsoft's fault - they have to write for everyone; I'm only addressing the geeks among us who actually have to make this crazy idea work.
The special pain you'll be dealing with in addition to the ntuser.dat corruption error (no way around it unless you use mandatory profile) is the fact that by default, all the contents of C:\Documents and Settings\<username> are copied to the network at every logoff event, then the directory on the hard drive is deleted. At logon, the directory is copied back to the user's hard drive. These directories can get pretty full of data, which makes logon times increase quite a bit.
You should be able to find on the white papers information about folder redirection. I'm sure this works great with a GPO, but I can't use that to do it. What you can do instead is to compile a registry update for your clients which forces redirection on most folders.
Please be aware that you can't redirect all the folders. Specifically, you can't redirect either root\Application Data nor root\Local Settings\Application Data. I'll address what to do with those in a moment.
You need to set up a different server to hold the redirected folders. This will be the user's personal drive space - I suggest using the "Home Folder" option within Active Directory. We'll call it the P: drive, for Personal.
It's easy enough to redirect My Documents; Right-Click My Documents --> Properties --> Target --> Move. That will save you plenty.
*Obligatory warning here - Modifying your registry can cause catastrophic data loss. Don't do this on a system you can't afford to lose, and don't mess with settings you don't yet fully understand.
The other settings you can set by modifying the following key:
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
There is a sister key. I'm not sure what it does, except hold the previous settings. You may have to mess with this, too:
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
You'll notice in this key there are values for the two directories I just said you can't redirect, Application Data and Local Settings\Application Data. Don't you believe it. Go ahead and try to change them; let me know if you get it to work without errors.
Also, don't touch the Fonts value - you could very well render your Windows installation unusable, as the Explorer shell (the UI) needs to get to fonts in order to render windows.
After migrating (IE) Cache to another directory on my hard drive, I was able to migrate the following successfully to my P: drive: Cookies, Desktop, Favorites, SendTo, Start Menu, Templates, Programs, Startup, Local Settings, History, My Pictures, My Music, My Video, Administrative Tools.
Now, when I log in, instead of all those files going back and forth, only the two unmovable directories need to be copied over, instead of everything.
Those two directories will still give you trouble, in that there are a couple of applications which love to write cache files to those directories. You need a script to run against your profile server to eliminate the contents of these folders regularly. Otherwise, logon, logout, and backup times just get too long. These directories are:
root\Application Data\Microsoft\CryptnetUrlCache\Content\. /f /q
root\Application Data\Microsoft\Office\Recent\. /f /q
root\Application Data\Sun\Java\Deployment\cache /s /q (RD)
root\Application Data\Macromedia /s /q (RD)
root\Cookies\. /f /q
root\Oracle Jar Cache\. /f /q
root\*.tmp /s /f /q
Here's a script for you. You can either use a UserList.txt file in the same directory as this batch job, with the directory names of the persons' profiles to be updated, or you can be a little more self-assured and just run it off the current dir /b output. Up to you. The syntax of the UserList.txt file needs to have no spaces, and a standard CR/LF at the end of each data element.
I made it small so the command lines don't wrap inconveniently.
@echo off
REM By Tom Kretzmer http://geekswithblogs.net/HammerTips
set CurrentDirectory=%cd%
c:
net use x: /delete
net use x: <share of profiles>
x:
REM ******Brave method****** FOR /F %%i IN ('dir x:\ /b') DO call :RunScript %%i
FOR /F %%i IN (%CurrentDirectory%\UserList.txt) DO call :RunScript %%i
c:
REM ===Keep adding for each share location=========================
net use x: /delete
net use x: <another share of profiles>
x:
REM ******Brave method****** FOR /F %%i IN ('dir x:\ /b') DO call :RunScript %%i
FOR /F %%i IN (%CurrentDirectory%\UserList.txt) DO call :RunScript %%i
c:
net use x: /delete
goto end
REM ===Get to the meat of the script=========================
:RunScript
echo on
if not exist x:\%1\. goto end
cd x:\%1
del /as "x:\%1\Application Data\Microsoft\CryptnetUrlCache\Content\*.*" /f /q
del "x:\%1\Application Data\Microsoft\Office\Recent\*.*" /f /q
rd "x:\%1\Application Data\Sun\Java\Deployment\cache" /s /q
rd "x:\%1\Application Data\Macromedia\Flash Player" /s /q
del "x:\%1\Cookies\*.*" /f /q
del "x:\%1\Oracle Jar Cache\*.*" /f /q
del "x:\%1\*.tmp" /s /f /q
cd..
@echo off
goto End
REM ============================
:End
I have found this cuts out about 1/3 of data by number of bytes, 1/2 by number of files.
This has been very helpful in our environment. I hope it helps in yours.
Thanks,
Tom Kretzmer