设为首页 收藏本站
查看: 1519|回复: 0

[经验分享] 启动流程排错,自制linux内核,编译内核

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-9-22 09:29:49 | 显示全部楼层 |阅读模式
CentOS 6启动流程:
POST --> Boot Sequence(BIOS) --> Boot Loader --> Kernel(ramdisk) --> rootfs--> switchroot--> /sbin/init-->(/etc/inittab, /etc/init/*.conf) --> 设定默认运行级别--> 系统初始化脚本rc.sysinit--> 关闭或启动对应级别的服务--> 启动终端

grub legacy
配置文件:/boot/grub/grub.conf<--/etc/grub.conf
ls /dev/loop* loop设备可以通过内核参数可以修改
1473751718770099.jpg
rhgb  quiet 删除了可以跳过图形界面直接看到启动信息
1473751763489358.jpg loop设备数目可以增加
grub-md5-crypt
centos 需要输入两遍
1473751867146272.jpg 可以为grub生成一个md5的加密密码
password --md5
1473752503259298.jpg 可以生成一个启动口令
openssl passwd -1 1表示md5加密
1473752649646700.jpg 也一样可以生成一个MD5加密密码
openssl passwd -salt "盐" -1  指定盐加密
1473752752796280.jpg 可以发现只要指定一样的盐加密,一样的密码会显示一样。
cat /proc/cmdline 查看生效的内核参数
1473753333185218.jpg
/boot/grub/grub.conf 如果开机配置文件损坏了,或者没有,可以通过自己配置路径开机
kernel (hd0,0)/vmlinuz-2.6.32-642.216.x86_64 root=/dev/sda2   内核
initrd (hd0,0)/initramfs-2.6.32.e16.x86_64.img  配置文件
boot
1473766231472569.jpg 跟/etc/grub.conf的文档一样
更改开机菜单背景
yum -y insyall ImageMagick
convert -resize 640x480 -colors 14 win.jpg win.xpm
gzip win.xpm
cp win.xpm /boot/grub
cim /boot/grub/grub.conf


破坏了系统启动文件 1到1.5阶段
方法一:
grub-install
chroot /mnt/sysimage/
grub-install /dev/sda 可以修复1与1.5阶段
分区表信息grub修复不了

dd if=/dev/zero of=/dev/sda bs=1 count=446 破坏1阶段
1473766354407859.jpg
hexdump -C -n 512 /dev/sda
1473766379149384.jpg 可以发现数据已经被破坏
1473766528412617.jpg 重启之后发现已经进入不了系统,选择救援模式
spacer.jpg chroot /mnt/sysimage/
1473766673145219.jpg 切换回主目录操作
grub-install /dev/sda 可以修复1与1.5阶段
注意:分区表信息grub修复不能
1473766763134018.jpg
方法二:
dd if=/dev/zero of=/dev/sda bs=512 count=2 seek=1 破坏1.5阶段
hexdump -C -n 1024 /dev/sda

只能手动光盘引导,救援模式
grub
grub> root (hd0,0)
grup> steup (hd0) 使用交互模式救援
如果备份文件被破坏了就只能用方法一 grub-install 。因为方法二是依赖与备份文件修复。
1473767182261705.jpg 因为我上面就已经将错误修复了,所以第二部检查出没问题


在进单用户模式 : 在读条页面按Esc 跟住a 进入后输入1
单一服务出错,可以跳过该服务启动  
ll -Z /sbin/init
1473767626504604.jpg
seliux=0
chkconfig --list certmonger
1473767697823577.jpg
chkconfig certmonger off 启动就不会再加载这个服务
1474250036850530.jpg
如果内核和配置文件损坏了
光盘挂载修复
1473769421718761.jpg
mount /dev/cdrom /mnt/cdrom
1473769966998312.jpg
cd /mnt/cdrom/isolinxu/
1473770015770505.jpg
cp vmlinuz /mnt/sysimage/boot
1473770060618697.jpg
chroot /mnt/sysimage
mkinitrd /boot/initromfs-`uname`.img `uname -r`
1473770176871097.jpg

网络救援
chroot /mnt/sysimage/  
scp 10.1.0.1:/boot/vmlinuz* /boot/  利用scp去其它源拷贝回来一份相同的文件
scp 10.1.0.1:/boot/initramfs* /boot/
前提时候版本号一样,将目标的文件拷贝到目录下
reboot

删除/boot
rm -rf /boot/
dd if=/dev/zero of=/dev/sda bs=1 count=446 破坏1阶段
rescue 进入救援模式
mount /dev/cdrom /mnt/cdrom
1473770991565545.jpg
rpm -ivh /mnt/cdrom/Packages/kernel-2.6..rpm --root=/mnt/sysimage --replacepkgs 安装回内核
1473770972951436.jpg
chroot /mnt/sysyimage
grub-insyall /dev/sda
1473771001941599.jpg
删除了/ect/fstab,/boot/,
blkid;fdisk -l
mkdir /mnt/sda2
mount /dev/sda2 /mnt/sda2
vi /mnt/sda2/ect/fstab  重写一个分区表信息,可以暂时先写主分区信息,等进入系统再进行保全。

/dev/sad1 /boot ext4 defaults 1 1
/dev/sda2 /     ext4 defaults 1 2

reboot 等系统自己挂载
mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
1474250851546482.jpg
chroot /mnt/sysyimage
rpm -ivh /mnt/cdrom/Packages/kernel-2*.rpm --replacepkgs | force   重新安装回内核
1473770972951436.jpg
grub-install /dev/sda
1473771001941599.jpg 修复回1到1.5段的引导信息
vim /boot/grub/grub.conf
default=0
timeout=3
title zczxlinux
root (hd0,0)
kernel /vmlinuz-2.6.32-642.e16.x86_64  root=/dev/sda2
initrd /initramfs-2.6.32-642.e16.x86_64
1474250528173325.jpg 重写引导信息
逻辑卷需要
lvscan 扫描磁盘
vgs
vgchange -ay 激活所有逻辑卷
mount /dev/vg0/root /mnt/sysimage
vi /mnt/sysimage/etc/fstab

/dev/sad1 /boot ext4 defaults 1 1
/dev/vg0/root / ext4 defaults 1 2
/dev/vg0/usr /usr ext4 defaults 0 0
/dev/vg0/var /var ext4 defaults 0 0      重写引导信息,因为逻辑分区所以需要写上/usr,/var,/root等
1474250795640066.jpg
reboot 还是等系统自己挂载
下面过程差不多
rpm -ivh     安装回内核
grub-install /dev/sda    修复1到1.5段引导信息
vim /boot/grub/grub.conf   添加回引导信息,root=路径要加上逻辑卷
root=/dev/vg0/root



自制Linux系统
lsblk
1474251300856322.jpg 新添加一个硬盘来做实验,发现系统还没有检出
echo "- - -"> /sys/class/scsi_host/host0/scan
echo "- - -"> /sys/class/scsi_host/host2/scan  生产环境注意使用
1474251805551620.jpg
fidsk /dev/sdb 分两区 boot /
1474266450754916.jpg
mkfs.ext4 /dev/sdb*
1474266502469390.jpg
mount /dev/sdb1 /mnt/boot
1474266571596799.jpg
cp /boot/vmliuz-2... /boot/initramfs-2.6...img /mnt/boot
1474266629526209.jpg
grub-install /dev/sdb --root-directory=/mnt  
1474266717387196.jpg 将引导信息写入/dev/sdb中
hexdump -C -n 512 -v /dev/sdb
1474266777979333.jpg 可以查看到已经有数据写入了
cd grub
vim grub.conf
default=0
timeout=3
title zczxlinux
root (hd0,0)
kernel /vmlinuz....  root=/dev/sda2 selinux=0 init=/bin/bash
initrd /initramfs..
1474267454692957.jpg
mkdir /mnt/sysroot
mount /dev/sdb2 /mnt/sysroot
1474267505939355.jpg
cd /mnt/sysroot/
mkdir -pv {bin,etc,sbin,dev,lib,lib64,proc,sys,tmp,root,home,usr,var,mnt,media}
1474267593399329.jpg
vim /mnt/sysroot/etc/fstab
/dev/sda1  /boot  ext4 defaults 1 1
/dev/sda2   /     ext4 defaults 1 2
1474267890394293.jpg
/root/copycmd.sh
bash,vim,cat,ls,ifconfig,poweroff,df,rpm,mount,umount,hostanme,reboot.
1474268313300622.jpg

chroot /mnt/sysroot

1474268430274152.jpg 切换进去,
1474268516618156.jpg 要使用的时候只需将文件拷贝过去读取就可以使用

编译内核

编译内核 (可以添加未开启的功能板块)
rpm -qi kernel
ntsysv  可以打开关闭指定功能模块

/boot/kernel  
/lib/modules
实现完全定制的内核功能
cd /boot
config-3.1.... 里面有服务配置
www.kernel.org  下载内核
yum grouplist
yum -y groupinstall "Development Tools"
uname -r  查看内核版本
lscpu 查看CPU
tar xvf linux-3.18..tar.xz -C /usr/src  将内核解压到/usr/src
ls /sur/src
ln -s linux-3.18.41/ linux 创建软连接,方便下次进入
cd linux
du -sh
cp /boor/config-3.10.0.. /usr/src/linux/.config  将原本的模板拷贝到指定的目录,而且需要命名为.config  因为编译的时候会默认读取这个文件
ll /usr/src/linux/.config
cd /usr/src/linux  菜单打开需要进入这个路径
yum -y install "*curses*"
make menuconfig  打开菜单等于修改.config
默认64内核
通用设置

Local version  版本号
回车
-1.0-zczxlinux  加入版本号
名字带箭头的表示有子项目

make -j 4 (4核心)开始编译
du -sh /usr/src/linux-3.18
cd /lib/modules
cd /usr/src/linux
make modules_install  拷贝内核模块文件
make install

lsmod 查看已经安装的模块
1474374572434076.jpg
lsmod |grep ext4
1474374606564673.jpg
locate ext4.ko 查找模块路径
1474374634622290.jpg
rmmod e1000 卸载模块
modprobe usb-strage 启动模块
modinfo -n usb-storage.ko 显示模块路径
lsmod |grep -i ext4 可以看到ext4依赖的文件
1474374807712908.jpg
depmod命令:
内核模块依赖关系文件及系统信息映射文件的生成工具(容易破坏其他文件的依赖性,使用时候要注意使用)

做路由器时候开启
cat /proc/sys/net/ipv4/ip_forward
1474375047511338.jpg 0表示未启用
vim /etc/sysctl.conf
格式用.代替/
可以直接修改上述文件: echo 1 > /proc/sys/net/ipv4/ip_forward
把文件的内容由0修改为1。禁用IP转发则把1改为0。
上面的命令并没有保存对IP转发配置的更改,下次系统启动时仍会使用原来的值,要想永久修改IP转发,需要修改/etc/sysctl.conf文件,修 改下面一行的值: net.ipv4.ip_forward = 1

sysctl -p 重读配置文件
sysctl -w net.ipv4.ip_forward=0 相当于改内存
sysctl -a 可以看所有启用的
1474375241906714.jpg




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-275796-1-1.html 上篇帖子: 本地远程数据同步之rsync 下篇帖子: Linux相关运维集群学习视频资料分享(自取) linux
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表