Opsi boot Windows hilang setelah menginstal CentOS 7, bagaimana saya bisa mendapatkannya kembali?

21

Saya baru-baru ini menginstal CentOS 7 pada mesin yang telah menjalankan Windows 7. Saya melakukan instalasi dual boot dan menginstal CentOS di sebuah partisi. Tetapi ketika saya menyalakan mesin saya, itu hanya memberi saya dua opsi CentOS. Itu tidak memberi saya pilihan untuk memilih untuk boot Windows 7. Bagaimana saya bisa menambahkan windows 7 kembali ke opsi boot?

CATATAN: Saya membaca posting ini berjudul: CenTOS 7 dual boot dengan windows , tetapi /grubfolder saya sepertinya hanya memiliki splash.xpm.gzfile di dalamnya tanpa file lain. Juga, saya baru mengenal Linux dan membutuhkan sesuatu yang lebih banyak selangkah demi selangkah.

EDIT # 1

Saya mendapatkan hasil berikut di baris perintah:

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

Juga, saya sedang meneliti kemungkinan bahwa perintah ini mungkin tidak berlaku untuk CentOS. Sebagai contoh dalam U&L T&J ini berjudul: " Setara dengan pembaruan-grub untuk sistem RHEL / Fedora / CentOS? ", Serta T&J ini berjudul: " Menginstal Centos 7 setelah Windows dan tidak dapat boot ke CentOS " tampaknya menyiratkan bahwa saya harus menginstal ulang grub2. Tetapi bagaimana saya melakukannya? Saya baru saja belajar Linux.

EDIT # 2

Perintah berikut ini berfungsi. Berikut hasilnya:

[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 ###
CodeMed
sumber
2
Memberi +1 untuk cara Anda mencoba sebelum bertanya, dan juga mendokumentasikan upaya Anda dalam pertanyaan. Anda akan melakukannya dengan baik.
Olivier Dulac

Jawaban:

21

Ini biasanya diperbaiki dengan menjalankan skrip mendeteksi sistem operasi yang diinstal dan menghasilkan file konfigurasi boot loader ( grub2dalam hal ini). Pada CentOS 7, itu seharusnya grub2-mkconfig.

  1. Periksa apakah windows terdeteksi. Jalankan grub2-mkconfigtetapi buang outputnya:

    $ 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
    

    Output akan terlihat mirip (tetapi tidak identik) dengan apa yang ditunjukkan di atas. Pastikan Windows terdaftar.

  2. Jika Windows terdaftar pada langkah sebelumnya, silakan dan simpan file konfigurasi baru. Buat cadangan dulu, untuk jaga-jaga.

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

Jika semuanya berjalan dengan baik, Anda sekarang harus dapat reboot ke Windows.

terdon
sumber
Saya juga punya masalah dengan grub2. Saya suka jawabannya, tetapi bagaimana cara membuang output? Apakah ini perintah grub2-mkconfig > /dev/nullyang harus saya gunakan? Juga, apakah ini akan bekerja dari mode penyelamatan, jika linux tidak bisa boot?
patrik
@ Patrik ya, > /dev/nullmembuang output. Langkah ini hanya untuk memeriksa apakah Windows terdeteksi. Itu tidak melakukan apa-apa. Adalah sudo grub2-mkconfig -o /boot/grub2/grub.cfgyang menulis file konfigurasi baru. Perhatikan juga bahwa perintah pada sistem berbasis Debian sederhana sudo update-grub. Menjalankan ini dari sistem penyelamatan bisa berhasil tetapi Anda perlu beberapa hal lain terlebih dahulu. Lihatlah jawaban saya di sini .
terdon
@terdon Saya mengalami kesulitan untuk membuat ulang langkah-langkah ini pada mesin windows 8 yang ingin saya ubah menjadi mesin dual boot dengan CentOS 7. Apakah Anda bersedia membantu saya dengan itu? Inilah tautannya: unix.stackexchange.com/questions/210111/…
CodeMed
@CodeMed Saya dapat mencoba tetapi saya tidak tahu banyak tentang CentOS dan lebih sedikit tentang WIndows.
terdon
Menambahkan beberapa informasi: baru saja diuji bahwa solusi ini juga berfungsi untuk Windows 10. Ini akan menghasilkan entri yang disebut Windows Recovery Environment (loader) yang, terlepas dari namanya, tidak akan melakukan pemulihan apa pun dan akan langsung boot ke Windows 10.
dr01
15

Menindaklanjuti jawaban oleh @terdon - ketika Anda melakukan langkah-tes, dan grub2-mkconfig tidak menemukan partisi Windows. Selanjutnya, pastikan Anda telah menginstal paket "ntfs-3g", sehingga sistem Linux Anda dapat membaca partisi Windows.

sudo yum install ntfs-3g

Setelah menginstal itu, ketika Anda menjalankan

sudo grub2-mkconfig > /dev/null

... Anda akan melihat boot windows terdaftar. Jika entri / entri lainnya OK, silakan dan tulis.

JosephK
sumber
1
Terima kasih dan +1 untuk menambahkan wawasan tentang pertanyaan lama ini.
CodeMed
1
Anda juga mungkin perlu menambahkan --enablerepo epelsakelar untuk perintah pertama
gamliela
8

Saya menemukan masalah ini ketika menginstal CentOS 7.0. Windows pada awalnya tidak terdaftar dalam output dari grub2-mkconfig.

Untuk menginstal ntfs-3g seperti yang disarankan dalam jawaban lain, saya harus menginstal epel-release:

sudo yum install epel-release

Cukup mencoba sudo yum --enablerepo epel install ntfs-3gmenghasilkan repositori tidak ditemukan pesan.

Instalasi epel-release memungkinkan instalasi ntfs-3g. Dari sana, partisi Windows terdaftar di grub2-mkconfig. Langkah-langkah dalam jawaban sebelumnya kemudian memberi opsi untuk memilih windows saat boot.

clk
sumber
0

Ringkas jawaban oleh @terdon @JosephK dan @clk untuk memformalkan prosedur lengkap.

  1. Tambahkan repositori epel

    sudo yum install epel-release
    
  2. Instal paket ntfs-3g

    sudo yum install ntfs-3g
    
  3. Jalankan grub2-mkconfigperintah dan periksa apakah entri 'Windows' terdeteksi.

    sudo grub2-mkconfig > /dev/null 
    
  4. Perbarui grub.cfgfile.

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