I had been very unhappy with the Windows XP boot time for quite some time. In the initial days, the boot time was pretty impressive and I used to get the desktop in a minute and a half.
But as I kept installing lot of software and some of which includes drivers for peripherals such as web cameras, I noticed that the boot time got really bad. As of yesterday, my windows xp home edition took around 4-5 minutes to load everything and stop showing the timer cursor on the desktop.
So I could not put up any more and so I was determined to find out what was causing the slowness.
I wanted to try out the following options to speed up the boot time and I wanted to do it in the order given below:
1.) Remove unwanted startup applications that get launched.
2.) Stop unwanted services permanently from starting.
3.) Look at the boot time logs to see if there were any errors or any drivers were taking time to get loaded.
For point 1.), it is fairly simple to stop applications from getting launched. You can goto Start->Programs->Startup and look at the applications that get launched at the startup of windows. You can either delete these applications under the "Startup" menu or drag and move them to directly under "Programs" or under any other menu item.
For point 2.), goto Start->Control Panel->Administrative Tools->Services to see the list of services available in the system. One of the columns tells you the state of the service - Started, Stopped or Automatic. You can know about what this service does by right-clicking on one of the services and then clicking on properties. Service is nothing but a program which runs in the background doing some job which is necessary. For example, Microsoft's indexing service runs in the background indexing files and directories. This indexing ensures that search is very fast.
Now, these services of course consume a good amount of CPU time thus making foreground applications slower.
After reading through the service's description, you will have a fair idea on whether or not you need this service to run. For example, if you don't have wifi at home, then you may not want this service which helps you configure wifi with ease. There are good number of services which run by default, which you may not want. Surprisingly, you may find services that get installed whenever you install applications. For example, when you install iTunes, there are services which get installed which help you detect a new version of iTunes and one which is used to detect an iPod whenever it is inserted. You may want to comment of the first service which is used to check for an updated version of iTunes. You can as well check for that manually. I have services from Google, HP, Symantec, etc. which got installed later.
There is a much easier and safer way of doing Points 1.) and 2.). You can use the application "msconfig" to modify startup programs and services. Launch "msconfig" from Start->Run.
It is easier this way, but why is it safer ?? Its safer because you can undo the changes that you have done.
I would love to post the detailed steps with screenshots. But unfortunately, my windows is screwed up and I am left with the option of only recollecting whatever I remember and write the same over here.
I am yet to talk about option 3.) which is much more dangerous and not recommended for novice users. In fact, having worked on windows internals and driver development in the past, I still managed to screw up my windows installation because of this option.
There are kernel (OS) traces which can be enabled whenever you want. This is primarily used during device driver development. The way you do it is that you specify the "/debug" flag in the file "boot.ini" under C:\. You may want to take a backup of boot.ini file before modifying it.
Debug traces will be diverted to the COM port. So you need to specify the baudrate and other com port details along with the "/debug" flag. Once you have done all that, you can connect the Windows machine being debugged (called as Target) to an Host PC through a Null-modem serial cable and view the debug traces. And if I remember correctly, once the booting and loading of drivers is done, it breaks at some execution point so that you get control from there on to continue debugging.
But I did a stupid assumption that giving "/debug" in the boot.ini and not giving other com port details will dump the debug traces on the same target machine. That was a wrong assumption. When I rebooted my windows with the modified boot.ini (containing "/debug" flag), it took sometime to boot. But I never got any debug traces on the screen. After sometime, the booting came to an halt and nothing happened. I think, the windows broke its execution for me to takeover. But without a second PC, I would never know what actually happened.
Before trying out the "/debug" flag option in boot.ini, I had tried an utility called BootVis.exe which was released by Microsoft earlier. It is not supported right now, but you can still download it from other places. This utility is supposed to profile and tell you where exactly we have the delay in the boot time. But when I tried this utility, it told me at the application level as to where the delay is, but I could not get any information about boot time delays. Thats the reason why I wanted to try the debug option in boot.ini.
So ultimately, my effort to optimize the windows boot time has left my windows installation useless.
I got an idea to recover my windows partition. All I had to do was just replace the modified boot.ini with the orginal boot.ini which I had backed up.
One way I could do this is from Ubuntu (yes, my PC is a dual-boot). I could mount by primary windows partition as a read/write and then modify the boot.ini.
I would like to explain about my experience trying to mounting NTFS partitions as read/write in a separate post such that it will benefit others as well.
So.. Wish me luck!! :)