1.启动盘的制作&构建一个小系统
准备:
制作系统:ubuntu 8.10(我的是8.10,各个版本应该都可以)
可启动的U盘一个
前言:
本节利用ubuntu现成的文件创建一个可U盘启动的linux小系统
分区:
#sudo fdisk /dev/sdb /*在创建分区前,可以使用d命令删除所有分区:d回车1,d回车2,d回车3,d回车4,*/
Command (m for help):n /*n 新建分区*/
Command action
e extended
p partition (1-4)
p /*p 创建主分区*/
Partition Number (1-4):1 /*1 创建第一个主分区*/
First cylinder ......: /*回车 采用默认值*/
Using default value 1
Last cylinder .....: /*回车 整个U盘分为一个区*/
using default value xxx
Command (m for help):a /*a 激活分区*/
Partition Number (1-4):1 /*1 激活第一分区*/
Command (m for help):p /*p 查看一下操作后分区信息*/
......
Command (m for help):w /*分区并退出*/
格式化:
sudo mkfs.ext3 /dev/sdb1 /*格式化为ext3分区*/
sudo mount -t ext3 /dev/sdb1 /mnt /*加载分区到/mnt*/
准备grub启动文件:
sudo mkdir -p /mnt/boot/grub/
sudo cp /usr/lib/grub/i386-pc/* /mnt/boot/grub/
/*有用的文件是stage1 e2fs_stage1_5 stage2三个文件*/
sudo cp /boot/grub/menu.lst /mnt/boot/grub/ /*当模板,后续要编辑一下*/
准备内核:
sudo mkdir /boot/myboot/
sudo cp /vmlinuz /initrd.img /mnt/boot/myboot/
修改启动菜单:
sudo vi /mnt/boot/grub/menu.lst
#file start
default 0
timeout 10
title myboot
kernel /boot/myboot/vmlinuz
initrd /boot/myboot/initrd.img
#end file
grub安装:
sudo umount /mnt
sudo grub
grub>root (hd1,0) /*grub硬盘设备总是hd的,下标为0开始,ubuntu系统为hd0,U盘为hd1*/
grub>setup (hd1)
grub>quit
#################################################
以下是网络上找到的更详细的说明,供参考
grub> root (hd0,1) (A) root (hd0,1) Filesystem type is ext2fs, partition type 0x83 grub> setup (hd0) (B) setup (hd0) Checking if "/boot/grub/stage1" exists... yes Checking if "/boot/grub/stage2" exists... yes Checking if "/boot/grub/e2fs_stage1_5" exists... yes Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 15 sectors are embedded. (C) succeeded Running "install /boot/grub/stage1 (hd0) (hd0)1+15 p (D) (hd0,1)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded Done. (E) grub> quit |
A:设置装有stage1,stage1.5.stage2的硬盘分区
B:安装GRUB至MBR
C:'embed'命令是嵌入stage1.5到硬盘MBR后的扇区上,这儿把stage1.5写入MBR后的15个扇区.扇区数目
根据stage1.5的大小而不同
D:安装stage1到MBR上
E:'p'告知GRUB,stage2和menu.lst的位置
#####################################################
好了这样一个U盘就可以启动一个linux 系统了。
最后一个地方会停一点时间,然后进入(initramfs)系统了。
2. 启动基本流程说明
系统启动,最开始启动了grub的,grub通过菜单启动了vmlinuz(内核),然后内核解压initrd.img
到内存,并形成一个根文件系统,并运行根目录下的init程序。
在ubuntu中init是一个脚本,它会启动一套很复杂的脚本,我没有花太多时间理解它,其中加载
所有必要的驱动,是很重要的功能,因此initrd.img中包含了很多驱动模块,系统进行选择性的加载。
还有系统初始化完毕后,它会卸载掉ram根文件系统,从内核root参数中,读取根设备,建立基于
硬盘上,也就是我们平时登录系统后看到的系统。root 参数在menu.lst中描述,示例如下:
kernel /boot/myboot/vmlinuz root=/dev/sdb1 rw
你可以在grub菜单的时候按“e”建重新编辑kernel这一样,然后在按“b”,引导系统,会看见一个出错
信息,系统还是进入了initramfs模式。因为u盘的根目录下只有grub,没有其他任何数据,即root=
指定的分区中没有init文件无法启动新的根文件系统。