Updated on : 23/05/2010
Relevant to: SCCM 2007 (including R2 and R3 versions), MDT 2008/2010
This is a repost of an article i posted originally at experts-exchange (a site which i have no time for anymore)
SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM, issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispersed nature of the blog posts that deal with some of these issues. This article will help SCCM OSD newbies with some of these issues.
Integrating SCCM and MDT 2008/2010
For our deployments, we always install MDT 2008/2010 (use 2008 for SP1 and 2010 for SP2 installations) on our SCCM server and select “Configure ConfigMgr Integration” from the MDT area on the start menu. This gives us:
- Templated task sequences we can import into SCCM
- Additional TS Variables for use in our task sequences
- Additional options and flexibility around computer backup, USMT etc
For beginners, the template task sequences are a very quick way to get up and running while being guided through the process, while for more advanced users the additional functionality comes in handy when your task sequences become more complex.
Setting yourself up
In order to have any chance at troubleshooting SCCM OSD issues, you need to do the following
1) Install trace32.exe which is part of the SMS 2003 Toolkit 2 (http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=61e4e21f-2652-42dd-a04d-b67f0573751d)
2) Enable command line support within your boot images
- Go to the properties of your boot image(s) <Right click | Properties)
- Go to the Windows PE tab and tick the “Enable command support (testing only)” option
- When prompted, click on “yes” to update your distribution points
- From within your boot image (Windows PE) environment, you can now pres “F8” to open up a command window – very useful for troubleshooting
3) Be familiar with your OS setup log files (eg WindowsXP has setupapi.log, netsetup.log etc)
The root of all Task Sequence troubleshooting is called “smsts.log” – and this log is always the first step to troubleshooting any TS issue – if you have an issue, look in here first!
Unfortunately, the smsts.log can be stored in one of 7 locations, depending on the stage of the build and the architecture of the OS:
WindowsPE, before HDD format: x:windowstempsmstslogsmsts.log
WindowsPE, after HDD format: x:smstslogsmsts.log
Windows, SCCM agent not installed: c:_SMSTaskSequenceLogsSmstslogsmsts.log
Windows, SCCM agent installed: c:windowssystem32ccmlogsSmstslogsmsts.log
Windows x64, SCCM agent installed: c:windowssysWOW64ccmlogsSmstslogsmsts.log
Task Sequence completed: c:windowssystem32ccmlogssmsts.log
Task Sequence completed x64: c:windowssysWOW64ccmlogssmsts.log
Information is also logged as SCCM client events, which can be viewed by running the SCCM report “Last 1000 messages for a specific computer (Errors, warnings and information)”
As a general rule, the SMSTS.log provides more detail, however the SCCM client events are easier to read, and, for simple issues, can lead you to the root cause very quickly.
PXE boot issues
In order to resolve PXE boot issues, there are two main log files we are interested in:
- Pxecontrol.log – which is located in the installation logs directory (eg C:Program Files (x86)Microsoft Configuration ManagerLogspxecontrol.log)
- Smspxe.log – which is located in MP logs directory (eg C:Program Files (x86)SMS_CCMLogssmspxe.log)
If this is the first time you’ve setup a PXE service point, i recommend you check pxecontrol.log, there should be lines similar to the following:
adding address to server list 192.168.00.117 $$<SMS_PXE_SERVICE_POINT><Fri Jul 31 07:54:45.248 2009 Cen. Australia Standard Time><thread=772 (0x304)>
adding address to server list 127.00.00.01 $$<SMS_PXE_SERVICE_POINT><Fri Jul 31 07:54:45.250 2009 Cen. Australia Standard Time><thread=772 (0x304)>
Sending availiability packet to: 192.168.0.117~ $$<SMS_PXE_SERVICE_POINT><Fri Jul 31 07:54:45.252 2009 Cen. Australia Standard Time><thread=772 (0x304)>
Sent 274 bytes to 192.168.000.117:4011~ $$<SMS_PXE_SERVICE_POINT><Fri Jul 31 07:54:45.253 2009 Cen. Australia Standard Time><thread=772 (0x304)>
PXE test request succeeded.~ $$<SMS_PXE_SERVICE_POINT><Fri Jul 31 07:54:45.355 2009 Cen. Australia Standard Time><thread=772 (0x304)>
Successfully performed availability check against local computer.~ $$<SMS_PXE_SERVICE_POINT><Fri Jul 31 07:54:45.357 2009 Cen. Australia Standard Time><thread=772 (0x304)>
If not, WDS or the PXE service point is not correctly installed. Without going into too much detail in this area, as a catch-all fix:
- Uninstall the PXE service point
- Uninstall WDS
- Install WDS, but DO NOT configure
- Install the pxe service point
- Re-check the pxecontrol.log
Another very common error is to see the following when trying to PXE boot:
PXE-T01: The specified file was not found
PXE-E3B:TFTP error – File not found
This error is caused because you are missing files from your remoteinstallsmsbootx86 or x64 directory and is generally caused by one of two things:
1) The x64 boot image has not been added to the PXE service point – “But I’m only deploying an x86 boot image and OS” i hear you say. It doesn’t matter. If the machine is x64 architecture (which all today’s new machines are), the boot ROM requested will be x64. This in no way affects your ability to use an x86 boot image; this boot ROM process is completely independent. The solution is to add the x64 image to your PXE DP and update. You will then see the directory remoteinstallsmsbootx64 populated with files, and your good to go.
2) Even after you update your PXE DP, the files still don’t show up, this is a common issue. When updating the DP, the WIM file is mounted (under C:windowstemp), all your modifications injected (such as drivers, custom backgrounds etc) and then packed back up into the boot WIM pushed to the DP. At the same time, the boot ROM files were interested in are extracted to C:WindowstempPxebootfiles before being copied to remoteinstallsmsbootx86 or x64. Sometimes the C:WindowstempPxebootfiles directory has something funky happen to it and doesn’t clean itself up correctly. So the difficult fix is – delete the directory and re-distribute the package. (The directory is hidden, so make sure you set the option in explorer so you can see it). You can also have a look at pxecontrol.log to see the extraction process and/or the error occurring.
On some computers, you may PXE boot, proceed to see a screen which indicates that the PC is talking with SCCM, followed by a line which indicates a boot ROM called “abortpxe” has been used. This indicates:
1) This computer has already been built via PXE. If you want to run this advertisement again, you must go into the console, right click on the computer record and select “clear PXE advertisement”
2) There may be a conflicting record for this machine, check your “Conflicting records” node and merge the appropriate record
3) There is no advertisement for this machines MAC address or SMSBIOS GUID in the database. This can be confirmed by viewing the smspxe.log. In this case, you should ensure that
- The computer record has the correct MAC address
- The computer record is in a collection which has the task sequence advertised to it
- The task sequence advertisement is available to PXE boot (a property of the advert)
You may also run into an issue where the computer record had been added correctly, however the machine will not PXE boot. If you restart the WDS service, the machine then boots fine. This can be caused by the WDS cache timeout, in order to modify this setting, see this article – http://blogs.technet.com/b/configmgrteam/archive/2010/05/27/pxe-cache-expire-behavior-in-configuration-manager-2007-sp1-and-sp2.aspx
Software Update issues on reference build
While creating the reference build, the target machine must not be a member of a domain (and therefore must only be in a workgroup). Because of this, the machine cannot use AD to lookup SCCM server location details and software updates will fail (after a 20 minute wait)
To work around this, in your reference build TS, navigate to the step “Setup Windows and Configmgr” and in the installation properties add:
This will allow the client to locate the software update point and download the appropriate updates. <Note: this assumes you have installed the Server Locator Point role on your server>
In the case that there are a large number of updates to be downloaded, you may also find that this task fails. This is caused by an issue documented at http://blogs.technet.com/sus/archive/2008/09/18/wsus-clients-fail-with-warning-syncserverupdatesinternal-failed-0x80244010.aspx. Due to this issue, I recommend you create a number of “software update” tasks (I use 3), each with “continue on error” checked. This will get around this issue, but will not cause any significant delay even if this issue does not occur.
When performing this for XP, you may also find that updates apply up until .Net Framework 3.5 SP1, and after that, no more patches apply, this seems to be a common issue – and the simple fix is to remove this patch from your deployment for your reference build, it will be patched in your prod build anyway.
The deployment guys have a fantastic blog post on how to handle drivers here – http://blogs.technet.com/deploymentguys/archive/2008/02/15/driver-management-part-1-configuration-manager.aspx
or you can now follow my new article…. http://hayesjupe.wordpress.com/sccm-osd-driver-best-practices/
Boot image drivers
SCCM boot images are customised windows PE 2.x/3.x (2.x for SP1, 3.x for SP2) images used to boot the computer and contact the SCCM server. There are a couple of basic rules when working with boot images:
1) SCCM boot images only require network and local disk access (as they need to grab data from the SCCM server and apply it to the local disk) so these are the only drivers that ever need to be added to a boot image. (Adding additional drivers will only bloat the image, slowing down your installs)
2) SCCM boot images are based on Windows PE 2.x, which is based on Vista, or PE 3.x, which is based on Windows 7. You must add Vista/Win7 drivers to your boot images only. Even if you’re deploying on XP, it doesn’t matter, the boot environment is completely separate to your final OS.
The way I find out if I need to add additional boot WIM drivers is to simply boot any new machines into a OSD TS, boot, press “F8” to get a command prompt, then run an “IPconfig” – if there is no IP address – we don’t have nic drivers and they need to be added; then run diskpart | list disk – if there are no disks listed, then we need to add mass storage drivers to the boot WIM.
Windows XP 07B stop issues
If you’re building Windows XP or 2003, these operating systems do not allow dynamic injection of mass-storage drivers. So, you have a few options:
1) Move to windows 7 – definitely the best option. If you’re not considering moving to 7 by now there is something wrong!
2) Change the disk controller mode from “AHCI” or “RAID” to “IDE” in the BIOS (quick, but not recommended for a long term solution)
3) Use the appropriate AHCI mass storage drivers
- Import the drivers into SCCM, using categories etc (see the deployment guys blog post on best practices for this)
- Add a task to the task sequence “Apply driver package”
- Select the appropriate driver package
- Check the box “Select the mass storage driver within the package……”
- Select the appropriate driver
- Add a condition via a TS variable <model> or WMI Query (again, covered in the deployment guys post)
Task Sequence Variables
Task sequence variables are really what give task sequences a bucket load of power, as you can have one TS which accounts for all the variations in your environment.
One of the most common questions we get is “how do i know what TS Variables are available”, well, there is a list at – http://technet.microsoft.com/en-us/library/bb632442.aspx, you could read the documentation (Toolkit Reference.doc from the MDT 2008/2010 documentation), search through the script which gathers the variables (ZTIGather.vbs), or dump them all out using another script from the deployment guys – http://blogs.technet.com/deploymentguys/archive/2008/08/29/outputting-all-the-configuration-manager-task-sequence-variables.aspx
Or you can use my article at http://www.hayesjupe.com/sccm-osd-task-sequence-variables-a-beginners-guide/
The advantage of dumping them all is that the output actually has “meaning”, so you can see what variable has what value – as opposed to just looking at a bunch of variables might not mean much to you without values assigned to them.
In addition to the built in variables, you can add custom variables to computer objects or to entire collections.
The most common TSVariable i use “Model” – to determine which model a machine is and apply drivers etc appropriately. In order to get the model from WMI from an existing machine, you can use:
Wmic csproduct get name
SCCM Client Version
If you are using SCCM 2007 SP1, there is a hotfix, KB955955 which you should apply, as it removes a delay between tasks, which, for long task sequences can significantly reduce build time. This hotfix is available from http://support.microsoft.com/kb/955955. The article also includes instructions on how to implement the hotfix during your bare-metal builds.
If you are using the SP2 client, there are not major client hotfixes at this point that resolve OSD issues.
This article by no means covers all the issues you will run into using SCCM OSD – but it should cover some of the major ones! As always, good planning and following the documentation will help you avoid many of these pitfalls.