您的位置:首页 > 运维架构 > Linux

启动流程排错,自制linux内核,编译内核

2016-09-21 10:10 585 查看
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.confls /dev/loop* loop设备可以通过内核参数可以修改

rhgb quiet 删除了可以跳过图形界面直接看到启动信息

loop设备数目可以增加grub-md5-cryptcentos 需要输入两遍

可以为grub生成一个md5的加密密码password --md5

可以生成一个启动口令openssl passwd -1 1表示md5加密

也一样可以生成一个MD5加密密码openssl passwd -salt "盐" -1 指定盐加密

可以发现只要指定一样的盐加密,一样的密码会显示一样。cat /proc/cmdline 查看生效的内核参数

/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

跟/etc/grub.conf的文档一样更改开机菜单背景yum -y insyall ImageMagickconvert -resize 640x480 -colors 14 win.jpg win.xpmgzip win.xpmcp win.xpm /boot/grubcim /boot/grub/grub.conf

破坏了系统启动文件 1到1.5阶段方法一:grub-installchroot /mnt/sysimage/grub-install /dev/sda 可以修复1与1.5阶段分区表信息grub修复不了
dd if=/dev/zero of=/dev/sda bs=1 count=446 破坏1阶段

hexdump -C -n 512 /dev/sda

可以发现数据已经被破坏

重启之后发现已经进入不了系统,选择救援模式

chroot /mnt/sysimage/

切换回主目录操作grub-install /dev/sda 可以修复1与1.5阶段注意:分区表信息grub修复不能

方法二:dd if=/dev/zero of=/dev/sda bs=512 count=2 seek=1 破坏1.5阶段hexdump -C -n 1024 /dev/sda
只能手动光盘引导,救援模式grubgrub> root (hd0,0)grup> steup (hd0) 使用交互模式救援如果备份文件被破坏了就只能用方法一 grub-install 。因为方法二是依赖与备份文件修复。

因为我上面就已经将错误修复了,所以第二部检查出没问题

在进单用户模式 : 在读条页面按Esc 跟住a 进入后输入1单一服务出错,可以跳过该服务启动 ll -Z /sbin/init

seliux=0chkconfig --list certmonger

chkconfig certmonger off 启动就不会再加载这个服务

如果内核和配置文件损坏了光盘挂载修复

mount /dev/cdrom /mnt/cdrom

cd /mnt/cdrom/isolinxu/

cp vmlinuz /mnt/sysimage/boot

chroot /mnt/sysimagemkinitrd /boot/initromfs-`uname`.img `uname -r`


网络救援chroot /mnt/sysimage/ scp 10.1.0.1:/boot/vmlinuz* /boot/ 利用scp去其它源拷贝回来一份相同的文件scp 10.1.0.1:/boot/initramfs* /boot/前提时候版本号一样,将目标的文件拷贝到目录下reboot
删除/bootrm -rf /boot/dd if=/dev/zero of=/dev/sda bs=1 count=446 破坏1阶段rescue 进入救援模式mount /dev/cdrom /mnt/cdrom

rpm -ivh /mnt/cdrom/Packages/kernel-2.6..rpm --root=/mnt/sysimage --replacepkgs 安装回内核

chroot /mnt/sysyimagegrub-insyall /dev/sda

删除了/ect/fstab,/boot/,blkid;fdisk -lmkdir /mnt/sda2mount /dev/sda2 /mnt/sda2vi /mnt/sda2/ect/fstab 重写一个分区表信息,可以暂时先写主分区信息,等进入系统再进行保全。
/dev/sad1 /boot ext4 defaults 1 1/dev/sda2 / ext4 defaults 1 2
reboot 等系统自己挂载mkdir /mnt/cdrommount /dev/cdrom /mnt/cdrom

chroot /mnt/sysyimagerpm -ivh /mnt/cdrom/Packages/kernel-2*.rpm --replacepkgs | force 重新安装回内核

grub-install /dev/sda

修复回1到1.5段的引导信息vim /boot/grub/grub.confdefault=0timeout=3title zczxlinuxroot (hd0,0)kernel /vmlinuz-2.6.32-642.e16.x86_64 root=/dev/sda2initrd /initramfs-2.6.32-642.e16.x86_64

重写引导信息逻辑卷需要lvscan 扫描磁盘vgsvgchange -ay 激活所有逻辑卷mount /dev/vg0/root /mnt/sysimagevi /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等

reboot 还是等系统自己挂载下面过程差不多rpm -ivh 安装回内核grub-install /dev/sda 修复1到1.5段引导信息vim /boot/grub/grub.conf 添加回引导信息,root=路径要加上逻辑卷root=/dev/vg0/root

自制Linux系统lsblk

新添加一个硬盘来做实验,发现系统还没有检出echo "- - -"> /sys/class/scsi_host/host0/scan echo "- - -"> /sys/class/scsi_host/host2/scan 生产环境注意使用

fidsk /dev/sdb 分两区 boot /

mkfs.ext4 /dev/sdb*

mount /dev/sdb1 /mnt/boot

cp /boot/vmliuz-2... /boot/initramfs-2.6...img /mnt/boot

grub-install /dev/sdb --root-directory=/mnt

将引导信息写入/dev/sdb中hexdump -C -n 512 -v /dev/sdb

可以查看到已经有数据写入了cd grubvim grub.confdefault=0timeout=3title zczxlinuxroot (hd0,0)kernel /vmlinuz.... root=/dev/sda2 selinux=0 init=/bin/bashinitrd /initramfs..

mkdir /mnt/sysrootmount /dev/sdb2 /mnt/sysroot

cd /mnt/sysroot/mkdir -pv {bin,etc,sbin,dev,lib,lib64,proc,sys,tmp,root,home,usr,var,mnt,media}

vim /mnt/sysroot/etc/fstab/dev/sda1 /boot ext4 defaults 1 1/dev/sda2 / ext4 defaults 1 2

/root/copycmd.shbash,vim,cat,ls,ifconfig,poweroff,df,rpm,mount,umount,hostanme,reboot.


chroot /mnt/sysroot


切换进去,

要使用的时候只需将文件拷贝过去读取就可以使用
编译内核
编译内核 (可以添加未开启的功能板块)rpm -qi kernelntsysv 可以打开关闭指定功能模块
/boot/kernel /lib/modules实现完全定制的内核功能cd /bootconfig-3.1.... 里面有服务配置www.kernel.org 下载内核yum grouplistyum -y groupinstall "Development Tools"uname -r 查看内核版本lscpu 查看CPUtar xvf linux-3.18..tar.xz -C /usr/src 将内核解压到/usr/srcls /sur/srcln -s linux-3.18.41/ linux 创建软连接,方便下次进入cd linuxdu -shcp /boor/config-3.10.0.. /usr/src/linux/.config 将原本的模板拷贝到指定的目录,而且需要命名为.config 因为编译的时候会默认读取这个文件ll /usr/src/linux/.configcd /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.18cd /lib/modulescd /usr/src/linuxmake modules_install 拷贝内核模块文件make install
lsmod 查看已经安装的模块

lsmod |grep ext4

locate ext4.ko 查找模块路径

rmmod e1000 卸载模块modprobe usb-strage 启动模块modinfo -n usb-storage.ko 显示模块路径lsmod |grep -i ext4 可以看到ext4依赖的文件

depmod命令:内核模块依赖关系文件及系统信息映射文件的生成工具(容易破坏其他文件的依赖性,使用时候要注意使用)
做路由器时候开启cat /proc/sys/net/ipv4/ip_forward

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 可以看所有启用的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息