最小化Linux组织

学习内容来自马哥教育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界面

     




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值