ตัวเลือกการบูต Windows หายไปหลังจากติดตั้ง CentOS 7 ฉันจะเอามันกลับมาได้อย่างไร


21

ฉันเพิ่งติดตั้ง CentOS 7 บนเครื่องที่ใช้ Windows 7 ฉันทำการติดตั้งด้วยการบู๊ตคู่และติดตั้ง CentOS ในพาร์ติชัน แต่เมื่อฉันบูทเครื่องมันจะให้ตัวเลือก CentOS สองตัวเท่านั้น ไม่มีตัวเลือกให้ฉันเลือกบูต Windows 7 ฉันจะเพิ่ม windows 7 กลับไปที่ตัวเลือกการบูตได้อย่างไร

หมายเหตุ:ฉันกำลังอ่านบทความนี้ชื่อ: CenTOS 7 dual boot พร้อม windowsแต่/grubโฟลเดอร์ของฉันดูเหมือนว่าจะมีsplash.xpm.gzไฟล์อยู่ในนั้นเท่านั้นโดยไม่มีไฟล์อื่น นอกจากนี้ฉันยังใหม่กับ Linux และต้องการบางสิ่งเพิ่มเติมทีละขั้นตอน

แก้ไข # 1

ฉันได้รับผลลัพธ์ต่อไปนี้ในบรรทัดคำสั่ง:

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

นอกจากนี้ฉันกำลังค้นคว้าความเป็นไปได้ที่คำสั่งเหล่านี้อาจใช้ไม่ได้กับ CentOS ตัวอย่างเช่นในคำถาม & คำตอบ U & L นี้: " เทียบเท่ากับการอัพเดตด้วงสำหรับระบบ RHEL / Fedora / CentOS? " เช่นเดียวกับคำถามและคำตอบนี้: " Centos 7 ที่ติดตั้งหลังจาก Windows และไม่สามารถบูตเข้าสู่ CentOS ได้ " ควรติดตั้ง grub2 ใหม่ แต่ฉันจะทำอย่างไร ตอนนี้ฉันเรียน Linux แล้ว

แก้ไข # 2

คำสั่งต่อไปนี้ใช้งานได้ นี่คือผลลัพธ์:

[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 สำหรับวิธีที่คุณลองก่อนถามและบันทึกการลองในคำถามด้วย คุณทำได้ดี
Olivier Dulac

คำตอบ:


21

โดยปกติจะได้รับการแก้ไขโดยการเรียกใช้สคริปต์ตรวจจับระบบปฏิบัติการที่ติดตั้งและสร้างไฟล์กำหนดค่าบูต ( grub2ในกรณีนี้) บน CentOS 7 grub2-mkconfigที่ควรจะเป็น

  1. ตรวจสอบว่ามีการตรวจพบ windows เรียกใช้grub2-mkconfigแต่ทิ้งเอาต์พุต:

    $ 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
    

    เอาต์พุตจะมีลักษณะคล้ายกัน (แต่ไม่เหมือนกัน) กับสิ่งที่แสดงด้านบน ตรวจสอบให้แน่ใจว่า Windows อยู่ในรายการ

  2. หาก Windows มีการระบุไว้ในขั้นตอนก่อนหน้าให้ไปข้างหน้าและบันทึกไฟล์การกำหนดค่าใหม่ ทำการสำรองข้อมูลก่อนในกรณี

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

หากทุกอย่างเป็นไปด้วยดีตอนนี้คุณควรจะสามารถรีบูตเข้าสู่ Windows ได้แล้ว


ฉันยังมีปัญหากับ grub2 ฉันชอบคำตอบ แต่ฉันจะทิ้งผลลัพธ์ได้อย่างไร นี่เป็นคำสั่งgrub2-mkconfig > /dev/nullที่ฉันควรใช้หรือไม่? นอกจากนี้ยังสามารถใช้งานจากโหมดช่วยเหลือได้เช่นกันหาก linux ไม่บูต?
patrik

@patrik ใช่การ> /dev/nullยกเลิกเอาต์พุต ขั้นตอนนี้ใช้เพื่อตรวจสอบว่ามีการตรวจพบ Windows หรือไม่ มันไม่ได้ทำอะไรเลย มันคือการsudo grub2-mkconfig -o /boot/grub2/grub.cfgเขียนไฟล์การกำหนดค่าใหม่ นอกจากนี้ทราบว่าคำสั่งบนระบบ Debian-based sudo update-grubเป็นเพียง การเรียกใช้จากระบบช่วยเหลือสามารถทำงานได้ แต่คุณต้องมีสิ่งอื่นก่อน มีลักษณะที่ฉันคำตอบที่นี่
terdon

@terdon ฉันมีปัญหาในการสร้างขั้นตอนเหล่านี้บนเครื่อง windows 8 ซึ่งฉันต้องการเปลี่ยนเป็น dual boot machine ด้วย CentOS 7 คุณยินดีช่วยฉันด้วยหรือไม่ นี่คือลิงค์: unix.stackexchange.com/questions/210111/…
CodeMed

@ CodeMed ฉันสามารถลองได้ แต่ฉันไม่ค่อยรู้อะไรเกี่ยวกับ CentOS และน้อยกว่าเกี่ยวกับ WIndows
terdon

การเพิ่มข้อมูล: เพิ่งทดสอบว่าโซลูชันนี้ใช้ได้กับ Windows 10 โดยจะสร้างรายการที่เรียกว่าWindows Recovery Environment (ตัวโหลด)ซึ่งแม้จะมีชื่อแล้วก็ตามจะไม่ทำการกู้คืนใด ๆ และจะบูตโดยตรงกับ Windows 10
dr01

15

ติดตามคำตอบโดย @terdon - เมื่อคุณทำตามขั้นตอนการทดสอบและ grub2-mkconfig ไม่พบพาร์ติชัน Windows ถัดไปตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งแพ็คเกจ "ntfs-3g" เพื่อให้ระบบ Linux ของคุณสามารถอ่านพาร์ติชัน Windows ได้

sudo yum install ntfs-3g

หลังจากติดตั้งแล้วเมื่อคุณเรียกใช้

sudo grub2-mkconfig > /dev/null

... คุณจะเห็นรายการบูตของ windows หากรายการอื่น ๆ / รายการตกลงตกลงไปข้างหน้าและเขียนมัน


1
ขอขอบคุณและ +1 สำหรับการเพิ่มความเข้าใจในคำถามเก่านี้
CodeMed

1
คุณอาจต้องเพิ่ม--enablerepo epelสวิตช์สำหรับคำสั่งแรก
gamliela

8

ฉันเจอปัญหานี้เมื่อติดตั้ง CentOS 7.0 Windows ไม่ได้อยู่ในรายการแรกในผลลัพธ์ของ grub2-mkconfig

เพื่อติดตั้ง ntfs-3g ตามที่แนะนำในคำตอบอื่นฉันต้องติดตั้ง epel-release ก่อน:

sudo yum install epel-release

เพียงพยายามsudo yum --enablerepo epel install ntfs-3gส่งผลให้มีที่เก็บข้อความไม่พบ

การติดตั้ง epel-release เปิดใช้งานการติดตั้ง ntfs-3g จากนั้นพาร์ติชัน Windows ถูกแสดงรายการใน grub2-mkconfig ขั้นตอนในคำตอบก่อนหน้านี้จากนั้นให้ตัวเลือกในการเลือกหน้าต่างเมื่อบูต


0

การสรุปคำตอบโดย @terdon @JosephK และ @clk เพื่อทำให้ขั้นตอนเสร็จสมบูรณ์

  1. เพิ่มที่เก็บ epel

    sudo yum install epel-release
    
  2. ติดตั้งแพ็คเกจ ntfs-3g

    sudo yum install ntfs-3g
    
  3. เรียกใช้grub2-mkconfigคำสั่งและตรวจสอบว่ารายการ 'Windows' ตรวจพบ

    sudo grub2-mkconfig > /dev/null 
    
  4. อัพเดตgrub.cfgไฟล์

    sudo cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.old
    sudo grub2-mkconfig -o /boot/grub2/grub.cfg   
    
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.