实战自制Linux操作系统
实战自制Linux操作系统
自制linux系统
步骤概述:
1、新建一个硬盘2、在该新硬盘上新建两个分区,一个当boot分区,一个当/分区3、格式化并且挂载两个分区4、安装grub至目标磁盘5、为grub提供配置文件6、复制内核文件和initrd文件7、创建目标主机根文件系统8、移植bash命令和其库文件到根文件系统9、装载模块,实现网络功能10、启动测试
具体操作步骤如下:
1)为CentOS 6系统添加一块新的硬盘,然后启动,演示如下:
2)查看新添加的硬盘,并为添加好的磁盘分区,创建文件系统;
[root@CentOS6 ~]# fdisk -l /dev/sd[a-z]Disk /dev/sda: 85.9 GB, 85899345920 bytes 255 heads, 63 sectors/track, 10443 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x0007eba7Device Boot Start End Blocks Id System /dev/sda1 * 1 26 204800 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 26 7859 62914560 8e Linux LVM /dev/sda3 7860 9165 10490445 83 Linux /dev/sda4 9166 10443 10265535 5 Extended /dev/sda5 9166 9819 5253223+ 83 LinuxDisk /dev/sdb: 21.5 GB, 21474836480 bytes #可以看到新添加的硬盘 sdb 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000
分三个主分区,分别作为为根分区,swap分区和boot分区,并创建对应的文件系统,操作如下:
[root@CentOS6 ~]# fdisk /dev/sdb #创建分区, #创建文件系统如下命令: [root@CentOS6 ~]# mkfs.ext4 /dev/sdb1 [root@CentOS6 ~]# mkswap /dev/sdb2 [root@CentOS6 ~]# mkfs.ext4 /dev/sdb3 #查看创建好的分区 [root@CentOS6 ~]# blkid /dev/sdb1: UUID="f4921d76-f089-4cb6-8f47-aff34711cb7a" TYPE="ext4" /dev/sdb2: UUID="3eaa649e-a5c0-4f9c-8887-453368419238" TYPE="swap" /dev/sdb3: UUID="286c857d-8f52-465f-9ed6-8eeaa3363743" TYPE="ext4"
3)创建一个boot目录,并把boot分区(sdb1)挂载上;
[root@CentOS6 ~]# mkdir /mnt/boot [root@CentOS6 ~]# mount /dev/sdb1 /mnt/boot [root@CentOS6 ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/vg0-root 20511356 1112808 18349972 6% / tmpfs 502068 0 502068 0% /dev/shm /dev/sda1 194241 34199 149802 19% /boot /dev/mapper/vg0-usr 10190136 2473060 7192788 26% /usr /dev/mapper/vg0-var 20511356 489148 18973632 3% /var /dev/sda5 5039592 10352 4766580 1% /home /dev/sdb1 104769 1550 97598 2% /mnt/boot # 挂载的设备sdb1
4)创建grub,并查看;
[root@CentOS6 ~]# ls /mnt/boot/ lost+found [root@CentOS6 ~]# grub-install --root-directory=/mnt /dev/sdb #创建grub Probing devices to guess BIOS drives. This may take a long time. Installation finished. No error reported. This is the contents of the device map /mnt/boot/grub/device.map. Check if this is correct or not. If any of the lines is incorrect, fix it and re-run the script `grub-install'.(fd0) /dev/fd0 (hd0) /dev/sda (hd1) /dev/sdb [root@CentOS6 ~]# ls /mnt/boot/ grub lost+found [root@CentOS6 ~]# ls /mnt/boot/grub/ device.map fat_stage1_5 iso9660_stage1_5 minix_stage1_5 stage1 ufs2_stage1_5 xfs_stage1_5 e2fs_stage1_5 ffs_stage1_5 jfs_stage1_5 reiserfs_stage1_5 stage2 vstafs_stage1_5
5)要想成为一个真正的系统,还需要内核文件,initrd以及grub/grub.conf这些文件;
[root@CentOS6 ~]# cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /mnt/boot/vmlinuz [root@CentOS6 ~]# cp /boot/initramfs-2.6.32-642.el6.x86_64.img /mnt/boot/initramfs.img [root@CentOS6 ~]# vim /mnt/boot/grub/grub.conf #手动编写配置文件default=0timeout=5title CentOS (Express)root (hd0,0) # 在当前下为第二块磁盘应为(hd1,0),但是如果在其它设备上使用为(hd0,0)kernel /vmlinuz ro root=/dev/sda3 #加载的根目录所在的分区,因为在其他设备上为第一块磁盘所以为 /dev/sda3initrd /initramfs.img #内核匹配的ramfs文件
6)要把/dev/sda3当做根文件系统,就需要挂载,并创建根文件系统下想对应的子目录:
[root@CentOS6 ~]# mkdir /mnt/sysroot [root@CentOS6 ~]# mount /dev/sdb3 /mnt/sysroot/ [root@CentOS6 ~]# cd /mnt/sysroot/ [root@CentOS6 sysroot]# ls lost+found [root@CentOS6 sysroot]# mkdir -pv etc bin sbin lib lib64 dev proc sys mnt var usr home root tmp media mkdir: created directory `etc' mkdir: created directory `bin' mkdir: created directory `sbin' mkdir: created directory `lib' mkdir: created directory `lib64' mkdir: created directory `dev' mkdir: created directory `proc' mkdir: created directory `sys' mkdir: created directory `mnt' mkdir: created directory `var' mkdir: created directory `usr' mkdir: created directory `home' mkdir: created directory `root' mkdir: created directory `tmp' mkdir: created directory `media' [root@CentOS6 sysroot]# ls bin dev etc home lib lib64 lost+found media mnt proc root sbin sys tmp usr var
7)根文件系统的目录有了,但是要想运行还需要程序,还需要bash,以及基于动态编译的共享库文件
[root@CentOS6 sysroot]# cp /bin/bash /mnt/sysroot/bin #复制bash [root@CentOS6 sysroot]# ldd /bin/bash # 查看库文件linux-vdso.so.1 => (0x00007ffd127d9000)libtinfo.so.5 => /lib64/libtinfo.so.5 (0x0000003278e00000)libdl.so.2 => /lib64/libdl.so.2 (0x000000326f200000)libc.so.6 => /lib64/libc.so.6 (0x000000326f600000)/lib64/ld-linux-x86-64.so.2 (0x000000326ee00000)# 复制共享库中的文件到创建的根目录中的lib64下 [root@CentOS6 sysroot]# cp /lib64/libtinfo.so.5 /mnt/sysroot/lib64 [root@CentOS6 sysroot]# cp /lib64/libdl.so.2 /mnt/sysroot/lib64 [root@CentOS6 sysroot]# cp /lib64/libc.so.6 /mnt/sysroot/lib64 [root@CentOS6 sysroot]# cp /lib64/ld-linux-x86-64.so.2 /mnt/sysroot/lib64
8)如上,基本的操作已经完成,使用 chroot 切换根,进行测试,如下:
[root@CentOS6 sysroot]# chroot /mnt/sysroot/ # 切换根 bash-4.1# bash-4.1# bash-4.1# ls # 因为没有复制命令,所以只能使用内建命令,如果需要使用外部命令,就把命令以及以依赖的库复制过去就可以了。 bash: ls: command not found bash-4.1# pwd / bash-4.1# exit exit
9)最后,我们再编辑一下配置文件/mnt/boot/grub/grub.conf
[root@CentOS6 ~]# vim /mnt/boot/grub/grub.conf default=0 timeout=5 title CentOS (Express)root (hd0,0) kernel /vmlinuz ro root=/dev/sda3 init=/bin/bash # 表示要求限定运行的的是/bin/bash 而不是 /sbin/init 这样就直接把bash当做用户空间的第一个进程来使用了initrd /initramfs.img
10)最后同步一下
[root@CentOS6 ~]# sync
11)我们新建一个虚拟机,把硬盘改为新创建好的磁盘,测试系统能否启动?
启动此虚拟机,如下图:按e键可以看到我们创建的系统文件,选定内核,按b键启动
选定内核,按b键启动,发现系统报错,什么原因呢?可能是没有添加selinux策略
选定内核,按e键,进入编辑模式,添加selinux=0 ,重新启动,发现可以正常启动
到此,一个迷你版的Linux诞生了,可以装在自己移动U盘等设备上面,这里不做过多解释
转载于:https://blog.51cto.com/1992tao/1853192
实战自制Linux操作系统相关推荐
- 使用U盘自制Linux操作系统
章节导航: 前言 Linux系统启动流程 实验前的准备 实验过程 拷贝命令脚本 一.前言 我们生活中离不开电脑,时时刻刻在跟操作系统打交道,有时候会被系统中出现的错误搞得头昏脑胀,使用操作系统,不如亲 ...
- 实战Linux操作系统双屏显示(转)
实战Linux操作系统双屏显示(转) 现在市面上的大多数显示卡配有两个视频输出(双VGA或者双DVI或者VGA + DVI),在Windows XP下借助驱动程序我们很容易配置双显,获得双倍的显示面积 ...
- Ubuntu Linux操作系统实战教程(微课视频版)
<Ubuntu Linux操作系统实战教程(微课视频版)> 21世纪高等学校计算机类课程创新系列教材·微课版 余健 编著 清华大学出版社 北京 ISBN 978-7-302-61462- ...
- 【大数据技术应用实战】【基础课程一 Linux操作系统】Linux概述
Linux概述 什么是Linux 类UNIX的操作系统: 多用户.多任务.多线程.多CPU: 有一个桌面系统 可以在多个硬件平台运行 源码可获得 UNIX操作系统(尤尼斯),是一个强大的多用户.多任务 ...
- 冬季实战营第二期:Linux操作系统实战入门
使用Linux可谓是开启了一扇新工具和新技术的大门,它使你对计算环境的体验更为轻松 Linux指令入门-文本处理 学习Linux系统中的文本编辑工具Vim以及文本处理命令 2.Linux指令入门-系统 ...
- 嵌入式linux操作系统
2. 怎么学习嵌入式Linux操作系统 本文假设您是零基础,以实用为主,用最快的时间让你入门:后面也会附上想深入学习时可以参考的资料. 在实际工作中,我们从事的是"操作系统"周边的 ...
- ElasticSearch实战:Linux日志对接Kibana
本文由云+社区发表 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTFul web接口.ElasticSearch是用Java开发 ...
- [转帖]爬过这 6 个坡,你就能对 Linux 操作系统了如指掌
爬过这 6 个坡,你就能对 Linux 操作系统了如指掌 http://www.51testing.com/html/16/n-4461316.html 学习的任务 任重道远 我现在处于第一阶段. 发 ...
- Linux操作系统下软件的安装方法大全
一.rpm包安装方式步骤: 1.找到相应的软件包,比如soft.version.rpm,下载到本机某个目录: 2.打开一个终端,su -成root用户: 3.cd soft.version.rpm所在 ...
最新文章
- 他开发了基因界的百科全书,贡献却少有人知
- 第9件事 产品定位要解决的6个问题
- RHEL5下NFS服务器配置与应用
- 【深度学习】模型训练教程之Focal Loss调参和Dice实现
- Tomcat闪退的解决办法
- 堆排序(java实现)
- 转贴 30岁你会站在哪?
- 极光推送java demo_极光推送JAVA代码示例
- 仿京东轮播的广告展示栏
- 【机器学习】机器学习泛泛之谈
- diabetes r语言_Diabetes Walk 2007-波特兰博客匹配挑战赛和Silverlight演示
- 计算机网络设备调试员报名,工信部网络设备调试员一级高级技师、二级技师
- MySQL教程——MySQL注释:单行注释和多行注释
- bochs linux.img下载,bochs win10 img镜像文件
- 在Lua中使用枚举型变量
- Android MD5 RSA DES等几种加密算法
- android加载h5速度慢的解决方案,WebView优化提高H5加载速度方案
- How to create subroutine
- 视频教程-从如何应聘运营工作到运营高手之路-运营管理
- 扎什伦布寺《佛系珍藏》系列数字藏品即将开售!
热门文章
- [SHELL]判断一个命令是否存在
- POI导入数据的过程中,遇到读取以科学计数法显示的数据
- sql2005安装过程,(不装C盘)
- stl变易算法(三)
- stl之set集合容器应用基础
- java如何重复userinput_如何使用Scanner Java重复读取用户输入
- bios uefi legacy_安装win10用uefi还是legacy?win10 uefi引导修复教程
- java junit 运行_运行Junit方法项目启动不了
- python函数求n年后本息_Python自定义函数计算给定日期是该年第几天的方法示例...
- oracle進程時高時低,oracle低權限下獲取shell