怎么自建一个Linux系统

如题,本文讲解如何自己制作一个小型Linux系统
先贴一下大概步骤:

  1. 准备一块硬盘
  2. fdisk给硬盘分区(/boot一个,/一个)、格式化
  3. 挂载/boot分区
  4. grub-install安装grub文件
  5. 生成vmlinuz、initramfs
  6. 建grub.conf文件
  7. 挂载根,创建文件系统
  8. 复制其他脚本及依赖文件、驱动

首先,在现有的centos6中添加一块虚拟硬盘(当然,你也可以用U盘代替),

楼主用的vm,这里叫8.0是为了做标记,等做完后找得到。

怎么自建一个Linux系统
ok,然后启动,上图中也可以看出,我原来就一块硬盘,所以新添加的这块默认就是/dev/sdb了。执行lsblk指令看也确实是
怎么自建一个Linux系统
接下来对sdb进行分区,至少需要两个分区,一个/boot存放系统引导信息,一个/。
怎么自建一个Linux系统
保存退出,lsblk再看一下
怎么自建一个Linux系统
然后需要对新建的分区进行格式化,# mkfs.ext4 /dev/sdb1对sdb1和sdb2执行相应格式化。
怎么自建一个Linux系统
格式化完就要挂载分区了,此时也可以执行blkid检查分区:
怎么自建一个Linux系统
新建目录,安装grub,子目录最后一级必须为/boot,因为grub-install生成grub stage2文件时默认会找boot目录。

# mkdir -p /mnt/boot
# mount /dev/sdb1 /mnt/boot
# grub-install --root-directory=/mnt/ /dev/sdb

怎么自建一个Linux系统
现在/boot/grub/有了,但是/boot下还缺内核文件vmlinuz和伪文件盘initramfs,这个时候可以直接从当前系统中拷贝:

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

怎么自建一个Linux系统
此时grub stage2还差一个0配置文件grub.conf,手动新建一个(当然,复制过去修改也行)

# vim /mnt/boot/grub/grub.conf
default=0
timeout=5
title centos6.9 made by yiyu 
root (hd0,0)
kernel /vmlinuz ro root=UUID="e9895eea-04e9-4617-8ce9-64e88426cc7d" quiet selinux=0 init=/bin/bash
initrd /initramfs.img
# 

对这个文件做一下说明:title是启动选择的时候显示的,root (hd0,0),这个root指的/boot所在分区,(hd0,0)代表第一块硬盘的第一个分区,kernel和initrd就是上面生成的那两个grub关键文件了,ro是只读的意思,这里的root=就是指定真正的根分区了,selinux=0是为了让引导时selinux不打标签,这样启动快一些,原来的centos6默认启动的第一个程序是init,但它附带加载的脚本太多,所以这里用init=来指定第一个启动程序为bash。
linux=kernel+tools,现在kernel已经做好了,还差根文件系统和命令工具,一步一步来:

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

再复制工具和工具依赖包,例如bash、ls、ps、wc、ping
注:bash一定要复制过去!
怎么自建一个Linux系统
这里我自己写的一个用来复制command的脚本,在这里贴一下吧:

#!/bin/bash
#
#复制指定命令到指定目录
todir=/mnt/rootfs
while true;do

read -p "please input an excutable command: " cmd
        if [ "$cmd" == "quit" ];then
                break
        fi
        commd=`which $cmd`
        fix=`echo "$commd" |sed -r 's/(^.*)\/[[:alpha:]]+$/\1/'`
        cd ${todir}${fix} &>/dev/null || mkdir -p ${todir}${fix}
        cp -pf $commd ${todir}${fix}
        ldd $commd |sed -r 's/.*[[:space:]](\/+.*)[[:space:]].*/\1/'|grep / | \
                        while read line;do
                                libfix=`echo "$line" |sed -r 's/(^.*)\/[[:alpha:]]+$/\1/'`
                                cd ${todir}${libfix} &>/dev/null || mkdir -p ${todir}${libfix}
                                cp -pf "$line" ${todir}${libfix}
                                done

done
echo finished

最后用tree看一下:
怎么自建一个Linux系统
也可以把网卡驱动添加进去,

# modinfo e1000 ##查看filename得到驱动地址
# cp /lib/modules/2.6.32-696.el6.x86_64/kernel/drivers/net/e1000/e1000.ko /mnt/rootfs/lib/
# sync
# sync
# poweroff

创建完成了,现在来测试一下,找到这个磁盘文件
怎么自建一个Linux系统
然后新建一个虚拟机,现在刚刚找到的那个磁盘
怎么自建一个Linux系统
一路走下去,完成后开机
怎么自建一个Linux系统
现在就看到了之前建的title了,进去之后是这样子的
怎么自建一个Linux系统
到这里,一个简单的linux系统就完成了。