• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

更改分区后,linux无法启动,恢复小记

发布: 2007-7-04 12:06 | 作者: admin | 来源:  网友评论 | 查看: 46次 | 进入软件测试论坛讨论

领测软件测试网 今天整理硬盘,把整个D盘(hda5)腾了出来,终于有空间试验raid+lvm+reiserfs v4.0啦
立刻用PQ删除了分区,成了未分配空间。正如预料的,由于分区改动了,linux进不去了。
于是开始了一番恢复。。。。。。

Ok,Let`s go ! 先来看看分区情况吧! 

未删除分区情况:
/dev/md0  <---------------> RAID设备 (lfs-6.0优化根分区)
/dev/hda1 <---------------> C盘 (主分区)
/dev/hda2 <---------------> 扩展分区
/dev/hda3 <---------------> 主分区,未分配
/dev/hda4 <---------------> 主分区,未分配
/dev/hda5 <---------------> D盘  (逻辑分区)
/dev/hda6 <---------------> E盘  (逻辑分区)
/dev/hda7 <---------------> lfs-6.0根分区(未优化)
/dev/hda8 <---------------> /boot分区(全局)
/dev/hda9 <---------------> 线性RAID使用的分区(0)
/dev/hda10<---------------> Mandrake根分区
/dev/hda11<---------------> SWAP交换分区
/dev/hda12<---------------> 线性RAID使用的分区(1)
删除后分区情况:
/dev/md0  <---------------> RAID设备 (lfs-6.0优化根分区)
/dev/hda1 <---------------> C盘 (主分区)
/dev/hda2 <---------------> 扩展分区
/dev/hda3 <---------------> 主分区,未分配
/dev/hda4 <---------------> 主分区,未分配
/dev/hda5 <---------------> E盘  (逻辑分区)
/dev/hda6 <---------------> lfs-6.0根分区(未优化)
/dev/hda7 <---------------> /boot分区(全局)
/dev/hda8 <---------------> 线性RAID使用的分区(0)
/dev/hda9<---------------> Mandrake根分区
/dev/hda10<---------------> SWAP交换分区
/dev/hda11<---------------> 线性RAID使用的分区(1)

很明显,更改后的分区号=原分区号-1 (删除的D盘)
进入grub命令行:
grub> root (hd0,6)

Filesystem type is ext2fs, partition type 0x83

grub> kernel (hd0,6)/vmlinuz-lfs-6.0 root=/dev/hda6 vga=791

因为我的vmlinuz-lfs-6.0(lfs内核)是放在/boot分区(hda7)的
而grub中(hd0,0)表示第一块硬盘的第一个分区(/dev/hda1)
所以(hd0,6)就对应了/dev/hda7,(/boot分区)
而lfs-6.0根分区修改后是/dev/hda6  所以是root=/dev/hda6
当我得意的按下enter时,意外发生了:
Error 15: File not found
咦?怎么会找不到文件呢?莫非我的分析完全错误了?
接着我输入了:
grub> find / 按下TAB键,让grub列出(hd0,6)/下面的东东:
Possible files are: lost+found bin boot dev etc home lib .viminfo
mnt opt proc root sbin sys include tmp usr var

grub>
真是奇怪,怎么(hd0,6)会是我的lfs根分区呢?它应该是/boot呀。
查看下当前的分区情况吧:
grub> root (hd0, 按下TAB键显示当前分区:
 Possible partitions are:
   Partition num: 0,  Filesystem type is fat, partition type 0xb
   Partition num: 5,  Filesystem type unknown, partition type 0x7
   Partition num: 6,  Filesystem type is ext2fs, partition type 0x83
   Partition num: 7,  Filesystem type is ext2fs, partition type 0x83
   Partition num: 8,  Filesystem type is reiserfs, partition type 0xfd
   Partition num: 9,  Filesystem type is ext2fs, partition type 0x83
   Partition num: 10,  Filesystem type unknown, partition type 0x82
   Partition num: 11,  Filesystem type unknown, partition type 0xfd
grub>

将分区号+1,竟然仍然是修改前的分区号,只是少了(hd0,4)=/dev/hda5 真是#%^&
grub> find (hd0,7)/ 再次按下TAB键,显示/dev/hda8的内容:
grub vmlinuz us.klt System.map-2.6.8.1-12mdk config-2.6.8.1-
12mdk vmlinuz-2.6.8.1-12mdk diag1.img diag2.img message-graphic
initrd-2.6.8.1-12  vmlinuz-lfs-6.0 .................

grub>
果然!/dev/hda8仍然是/boot分区,/dev/hda7是我的lfs根分区
既然这样,那么原来的引导信息就应该可以正常引导了。

grub > kernel (hd0,7)/vmlinuz-lfs-6.0 root=/dev/hda7 vga=791

结果可想而知,还是不能正常引导。(当然喽,能引导的话,就没意义记下了 ^_^)
引导过程中,出现"no init found    root=.........."
看来是没有找到根分区,真是奇怪,(hd0,6)下的确是我的lfs根分区阿!?

莫非grub中标识的分区号和linux中的分区号标识不相同?? 试试先:
grub > kernel (hd0,7)/vmlinuz-lfs-6.0 root=/dev/hda6 vga=791
grub > boot
根据grub中标识的分区号,vmlinuz-lfs-6.0在(hd0,7)下
根据上面的分析,lfs-6.0的根分区是在/dev/hda6下

顺利进入!看来果真如此。grub仍然使用原始分区号,而linux中则是修改后的分区号
[root@NEWLFS ~]#cfdisk
 Name       Flags      Part Type  FSType          [Label]        Size (MB)
 --------------------------------------------------------------------------------
    hda1       Boot        Primary   W95FAT32                         6859.89
                           Logical   FreeSpace                       22413.89
   hda5                   Logical  NTFS             [^C]           26386.70
   hda6                   Logical   Linuxext3                       10734.00
   hda7                   Logical   Linuxext3                         106.93
   hda8                   Logical   Linux raidautodetect             3619.13
   hda9                   Logical   Linuxext3                        7221.80
   hda10                  Logical   Linux swap /Solaris               534.65
   hda11                  Logical   Linux raidautodetect             2146.80

结论:
删除一个分区,在grub中只是将这个分区号去掉 (hd0,4)而其他的分区号并不改变
而linux中其他的分区号会改变,例如删除hda5,位于hda5以后的分区:
分区号=原分区号-1
 
因此删除位于中间的分区是不好的,会导致grub与linux标识分区号不同,比较混乱。
俺也要赶紧把hda5做成lvm+ReiserFS v4.0,这么多分区,真要糊涂了。:)
另外grub中的TAB键补全功能十分的好用,相信从上面已经体现了一些
使用linux第一步就要会一些grub基本用法啦,不然会很痛苦哟 :)

这有篇中/英双语的grub info文档,没看过的话,一定要看看哦 ^_^
http://bbs.linuxsir.org/showthread.php?
t=135486&highlight=%CE%D2%B7%AD+%B7%AD%D2%EB+%D2%EB%B5%C4+grub+info%CE%C4%B5%B5

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网