修复/boot及/etc/fstab、自制linux、编译安装内核

实验一、破坏dev/sda 的MBR的446字节:

破坏:dd if=/dev/zero of=/dev/sda bs=1 count=446

查看:hexdump -C -n 512 /dev/sda

发现前面的字节都为0

========================================================================================

========================================================================================

状况一、刚破坏未重启的时候修复:

可以利用grub重新生成:

grub

grub> root (hd0,0)

grub> setup (hd0)

quit退出

修复完之后使用hexdump -C -n 512 /dev/sda查看发现已经修复成功

========================================================================================

=======================================================================================

======================================================================================

状况二、破坏之后重启了,但是有MBR备份时的修复:

备份:dd if=/dev/sda of=/app/mbr bs=1 count=512

======================================================================================

=================================================================================

破坏:dd if=/dev/zero of=/dev/sda bs=1 count=446

=================================================================================

=================================================================================

修复:

1、进入救援模式

1)在系统启动显示进度条的时候,按一下esc键

2)在弹出的页面中选择第三项Rescue

w

3)选择语言的都按默认的来,直接按回车,直到出现Setup Networking,可以根据自己的选择,是利用网络接口还是不用。在这里就不用,选择no

4)接下来就按默认的来,一步步回车就行,就进入shell了。默认硬盘的根被挂载到/mnt/sysp_w_picpath/

2、利用备份的mbr恢复

dd if=/mnt/sysp_w_picpath/app/mbr of=/dev/sda bs=1 count=446

3、保险起见,恢复完之后使用sync同步

4、reboot重启即可

状况三、破坏之后重启,但是没有MBR备份时的修复:

1、进入救援模式

2、切换根,使根/表现为硬盘的根

chroot /mnt/sysp_w_picpath

3、重新生成mbr

grub-install /dev/sda

当然也可以使用状况一中的grub的方式生成mbr

4、sync同步

5、reboot重启

实验二、删除/boot下所有文件(rm -rf /boot)

恢复:

1、进入救援模式

2、切换根

chroot /mnt/sysp_w_picpath

3、在/boot下生成initramfs文件

mkinitrd /boot/initramfs-`uname -r`.img  `uname -r`

4、挂载光盘,将光盘的内核文件拷贝到/boot下

mount /dev/sr0 /mnt

cp /mnt/isolinux/vmlinuz /boot/

5、安装grub,生成grub文件

grub-install /dev/sda

6、创建并编辑grub.conf文件

vim /boot/grub/grub.conf

default=0

timeout=5

title centos6.9

kernel /vmlinuz root=/dev/sda2

initrd /initramfs-2.6.32-696.el6.x86_64.img

7、sync同步

8、退出切换的根,并且重启即可

exit;reboot

如果不退出,那么reboot无法使用

实验三、在分区情况下,删除/boot下所有文件,删除/etc/fstab

1、进入救援模式,但是由于没有/etc/fstab文件所以根无法自动挂载到/mnt/sysp_w_picpath

2、找到根在哪个分区

建一个临时目录作为挂载点:mkdir /mnt/tmp

尝试所有sda挂载:mount /dev/sda{1,2,...} /mnt/tmp

ls /mnt/tmp 查看文件,判断哪个是根

3、挂载根

mount /dev/sda2 /mnt/tmp

4、创建fstab文件并写内容

cat > /mnt/tmp/etc/fstab

/dev/sda1  /boot ext4 defaults 0 0

/dev/sda2  /    ext4 defaults 0 0

/dev/sda3  /app  ext4 defaults 0 0

/dev/sda5  swap  swap defaults 0 0

使用Ctrl+d 结束输入。不能使用Ctrl+c退出,否则会删除最后一条记录。

5、写完重启再进救援模式,就会自动挂载根到/mnt/sysp_w_picpath了

6、修复/boot如实验二,或者使用如下方法

1)进去救援模式后挂载光盘

mkdir /mnt/cdrom 创建临时目录作为挂载点

mount /dev/sr0 /mnt/cdrom 挂载光盘

2)安装内核包

如果在安装内核包之前没有切换根,那么使用下面的命令来安装

rpm -ivh /mnt/cdrom/Packages/kernel-2.6.32-696.el6.x86_64.rpm --root=/mnt/sysp_w_picpath --force

如果已经切换根,那么使用下面的命令来安装

rpm -ivh /mnt/cdrom/Packages/kernel-2.6.32-696.el6.x86_64.rpm --force

3)在已经切换根(chroot /mnt/sysp_w_picpath)的情况下,安装grub

grub-install /dev/sda  安装grub

sync 同步

4)编辑/boot/grub/grub.conf文件

vim /boot/grub/grub.conf

default=0

timeout=5

title linux

kernel /vmlinuz-2.6.32-696.el6.x86_64 root=UUID=6da11b60-dd80-460a-a00f-beb8b3373b5c

initrd  /initramfs-2.6.32-696.el6.x86_64.img

说明:①UUID可以通过r!blkid /dev/sda2导入

②/vmlinuz-2.6.32-696.el6.x86_64和initrd /initramfs-2.6.32-696.el6.x86_64.img的文件名都可以通过r!ls /boot/导入    。

③不写grub.conf文件就没有菜单,会出错,不过可以在出错界面直接写kernel /vmlinuz-2.6.32-696.el6.x86_64以及initrd /initramfs-2.6.32-696.el6.x86_64.img 。临时启动了系统之后再写去编辑grub.conf文件

5)退出切换的根并且重启系统

exit;reboot

实验四、在逻辑卷环境下删除/boot下所有文件,删除/etc/fstab:

修复:

1、进入救援模式

2、激活卷组

vgchange -ay

使用lvscan查看逻辑卷状态此时是active了

3、挂载逻辑卷

blkid  查看逻辑卷名,为下面的挂载做准备

mkdir /mnt/tmp 创建目录作为挂载点

mount /dev/UolGroup/lv_root /mnt/tmp 挂载逻辑卷

4、编辑fstab文件

cat > /mnt/tmp/etc/fstab

/dev/sda1          /boot   ext4 defaults 0 0

/dev/UolGroup/lv_root  /     ext4 defaults 0 0

/dev/UolGroup/lv_home  /home  ext4 defaults 0 0

/dev/UolGroup/lv_swap  swap   swap defaults 0 0

5、重启之后再进入救援模式来修复/boot,此后的步骤完全同实验三的修复/boot

实验五、/sbin/init故障(被移走mv /sbin/init /app):

修复:

1、在选择内核的界面按a,在UUID后面加一个参数init=/bin/bash

/bin/bash是系统自带的程序,可以使用这个先启动系统(不过起来后仅能使用部分命令)

2、系统启动后重新挂载根/为可写(启动后是只读的,不能写文件,不能挂载/app)

mount -o remount,rw /

3、挂载/app

mount /dev/sda3 /app  挂载/app对应的分区

4、将init文件移回来

mv /app/init /sbin/

如果是删除了init文件,那么可以利用光盘重装init:

1)挂载光盘

mount /dev/sr0 /mnt/

2) 重装init:

rpm -ivh /mnt/Packages/upstart-0.6.5-16.e16.x86_64.rpm --force

5、重启

实验六:自制linux:

准备工作:添加一块新硬盘,将来将自制的Linux系统放在这里

使硬盘生效: echo '- - -'>/sys/class/scsi_host/host2/scan 或者

echo '- - -'>/sys/class/scsi_host/host0/scan

步骤:

1、分区并创建文件系统

分两个必要的分区(第一个100M即可;余下所有空间给第二个分区)

fdisk /dev/sdb       (/dev/sdb1对应/boot  /dev/sdb2对应根 /)

========================================================================================

========================================================================================

mkfs.ext4 /dev/sdb1 将/dev/sdb1格式化为ext4文件系统

mkfs.ext4 /dev/sdb2 将/dev/sdb2格式化为ext4文件系统

2、创建一级目录并且挂载/dev/sdb1

mkdir /mnt/boot 子目录必须为boot,因为安装grub的时候,自己指定的根如果是/mnt,它会自动找/mnt/下的boot

mount /dev/sdb1 /mnt/boot  挂载boot

3、安装grub

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

========================================================================================

========================================================================================

装完之后确认一下/mnt/boot/grub/下有好几个文件,并且使用命令hexdump -C -n 512 /dev/sdb 查看有正确的MBR数据

4、拷贝内核文件和initramfs文件

cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /mnt/boot/

cp /boot/initramfs-2.6.32-642.el6.x86_64.img /mnt/boot/

5、建立grub.conf:

vim /mnt/boot/grub.conf

default=0

timeout=3

title chenlinux

kernel /vmlinuz-2.6.32-642.el6.x86_64 root=/dev/sdb2 selinux=0 init=/bin/bash

initrd /initramfs-2.6.32-642.el6.x86_64.img

6、创建一级目录,并挂载/dev/sdb2

mkdir /mnt/sysroot

mount /dev/sdb2 /mnt/sysroot

7、复制相关命令及库文件到/mnt/sysroot(复制ls,cat,vim,reboot,hostname,ping,bash,insmod,ip,ifconfig等)

可以利用脚本实现拷贝,脚本内容如下:

#!/bin/bash

. /etc/init.d/functions

echo "目标目录是:/mnt/sysroot"

[ -d /mnt/sysroot ]||mkdir /mnt/sysroot

cpcmd(){

if which $needcmd &>/dev/null;then

local cmd=`which --skip-alias $needcmd`

local dir=`dirname $cmd`

[ -d /mnt/sysroot$dir ]||mkdir -p /mnt/sysroot$dir

if [ -f /mnt/sysroot$cmd ];then

echo "$cmd         已存在"

else

cp $cmd /mnt/sysroot$dir&&echo `action "$cmd" true`

fi

elif [ "$needcmd" == "quit" ];then

exit

else

echo "命令不存在或者该命令是内部命令或者该命令是别名"

fi

}

cpso(){

if which $needcmd &>/dev/null;then

local so=`ldd $(which --skip-alias $needcmd)|egrep -o "/.* "`

for i in $so ;do

local sodir=`dirname $i`

[ -d /mnt/sysroot$sodir ]||mkdir -p /mnt/sysroot$sodir

if [ -f /mnt/sysroot$i ];then

echo "$i          已存在"

else

cp $i /mnt/sysroot$sodir&&echo `action "$cmd" true`

fi

done

fi

}

until [[ "$needcmd" == "quit" ]];do

read -p "请输入需要复制的命令(quit退出): " needcmd

cpcmd

cpso

done

8、 拷贝网卡驱动,使其可以配置ip

cp /lib/modules/2.6.32-696.el6.x86_64/kernel/drivers/net/e1000/e1000.ko

/mnt/sysroot/lib64/

9、创建必须的子目录

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

10、sync同步

验证:创建新的虚拟机,选择现有磁盘,使用自己做的linux系统硬盘启动

实验七、内核编译(编译之前改一下cpu数量可以使速度快点)

1、rz 导入源码包,比如导入/neihe/下

cd /neihe/

rz linux-4.13.2.tar.xz

2、解包到当前目录下

tar -xvf linux-4.13.2.tar.xz

3、安装包组及必要的包

yum groupinstall "development tools"

yum install ncurses-devel

yum install openssl-devel

4、从现有系统拷贝config文件

cp /boot/config-2.6.32-696.el6.x86_64 /neihe/linux-4.13.2/.config

5、执行config脚本

1)cd /neihe/linux-4.13.2/

2)make  menuconfig

①使用此命令必须进入解压后的文件夹才能使用,否则不能使用,会出现如下错误:

make: ***No rule to make target “menuconfig”.stop

②有时候还会出现下面的错误:

your display is too small to run menuconfig!

那么把窗口调大点就好了。

③由下图可看出运行.config脚本需要ncurses-devel包,不过在上面已经安装过了。

 3)执行.config脚本,改配置使系统支持ntfs分区

file systems -->DOS/FAT/NT -->设置NTFS file为M-->设置write为*-->退出

Networking Support-->设置network physical为M-->exit-->yes保存

6、编译

make -j 4

4表示利用4个CPU来编译。如果想要看看编译过程耗时多少,并且编译完成之后发警报提醒自己,那么可以使用下面的命令来编译

date >> /app/date.log ; make -j 4 ;date >> /app/date.log; for i in {1..5};do echo -e "\a";sleep 0.5;done

编译如果出现如下错误:

make: Warning: File `/usr/src/linux-2.6.35.7-nanosg20/arch/arm/Makefile' has modification time 3.4e+08 s in the future

make[1]: Warning: File `scripts/Makefile.host' has modification time 3.4e+08 s in the future HOSTCC scripts/basic/fixdep scripts/basic/fixdep.c:398: fatal error: opening dependency file scripts/basic/.fixdep.d: Permission denied compilation terminated.

这个错误提示信息我们,Makefile的修改时间点是Linux当前的一个未来时间点。说明当前时间有问题,可以修改为正确的当前时间来解决这个问题

date -s “xxxx-xx-xx hh:mm:ss”

7、安装模块,这一步就会生成/lib/modules模块文件了

make modules_install

8、安装内核相关文件,这一步会生成/boot/vmlinuz-...文件了

make install

附:卸载内核:

删除/lib/modules/目录下不需要的内核库文件

删除不需要的内核源码

删除/boot目录下启动的内核和内核映像文件

更改grub的配置文件,删除不需要的内核启动列表

以上就是博主在实验过程中用到的命令以及出现的错误,希望对大家有所帮助,欢迎留言,共同探讨。

转载于:https://blog.51cto.com/13150617/1967631

修复/boot及/etc/fstab、自制linux、编译安装内核相关推荐

  1. Linux 编译安装内核

    一.简介 内核,是一个操作系统的核心.它负责管理系统的进程.内存.设备驱动程序.文件和网络系统,决定着系统的性能和稳定性.Linux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新.新的内核修 ...

  2. linux编译安装Nginx1.6.0+MySQL5.6.19+PHP5.5.14

    linux编译安装Nginx1.6.0+MySQL5.6.19+PHP5.5.14的方法对于 我这个小菜菜来讲是非常的复杂的还好有这篇文章,下面一起来看看吧. 一.使用系统镜像文件配置本地yum源 1 ...

  3. linux下运行yolo,deepin(linux)编译安装yolo v4测试效果

    # 背景 五一放假的最后一天我也凑了个热闹,试一下新鲜出炉的yolo v4, 由于没有装CUDA和CUDNN,只试了一下在CPU上的速度和效果,电脑环境及编译依赖如下: * deepin 15.11桌 ...

  4. linux libvpx编译安装,linux编译安装时常见错误解决办法

    **configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution** 复 ...

  5. Linux编译安装GCC-5.1.0

    2019独角兽企业重金招聘Python工程师标准>>> Linux编译安装GCC-5.1.0 Linux下编写C/C++程序自然缺不了一个优秀的编译器,Linux下比较常见的自然是G ...

  6. linux编译安装nginx失败怎么办?排错思路及方法

    1.分析: nginx编译安装失败一般会出现在三个方面 编译环境安装不全 安装的时候参数出错 配置文件修改出错 2.编译环境安装不全 如果你的编译环境安装的不全,在你编译安装的时候可能会报错 [roo ...

  7. linux游戏编译,Linux编译安装开源3D赛车游戏Vdrift

    Linux编译安装开源3D赛车游戏Vdrift,跟大家分享 首先,去http://vdrift.net/ 下载源代码包,我下载的version是2009-6-15 然后解压vdrift-2009-06 ...

  8. Linux编译安装qt5.9,Linux CentOS7 安装 Qt 5.9.2

    Linux CentOS7 安装 Qt 5.9.2 参考链接 http://doc.qt.io/qt-5/linux.html sudo yum groupinstall "C Develo ...

  9. linux rsync yum安装,Linux安装yum安装rsync 、Linux编译安装最新版rsync

    Loading... # Linux安装yum安装rsync .Linux编译安装最新版rsync ## 针对CentOS采用 yum 安装 ### 安装 ``` yum install rsync ...

  10. linux引导分区被格式化修复,/boot分区、fstab文件、/bin/mount一次性被误除修复方法...

    fstab文件丢失.boot分区被删.mount文件被删解决办法 1.解决问题的思路: a.修复fatab文件 b.修复mount命令 c.修复boot分区 d.安装grub 准备:将boot分区进行 ...

最新文章

  1. 浏览器兼容编码与解码的问题
  2. ECshop网点程序优化-后台添加类目自动选择上次父类目并计算Sort Order
  3. tomcat手动发布
  4. 移动Oracle的用户表空间文件方法
  5. 按创建日期删除指定日期之前的文件夹及文件夹下的所有子目录
  6. php 辅助函数,辅助函数 - Laravel 5.8 中文文档手册 - php中文网手册
  7. linux下文件恢复方法,Linux下误删文件恢复办法
  8. 3D~RPG游戏的制作
  9. 阿里云MFA绑定Chrome浏览器
  10. 文本溢出显示省略号并显示tooltip组件
  11. 计算机科学家与科学之路----2000年图灵奖得主美籍华人姚期智院士特邀报告
  12. jsp实现文件的上传
  13. 02) android studio 创建安卓虚拟机,使用虚拟机调试
  14. 阿里云和腾讯云服务器哪个好用?
  15. 矢量点积与矢量叉乘的微分
  16. 【maven】Maven异常:Could not find artifact
  17. PCL Super4PCS点云粗配准(源码编译)
  18. 从零开始制作游戏辅助
  19. 复睿智行CC++开发实习面试
  20. mac 终端命令行自动补全并且忽略大小写

热门文章

  1. LigerUI之Grid使用详解(三)——字典数据展示
  2. 循环赛日常表算法(N可为奇数和偶数)
  3. windows 2003 上Lotus Notes 客户端无法运行的解决办法
  4. linux菜鸟要飞-根目录
  5. /proc/meminfo文件内容详解
  6. 华为的手册和官网视频,学习网络基础
  7. 漫画:什么是一致性哈希?
  8. FRR BGP协议分析11 -- ZEBRA初始化
  9. gdb调试出现“no debugging symbols found”
  10. Just Pour the Water ZOJ - 2974 (矩阵快速幂)