Tôi sẽ sử dụng thuật ngữ BIOS bên dưới khi đề cập đến các khái niệm giống nhau cho cả hệ thống UEFI mới hơn và hệ thống BIOS truyền thống, vì trong khi đây là câu hỏi định hướng của UEFI, nói về "BIOS" tốt hơn, ví dụ, tài liệu GRUB và "BIOS / UEFI" quá lộn xộn. GRUB (thực ra, GRUB 2 - cái này thường được sử dụng một cách mơ hồ) là bộ tải khởi động được cài đặt bởi linux và được sử dụng để khởi động Windows kép.
Đầu tiên, một từ về thứ tự ổ đĩa và thứ tự khởi động. Thứ tự ổ đĩa đề cập đến thứ tự các ổ đĩa được kết nối vật lý với xe buýt trên bo mạch chủ (ổ đĩa thứ nhất, ổ đĩa thứ hai, v.v.); thông tin này được báo cáo bởi BIOS. Thứ tự khởi độngđề cập đến trình tự trong đó BIOS kiểm tra ổ đĩa khởi động. Điều này không nhất thiết giống như thứ tự ổ đĩa và thường có thể được cấu hình thông qua màn hình thiết lập BIOS. Thứ tự ổ đĩa không được cấu hình hoặc bị ảnh hưởng bởi thứ tự khởi động, vì đó sẽ là một điều rất không thân thiện với hệ điều hành (nhưng về lý thuyết, một BIOS khó hiểu có thể). Ngoài ra, nếu bạn rút ổ đĩa thứ nhất, ổ đĩa thứ hai có thể sẽ trở thành ổ đĩa thứ nhất. Chúng tôi sẽ sử dụng UUID trong việc cấu hình bộ tải khởi động để thử và tránh các vấn đề như thế này (trình cài đặt linux hiện đại cũng làm điều này).
Cách lý tưởng để có được những gì bạn muốn là cài đặt linux vào ổ đĩa thứ hai theo thứ tự ổ đĩa và sau đó chọn nó trước theo thứ tự khởi động bằng cách thiết lập UEFI. Một lợi thế nữa của việc này là bạn có thể sử dụng thứ tự khởi động BIOS / UEFI để chọn ổ đĩa windows và bỏ qua grub nếu muốn. Lý do tôi khuyên dùng linux trên ổ đĩa thứ hai là vì GRUB phải "chainload" bộ tải khởi động gốc Windows và bộ tải khởi động windows luôn cho rằng nó nằm trên ổ đĩa đầu tiên. Có một cách để lừa nó, tuy nhiên, nếu bạn thích hoặc cần nó theo cách khác.
Hy vọng, bạn có thể tiếp tục và sử dụng CD trực tiếp hoặc bất cứ điều gì và hoàn thành việc này bằng trình cài đặt GUI. Tuy nhiên, không phải tất cả các trình cài đặt đều được tạo như nhau và nếu điều này bị sai sót và bạn sẽ gặp phải các vấn đề như:
Tôi đã cài đặt linux vào đĩa đầu tiên và bây giờ tôi không thể khởi động windows, hoặc
Tôi đã cài đặt linux vào đĩa thứ hai, nhưng sử dụng đĩa thứ nhất cho bộ tải khởi động, và bây giờ tôi không thể khởi động bất cứ thứ gì!
Sau đó tiếp tục đọc. Trong trường hợp thứ hai, trước tiên bạn nên thử và cài đặt lại linux vào đĩa thứ hai và lần này hãy chắc chắn rằng đó là nơi bộ tải khởi động đi. Cách dễ nhất và dễ thực hiện nhất là tạm thời gỡ ổ đĩa Windows ra khỏi máy, vì chúng ta sẽ cho rằng không có gì được cài đặt thêm trên nó, bất kể thứ tự ổ đĩa.
Khi bạn đã cài đặt linux và bạn đã chắc chắn rằng nó có thể khởi động, hãy cắm lại ổ đĩa Windows (nếu bạn đã gỡ bỏ nó - và hãy nhớ rằng, lý tưởng nhất là chúng tôi muốn nó đầu tiên về thứ tự ổ đĩa và ổ đĩa thứ hai trước tiên về thứ tự khởi động) và tiến hành bước tiếp theo.
Truy cập cấu hình GRUB
Khởi động linux, mở một thiết bị đầu cuối và
> su root
Bạn sẽ được yêu cầu nhập mật khẩu của root. Từ thời điểm này trở đi, bạn là siêu người dùng trong thiết bị đầu cuối đó (để kiểm tra, thử whoami
), vì vậy đừng làm điều gì ngu ngốc. Tuy nhiên, bạn vẫn là người dùng bình thường trong GUI và vì chúng tôi sẽ chỉnh sửa tệp văn bản, nếu bạn thích trình chỉnh sửa GUI, chúng tôi sẽ phải tạm thời thay đổi quyền sở hữu tệp đó và thư mục chứa trong đó:
> chown -R yourusername /etc/grub.d/
Nếu bạn nhận được "Hoạt động không được phép", bạn đã không su
đúng. Nếu bạn nhận được chown: invalid user: ‘yourusername’
, bạn đã thực hiện lệnh cuối cùng theo nghĩa đen.
Bây giờ bạn có thể điều hướng đến /etc/grub.d
trong filebrowser của bạn và tìm kiếm một tệp được gọi 40_custom
. Nó sẽ giống như thế này:
#!/bin/sh
exec tail -n +3 $0
# 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.
Nếu bạn không thể tìm thấy nó, trong thiết bị đầu cuối gốc, hãy nhập các lệnh sau:
> touch /etc/grub.d/40_custom
> chmod 755 /etc/grub.d/40_custom
> chown yourusername /etc/grub.d/40_custom
Mở nó trong trình soạn thảo văn bản của bạn, sao chép dán phần bên trên (bắt đầu w / #!/bin/sh
) và sang bước tiếp theo.
Thêm tùy chọn khởi động Windows
Sao chép-dán phần này vào trình soạn thảo văn bản ở cuối tệp:
menuentry "MS Windows" {
insmod part_gpt
insmod search_fs_uuid
insmod ntfs
insmod chain
}
Đây là danh sách các mô-đun GRUB sẽ cần để hoàn thành công việc ( ntfs
có thể là thừa, nhưng cũng không nên làm tổn thương gì cả). Lưu ý rằng đây là một mục không đầy đủ - chúng ta cần thêm một số lệnh quan trọng.
Tìm bộ tải khởi động giai đoạn hai của Windows
Cài đặt linux của bạn có thể đã tự động vượt qua phân vùng Windows của bạn và bạn sẽ có thể tìm thấy nó trong trình duyệt tệp. Nếu không, hãy tìm ra một cách để làm cho nó trở nên như vậy (nếu bạn không chắc chắn làm thế nào, hãy đặt câu hỏi trên trang web này). Khi đã xong, chúng ta cần biết điểm gắn kết - điều này sẽ rõ ràng trong trình duyệt tệp, vd /media/ASDF23SF23/
. Để lưu một số cách gõ, chúng ta sẽ đặt nó vào một biến shell:
win="/whatever/the/path/is"
Không nên có khoảng trắng ở hai bên của dấu bằng. Không bao gồm bất kỳ yếu tố nào của đường dẫn Windows tại đây. Điều này sẽ trỏ đến thư mục cấp cao nhất trên phân vùng Windows. Hiện nay:
cd $win
find . -name bootmgfw.efi
Điều này có thể mất vài phút nếu bạn có một phân vùng lớn, nhưng rất có thể điều đầu tiên nó phát ra là những gì chúng ta đang tìm kiếm; có thể có thêm các tài liệu tham khảo trong hệ thống tập tin chứa các chuỗi goobledygook dài - những chuỗi này không có. Sử dụng Ctrl-c
để dừng tìm kiếm một khi bạn thấy một cái gì đó ngắn và đơn giản như ./Windows/Boot/EFI/bootmgfw.efi
hoặc ./EFI/HP/boot/bootmgfw.efi
.
Ngoại trừ .
lúc bắt đầu, hãy nhớ con đường này cho sau này; bạn có thể sao chép nó vào trình soạn thảo văn bản của bạn trên một dòng trống ở phía dưới, vì chúng tôi sẽ sử dụng nó ở đó. Nếu bạn muốn quay lại thư mục trước của mình bây giờ, hãy sử dụng cd -
, mặc dù việc bạn ở đâu trong vỏ từ đây trở đi không quan trọng.
Đặt tham số đúng
GRUB cần có khả năng tìm và chuyển quá trình khởi động cho bộ tải khởi động Windows giai đoạn thứ hai. Chúng tôi đã có đường dẫn trên phân vùng Windows, nhưng chúng tôi cũng cần một số tham số để cho GRUB biết vị trí đó là gì. Cần có một công cụ được cài đặt trên hệ thống của bạn được gọi là grub-probe
(trên, ví dụ: Fedora) grub2-probe
. Gõ grub
và sau đó đánh Tabhai hoặc ba lần; bạn sẽ thấy một danh sách bao gồm cái này hay cái kia.
> grub-probe --target=hints_string $win
Bạn sẽ thấy một chuỗi như:
--hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1
Quay trở lại trình soạn thảo văn bản với cấu hình GRUB trong đó và thêm một dòng sau tất cả các insmod
lệnh (nhưng trước dấu ngoặc nhọn đóng) để nó trông như sau:
insmod chain
search --fs-uuid --set=root [the complete "hint bios" string]
}
Đừng ngắt dòng đó hoặc cho phép trình soạn thảo văn bản của bạn làm như vậy. Nó có thể bao quanh trong màn hình - một cách dễ dàng để biết sự khác biệt là đặt đánh số dòng trên. Kế tiếp:
> grub-probe --target=fs_uuid $win
Điều này sẽ trả về một chuỗi các chữ cái, số và dấu gạch ngang có thể ngắn hơn, chẳng hạn như "123A456B789X6X" hoặc "b942fb5c-2573-4222-acc8-bbb883f19043". Thêm vào cuối search --fs-uuid
dòng sau chuỗi bios gợi ý, được phân tách bằng dấu cách.
Tiếp theo, nếu (và chỉ khi) Windows nằm trên ổ đĩa thứ hai theo thứ tự ổ đĩa , hãy thêm một dòng sau search --fs-uuid
dòng:
drivemap -s hd0 hd1
Đây là "mánh khóe" đã đề cập trước đó. Lưu ý rằng nó không được đảm bảo để làm việc nhưng nó không đau để thử.
Cuối cùng, dòng cuối cùng phải là:
chainloader (${root})[the Windows path to the bootloader]
}
Chỉ cần rõ ràng, ví dụ:
chainloader (${root})/Windows/Boot/EFI/bootmgfw.efi
Đó là nó. Lưu tệp và kiểm tra trong trình duyệt tệp để đảm bảo rằng nó thực sự đã được lưu và trông giống như nó cần.
Thêm tùy chọn menu mới vào GRUB
Điều này được thực hiện với một công cụ gọi là grub-mkconfig
hoặc grub2-mkconfig
; nó sẽ có trong danh sách mà bạn tìm thấy Tabtrước đó. Bạn cũng có thể có một lệnh aa được gọi update-grub
. Để kiểm tra điều đó, chỉ cần gõ nó trong thiết bị đầu cuối gốc. Nếu bạn nhận được "lệnh không tìm thấy", bạn cần sử dụng grub-mkconfig
trực tiếp. Nếu không (bao gồm cả lỗi lâu hơn), bạn chỉ cần đặt cấu hình và có thể đọc lướt qua một chút.
Để sử dụng grub-mkconfig
trực tiếp, trước tiên chúng ta cần tìm grub.cfg
:
> find /boot -name grub.cfg
Điều này có thể sẽ được /boot/grub/grub.cfg
hoặc /boot/grub2/grub.cfg
.
> grub-mkconfig -o /boot/grub/grub.cfg
update-grub
sẽ tự động quét cấu hình cho các lỗi. grub-mkconfig
sẽ không, nhưng điều quan trọng là phải làm như vậy bởi vì bây giờ việc đối phó với chúng dễ dàng hơn nhiều so với khi bạn cố gắng khởi động máy. Đối với điều này, sử dụng grub-script-check
(hoặc grub2-script-check
):
> grub-script-check /boot/grub/grub.cfg
Nếu điều này (hoặc update-grub
) tạo ra lỗi chỉ ra số dòng, thì đó là số dòng trong grub.cfg, nhưng bạn cần sửa phần tương ứng trong /etc/grub.d/40_custom
(tệp trong trình soạn thảo văn bản của bạn). Bạn có thể cần phải root chỉ để xem tệp cũ, vì vậy hãy thử less /boot/grub/grub.cfg
trong thiết bị đầu cuối, nhấn :và nhập số dòng. Bạn sẽ thấy mục menu của bạn. Tìm lỗi đánh máy, sửa nó trong trình soạn thảo văn bản và chạy update-grub
hoặc chạy grub-mkconfig
lại.
Khi bạn hoàn tất, bạn có thể đóng trình soạn thảo văn bản và nhập exit
vào thiết bị đầu cuối để thoát khỏi chế độ siêu người dùng.
Khởi động lại!
Khi bạn vào menu grub, cuộn xuống nhanh chóng (trước khi hết thời gian, thường là 5 giây) đến tùy chọn "Windows" và kiểm tra nó. Nếu bạn gặp lỗi tin nhắn văn bản từ grub, có gì đó không đúng với cấu hình. Nếu bạn nhận được thông báo lỗi từ Windows , vấn đề đó là giữa bạn và Microsoft. Tuy nhiên, đừng lo lắng, ổ đĩa Windows của bạn chưa được sửa đổi và bạn sẽ có thể khởi động trực tiếp vào nó bằng cách đặt nó trước (về thứ tự khởi động) thông qua thiết lập BIOS.
Khi bạn quay lại linux lần nữa, hãy trả lại quyền sở hữu /etc/grub.d
thư mục và nội dung của nó về trạng thái ban đầu:
sudo chmod 755 /etc/grub.d/40_custom
Người giới thiệu