分享
 
 
 

用好Linux的启动盘

王朝system·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

一、为什么需要Linux启动盘

有很多理由来说明这个问题:首先它可用于启动Linux系统。其次,当系统发生错误,需要进行系统恢复时 我们需要用到它。还有,如果你喜欢经常更新系统内核的话,那么一张启动盘则是必不可少的。

希望了解Linux系统组成及启动过程的朋友,如果按照本文提供的方法做下去,相信你做完启动盘之后,你 对Linux又会有新的认识。

二、启动盘的类型

启动盘一般可分为如下两种:一种是只含内核(kernel)的启动盘,这种盘只含有系统内核,并不包括根文 件系统(root file system),它在其内核中指明了根文件系统所在的位置,在启动过程中根据该参数去安装根 文件系统。也就是说,这种类型的启动盘必须和硬盘上的根文件系统配合才能使用。我们平常意义上的启动盘一 般指的就是这种类型,有些资料上也把这种盘称之为boot盘。

另外还有一种类型的启动盘除了包含内核以外,还包含了文件系统。这种类型的启动盘从某种意义上来说已 经是一个完整的操作系统。由于有自己的根文件系统,这种类型的启动盘可以在没有硬盘的机器上启动一个小的 Linux系统。这种类型的盘有时也称作boot/root盘。

三、启动盘的制作

1.boot盘的制作

很多Linux发行套件已经提供了boot盘,一般情况是在DOS下使用RAWRITE制作一张boot盘。当然这种方法是 在安装Linux之前进行制作。如果在安装了Linux之后希望再制作系统盘,请按以下步骤进行:

(1)以root的身份进行登录。

(2)确定内核的位置,一般情况下内核位于/vmlinuz中,当然不同的发行套件中该位置可能会有区别,可以 查看相关的文档。

(3)用rdev命令设置根设备为Linux系统的根文件系统。首先查看内核中对根文件系统的配置,执行如下命令

#rdev /vmlinuz

如果你的Linux根文件系统位于/dev/hda1,那么应该有如下的信息:

Root Device /dev/hda1

注意:该信息随你在安装时的配置不同而结果可能不同。另外还有一点值得注意的是,该设置值可能并不正 确,例如我的系统(RedHat 6.0 kernel 2.2.5-15)上的配置值就显示如下:

#rdev /boot/vmlinuz

Root Device /dev/sdc1 (显示为sdc1即第三SCSI硬盘,而我的机器上根本没有!)

但是这并不表明该配置有问题,因为lilo.conf中的相关配置项会覆盖该值,详见boot/root盘中的分析。

(4)如果上一步的显示信息和你的实际配置有偏差,可以执行如下命令进行修正:

rdev /dev/vmlinuz /dev/hda1 (假设根文件系统位于/dev/hda1上)

再次执行rdev /vmliuz确保正确,否则做出来的盘是不会启动的!

(5)拿一张已格式化的软盘(Linux下用fdformat格式化),执行下述命令:

#dd if=/vmlinuz of=/def/fd0 bs=8192

至此,一张专用于引导Linux系统的boot盘就做好了。去测试一下吧!

2.boot/root盘的制作

boot/root盘由两部分组成,即核心和根文件系统。要把这两部分都放到一个1.44MB的软盘上去,通常要对内 核和根文件系统进行压缩,压缩核心的最好方法是进行重新编译内核,将一些不必要的支持去掉,如对网络和其 它周边设备的支持,重要的一点是记住内核必须支持RAMDISK及ext2,否则系统不能正常引导。关于内核的编译本 文不再阐述,下面重点介绍如何生成根文件系统的压缩包。对于根文件系统的压缩包括两方面的问题,第一是只 保留必要的根文件系统组件,第二是将根文件系统做成一个压缩包,类似于内核工作的原理。

(1)根文件系统概述

一个根文件系统必须包括支持完整Linux系统的全部东西,它至少应包括以下几项:

?基本文件系统结构

?至少含有以下目录:/dev、 /proc、 /bin、 /etc、 /lib、 /usr、 /tmp

?最基本的应用程序,如sh、 ls、 cp、 mv等

?最低限度的配置文件,如rc、 inittab、 fstab等

?设备:/dev/hd*、 /dev/tty*、 /dev/fd0

?基本程序运行所需的库函数

以上所需文件一般情况下会超过1.44M,因此我们通常的做法是先准备好内容后再压缩到软盘中,当用软盘 启动时,再把文件解压到内存中,形成一个虚拟盘(RAMDISK),通过RAMDISK控制系统启动。

为了能创建以上的根文件系统,你必须有一个空闲的能够放下大约4MB文件的RAMDISK。系统缺省情况下已替 我们建好了一个大小为4096KB的RAMDISK,其设备名一般为/dev/ram0,我们就使用它来保存我们预先准备好的根 文件系统。

2.2 创建根文件系统

Linux内核识别两种可以直接拷贝到RAMDISK的文件系统,它们是minix 和ext2,ext2性能更好。mke2fs缺省 情况下在1.44M的软盘上产生360个信息节点,使用压缩格式的根文件系统需要更多的信息节点,所以使用如下命 令创建文件系统可以创建2000个信息节点,而且一般不会用完。

mke2fs -m 0 -i 2000 /dev/ram0

mke2fs将会自动判断设备容量的大小并相应地配置自身,-m 0参数防止它给root保留空间,这样会腾出更 多的有用空间。接着把虚拟盘挂在节点/mnt上:

mount -t ext2 /dev/ram0 /mnt/floppy

接着是创建目录。根文件系统最少应该有如下8个目录:

/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开头的文件。不过记住一定要保留console、kmem、mem、null、ram、tty1等文件。

?/etc:这个目录中含有一些必不可少的系统配置文件。这下面的文件比较多,那么到底哪些文件是必需 的,哪些可有可无呢?由于这下面的文件一般是一些文本文件,都不是很大,干脆全部保留算了。

我的启动盘中含有不到15个配置文件,大致可分为3部分:

?rc.d/* ― 系统启动脚本

?fstab ― 列出要登录的文件系统

?inittab ― 包含启动过程参数

而且这些文件都是最简单的。rc应该包括:

#!/bin/sh

/bin/mount -av

/bin/hostname yjy

fstab应包括:

/dev/ram0 / ext2 defaults

/dev/fd0 / ext2 defaults

/proc /proc proc defaults

inittab包括:

id:2:initdefault:

si::sysinit:/etc/rc

1:2345:respawn:/sbin/getty 9600 tty1

2:23:respawn:/sbin/getty 9600 tty2

?/bin和/sbin:该目录中包含有必不可少的应用程序,如ls, mv, cat,你可以根据自己的需要选择,不过 一定要记住包括以下程序:init, getty,login, mount,运行你的rc的外壳shell。

?/lib: 该目录中包含有你的启动盘启动过程中所需要的共享函数库,如果缺少必须的函数库,系统会停止 启动或出现一大堆错误信息,所以一定要注意。

几乎所有的程序都需要libc库,列一下目录/lib中的libc:

% ls -l /lib/libc*

-rwxr-xr-x 1 root root 4016683 Apr 16 18:48 libc-2.1.1.so*

lrwxrwxrwx 1 root root 13 Apr 10 12:25 libc.so.6 - libc-2.1.1.so*

libc.so.6的6表示版本号,它指向的文件才是你真正需要的。

查看每一个程序使用的函数库,用命令ldd,如:

% ldd /sbin/mke2fs

libext2fs.so.2 = /lib/libext2fs.so.2 (0x40014000)

libcom_err.so.2 = /lib/libcom_err.so.2 (0x40026000)

libuuid.so.1 = /lib/libuuid.so.1 (0x40028000)

libc.so.6 = /lib/libc.so.6 (0x4002c000)

/lib/ld-linux.so.2 = /lib/ld-linux.so.2 (0x40000000)

输出右边的库都是必须的,有的可能是链接文件。

在/lib目录下你还必须有函数库装载器,这个装载器或是ld.so (对 a.out 库) 或是 ld-linux.so (对 ELF 库)。新版本的ldd一般会告诉你所需库的装载器。

把装载器和库拷贝到/lib后,再仔细检查一遍,一定保证没有遗漏。

2.3 模块

如果你有一个模块化的内核,你还得考虑需要加载的模块,它们都位于/lib/modules,你可以把不是很重要 的模块放到别的盘上,当系统启动后再加载,这样会节省启动盘的空间。

2.4 打包

一旦你完成了上述工作,卸下虚拟盘,拷贝到一个文件中,然后压缩。

umount /mnt

dd if=/dev/ram0 bs=1k | gzip -v9rfs.gz

压缩结束后,你就拥有了一个压缩的根文件系统,不过你得检查它的大小,如果大了,你还得删除一些东 西。

3.组织引导盘

有了根文件系统和内核之后,最后的工作就是把它们组织在一起。

先检查总文件的大小,如果超出1.44MB,就得考虑重新创建所需或用两张磁盘,即使用两张磁盘,你的根文 件系统也得小于1.44MB。

接着就是确定是用LILO控制启动还是直接用拷贝

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有