怎么自建一个Linux系统

本文详细讲解自制小型Linux系统的步骤。先准备硬盘,用fdisk分区、格式化,挂载/boot分区,安装grub文件,生成vmlinuz、initramfs,建grub.conf文件,挂载根并创建文件系统,复制脚本、依赖文件、驱动,最后测试新建虚拟机,完成简单Linux系统制作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

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

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

在这里插入图片描述
现在/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

在这里插入图片描述
此时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一定要复制过去!
在这里插入图片描述
这里我自己写的一个用来复制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看一下:
在这里插入图片描述
也可以把网卡驱动添加进去,

# 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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值