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
评论列表(1条)
系统恢复是非常严肃的事情,如果真的出现这个问题我不会参考这篇文章,因为少了详细的背景描述和更专业的技术介绍