Windows Server 2008 “BOOTMGR is missing” Error

Not what you want to see when trying to boot Windows Vista Server…oops, sorry, I mean Windows Server 2008.  🙂

Unfortunately, this is what I encountered recently after a Windows Server 2008 virtual machine rebooted following some routine Windows Updates.  After some time spent troubleshooting, it did not appear that any of the updates themselves had caused the problem.  The type of backup system in use for this server allows me to boot virtual copies of the backups from any 15 minute interval in the previous 2 days.  I was able to boot a virtual copy of this server from the backups before the updates were installed.  It had the same “bootmgr is missing” error.  And the server had rebooted successfully 5 days ago, so something in the past 5 days after that last reboot caused this problem.

Research (googling) on the ‘bootmgr is missing’ error led me to this Microsoft KB article pretty quickly:

Here is the content of that article:


This error occurs when either of the following conditions is true:

  • The Windows Boot Manager (Bootmgr) entry is not present in the Boot Configuration Data (BCD) store.
  • The Boot\BCD file on the active partition is damaged or missing.


Method 1: Repair the BCD store by using the Startup Repair option

You can use the Startup Repair option in the Windows Recovery Environment to repair the BCD store. To do this, follow these steps:

  1. Put the Windows Vista installation disc in the disc drive, and then start the computer.
  2. Press a key when you are prompted.
  3. Select a language, a time, a currency, and a keyboard or another input method, and then click Next.
  4. Click Repair your computer.
  5. Click the operating system that you want to repair, and then click Next.
  6. In the System Recovery Options dialog box, click Startup Repair.
  7. Restart the computer.

Method 2: Rebuild the BCD store by using the Bootrec.exe tool

If the previous method does not resolve the problem, you can rebuild the BCD store by using the Bootrec.exe tool in the Windows Recovery Environment. To do this, follow these steps:

  1. Put the Windows Vista installation disc in the disc drive, and then start the computer.
  2. Press a key when you are prompted.
  3. Select a language, a time, a currency, and a keyboard or another input method, and then click Next.
  4. Click Repair your computer.
  5. Click the operating system that you want to repair, and then click Next.
  6. In the System Recovery Options dialog box, click Command Prompt.
  7. Type Bootrec /RebuildBcd, and then press ENTER.
    • If the Bootrec.exe tool runs successfully, it presents you with an installation path of a Windows directory. To add the entry to the BCD store, type Yes. A confirmation message appears that indicates the entry was added successfully.
    • If the Bootrec.exe tool cannot locate any missing Windows installations, you must remove the BCD store, and then you must re-create it. To do this, type the following commands in the order in which they are presented. Press ENTER after each command.
      Bcdedit /export C:\BCD_Backup
      ren c:\boot\bcd bcd.old
      Bootrec /rebuildbcd
  8. Restart the computer.

Method 3: Rebuild the BCD store manually by using the Bcdedit.exe tool

If the previous method does not resolve the problem, you can rebuild the BCD store manually by using the Bcdedit.exe tool in the Windows Recovery Environment. To do this, follow these steps:

  1. Put the Windows Vista installation disc in the disc drive, and then start the computer.
  2. Press a key when you are prompted.
  3. Select a language, a time, a currency, and a keyboard or another input method, and then click Next.
  4. Click Repair your computer.
  5. Click the operating system that you want to repair, and then click Next.
  6. In the System Recovery Options dialog box, click Command Prompt.
  7. Type the following command, and then press ENTER:
    cd /d Partition:\Windows\System32

    Note Partition represents the letter of the partition on which Windows Vista is installed. Typically, this is partition C.

  8. Type the following command, and then press ENTER:
    bcdedit /enum all

    In the Windows Boot Loader section of the output from this command, note the GUID that is listed for resumeobject. You will use this GUID later.

  9. Type the following command, and then press ENTER:
    bcdedit -create {bootmgr} -d “Description

    Note Description represents the description for the new entry.

  10. Type the following command, and then press ENTER:
    bcdedit -set {bootmgr} device partition=Partition:

    Note Partition represents the letter of the partition. Typically, the letter is C.

  11. Type the following command, and then press ENTER:
    bcdedit /displayorder {GUID}

    Note GUID represents the GUID that you obtained in step 8.

  12. Type the following command, and then press ENTER:
    bcdedit /default {GUID}

    Note GUID represents the GUID that you obtained in step 8.

  13. Type the following command, and then press ENTER:
    bcdedit /timeout Value

    Note Value represents the time in seconds before the Windows Boot Manager selects the default entry that you created in step 12.

  14. Restart the computer.

If you are booting from a Server 2008 install disk, when you use the “Repair your computer” option, the available options look like this:

You can access the repair option on a Server 2008 disk by choosing “command prompt”, then running  “x:\sources\recovery\StartRep.exe”.

I did this and it worked like a champ!  It found an error, corrected it, and the server was back up and running 10 minutes later.

I have also done this on Server 2008 using a Windows Vista install disk.  Slightly risky, but the server was down anyway, and I was in a pinch.  That also worked.  Along the same lines, I would guess that a Windows 7 install disk would work for Server 2008 R2 if you had no other option.  But don’t hold me to that!

Prevent registration of multiple IP addresses in DNS

There are times when you will need to have multiple IP addresses on a server.  It could be for an additional receive connector in Exchange, or for another website in IIS, among other things.  This is not recommended if the server is a domain controller and/or DNS server.  Best practice for a DC/DNS server is to have a single NIC (or NIC team) with a single IP address.  Having more than one IP can and does cause DNS resolution issues, logon issues for clients, and other Active Directory weirdness.  However, I realize that there are situations where you don’t have any other way of accomplishing an objective, and you simply must have multiple IPs on your DC/DNS server.  I have been IN that situation more than once, which is the reason for this post.

Adding another IP address on a server can be accomplished either by adding a secondary IP address on an existing network adapter (shown above), or by adding another network adapter with its own IP address.

In any case, by default, the server will register all assigned IP addresses in DNS.  This may cause problems if clients resolve an IP for the server other than the one they need to access whatever service they are trying to use.  For example, if you have multiple IP addresses on an Exchange server, but only the first IP address bound to the default receive connector, clients running Outlook that were given the secondary IP address by DNS would have trouble connecting to Exchange.

There are several ways to prevent registration of multiple IP addresses in DNS, depending on the configuration (secondary IP or NIC) and role of your server.

Scenario 1: Windows Server with multiple network adapters; no secondary IP addresses on either adapter, nor is the server a DNS server.

Resolution: In this situation, the only action you should need to take is to prevent the server from registering the address from the 2nd NIC.  You can do that by going to the properties of the connection –> IPv4 settings –> Advanced button –> DNS tab.  Then, UNcheck the “Register this connection’s addresses in DNS” checkbox, as shown here:

Scenario 2: Windows Server with multiple network adapters running DNS server role.

Resolution: First, perform the same action as the resolution for scenario 1, to prevent the server from registering the 2nd NIC address in DNS.

Also, because the server is running DNS, you must configure DNS to only listen on the primary IP address.  By default, a Windows server running DNS registers all IP addresses that are being used by DNS.  To prevent this, open the DNS console right-click on the DNS server name on the left side and go to Properties –> Interfaces tab.  From here, select the radio button which says “Only the following addresses”.  Then, if necessary, add the primary address to the list below and remove all other IP addresses.  Here is an example:

Scenario 3: Windows Server with single network adapter and multiple IP addresses

This is the same as the example at the top of this post.  In this case, there is not a clean way to prevent registration of the 2nd IP address in DNS.

If you are in this situation, it would be best to remove the secondary IP address from the adapter and set the IP on another adapter.  Then, you can just follow the resolution for scenario 1 or 2.

If you absolutely must configure the server this way and you cannot add another network adapter, then you CAN use the resolution from scenario 1 and prevent the server from registering its addresses in DNS.  However, after that, you may have to go into DNS and manually create a DNS entry in the forward lookup zone for the server.  Any servers from recent years have at least 2 NICs in them, and lately are even being shipped with 4 onboard NICs.  So, having an extra NIC available won’t usually be an issue.

Another way to prevent dynamic registration of DNS records on a server (2000 and 2003, that is) is to modify the registry using the following Microsoft KB article:

According to the article, it can be done globally, affecting all NICs on the server, or on a per-NIC basis.  If you decide to try this option, be CAREFUL!

Unicast NLB cluster generates large amount of broadcast traffic

When you set up a unicast Network Load Balancing (NLB) cluster, a large amount of broadcast network traffic will be generated on any switch to which a cluster node is connected. This is normal behavior for a unicast NLB cluster. You may not even notice this traffic unless you are running a packet capture from a machine connected to the same switch as the cluster nodes.

Normally, a switch builds a MAC address table by learning what ports a MAC address is communicating on. This automatic learning process only works if a given MAC address is unique across all the ports on a switch.

Because nodes in a unicast NLB cluster all share a common cluster MAC address, the network switch to which they are connected cannot learn which port the MAC address is tied to. Therefore it is never able to add the cluster MAC to its table. As a result, all traffic going to the cluster MAC is always broadcast out all switch ports.

This may or may not be a problem, depending on the amount of traffic going to your cluster and the amount of other traffic which is already being handled by the network switch. If it is a problem, there are several ways to resolve it.

1. Switch to a multicast or multicast IGMP NLB cluster. You will need to make sure your switches support multicast for this to work. Cisco switches with a relatively recent IOS should have this capability, but you should check first, to be sure.

2. Move the unicast NLB cluster nodes to a separate switch, where they are the only connected devices.

3. Set up a separate VLAN or network (dedicated router/firewall interface) just for the cluster, which will contain the broadcast traffic.

4. Add static MAC table entries on your switch to tell it which ports are being used by the cluster nodes. This way, traffic going to the cluster nodes would only be sent out the applicable ports. Each time you add another cluster node, you would also need to add an entry to the switch MAC table.

Option 4 is the easiest, and one that I have used in production on a small cluster.

All of these options will work; it’s really just your preference as to which one you use. As long as you document it, you’ll be in good shape in any case, right?

Here are some useful links regarding NLB:

Network Policy Server and Cisco RADIUS Authentication

Setting up RADIUS authentication between Cisco devices and Network Policy Server (NPS) in Windows Server 2008 is a bit different than in previous versions of Windows.

Here is a technet page with lots of good info on NPS:

For now, I am just going to list the instructions needed to get up and going with NPS to allow your server to act as an authentication point for your Cisco switches/routers. This may work with other devices that can use radius authentication, but I have not tested it. YMMV.

1. Install the Network Policy Server service. It is a component under ‘Network Policy and Access Services’.

2. Open the Network Policy Server console from Administrative Tools.

3. Create a new radius client for the Cisco device. The process for this is very similar to the process in Server 2000/2003. You just need the device IP, choose the “radius standard” type, and make up a shared secret.

4. “Register server in Active Directory” by right-clicking on the “NPS (local)” item in the console. This will allow NPS to query AD when an authentication request comes in.

5.  Next, create a “Connection Request Policy”.  This is the step that is new to the process, and was not required before Server 2008.  Before, this was integrated into the remote access policy, as it was previously called.  The connection request policy doesn’t need to be anything complex.  The first step is to set the network access server type to “Unspecified”.

Next, add at least one condition to the policy.  I usually use the “day and time restrictions”, and then set it to ‘permitted’ 24×7.  Obviously, the condition(s) you choose should conform to your company’s security policy, so you may need something different here.

Finally, On the Settings tab, under Authentication, choose the radio button for “Authenticate requests on this server”.

6.  Create a Network Policy, formerly known as a remote access policy in previous versions of Windows Server.  On the Overview tab, configure the policy to use the network access server type of “Unspecified”.  In addition, set the access permission setting to “Grant Access”.

On the Conditions tab, add at least one condition.  Typically, this will be the Windows Group that is allowed to log in to the network devices.  As I said before, you may need to use different conditions than I show here due to your company security policy.

On the Constraints tab, the only change you should need to make is to enable the authentication method of “Unencrypted authentication (PAP, SPAP)”

Lastly, on the Settings tab, under Encryption, make sure that the “No Encryption” option is enabled.

7.  Point your network device(s) at this server for authentication.  The method for doing this varies depending on the make and model of your device.  With recent IOS images on Cisco switches, the commands will look something like this.

aaa new-model

aaa session-id common

aaa authentication login default group radius local

radius-server host auth-port 1812 acct-port 1813 key putyoursecretkeyhere

8.  Finally, test it!

Problem Installing Network Policy Server

I recently had an issue installing Network Policy Server (NPS) in Windows Server 2008.

This was a brand new server, deployed from a known-good VMware template several days before.  The only software on it was the Symantec Endpoint Protection Manager Console, which required IIS.

I tried to add the NPS component of the Network Policy and Access Services role so that I could use this server for radius authentication for Cisco network switches.

It kept failing!  I tried several things. Rebooted the server, tried installing available Windows Updates, with no change.

Finally, a comment on this blog lead me to what appeared to be an answer.  I disabled the World Wide Web (WWW) Publishing Service, and the NPS install completed successfully!

Afterwards, I rebooted the server to verify that both the NPS and WWW services would start, but the NPS service would not start and returned this error:

Text of error: “Windows could not start the Network Policy Server service on Local computer.  Error 0x80072740: Only one usage of each socket address (protocol/network address/port) is normally permitted.”

After a bit of googling, I discovered that NPS and the Symantec Endpoint Protection Manager (SEPM) do not play nicely together.  This is due to the fact that SEPM also uses radius (port 1812), which conflicts with NPS.  While it is possible to change the port that SEPM uses for radius, I opted to just install NPS on another server, and it has worked just fine since.

Problems Running Batch Files in Windows Server 2008

When running a batch file in Server 2008 by double-clicking on it, any commands that are executed use limited permissions due to the built-in User Account Control (UAC) which is enabled by default.  Also, Server 2008 won’t ask you if you want to run with admin rights when you run the batch file, or if it comes across any commands which might need elevated privileges.  Those commands will quietly fail.  Isn’t that helpful?

You could spend hours troubleshooting your commands thinking they are faulty when it is just as simple as a privilege issue on the batch file that you ran.

Bottom line, if you are testing a batch file, right-click on it and choose “Run as Administrator”.  This will give the batch file full rights.

Supporting Exchange 2007 on Windows Server 2008 R2

While it was previously announced that Exchange 2007 would not be supported on Windows Server 2008 R2, that decision has been reversed and support for this combination will be forthcoming.

According to this post, at the Microsoft Exchange Team Blog:

We always talk about listening to customers and sometimes this is written off by many as ‘marketing speak’.  In fact, we do take feedback seriously and no input is more important to our engineering processes than your voice.

Earlier this year we made a decision in one direction, and due to the feedback we have received on this blog and elsewhere, we have reconsidered.  In the coming calendar year we will issue an update for Exchange 2007 enabling full support of Windows Server 2008 R2.  We heard from many customers that this was important for streamlining their operations and reducing administrative challenges, so we have changed course and will add R2 support.  We are still working through the specifics and will let you know once we have more to share on the timing of this update.

So, keep the feedback coming.  We are listening.

Kevin Allison
GM Exchange Customer Experience

Posted via email from Aaron Johnstone

Windows Server 2008 R2 is 64-bit ONLY

Just in case you are wondering.

Here is a technet blog post about it:

…and a little more on the subject at Brian Madden’s blog:

Posted via email from Aaron Johnstone

Various ways to reboot a Windows Server remotely

There are many different ways to reboot a Windows Server.  When you spend as much time working on systems remotely as I do, you want to have as many tools/options available as possible when you are working on a server in Virginia (I live and work in Central Texas) and it doesn’t reboot normally.  Instead of panicking, you can try one of these**:

1. Try using remote desktop to access the server.  If you can log in to it, you can reboot it.

2. Connect to the server using computer management from another server/workstation.  From another machine, right click on My Computer and go to ‘Manage’.  When the computer management console comes up, right-click on the top of the hierarchy, which says “Computer Management (Local)”, and choose ‘Connect to another computer…’.  Type in the name of the server you are trying to reboot.  After this, you should be able to right-click on Computer Management and go to properties.  From within this dialog box, you can reboot the server.

3. Use the built-in shutdown.exe program which is included in Windows XP/Vista/7 and Windows Server 2003/2008.  To access it, just run ‘shutdown /I’ from the command line and you will be presented with a window that looks like this:

From here, you can add the server you are trying to reboot, set the options, and then execute it by clicking Ok.

4. Use PsExec; this is a utility created by Sysinternals, an awesome, awesome company that created many very useful tools.  (check them out here).  In this case PsExec is useful because it can be used to execute commands on other systems over the network, such as ‘shutdown’.

5. Use Remote Task Manager.  This has saved my skin on several occasions.  The trial is fully functional, but a single license is only $40, which is not bad.  It copies a file to a remote system, starts a service, and then lets you manage the server, including forcing a shutdown/reboot.

6. Use iisreset.  I was not aware of this until recently,  but yes, it is possible.  I found this one on John Pollard’s blog. (this will only work if the destination server has IIS installed)

iisreset [computerName] /reboot

7. Use a network-enabled power distribution unit (PDU).  These can be very handy devices.  Essentially a power strip with a web interface, these will let you power off and on specific ports on the power strip.  If you have good documentation, you can power a server off and on again.  Not ideal, because this is like using the power button, but better than having to face a potentially long drive to a client office.  They can be had for as little as $300 (maybe less), but I would recommend a slightly higher-end device, especially if you are going to have critical servers plugged into it.

8. Use management software, such as Microsoft SCOM, or other managed services software such as Kaseya.  Tools like these always have some way to initiate remote commands.  In the case of Kaseya, a software agent resides on each server/workstation.  If that agent is still able to check in with the management server, you can use it to run a shutdown/reboot command.

9. Server management cards, such as DRAC (dell) and iLo (HP), will allow you to access the BIOS via web or telnet and reboot the server if the OS is hung.  Of course, you have to have set this up beforehand, or it will do you no good.

10. Network KVMs.  These will allow you to access the server console over then network from a web browser and (usually) a Java applet.

Leave any additional methods you have found in the comments and I will add them to this list.  Thanks!

**keep in mind that some of the more ‘abrupt’ methods listed here can cause data loss if someone has a file open or the server is writing to disk.  These methods should only be used as a last resort or if you KNOW you’ve got a good backup!

Posted via email from Aaron Johnstone

NTFS Security Not Transferred When Copying Files

When copying files from one server to another, the NTFS security ACLs on them are not transferred, and the files inherit the permissions of the destination folder.  If the permissions are simple, and set at just one level at the top of the folder hierarchy, it’s not a big deal to just set them again manually.  But if you have multiple folder levels of settings that may or may not be the same, or if you have particularly sensitive data and you want to be sure the security of that data is maintained, here is what you can do.

1.        Transfer the files over using whatever file copy utility you like.  I like RichCopy, which is just a nice, GUI front-end to robocopy.

2.       Even though you have avoided using the command-line for the transfer itself, you are still going to have to use it now to get the file/folder security settings moved over.  For each folder that you transferred using Richcopy, run the following command from the source server:

robocopy "X:\sharedfolder" "\\servername\newshare"  /E /COPYALL /SEC /XC /XN /XO /R:1 /W:0

The "/xc /xn /xo" part of the command excludes files from being copied over again.  The “/E /COPYALL /SEC” switches actually re-sync all the security settings for all the files/folders, so they end up matching the security that is set on the source.

(Robocopy is part of the Server 2003 Resource Kit)

Posted via email from Aaron Johnstone