自制Linux精简系统

本系统是基于CentOS6.8

步骤如下:

自制Linux系统

(1)分区并创建文件系统

    fdisk /dev/sdb

    分两个必要的分区

    /dev/sdb1 对应 /boot  /dev/sdb2 对应根 /

    创建文件系统 mkfs.ext4 /dev/sdb1   mkfs.ext4 /dev/sdb2

(2)挂载boot分区

    mkdir /mnt/boot

    mount /dev/sdb1 /mnt/boot

(3)安装grub

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

(4)恢复内核和initramfs文件

    cp /boot/vmlinuz-2.6.32-642.el6.x86_64    /mnt/boot/

    cp /boot/initramfs-2.6.32-642.el6.x86_64.img    /mnt/boot

(5)建立grub.conf

    vim /mnt/boot/grub/grub.conf

        default=0

        timeout=5

        title=nineven linux

        root (hd0,0)

        kernel /vmlinuz-2.6.32-642.el6.x86_64 root=/dev/sda2 selinux=0 init=/bin/bash

        initrd /initramfs-2.6.32-642.el6.x86_64.img

(6)挂载跟系统

    mkdir /mnt/sysroot

    mount /dev/sdb2 /mnt/sysroot

    mkdir -pv /mnt/sysroot/{etc,lib,lib64,bin,sbin,tmp,var,usr,sys,proc,opt,home,root,boot,dev,mnt,media}

    复制bash和相关的库文件

    复制相关命令及相关库文件,比如: ls ,cat ,vim ,reboot ,fdisk ,mount ,hostname 等待

(7)验证bash是否可用

    chroot /mnt/sysroot

(8)同步数据到磁盘上

    sync 命令,多执行几次



操作流程如下:


我用的是虚拟机模拟的

(1) 先添加一块硬盘,然后通过

1
echo  "- - -"  >>  /sys/class/scsi_host/host2/scan

扫描出新增的硬盘

blob.png

(2)分区

blob.png

(3)格式化文件系统

blob.png

blob.png

(4)boot 分区操作

blob.png

blob.png

(5)根分区操作

blob.png

blob.png

复制bash和相关的库文件,我用的是提前写的脚本,脚本请往后看

blob.png

blob.png

验证成功,最后检查一下 /mnt/sysroot/etc/fstab 和 /mnt/boot/grub/grub.conf 文件,最后确认一下配置是否正确

blob.png

然后新建一个虚拟机,用这块磁盘作为系统盘,检查一下是否可用开机

开机界面

blob.png

blob.png

由于是精简系统,好的功能都用不了

blob.png



复制库文件及命令的脚本

1
[root@localhost Desktop] # vim /boot/cmd.sh
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
#!/bin/bash
flag=1
read  -p  "please input a path that you want to copy : "  mubiaodir
panduanlujing(){
     path=$( dirname  $mubiaodir$ki)
     if  [ ! -e $path ]; then
         mkdir  -p $path
     fi
    cp   $ki $mubiaodir$ki &>  /dev/null  || flag=0
}
kuwenjian(){
     for  ki  in  $(ldd $( which  --skip- alias  $cmdname) |  sed  -rn  "s@.*[[:space:]]([/].*)[[:space:]].*@\1@p" ) $( which  --skip- alias  $cmdname); do
         panduanlujing
     done
}
while  true  ; do
read  -p  "please input a command name , quit is exit:"  cmdname
if  "$cmdname"  ==  "quit"  -o  "$cmdname"  ==  "exit"  ]; then
     break
else
     if  (ldd $( which  --skip- alias  $cmdname)) &>  /dev/null  ; then
         kuwenjian
         [  $flag - eq  1 ] &&  echo  "复制成功"  ||  echo  "权限不足,复制失败"
     else
         echo  "错误的命令名称"
     fi
fi
done

blob.png

转自: http://liuyuworld.com/2016/09/10/%e8%87%aa%e5%88%b6linux%e5%be%ae%e7%b3%bb%e7%bb%9f/