I recently installed CentOS 7 on a machine that has been running Windows 7. I did a dual boot installation and installed CentOS in a partition. But when I boot up my machine, it only gives me two CentOS options. It does not give me the option to choose to boot Windows 7. How can I add windows 7 back to the boot options?

NOTE: I'm reading this post titled: CenTOS 7 dual boot with windows, but my /grub folder only seems to have a splash.xpm.gz file in it with no other files. Also, I'm new to Linux and need something more step by step.

EDIT #1

I'm getting the following results on the command line:

[root@localhost home]# sudo update-grub
sudo: update-grub: command not found
[root@localhost home]# sudo grub-mkconfig
sudo: grub-mkconfig: command not found

Also, I'm currently researching the possibility that these commands might not apply to CentOS. For example in this U&L Q&A titled: "Equivalent of update-grub for RHEL/Fedora/CentOS systems?", as well as this Q&A titled: "Installed Centos 7 after Windows and can't boot into CentOS" seem to imply that I should reinstall grub2. But how do I do that? I'm just now learning Linux.

EDIT #2

The following command does work. Here is the output:

[root@localhost home]# sudo grub2-mkconfig 2>/dev/null
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
set pager=1

if [ -s $prefix/grubenv ]; then
  load_env
fi
if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
else
   set default="${saved_entry}"
fi

if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
else
  menuentry_id_option=""
fi

export menuentry_id_option

if [ "${prev_saved_entry}" ]; then
  set saved_entry="${prev_saved_entry}"
  save_env saved_entry
  set prev_saved_entry=
  save_env prev_saved_entry
  set boot_once=true
fi

function savedefault {
  if [ -z "${boot_once}" ]; then
    saved_entry="${chosen}"
    save_env saved_entry
  fi
}

function load_video {
  if [ x$feature_all_video_module = xy ]; then
    insmod all_video
  else
    insmod efi_gop
    insmod efi_uga
    insmod ieee1275_fb
    insmod vbe
    insmod vga
    insmod video_bochs
    insmod video_cirrus
  fi
}

terminal_output console
if [ x$feature_timeout_style = xy ] ; then
  set timeout_style=menu
  set timeout=5
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
  set timeout=5
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/10_linux ###
menuentry 'CentOS Linux, with Linux 3.10.0-123.el7.x86_64' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-123.el7.x86_64-advanced-77a053a9-a71b-43ce-a8d7-1a3418f5b0d9' {
    load_video
    set gfxpayload=keep
    insmod gzio
    insmod part_msdos 
    insmod xfs
    set root='hd0,msdos5'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos5 --hint- efi=hd0,msdos5 --hint-baremetal=ahci0,msdos5 --hint='hd0,msdos5'  589631f1-d5aa-4374-a069-7aae5ca289bc
    else
      search --no-floppy --fs-uuid --set=root 589631f1-d5aa-4374-a069-7aae5ca289bc
    fi
    linux16 /vmlinuz-3.10.0-123.el7.x86_64 root=UUID=77a053a9-a71b-43ce-a8d7-1a3418f5b0d9 ro rd.luks.uuid=luks-a45243be-2514-4a81-b7a1-7e4eff712d2d vconsole.font=latarcyrheb-sun16 crashkernel=auto  vconsole.keymap=us rd.luks.uuid=luks-5349515e-a082-4ff2-b035-54da7b8d4990 rhgb quiet 
    initrd16 /initramfs-3.10.0-123.el7.x86_64.img
}
menuentry 'CentOS Linux, with Linux 0-rescue-369d0c1b630b48cc8ef010ceb99bc668' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-369d0c1b630b48cc8ef010ceb99bc668-advanced-77a053a9-a71b-43ce-a8d7-1a3418f5b0d9' {
    load_video
    insmod gzio
    insmod part_msdos 
    insmod xfs
    set root='hd0,msdos5'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos5 --hint-efi=hd0,msdos5 --hint-baremetal=ahci0,msdos5 --hint='hd0,msdos5'  589631f1-d5aa-4374-a069-7aae5ca289bc
    else
      search --no-floppy --fs-uuid --set=root 589631f1-d5aa-4374-a069-7aae5ca289bc
    fi
    linux16 /vmlinuz-0-rescue-369d0c1b630b48cc8ef010ceb99bc668 root=UUID=77a053a9-a71b-43ce-a8d7-1a3418f5b0d9 ro rd.luks.uuid=luks-a45243be-2514-4a81-b7a1-7e4eff712d2d vconsole.font=latarcyrheb-sun16 crashkernel=auto  vconsole.keymap=us rd.luks.uuid=luks-5349515e-a082-4ff2-b035-54da7b8d4990 rhgb quiet 
    initrd16 /initramfs-0-rescue-369d0c1b630b48cc8ef010ceb99bc668.img
}

### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###

### BEGIN /etc/grub.d/20_ppc_terminfo ###
### END /etc/grub.d/20_ppc_terminfo ###

### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'Windows 7 (loader) (on /dev/sda2)' --class windows --class os $menuentry_id_option 'osprober-chain-386ED4266ED3DB28' {
    insmod part_msdos 
    insmod ntfs
    set root='hd0,msdos2'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos2 --hint-efi=hd0,msdos2 --hint-baremetal=ahci0,msdos2 --hint='hd0,msdos2'  386ED4266ED3DB28
    else
      search --no-floppy --fs-uuid --set=root 386ED4266ED3DB28
    fi
    chainloader +1
}
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/41_custom ###
if [ -f  ${config_directory}/custom.cfg ]; then
  source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f  $prefix/custom.cfg ]; then
  source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###
  • 2
    +1 for the way you tried before asking, and also documented your tries in the question. You'll do well. – Olivier Dulac Nov 25 '14 at 18:39
up vote 18 down vote accepted

This is usually fixed by running the scripts detect the installed operating systems and generate the boot loader's (grub2 in this case) configuration file. On CentOS 7, that should be grub2-mkconfig.

  1. Check that windows is detected. Run grub2-mkconfig but discard its output:

    $ sudo grub2-mkconfig > /dev/null 
    Generating grub configuration file ...
    Found background image: /usr/share/images/desktop-base/desktop-grub.png
    Found linux image: /boot/vmlinuz-3.16.0-4-amd64
    Found initrd image: /boot/initrd.img-3.16.0-4-amd64
    Found memtest86+ image: /boot/memtest86+.bin
    Found memtest86+ multiboot image: /boot/memtest86+_multiboot.bin
    Found Windows 7 (loader) on /dev/sda2
    

    The output will look similar (but not identical) to what is shown above. Make sure that Windows is listed.

  2. If Windows was listed in the previous step, go ahead and save the new configuration file. Make a backup first, just in case.

    sudo cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.old
    sudo grub2-mkconfig -o /boot/grub2/grub.cfg   
    

If all went well, you should now be able to reboot into Windows.

  • I also have a problem with grub2. I like the answer, but how do I discard the output? Is this the command grub2-mkconfig > /dev/null that I should use? Also, will this work from the rescue mode as well, if linux does not boot? – patrik Dec 3 '14 at 10:09
  • @patrik yes, the > /dev/null discards the output. This step is only to check whether Windows is detected. It doesn't do anything. It is sudo grub2-mkconfig -o /boot/grub2/grub.cfg that writes the new configuration file. Also note that the command on Debian-based systems is simply sudo update-grub. Running this from a rescue system can work but you need some other things first. Have a look at my answer here. – terdon Dec 3 '14 at 10:15
  • @terdon I am having trouble recreating these steps on a windows 8 machine which I want to turn into a dual boot machine with CentOS 7. Are you willing to help me with it? Here is the link: unix.stackexchange.com/questions/210111/… – CodeMed Jun 17 '15 at 15:45
  • @CodeMed I can try but I don't know much about CentOS and less about WIndows. – terdon Jun 17 '15 at 17:07
  • Adding some information: just tested that this solution also works for Windows 10. It will generate an entry called Windows Recovery Environment (loader) which, despite its name, won't do any recovery and will boot directly to Windows 10. – dr01 Sep 7 '16 at 10:28

Following up on the answer by @terdon - when you do the test-step, and grub2-mkconfig does not find the Windows partition. Next, make sure you have the "ntfs-3g" package installed, so that your Linux system can read the Windows partition(s).

sudo yum install ntfs-3g

After installing that, when you run

sudo grub2-mkconfig > /dev/null

... you should see the windows boot listed. If the other entry / entries are OK, go ahead and write it.

  • 1
    Thank you and +1 for adding insight into this old question. – CodeMed Jun 23 '15 at 15:26
  • 1
    you may also need to add --enablerepo epel switch for the first command – gamliela Mar 20 '16 at 10:01

I came across this issue when installing CentOS 7.0. Windows was not initially listed in the output of grub2-mkconfig.

In order to install ntfs-3g as suggested in another answer, I had to first install epel-release:

sudo yum install epel-release

Simply trying sudo yum --enablerepo epel install ntfs-3g resulted in a repository not found message.

Installing epel-release enabled the installation of ntfs-3g. From there, the Windows partition was listed in grub2-mkconfig. The steps in the previous answers then gave the option to select windows at boot.

protected by Community Jul 5 '15 at 14:27

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.