linux系统裁剪

1、简介

  最近为了更加了解linux系统的启动过程,通过对系统进行裁剪的的方式来了解整个启动流程。这里记录下过程。

2、环境介绍

  vmware12 + centos6.5 + xshell

3、具体步骤

  开始具体步骤前,确保已创建一台虚拟机,如图所示。接下来开始具体步骤。

(1)添加磁盘

  为虚拟机添加磁盘用语存储裁剪后的系统文件及其配置文件。磁盘准备1.1G即可

(2)对新添的磁盘分区格式化并挂载

  添加磁盘后,启动虚拟机。执行fdisk -l命令查看当前磁盘信息。其中/dev/sdb既是所添加的磁盘,但现在还没有分区。

  通过执行指令fdisk /dev/sdb进入分区命令行,如图依次填写指令,实现对磁盘的分区操作。

  按w保存分区信息后,再次执行fdisk -l命令查看分区信息。

  对/dev/sdb选定文件系统并格式化

mkfs.ext4 /dev/sdb1
mkfs.ext4 /dev/sdb2

  

  在/mnt/目录下,新建文件夹boot和sysroot后,cd到mnt目录下,执行挂载操作

mount /dev/sdb1 boot/
mount /dev/sdb2 sysroot/

  

(3)安装引导程序到设备/dev/sdb1中,指定其为系统启动盘

grub-install --root-directory=/mnt /dev/sdb1

(4)将内核及其依赖拷贝到指定目录中

cp /boot/vmlinuz-2.6.32-431.el6.x86_64 boot/vmlinuz
cp /boot/initramfs-2.6.32-431.el6.x86_64.img boot/initramfs.img

(5)编写grub.conf文件

  在目录/mnt/boot/grub/下,新建grub.conf文件并填写如下内容

default=0
timeout=5
title tiny linux
    root (hd0,0)
    kernel /vmlinuz ro root=/dev/sda2 selinux=0 init=/bin/bash
    initrd /initramfs.img

(6)配置裁剪系统所需的工具包

  编写脚本,参考别人博客https://blog.csdn.net/kingolie/article/details/53428541,将文件保存为/root/script.sh

#!/bin/bash
#
target=/mnt/sysroot

clearCmd(){
if which $cmd &> /dev/null;then
cmdPath=`which --skip-alias $cmd`
        else
             echo "No such command"
            return 5
        fi

}

 cmdCopy(){
         cmdDir=`dirname $1`
        [ -d ${target}${cmdDir} ] || mkdir -p ${target}${cmdDir}
        [ -f ${target}${1} ] && echo -e "\033[31mThe ${1} exist!\033[0m" && return 5
        [ -f ${target}${1} ] || cp $1 ${target}${cmdDir}
        echo -e "\033[32mCopy ${1} success.\033[0m"
}

libCopy(){
        for lib in `ldd $1 | grep -o "/[^[:space:]]\{1,\}"`;do
                libDir=`dirname $lib`
                [ -d ${target}${libDir} ] || mkdir -p ${target}${libDir}
                [ -f ${target}${lib} ] && echo -e "\033[31mThe ${lib} exist!\033[0m" && continue
                [ -f ${target}${lib} ] || cp $lib ${target}${libDir}
                echo -e "\033[32mCopy ${lib} success.\033[0m"
        done

}

while true;do
        read -p "Enter a command: " cmd
        if [ "$cmd" == "quit" ];then
                echo "quit"
                exit 0
        fi
        clearCmd $cmd
        [ $? -eq 5 ]&& continue

        cmdCopy $cmdPath
        libCopy $cmdPath
done

  运行脚本bash /root/script.sh,为裁剪后的系统添加指令极其依赖

bash
ls
cat
insmod
rmmod
mount
umount
ifconfig
ip
ping
route
chkconfig

  

4、到此步骤系统已经裁剪完成,需要测试一下。

  通过vmware新建一个不带系统的虚拟机,并添加之前1.1G的磁盘,在Centos6.5目录下找到TinyLinux.vmdk文件即可

  添加完成之后,将图上的8G磁盘移除,

  点击启动后,即可看到如下的画面证明系统裁剪成功

5、配置Tiny Linux网络接口

  将最小系统关机后,重新启动centos6.5并把1.1G磁盘重新挂载到指定目录中

mount /dev/sdb1 /mnt/boot/
mount /dev/sdb2 /mnt/sysroot/

(1)复制网卡模块驱动到Tiny Linux系统中

网卡驱动所在路径:

/lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/net/igb/igb.ko

 在Tiny Linux的sysroot目录下创建目录

mkdir /mnt/sysroot/lib/modules

cp /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/net/igb/igb.ko /mnt/sysroot/lib/modules/

(2)为Tiny Linux配置/sbin/init启动网络服务和其他重要服务

vim /mnt/sysroot/sbin/initchmod +x /mnt/sysroot/sbin/init

  init内容为

#!/bin/bash
#
echo -e "\tWelcome to \033[34mKingOlie Tiny \033[0mLinux"
mount -n -t proc proc /proc
mount -n -t sysfs sysfs /sys
insmod /lib/modules/igb.ko
[ $? -eq 0 ] && echo -e "Loaded igb module \033[60G[ \033[32mOK\033[0m ]"
ifconfig lo 127.0.0.0/8
ifconfig eth0 192.168.24.131/24
mount -n -o remount,rw /dev/sda2 /
/bin/bash

(3)修改/mnt/boot/grub/grub.conf文件,将init由原来的bash修改为sbin下的init

default=0
timeout=5
title Tiny Linux
        root (hd0,0)
        kernel /vmlinuz ro root=/dev/sda2  quiet selinux=0 init=/sbin/init
        initrd /initramfs.img

6、完成以上步骤即可启动Tiny Linux

  (1)通过执行ping命令实现网络的接通,但只能访问同网段的网络,对于外网不能ping通。

  (2)利用route配置网络路由,即可实现对外网的访问。

7、总结

  本文主要对centos6.5系统进行裁剪,通过裁剪过程中涉及的步骤对linux启动的整个过程有所了解,但对于grub配置文件还是不够了解。

原文地址:https://www.cnblogs.com/grglym/p/10744738.html

时间: 2024-10-29 15:33:32

linux系统裁剪的相关文章

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

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

Linux系统裁剪笔记之二insmod

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

Linux系统裁剪之二(Bash脚本编程之十二)

Linux系统裁剪之二(Bash脚本编程之十二) 系统函数库 ·Linux系统的启动流程     1,POST(加电自检) 计算机本身并不会执行程序,它只是一堆破铜烂铁,但是它可以在开机的时候先去载入一段程序,系统在刚刚启动的时候能够实现将某个ROM芯片中的程序映射到CPU能够寻址的地址空间中去,并且让CPU能够执行其中的指令,这些指令大部分都是用来做系统检测的,当检测完成后,如果系统中所有的基本硬件和核心硬件都没有问题的话,接下来就会根据BIOS中设定的系统启动次序(Boot Sequence

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系统裁剪笔记

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

Linux 系统裁剪

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

grub修复和安装及linux系统裁剪

一.grub修复 1.模拟grub.conf损坏 #mv grub.conf grub.conf.bak 重启,直接进入命令行模式 grub> 2.手动配置grub grub>root (hd0,0) (使用find和tab键自动补全功能,找到grub所在分区) grub>kernel /vmlinuz....  ro root=/dev/root(系统自己找不到的话,只能自己凭记忆)quiet grub>initrd /initramfs....img grub>boot