# Hướng dẫn Dual Boot

## Tạo usb trên mac

### Dùng command terminal

{% hint style="info" %}
Cách này chỉ có thể tạo USB boot cho winpe
{% endhint %}

B1: Mở `Disk Utilitiy`

B2: Chọn `View --> Show all Devices`

<figure><img src="/files/mjpwL6TdP7Tv9cfITvC9" alt=""><figcaption></figcaption></figure>

B3: Chọn vào tên USB của các bạn rồi chọn `Erase`&#x20;

B4: Các bạn Format USB với tên `WINDOWS10`&#x20;

<figure><img src="/files/VR7ufe3PKUSHaE3rVRC5" alt=""><figcaption></figcaption></figure>

B5: Tiếp các bạn tải file ISO Wi‌nPE Khuyến khích dùng bộ [nhvboot](https://nhvboot.com/)

B6: Các bạn Mount file ISO vừa tải về.&#x20;

B7: Gọi Terminal lên và gõ lệnh

```
cp -rp kéo ổ iso vừa mount vào /* /Volumes/WINDOWS10 

Vd: cp -rp /Volumes/CCCOMA_X64FRE_EN-GB_DV9/* /Volumes/WINDOWS10
```

B8: Boot vào WinPE và cài thôi&#x20;

> Các bạn có thể dùng CMD gõ lệnh `setup.exe` hoặc `winNTsetup` hoặc `wintohdd`, v.v

### Dùng unetbootin

{% hint style="info" %}
Cách này có xác xuất thành công thấp
{% endhint %}

B1: Tải unetbootin [tại đây](https://unetbootin.github.io/)

B2: Chọn xuống `diskimage` sau đó tiến hành chọn file iso và usb

![](https://i.imgur.com/xWSYYNP.png)

B3: Nhấn ok và boot thôi

### WinDiskWriter&#x20;

{% hint style="info" %}
Cách này có xác xuất thành công cao và khá là tiện
{% endhint %}

B1: Tải [WinDiskWriter](https://github.com/TechUnRestricted/WinDiskWriter/releases) về

B2: Giải nén ra file `WinDiskWriter.zip` ra

B3: Kéo `WinDiskWriter.app` vào `Application`

B4: Chạy `WinDiskWriter.app` trong `Application` lên

<figure><img src="/files/tcvs5Ecw2rjUERLZ1y2f" alt=""><figcaption></figcaption></figure>

B5: Mục Windows Image chọn file ios bạn cần flash&#x20;

B6: Mục Target Device chọn tên usb bạn cần flash

B7: Bắt đầu Flash

B8: Reboot và tận hưởng thôi

{% hint style="danger" %}
Lưu ý: các bạn vẫn có thể dùng cả 3 cách để tạo bộ cài linux thay vì windows
{% endhint %}

## OpenCore

{% hint style="info" %}
OpenCore không chuyên về Dual Boot&#x20;

> Nhưng các bạn vẫn có thể thực hiện Dual Boot với OpenCore
> {% endhint %}

### Chỉnh sửa config

B1: mở `config` bằng propertree

B2: Tiến hành chỉnh sửa những phần sau

* Bật `CustomSMBIOSGuid`. &#x20;
* `UpdateSMBIOSMode` set là `Custom`.

<details>

<summary>Mục đích</summary>

Chống inject thông tin SMBIOS sang các OS khác (ví dụ MacBookPro15,1; iMac20,1;…). Nếu muốn kiểm tra máy có bị inject hay không thì chỉ cần chạy dxdiag ở Run trên Windows là được.

</details>

<details>

<summary>Lưu ý chung</summary>

Hãy nhớ rằng opencore inject smbios sang những os khác là để dùng bootcamp. Nên khi bạn chỉnh như phần này sẽ không dùng được bootcamp

</details>

<details>

<summary>Lưu ý cho windows</summary>

Đối với 1 số model thì opencore không thể win được phân vùng windows khi này các bạn sẽ add config theo sau

`Misc -> BlessOverride -> \EFI\Microsoft\Boot\bootmgfw.efi`

</details>

### Chỉnh sửa ACPI

{% hint style="info" %}
Đối với phần này cũng như phần trên để dùng bootcamp nên opencore đã cho acpi injet qua các os khác.&#x20;

> Để ngăn chạn việc này đòi hiẻu bạn phải có kỹ năng chỉnh sửa SSDT, DSDT xem chi tiết [tại đây](https://advance.heavietnam.com/acpi-advance/patch-dsdt-phan-3)
> {% endhint %}

B1: Mở file SSDT hoặc DSDT cần sửa bằng [maciasl](https://bitbucket.org/RehabMan/os-x-maciasl-patchmatic/downloads/)

B2: Các bạn sẽ tiến hành add 1 dòng  `If (_OSI ("Darwin"))`

```
//Add dưới method cần patch
            If (_OSI ("Darwin"))
            {
               Giá trị cần patch 
            }
            Else
            {
                Giá trị ban đầu
            }
```

{% hint style="success" %}
Giá trị ban đầu: tức là giá trị trước khi patch. Vậy lấy nó ở đâu, Các bạn sẽ lấy nó ở DSDT gốc máy

* Dump DSDT theo hướng dẫn [tại đây](https://advance.heavietnam.com/acpi-advance/patch-dsdt-phan-1)
  {% endhint %}

{% hint style="success" %}
Vậy ý nghĩa của nó là gì?

* Các bạn càn biết là win cũng cần DSDT để chạy. Nhưng DSDT của mac và win khác nhau.
* Do đó các bạn cần sửa giá trị của DSDT ở win cho phù hợp đẻ chạy ở mac
* Nhưng do opencore cho phép inject ACPI sang os khác để chạy bootcamp do đó giá trị ban đầu của DSDT sẽ bị ghi đè bởi DSDT đã sửa đổi dẫn đến lỗi win
* Do đó khi bạn add dòng if này có nghĩa là
  * `If (_OSI ("Darwin"))`: tức là macos&#x20;
    * Nhân của macos là `Darwin`
      * Thì sẽ chạy giá trị đã sửa
  * `Else`  Tức là những os khác
    * Thì sẽ chạy những gì trị ban đầu
      {% endhint %}

```
// Ví dụ:
        Method (_STA, 0, NotSerialized)  // _STA: Status
        {
            If (_OSI ("Darwin"))
            {
                Return (0x0F)
            }
            Else
            {
                Return (Zero)
            }
       }
```

B3: Chuyển về file `.aml` để sử dụng

{% hint style="warning" %}
Đối với các bạn chỉ dùng các SSDT từ dortania thì các bạn ko cần phải làm bước này vì hầu hết họ đã thêm `if osi` vào SSDT rồi nhé

> Nhớ là tất cả SSDT đều phải tải từ dortania
>
> > Hay nói cách khác tất cả SSDT đều phải có `if osi` thì mới ko gây lỗi khi dualboot
> > {% endhint %}

{% hint style="danger" %}
Update: đã có một bản opencore no acpi giúp acpi ko bị inject sang os khác.&#x20;

> Giúp cho các bạn ko có kiến thức về SSDT vẫn sử dụng được
>
> > Build opencore mod theo hướng dẫn [tại đây](https://advance.heavietnam.com)
> > {% endhint %}

### Boot Linux from OpenCore picker

B1: Tải driver `OpenLinuxBoot.efi`  và `ext4_x64.efi`

* Driver phải đúng với phiên bản OpenCore của bạn&#x20;
* Driver này sẽ nằm trong `OpenCorePkg -> X64 -> EFI -> OC -> Drivers`
  * Tải `OpenCorePkg` [tại đây](https://github.com/acidanthera/OpenCorePkg/releases)

B2: Enable các quirk sau trong config

* `RequestBootVarRouting` : `True`
* `LauncherOption` :  `Full`&#x20;
  * Có thể đặt là `Short` tuỳ vào thiết bị

B3: Snapshot và Save lại

{% hint style="info" %}
Cuối cùng reboot để tận hưởng
{% endhint %}

{% hint style="warning" %}
Chú ý

Nếu OpenCore Picker vẫn chỉ hiện mac và windows thì bạn hãy ấn phím space để hiển thị thêm linux

> Do bạn bật `HideAuxiliary` trong `Config.plist`
> {% endhint %}

### rEFInd

B1: Các bạn down refind [tại đây](https://sourceforge.net/projects/refind/)

B2: Vào folder `EFI --> Boot` Copy `Bootx64.efi` paste vào `EFI --> OC` và đổi tên lại là `BOOT-origx64.efi`

B3: Copy `refind_x64.efi` vào `EFI --> boot` và đổi tên lại là `Bootx64.efi`

B4: copy các mục `drivers, icons, tools, refind.conf-sample` paste vào `EFI --> Boot`

B5: Đổi tên `refind.conf-sample` thành `refind.conf`

B6: Xoá hết các arg trong `refind.conf` đi sau đó add các arg sau

```
timeout 10 //thời gian đếm ngược ở menu boot

resolution max //độ phân giải màn hình

use_nvram true //sử dụng rest nvram

scanfor manual,external //chỉ cho phép quét đối với manual và external
```

{% hint style="info" %}
Chi tiết các arg của refind xem [tại đây](https://www.rodsbooks.com/refind/configfile.html)
{% endhint %}

B7: Tạo thư mục `themes` tại `EFI --> Boot`

B8: Tải theme refind [tại đây](https://github.com/topics/refind-theme)

B9: Copy theme vào thư mục themes vừa tạo

B10: Copy các arg trong file `theme.conf` vào file `refind.conf`

B11: Tiến hành add các đường dẫn boot theo sau

```
menuentry "My macOS" {
    icon \EFI\refind\icons\os_mac.png
    loader  \EFI\OC\Opencore.efi
}

menuentry "Windows" {
    icon \EFI\Boot\themes\rEFInd-minimal\icons\os_win.png
    loader \EFI\Microsoft\Boot\bootmgfw.efi
}

menuentry "Ubuntu" {
    loader /EFI/ubuntu/grubx64.efi
    icon /EFI/refind/icons/os_linux.png
}

menuentry "Arch Linux" {
    icon     /EFI/refind/icons/os_arch.png
    volume   "Arch Linux"
    loader   /boot/vmlinuz-linux
    initrd   /boot/initramfs-linux.img
    options  "root=PARTUUID=5028fa50-0079-4c40-b240-abfaf28693ea rw add_efi_memmap"
    submenuentry "Boot using fallback initramfs" {
        initrd /boot/initramfs-linux-fallback.img
    }
    submenuentry "Boot to terminal" {
        add_options "systemd.unit=multi-user.target"
    }
}
```

![](https://i.imgur.com/V48dfEK.png)

> Như vậy là xong rồi

{% hint style="info" %}
Đối với các bạn lười. Có thể lấy bản refind mình đã build sẵn [tại đây](https://drive.heavietnam.com/d/s/zBXgou19dpIAGqoiruDx2sahc6i7Lb1m/kLAkSs-NFcZHyiPByaFGY8qNIc6QpC3q-PLVgPwWQfws)
{% endhint %}

### Sử dụng clover để boot OC

{% hint style="info" %}
Nghe có vẻ lạ nhưng đây hoàn toàn là điều khả thi. Bởi bạn thân clover là một bootloder rất mạnh nên nó hoàn toàn có thể boot OC
{% endhint %}

B1: Tải bản clover mình đã chỉnh sửa [tại đây](https://drive.heavietnam.com/d/s/zBXZyPc7wBXf2W7XVnrpIqaj3FlEek2u/PPgK3lNLAiRrxz2fxP873j3oyMqL5gWh-ZbjAi0CUggs)

B2: Tải `clover configurator`&#x20;

B3: Mở file config của clover bằng propertree&#x20;

B4: Tiến hành add `Entries` theo đường dẫn `/EFI/OC/Opencore.efi`

B5: Tiến hành boot thôi

## Clover

### Add boot entries

{% hint style="info" %}
Đối với clover như đã nói ở trên trình dual boot của clover đã rất mạnh.&#x20;

> Nên cứ như vậy thì boot thôi.
>
> > Tuy nhiên trường hợp các bạn muốn add thêm bootoption làm theo hướng dẫn tại đây
> > {% endhint %}

B1: Các bạn mở config bằng `Clover Configuration`.&#x20;

B2: Các bạn chuyển tới mục Gui.&#x20;

B3: Bấm vào dấu `+` ở mục `Custom Entries`.&#x20;

B4: Sau khi làm xong các bạn sẽ được như hình:

![](https://lh4.googleusercontent.com/RYp9C1SDmcMm4yQj4yjmrYlU-GNFn_npMZyjhv7RdPzhf_HDWPtQBQMryoUVpkT5D2NUmO8UQ_2odV1-rMU9IBQmxY95bl75wLjXVAz-PvjTTkB8-OSPNnh3Ct2FUyzN-trQa_HM=s0)

B5: Các bạn nhấn đúp và chọn `New Custom Entry`

&#x20;![](https://lh6.googleusercontent.com/s4dUG0sC-D-aHSuVtdvu_GZxRvASSYwUg0zOiD2A22Dj8OPle1uaCltKlJqZupfuXkh6BhYC3pDLQYJHAL5GfgA1RDSloM1NjHCF6dbwnOMqBt_-5MWYvFYRgPeUEWhCAjLOkA8J=s0)&#x20;

![](https://lh5.googleusercontent.com/CmZ1A4P6GG_0lvy2TiIttwbkY6oKS924oSUbwctk3PLrb029rr9YjAijw93VxhTiAOK8-U8fSf0QPHA028S5hLQH_61lvS0h5pQPvRQ1CtqEKCLj824E4-_u4HjUMGkfKWSnz1pg=s0)

B6: Add Boot Option các bạn chỉnh như sau

{% hint style="info" %}
&#x20;Nếu các bạn xoá mục Drivers thì ở đây các bạn phải add đường dẫn cho os mà các bạn muốn Dualboot
{% endhint %}

* `Volume`: Chọn partition chứa file boot cần add
* `Path`: chọn đến đường dẫn cần add
* `Title` / `Full Title`: tên tùy ý
* `Type`: `Other`.
* `Volume type`: `internal`.&#x20;

B7: Save lại.&#x20;

B8: Reboot và tận hưởng thôi.

### Hide boot entries

B1: Mở config bằng propertree&#x20;

B2: Tìm đến mục `Root -> GUI -> Hide`

<figure><img src="/files/YyqTRHD8E6hew4wfo9PA" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Nếu như trên các key có ký tự `?` thì hãy xoá nó đi&#x20;
{% endhint %}

B3: Hãy add vào mục này hai key như sau

```
<key>GUI</key>
   <dict>
       <key>Hide</key>
       <array>
           <string>Recovery</string>
           <string>Preboot</string>
       </array>
       <key>Scan</key>
       <true/>
       
   </dict>
```

<figure><img src="/files/3wpouQWmo7j6R0KclYkf" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Mặc định ở mục này đã có sẵn 2 key `0` và `1` với các giá trị khác

> Chỉ cần sửa hai giá trị này thành `Recovery` và `Preboot` là được
> {% endhint %}

B4: Save lại rổi reboot

<figure><img src="/files/LD1u4XJFc3uCGCcuRGor" alt=""><figcaption><p>Before</p></figcaption></figure>

<figure><img src="/files/m4VQ3cvV1535FCA1OciR" alt=""><figcaption><p>After</p></figcaption></figure>

{% hint style="info" %}
Nếu các bạn muốn hiện lại các entries đã ẩn chỉ việc ấn `F3` ở picker của clover là được
{% endhint %}

{% hint style="danger" %}
Chú ý: Một số máy khi dualboot giữa windows và MacOS sẽ bị lệch time&#x20;

> Nguyên nhân là do 2 controller thời gian giữa mac và win khác nhau nên bị xung đột.&#x20;
>
> > Để khắc phục thì các bạn làm như sau
> > {% endhint %}

<details>

<summary>Fix UTC time</summary>

B1: Vào hackintool tab `Utilities`  và nhấn vào mục `Generate Windows UTC Registry Files`

![](/files/d1j2XlXl4ITyNYNVNiVN)

B2: Vào Desktop bạn sẽ nhận được 2 file là&#x20;

* `WinUTCOff.reg`
* `WinUTCOn.reg`

B3: Copy file `WinUTCOn.reg` vào một nơi nào đó mà Windows có thể đọc được

B4: Vào Windows và chạy file `WinUTCOn.reg` lên

B5: Restart lại và boot vào Windows

Hãy đặc biết chú ý là các này sẽ phụ thuộc vào giờ bạn set bên mac nên ngay cả khi bạn thay đổi múi giờ ở win thì sau khi restart nó vẫn sẽ trở về với múi giờ bạn đã chỉnh bên MacOS

Nếu lần đầu chưa thành công thì đừng lo hãy reboot 1-2 lần và restart NVRAM nhé

</details>

{% hint style="info" %}
Source tham khảo:&#x20;

<https://www.tonymacx86.com/threads/guide-how-to-hide-unwanted-volumes-on-clover-boot-menu.246532/>&#x20;

<https://github.com/TechUnRestricted/WinDiskWriter?tab=readme-ov-file>

<https://dortania.github.io/OpenCore-Multiboot/oc/linux.html>
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://basic.heavietnam.com/multiboot/huong-dan-dual-boot.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
