Home WINDOWS SERVER All or some Print queues on a Windows Server 2003 Cluster Server can disappear after moving the spooler group from node to the other

All or some Print queues on a Windows Server 2003 Cluster Server can disappear after moving the spooler group from node to the other

by Cengiz Kuskaya

Impact :

Users are not able to see some or all of the print queues if they are connected to the \\VirtualPrintServer .Therefore the users are not able to find the printers by browsing and cannot print to network printers or locally to the client attached printers.

Root Cause :

This problem can have different reasons. Most common reasons are :

1) Corrupt printer ports or printer names on both of the nodes.
2) If some of the dependent files of the printers are missing, the same behaviour might occur. Print queues can disappear after moving the spooler group from one node to the other. The spool folder should be compared. The spool folder should have the same stucture and size on both nodes.

Solution :

1) Corrupt printer names and printer ports should be deleted from all the cluster registry hives manually. Also, duplicate entries should be removed. Printer names and ports are listed under the registry keys below on cluster nodes. Check for corrupt entries.

Printer Names registry path

Printer Ports registry path
HKEY_LOCAL_MACHINE\Cluster\Resources\Spooler GUID\Parameters\Monitors\Standard TCP/IP Port\Ports\

How to clean printer names and ports from the cluster registry hive :

1.1) Shutdown all nodes except for one.
1.2) Stop the spooler service on that node.
1.3) Open the registry editor and backup the hives prior to the next steps.
1.4) Navigate to the following key : HKEY_LOCAL_MACHINE\Cluster\Resources\SPoolerGUID\Parameters\Printers\ and delete all corrupt or duplicate printer entries.
1.5) Also check the following location for corrupt or duplicate ports : HKEY_LOCAL_MACHINE\Cluster\Resources\Spooler GUID\Parameters\Monitors\Standard TCP/IP Port\Ports\
1.6) Open Cluster Administrator. Start > Run > Cluadmin.
1.7) On the left pane in the tree go to the root of the Cluster > right click the root > Properties > Quorum tab> and click change location.
Select a different shared disk as the default quorum disk. Otherwise the cluster disk driver will have an open handle to the quorum and therefore will not alllow renaming the MSCS folder on the quorum disk.
1.8) Go to > My Computer > click the Quorum Disk, in this example the quorum disk has the driver letter Q:, and rename the MSCS folder to MSCS_old.
1.9) Open the cluster administrator. Go to the root of the cluster > right click the root > properties > Quorum tab > change back the location of the quorum disk to Q:
1.10) If you go to > My Computer and click the quorum disk you will see that a new folder named MSCS is generated and the MSCS_old folder still exists.
1.11) Start the spooler service and reboot the node.
1.12) If you navigate to HKEY_LOCAL_MACHINE\Cluster\Resources\Spooler GUID\Parameters\Printers\ you will see that the deleted printer names or ports are not viewable.
1.13) Now you can boot the other nodes. Now the corrected hives will be loaded from the quorum.

2) Compare the size of the spool folders from all nodes. They should have the same size and the same structure. If not, copying the spool folder from the properly working node can solve the problem.

Copy the spool folder as described below :

2.1) Copy the spool folder from the properly working cluster node.
2.2) Move all the groups to the properly working node.
2.3) Stop the cluster and spooler service on the problematic node.
2.4) Start process explorer on the problematic node. Click Find > Handles or DLL’s and type the path of the spool folder. In this example C:\windows\system32\spool
2.5) Close all handles to the spool folder otherwise you will not be able to rename the actual spool folder.(At least Winlogon will have an open handle to the spool folder.)
2.6) Rename the spool folder to spool_old on the problematic node and copy the spool folder from the properly functioning node.
2.7) Reboot the node.

Note: Port initialzation is done by tcpmon.dll or lprmon.dll. Printer enumeration is done by spoolsv.exe

Good luck !