Linux系统裁剪笔记

1.什么裁剪?

本篇文章的主要目的是让笔者和读者更深的认识Linux系统的运作方式,大致内容就是把Linux拆开自己一个个组件来组装,然后完成一个微型的Linux系统.下面,让我们来实现吧..写的不好的地方请指教.

2.原理

大家都知道,操作系统的启动流程是(主要是Linux):POST—>BIOS—>MBR—kernel-->initrd-->sbin/init,

POST,BIOS都不是我们管的,所以这里我们从MBR开始,Linux的系统引导先主要是用的grub这个软件,grub引导系统了,然后启动内核,内核调用initrd来实现最基本的操作系统,

3.实验 (所有操作均在虚拟机上实现,且定义硬盘时选IDE)

3.1.首先我们得创建一个新的磁盘,来保存我们的grub和内核等关键程序(直接在虚拟机上添加新的磁盘)

分两个区,分别是20M的sdb1主盘,和512M的sdb2主盘。

[[email protected] mnt]# fdisk -l

Disk /dev/sdb: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot  Start   End  Blocks  Id  System
/dev/sdb1 1  3   24066   83  Linux
/dev/sdb2 4  66  506047+  83  Linux
/dev/sdb3  67 83  136552+  82  Linux swap / Solaris

[[email protected] mnt]# mke2fs -j /dev/sdb1

[[email protected] mnt]# mke2fs -j /dev/sdb2

[[email protected] mnt]# mount /dev/sdb1 /mnt/boot/
[[email protected] mnt]# mount /dev/sdb2 /mnt/sysroot/
[[email protected] mnt]# mount
...
/dev/sdb1 on /mnt/boot type ext3 (rw)
/dev/sdb2 on /mnt/sysroot type ext3 (rw)

[[email protected] mnt]# ls boot/       #验证挂载是否成功
lost+found
[[email protected] mnt]# ls sysroot/
lost+found

3.2.启动系统的时候识别硬盘后要有引导程序,系统通过MBR可查找到/dev/sdb中的/mnt

[[email protected] mnt]# grub-install --root-directory=/mnt /dev/sdb
Probing devices to guess BIOS drives. This may take a long time.
Installation finished. No error reported.
This is the contents of the device map /mnt/boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install‘.
(fd0)    /dev/fd0
(hd0)    /dev/hda
(hd1)    /dev/sda
(hd2)    /dev/sdb
(hd3)    /dev/sdc

[[email protected] mnt]# ls /mnt/boot/       #grub已成功生成
grub  lost+found

3.3.有了引导程序就需要有我们的内核了,没有内核怎么启动啊,但是内核的启动又要依赖initrd,所以我们要建立/mnt/boot/vmlinuz,/mnt/boot/initrd.gz,/mnt/boot/grub/grub.conf

3.3.1. 复制内核文件vmlinuz

[[email protected] mnt]# cp /boot/vmlinuz-2.6.18-164.el5  /mnt/boot/vmlinuz

3.3.2. 故应该手动展开文件2:initrd

方法一:

[[email protected] mnt]# cp /boot/initrd-2.6.18-164.el5.img /root

[[email protected] mnt]# file /root/initrd-2.6.18-164.el5.img       #该文件为gzip文件  
/boot/initrd-2.6.18-164.el5.img: gzip compressed data, from Unix, last modified: Thu Apr 17 11:43:57 2014, max compression
[[email protected] ~]# mv initrd-2.6.18-164.el5.img initrd-2.6.18-164.el5.img.gz
[[email protected] ~]# gzip -d initrd-2.6.18-164.el5.img.gz      #解压该文件
[[email protected] ~]# file initrd-2.6.18-164.el5.img
initrd-2.6.18-164.el5.img: ASCII cpio archive (SVR4 with no CRC)
[[email protected] ~]# mkdir testinit
[[email protected] testinit]# cpio -id < ../initrd-2.6.18-164.el5.img  #展开文件
13832 blocks
[[email protected] testinit]# ls   #查看
bin  dev  etc  init  lib  proc  sbin  sys  sysroot
[[email protected] testinit]#

方法二:

[[email protected] ~]# mkdir testiso  #创建空目录
[[email protected] ~]# cd testiso
[[email protected] testiso]# ls
[[email protected] testiso]# zcat /boot/initrd-2.6.18-164.el5.img | cpio -id
13832 blocks
[[email protected] testiso]# ls
bin  dev  etc  init  lib  proc  sbin  sys  sysroot

3.3.3. 修改INIT文件中的启动分区,再打包成initrd.gz

[[email protected] testiso]# file init
init: a /bin/nash script text executable
[[email protected] testiso]# vim init

#resume /dev/VolGroup00/LogVol01  #禁用swap分区

或#resume LABEL=SWAP-sda9  #禁用swap分区

mkrootdev -t ext3 -o defaults,ro /dev/hda2    #/dev/hda1为BOOT分区

#红色部分原为:sda5 或 /dev/VolGroup00/LogVol00

#[[email protected] testiso]# mount
       #/dev/sda5 on / type ext3 (rw)

[[email protected] testiso]# find . | cpio -H newc --quiet -o | gzip -9 > /mnt/boot/initrd.gz

[[email protected] boot]# ls -lh
total 7.1M
drwxr-xr-x 2 root root 1.0K Nov 21 09:02 grub
-rw-r--r-- 1 root root 2.6M Nov 21 10:13 initrd.gz     #init文件中改为/dev/hda2
drwx------ 2 root root  12K Nov 21 08:54 lost+found
-rw-r--r-- 1 root root 1.9M Nov 21 09:16 vmlinuz

3.3.4. 接下来要配置grub文件,不然系统怎么找到你的硬件,故新建grub.conf文件

[[email protected] boot]# vim /mnt/boot/grub/grub.conf

default=0
timeout=5
title Test Linux 5.4 (Test)
    root (hd0,0)
    kernel /vmlinuz
    initrd /initrd.gz

3.4. 这样一个简单的操作系统的雏形就做好了,但是OS的操作依赖于shell,所以我们得手动复制bash、bash依赖的库文件,可写程式自动复制。

[[email protected] sysroot]# mkdir -pv proc sys dev etc/rc.d lib bin sbin boot home var proc

[[email protected] sysroot]# cp /sbin/init /mnt/sysroot/sbin/
[[email protected] sysroot]# cp /bin/bash /mnt/bin/

[[email protected] sysroot]# ldd /sbin/init
    libsepol.so.1 => /lib64/libsepol.so.1 (0x0000003941c00000)
    libselinux.so.1 => /lib64/libselinux.so.1 (0x0000003942000000)
    libc.so.6 => /lib64/libc.so.6 (0x0000003940400000)
    libdl.so.2 => /lib64/libdl.so.2 (0x0000003940c00000)

/lib64/ld-linux-x86-64.so.2 (0x0000003940000000)

[[email protected] sysroot]# cp /lib64/libsepol.so.1 /mnt/sysroot/lib64/   #复制相关库文件
[[email protected] sysroot]# cp /lib64/libselinux.so.1 /mnt/sysroot/lib64/  
[[email protected] sysroot]# cp /lib64/libc.so.6 /mnt/sysroot/lib64/
[[email protected] sysroot]# cp /lib64/libdl.so.2  /mnt/sysroot/lib64/

[[email protected] sysroot]# cp /lib64/ld-linux-x86-64.so.2 /mnt/sysroot/lib64/

[[email protected] sysroot]# ldd /bin/bash

libtermcap.so.2 => /lib64/libtermcap.so.2 (0x0000003943000000)
    libdl.so.2 => /lib64/libdl.so.2 (0x0000003940c00000)
    libc.so.6 => /lib64/libc.so.6 (0x0000003940400000)
    /lib64/ld-linux-x86-64.so.2 (0x0000003940000000)
[[email protected] sysroot]# cp /lib64/libtermcap.so.2 /mnt/sysroot/

[[email protected] sysroot]# chroot /mnt/sysroot/   #切换根目录,画地为牢
bash-3.2# pwd
/
bash-3.2# cd /lib      
lib/   lib64/

3.5. 好了!系统到这里就差不多了,不过我们还得修修,大家可以看到,我们的init=/bin/bash,这时候就会有同学问了,有没搞错,Linux系统化初始化不都是调用/sbin/init的么,你怎么调用了/bin/bash,没错,其实这里指向什么就调什么,那我们现在重新让他指向/etc/rc.d/rc.sysinit。

[[email protected] sysroot]# vim etc/inittab
[[email protected] sysroot]# cat etc/inittab
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit

[[email protected] sysroot]# vim etc/rc.d/rc.sysinit

[[email protected] sysroot]# chmod +x etc/rc.d/rc.sysinit

[[email protected] sysroot]# cat etc/rc.d/rc.sysinit
#!/bin/bash
#
echo -e "\t Welcome to \033[32mJack\033[0m Linux"
/bin/bash

3.6.如下图,执行成功了

好了,整个系统安装完成了!

时间: 2024-08-01 22:57:53

Linux系统裁剪笔记的相关文章

Linux系统裁剪笔记之二insmod

Linux系统裁剪笔记之二 1.什么裁剪? 本篇文章的主要目的是让笔者和读者更深的认识Linux系统的运作方式,大致内容就是把Linux拆开自己一个个组件来组装,然后完成一个微型的Linux系统.下面,让我们来实现吧..写的不好的地方请指教. 2.原理 大家都知道,操作系统的启动流程是(主要是Linux):POST->BIOS->MBR-kernel-->initrd-->sbin/init, POST,BIOS都不是我们管的,所以这里我们从MBR开始,Linux的系统引导先主要是

Linux系统裁剪笔记之四busybox

Linux系统裁剪笔记之四busybox 1.什么裁剪? 本篇文章的主要目的是让笔者和读者更深的认识Linux系统的运作方式,大致内容就是把Linux拆开自己一个个组件来组装,然后完成一个微型的Linux系统.下面,让我们来实现吧..写的不好的地方请指教. 2.原理 大家都知道,操作系统的启动流程是(主要是Linux):POST->BIOS->MBR-kernel-->initrd-->sbin/init, POST,BIOS都不是我们管的,所以这里我们从MBR开始,Linux的系

Linux系统裁剪笔记之三user

Linux系统裁剪笔记 1.什么裁剪? 本篇文章的主要目的是让笔者和读者更深的认识Linux系统的运作方式,大致内容就是把Linux拆开自己一个个组件来组装,然后完成一个微型的Linux系统.下面,让我们来实现吧..写的不好的地方请指教. 2.原理 大家都知道,操作系统的启动流程是(主要是Linux):POST->BIOS->MBR-kernel-->initrd-->sbin/init, POST,BIOS都不是我们管的,所以这里我们从MBR开始,Linux的系统引导先主要是用的

Linux 系统裁剪笔记

1.什么裁剪? 本篇文章的主要目的是让笔者和读者更深的认识Linux系统的运作方式,大致内容就是把Linux拆开自己一个个组件来组装,然后完成一个微型的Linux系统.下面,让我们来实现吧..写的不好的地方请指教. 2.原理 大家都知道,操作系统的启动流程是(主要是Linux):POST->BIOS->MBR-kernel-->initrd-->sbin/init, POST,BIOS都不是我们管的,所以这里我们从MBR开始,Linux的系统引导先主要是用的grub这个软件,gru

Linux 系统裁剪笔记 3

说到裁减Linux,无非是为了减小磁盘占用或者是为了某些特定场合的应用(如嵌入式系统).以RedHat 7.3为例,其最小安装仍然达到了300M,这不得不让人对一直号称小而全的Linux系统感到疑惑. 作为自己手中课题的一个铺垫,不久前我尝试了对Linux进行裁减,虽然没有达到预期的一张软盘大小,但结果也相当有吸引力.下面我对此一一做说明. 参考文档: Linux bootdisk-HOWTO:     http://www.linux.org.tw/CLDP/gb/Bootdisk-HOWTO

Linux 系统裁剪笔记 软盘2

第一步:裁减内核打开终端,输入:cd /usr/src/linux2.4,然后输入make xconfig.现在编译内核正式开始了1.1 "code maturity level options"选项,代表代码的成熟等级,因为这是一个试验的部分,我们不需要,所以关闭它.1.2 "Loadable module support"可加载模块支持可加载模块是指内核代码(kernel code)的一些片断,比如驱动程序,当编译内核的时候它们也被单独编译.因此,这些代码不是内

Linux 系统裁剪笔记 4 (内核配置选项及删改)

在menuconfig中配置,可以对进行Linux内核配置选项及删改.本文介绍详细配置方法.第一部分:全部删除Code maturity level options ---> 代码成熟等级选项[]Prompt for development and/or incomplete code/drivers 默认情况下是选择的,这将会在设置界面中显示还在开发或者还没有完成的代码与驱动.不选.第二部分 :除以下选项,其它全部删除General setup-〉System V IPC (IPC:Inter

Linux系统裁剪之四(自定义内核及busybox完成系统定制)

Linux系统裁剪之四(自定义内核及busybox完成系统定制) ·busybox busybox是一个二进制程序,可以模拟实现许许多多的Linux命令,busybox在编译安装完成之后会在我们系统的bin目录下生成一个名为busybox的二进制程序,其它的文件都是该二进制程序的软链接,几乎上百个命令都可以依靠这一个可执行程序来实现,还可以模拟几个shell,可以模拟实现我们Linux操作系统上bin和sbin目录下的很多命令,而且该文件所占的存储空间还非常的小,因此在一些存储设备容量非常小的环

Linux系统学习笔记:序

Linux系统学习笔记:序 ??Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件.应用程序和网络协议.它支持32位和64位硬件.Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统. 本人使用的Linux为Ubuntu,主要以<APUE>(第3版)为学习蓝本. 1. Unix/Linux 体系结构 如图: 内核的接口被称为系统调用.公用函数库构建在