前面我寫了如何通過宿主RedHat系統通過精簡和調用以及修改的方式,打造一個完全屬於自己的微型LInux!見http://www.linuxidc.com/Linux/2011-08/40389.htm
但是,很多人懶啊~~,所以我又寫了寫腳本,通過分步實現的方式。達到用一個腳本,完全的按照用戶想要達到的目的安裝一個屬於自己的微型Linux。
那麼下面我們來看如何實現:
實現過程分析:
1.分區,按照用戶所選的盤,將其格式化,分區
2.掛載,按照用戶設定的的分區好的盤分別掛載在我們宿主機的一個目錄上。方便對微型linux進行編輯。
3.對微型Linux進行寫入各項配置信息
4.將微型Linux中我們需要用到的Bash等命令放進去
5.放入內核,和啟動必須加載的配置文件
6.對用戶的硬盤安裝引導程序。
好的~過程已經分析OK了,下面我們動手開始寫吧!!!
第一步:實現自動分區!!
我們將問題分開來看,於是成了這樣:
寫一個腳本,實現將一個硬盤中原有分區信息全部刪除,並重新將其分為三個區:
1、提示用戶指定要操作的磁盤;如果此硬盤中有分區,顯示分區信息,並判斷此中分區是否仍然處於掛載狀態;
如果是,則顯示分區和對應的掛載點;否則,則說明分區沒有掛載;
2、提示用戶接下來操作會破壞硬盤上的所有數據,並詢問用戶是否繼續進行;形如:Continue(y/N)?
如果用戶選擇繼續,則抹除此硬盤上的所有分區信息(如果是仍處理掛載狀態的分區,則需要先卸載);否則退出;
3、將此硬盤分為三個主分區:
第一個主分區,50M,ext3文件系統
第二個主分區,512M,ext3文件系統
第三個主分區,256M,swap文件系統OK,開始實現:
- #!/bin/bash
- #: Title: All_Mini_Linux.sh
- #: Synopsis:
- #: DateTime: 2011-08-04 00:36:35
- #: Version: 0.1
- #: Author: weiyan
- #: Options:
- #
- read -p "The target disk: " DSK # 提示用戶選擇即將分區的硬盤
- if fdisk -l $DSK | grep "^/dev" &> /dev/null ; then #判斷硬盤的分區狀態。
- fdisk -l $DSK | grep "^/dev"
- PARTS=`fdisk -l $DSK | grep "^/dev" | awk '{print $1}'`
- for I in $PARTS; do # 使用循環的方式,將硬盤上每一個分區的狀態和是否掛載,掛載在哪告訴用戶。
- if mount | grep "$I" &> /dev/null; then
- mount | grep "$I"
- else
- echo "$I is not mounted."
- fi
- done
- fi
- SPART() { # 制作名為SPART的函數,這個函數的功能就是提示用戶准備分區,當允許分區則開始分區!
- read -p "Warning !!!!! Next you do it will wipe your disk !!!! Continue(y/N)?" CHOICE
- case $CHOICE in
- y|Y)
- for I in $PARTS; do
- if mount | grep "$I" &> /dev/null; then
- fuser -km $I
- umount $I
- fi
- done
- dd if=/dev/zero of=$DSK bs=512 count=1 &> /dev/null # 將用戶所選的硬盤的MBR直接擦除。讓其成為空盤。
- echo '
- n
- p
- 1
- +50M
- n
- p
- 2
- +512M
- n
- p
- 3
- +256M
- t
- 3
- 82
- w' | fdisk $DSK &> /dev/null # 將分區的信息傳遞給 fdisk,開始分區。
- partprobe $DSK
- sleep 1 # 分區之後要用sleep命令讓系統“沉睡”1秒,這樣可以讓分區的信息真正的同步進硬盤,而不至於格式化出錯。
- mke2fs -j ${DSK}1 &> /dev/null # 分別格式化每一個分區並且格式化虛擬分區。
- mke2fs -j ${DSK}2 &> /dev/null
- mkswap ${DSK}3 &> /dev/null
- return 0
- ;;
- n|N)
- return 1
- ;;
- *)
- return 2
- ;;
- esac
- }
- SPART # 執行這個 SPART 函數。
- [ $? -eq 0 ] && echo "The Disk wipe success !!!!!!!" || echo "Failure" # 判斷函數的返回值,如果是0,則提示分區成功。
這樣一來,我們就有了一個完整的分好了區,並且格式化了的硬盤了。接下來呢?
將硬盤掛載!