# FreeBSD ISO/Image 介紹


## 基礎知識

* `.iso`：最早專為光碟（CD/DVD）設計的標準格式（ISO 9660），適合燒錄成實體光碟、掛載於虛擬機（VMware, VirtualBox, Proxmox）的虛擬光碟機
* `.img`：這是磁碟的「位元組對位元組（Byte-by-byte）」複製，包含分割表（Partition Table）和開機引導程式（Bootloader），本質上就是一顆硬碟的縮影，通常使用 dd 指令或 Etcher 燒錄
* `.qcow2`：QEMU / KVM (Proxmox) 常用
* `.vhd`：Microsoft Hyper-V / Azure 常用
* `.vmdk`：VMware 專用
* .`raw`：無格式原始檔，通用於各種雲端平台（如 AWS, GCP）

## 實際案例

我們以 FreeBSD 15.0 stable 為例介紹。

![alt text](image.png)

主要有兩個連結，<https://download.freebsd.org/releases/> and <https://download.freebsd.org/snapshots/> 兩個，上面是前者，這兩個連結主要有以下資料夾：

* CI-IMAGES/ (Continuous Integration Images)：這是由持續整合系統自動生成的映像檔。通常是給開發者測試最新的程式碼變更用的，穩定性最低，一般使用者通常不需要點進去
* ISO-IMAGES/：ISO 檔案
* OCI-IMAGES/ (Open Container Initiative Images)：專門 for 容器相關的檔案
* VM-IMAGES/ (Virtual Machine Images)：這裡是預先製作好的虛擬機磁碟映像檔（如 .vhd、.vmdk、.qcow2、.raw）。下載後不需經過安裝過程，直接導入虛擬機軟體後開機即可進入系統

然後還有依照架構分的資料夾，裡面是 src, lib32, base ... 等直接壓縮的 txz 檔案。

{{< admonition type=info >}}
FreeBSD 早期使用 gzip (.tgz)，後來也用過 bzip2 (.tbz)，但現在核心組件（Base System）與許多映像檔預設使用 xz。選擇它的原因主要有以下幾點：

* XZ 的壓縮雖然很慢且吃記憶體，但「解壓縮」卻相對快速且節省資源
* XZ 內建了 CRC-64 檢驗機制。在安裝 FreeBSD 時，如果解壓縮過程中發現檔案毀損，系統能立刻偵測到，這對於作業系統的安裝媒體來說至關重要
* XZ (LZMA2) 的壓縮效果通常遠好於 gzip
{{< /admonition >}}

### AMD64

在 ISO 資料夾底下，可以看到 amd64 相關的 iso 主要是。

![alt text](image-1.png)

1. bootonly: 只包含核心安裝程式，不含任何軟體包
2. disc1: 包含最常用的核心軟體包（Base system + Kernel），標準安裝，不一定要連網也能裝完基礎系統
3. dvd1: 體積最大，包含大量的預編譯軟體包（Packages），如 X11 或常用工具
4. memstick.img: 最適合直接放入 USB，可以直接 dd 進去
5. mini-memstick.img: 類似 USB 的 bootonly

![alt text](image-2.png)

### ARM64

![alt text](image-3.png)

比較特別他有一些是專門為了特定裝置的檔案，像是：

* RPI.img.xz: 這是你最需要的檔案。支援 Raspberry Pi 3、4、400 以及 5（視版本支援度而定）
* PINE64 / PINEBOOK: 給 Pine64 社群出的單板電腦或筆電
* ROCK64 / ROCKPRO64: 給 Pine64 生產的 Rockchip 系列開發板

在 x86 (PC) 的世界，我們被寵壞了，因為有 BIOS 或 UEFI 這層強大的硬體抽象層，讓作業系統不需要知道硬碟接在哪個暫存器地址。但在 ARM 的嵌入式世界中，情況完全不同：

* Broadcom (RPI4)：它的開機流程非常奇葩，是由 GPU 先啟動，讀取 SD 卡上的韌體後，才把 ARM CPU 叫醒
* Rockchip (Rock64)：它遵循比較傳統的流程，由晶片內的 BootROM 去找啟動媒介上的 U-Boot

AMD64 之所以可以用 ISO，是因為他有 BIOS/UEFI，無論你是哪一家的主機板，UEFI 都保證它能讀懂特定的檔案系統（通常是 FAT32），並且知道去哪裡找開機程式（例如 /EFI/BOOT/BOOTX64.EFI），作業系統不需要知道硬碟控制器長什麼樣子，它只需要跟 UEFI 說「請幫我載入那個檔案」，UEFI 就會去處理底下的硬體細節。

RPI4 的啟動邏輯是固化在晶片裡的。它沒有像 UEFI 那麼強大的翻譯層。它只認一條路：「去 SD 卡的第一個分區（必須是 FAT 格式）找韌體檔案，如果你給它一個標準的 .iso，RPI4 的硬體根本看不懂 ISO 9660 這種光碟格式。

