Cửa sổ khởi động kép trên ổ cứng thứ hai, hệ thống UEFI / GPT


15

Tôi muốn cài đặt linux, nhưng tôi không muốn mạo hiểm làm hỏng cài đặt windows hiện tại của mình vì tôi đã nghe rất nhiều câu chuyện kinh dị. May mắn thay, tôi có thêm một ổ cứng. Tôi có thể cài đặt linux lên đó và sau đó khởi động kép windows mà không phải sửa đổi ổ đĩa windows không?

Ngoài ra, tôi có "BIOS" UEFI và ổ đĩa windows có định dạng GPT.

Câu trả lời:


18

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ư:

  1. 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

  2. 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.dtrong 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 ( ntfscó 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.efihoặ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õ grubvà 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 insmodlệ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-uuiddò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-uuiddò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-mkconfighoặ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-mkconfigtrự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-mkconfigtrự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.cfghoặc /boot/grub2/grub.cfg.

> grub-mkconfig -o /boot/grub/grub.cfg

update-grubsẽ tự động quét cấu hình cho các lỗi. grub-mkconfigsẽ 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.cfgtrong 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-grubhoặc chạy grub-mkconfiglạ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 exitvà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.dthư 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


2
Thuật ngữ chính xác về mặt kỹ thuật mà bạn đang tìm kiếm, cũng không phải là khó hiểu, là phần sụn , có thể tự trình bày dưới dạng BIOS hoặc UEFI.
Milind R

Thật không may, phần sụn cũng có ý nghĩa chung hơn nhiều ở chỗ nó đề cập đến bất kỳ phần mềm nào được nhúng vào phần cứng.
Kylotan

trên máy tính để bàn của tôi, "chain" không có cơ sở như một lệnh trong khi khởi động, nhưng đó là trình tải chuỗi trong tệp 40_custom tôi cần viết. cho tôi biết nếu điều này là bình thường
FlogFR

Rất đẹp! Tuy nhiên, khi tôi thử điều này, cài đặt Windows 8 của tôi sẽ không xuất hiện dưới dạng một mục trong grub2. Tôi đã sửa tất cả các lỗi cú pháp và tệp grub.cfg được tạo không có lỗi. Ngoài ra, xin lưu ý rằng có một lỗi cú pháp khi chainload được đề cập lần đầu tiên: chainload $({root})nên chainload (${root})(tôi không thể chỉnh sửa nó vì nó quá nhỏ để thay đổi).
sobek

@sobek Cảm ơn vì điều đó - đã sửa. Nếu bạn đã thêm một cái gì đó vào một tập tin /etc/grub.dvà nó không được thêm vào khi bạn tạo cấu hình, điều gì đó kỳ lạ sẽ xảy ra. Nếu bạn chạy grub-mkconfigmà không có -otiêu chuẩn, điều đó có thể giúp xác nhận hoặc từ chối rằng các bổ sung của bạn đang được xử lý.
goldilocks
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.