学习内容来自马哥教育linux教学视频,做出一些总结
由于初学,一些内容涉及不深,错误之处亦欢迎指教。
当然,由于知识所限,仅将Redhat5.5x86系统上的文件拷贝过来进行一些处理,只求能在全新机器上运行起来。
LINUX系统启动过程(BIOS+MBR引导下):
POST机器开机自检-->控制权交给BIOS(ROM)-->BIOS相关自检并将控制权交给MBR分区表上的Bootloader(DISK)-->Bootloader完成系统引导
为完成最基础的系统搭建我们要完成下列准备
1、 正确的分区格式化,以ext3为例
2、 grub引导的安装
3、 linux内核镜像initrd的修改和部署
4、 内核准备及grub的配置
5、 根文件系统的架构
6、 init
7、 /etc/inittab控制运行级别及相应服务
8、 /etc/rc.d/rc.sysinit负责启动对应级别下的程序
9、bash及最基本的命令的准备
正式开始:
1、 准备一块新的硬盘
a、新建两个分区一个引导分区,一个根分区
fdisk -l /dev/sdb
Disk/dev/sdb: 21.4 GB, 21474836480 bytes
255heads, 63 sectors/track, 2610 cylinders
Units =cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 20 160618+ 83 Linux
/dev/sdb2 21 413 3156772+ 83 Linux
b、执行partprobe刷新对新分区的识别,格式化新建分区
partprobe
mke2fs -t ext3 /dev/{sdb1,sdb2}
c、挂载两分区到/mnt目录
mkdir-pv /mnt/{boot,sysroot}
mount/dev/sdb1 /mnt/boot/
mount/dev/sdb2 /mnt/sysroot/
2、 安装grub
grub-install --root-directory=/mnt /dev/sdb
--root-directory=/mnt说明了根文件系统在哪里,grub会以这个目录为根自动找到挂载在目录下的boot目录
/dev/sdb指明了grub的安装磁盘,程序会在这个磁盘的MBR上写入bootloader
3、 initrd修改
在家目录下新建文件夹,将系统上的initrd展开于此
mkdri ~/initrd
cd ~/initrd
zcat /boot/initrd-2.6.18-238.el5.img | cpio -id
vim init
initrd文件展开后的init脚本负责kernel启动前初始化的工作,主要是内核模块的加载和设备的挂载
跳转到113行发现
mkrootdev -t ext3 -o defaults,ro /dev/VolGroup00/LogVol00
可看见红帽的根是逻辑分区的,我们做出相应修改
mkrootdev -t ext3 -o defaults,ro /dev/hda2
由于添加在虚拟机上的磁盘是以ide方式添加的
在initrd内硬盘会被识别为had
hda1是引导分区,宿主机上的sdb1
hda2时根分区,宿主机上的sdb2
生成映像
find . | cpio -H newc --quiet -o | gzip -9>/mnt/boot/initrd
4、 内核准备及grub配置
cp /vmlinuz-2.6.18-238.el5 /mnt/boot/vmlinuz
直接复制即可
配置grub
cd /mnt/boot/grub/
vim grub.conf
添加如下字段:
default=0 #默认引导,0表示第一个
timeout=3 #等待时间
title My mini Linux #标题
root (hd0,0) #内核未加载,(hd0,0)是grub识别的结果
kernel/vmlinuz #此时磁盘上的第一个分区为引导分区
initrd/initrd #kernel和initrd都在这里
5、 根的组织:
bin dev lib sbin tmp var
copy etc log proc root sys usr
6、 上帝进程init
ldd /sbin/init
linux-gate.so.1=> (0x00a65000)
libsepol.so.1 => /lib/libsepol.so.1(0x0075c000)
libselinux.so.1 =>/lib/libselinux.so.1 (0x007a4000)
libc.so.6 => /lib/libc.so.6(0x00594000)
libdl.so.2 => /lib/libdl.so.2(0x0071a000)
/lib/ld-linux.so.2 (0x00575000)
将相应共享对象复制到/mnt/sysroot/lib下
7、/etc/inittab控制运行级别及相应服务
只写最基本的字段
vim/mnt/sysroot/inittab
id:3:initdefault: #表示默认启动级别
si::sysinit:/etc/rc.d/rc.sysinit #启动的脚本
8 /etc/rc.d/rc.sysinit负责启动对应级别下的程序
vim/mnt/sysroot/etc/rc.d/rc.sysinit
加入以下字段
#!/bin/bash
/bin/clear
echo -e"Welcome to \033[34mMini Linux\033[0m"
/bin/bash
1、 准备基本的命令,由于还未接触busybox使用以下脚本
使用只需输入想要的命令就行
测试:
挂起当前系统,新建虚拟机,硬盘采用创建的磁盘,成功进入bash界面