快速置換 kernel / rootfs

支援 2G RAM 這篇筆記中,說明了目前 Epc 要支援 2G RAM,必需更改 kernel。當時是以準備 Linux 開機光碟為前提。後來我又發現了一個更快的方法,連開機光碟都省了。


在進入系統之前,按 F9,可以進入 grub 的選單,大概有三項:


Normal Boot
Perform Disk Scan
Restore Factory Settings


選取 Normal Boot,按 "e" 編輯它的設定,可以看到有 root kernel initrd 這三個項目。kernel 指定了 kernel image 的位置以及給它的參數,最後面有一行 root=/dev/sda1,是用來餵給 initrd 所指定的 rootfs。


我們選取 kernel 這一行,一樣按 "e" 編輯,將 root=/dev/sda1 刪除。按 Enter 確定,再按 "b" 開機。由於缺少這個設定,rootfs 在開機做 mount 動作時會失敗,停在 busybox 上。


接著我們就可以利用這個 busybox,將修改好的 kernel or rootfs copy 到 /boot 中供我們使用。那麼,要從哪兒 copy 回 /boot 呢?


最簡單的方式是,先將 Epc 正常開機後,插入 usb drive,將檔案 copy 到根目錄下(因為 unionfs 的關係,檔案其實是放到 /dev/sda2)。接著用上面的方法開機,將 /dev/sda1 與 /dev/sda2 都 mount 進來,再將 sda2 的檔案 copy 進 sda1 就可以了。命令大概如下:


mount /dev/sda1 /mnt-system
mount /dev/sda2 /mnt-user
cp /mnt-user/myinitramfs.img /mnt-system/boot


改完後重開機,回到 grub 選單,將 initrd 選項指定的檔案換成這個就完成了!


不過有點可惜的是,Epc 裡這個 busybox 有點殘廢,不支援 sync。所以可能會發生重開機後,檔案沒 copy 到 sda1 的窘境。解決方法是再 copy 一個支援較完整的 busybox 進 sda2。這樣便可在 mount 進來後使用它。因此,上面三行命令之外,還可以再加一行:


/mnt-user/busybox sync


來確保檔案有被 flush 回 sda1。


留言

熱門文章