niemtin007

facebook.com/niemtin007

hãy theo đuổi đam mê - chủ nợ sẽ theo đuổi bạn

Saturday, June 25, 2016

[Guide] Sử dụng Clover bootloader để quản lý Multi OS


Multi OS là một khái niệm nói đến việc cài nhiều hệ điều hành chạy trên cùng một phần cứng máy tính. Với sự phát triển của cộng đồng hackintosh, sự phát triển mạnh mẽ của Linux những năm gần đây thì việc Multi OS khá cần thiết để trải nghiệm tốt các hệ điều hành, tạo môi trường làm việc, lập trình tốt hơn. Bài viết này không hướng đến những cá nhân chỉ sử dụng Windows với những tính năng hết sức cơ bản như lướt web, gõ văn bản... Bài viết hướng đến người dùng máy tính nâng cao, những lập trình viên, developer... Tất nhiên, nếu bạn là một vọc sĩ thích sự mới mẻ thì guide này cũng là một sự lựa chọn không tồi dành cho bạn




Sơ lược về Clover bootloader

Clover là một trình khởi động được cộng đồng hackintosh phát triển nhằm hỗ trợ việc cài Mac OS lên máy tính thông thường chạy chip Intel mà không sử dụng phần cứng của Apple. Clover được xây dựng trên nền tảng của rEFInd và đã phát triển độc lập. Ưu điểm của trình khởi động này là menu boot rất đẹp, đa năng và khả năng tùy biến cao

Nếu như bạn đã từng cài Multi OS thì cũng thấy sự khó chịu nhất định trong quản lý menu khởi động của các hệ điều hành đã cài nhất là với Linux khi sử dụng Grub2 làm trình bootloader mặc định nhìn khá cùi mía và dễ gây ức chế người dùng.




Vấn đề cần giải quyết!

Thường thì sau khi cài hackintosh, chọn Clover làm trình khởi động thì menu của Windows, MacOS, và một số Linux đã mặc định hiện trên Menu của clover. Nguyên do là Clover đọc file *.efi từ phân vùng EFI để tự động thêm vào menu.

Vấn đề 1: nếu bạn chọn cài những Linux Distro phổ biến thì menu sẽ tự động thêm cho bạn nhưng nếu những distro bạn dùng không phổ biến hoặc mới xuất hiện vài năm gần đây thì menu sẽ không được tự động cho bạn

Vấn đề 2: Boot qua file *.efi cho Linux cũng chỉ là một bước trung gian để khởi động vào Grub2. Vậy nếu để mặc định thì lại thành thừa thải (xã hội gọi là rảnh đó bạn ^^ ). Nguyên do là bạn phải dùng 2 thao tác là chọn menu qua clover rồi lại chọn qua Grub2 mới vào hệ điều hành mà bạn muốn >>> Vậy thì dùng Grub2 luôn cho khỏe chứ xài Clover làm gì -_-





Mục đích của guide này?

Thêm đầy đủ các hệ điều hành từ Windows, MacOS đến Linux lên menu của Clover và chỉ cần enter vào menu đã chọn là boot thẳng vào hệ điều hành bạn muốn. Ngoài ra còn hướng dẫn cho các bạn cách khắc phục một số lỗi trong quá trình sử dụng





Linux khởi động từ Clover như thế nào?

Từ Kernel 3.3 trở lên Linux đã hỗ trợ khởi động bằng EFISTUB (EFI BOOT STUB). Đây là phương pháp có thể khởi động trực tiếp kernel từ EFI mode. Grub2 cũng khởi động thông qua nó, khi sử dụng Clover bootloader bạn có thể boot trực tiếp qua kernel này, xong ở một số trường hợp Clover chưa hỗ trợ cho một số distro linux đặc biệt ta vẫn cần load thông qua trợ giúp Grub2 bootloader

Mặc định Clover bootloader không hỗ trợ driver cho linux để load trực tiếp kernel, để sử dụng tính năng hữu ích này ta cần lấy driver từ rEFInd boot manager (download here)






Có bao nhiêu cách để thêm Linux vào menu Clover

Cách 1: Chỉ cần chép driver của rEFInd vào thư mục drivers64UEFI là, trong thẻ GUI ở khung scan tích vào cả 2 ô kernel và linux là menu của Linux tự động add vào menu clover
  • Đơn giản, không phải thao tác gì nhiều. Cách này dùng cho những distro phổ biến
  • Không tùy biến icon được, một số distro mới Clover không nhận diện được

Cách 2: Thêm menu trực tiếp cho linux vào Clover bằng cách boot qua vmlinuz. Thực ra bản chất cũng như cách 1 nhưng ta có thể tùy chỉnh được các thiết lập
  • Không phụ thuộc vào grub2
  • Dễ chỉnh sửa thuộc tính boot

Cách 3: Thêm menu cho Linux trên Clover bằng cách chạy thông qua file grubx64.efi (hoặc shimx64.efi hay bootx64.efi)
  • Tận dụng config mặc định của Grub2, dùng cho một số distro đặc biệt không thể load thông qua vmlinuz trực tiếp được thí dụ như các distro họ Android hay các distro mới ra gần đây có cấu trúc phân vùng đặc biệt khiến driver chưa thể nhận diện được
  • Chỉ cần địa chỉ phân vùng PARTGUID, bạn có thể lấy thông qua boot.log trên Clover configurator
  • Cần phải thao tác thêm vào grub2




Với cách 2 và cách 3 hầu hết các thiết lập đều đã có sẵn duy nhất có 2 giá trị ta cần phải tìm đó là PARTUUIDUUID. Các bạn boot vào Linux, mở Terminal và oánh lệnh
  • sudo blkid


Copy đúng chuỗi số vừa lấy được của phân vùng bạn muốn multiOS vào config.plist với các giá trị tương ứng
  • Volume = PARTUUID (Lưu ý cần chuyển chuỗi vừa lấy được thành chuỗi in hoa, có thể dùng phím chức năng Shift+F3 trên Word hoặc sử dụng tính năng này trên Unikey)
  • AddArguments = UUID





1. Đối với máy tính đã có Clover thừa kế sau khi cài hackintosh

Như tiêu đề của chuỗi bài viết về hackitosh dành cho newbie, việc cài thành công hackintosh là con đường dễ dàng để đi đến multi OS, vậy dễ ra sao:

Khởi động vào Mac OS >>> bật trình chỉnh sửa Clover Configurator >>> chuyển sang thẻ Boot.log



Các bạn mở file config.plist trong EFI/CLOVER rồi chuyển sang thẻ Gui và làm như hình. Click vào dấu "+" ở khung "Custom Entries" để thêm Menu mới cho UEFI mode

Thực ra đối với Windows và Mac OS thì không cần phải thêm menu làm gì vì Clover đã tự nhận diện tụi nó trên trình đơn khởi động, nhưng nếu bạn muốn sắp xếp menu nào trước sau thì nên tùy chỉnh thêm menu cho nó

  • Volume: dán địa chỉ phân vùng vào đây (xem ở boot.log). Lưu ý nếu boot từ grubx64.efi thì địa chỉ phân vùng là của EFI; còn từ vmlinuz thì địa chỉ phân vùng là phân vùng cài đặt OS
  • Path: oánh đường dẫn đến file *.efi hoặc vmlinuz
  • AddArguments:

    Với Mac OS kiểu như này:
    slide=0 dart=0 nv_disable=1 -gux_defer_usb2 kext-dev-mode=1

    Với Linux thì có cấu trúc như này
    root=UUID=62b30549-d7c3-4e82-b905-92031a7a7f50 ro initrd=initrd.img add_efi_memmap
    (thêm lệnh quite nếu muốn ẩn các tiến trình khi boot)
    Thay chuỗi số phía trên bằng UUID phân vùng chứa OS mà bạn muốn thêm menu

  • Title / FullTitle: Oánh tên bạn muốn hiện trên menu khi chọn
  • Image: tên của icon trong thư mục icon của theme bạn đang dùng, lưu ý nếu chưa có icon của OS bạn đang dùng bạn có thể tạo icon bằng photoshop định dạng .png sau đó đổi đuôi thành .icns (Thí dụ tên file icon là os_parrot.icns thì chỉ cần oánh tên ở mục này là parrot

  • Type: Chọn kiểu boot cho OS (Windows, OSX, Linux, First)
  • VolumeType: chọn Internal






2. Đối với máy tính chưa cài hackintosh

Để trực quan trong chỉnh config.plist bạn có thể sử dụng máy ảo chạy Mac OS và cài thêm Clover configurator (xem cách sử dụng máy ảo Mac OS tại đây). Nhưng để không mất thời gian bạn có thể chỉnh sửa config.plist bằng trình edit thông dụng như Notepad++ cũng được chỉ cần bạn cẩn thận một chút để tránh làm hỏng cấu trúc config


Tiến hành giải nén file vừa tải, mount Clover-v2.3k-xxxx-X64.iso và copy thư mục CLOVER ra ổ cứng để tiến hành chỉnh sửa config.plist

Click vào dấu "-" để thu gọn các thẻ không dùng đến, ta chỉ quan tâm đến thẻ GUI. Các bạn so sánh nội dung code dưới đây và hình phía trên để chỉnh sửa code cho đúng nhé



Tải Config.plist có nội dung phía trên ở đây http://www.fshare.vn/file/7DZJHGNKOFTL
>> Cloud Clover Editor (chỉnh sửa config.plist trên nền web)

Sau khi chỉnh sửa config.plist xong copy thư mục Clover vào phân vùng ESP (EFI). Set boot cho Clover làm mặc định bằng tay như hình dưới.

Lưu ý để truy cập vào phân vùng ESP có nhiều cách, cách mình thường dùng và cảm thấy hiệu quả nhất là boot vào WinPE, mở tool phân vùng như MiniTool Partition Wizard >>> gán Letter cho ESP >>> mở trình Explorer nhấn F5 để Refresh là có thể full quyền truy cập và chỉnh sửa EFI. Có thể tham khảo bài này để tự tạo một chiếc USB multiboot đa năng cho riêng mình



Hoặc nếu trên Windows bạn có thể dùng Xorboot (download here) để thêm entries cho Clover như này







So sánh 2 hình minh họa về Boot Entries ở hai phần 1, 2 chắc bạn đủ thông minh để hiểu cách tích hợp rồi, nhưng để rõ ràng mình sẽ tóm tắt lại như sau:

Cách 1. Nếu cài các distro phổ biến như Ubuntu, Linux Mint, Fedora, OpenSuse, ... chỉ cần copy driver vào thư mục drivers64UEFI, sau đó tùy chỉnh thêm config.plist bật 2 thiết lập kernel và linux là được, menu của linux sẽ tự động hiện trên Clover bootloader, nhưng sẽ xuất hiện một menu thừa do Clover đọc file grubx64.efi từ phân vùng ESP (EFI). Để menu được thoáng hơn, ở thẻ hide bạn thêm bootx64.efi để ẩn nó đi, hoặc có thể vào phân vùng ESP (EFI) xóa folder của distro đó đi là được (thí dụ như folder Ubuntu - để an toàn có thể nén folder Ubuntu lại trước rồi mới xóa folder Ubuntu)

Cách 2. Nếu sau khi làm theo cách 1 nếu Clover nhận kernel nhưng hệ thống icon nhận sai hết bạn có thể dùng cách 2 để thêm menu entries cho Linux để dễ tùy chỉnh
Có 2 thiết lập quan trọng cần chú ý là:
Volume: oánh là vmlinuz
AddArguments: oánh theo cấu trúc
root=UUID=62b30549-d7c3-4e82-b905-92031a7a7f50 ro initrd=initrd.img add_efi_memmap
(thêm lệnh quite nếu muốn ẩn các tiến trình khi boot)
Thay chuỗi số phía trên bằng UUID phân vùng chứa OS mà bạn muốn thêm menu
Các thiết lập còn lại bạn tùy chỉnh giống như menu Kali Linux (4) và Ubuntu (5) mình đã ví dụ ở phía trên


Cách 3. Sau khi làm cách 1 đầy đủ nhưng không thấy menu xuất hiện, làm luôn cách 2 mà cũng không được thì bạn có thể liệt kê cái Linux OS bạn đang cài là thuộc dạng đặc biệt. Đến thời điểm này mình chỉ mới biết là Parrot OS và các distro họ Android (Androidx86, RemixOS, PhoenixOS). Vì vậy lúc này load thông qua grubx64.efi là tối ưu hơn cả.
  • Bước 1: Thêm menu bạn làm tương tự với Parrot OS mà mình đã để hình thí dụ phía trên
  • Bước 2: Boot vào Linux quyền Root tìm đến file grub.cfg theo đường dẫn /boot/grub/grub.cfg; Tìm và sửa hết các dòng có nội dung set timeout về 0 hết cho mình và lưu lại thiết lập






Lời kết

Đối với sự phát triển phần cứng hiện nay cùng với giá linh kiện điện tử rẻ đi rất nhiều, khá dễ dàng để tìm cho mình một cấu hình máy tốt để chạy tốt các trình ảo hóa như VMWare hay VirtualBox. Guide này chỉ là một sự lựa chọn thay thế; quyền lựa chọn là ở các bạn. Nhưng dám chắc một điều chạy đa hệ điều hành trực tiếp trên phần cứng máy tính sẽ mang lại hiệu suất và trải nghiệm tốt hơn rất nhiều so với ảo hóa. Hi vọng Guide này hữu ích với các bạn, chúc các bạn thành công ^^






Blog được tạo ra chỉ với mục đích chia sẻ kinh nghiệm. Không thu phí bạn đọc dưới bất kỳ hình thức nào. Chúc các bạn thành công!
Join Our Newsletter