(つ`ω´)つ says to Ubuntu 台灣社群
讓 Linux 以極簡裸機方式啟動 (★ 101 分) 這篇文章示範如何讓 Linux 核心只承載一個單一行程,而不是啟動完整作業系統,目標是在不到一秒內從開機走到應用程式。作者先以 C 寫出最小的 init 行程:列印訊息後呼叫 reboot(RB_POWER_OFF) 關機,避免 init 結束後造成 kernel panic(核心恐慌)。文章也整理現代 Linux 的 initrd/initramfs(啟動時解開到 RAM 的初始根檔案系統)流程:開機載入器交給核心與 initrd,核心解包後尋找 /init 或 rdinit 指定的程式;若找不到,才改掛載 root= 指定的根分割區與 devtmpfs,最後若 init 不存在或退出就會 panic。 實作上,作者把 C 程式靜態編譯,讓所有必要函式庫都包含在可執行檔中,再用 cpio 與 gzip 做出只含一個 /init 的 initrd。接著使用 QEMU(常用機器模擬器)與 KVM(Kernel-based Virtual Machine,Linux 核心虛擬化機制)測試,直接指定 vmlinuz 核心與自製 initrd 開機,並把主控台導到 ttyS0 方便觀察輸出。範例紀錄顯示核心約在 0.8 秒左右執行 /init,程式印出訊息後立即關機;後續範例則在 init 中掛載 devtmpfs 到 /dev,讓 QEMU 以 -hda 提供的磁碟映像出現在 /dev/sda,並成功讀取磁碟開頭位元組,證明最小系統仍可做基本裝置存取。 文章也把同一套做法搬到實體硬體:作者用 USB 隨身碟建立 EFI 分割區與 Linux 分割區,格式化後透過 ukify 製作 unified kernel image(把 EFI 載入 stub、Linux 核心與 initrd 合成單一開機映像),放到 /EFI/BOOT/BOOTX64.EFI 讓筆電以 UEFI(Unified Extensible Firmware Interface,統一可延伸韌體介面)開機。最後作者嘗試自製更小的 Linux 核心,從 make tinyconfig 開始,再以 menuconfig 打開必要選項,例如 initramfs gzip 支援、ELF(Executable and Linkable Format,可執行與可連結格式)二進位支援、devtmpfs、TTY、序列埠、常見檔案系統與 UEFI stub。這樣的核心可從一般發行版約 16 MB 縮到 1 至 2 MB,可能縮短啟動時間並降低攻擊面,但代價是缺少功能時往往要等程式真的用到才會發現。 Hacker News 討論中,不少人認為這是很好的底層學習與實驗材料,但也質疑單一行程系統的實用性。支持者指出,嵌入式裝置、SoC(System on a Chip,系統單晶片)、一次只做特定工作的設備、簡化版防火牆或 microVM(微型虛擬機器)隔離環境,都可能受益於快速啟動與較小攻擊面;反對者則提醒,一旦要做真正有用的事,例如網路、磁碟或感測器存取,就得掃描 PCIe(Peripheral Component Interconnect Express,高速週邊元件互連)、初始化控制器、讀分割表與掛載檔案系統,整體延遲未必還能維持在一秒內。此外,普通 PC 從按下電源到交給 Linux 前,UEFI 或 BIOS(Basic Input/Output System,基本輸入輸出系統)本身就可能花上數秒,因此文章展示的是核心與 init 階段極快,不等於整台機器必然一秒可用。 討論也補充了多種延伸方向:可加入 BusyBox(整合常見 Unix 工具的輕量工具集)形成極小 userspace(使用者空間),用 Linux 原始碼樹中的 gen_init_cpio 簡化 initramfs 製作,或採用 Buildroot、suckless 的 sinit、Go 生態的 gokrazy 等工具。也有人建議從 make allnoconfig 或 make localyesconfig 開始調整核心,可能比 tinyconfig 更容易保留目前硬體需要的功能。另一方面,部分留言把這類設計與 unikernel(把應用程式與作業系統能力打包成單一映像)相提並論,提醒正式環境若沒有 strace、iotop 等除錯與觀察工具,維運會變得困難。另有讀者修正文章對 SSD(Solid-State Drive,固態硬碟)年代的回憶,認為真正讓一般人感受到大幅加速的是 2010 年代初期而非 2000 年代初期;但整體而言,討論多肯定這篇文章作為理解 Linux 開機、initramfs、裝置檔案與自製核心的清楚實作導覽。 👥 48 則討論、評論 💬 https://news.ycombinator.com/item?id=48543269