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/init
chmod +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配置文件还是不够了解。

linux系统裁剪的更多相关文章

  1. 嵌入式之Linux系统裁剪和定制---(kernel+busyboxy+dropbear+nginx)

    本文将介绍通过完全手动定制内核,在此基础上添加 busybox ,并实现远程登陆,使裁剪的 linux 能够运行 nginx . 在此之前介绍一下 linux 系统的启动流程. linux系统启动流程 ...

  2. Linux 系统裁剪

     一.前言 Linux操作系统至1991.10.5号诞生以来,就源其开源性和自由性得到了很多技术大牛的青睐,每个Linux爱好者都为其贡献了自己的一份力,不管是在Linux内核还是开源软件等方面,都为 ...

  3. Linux 系统裁剪笔记1

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

  4. Linux 系统裁剪笔记 3

    说到裁减Linux,无非是为了减小磁盘占用或者是为了某些特定场合的应用(如嵌入式系统).以RedHat 7.3为例,其最小安装仍然达到了300M,这不得不让人对一直号称小而全的Linux系统感到疑惑. ...

  5. Linux 系统裁剪笔记 软盘2

    第一步:裁减内核打开终端,输入:cd /usr/src/linux2.4,然后输入make xconfig.现在编译内核正式开始了1.1 "code maturity level optio ...

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

     CDROM filesystem support(CONFIG_ISO9660_FS)[Y/m/n/?]有标准光驱的系统应该选Y.Minix fs support(CONFIG_MINIX_FS)[ ...

  7. [马哥学习笔记]Linux系统裁剪之制作带网络功能的可启动linux

    知识基础: 系统启动流程:POST-->BIOS(boot sequence)-->GRUB(bootloder(stage1:MBR;stage2:grub目录中))-->kern ...

  8. 定制自己的linux系统

    算是总结式文档,以备后忘 先说一下背景,一开始我就知道有这个任务,同时我自己也非常感兴趣,打算去研究研究 于是才同意接这个任务,但是我的原意是从头开始搭建系统,也就是lfs 但接到任务后,由于种种原因 ...

  9. 嵌入式设备上的 Linux 系统开发

    转载:http://www.ibm.com/developerworks/cn/linux/embed/embdev/index.html   如果您刚接触嵌入式开发,那么大量可用的引导装载程序(bo ...

随机推荐

  1. Android远程桌面助手(B1309)

    修改了窗口缩放的处理,支持Android Car等非常规分辨率的Android设备: 修改了获取Android端软件版本的方法,优化了APK的升级逻辑: 优化了远程输入法功能,支持利用PC端输入法快速 ...

  2. (爬虫)urllib库

    一.爬虫简介 什么是爬虫?通俗来讲爬虫就是爬取网页数据的程序. 要了解爬虫,还需要了解HTTP协议和HTTPS协议:HTTP协议是超文本传输协议,是一种发布和接收HTML页面的传输协议:HTTPS协议 ...

  3. win10 桌面设置为远程桌面

    查看方法: 1.点击桌面“计算机”,右键,点击属性. 2.在计算机属性系统窗口中点击“远程设置”. 3.在“系统属性”对话框中远程协助勾选“允许远程协助连接这台计算机”. 4.在“远程协助”点击“高级 ...

  4. cent os 7 与cent os 6 修改主机名称

    centos6 需要修改两处:一处是/etc/sysconfig/network,另一处是/etc/hosts,只修改任一处会导致系统启动异常.零时修改用hostname your-name cnet ...

  5. Java基础系列--04_数组

    一维数组: (1)数组:存储同一种数据类型的多个元素的容器. (2)特点:每一个元素都有编号,从0开始,最大编号是数组的长度-1. 编号的专业叫法:索引 (3)定义格式 A:数据类型[] 数组名;(一 ...

  6. UI自动化之日志

    Python自动化测试中,日志输出功能是不能缺少的一部分.让我们来看看如何实现日志的输出吧 一.控制台输出日志 def get_logger(): try: if not os.path.exists ...

  7. Azure按订阅,资源组,资源类型导出所有资源powershell命令

    一般可以借助powershell命令来读取资源:例如:1, 读取某个订阅下的资源:$subscriptionID = "xxxxxxxx"Set-AzureRmContext $s ...

  8. Java设置session超时(失效)的时间

    在一般系统登录后,都会设置一个当前session失效的时间,以确保在用户长时间不与服务器交互,自动退出登录,销毁session具体设置的方法有三种:1.在web容器中设置(以tomcat为例)在tom ...

  9. Java7 和 Java8 中的 ConcurrentHashMap 原理解析

    Java7 中 ConcurrentHashMap ConcurrentHashMap 和 HashMap 思路是差不多的,但是因为它支持并发操作,所以要复杂一些. 整个 ConcurrentHash ...

  10. 利用ELK分析Nginx日志生产实战(高清多图)

    本文以api.mingongge.com.cn域名为测试对象进行统计,日志为crm.mingongge.com.cn和risk.mingongge.com.cn请求之和(此二者域名不具生产换环境统计意 ...