首页 > 系统相关 >定制linux系统

定制linux系统

时间:2023-07-27 23:24:20浏览次数:43  
标签:系统 Linux mnt dev linux 定制 sysroot 硬盘

摘要

定制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

标签:系统,Linux,mnt,dev,linux,定制,sysroot,硬盘
From: https://www.cnblogs.com/CrispyCandy/p/17586378.html

相关文章

  • Window系统下模拟Linux环境的工具
    [b][color=red]强大的Cygwin[/color][/b]:[url]http://cygwin.com/install.html[/url]OracleunderCygwin-EduUnix[url]http://eduunix.ccut.edu.cn/index2/html/oracle/O'Reilly%20-%20Perl.For.Oracle.DBAs.eBook-LiB/oracleperl-CHP-2-SECT-4.......
  • linux内核:升级内核
    摘要如何下载linux内核如何升级linux内核一、linux内核获取内核地址:https://www.kernel.org/下载&解压内核ls二、linux内核升级相关指令指令功能说明选项uname-a查看当前的内核版本yuminfokernel-q检测内核版本,显示可以升级的内核......
  • linux shell编程入门
    摘要介绍shell是什么shell快速开始一、基本概念1.shell是什么Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序用户可以用Shell来启动、挂起、停止甚至是编写一些程序。2.shell脚本|执行方式脚本格式要求脚本以#!/b......
  • linux日志管理服务:rsyslogd | 日志管理服务配置文件 | 日志类型 | 日志级别 | linux添
    摘要介绍linux的日志管理服务关于linux的日志可以查看这篇博客一、rsyslogd介绍CentOS7.6日志服务是rsyslogd,CentOS6.x日志服务是syslogd,rsyslogd功能更强大。rsyslogd的使用、日志文件的格式,和syslogd服务兼容的。二、指令1.查看服务是否自启动指令功能说......
  • linux日志轮替:日志轮替配置文件 | 设置日志轮替 | 日志轮替原理
    摘要介绍linux日志轮替logrotate原理及操作一、linux日志轮替日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除目的是防止一个文件保存的日志太多:定时将日志文件的内容做好备份二、日志轮替文件命名centos7使......
  • linux内存日志 | journalctl指令
    摘要一、linux内存日志就是有些日志仅仅在系统允许过程中写在内存当中,但是并不会保存到硬盘当中重启后,内存日志就会情况二、指令指令功能说明选项journalctl查看全部journalctl-n3查看最新3条journalctl--since19:00--until19:10:10查看起始......
  • 买产品25万,再开发500万!企业如何逃离定制开发陷阱?
    背景我们于零几年购买了这款产品,产品仅花费25万。加上定制开发,第一次总共花费50万。随后,十几年间,经历多次改造和迭代,我们在这个系统上总计花费500万!因为早期企业财力有限,购买的产品是比较便宜的产品。其模块化和接口的丰富度都很有限,所以导致后期改造非常痛苦,花费非常大!——这......
  • linux shell判断条件
    摘要shell的if或者while语句中的判断条件,可以用于if,for,while语句中判断条件判断类型符号说明举例字符串比较=字符串比较(数字比较不用=)"ok"="ok"整数比较-ltlittle小于1-lt2-lelittleequal小于等于1-lt1-eqequal等于1-lt1-......
  • linux shell read函数
    摘要shell中使用read读取控制台输入一、基本语法read[选项][参数]选项选项说明参数-p指定读取值的提示符(就是一段文字)字符串(提示符)-t指定读取值时等待的时间(秒)),如果没有在指定的时间内输入,就不再等待了数字,单位是s变量指定读取值的变量名二......
  • linux shell函数:定义函数 | 调用函数
    摘要介绍shell如何定义并调用函数的一、基本语法定义函数[function]funcname[()]{ Action; [returnint;]}调用函数functame[值]二、快速入门案例1:计算输入两个参数的和,getSum#!/bin/bash#计算输入两个参数的和,getSum#定义函数getSumfunctionge......