一)从linux本身系统上裁剪出来一个小系统。

博客目的和实现功能:

从本身存在的系统上新添加一块硬盘,做一个grub引导,然后把新加的硬盘做好后,加上网卡驱动,放到其余的主机上能正常进入使用,ping通外网即可。

1)先挂载一个新的磁盘——》给磁盘分区-》格式化-》挂载。

/dev/sdb1               1          14      112423+  83  Linux
/dev/sdb2              15         146     1060290   83  Linux
mke2fs -t ext4 /dev/sdb1
mke2fs -t ext4 /dev/sdb2

2)创建两个目录,挂载使用。

mkdir /mnt/{boot,sysroot}
mount /dev/sdb1 /mnt/boot/
mount /dev/sdb2 /mnt/sysroot/

3)安装grub到目标磁盘。

[root@station106 ~]# 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/sda
(hd1)   /dev/sdb

4)复制源主机上的引导程序到目标磁盘上。

cp /boot/vmlinuz-2.6.32-358.el6.x86_64 /mnt/boot/vmlinuz
cp /boot/initramfs-2.6.32-358.el6.x86_64.img /mnt/boot/initramfs.img

5)创建一些文件放到根系统上。

[root@station106 ~]# mkdir -pv /mnt/sysroot/{etc/rc.d,usr,var,proc,sys, dev, lib, lib64, bin, sbin, boot, srv, mnt, media, home, root}
mkdir: created directory `/mnt/sysroot/{etc'
mkdir: created directory `/mnt/sysroot/{etc/rc.d,usr,var,proc,sys,'
mkdir: created directory `dev,'
mkdir: created directory `lib,'
mkdir: created directory `lib64,'
mkdir: created directory `bin,'
mkdir: created directory `sbin,'
mkdir: created directory `boot,'
mkdir: created directory `srv,'
mkdir: created directory `mnt,'
mkdir: created directory `media,'
mkdir: created directory `home,'
mkdir: created directory `root}'

6)移植bash和一些需要的命令道根系统中。让裁剪好的小系统也能正常使用。

我这里用的脚本实现的。

#!/bin/bash
target=/mnt/sysroot(定义一个变量)
read -p "enter a command:" cmd(交互模式)
clearcmd() {              (定义个函数,函数名字为clearcmd)
if which $cmd &> /dev/null;then  (如果输出的命令存在则放到位桶)
cmdpath=`which --skip-alias $cmd`   (这里特殊用法--skip-alias是为了跳出别名)
else         (不存在就显示not,则以退出码为5退出)
echo "Not such command"
exit 5
fi
}
cmdcopy() {     (在定义一个函数,函数名为cmdcopy)
cmddir=`dirname $cmdpath` (截取命令的头文件)
[ -d ${target}{cmddir} ] || mkdir -p ${target}${cmddir}
判断/mnt/sysroot下的截取的命令头文件是否存在。或者创建。
[ -f ${target}${1} ] || cp $1 ${target}${cmddir}
检测文件是否存在$1传递的是cmdpath。
}
libcopy() {   (定义一个函数,名字为,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 true;do  为真进入循环
read -p "enter a command:" cmd
if [ "$cmd" == 'quit' ];then  等于quit就退出。
echo "quit"
exit 6
fi
clearcmd $cmd  调用第一个函数。为5就是不存在跳出循环
[ $? -eq 5 ] && continue
cmdcopy $cmdpath 调用函数
libcopy $cmdpath调用函数
done

执行这个脚本bash  cp.sh复制过去一些需要的命令和库文件,需要用到mount,ls,ifconfig,route,ping。

7)提供grub配置文件。

vim /mnt/boot/grub/grub.conf
default=0  默认启动第一个内核
timeout=5  启动显示时间
title shunzi Linux  标题
root (hd0,0)  第一个磁盘的第一个分区
kernel /vmlinuz ro root=/dev/sda2 quiet selinux=0 init=/bin/bash 内核文件
initrd /initramfs.img  额外驱动文件。

8)添加init程序。实现模块加载能ping通外网。

vim /mnt/sysroot/sbin/init
#!/bin/bash
echo -e "welcome to \033[34 lixianshun Tiny\033[0m Linux"
mount -n -t proc proc /proc
mount -n -t sysfs sysfs /sys
insmod /lib/modules/e1000.ko
[ $? -eq 0 ] && echo -e "Load e1000 module succeeded [\033[32mOK\033[0m ]"
ifconfig lo 127.0.0.1/8
ifconfig eth0 192.168.1.10/24
route add -net 0.0.0.0  gw 192.168.1.253
mount -n -o remount,rw /dev/sda2 /
/bin/bash

添加权限chmod +x sbin/init

添加过init程序后,grub.conf里的init=/bin/bash改为/sbin/init,不改默认也会需找init。

9)把源主机上的网卡驱动复制已到目主机。

mkdir -p /mnt/sysroot/lib/modules/
cp /lib/modules/2.6.32358.el6.x86_64/kernel/drivers/net/e1000/e1000.ko /mnt/sysroot/lib/modules/

10)关闭源系统,启动另一台宿主机,把做好的这个硬盘放上,直接启动。进入到了bash界面,里面能用的命令比较少,因为这里取决于你添加的命令。可以测试ping外网。和查看路由。发现都是ok的。

转载于:https://blog.51cto.com/shunzi/1367850

裁剪Linux小系统相关推荐

  1. 私人定制---打造属于自己的linux小系统

    为什么80%的码农都做不了架构师?>>>    一.前言 linux操作系统至1991.10.5号诞生以来,就源其开源性和自由性得到了很多技术大牛的青睐,每个linux爱好者都为其贡 ...

  2. Centos 6.8 为自己打造Linux小系统

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

  3. 为自己打造Linux小系统

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

  4. 基于busybox的Linux小系统制作 (initrd)

    我们有时候有需要在busybox基础上,制作linux,可是却不知道具体怎么做,这里将对基于busybox的linux小系统制作做出详细的步骤说明. 准备环境: 1.一个Redhat完整系统的虚拟机, ...

  5. 编译内核,busybox,dropbear组装linux小系统

    应用程序使用以下软件 busybox提供命令环境 dropbear提供ssh服务实现远程管理. 查看本物理机的硬件,来确认编译内核时选择相应的驱动.硬件信息获取方法: cat /proc/cpuinf ...

  6. rootfs 制作ubuntu_Ubuntu12笔记: 基于busybox的Linux小系统制作

    开发环境:Ubuntu 12.04 开发板:mini2440 256M NandFlash  64M SDRAM 交叉编译器:arm-linux-gcc 4.4.3点此可下载 BusyBox版本:bu ...

  7. linux下大文件裁剪,Linux系统裁剪(2)之Linux系统裁剪

    1.这里使用交叉编译的思想,我在Redhat6.4上添加一个硬盘,将该硬盘分区以及安装好MBR之后,再将其挂载到另一个新建的虚拟机上,注意该虚拟机在创建时我只使用了这一个处理好的硬盘. 2.怎么添加新 ...

  8. flash小黄油安卓_体验谷歌的Windows、安卓、Linux三合一系统,一个U盘足以

    「本期内容标签」 安卓 iOS 电脑 小程序 网站 游戏 教程 前段时间很火的新闻当属华为的鸿蒙系统,说的是系统将在web端.电脑端.手机端通用一套,也就是真正的全平台打通. 相信未来的系统肯定是这样 ...

  9. deepin(深度linux)dde-dock系统监控小插件(网速CPU内存)

    转载自deepin(深度linux)dde-dock系统监控小插件(网速CPU内存),仅用作个人学习备份,Mark一下 花了一周时间,研究了dde-dock官方插件开发文档和sonichy大神的项目, ...

最新文章

  1. 英语影视台词---四、Sideways
  2. python安装orm_Python ORM框架之 Peewee入门
  3. 信号分解:标架、对偶标架、紧标架
  4. 2017年10月08日 上学
  5. 经典的JAVA面试题
  6. linux cpu load 详解,理解linux cpu load - 什么时候应该担心了
  7. 53 - II. 0~n-1中缺失的数字
  8. kvm 网络配置及克隆
  9. calibre部署指南:docker一键部署calibre在线书库
  10. 国家企业信用信息查询工商数据爬虫
  11. ​【Flutter小记7】​Mac M1 使用 pod install编译常见两种错误解决方案(CocoaPod Error | LoadError)
  12. Maximo 容器化改造试验
  13. 以AI赋能企业数智化转型 容联“云端”服贸会完美收官
  14. 树的直径,树的中心,树的重心
  15. 畅捷通T+ v17任意文件上传漏洞复现
  16. 2018-08-08 Mac使用中的一些实用设置
  17. unity之环状图片轮播
  18. gridview ItemTemplate下绑定数据
  19. 数字孪生银行项目经典案例
  20. 中国服务器芯片龙头股票,4只中国芯片龙头股

热门文章

  1. c语言如何跟进自定义赋值,用最简单的C语言编写自定义函数之数字后移
  2. wsdl2java 工具下载_利用wsdl2java工具生成webservice的客户端代码
  3. apache字体文件跨域_apache如何解决跨域资源访问
  4. Java实用教程笔记 子类与继承2
  5. matlab 极坐标作图polar
  6. jupyter notebook上完美运行tensorflow、keras
  7. 关于XDC约束文件,你需要知道的几点
  8. Ellipse(椭圆)
  9. 【 C 】最容易误判的优先级问题
  10. php取得客户端信息类