In my RSS feeds this morning, a fantastic blog post by the Microsoft System Center Configuration Manager Product Group appeared talking about how to understand the Configuration Manager Content Library. It is very insightful as to how ConfigMgr maintains the hashes and single-instance-storage across Distribution Points. I highly recommend reading it, and any other blog posts on their blog. To give you a taste, I have included a snippet below, but click here to read the entire blog post. It will definitely be worth your while if you are a ConfigMgr Admin.
The content library is a new concept that was introduced in System Center 2012 Configuration Manager. In a nut-shell, the content library stores all the Configuration Manager content efficiently on the disk. If the same file is part of two different packages, it stores only one copy in the content library. However, references are kept indicating that the file is part of both the packages.
The focus of this blog is to provide more insights on what happens behind the scenes and help Configuration Manager users and administrators to understand the concept better.
Note: The content library is also known as the “single-instance store”, referring to the single instance of any particular file.
Rationale for the Content Library
The rationale for content library is to optimize disk storage and to avoid distributing a file that already exists on the distribution points.
If two different packages each contain a particular file that is identical (even if the file names are different), only one copy of this file will be stored by the content library. This minimizes the disk space consumption.
When distributing a package, we first analyze all the files in that package. If a file to be distributed is already present on the distribution point as part of another package or part of a previous version of the same package, that file is not copied to the distribution point. Instead, we add a mapping reference between that file and the new package that we are distributing. This helps reduce the network traffic by not copying files that already exist. Additionally, it allows for more rapid provisioning of packages on the distribution point.
Location of the Content Library
A copy of the content library (containing all packages) is housed on the site server (as the source for distribution points). Moreover, each distribution point will have a copy (as the source for clients), containing the packages distributed to the distribution point. The content library is designed to optimize both network and disk usage in the distribution process. This helps to keep our customers’ costs lower and efficiency higher.
The content library is typically stored on the root of a drive in a folder called “SCCMContentLib”. This folder is shared and has restricted permissions to prevent accidental damage. Within this are the Package Library (“PkgLib” folder), the Data Library (“DataLib” folder), and the File Library (“FileLib” folder). The Package Library contains information about what packages are present on the distribution point. The Data Library contains information about the original structure of the packages. The File Library contains the original files in the package; this is typically where the bulk of the storage is used.
For instance, in the screenshot below, the content library is located on the root of the C: drive, in C:\SCCMContentLib. It is shared as “SCCMContentLib$”. Regardless of which drive the content library is located on, the primary share location will always be “SCCMContentLib$”.
The starting point for exploring the content library is the Package Library folder, “PkgLib”. Within this folder will be several files, one for each package distributed to the distribution point. The name will be the package ID, e.g. ABC00001.INI. In this file is a list of contents IDs (under the “[Packages]” section) that are part of the package, as well as other information, such as the version. Using these content IDs, we can continue exploring the contents of the content library. Let us assume that ABC00001 is a legacy-style package, at version 1. Thus, the content ID in this file will be ABC00001.1.