赞
踩
通过裁剪现有 Linux 系统(CentOS7.6),创建属于自己的 min Linux 小系统,可以加深我们对 linux 的理解。老韩利用 centos7.6,搭建一个小小 linux 系统, 很有趣。
启动流程介绍:
制作 Linux 小系统之前,再了解一下 Linux 的启动流程:
在 Linux 的启动流程中,加载内核文件时关键文件:
1)kernel 文件: vmlinuz-3.10.0-957.el7.x86_64
2)initrd 文件: initramfs-3.10.0-957.el7.x86_64.img
在现有的 Linux 系统(centos7.6)上加一块硬盘/dev/sdb,在硬盘上分两个分区,一个是/boot,一个是/,并将其格式化。需要明确的是,现在加的这个硬盘在现有的 Linux 系统中是/dev/sdb,但是,当我们把东西全部设置好时,要把这个硬盘拔除,放在新系统上,此时,就是/dev/sda
在/dev/sdb 硬盘上,将其打造成独立的 Linux 系统,里面的所有文件是需要拷贝进去的
作为能独立运行的 Linux 系统,内核是一定不能少,要把内核文件和 initramfs 文件也一起拷到/dev/sdb 上
以上步骤完成,我们的自制 Linux 就完成, 创建一个新的 linux 虚拟机,将其硬盘指向我们创建的硬盘,启动即可
示意图
操作步骤
点击完成,就OK了, 可以使用 lsblk 查看,需要重启
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): ***\*+\*******\*5\*******\*00M\**** 25 26 27 Command (m for help): n 28 Command action29 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 261037 #查看分区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!
[root@localhost ~]# mkfs.ext4 /dev/sdb1
[root@localhost ~]# mkfs.ext4 /dev/sdb2
#mkdir -p /mnt/boot /mnt/sysroot
#mount /dev/sdb1 /mnt/boot
#mount /dev/sdb2 /mnt/sysroot/
#grub2-install --root-directory=/mnt /dev/sdb
#我们可以来看一下二进制确认我们是否安装成功
#hexdump -C -n 512 /dev/sdb
#cp -rf /boot/* /mnt/boot/
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OSRjCOhS-1659016464934)(…/…/…/Pictures/Linux/wps8.jpg)] 在grub.cfg文件中 , 红色部分用 上面 sdb1 的 UUID替换,蓝色部分用 sdb2的UUID来替换, 紫色部分是添加的,表示selinux给关掉,同时设定一下init,告诉内核不要再去找这个程序了,不然开机的时候会出现错误的
#mkdir -pv /mnt/sysroot/{etc/rc.d,usr,var,proc,sys,dev,lib,lib64,bin,sbin,boot,srv,mnt,media,home,root}
#cp /lib64/. /mnt/sysroot/lib64/
#cp /bin/bash /mnt/sysroot/bin/
这时,很多指令都不能使用,比如 ls , reboot 等,可以将需要的指令拷贝到对应的目录即可
如果要拷贝指令,*重新进入到原来的 linux系统拷贝相应的指令即可*,比较将 /bin/ls 拷贝到 /mnt/sysroot/bin 将/sbin/reboot 拷贝到 /mnt/sysroot/sbin
root@hspedu100 ~]# mount /dev/sdb2 /mnt/sysroot/
[root@hspedu100 ~]# cp /bin/ls /mnt/sysroot/bin/
[root@hspedu100 ~]# cp /bin/systemctl /mnt/sysroot/bin/
[root@hspedu100 ~]# cp /sbin/reboot /mnt/sysroot/sbin/
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。