一为什么需要Linux启动盘
有很多理由来说明这个问题首先它可用于启动Linux系统其次当系统发生错误需要进行系统恢复时 我们需要用到它还有如果你喜欢经常更新系统内核的话那么一张启动盘则是必不可少的
希望了解Linux系统组成及启动过程的朋友如果按照本文提供的方法做下去相信你做完启动盘之后你 对Linux又会有新的认识
二启动盘的类型
启动盘一般可分为如下两种一种是只含内核(kernel)的启动盘这种盘只含有系统内核并不包括根文 件系统(root file system)它在其内核中指明了根文件系统所在的位置在启动过程中根据该参数去安装根 文件系统也就是说这种类型的启动盘必须和硬盘上的根文件系统配合才能使用我们平常意义上的启动盘一 般指的就是这种类型有些资料上也把这种盘称之为boot盘
另外还有一种类型的启动盘除了包含内核以外还包含了文件系统这种类型的启动盘从某种意义上来说已 经是一个完整的操作系统由于有自己的根文件系统这种类型的启动盘可以在没有硬盘的机器上启动一个小的 Linux系统这种类型的盘有时也称作boot/root盘
三启动盘的制作
boot盘的制作
很多Linux发行套件已经提供了boot盘一般情况是在DOS下使用RAWRITE制作一张boot盘当然这种方法是 在安装Linux之前进行制作如果在安装了Linux之后希望再制作系统盘请按以下步骤进行
()以root的身份进行登录
()确定内核的位置一般情况下内核位于/vmlinuz中当然不同的发行套件中该位置可能会有区别可以 查看相关的文档
()用rdev命令设置根设备为Linux系统的根文件系统首先查看内核中对根文件系统的配置执行如下命令
#rdev /vmlinuz
如果你的Linux根文件系统位于/dev/hda那么应该有如下的信息
Root Device /dev/hda
注意该信息随你在安装时的配置不同而结果可能不同另外还有一点值得注意的是该设置值可能并不正 确例如我的系统(RedHat kernel -)上的配置值就显示如下
#rdev /boot/vmlinuz
Root Device /dev/sdc (显示为sdc即第三SCSI硬盘而我的机器上根本没有!)
但是这并不表明该配置有问题因为nf中的相关配置项会覆盖该值详见boot/root盘中的分析
()如果上一步的显示信息和你的实际配置有偏差可以执行如下命令进行修正
rdev /dev/vmlinuz /dev/hda (假设根文件系统位于/dev/hda上)
再次执行rdev /vmliuz确保正确否则做出来的盘是不会启动的!
()拿一张已格式化的软盘(Linux下用fdformat格式化)执行下述命令
#dd if=/vmlinuz of=/def/fd bs=
至此一张专用于引导Linux系统的boot盘就做好了去测试一下吧!
.boot/root盘的制作
boot/root盘由两部分组成即核心和根文件系统要把这两部分都放到一个MB的软盘上去通常要对内 核和根文件系统进行压缩压缩核心的最好方法是进行重新编译内核将一些不必要的支持去掉如对网络和其 它周边设备的支持重要的一点是记住内核必须支持RAMDISK及ext否则系统不能正常引导关于内核的编译本 文不再阐述下面重点介绍如何生成根文件系统的压缩包对于根文件系统的压缩包括两方面的问题第一是只 保留必要的根文件系统组件第二是将根文件系统做成一个压缩包类似于内核工作的原理
()根文件系统概述
一个根文件系统必须包括支持完整Linux系统的全部东西它至少应包括以下几项
·基本文件系统结构
·至少含有以下目录/dev /proc /bin /etc /lib /usr /tmp
·最基本的应用程序如sh ls cp mv等
·最低限度的配置文件如rc inittab fstab等
·设备/dev/hd* /dev/tty* /dev/fd
·基本程序运行所需的库函数
以上所需文件一般情况下会超过M因此我们通常的做法是先准备好内容后再压缩到软盘中当用软盘 启动时再把文件解压到内存中形成一个虚拟盘(RAMDISK)通过RAMDISK控制系统启动
为了能创建以上的根文件系统你必须有一个空闲的能够放下大约MB文件的RAMDISK系统缺省情况下已替 我们建好了一个大小为KB的RAMDISK其设备名一般为/dev/ram我们就使用它来保存我们预先准备好的根 文件系统
创建根文件系统
Linux内核识别两种可以直接拷贝到RAMDISK的文件系统它们是minix 和extext性能更好mkefs缺省 情况下在M的软盘上产生个信息节点使用压缩格式的根文件系统需要更多的信息节点所以使用如下命 令创建文件系统可以创建个信息节点而且一般不会用完
mkefs -m -i /dev/ram
mkefs将会自动判断设备容量的大小并相应地配置自身-m 参数防止它给root保留空间这样会腾出更 多的有用空间接着把虚拟盘挂在节点/mnt上
mount -t ext /dev/ram /mnt/floppy
接着是创建目录根文件系统最少应该有如下个目录
/dev — 设备
/proc — proc 文件系统所需目录
/etc — 系统配置文件
/sbin — 重要的系统程序
/bin — 基本应用程序
/lib — 共享函数库
/mnt — 装载其他磁盘节点
/usr — 附加应用程序
执行如下命令创建这些目录
#cd /mnt/floppy
#mkdir dev proc etc sbin bin lib mnt usr
接下来的工作就是确定各个目录下的内容了
·/dev/dev中含有系统不可缺少的设备文件可以把现有系统中/dev的文件拷贝过来然后删除不必要的 文件命令cp -dpR /dev /mnt会拷贝/dev整个目录但不拷贝文件内容dp开关保证链接文件仍然不变不会拷 贝链接所指原文件而且属性不变如果你没有SCSI设备删除所有的以sd开头的文件如果你不想使用串口设 备删除所有以cua开头的文件不过记住一定要保留consolekmemmemnullramtty等文件
·/etc这个目录中含有一些必不可少的系统配置文件这下面的文件比较多那么到底哪些文件是必需 的哪些可有可无呢?由于这下面的文件一般是一些文本文件都不是很大干脆全部保留算了
我的启动盘中含有不到个配置文件大致可分为部分
·rcd/* — 系统启动脚本
·fstab — 列出要登录的文件系统
·inittab — 包含启动过程参数
而且这些文件都是最简单的rc应该包括
#!/bin/sh
/bin/mount -av
/bin/hostname yjy
fstab应包括
/dev/ram / ext defaults
/dev/fd / ext defaults
/proc /proc proc defaults
inittab包括
id::initdefault:
si::sysinit:/etc/rc
::respawn:/sbin/getty tty
::respawn:/sbin/getty tty
·/bin和/sbin该目录中包含有必不可少的应用程序如ls mv cat你可以根据自己的需要选择不过 一定要记住包括以下程序init gettylogin mount运行你的rc的外壳shell
·/lib: 该目录中包含有你的启动盘启动过程中所需要的共享函数库如果缺少必须的函数库系统会停止 启动或出现一大堆错误信息所以一定要注意
几乎所有的程序都需要libc库列一下目录/lib中的libc
% ls -l /lib/libc*
-rwxr-xr-x root root Apr : libc-so*
lrwxrwxrwx root root Apr : libcso -> libc-so*
libcso的表示版本号它指向的文件才是你真正需要的
查看每一个程序使用的函数库用命令ldd如
% ldd /sbin/mkefs
libextfsso => /lib/libextfsso (x)
libcom_errso => /lib/libcom_errso (x)
libuuidso => /lib/libuuidso (x)
libcso => /lib/libcso (xc)
/lib/ld-linuxso => /lib/ld-linuxso (x)
输出右边的库都是必须的有的可能是链接文件
在/lib目录下你还必须有函数库装载器这个装载器或是ldso (对 aout 库) 或是 ld-linuxso (对 ELF 库)新版本的ldd一般会告诉你所需库的装载器
把装载器和库拷贝到/lib后再仔细检查一遍一定保证没有遗漏
模块
如果你有一个模块化的内核你还得考虑需要加载的模块它们都位于/lib/modules你可以把不是很重要 的模块放到别的盘上当系统启动后再加载这样会节省启动盘的空间
打包
一旦你完成了上述工作卸下虚拟盘拷贝到一个文件中然后压缩
umount /mnt
dd if=/dev/ram bs=k | gzip -v>rfsgz
压缩结束后你就拥有了一个压缩的根文件系统不过你得检查它的大小如果大了你还得删除一些东 西
.组织引导盘
有了根文件系统和内核之后最后的工作就是把它们组织在一起
先检查总文件的大小如果超出MB就得考虑重新创建所需或用两张磁盘即使用两张磁盘你的根文 件系统也得小于MB
接着就是确定是用LILO控制启动还是直接用拷贝