全部博文(151)
分类: LINUX
2009-11-19 20:43:01
造成系统无法正常开机的原因比较多:
1) 硬盘MBR错误或遗失
2) 硬盘分割表损坏
3) /etc/fstab设定错误
4) 自行编译的kernel不支援挂载于”/”目录的档案系统
5) 硬盘损坏或不正常开机
------------------------------------------------------------------------
备份还原MBR
-------------------------------------------------------------------------
MBR(Master Boot Record) 位于硬盘的最前端(cylinder0,head0,sector1)
,主要包含开机程序(可能为系统本身的开机程序或其他的开机管理程序,如LILO或GRUB)及硬盘分区表,其大小为512Bytes.MBR分成以下3个部分:
---------------------------------------------------------------------------
备份MBR
命令:
[root@localhost ~]# dd if=/dev/sda of=mbr-backup.img bs=512 count=1
1+0 records in
1+0 records out
所备份的MBR资料将会存放在执行此指令的目录下,例如所备份的文件会放在/root目录中。只要将此文件存储在别的媒体上即可,如其他主机,CDROM或其他分区。
若使用LILO开机管理程序,在安装时候,lilo指令会将安装目的硬盘资料备份在/boot目录中.例如有的LILO设定档/etc/lilo.conf如下:
prompt
timeout=50
default=linux
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
lba32
……
表示执行lilo指令后,LILO开机管理程序会被安装在/dev/had的MBR上。而/dev/had原本MBR上的资料将会备份为/boot/boot.0300,此档案和用dd命令所做出来的MBR备份是一样的:
[root@localhost ~]# ls –l
……
-rw-r--r-- 1 root root 512 Jul 23 14:27 mbr-backup.img
…..
其中boot.0300的0300为/dev/had的硬盘代号,若将LILO安装在/dev/hda1,则原本/dev/hda1上的开机资料将会备份为/boot/boot.0301,不过这不是我们关心的MBR资料,所以亦不像boot.0300这么重要。不同的硬盘将会使用不同的硬盘代号,例如/dev/sda所备份的MBR资料,其档名为boot.0800
-----------------------------------------------
还原MBR
命令:
[root@localhost ~]# dd if=mbr-backup.img of=/dev/sda bs=512 count=1
1+0 records in
1+0 records out
若干时LILO开机管理程序,可以藉由反安装LILO而还原硬盘MBR的资料
#lilo –u
系统将反安装LILO开机管理程序,亦还原之前硬盘的MBR资料.当然也可以直接使用LILO所备份的档案来还原,而不使用lilo –u指令。
[root@localhost ~]# dd if=/boot/boot.0300 of=/dev/sda bs=512 count=1
++++++++++++++++++++++++++++++++++++++++++++++++++
列出硬盘分区表
几下硬盘分区表,比如记下起始磁区7639,结束磁区为10011。然后就可以测试一下动态调整硬盘分区软件,而不用担心无法还原硬盘分区表。
[root@localhost ~]# fdisk -l /dev/sda
Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 778 6144862+ 83 Linux
/dev/sda3 779 842 514080 82 Linux swap
/dev/sda4 843 1044 1622565 5 Extended
/dev/sda5 843 1044 1622533+ 83 Linux
使用如下命令将分区表记录备案:
[root@localhost ~]# fdisk -l /dev/sda > partition-table.txt
++++++++++++++++++++++++++++++++++++++++++++++++++++
开机故障排除
硬盘MBR发生错误就无法正常开机,但硬盘各个分区的资料基本上都还是存在的。因此我们只要能够将这些问题排除,就可以正常开机了.若只是单纯的开机程序损坏,我们可以通过救援光盘开机就可以修复。然而若是整个MBR的资料损坏,解决的方式会比较麻烦.因为MBR的资料包含了硬盘分割表,所以若是MBR有问题或是硬盘分区表错误,就无法读取硬盘分区,并无法读取存放在硬盘分区上的MBR备份资料。
--------------------------
以Linux安装光盘的救援模式开机
1) 启动,插入光盘
2) boot:linux rescue
3) 选择中英文,键盘类型,是否启动网卡
4) 选择挂载为读写模式,linux的分区将被挂载到/mnt/sysimage目录
5) 执行命令:
sh-2.05b#chroot /mnt/sysimage
sh-0.25b#grub-install /dev/sda【此命令将重新安装grub】
sh-0.25b#exit
若开机程序是LILO.则执行lilo命令来重新安装,后重启。
---------------------------
以GRUB开机光盘开机
GRUB--------功能强大的开机管理程序,建议使用其来开机。
虽然可以使用grub-install /dev/fd0指令将GRUB安装在磁片上,亦用Nero将它烧成光盘.但此做法只符合制作时的那台机器。若将此开机磁盘拿给别的机器使用,会发生因找不到/boot/grub/menu.lst档而只出现grub>提示字元的现象。虽然还是可以敲指令开启系统,但还是不放方便。
-----------------------------
制作GRUB开机光盘
如果我们将整个GRUB的系统包括menu.lst开机选单做成开机光盘,即可解决此问题。且可以启动绝大多是的系统。另外,还可以保留系统预设的LILO开机管理程序,但另外制作GRUB的开机光盘在救援时使用。
自行下载编译制作GRUB开机光盘,适合所有发行版。制作完成后,可以将GRUB安装的目录删除,亦不影响系统上原有的开机管理程序。
下载: 网站上下载GRUB的tar包.
编译安装前请确保系统已经安装gcc套件
tar zxvf grub-0.95.tar.gz
cd grub-0.95
./configure –prefix=/usr/local/grub【编译程序的设定,指定将GRUB安装到/usr/local/grub目录中】
make
make install
GRUB安装完毕后,下面来制作开机关盘:
mkdir /root/iso
mkdir –p /root/iso/boot/grub
cp /usr/local/grub/share/grub/i386-pc/stage2_eltorito /root/iso/boot/grub/【将开机需要的stage2_eltorito复制到/root/iso/boot/grub/目录中】
接着在/root/iso/boot/grub目录下建立名称为menu.lst的开机选单,内容如下:
default=0
timeout=5
fallback 2
color yellow/blue white/brown
title--------------Powered by Flag Publishing-----------------------
rootnoverify (hd0,0)
title Windows
rootnoverify (hd0,0)
chainloader +1
makeactive
title FreeBSD in /dev/hda1
root (hd0,0,a)
kernel /boot/loader
title Linux in /dev/hda1
root (hd0,0)
kernel /boot/vmlinuz root=/dev/hda1 ro
title Linux in /dev/hda2
root (hd0,1)
kernel /boot/vmlinuz root=/dev/hda2 ro
title Red Hat Enterprise Linux AS (2.6.9-55.ELsmp)
root (hd0,0)
kernel /vmlinuz-2.6.9-55.ELsmp ro root=LABEL=/ rhgb quiet
initrd /initrd-2.6.9-55.ELsmp.img
title Red Hat Enterprise Linux AS-up (2.6.9-55.EL)
root (hd0,0)
kernel /vmlinuz-2.6.9-55.EL ro root=LABEL=/ rhgb quiet
initrd /initrd-2.6.9-55.EL.img
title--------------OVER------------------------
rootnoverify (hd0,0)
以上是GRUB开机选单的基本设定,参考
我们只需要使用Linux发行版会将系统内核链接为/boot/vmlinuz的原则,将常用的系统及Linux分割区写成GRUB开机选单而已。如果系统预设没有将系统核心链接为/boot/vmlinuz,就需要在主机下自行链接:
[root@localhost ~]# ln -s /boot/vmlinuz-2.6.9-55.ELsmp /boot/vmlinuz
【如果Linux分割区不在所制作的选单内,或是忘记了链接Linux的开机程序,起始还是可以使用GRUB开机,见后文】
当开机选单制作完成后,就可以制作GRUB开机光盘的映像档了,如下操作:
[root@localhost ~]# cd /root/
[root@localhost ~]# LANG=C //将语言设置为英文,避免错误
[root@localhost ~]# mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o grub1.iso iso
【boot/grub/stage2_eltorito:使用的是相对路径,指的是/root/iso/boot/grub目录下的开机档】
【-o grub.iso:指定开机光盘映像档的文件名】
【生成的grub.iso会在/root下,将其考出,在windows上烧制成引导盘,此盘中有两个文件,一个是menu.lst一个是stage2_eltorito】
-----------------------------------------------------------------------------
以GRUB开机光盘开机
用上面制作的关盘开机看到的是这个画面
按e键:编辑
按c键:进入GRUB命令模式后出现:
grub>help
常用命令:
grub> roo (hd0, 此时按table补全,就可以看到所有的硬盘信息
grub> roo (hd0, 1)
grub> cat /boot/grub/menu.lst 查看GRUB开机选单的设定档
grub> kernel /boot/vmlinuz-2.6.9-55.ELsmp ro root=LABEL=/ rhgb quiet
grub> initrd /boot/initrd-2.6.9-55.ELsmp.img
grub> boot 此时如果顺利,就可以开机
------------------------------------------
【当menu.lst不和root一个分区,应该如下操作:
grub> root (hd0,5) ---à进入根分区
grub> kernel (hd0,4)/vmlinuz-2.6.9-55.ELsmp ro root=LABEL=/ rhgb quiet
grub> initrd (hd0,4)/initrd-2.6.9-55.ELsmp.img
grub>boot
就这样就可以开机了】
-------------------------------------------
通过Serial Port开启没有显示器的Linux主机
GRUB支持使用Serial Port来控制,也就是说可以通过COMA或COM2来传送GRUB指令及接收信息.如果两台电脑都有Serial Port,则就可以用一条Null Modem来链接Linux服务器的COM1和Notebook的COM1,以GRUB指令来修复开机程序遗失问题。
编辑/root/iso/boot/grub/menu.lst文件:
default=1
timeout=5
fallback 2
color yellow/blue white/brown
title--------------Powered by Flag Publishing-----------------------
rootnoverify (hd0,0)
title GRUB via a serial line
serial –unit=0 –speed=9600
terminal serial
#设定会将信号传送到COM1上,若是将Null Modem接在服务器的COM2上,则将
#--umit=0改为---unit=1
title Windows
rootnoverify (hd0,0)
chainloader +1
makeactive
………………………
【注意default的值,直到刚才添加的文件上】
插入光盘后,系统会自动选择进入刚才的设置
此时画面会冻结,无法输入任何指令,因为现在GRUB只接受Serial Port所传来的信息.因为我们必须设定使用Serial Port和GRUB互动,以windows2003为例,其他亦可,
当连接后会出现GRUB引导的界面,然后选择开机程序!
++++++++++++++++++++++++++++++++++++++++++++++++
解决整个MBR或硬盘分区表的错误
若是整个MBR或是硬盘分割表错误,将无法正常启动Linux,因为无法读取到原本正确的分区表。现在用Linux安装关盘进入救援模式.进入救援模式后,这时就需要上文所作的MBR分区表或是硬盘分区表。
起始只要有硬盘分区表,就可以照着原来的分区方式重新分区硬盘。当硬盘分好后,重新挂载硬盘【sh-2.05b#chroot /mnt/sysimage】并安装开机程序【sh-0.25b#grub-install /dev/sda
】即可。如果有MBR的备份档,则进入linux安装光盘的救援模式,然后在最后选择Skip即不挂载任何分区,这是会跳到”-/bin/sh-2.05.b#”的提示符下,将事先保存在软盘中的MBR文档还原即可:
-/bin/sh-2.05.b #mkdir /mnt/floppy
-/bin/sh-2.05.b #mount /dev/fd0 /mnt/flpooy
-/bin/sh-2.05.b #dd if=/mnt/floppy/mbr-backup.img of=/dev/sda 【将MBR还原到/dev/sda上】
+++++++++++++++++++++++++++++++++++++++++++++++++
/etc/fstab文件设定错误
该文件是linux开机核心会参考的设定档,并依照它来挂载各个分区或档案系统。当该文件错误,则系统无法正常开机,但是我们可以进入救援模式,挂载/分区,然后修正/etc/fstab即可。
+++++++++++++++++++++++++++++++++++++++++++++++++
自行编译的kernel不支持/目录
若自行编译内核时,没将所有支持的系统加入核心中(如ext3),那么在开机时自然无法挂载这些系统的分区。我么一般可以以旧的内核开机,然后将要支援的档案系统加入内核即可。
+++++++++++++++++++++++++++++++++++++++++++++++++
免安装的Livs CD
下载:下载,它还支援NTFS,可以用它来开机并抢救NTFS分区下的资料。
可以在下载最新的LNX-BBC光盘映像。此系统只有50M
开机后,以root身份进入系统
1)#passwd //修改root密码 【默认无密码】
2)#df 【读取系统分区资料】
………….
查看/dev/sda1挂载到那里,例如
/dev/discs/disc0/part1
1011928 16428 944096 2% /mnt/rw/discs/disc0 /part1
…..
若需要修改此分割区的资料,则需将它挂载成读写模式,
#mount –o remount,rw /mnt/rw/discs/disc0/part1
接着启动SSHD,我们就可以通过网络将资料备份(或还原)到局域网其他哦机器上。
#ifconfig eth0 up
#ifconfig eth0 192.168.0.123 netmask 255.255.255.0
#/etc/init.d/sshd start 启动SSHD
+++++++++++++++++++++++++++++++++++++完+++++++++++++++++++++++++++++