总结之:CentOS 6.4系统裁减详解及装载网卡步骤

前言
   随着接触Linux的慢慢深入、对Linux也有了一个基本认识了吧,慢慢的接触系统内核、系统配置文件、在了解Linux的系统启动流程后,现在来总结一下一个简单的Linux系统的裁减方法和步骤,一个只有内核文件和几个简单的命令的小Linux系统,现在就开始以下裁减:

正文 
   首先在一个虚拟机上新增一块硬盘、这样等裁减好了之后可以把这块硬盘挂载到别的虚拟机上去、运行自已裁减的那个Linux系统;

wKioL1MW6cOB-EHAAAGPeEDJ9iQ811.jpg

wKioL1MW6cejrXyuAAIgtdPsFkM192.jpg

wKiom1MW6e-B2P3OAAF9-XUwsEc625.jpg

wKioL1MW6c6Ss1qjAAEZKYfTnis903.jpg

wKioL1MW6duSTyg1AAEumrbayV0149.jpg



   添加完硬盘后就启动虚拟机了;    


   查找一下刚才添加的硬盘:
   # fdisk -l /dev/sd[a-z]

wKioL1MW6mzz2W_CAAD0OCsStpg036.jpg


   添加完硬盘之后就应该分区格式化硬盘了;
   # fdisk /dev/sdb

   这里就自己分区好了、很简单的、比windows简单多了!!!

   分区完后就给这两个分区格式化了;
   格式化指定文件系统类型为ext4
   # mke2fs -t ext4 /dev/sdb1
   # mke2fs -t ext4 /dev/sdb2

wKioL1MW6xyAIpb_AAB97b2jK_Y110.jpg


   格式化完了之后就看到刚才分的两个分区列表了;

   而后在/mnt目录下创建两个目录分别挂载到刚分好的那两个分区上去:
   # mkdir -pv /mnt/{boot,sysroot}


   挂载目录/mnt/boot到/dev/sdb1分区上去;
   挂载目录/mnt/sysroot到/dev/sdb2分区上去;
   # mount /dev/sdb1 /mnt/boot/
   # mount /dev/sdb2 /mnt/sysroot/

wKiom1MW64viHnRKAAEdUcbC910790.jpg


   而后就往sdb上安装grub;
   创建的boot在哪就指定到哪个路径下去,然后再指定安装在哪块硬盘上,grub安装完之后就会生成/mnt/boot/grub/目录、grub目录下就会生成相关的文件
   # grub-install --root-directory=/mnt /dev/sdb

wKiom1MW67_RaaJFAAE0HARIVEs807.jpg

wKiom1MW7DbCm7Z-AADhvPLKxe8781.jpg


   现在我们把宿主机里的内核文件给sdb拷贝一份到/mnt/boot/目录下,名字我们就叫mvlinuz、版本号我们就不带了、init文件也拷贝一份到/mnt/boot/目录下,名字就简单的改为initramfs.img
   # cp /boot/vmlinuz-2.6.32-431.el6.x86_64 /mnt/boot/vmlinuz
   # cp /boot/initramfs-2.6.32-431.el6.x86_64.img /mnt/boot/initramfs.img

wKiom1MW7FXwj2gKAADiJhm3tYc730.jpg

   完整的linux有哪些目录呢、那我们就得来创建一下这些个目录了;之前我们挂载的那个sysroot的目录都没有到、那我们就在这个目录下创建这些目录、切换到/mnt/sysroot/下:
   # mkdir -pv /etc/rc.d root boot dev proc sys tmp var usr srv lib lib64 bin sbin home mnt media

wKiom1MW7KXhuVHdAABPNoOCSS4284.jpg

   到这里了、如果我们的第二块硬盘上再有个可执行程序是不是就可以运行了呢、那我们不仿移植一些程序到我们的第二块硬盘上去、我们之前写了一个移植可执行程序的脚本、包括程序所依赖的库文件也一并移植过去了、代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#!/bin/bash
#
#定义目标目录、也就是要拷贝到的那个目录
target=/mnt/sysroot
#声明清理命令的方法
clearCmd() {
  #判断命令是否存在、如果不存在就提示没有找到命令
  if which $cmd &> /dev/nullthen
        #获取命令的路径
        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} ] || cp $1 ${target}${cmdDir}
}
#定义拷贝库文件的方法
libCopy() {
        #循环所有获得的命令所依赖的所有库文件
        for lib in `ldd $1 | grep -o "/[^[:space:]]\{1,\}"`; do
                #取得库文件的目录
                libDir=`dirname $lib`
                #判断库文件的目录是否存在、不存在则创建
                [ -d ${target}${libDir} ] || mkdir -p ${target}${libDir}
                #判断库文件是否已经存在、不存在就拷贝
                [ -f ${target}${lib} ] || cp $lib ${target}${libDir}
        done
}
#循环让用户输入要拷贝的命令
while truedo
  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


wKioL1MW77zCBKyQAAFBsoEDZCE400.jpg

wKioL1MW8B-SiUDtAACmR-uljKg736.jpg

   接着切换到/mnt/sysroot/bin/目录下、给bash创建一个软链接、因为系统默认找shell都是找sh
   # ln -sv bash sh    

   现在我们切换到/mnt/sysroot/目录试一下看就知道了:
   # chroot /mnt/sysroot/

wKiom1MW8L3gz8-gAACRqZOTlL8973.jpg


   看、我们的小根可以用了    
   这里我们再提供一个init脚本给这个小系统,在/sbin/目录下,这个init要通过调用/etc/inittab这个配置文件,然后再去执行/etc/rc.d/rc.sysinit下的初始化脚本、这样的话那我们就把初始化脚本的内容拿到init里来执行;

   这个脚本到底要做哪些操作呢:

   # vim /mnt/sysroot/sbin/init

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
#
#打印欢迎信息
echo -e "\tWecome to \033[34m Mini Linux-2.6 OS\033[0m"
#挂载两个伪文件系统;-t后面跟文件系统类型
mount -n -t proc proc /proc
mount -n -t sysfs sysfs /sys
 #启动后再以读写方式重新挂载/dev/sda2上,这样的话就要把宿主机关机再后再新运行这个小系统了
mount -n -o remount,rw /dev/sda2 /
#运行bin下的bash
/bin/bash


   保存退出后给init一个可执行权限:
   chmod +x /mnt/sysroot/sbin/init
   此时我们就要给这块硬盘上的小系统提供一个grub的配置文件了,如果不写这个配置文件也可以启动、但一进入就会进到grub小shell中让你配置系统的grub信息;
   # vim /mnt/boot/grub/grub.conf

1
2
3
4
5
6
default=0
timeout=5
title Mini Linux OS
    root(hd0,0)
    kernel /vmlinuz ro root=/dev/sda2 selinux=0 init=/sbin/init
    initrd /initramfs.img


   OK,保存退出!        

   同步一下到对应的磁盘上:
   # sync    
   经过以上的操作、下面我们就来创建一个新的虚拟机、然后选择虚拟机使用我们刚才装小系统的那块硬盘、CentOS_SecondSCSI.vmdk;

wKioL1MW8-CD_ojRAAH2able-f0277.jpg
   好了、我们把已经运行的虚拟机都挂载起,运行我们刚才创建好的那个有CentOS_SecondSCSI.vmdk磁盘的虚拟机,到这里我们就看到我们裁减的小系统跑起来了、看到我们自己定义的Min Linux-2.6 OS了!    wKioL1MW9GLQHBi0AABl_cHytmI133.jpg

进到我们的小系统里去了:

wKiom1MXATDhooQGAABLZHNpUzs579.jpg


   接下来我们要在小系统里装载网卡、但是要确保被装载的网卡驱动没有使用、我们可以用lsmod这个命令查看一下:这里以e1000为例来说明问题、我这里的虚拟机上已经装有了、那我就先卸载了再装载上去:

   在宿主机上查看当前内核装载的模块信息:
   # lsmod

   卸载e1000网卡驱动:
   # modprobe -r e1000

   要装载的话用下面命令即可:
   # modprobe e1000

   那怎么样把e1000的内核模块拷贝到我们的小系统里面里、让他装上去、并且启用网络功能呢、首先确保我们系统中的piv4没有做成模块,这里我们的ipv4没有做成模块、那就去移植这个模块吧:
   首先给他创建一个目录、切换到/mnt/sysroot/lib目录中:
   # mkdir modules

   再拷贝我们系统上的内核模块到这个目录里去
   # cp /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/net/e1000/e1000.ko /mnt/sysroot/lib/modules/

   再移植一些所需要用到的命令:insmod、rmmod、ifconfig、ip、ping

   OK、同步一下我们就可以重新启动小系统了
   # sync

   进到小系统里、敲命令吧;
   # insmod /lib/modules/e1000.ko
   # ifocnfig eth0 176.16.251.100/16
   # ping -c 3 176.16.251.100
wKioL1MXAfLx2_ZuAAFwEvAOYU4644.jpg

wKiom1MXA0LRw9JvAADu3n6P1sw699.jpg

wKioL1MXAxzjKk7rAAFg5pXqsEk919.jpg


   好了、到这里我们就基本完成了小系统的裁减了、要想装载更多的功能、后面可以自己再添加、想装什么就装什么、要想系统启动就有网络那可以在init中设置一下、在init中加上ifconfig eth0 176.16.251.100/16就可以了、init要写得更好自己后期再慢慢改吧、加慢判断和显示颜色什么的等等:

结语:
   好像东西很多的样子、其实也不是很多了、可能我比较啰嗦、噼里啪啦的写了一大堆吧、其实操作也不多、就是要理清步骤就很清晰了、不是吗、好吧、就到此结束吧、人无完人、有错或有什么不妥还望大神指点哦!










本文转自 wei0164 51CTO博客,原文链接:http://blog.51cto.com/tanxw/1368801,如需转载请自行联系原作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/279567.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 设备占用_如何查看正在占用Android设备的空间

android 设备占用When you picked up your shiny new Android device, you probably thought “yeah, this has plenty of storage. I’ll never fill it up!” But here you are, some number of months later with a full phone and no clue why. No worries: here’s how yo…

最近沉迷生意经

高度战略抢占顾客心智 速度战略 . 规模不够就谈发展速度,避开自己的劣势; . 发展速度快说明产品好,受欢迎度高; 钱是工具,从钱上解脱 . 不能被钱所困 . 放下钱,才能潇洒地使用钱 第一时间抢占顾客心智 . 核心点就是抢占…

mysql密码正确却提示错误, 不输入密码反而能登录

今天部署阿里云服务器, 发现之前可以连接的mysql服务器突然连接不上了, 密码我确认是正确的,但登录时就是显示密码错误, 很崩溃, 差点气得我就想重装mysql了。 好在经过几番苦寻找到了以下能解决我问题的资料, 成功解决了我的问题, 万分感谢,…

域用户权限|安装软件

如何让普通的域用户有安装软件的权限?现在给客户部署了活动目录,客户要求 普通的域用户也可以自己安装软件。不知道如何设置,希望大家帮帮忙!我告诉客户的做法如下:不知道可行性如何? 1、在域中新建一个域账…

c/c++ new delete初探

new delete初探 1,new有2个作用 开辟内存空间。调用构造函数。2,delete也有2个作用 释放内存空间调用析构函数。如果用new开辟一个类的对象的数组,这个类里必须有默认(没有参数的构造函数,或者有默认值的参数的构造函数)的构造函数…

php旧版本windows_Windows的旧版本中如何进行多任务处理?

php旧版本windowsConsidering that DOS was a single-tasking OS and the ties it had with early versions of Windows, just how did earlier versions of Windows manage to accomplish multi-tasking? Today’s SuperUser Q&A post looks at the answers to this ques…

批量提取视频文件信息(文件大小及时长)并统计

随着设备性能提高,视频文件越来越大了。服务器在对外提供视频服务时,需要承担越来越大的存储负担。一般提供1080P的AVC编码视频已满足多数观看需求。(1小时视频大约1.3G)此文要解决的就是关于已有大量高清视频(1小时超…

列出所有K个元素的子集-----2013年1月26日

问题描述:列出一个集合的元素个数为k的所有子集。思路:在字典顺序列出所有子集的基础上判断元素个数就可以了&#xff0c;比较简单。代码如下:1 #include <stdio.h>2 #define MAX 10003 4 int main()5 {6 int n5;7 int set[MAX]{1};8 int index0;9 int …

docker swarm的应用----docker集群的构建

一、docker安装 这里我们安装docker-ce 的18.03版本 yum -y remove docker 删除原有版本 #安装依赖包 [rootDocker ~]# yum -y install yum-utils device-mapper-persistent-data lvm2 #添加docker的CE版本的yum源配置文件 [rootDocker ~]# curl https://download.docker…

微信小程序 fire_如何在Fire TV和Fire TV Stick上侧面加载应用程序

微信小程序 fireAmazon’s Fire TV and Fire TV stick technically runs Android…but you wouldn’t know it from looking. Amazon has a wall of content for its set-top box, and doesn’t want Google (with its own competing platform) to crash the party. But even t…

PS 技巧

1. 钢笔的使用&#xff1a; 扣完一圈以后&#xff0c;按Ctrl回车键&#xff0c;会出现蚂蚁线&#xff0c;然后按CtrlJ 是复制扣出来的图层&#xff0c;右下角的框里会出现一个新图层&#xff0c;注意每个图层前边有一个小框&#xff0c;点一下是出现眼睛就可以显示该图层在中央…

Ibatis - Open quote is expected for attribute {1} associated with an element type '

昨天晚上提交的代码&#xff0c;今天运行起来&#xff0c;始终报错&#xff1a; Open quote is expected for attribute "{1}" associated with an element type id,查了半天&#xff0c;觉得很奇怪。 回滚到昨天的代码&#xff0c;运行正常。经过compare代码&#…

Linux系统运维之路

九月份开始&#xff0c;半年内搞定运维&#xff0c;博客会慢慢的更新&#xff0c;vim编辑器&#xff0c;Nginx配置文件优化 运维基础 运维基础-Linux发展史、安装、基本操作 运维基础-用户和组管理 运维基础-文件权限管理 运维基础-进程管理 运维基础-IO 管道 运维基础-查找压…

设备无法获得谷歌运行怎么办_因此,您刚刚获得了Google主页。 怎么办?

设备无法获得谷歌运行怎么办So you scored a Google Home for Christmas. That’s awesome because this is a killer little smart speaker that can do a lot of different things—in fact, it can be a little overwhelming. The good news is that we’ve got you covered…

IDEA Maven创建多个Module相互依赖

1、前言 在大型企业项目中&#xff0c;系统架构复杂多变&#xff0c;一个项目根本无法支撑起所有业务。为了提高项目扩展性、灵活性、重用性&#xff0c;封装性&#xff0c;将项目分为多个Module是非常必要的。 这里就不说IDEA如何安装了&#xff0c;安装好IDEA后需要修改maven…

速达5000出现计算成本数据溢出的问题

算成本提示某货品成本溢出处理方法&#xff0c;该问题是由于货品成本异常&#xff0c;成本上亿或者负亿造成的&#xff1b; 1.首先通过语句&#xff1a;select * into tmp_goods from l_goods where ABS(aprice)>100000&#xff0c;把成本价格超过10万的货品资料取出&#x…

Win32页上的所有控件属性与方法

Win32页上的所有控件。该页控件是在32位Win系统中的一些基本控件&#xff0c;如果你选择开发CLX程序&#xff0c;则在控件面板上不会显示该页TTabControl属性DisplayRect&#xff1a;只定该控件客户区的一个矩形HotTrack&#xff1a;设置当鼠标经过页标签时&#xff0c;它的字是…

收银员英文缩写_如何在没有收银员的苹果商店购买东西

收银员英文缩写If you visit an Apple Store in the hopes of buying a new iPhone, iPad, or MacBook, you have to talk to an Apple employee, since all the expensive products are kept in the back. However, if it’s just an accessory you want, you can buy it with…

上传文件 connection reset

适用于&#xff1a;Windows 7&#xff0c;Windows Server 2003&#xff0c;Windows Server 2008&#xff0c;Windows Server 2008 R2&#xff0c;Windows Vista 由于FTP的工作方式&#xff0c;在防火墙后面的服务器上使用文件传输协议&#xff08;FTP&#xff09;服务会产生一系…

分区表备份工具下载

分区表一般很少被破坏&#xff0c;然而一旦出问题&#xff0c;想要恢复卷上的数据就非常麻烦。这个工具软件是我以前经常用的&#xff0c;卷分区被误删除后可在几分钟内得到恢复&#xff0c;非常方便。使用说明请参见&#xff1a;[url]http://www.sansky.net/html/2007-05-23-4…