diy自己的linux

  1. 准备一台liunx的机器,我用的是liunx虚拟机

  2. 单独加载一块硬盘,我加载了一块20G的硬盘,然后用fdisk /dev/sdb进行分区,sdb1用来作为将来系统的/boot分区,所有100M就可以了,sdb2用来作为将来系统的/分区,我给了10G。然后将两个分区格式化为ext4系统。

  3. mkdir /mnt/boot

    mkdir /mnt/sdc2

    mount /dev/sdb1 /mnt/boot

    mount /dev/sdb2 /mnt/sdc2

    wKioL1fT4zWRWZhsAABMXri2n-Q444.jpg

4.执行grub-install命令,黄色箭头是指将来要作为/ 的目录,红色箭头是表示将grub相关文件写入/sdb磁盘中(grub相关文件是用来引导启动内核的关键文件)

wKioL1fT5YnwHc9RAAASxJCMQNQ554.jpg

5.拷贝内核文件和文件系统文件到/boot

wKiom1fT58Cxsv0CAAAaYZZ4cMM678.jpg

6.编辑/mnt/boot/grub/grub.conf文件

wKiom1fT6S-AnlWEAAAoy9TbgIo778.jpg

第一行:出现列表时,背景图片的路径(图片的制作方法请看我相关的文章)

第二行:内核的名字

第三行:将来从第一块硬盘第一个扇区启动

第四行:启动内核文件,只读,/目录在/dev/sda2分区 此时selinux关闭 init程序读取/bin/bash

第五行:根目录可用前的一个临时文件系统,initrd与内核绑定在一起,并作为内核引导过程的一部分进行加载。内核然后会将这个 initrd文件作为其两阶段引导过程的一部分来加载模块,这样才能稍后使用真正的文件系统,并挂载实际的根文件系统。

7.写挂载文件

wKiom1fT7QjC6H5IAAAbvfupWqs499.jpg

8.在/mnt/sdc2/下建根目录中的文件夹

wKioL1fT8Z6C9lbvAAAcynQndHg665.jpg

9.利用脚本拷一些命令到新的目录下(在/mnt/sdc2下执行此命令)

wKioL1fT8pmjB_ewAABi41IjshU563.jpg

脚本内容如下:


#!/bin/bash



ch_root="/mnt/sdc2"

[ ! -d $ch_root ] && mkdir $ch_root


bincopy() {

    if which $1 &>/dev/null; then


        local cmd_path=`which –skip-alias $1`

        local bin_dir=`dirname $cmd_path`

        [ -d ${ch_root}${bin_dir} ] || mkdir -p ${ch_root}${bin_dir}

        [ -f ${ch_root}${cmd_path} ] || cp $cmd_path ${ch_root}${bin_dir}

        return 0

    else

        echo "Command not found."

        return 1

    fi

}



ch_root="/mnt/sdc2"

[ ! -d $ch_root ] && mkdir $ch_root


bincopy() {

    if which $1 &>/dev/null; then


        local cmd_path=`which –skip-alias $1`

        local bin_dir=`dirname $cmd_path`

        [ -d ${ch_root}${bin_dir} ] || mkdir -p ${ch_root}${bin_dir}

        [ -f ${ch_root}${cmd_path} ] || cp $cmd_path ${ch_root}${bin_dir}

        return 0

    else

        echo "Command not found."

        return 1

    fi

}


libcopy() {

    local lib_list=$(ldd `which –skip-alias $1` | grep -Eo '/[^[:space:]]+')

    for loop in $lib_list;do

        local lib_dir=`dirname $loop`

        [ -d ${ch_root}${lib_dir} ] || mkdir -p  ${ch_root}${lib_dir}

        [ -f ${ch_root}${loop} ] || cp $loop ${ch_root}${lib_dir}

    done

}



read -p "Please input a command or quit: " command


while [ "$command" != "quit" ];do

    if bincopy $command ;then

        libcopy $command

    fi

    read -p "Please input a command or quit: " command

done


10.我们此时可以将此块硬盘取下,挂载到一个新的liunx系统中去,测试是否能正常启动

wKiom1fT86LSN4LHAACkVmE8E00759.jpg

新虚拟机

wKioL1fT9FTASiA3AAB7G9-yGXg617.jpg

11.启动新的虚拟机

wKiom1fT9LTzV6DbAADcGxP6Tkk264.jpg

此时,我们可以看到内核的名字是zebralinux,也就是我们在/mnt/boot/grub/grub.conf中title所对应的行,背景图片也被换了,说明暂时系统是好的,可以继续进行

wKiom1fT9ZPAaCWIAAAcuaLhJAg278.jpg

因为我们制定init=/bin/bash,所有开机后执行的第一个程序就进入到bash中,在此界面中我们可以测试其他命令,有些命令应该可用,有些有依赖其他文件的命令或许此刻或用不了,我们只是做了个简单linux。

wKioL1fT9xbgVaO9AADLtiIkPGc875.jpg我们第一次mount时,sda1没有被挂载上。当我们挂载时,会报错,但仍能被挂载上。之后,我们就可以进入到/下的目录和/boot目录中了

原创文章,作者:zebra930,如若转载,请注明出处:http://www.178linux.com/46096

(0)
zebra930zebra930
上一篇 2016-09-14 11:02
下一篇 2016-09-14 11:02

相关推荐

  • corosync+pacemaker+drbd+mysql来实现mysql的高可用和数据的同步

    实现拓扑图: 实验流程: 先对两主机安装上corosync和pacemaker 两主机安装drbd服务,并且设置好drbd的组设备 选择drbd主节点上,进行数据库的初始化 进行资源的定义和配置 测试 实验前,我们还需要做一些准备工作: 1、时间必须保持同步   使用ntp服务器 2、节点必须名称互相通信    解析节点名称 &…

    Linux干货 2015-11-10
  • HAProxy基于Keepalived做高可用并简单实现Web站点的动静分离

    HAProxy简介   HAProxy 是一个免费的,非常快速和可靠的解决方案,提供 高可用性, 负载均衡和代理对TCP和HTTP的应用程序。它特别适用于非常大流量网站。多年来,它已成为标准开源的负载均衡,现在随最主流的Linux发行版,并且通常默认的云平台部署。 实验描述 1、本实验主要是在前端放置两台通过Keepalived做了高可用的HAProxy反向…

    Linux干货 2016-04-16
  • LNMP (nginx+php-fpm)

    Nginx简明: 特性: 采用模块化设计,较好的扩展性;高可靠性  master/worker支持热部署:不停机更新配置文件、更换日志文件、列新服务器版本低内存消耗:10000个keep-alive连接模式下的非活动连接仅消耗2.5M内存;event-dreiven,aio,mmap基本功能;静态资源的web服务器http协议反向代理服务器;pop3/ima…

    2017-06-28
  • 教你如何在Fedora,CentOS,RHEL中检查RPM包的依赖性

    我们都知道,在基于红帽的Linux系统中,一个RPM包,需要把先将它依赖的其他包安装好才能正常的工作。对于终端用户,RPM的安装、更新、删除中存在的依赖关系已经被工具透明化了(如 yum或 DNF等)。但如果你是系统管理员或者RPM包的管理员,你需要谙熟RPM包的依赖关系,以便及时更新、删除适当的包来保证系统的正常运行。 在本教程中,我将教大家如何检查RPM…

    Linux干货 2015-02-10
  • 文本查看类命令

    文本查看相关的命令:1.  cat – 串连文件,并以标准输出显示语法:cat [OPTION]… [FILE]… 常用选项 选项 | 含义—— | ——-n | 在显示文件内容时打印行号示例:~]# cat -n /etc/rc.d/init.d/functions显示/e…

    2017-09-07
  • 用户权限管理

    描述: 用户在系统上的操作受到权限的约束,例如对文件或者目录进行查看、修改、复制、删除等操作时,由文件或者目录对应的操作的权限所决定的。 在root的家目录下创建一个普通文件和目录并查看其属性: [root@localhost ~]# echo 123 > file1 [root@localhost&n…

    Linux干货 2016-08-04