最近剛好一直在做linux核心的裁剪,今天嘗試著做了一個u盤啟動盤,沒有用原來系統的檔案系統,而是直接利用initrd.img裡面的檔案系統最後獲得一個bash而無需登陸和掛載硬碟什麼的,相當於整個系統運行在記憶體裡面,感覺還是蠻好玩的。
前期準備——u盤一個,最小化的Linux核心和initrd.img我的核心是3.2.18版本的。核心的大小是2.9M,img的大小是4.1M
1、修改img裡面的內容
- 解壓img zcat /boot/initrd3-2.18.img | cpio -i
- 把/bin/bash拷貝到bin/
- 修改init全部刪掉後改成#/bin/bash /bin/bash
- 壓縮成img find . | cpio -cov > /boot/inirtd.img
2、把u盤設為啟動盤 /dev/sdb1
然後把要啟動的那個分區加上boot標記,最後要記得把分區表的資訊寫進去,在編輯的時候敲入w
3、把隨身碟mount到/mnt
mount -t msdos /dev/sdb2 /mnt
4、製作檔案系統
- 在u盤中建立一個/boot/grub目錄
- 把/boot/grub目錄下面的stage1和stage2拷貝到/boot目錄下面
- 把核心和img都拷貝到/boot目錄下面
5、在u盤上安裝grub
- 運行grub
- 輸入root (hd1,0)
- 輸入 setup(hd1)(當然這裡的hd1和具體的系統內容是有關係的,我是在CentOS6.2下面)
- 安裝成功後u盤啟動盤就做好了
6、u盤啟動
- 選擇從u盤啟動
- 設好root目錄 root (hd0,0)
- 載入核心 kernel /boot/vmlinuz
- 載入initrd initrd /boot/initrd.img
- 啟動 boot
- 然後就可以進入linux的bash裡面了
這個最小啟動系統還是蠻好玩的,用於拯救我們的windows系統估計也是可以的,所以linux的世界真的很神奇,最終系統只有不超過20M的東西,所謂技術宅改變世界大概就是這個道理吧。