Last Updated on March 25, 2022
Just after 6 years of its foundation, Microsoft acquired FSLogix in the last quarter of 2018. The purpose of this article is to demonstrate FSLogix Office 365 Container setup.
Update: General availability of FSLogix 2105 (2.9.7838.44263) was announced by Microsoft on July 12, 2021. It includes multiple improvements and bug fixes, notably, the RefreshUserPolicy setting can now be managed through GPO, and RebootOnUserLogoff & ShutdownOnUserLogoff now apply properly. Read more at Techcommunity.
Remember UPD (User Profile Disk)? Microsoft introduced it in server 2012. It is a great solution that allows moving the entire user profile to a VHD file. In UPD settings you define the location where UPDs are saved (for High Availability you can place UPDs on a clustered file share), and items that you want to include in the User Profile Disk.
When a user logs in, a VDH file is created for that user on the User Profile Disks location using “UVHD-template” file. This template file is created when you configure and apply UPD settings. The format of the user-specific VHD file is UVHD-userSID (the objectSID attribute of a user object).
After that the user-specific VHD file is mounted to the server or a desktop, it appears as a symlink under C:\Users. When the user logs off, the VHD file is un-mounted and all the changes to the user profile are saved to VHDX file.
So far so good, correct? Folder Redirection is sorted, Outlook OST is sorted, HKCU is also captured, and logon time is improved but what about Citrix and VMware? UPD works with Remote Desktop Services environment. Look at the first screenshot; it is a collection of pooled machines. If relevant in any scenario, checkout this video or this article to understand how to configure UPD.
To make UPD work for Citrix XenApp and VMware Horizon, you have to go an extra mile of executing some PowerShell commands or pushing UvhdRoamingPolicy.xml using computer start-up script through GPO. If you are interested in that then visit this whitepaper and scroll down to Command Line Implementation.
(gwmi -ns root\cimv2\terminalservices -class win32_tssessiondirectory).createuserdisktemplate("\\FILE_SERVER\SHARE",SIZE)
(gwmi -ns root\cimv2\terminalservices -class win32_tssessiondirectory).enableuservhd("\\FILE_SERVER\SHARE","0")
<UvhdRoamingPolicy>
<RoamingMode>2</RoamingMode>
<Include>
<Folder>AppData\Local\Microsoft\Outlook</Folder>
</Include>
</UvhdRoamingPolicy>
Feature Expectations
Outlook OST (Cache Mode) is not the only feature that is expected from a profiling solution (or a workspace solution). It also needs to provide an efficient delivery and consumption of:
- Roaming of Search Index Database so you can effectively search e-mails in Outlook
- Seamless multi-session roaming of One Drive for Business and SharePoint user data so you don’t have re-sync at each logon
- Support for Skype of Business GAL, Microsoft Teams Data and One Note Notebook files.
Can UPD meet these expectations? Unfortunately, No. Can other well-known solutions like Citrix UPM, Citrix WEM, Citrix App layering User Layer, Citrix App Layering O365 Layer, Liquidware Profile Unity, Ivanti Workspace Manager, and VMware App Volumes fulfil these expectations? The answer is Yes, No and Partially Yes. David Wilkinson has done an outstanding job of creating a Comparison Matrix that illustrates what you can achieve with what solution.
Although Citrix introduced Profile Container feature in Profile Management 2009 and newer that allows placing entire profile in a VHDX file, and from Profile Management 1811 and newer, it is possible to roam search index for outlook, I still prefer using FSLogix office container for all office applications and UPM for rest of the profile.
Comes FSLogix
FSLogix, not just delivers up to the expectations, it goes one-step further with feature like Cloud Cache. Again, the target of this article is to understand FSLogix Office 365 container setup.
FSLogix provides 4 solutions:
- Profile Container (Cloud Cache is used with Profile Container) – Profile Container takes your whole user profile and places it into a VHD(X) file on a file share. If you are using Cloud Cache, you replace the VHD location with CCD location. Check this tutorial from Microsoft. Enterprise Architect, Roy Zylowski has written a blog explaining the different between Citrix App layering and FSLogix Profile Container. In summary, he says:
- Use FSLogix to solve problems associated with roaming profiles on non-persistent VDI.
- Use user layers when you’re trying to provide a persistent user experience on non-persistent VDI.
- If you’re using FSLogix and Citrix App Layering together, install FSLogix into an application layer.
- If you’re using FSLogix and Citrix App Layering together, you must change the altitude of the FSLogix filter driver.
- If you’re using FSLogix and Citrix App Layering together, use a GPP to create the FSLogix local groups
- Office 365 Container – In this article, we will concentrate on FS Logix Office 365 Container. See next Topic.
- Application Masking – You can use App Masking to hide applications from certain users on a golden image. That’s not it, there are many use cases that make App Masking an appealing solution. Check FSLogix App Masking – Real World Examples.
- Java Version Control – Java Version Control allows you to tie Website URLs with a specific version of Java.
If you own any of the following license, you are eligible to use FSLogix
- Microsoft 365 E3/E5
- Microsoft 365 A3/A5/ Student Use Benefits
- Microsoft 365 F1
- Microsoft 365 Business
- Windows 10 Enterprise E3/E5
- Windows 10 Education A3/A5
- Windows 10 VDA per user
- Remote Desktop Services (RDS) Client Access License (CAL)
- Remote Desktop Services (RDS) Subscriber Access License (SAL)
Do check Microsoft’s official document for latest updates.
FSLogix Office 365 Container
FSLogix Office 365 Container redirects only Office related data to a VHD file compared to profile Container that redirects entire profile. When the user logs in, the VHD file is mounted and at logoff, VHD is unmounted and changes are saved to be available in next logons as persistent data. It is best to store VHDs on a Network file share. FSLogix uses Filter Driver to convince applications that profile is local to the server or desktop. That’s the reason most of the applications work with FSLogix solutions because they don’t recognize that profile is actually on a remote storage.
Installing FSLogix Office 365 Container is very straight forward and configuration can be done through either GPOs or registry. FSLogix can be installed in golden image or manually on all VDAs. See Citrix VDA 1912 LTSR installation and configuration.
- Download FSLogix media from https://docs.microsoft.com/en-us/fslogix/install-ht.
- Go to FSLogix_Apps_2.9.7237.48865\x64\Release.
- Right click on FSLogixAppsSetup.exe and select Run as Administrator.
- Click on Yes in UAC prompt.
- Check “I agree to the license terms and conditions” and click on Install.
- If you want to change default installation location then click on Options.
- Installation will proceed.
- Once completed, you will see Setup Successful.
- In Programs and Features, you will see Microsoft FSLogix Apps.
- Set up a File Share. Remove Everyone from Share Permissions, assign Read, and Change permission to Authenticated Users. This will be used as VHD Location to store VHD files.
- Modify NTFS permission as shows in below images.
User Account | Folder | Permissions |
Users | This Folder Only | Modify |
Creator / Owner | Subfolders and Files Only | Modify |
Administrator (optional) | This Folder, Subfolders, and Files | Full Control |
- Copy fslogix.admx and paste it at \\domain\SYSVOL\domain\Policies\PolicyDefinitions. Copy fslogix.adml and paste it at \\domain\SYSVOL\domain\Policies\PolicyDefinitions\en-us.
- Edit a GPO or create a new One. Go to Computer Configuration/Administrative Templates/FSLogix/Office 365 containers. Open Enable setting. Select Enable and check Enabled. This setting enables FSLogix Office 365 container.
- Open VHD Location setting. Enable it and put the path of the file share we created in one of the previous step.
- Open Size in MBs setting. Enable it and leave the size to 500MBs. The default size of the VHD is 30 GBs and minimum size is 500 MBs. If you try to change the size to any number below 500, you will get an alert.
- If you wish, you can enable Dynamic VHD(X) allocation
- Open Include Outlook data in container and enable it
- Open Include Outlook personalization date in container and enable it
- Open Include search database in Office 365 container. Enable it and select Multi-user search for server and Single-user for desktop operating system
- Confirm that searchindexer.exe is running. If it not then install Window Search Service Feature
- Open Include OneDrive data in container and enable it
- Open Include Teams data in container and enable it
- Open Include Skype data in container and enable it
- Open Include OneNote data in container and enable it
- Open Include OneNote UWP notebook data in container and enable it
- Now, when a user logs in, a folder in VHD Location by the name SID_UserID is created. Inside that folder, you can find the VHD file by the name ODFC_UserID.vhd. Inside Disk Management, you see the mounted disk of 500 MBs
- Let’s configure concurrent access to VHD now. Concurrent Access means that a user is allowed to make multiple, concurrent connections to same windows instance. This is not very common in Citrix Virtual Apps and Desktops. Concurrent Access in FSLogix is possible because of a Difference Disk. The purpose of Difference disk is to ensure that changes are reverted or merged to the parent VHD. Read this great write up by CTP Mike Streetz at MyCUGC.
- Open Allow concurrent user sessions and enable it.
- Open VHD access type, enable it and select Unique disk per session. Using Difference disk stored on local machine or Difference disk stored on network could potentially cause data loss to Outlook and One Drive for Business. Direct Access will fail the concurrent access with a sharing violation error (20)
- Per-session unique disk doesn’t use Difference Disk. As the name suggests, it uses a unique disk for every concurrent session
- Per-session VHD files are named as ODFC-%username%-SESSION-<sessionnumber>.vhd where SessionNumber is an integer from 0 – 9
- At logon, if VHD is found and currently not in use then it will be directly attached. If not found, one will be created and used
- At logout, the VHD is detached and if it marked for deletion (the number exceeds 9) then it will be removed
- To the maximum, 10 number of per-session VHDs can be created
- The disadvantage of Per-session unique disk is that there is no fully merged VHD therefore the currently attached VHD takes extra time to fully synchronize. Unfortunately, that the only supported method at time of writing if you want Concurrent Access and don’t want to lose data while using Outlook and OneDrive for Business.
- If Concurrent Access is not required then go with Direct Access that is the default option and works with Outlook and OneDrive for Business.
- To understand how to setup concurrent access on FSLogix Profile Container, read this Microsoft doc
- This is how VHDs will look with Per-session unique disk
- Final Result
- Exclude Administrators so their profiles (Profile Container) or Office Data (Office Container) is not processed. FSLogix creates four groups. By default, Everyone is added to both Include List groups. Add Administrators to both Exclude List groups
- If you are using any other profile solution like Citrix UPM with FSLogix Office 365 Container then you should add following exclusions in that profiling solution otherwise conflicts may occur.
At the end of this article, I recommend reading Leveraging new FSLogix platform capabilities in virtual environments by Dave Brear.
Thanks for reading.
Hi Nishanth, I have recently configured FSLogix office container in citrix and upm is used for profile. Vhdx is getting attached for the first time and once the ost is created but the vhdx is not getting attached for the subsequent login. Log says “cannot open virtual disk. It is used by another process”. My vdi is non persistent win10 and FSLogix version is the latest. Any suggestion would be very much helpful.
Hi Girish, I am assuming “Concurrent user access” and “VHD access type” are not configured?
The scope of troubleshooting this problem can be very broad or very small depending on how you have configured Office Container. Can you send the logs to me at gupta.nishith@outlook.com?
I have some users using the old .VHD format while caching “all” email and not currently containing any search or other Office 365 containers. If I move to .VHDX and enable more Office 365 containers, how much more space should I allocate? Some current drives are 18GB, but I am not sure how much more data to allocate for the maximum size threshold for FSLogix. Thanks!
Hi Jeff,
The default size of the VHD(x) is 30 GBs. You can change that according to your requirement with the help of “Size in MBs” setting (see point 15).
Unfortunately, there is no single rule to determine the size of the VHDX. You should start small or start with baseline and observe the growth for some period of time.
Another option is to use Dynamic VHD(X) allocation (see point 16). Dynamic disk automatically expands to the actual size of the content on the disk. I haven’t used it so I am not sure if it automatically shrinks or not.
Do read https://stealthpuppy.com/fslogix-containers-capacity/
Additionally, if you are using profile container then try reducing the size of the user profile by excluding specific files and folders from user’s profile with the help of redirections.xml. See https://docs.microsoft.com/en-us/fslogix/manage-profile-content-cncpt.
Thanks Nishith for taking time to write so detailed article. It is excellent article. Google search never shows this article. Only duckduckgo. For me most confusing part is concurrent session. You had it very much clarified. I have one doubt when you said “The disadvantage of Per-session unique disk is that there is no fully merged VHD therefore the currently attached VHD takes extra time to fully synchronize.” So these VHDX merge or they do not merge. e.g. If user has session01 -VHD and Session02-diffVHD. When user from session01 logsout, how does that data is synced?
Glad you liked it, Preetam.
With “Per-session unique disk” there is no difference disk that’s why no merge.
Not sure how synchronization works in the background. Probably, next time I will capture the sync operation using Procmon or some other tool.