定制linux系统

摘要

定制linux系统:通过裁剪现有Linux系统(Cent0S7.6),创建属于自己的min Linux小系统,可以加深我们对linux的理解。

一、linux的启动流程

制作Linux小系统之前,再了解一下Linux的启动流程:

  1. 首先Linux要通过自检,检查硬件设备有没有故障
  2. 如果有多块启动盘的话,需要在BIOS中选择启动磁盘
  3. 启动MBR中的bootloader引导程序
  4. 加载内核文件
  5. 执行所有进程的父进程、老祖宗systemd
  6. 欢迎界面

在Linux的启动流程中,加载内核文件时关键文件:

  • kernel文件:vmlinuz-3.10.0-957.el7.x86_642 )
  • initrd文件: initramfs-3.10.0-957.el7.x86_64.img

二、定制原理

  • 简单来说,就是将原来linux目录中的内容复制到新的硬盘当中,然后将新的硬盘作为定制linux的硬盘

思路分析:

  1. 在现有的Linux系统(centos7.6)上加一块硬盘/dev/sdb,在硬盘上分两个分区,一个是/boot,一个是/,并将其格式化。需要明确的是,现在加的这个硕盘在现有的Linux系统中是/dev/sdb但是,当我们把东西全部设置好时,要把这个硬盘拔除,放在新系统上,此时,就是/dev/sda
  2. 在/dev/sdb硬盘上,将其打造成独立的Linux系统,里面的所有文件是需要拷贝进去的
  3. 作为能独立运行的Linux系统,内核是一定不能少,要把内核文件和initramfs文件也一起拷到/dev/sdb上
  4. 以上步骤完成,我们的自制Linux就完成,创建一个新的linux虚拟机,将其硬盘指向我们创建的硬盘,启动即可

三、步骤

1. 添加硬盘并挂载

为原先的linux系统添加硬盘sdb,分区,格式化,然后挂载

(1) 添加硬盘

具体的方法可以查看这篇博客,这里不多赘述,只讲关键内容

大小就选择20G

起一个可以识别的名字

然后可以查看,添加成功

lsblk

(2) 给硬盘分区

fdisk /dev/sdb

不要忘了最后输入w写入并退出

  • 再次查看
lsblk

(3) 格式化两个分区

mkfs.ext4 /dev/sdb1
mkfs.ext4 /dev/sdb2

可以看到每个分区都有了UUID

lsblk -f

(4) 挂载

  1. 首先创建文件
mkdir -p /mnt/boot /mnt/sysroot
  1. 然后挂载
mount /dev/sdb1 /mnt/boot
mount /dev/sdb2 /mnt/sysroot
  1. 可以看到挂载成功了

2. 拷贝文件至目标硬盘

(1) 安装grup

grup指定了启动时哪些文件是启动的,哪些文件是根目录

  1. 安装grup
grub2-install --root-directory=/mnt /dev/sdb
  1. 检查是否安装成功
hexdump -C -n 512 /dev/sdb

出现如下内容


(2) 复制必要文件

  1. 复制boot启动时用的文件
cp -rf /boot/* /mnt/boot
  1. 库文件是必须使用的,要不然其他的跑不起来
cp /lib64/*.* /mnt/sysroot/lib64/
  1. 还有bash文件
cp /bin/bash /mnt/sysroot/bin/

(3) 修改启动配置文件

修改 grub2/grub.cfg文件,这个文件是指定哪些是启动分区,哪些是根目录盘的

要做的修改如下:

  1. 将原先分区的UUID改成新的UUID
  2. 添加内容来阻止操作系统按照原来的方式启动,而是使用自定义的方式

cd /mnt/boot/grub2/
vim grub2/grub.cfg

如图

将这四处的7333ef50-901e-4223-9627-cdca5bf81230全部改为3e983422-c975-45e2-bf44-66e2a2a5d1db,另一对也同理


然后添加内容,找到以linux开始的两行

(4) 创建其余目录

虽然只有/目录有用,但是其他目录还是需要的,这里在 /mnt/sysroot目录下创建其余目录

mkdir -pv /mnt/sysroot/{etc/rc.d,usr,var,proc,sys,dev,lib,lib64,bin,sbin,boot,srv,mnt,media,home,root}

这个指令中间不能有空格

3. 创建新的虚拟机并设置使用目标硬盘

  1. 创建新的虚拟机,移除原来的硬盘

  1. 添加新的硬盘

选择之前创建的硬盘

可以看到有如下指令

4. 添加指令

  1. 定制的linux很多指令都不能用,比如ls reboot等,可以将需要的指令拷贝到对应的目录
  2. 如果要拷贝指令,重新进入到原来的 linux系统拷贝相应的指令即可,比较将/bin/ls拷贝到/mnt/sysroot/bin,将/sbin/reboot 拷贝到/mnt/sysroot/sbin
mount /dev/sdb2 /mnt/sysroot/
cp /bin/ls /mnt/sysroot/bin/
cp /bin/systemctl /mnt/sysroot/bin/
cp /sbin/reboot /mnt/sysroot/sbin
posted @ 2023-07-27 23:01  Crispy·Candy  阅读(494)  评论(0编辑  收藏  举报