Chinaunix首页 | 论坛 | 博客
  • 博客访问: 632686
  • 博文数量: 151
  • 博客积分: 4010
  • 博客等级: 上校
  • 技术积分: 1664
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-13 16:37
文章分类

全部博文(151)

文章存档

2010年(16)

2009年(135)

我的朋友

分类: LINUX

2009-11-19 20:43:01

造成系统无法正常开机的原因比较多:

1)  硬盘MBR错误或遗失

2)  硬盘分割表损坏

3)  /etc/fstab设定错误

4)  自行编译的kernel不支援挂载于”/”目录的档案系统

5)  硬盘损坏或不正常开机

 

------------------------------------------------------------------------

备份还原MBR

-------------------------------------------------------------------------

MBR(Master Boot Record) 位于硬盘的最前端(cylinder0head0sector1

,主要包含开机程序(可能为系统本身的开机程序或其他的开机管理程序,如LILOGRUB)及硬盘分区表,其大小为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/hadMBR上。而/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.03000300/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安装的目录删除,亦不影响系统上原有的开机管理程序。      

下载: 网站上下载GRUBtar.

编译安装前请确保系统已经安装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来控制,也就是说可以通过COMACOM2来传送GRUB指令及接收信息.如果两台电脑都有Serial Port,则就可以用一条Null Modem来链接Linux服务器的COM1NotebookCOM1,以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 PortGRUB互动,以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

 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

阅读(999) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~