Làm cách nào để cài đặt hai bản cài đặt Ubuntu độc lập trên một ổ cứng với UEFI?


8

Vì lý do bảo mật, tôi muốn cài đặt một hệ điều hành hoàn toàn độc lập thứ cấp trên một máy tính ổ cứng duy nhất sử dụng UEFI. Cả hai cài đặt đều có thể sử dụng các phân vùng tiền điện tử LUKS khác nhau làm thiết bị gốc (LVM trên đầu tiền điện tử) và cần có thể sử dụng các hạt nhân của riêng chúng.

Có khởi động kép với hai hệ điều hành khác nhau không phải là vấn đề lớn. Một Ubuntu và Fedora sẽ không can thiệp và có thể chia sẻ phân vùng hệ thống EFI, nhưng hai cài đặt Ubuntu sẽ chiến đấu với nhau vì họ muốn cả hai cài đặt phiên bản Grub của họ trên cùng một vị trí EFI.

  • Có cách nào để thay đổi Ubuntu để cài đặt Grub trên một vị trí khác với /boot/efi/EFI/ubuntutrong khi cài đặt không? Tôi cần một cách liên tục, để các bản cập nhật gói và cập nhật kernel / grub vẫn cài đặt trong đường dẫn đó. Giống như cách Grub của Fedora sẽ cài đặt /boot/efi/EFI/fedora. Tôi không thể tìm thấy tùy chọn cấu hình đó trong Grub. Nếu tôi có thể, menu khởi động Dell UEFI của tôi sẽ cho phép tôi chọn hệ điều hành nào sẽ tải. Có lẽ tôi đang thiếu một số keo giữa efibootmgr và grub-efi ở đây.

  • Ngoài ra, có thể sử dụng một cài đặt Grub từ một trong hai cài đặt Ubuntu và để nó tự động phát hiện các cài đặt khởi động đúng không? Ý tôi là, tôi biết os-probersẽ tìm /bootphân vùng khác bằng hạt nhân, nhưng làm thế nào nó có thể biết các tham số khởi động đúng cho hệ điều hành đó (ví dụ: khối lượng LVM bên trong khối lượng mật mã bị khóa như hệ thống tập tin gốc)? Tôi có thể hiểu nó có thể với các cài đặt phân vùng đơn không được mã hóa, nhưng nó không thể khớp /bootvới hệ thống tập tin gốc tương ứng của nó, phải không? Và nó hoàn toàn không thể nếu được mã hóa. Vì vậy, điều đó sẽ đòi hỏi rất nhiều điều chỉnh thủ công các tập tin cấu hình grub. Tôi cũng không thích tùy chọn này của một cấu hình bộ nạp khởi động chung, làm cho hai hệ điều hành ít bị cô lập hơn ở một mức độ nào đó.

Nhân tiện, tôi ổn với cài đặt chuyên gia dựa trên văn bản máy chủ. Ngoài ra một số cấu hình tùy chỉnh miễn là tôi không phải lặp lại các bước cho mỗi bản cập nhật kernel / Grub.

Câu trả lời:


6

Tôi có hai gợi ý ...

Tùy chọn # 1: Các ESP riêng biệt

Trong EFI, bộ tải khởi động nằm trong " Phân vùng hệ thống EFI " (ESP). Tôi đặt từ "the" trong dấu ngoặc kép vì không có quy tắc nào nói rằng bạn bị giới hạn ở một ESP. Nếu bạn tạo hai ESP trên đĩa cứng, bạn có thể sử dụng một trong số chúng cho lần cài đặt đầu tiên và ESP thứ hai cho lần cài đặt thứ hai. Điều này sẽ hoạt động khá trơn tru, mặc dù bạn sẽ phải tạo các phân vùng của mình theo cách thủ công (sử dụng tùy chọn "Something Else" trong khi cài đặt), ít nhất là cho cài đặt Ubuntu thứ hai của bạn.

Một vấn đề với cách tiếp cận này là, mặc dù đặc tả EFI nói rõ rằng bạn có thể tạo bao nhiêu ESP tùy thích, một số phần mềm có thể bị nhầm lẫn bởi nó. Một ví dụ nổi bật về điều này là trình cài đặt Windows, ít nhất là qua Windows 7 (tôi không biết về Windows 8 trở lên); khi trình cài đặt Windows 7 nhìn thấy một đĩa có hai ESP, nó sẽ bong ra và làm những điều kỳ lạ. IIRC, nó không hoàn thành cài đặt riêng của mình đúng cách. Có thể hình dung rằng các công cụ sửa chữa Windows sẽ gặp phải vấn đề tương tự. Nếu bạn không khởi động Windows trên hệ thống này, đây không phải là vấn đề lớn. Nếu bạn Khởi động với Windows, bạn chỉ cần nhận thức được vấn đề, bởi vì bạn có thể dễ dàng khắc phục bằng cách thay đổi tạm thời mã loại của (các) Windows không phải Windows nếu bạn gặp sự cố. Lưu ý rằng Windows sẽ khởi động tốt trên một đĩa có nhiều ESP; nó chỉ là trình cài đặt cuộn cảm trên các đĩa như vậy.

Một vấn đề khác là cách bạn chuyển đổi giữa hai bản phân phối của mình. Bạn có thể cần tùy chỉnh một hoặc cả hai thiết lập GRUB cài đặt của mình bằng công cụ như GRUB Customizer. Một tùy chọn khác (nhưng không tương thích) sẽ là sử dụng trình quản lý khởi động riêng của phần sụn của bạn để chuyển đổi giữa hai bản cài đặt GRUB của bạn và sử dụng từng bản để khởi động phiên bản Ubuntu của riêng nó.

Tùy chọn # 2: Bỏ qua GRUB (hoặc ít nhất là các công cụ GRUB của Ubuntu)

Vấn đề với GRUB cho tình huống của bạn là bạn đã có hai cài đặt và các công cụ bảo trì GRUB có thể bị nhầm lẫn bởi cấu hình đó. Quan sát này dẫn đến giải pháp rõ ràng là bạn không nên sử dụng những công cụ đó. Có một số bộ tải khởi động EFI khác cho Linux, hầu hết đều dễ bảo trì thủ công hơn GRUB. Bạn có thể thiết lập ELILO, SYSLINUX, GRUB Legacy, gummiboot hoặc rEFInd của Fedora và quản lý cả cài đặt của bạn theo cách thủ công. Trên thực tế, vì rEFInd phát hiện hạt nhân bất cứ khi nào nó khởi động, rEFInd sẽ gần với việc không cần bảo trì, một khi nó được thiết lập. Ngoài ra, nhưng theo cách tương tự, bạn có thể chỉnh sửa grub.cfgtệp của mình để làm những gì bạn muốn, thay vì dựa vào các tập lệnh thiết lập GRUB.

Ngoài rEFInd, tất cả các công cụ này sẽ yêu cầu bạn thực hiện thay đổi cấu hình bất cứ khi nào bạn cập nhật kernel, đây sẽ là một lực cản. Ngoài ra còn có câu hỏi khi nào và làm thế nào để cài đặt chương trình khởi động thêm. Có lẽ tôi nên tắt nó cho đến sau lần cài đặt Ubuntu thứ hai, vì mỗi lần cài đặt sẽ đăng ký bản sao GRUB của riêng nó làm trình tải khởi động mặc định và bạn muốn ghi đè mặc định đó.

Cũng lưu ý rằng không có công cụ nào trong số này có thể đọc kernel từ hệ thống tệp được mã hóa hoặc từ LVM, vì vậy bạn sẽ cần có một /bootphân vùng không được mã hóa riêng cho mỗi lần cài đặt Ubuntu của bạn. Dù sao đây cũng là cách mà hầu hết các hướng dẫn tôi từng thấy để thiết lập cài đặt Ubuntu được mã hóa, vì vậy có lẽ nó không phải là vấn đề lớn trừ khi bạn muốn chơi trên "cạnh chảy máu" của mã hóa đĩa.

Một số bộ tải khởi động EFI có các yêu cầu phân vùng hoặc hệ thống tập tin cụ thể bổ sung. Đáng chú ý nhất là ELILO, SYSLINUX và gummiboot đều yêu cầu kernel nằm trên phân vùng FAT và ESP hoạt động tốt nhất cho việc này. Bạn có thể làm điều này bằng cách gắn ESP tại /boot, nhưng đây là một giải pháp iffy trong Ubuntu vì một số cập nhật gói yêu cầu các liên kết tượng trưng. Bạn cũng gặp khó khăn khi thực hiện việc này với hai cài đặt Ubuntu riêng biệt vì cả hai đều cố gắng yêu cầu các tệp giống nhau. (Trong trường hợp này, "ESP" thực sự có nghĩa là "phân vùng mà trình tải khởi động đã chạy", do đó bạn có thể chỉ có một ESP trong trường hợp này.) GRUB Legacy và rEFInd linh hoạt hơn về vấn đề này.

Đề nghị của tôi

Cá nhân, tôi sẽ sử dụng rEFInd cho việc này - nhưng khi tôi duy trì rEFInd, tôi không thực sự thiên vị. Trên thực tế, tôi đã có một máy tính đa khởi động giữa ba lần cài đặt Ubuntu và rEFInd chuyển đổi giữa chúng tốt. Hệ thống cụ thể này không sử dụng mã hóa, nhưng tôi nghi ngờ nếu điều đó sẽ gây ra bất kỳ vấn đề mới nào từ quan điểm của rEFInd.

Điều đó nói rằng, các ESP riêng biệt cũng sẽ hoạt động tốt, với lời cảnh báo rằng bạn có thể cần phải sử dụng GRUB Customizer để điều chỉnh cài đặt của ít nhất một trong những bản sao GRUB đó.


Đề nghị rất tốt, cảm ơn! Tôi chắc chắn rằng bạn đã đúng về việc người ta có thể có nhiều ESP theo thông số kỹ thuật, nhưng tôi nghi ngờ việc triển khai Dell Latitude UEFI của tôi cũng hỗ trợ nó. Nó chỉ cho phép tôi duyệt trong các đường dẫn bằng các ổ đĩa đơn. Tôi phải thực sự thử nó mặc dù.
gertvdijk

nếu việc triển khai EFI của Dell bị hỏng đến mức không thể xử lý nhiều ESP, thì bạn nên trả lại cho cửa hàng để được hoàn lại tiền. Nghiêm túc; điều tồi tệ đó sẽ chỉ ra sự tồi tệ đến mức tôi không tin tưởng phần sụn sẽ thực hiện các nhiệm vụ cơ bản nhất của nó. Trong thực tế, tôi không nghĩ nó sẽ tệ đến thế; Tôi chưa bao giờ nghe nói về một EFI không thể xử lý nhiều ESP.
Rod Smith

1

Dưới đây là các bước tôi đã sử dụng để khởi động kép với hai hệ thống Ubuntu được mã hóa LUKS trên một ổ cứng với UEFI sử dụng tùy chọn # 2 được đề xuất bởi Rod Smith trước đây. Điều này đặc biệt với Ubuntu 18.04.1 - máy tính để bàn. Mã hóa thư mục chính không còn được cung cấp dưới dạng tùy chọn trong khi cài đặt vì có những lo ngại về độ tin cậy và bảo trì của eCryptfs. Thay vào đó, nên sử dụng LUKS, vì vậy tôi nghĩ là tùy chọn tốt nhất để có nhiều người dùng có phân vùng nhà được mã hóa.

    1. Khởi động vào USB Live, điều này là bằng cách tải xuống ISO và sử dụng Startup Disk Creator để định dạng và thiết lập ổ USB.
    1. Sử dụng GParted để phân vùng đĩa. Điều này dựa trên các đề xuất tại https://help.ubfox.com/community/ManualFullSystemEncrypt và sử dụng một số giá trị mặc định được cài đặt bởi trình cài đặt Ubuntu khi chọn mã hóa đĩa cho toàn bộ đĩa.
      • Phân vùng hệ thống EFI / 512MiB / FAT32 / boot, đặc biệt (cờ)
      • Hệ thống khởi động # 1 / 732MiB / EXT4
      • Hệ thống khởi động # 2 / 732MiB / EXT4
      • Dữ liệu được mã hóa # 1 / [kích thước mong muốn] / đã xóa
      • Dữ liệu được mã hóa # 2 / [kích thước mong muốn] / đã xóa
    1. Khởi động lại vào USB trực tiếp
      • Cài đặt Ubuntu
      • Chọn tùy chọn cài đặt
      • Chọn "Cái gì khác" để bố trí đĩa phân vùng và trong cấu hình phân vùng đó để cài đặt:
        • Chọn "Phân vùng hệ thống EFI" làm bộ tải khởi động trong menu ở dưới cùng.
        • Chọn "Dữ liệu được mã hóa số 1" và chọn "thiết bị vật lý để mã hóa" và sau đó nhập cụm từ mã hóa được sử dụng cho phân vùng.
        • Chọn phân vùng vừa tạo với EXT4 và thay đổi điểm gắn kết thành "/".
        • Chọn "Hệ thống khởi động số 1" và có điểm gắn kết cho nó là "/ boot".
      • Tiếp tục và cài đặt
    1. Khởi động lại vào bản cài đặt mới
      • Cài đặt "refind" thông qua "apt-get install refind" và để nó tự động cài đặt vào ESP, "Phân vùng hệ thống EFI".
    1. Khởi động lại vào USB trực tiếp
      • Lặp lại các bước 3 và 4 cho phân vùng # 2 Boot System và Data Encrypted # 2 cài đặt cài đặt Ubuntu thứ hai.
    1. Cấu hình và nâng cấp mỗi cài đặt khi cần thiết.

1

Tôi sử dụng cách tiếp cận sau với một ESP duy nhất:

Tôi đã tạo thêm bộ tải khởi động cho mỗi HĐH với

sudo grub-install --bootloader-id=ID

sử dụng khác nhau IDcho mỗi hệ điều hành.

Thí dụ:

Tôi đã cài đặt Ubuntu 16.04 và Ubuntu 18.04. Tôi khởi động vào Ubuntu 16.04 và chạy

sudo grub-install --bootloader-id=Ubuntu1604

Sau đó, từ khi khởi động vào Ubuntu 18.04, tôi chạy

sudo grub-install --bootloader-id=Ubuntu1804

Trong UEFI-settings tôi thấy các mục khởi động mới với tên Ubuntu1604Ubuntu1804và sắp xếp lại thứ tự khởi động để một bộ các mục mới để ngay từ đầu.

Tôi cũng có thể thấy các thư mục có tên này trong ESP.

Khi một hệ thống nâng cấp với phiên bản grub mới, nó sẽ cài đặt lại một phiên bản mới của grub vào ubuntu-folder trên ESP, nó sẽ không ảnh hưởng đến bộ tải khởi động mà tôi tự tạo, nhưng tôi phải sắp xếp lại thứ tự khởi động vì ubuntu-entry sẽ được đẩy đến vị trí đầu tiên theo thứ tự khởi động.

Đây là những gì efibootmgr -vhiển thị trong cấu hình của tôi:

~ $ efibootmgr -v
BootC Hiện tại: 0001
Thời gian chờ: 0 giây
Trình khởi động: 0001,0002,0004,0000,0003,0005
Boot0000 * ubfox HD (1, GPT, 249ac0f6-d3e4-4b91-91d5-6e8d63c093c3,0x800,0x9a000) / Tệp (\ EFI \ ub Ubuntu \ shimx64.efi)
Boot0001 * US1804 HD (1, GPT, 249ac0f6-d3e4-4b91-91d5-6e8d63c093c3,0x800,0x9a000) / Tệp (\ EFI \ US1804 \ grubx64.efi)
Boot0002 * US1604 HD (1, GPT, 249ac0f6-d3e4-4b91-91d5-6e8d63c093c3,0x800,0x9a000) / Tệp (\ EFI \ US1604 \ grubx64.efi)
Boot0003 * UEFI OS HD (1, GPT, 249ac0f6-d3e4-4b91-91d5-6e8d63c093c3,0x800,0x9a000) / Tệp (\ EFI \ BOOT \ BOOTX64.EFI)
Boot0004 * US1904 HD (1, GPT, 249ac0f6-d3e4-4b91-91d5-6e8d63c093c3,0x800,0x9a000) / Tệp (\ EFI \ US1904 \ shimx64.efi)
Boot0005 * ubfox HD (1, GPT, 249ac0f6-d3e4-4b91-91d5-6e8d63c093c3,0x800,0x9a000) / Tệp (EFI \ Ubuntu \ grubx64.efi)

Vẫn không làm việc cho tôi. Tôi thay đổi mặc định trong / etc / default / grub thành phân phối like GRUB_DISTRIBUTOR="Bionic_18_04"và cài đặt lại grub sử dụng như ID mặc định của UEFI. Nhưng mỗi khi nó chỉ sử dụng /EFI/ubfox/grub.cfg làm vị trí mặc định để khởi động từ /EFI/bionic_18_04/grub.cfg mới của tôi.
oldfred

@oldfred Đối với tôi điều này hoạt động tốt trong vài năm chạy bộ ba khởi động.
mook765

Đã thử lệnh của bạn, thay vì đổi tên trong / etc / default / grub. Không có sự khác biệt. UEFI được đặt thành mặc định khởi động mục mới. Nhưng nó đã khởi động bằng cách sử dụng / efi / ub Ubuntu của tôi với khởi động mặc định, thay vì grub trong thư mục mới / EFI / ub Ubuntu1804. Tôi sẽ nghĩ rằng nó không phải là UEFI tạo ra sự khác biệt.
oldfred

@oldfred Xin hãy xem kết quả efibootmgr -vmà tôi đã thêm vào câu trả lời của mình. Nó hoạt động. Bạn có thể có những thay đổi bổ sung khiến bạn không thể làm điều đó. Những gì tôi mô tả là điều duy nhất tôi làm để làm cho nó hoạt động.
mook765

Tôi đã kiểm tra efibootmgr -v và nó đã được đặt cho mục nhập mới, nhưng đã khởi động grub trong / EFI / ubfox. Của tôi đang khởi động /EFI/ubfox1804/shimx64.efi. Bạn đang sử dụng grubx64.efi hoặc shimx64.efi, có lẽ đó là một sự khác biệt? Tôi đã tắt Secure Boot, nhưng nó được mặc định là shim như mục nhập ubfox1804 đầu tiên. Tại một số thời điểm, tôi đã kết thúc với rất nhiều mục hoặc thư mục UEFI trong / EFI mà tôi gặp vấn đề khi khởi động và phải sử dụng rEFInd trên một ổ đĩa khác để khởi động. Vì vậy, bây giờ tôi không muốn có quá nhiều thư mục / EFI hoặc các mục trong UEFI.
oldfred
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.