Tùy chọn khởi động Windows bị thiếu sau khi cài đặt CentOS 7, làm cách nào tôi có thể lấy lại?


21

Gần đây tôi đã cài đặt CentOS 7 trên một máy đang chạy Windows 7. Tôi đã cài đặt khởi động kép và cài đặt CentOS trong một phân vùng. Nhưng khi tôi khởi động máy, nó chỉ cung cấp cho tôi hai tùy chọn CentOS. Nó không cho tôi tùy chọn để khởi động Windows 7. Làm cách nào tôi có thể thêm windows 7 trở lại các tùy chọn khởi động?

LƯU Ý: Tôi đang đọc bài đăng này có tiêu đề: CenTOS 7 khởi động kép có cửa sổ , nhưng /grubthư mục của tôi dường như chỉ có một splash.xpm.gztệp trong đó mà không có tệp nào khác. Ngoài ra, tôi mới dùng Linux và cần một cái gì đó từng bước một.

EDIT # 1

Tôi nhận được các kết quả sau trên dòng lệnh:

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

Ngoài ra, tôi hiện đang nghiên cứu khả năng các lệnh này có thể không áp dụng cho CentOS. Ví dụ: trong Hỏi & Đáp về U & L này có tiêu đề: " Tương đương với bản cập nhật cho các hệ thống RHEL / Fedora / CentOS? ", Cũng như câu hỏi và trả lời này có tiêu đề: " Đã cài đặt Centos 7 sau Windows và không thể khởi động vào CentOS " nên cài đặt lại grub2. Nhưng làm thế nào để tôi làm điều đó? Tôi mới học Linux.

EDIT # 2

Lệnh sau không hoạt động. Đây là đầu ra:

[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 cho cách bạn đã thử trước khi hỏi và cũng ghi lại các lần thử của bạn trong câu hỏi. Bạn sẽ làm tốt.
Olivier Dulac

Câu trả lời:


21

Điều này thường được khắc phục bằng cách chạy các tập lệnh phát hiện các hệ điều hành đã cài đặt và tạo tệp cấu hình của bộ tải khởi động ( grub2trong trường hợp này). Trên CentOS 7, điều đó nên được grub2-mkconfig.

  1. Kiểm tra xem các cửa sổ được phát hiện. Chạy grub2-mkconfignhưng loại bỏ đầu ra của nó:

    $ 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
    

    Đầu ra sẽ trông tương tự (nhưng không giống hệt) với những gì được hiển thị ở trên. Hãy chắc chắn rằng Windows được liệt kê.

  2. Nếu Windows được liệt kê ở bước trước, hãy tiếp tục và lưu tệp cấu hình mới. Tạo một bản sao lưu đầu tiên, chỉ trong trường hợp.

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

Nếu mọi việc suôn sẻ, bây giờ bạn có thể khởi động lại vào Windows.


Tôi cũng có một vấn đề với grub2. Tôi thích câu trả lời, nhưng làm cách nào để loại bỏ đầu ra? Đây có phải là lệnh grub2-mkconfig > /dev/nullmà tôi nên sử dụng? Ngoài ra, điều này cũng sẽ hoạt động từ chế độ cứu hộ, nếu linux không khởi động?
patrik

@patrik có, > /dev/nullloại bỏ đầu ra. Bước này chỉ để kiểm tra xem Windows có được phát hiện hay không. Nó không làm gì cả. Đó là sudo grub2-mkconfig -o /boot/grub2/grub.cfgghi tập tin cấu hình mới. Cũng lưu ý rằng lệnh trên các hệ thống dựa trên Debian chỉ đơn giản là sudo update-grub. Chạy cái này từ một hệ thống cứu hộ có thể hoạt động nhưng trước tiên bạn cần một số thứ khác. Có một cái nhìn vào câu trả lời của tôi ở đây .
terdon

@terdon Tôi gặp sự cố khi tạo lại các bước này trên máy windows 8 mà tôi muốn biến thành máy khởi động kép với CentOS 7. Bạn có sẵn sàng giúp tôi không? Đây là đường dẫn: unix.stackexchange.com/questions/210111/ Khăn
CodeMed

@CodeMed Tôi có thể thử nhưng tôi không biết nhiều về CentOS và ít hơn về WUsows.
terdon

Thêm một số thông tin: vừa kiểm tra rằng giải pháp này cũng hoạt động cho Windows 10. Nó sẽ tạo ra một mục có tên Windows Recovery Môi trường (trình tải) , mặc dù tên của nó, sẽ không thực hiện bất kỳ phục hồi nào và sẽ khởi động trực tiếp vào Windows 10.
dr01

15

Theo dõi câu trả lời của @terdon - khi bạn thực hiện bước kiểm tra và grub2-mkconfig không tìm thấy phân vùng Windows. Tiếp theo, hãy đảm bảo bạn đã cài đặt gói "ntfs-3g" để hệ thống Linux của bạn có thể đọc (các) phân vùng Windows.

sudo yum install ntfs-3g

Sau khi cài đặt, khi bạn chạy

sudo grub2-mkconfig > /dev/null

... bạn sẽ thấy các cửa sổ khởi động được liệt kê. Nếu các mục / mục khác là OK, hãy tiếp tục và viết nó.


1
Cảm ơn bạn và +1 đã thêm cái nhìn sâu sắc vào câu hỏi cũ này.
CodeMed

1
bạn cũng có thể cần thêm --enablerepo epelcông tắc cho lệnh đầu tiên
gamliela 20/03/2016

8

Tôi đã gặp vấn đề này khi cài đặt CentOS 7.0. Windows ban đầu không được liệt kê trong đầu ra của grub2-mkconfig.

Để cài đặt ntfs-3g như được đề xuất trong câu trả lời khác, trước tiên tôi phải cài đặt bản phát hành epel:

sudo yum install epel-release

Đơn giản chỉ cần cố gắng sudo yum --enablerepo epel install ntfs-3gdẫn đến một kho lưu trữ không tìm thấy tin nhắn.

Cài đặt epel-phát hành cho phép cài đặt ntfs-3g. Từ đó, phân vùng Windows được liệt kê trong grub2-mkconfig. Các bước trong các câu trả lời trước đó đã đưa ra tùy chọn để chọn các cửa sổ khi khởi động.


0

Tóm tắt câu trả lời của @terdon @JosephK và @clk để chính thức hóa thủ tục hoàn chỉnh.

  1. Thêm kho lưu trữ epel

    sudo yum install epel-release
    
  2. Cài đặt gói ntfs-3g

    sudo yum install ntfs-3g
    
  3. Chạy grub2-mkconfiglệnh và kiểm tra xem mục 'Windows' có được phát hiện không.

    sudo grub2-mkconfig > /dev/null 
    
  4. Cập nhật grub.cfgtập tin.

    sudo cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.old
    sudo grub2-mkconfig -o /boot/grub2/grub.cfg   
    
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.