# Các vấn đề khi khởi động OpenCore (OpenCore Issues)
Dưới đây là sách hướng dẫn bạn vượt qua các vấn đề xoay quanh việc khởi động USB từ lúc ban đầu cho đến ngay trước khi bạn chọn boot vào bộ cài macOS.
- Bị kẹt ở màn hình đen trước khi hiện menu chọn (picker)
- Bị treo ở lỗi no vault provided! (Không tìm thấy chìa khóa để mở khóa két sắt bảo mật!)
- Bị treo ở lỗi OC: Invalid Vault mode (Cài đặt két sắt bảo mật không hợp lệ)
- Không tìm thấy các phân vùng macOS
- Bị treo ở lỗi OCB: OcScanForBootEntries failure - Not Found (Thất bại khi quét các phân vùng khởi động - Không tìm thấy ổ đĩa nào.)
- Bị treo ở lỗi OCB: failed to match a default boot option (Không tìm thấy ổ đĩa khởi động mặc định đã được thiết lập trước đó)
- Bị treo ở lỗi OCB: System has no boot entries (Hệ thống không tìm thấy mục khởi động nào)
- Bị treo ở lỗi OCS: No schema for DSDT, KernelAndKextPatch, RtVariable, SMBIOS, SystemParameters... (Cấu trúc không hợp lệ - OpenCore không hiểu những cài đặt lạ trong config.plist)
- Bị treo ở lỗi OC: Driver XXX.efi at 0 cannot be found (Không tìm thấy driver được đề cập trong cấu hình)
- Nhận thông báo "Failed to parse real field of type 1" (Lỗi đọc dữ liệu kiểu số thực)
- Không thể chọn bất cứ thứ gì trong menu picker
- SSDT không được thêm vào
- Chạy OpenCore lên máy tính tự khởi động lại vào BIOS
- Lỗi OCABC: Incompatible OpenRuntime r4, require r10 (Phiên bản OpenRuntime không tương tích với OpenCore)
- Lỗi Failed to open OpenCore image - Access Denied (Không thể mở tệp tin OpenCore - Quyền truy cập bị từ chối)
- Lỗi OC: Failed to find SB model disable halting on critical error (Không tìm thấy mẫu máy để thiết lập Secure Boot; Tạm dừng hệ thống do lỗi nghiêm trọng)
- Khởi động trên máy cũ (Legacy) bị treo tại lỗi BOOT FAIL! (Khởi động thất bại!)
# Bị kẹt ở màn hình đen trước khi hiện menu chọn (picker)
Đây có khả năng là lỗi do firmware (BIOS) của bạn hoặc do OpenCore, cụ thể là nó gặp khó khăn khi tải tất cả các driver và hiển thị menu. Cách tốt nhất để chẩn đoán là sử dụng Bản dựng OpenCore phiên bản GỠ LỖI và kiểm tra nhật ký (logs) xem OpenCore có thực sự được tải hay không, và nếu có thì nó bị kẹt ở đâu.
Các tình huống OpenCore KHÔNG chạy được:
- Nếu không có tệp nhật ký (log) nào xuất hiện ngay cả sau khi thiết lập phiên bản DEBUG của OpenCore với Target đặt giá trị là 67, có thể vấn đề nằm ở:
- Cấu trúc thư mục USB không chính xác
- Đọc phần Chạy OpenCore lên máy tính tự khởi động lại vào BIOS để biết thêm thông tin
- Firmware (vi chương trình) của bạn không hỗ trợ UEFI
- Cấu trúc thư mục USB không chính xác
Các tình huống OpenCore ĐÃ chạy được nhưng bị treo:
- Kiểm tra dòng cuối cùng được hiển thị trong nhật ký, có thể sẽ là một driver (trình điều khiển) .efi vừa được tải hoặc một dạng lỗi ASSERT nào đó.
- Đối với lỗi ASSERT, bạn nên thông báo cho các nhà phát triển về vấn đề này tại đây: Công cụ báo cáo lỗi của Acidanthera. (opens new window)
- Đối với các driver .efi bị kẹt, hãy kiểm tra những cái sau:
- Lỗi khi chạy HfsPlus.efi:
- Thử sử dụng HfsPlusLegacy.efi (opens new window) thay thế
- Khuyên dùng cho các CPU không hỗ trợ tập lệnh RDRAND, chủ yếu là Ivy Bridge i3 thế hệ 3 trở về trước.
- VBoxHfs.efi (opens new window) là một lựa chọn khác nhưng chậm hơn nhiều so với phiên bản HfsPlus.
- Lỗi khi chạy HiiDatabase.efi:
- Khả năng cao là firmware của bạn đã hỗ trợ sẵn HiiDatabase, nên driver này gây xung đột. Đơn giản là xóa driver này đi vì bạn không cần nó nữa.
- Lỗi khi chạy HfsPlus.efi:
# Bị treo ở lỗi no vault provided! (Không tìm thấy chìa khóa để mở khóa két sắt bảo mật!)
Lỗi này thực tế là do bạn đang mở tính năng két sắt bảo vệ config.plist, tuy nhiên bạn chưa cung cấp chìa khóa giải mã (file vault.sig) cho cái két sắt này. Tạm thời bạn tắt tính năng Vaulting (két sắt bảo vệ config.plist) trong config.plist của bạn tại mục Misc -> Security -> Vault bằng cách đặt nó thành giá trị:
Optional(Tùy chọn)
Nếu bạn đã lỡ chạy sign.command, bạn sẽ cần khôi phục lại file OpenCore.efi gốc vì chữ ký RSA-2048 256 byte đã bị chèn vào file này. Bạn có thể tải cái OpenCore.efi mới tại đây: OpenCorePkg (opens new window)
Lưu ý: Vault (két sắt bảo vệ config.plist) và FileVault (mã hóa ổ đĩa của macOS) là 2 thứ riêng biệt, đọc thêm phần Bảo mật và FileVault (mã hóa ổ đĩa) (opens new window) để biết thêm chi tiết.
# Bị treo ở lỗi OC: Invalid Vault mode (Cài đặt két sắt bảo mật không hợp lệ)
Đây có khả năng là lỗi chính tả, vì OpenCore đọc giá trị để biết config.plist có trong chế độ bảo vệ hay không. Tuy nhiên nếu bạn viết sai chính tả sẽ làm OpenCore bị treo vì nó không hiểu giá trị đó là gì. Các tùy chọn trong OpenCore có phân biệt chữ hoa chữ thường, vì vậy hãy kiểm tra kỹ. Optional (chữ O viết hoa) mới là cách nhập đúng trong mục Misc -> Security -> Vault chứ không phải "optional" nhé.
# Không tìm thấy các phân vùng macOS
Những cái chính cần kiểm tra:
- ScanPolicy đặt thành
0để hiện tất cả ổ đĩa - Có driver firmware thích hợp như HfsPlus (Lưu ý rằng không nên xài ApfsDriverLoader (Driver của OpenCore giúp nó đọc được ổ đĩa APFS) trong bản 0.5.8 trở lên, nó đã được tích hợp vào OpenCore)
- Đặt UnblockFsConnect thành giá trị True trong config.plist -> UEFI -> Quirks. Cần thiết cho một số hệ thống HP.
- Đặt SATA Mode (Chế độ ổ cứng SATA):
AHCItrong BIOS - Cấu hình mục
UEFI -> APFSđể có thể tìm thấy các ổ đĩa APFS:- EnableJumpstart: YES
- HideVerbose: NO
- Nếu chạy các phiên bản cũ của High Sierra (ví dụ 10.13.5 hoặc cũ hơn), hãy đặt:
- MinDate:
-1 - MinVersion:
-1
- MinDate:
# Bị treo ở lỗi OCB: OcScanForBootEntries failure - Not Found (Thất bại khi quét các phân vùng khởi động - Không tìm thấy ổ đĩa nào.)
Lỗi này do OpenCore không thể tìm thấy bất kỳ ổ đĩa nào với cài đặt ScanPolicy hiện tại, cài đặt giá trị là 0 sẽ cho phép hiển thị tất cả các tùy chọn khởi động
Misc -> Security -> ScanPolicy -> 0
# Bị treo ở lỗi OCB: failed to match a default boot option (Không tìm thấy ổ đĩa khởi động mặc định đã được thiết lập trước đó)
Cách sửa giống lỗi OCB: OcScanForBootEntries failure - Not Found, ở trên. OpenCore không tìm thấy ổ đĩa nào, đặt giá trị là 0 sẽ cho phép hiển thị tất cả các tùy chọn khởi động.
Misc -> Security -> ScanPolicy -> 0
# Bị treo ở lỗi OCB: System has no boot entries (Hệ thống không tìm thấy mục khởi động nào)
Cách sửa giống 2 lỗi trên:
Misc -> Security -> ScanPolicy -> 0
# Bị treo ở lỗi OCS: No schema for DSDT, KernelAndKextPatch, RtVariable, SMBIOS, SystemParameters... (Cấu trúc không hợp lệ - OpenCore không hiểu những cài đặt lạ trong config.plist)
Lỗi này là do bạn dùng config của Clover cho OpenCore hoặc dùng một công cụ cấu hình (configurator) như của Mackie vô tình tạo ra những thẻ hoặc dòng cài đặt lạ mà OpenCore không hiểu. Bạn cần làm lại từ đầu và tạo một config.plist mới hoặc tìm ra tất cả những thứ rác rưởi không liên quan OpenCore cần xóa khỏi config của bạn. Đây là lý do tại sao mình không hỗ trợ các công cụ configurator, tụi nó nổi tiếng là hay gây ra những vấn đề này.
- Lưu ý: Các lỗi tương tự cũng sẽ xảy ra nếu bạn dùng config lỗi thời với các phiên bản OpenCore mới hơn. Vui lòng cập nhật config.plist cũ cho phù hợp với config.plist mới của OpenCore bản mới.
# Bị treo ở lỗi OC: Driver XXX.efi at 0 cannot be found (Không tìm thấy driver được đề cập trong cấu hình)
Lỗi này là do có một mục trong config.plist của bạn nhưng file đó lại không có trong thư mục EFI. Để giải quyết:
- Đảm bảo thư mục EFI/OC/Drivers khớp với config.plist -> UEFI -> Drivers
- Nếu không khớp, hãy chạy Cmd/Ctrl+R (OC Snapshot) trong ProperTree để cập nhật lại config.plist
Lưu ý rằng tên file có phân biệt chữ hoa chữ thường.
# Nhận thông báo "Failed to parse real field of type 1" (Lỗi đọc dữ liệu kiểu số thực)
Lỗi này là do một giá trị được đặt là real (số thực) trong khi lẽ ra không phải vậy (lỗi cú pháp), thường là do Xcode vô tình chuyển đổi HaltLevel:
<key>HaltLevel</key>
<real>2147483648</real>
Để khắc phục, đổi real (số thực) thành (integer):
<key>HaltLevel</key>
<integer>2147483648</integer>
# Không thể chọn bất cứ thứ gì trong menu picker
Bình tĩnh bạn nha. Coi chừng nó không phải bị treo đâu. Bị tình trạng này là do 2 lý do sau:
Driver bàn phím không tương thích:
- Bạn hãy tắt
PollAppleHotKeysvà bậtKeySupport, sau đó xóa OpenUsbKbDxe (opens new window) khỏi config.plist -> UEFI -> Drivers - Nếu cách trên không được, làm ngược lại: tắt
KeySupport, sau đó thêm OpenUsbKbDxe (opens new window) vào trong config.plist -> UEFI -> Drivers
- Bạn hãy tắt
Thiếu driver bàn phím PS2 (Bỏ qua nếu xài bàn phím USB):
- Mặc dù hầu hết firmware sẽ bao gồm nó theo mặc định, nhưng một số laptop và PC cũ có thể cần Ps2KeyboardDxe.efi (opens new window) để hoạt động chính xác. Nhớ thêm cái này vào config.plist của bạn nữa.
# SSDT không được thêm vào
Với OpenCore, có một số kiểm tra bảo mật bổ sung được thêm vào xung quanh các file ACPI, cụ thể là tiêu đề độ dài bảng (table length header) phải bằng kích thước file. Đây thực ra là lỗi của iASL khi bạn biên dịch file. Ví dụ về cách tìm nó:
* Original Table Header:
* Signature "SSDT"
* Length 0x0000015D (349)
* Revision 0x02
* Checksum 0xCF
* OEM ID "ACDT"
* OEM Table ID "SsdtEC"
* OEM Revision 0x00001000 (4096)
* Compiler ID "INTL"
* Compiler Version 0x20190509 (538510601)
Giá trị Length và checksum là thứ chúng ta quan tâm, vì vậy nếu SSDT của chúng ta thực sự là 347 byte thì chúng ta cần đổi Length thành 0x0000015B (347)(015B là một mã HEX - THẬP LỤC PHÂN)
Cách tốt nhất để sửa lỗi này là tải bản iASL mới nhất hoặc bản MaciASL (opens new window) từ Acidanthera và làm lại SSDT khác.
- Lưu ý: MaciASL do Rehabman phân phối dễ làm hư ACPI, bạn tránh xài nó vì họ không còn duy trì kho lưu trữ (cập nhật mới) nữa.
# Chạy OpenCore lên máy tính tự khởi động lại vào BIOS
- Cấu trúc thư mục EFI không chính xác, đảm bảo tất cả các file OC của bạn nằm trong thư mục EFI nằm trên phân vùng ESP (EFI system partition).
::: Ví dụ về cấu trúc thư mục

:::
# Lỗi OCABC: Incompatible OpenRuntime r4, require r10 (Phiên bản OpenRuntime không tương tích với OpenCore)
Tệp OpenRuntime.efi không tương tích (cũ hơn so với phiên bản OpenCore), hãy đảm bảo BOOTx64.efi, OpenCore.efi và OpenRuntime tất cả đều từ cùng một bản dựng chính xác. Bất cứ thứ gì không khớp sẽ làm hư quá trình khởi động.
- Lưu ý: FwRuntimeServices đã được đổi tên thành OpenRuntime từ bản 0.5.7 trở đi.
# Lỗi Failed to open OpenCore image - Access Denied (Không thể mở tệp tin OpenCore - Quyền truy cập bị từ chối)
Trên firmware của những dòng máy Microsoft Surface mới, chạy OpenCore giờ đây sẽ dẫn đến lỗi vi phạm bảo mật ngay cả khi tính năng Secure Boot (Khởi động An toàn) đã bị tắt. Để giải quyết lỗi này, bạn mở UEFI -> Quirks -> DisableSecurityPolicy trong config.plist của bạn. Đọc thêm tại đây: Failed to open OpenCore image - Access Denied #1446 (opens new window)
# Lỗi OC: Failed to find SB model disable halting on critical error (Không tìm thấy mẫu máy để thiết lập Secure Boot; Tạm dừng hệ thống do lỗi nghiêm trọng)
Đây là lỗi đánh máy trong config, đảm bảo rằng trong config.plist Misc -> Security -> SecureBootModel được đặt là Disabled (vô hiệu hóa)
# Khởi động trên máy cũ (Legacy) bị treo tại lỗi BOOT FAIL! (Khởi động thất bại!)
Lỗi này có nghĩa là file EFI/OC/OpenCore.efi không thể tìm thấy trên bất kỳ phân vùng nào. Kiểm tra kỹ lại xem cấu trúc thư mục EFI có đúng không.
Ví dụ về cấu trúc thư mục
