Linux 高级篇-定制自己的Linux 系统

Linux 高级篇-定制自己的Linux 系统

基本介绍

通过裁剪现有Linux 系统(CentOS7.6),创建属于自己的min Linux 小系统,可以加深我们对linux 的理解。利用centos7.6,搭建一个小小linux 系统, 很有趣。

基本原理

启动流程介绍:

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

1、首先Linux 要通过自检,检查硬件设备有没有故障

2、如果有多块启动盘的话,需要在BIOS 中选择启动磁盘

3、启动MBR 中的bootloader 引导程序

4、加载内核文件

5、执行所有进程的父进程、老祖宗systemd

6、欢迎界面

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

1)kernel 文件: vmlinuz-3.10.0-957.el7.x86_64
2)initrd 文件: initramfs-3.10.0-957.el7.x86_64.img

制作min 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 虚拟机,将其硬盘指向我们创建的硬盘,启动即可

示意图

在这里插入图片描述

制作自己的min linux(基于CentOS7.6)

  1. 首先,我们在现有的linux添加一块大小为20G的硬盘

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

点击完成,就OK了, 可以使用 lsblk 查看,需要重启

  1. 添加完成后,点击确定,然后启动现有的linux(centos7.6)。 通过fdisk来给我们的/dev/sdb进行分区

加粗的命令是我们输入的如果没有看到命令就直接回车

1 [root@localhost ~]# fdisk /dev/sdb

2 Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel

3 Building a new DOS disklabel with disk identifier 0x4fde4cd0.

4 Changes will remain in memory only, until you decide to write them.

5 After that, of course, the previous content won’t be recoverable.

6

7

8 Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

9

10

11 WARNING: DOS-compatible mode is deprecated. It’s strongly recommended to

12 switch off the mode (command ‘c’) and change display units to

13 sectors (command ‘u’).

14

15

16 Command (m for help): n

17 Command action

18 e extended

19 p primary partition (1-4)

20 p

21 Partition number (1-4): 1

22 First cylinder (1-2610, default 1):

23 Using default value 1

24 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +500M

25

26

27 Command (m for help): n

28 Command action

29 e extended

30 p primary partition (1-4)

31 p

32 Partition number (1-4): 2

33 First cylinder (15-2610, default 15):

34 Using default value 15

35 Last cylinder, +cylinders or +size{K,M,G} (15-2610, default 2610):

36 Using default value 2610

37 #查看分区

38 Command (m for help): p

39

40

41 Disk /dev/sdb: 21.5 GB, 21474836480 bytes

42 255 heads, 63 sectors/track, 2610 cylinders

43 Units = cylinders of 16065 * 512 = 8225280 bytes

44 Sector size (logical/physical): 512 bytes / 512 bytes

45 I/O size (minimum/optimal): 512 bytes / 512 bytes

46 Disk identifier: 0x4fde4cd0

47

48

49 Device Boot Start End Blocks Id System

50 /dev/sdb1 1 14 112423+ 83 Linux

51 /dev/sdb2 15 2610 20852370 83 Linux

52 #保存并退出

53 Command (m for help): w

54 The partition table has been altered!

注意没有填的直接回车

  1. 接下来,我们对/dev/sdb的分区进行格式化

​ [root@localhost ~]# mkfs.ext4 /dev/sdb1

​ [root@localhost ~]# mkfs.ext4 /dev/sdb2

  1. 创建目录,并挂载新的磁盘

#mkdir -p /mnt/boot /mnt/sysroot

#mount /dev/sdb1 /mnt/boot

#mount /dev/sdb2 /mnt/sysroot/

  1. 安装grub, 内核文件拷贝至目标磁盘

#grub2-install --root-directory=/mnt /dev/sdb

#我们可以来看一下二进制确认我们是否安装成功

#hexdump -C -n 512 /dev/sdb

#cp -rf /boot/* /mnt/boot/

  1. 修改 grub2/grub.cfg 文件, 标红的部分 是需要使用 指令来查看的

在这里插入图片描述

  1. 在grub.cfg文件中 , 红色部分用 上面 sdb1 的 UUID替换,蓝色部分用 sdb2的UUID来替换, 紫色部分是添加的,表示selinux给关掉,同时设定一下init,告诉内核不要再去找这个程序了,不然开机的时候会出现错误的
selinux=0 init=/bin/bash

在这里插入图片描述

  1. 创建目标主机根文件系统

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

  1. 拷贝需要的bash(也可以拷贝你需要的指令)和库文件给新的系统使用

​ #cp /lib64/. /mnt/sysroot/lib64/

​ #cp /bin/bash /mnt/sysroot/bin/

  1. 现在我们就可以创建一个新的虚拟机,然后将默认分配的硬盘 移除掉,指向我们刚刚创建的磁盘即可.

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

到这里就成功了

在这里插入图片描述

  1. 这时,很多指令都不能使用,比如 ls , reboot 等,可以将需要的指令拷贝到对应的目录即可
  2. 如果要拷贝指令,重新进入到原来的 linux系统拷贝相应的指令即可,比较将 /bin/ls 拷贝到 /mnt/sysroot/bin 将/sbin/reboot 拷贝到 /mnt/sysroot/sbin

[root@~]# mount /dev/sdb2 /mnt/sysroot/

[root@~]# cp /bin/ls /mnt/sysroot/bin/

[root@~]# cp /bin/systemctl /mnt/sysroot/bin/

[root@~]# cp /sbin/reboot /mnt/sysroot/sbin/

应的指令即可,比较将 /bin/ls 拷贝到 /mnt/sysroot/bin 将/sbin/reboot 拷贝到 /mnt/sysroot/sbin

[root@~]# mount /dev/sdb2 /mnt/sysroot/

[root@~]# cp /bin/ls /mnt/sysroot/bin/

[root@~]# cp /bin/systemctl /mnt/sysroot/bin/

[root@~]# cp /sbin/reboot /mnt/sysroot/sbin/

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/26304.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(转载)基于混合粒子群算法的TSP问题求解(matlab实现)

1 理论基础 标准粒子群算法通过追随个体极值和群体极值完成极值寻优,虽然操作简单,且能够快速收敛,但是随着迭代次数的不断增加,在种群收敛集中的同时,各粒子也越来越相似,可能在局部最优解周边无法跳出。…

2023/5/29总结

abstract修饰符 抽象类就是当类和类之间有相同特征时,将这些共同的特征提取出来,形成的就是抽象类。 抽象类的特点: 抽象类和抽象方法必须使用abstract 关键字修饰:publicabstract class 类名 / public abstract void eat();抽象…

测评补单操作在美客多店铺及产品优化中的决定性角色:深度解读

许多经营美客多平台的商家有一种观念,他们认为美客多平台的规则与亚马逊有所区别。在美客多上,店铺比产品更重要,而且平台的竞争相对较小。因此,他们认为在美客多平台进行补单操作是不必要的。 然而,是否真的如此呢&a…

FM实现F4帮助系列三:弹出框多筛选条件的搜索帮助(根据搜索帮助筛选字段)...

函数:F4IF_GET_SHLP_DESCR F4IF_START_VALUE_REQUEST 效果图: 本例子代码: 找到需要的帮助: *& Report ZLM_TEST_045 REPORT zlm_test_045. TABLES makt. DATA: BEGIN OF str_f4, matnr TYPE matnr, maktx TYPE maktx, END OF str_f4.…

react antd Modal里Form设置值不起作用

问题描述: react antd Modal里Form设置值不起作用,即使用form的api。比如:编辑时带出原有的值。 造成的原因:一般设置值都是在声明周期里设置,比如:componentDidMounted里设置,hook则在useEff…

国际植物命名数据库(International Plant Names Index)

功能介绍 https://www.ipni.org/ 是国际植物命名数据库(International Plant Names Index)的官方网站。国际植物命名数据库是一个全球性的植物命名和分类资源,旨在提供植物命名信息的权威来源。以下是该网站的一些特点和功能: 植…

Web Scoket简述

Web Socket 简介 初次接触 Web Socket 的人,我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处? 因为 HTTP 协议有一个缺陷:通信只能由客户端发起。http基于请求响应实现。 (准确来说HTTP…

使用Python进行接口性能测试:从入门到高级

前言: 在今天的网络世界中,接口性能测试越来越重要。良好的接口性能可以确保我们的应用程序可以在各种网络条件下,保持流畅、稳定和高效。Python,作为一种广泛使用的编程语言,为进行接口性能测试提供了强大而灵活的工…

尚硅谷大数据hadoop教程_mapReduce

p67 课程介绍 p68概述 p69 mapreduce核心思想 p70 wordcount源码 序列化类型 mapReduce三类进程 p71 编程规范 用户编写的程序分成三个部分:Mapper、Reducer和Driver。 P72 wordcount需求案例分析 p 73 -78 案例环境准备 (1)创建maven…

基于Html5的在线资料库的设计与实现(asp.NET,SQLServer)

在线资料库系统采用.NET开发平台进行开发,开发工具采用Microsoft Visual Studio 2010集成开发环境,后台编程语言采用C#编程语言来进行编程开发,数据库我们采用当下流行的SQL Server 2008数据库管理系统来存放平台中的数据信息,整个…

Nginx 之 Tomcat 负载均衡、动静分离

一.详细安装及操作实例(Nginx 七层代理) 首先至少准备三台服务器 Nginx 服务器:192.168.247.131:80 Tomcat服务器1:192.168.247.133:80 Tomcat服务器2:192.168.247.134:8080 192.168.247.134:80811.部署Nginx 负载均…

windows下编译roadrunner和作为laravel服务器实践

roadrunner源码地址:https://gitee.com/mirrors/RoadRunner?_fromgitee_search windows下编译roadrunner源码获得rr.exe可执行文件 将rr.exe拷贝到laravel目录下 .rr.yaml配置文件内容: version: 3 server: command: "php vendor/spiral/road…

【Jmeter】生成html格式接口自动化测试报告

jmeter自带执行结果查看的插件,但是需要在jmeter工具中才能查看,如果要向领导提交测试结果,不够方便直观。 笔者刚做了这方面的尝试,总结出来分享给大家。 这里需要用到ant来执行测试用例并生成HTML格式测试报告。 一、ant下载安…

vue methods 互相调用的方法

methods是一个内置的函数,主要用于两个组件之间的数据传递,也就是调用方法。下面给大家介绍一个在 vue中互相调用的方法,在使用过程中可以参考一下。 methods实现了两个组件之间数据的传递,我们先来看一下 Methods是如何实现数据传…

Kafka

Kafka 概述 基于Scala语言,是一个分布式,分区的,多副本的,多订阅者的消息队列系统。 优势 可靠性:分布式的,分区,复制和容错的。可扩展性:kafka消息传递系统轻松缩放&#xff0c…

ROS:订阅者Subscriber的编程实现(C++)

目录 一、话题模型二、创建功能包三、创建Subscriber代码四、编译代码五、运行 一、话题模型 图中,我们使用ROS Master管理节点。 有两个主要节点: Publisher,名为Turtle Velocity(即海龟的速度) Subscriber&#xff0…

Docker安装kafka可视化管理工具 - Kafka Manager

说明:此处是在前面使用Docker安装kafka的基础之上,再来使用Docker安装kafka-manager 第一步:使用下述命令从Docker Hub查找镜像,此处我们要选择的是sheepkiller所构建的kafka-manager镜像 docker search kafka-manager 第二步&a…

aigc分享

AIGC技术分享 AIGC概述 AIGC的概念、应用场景和发展历程https://36kr.com/p/2135547607286144 ppt https://36kr.com/p/2243237713604482 机器学习基础 机器学习的基本概念、分类和常用算法,如线性回归、决策树、支持向量机、神经网络等。 深度学习基础 深度学…

设计模式之~组合模式

组合模式: 将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 结构图: 实例: 透明方式: leaf中也有add和remove叫做透明方式,在component中声明所有用来管…

煤矿井下定位设备,实现特殊环境下人员安全管理

煤矿、金属矿山等地下作业场所的安全管理工作要求高、难度大,矿用人员定位系统通过实时定位等功能,可以帮助企业随时掌握作业人员的位置安全,提高生产和安全管理效率,并可在紧急情况时迅速采取措施,减少事故损失&#…