Chinaunix首页 | 论坛 | 博客
  • 博客访问: 353872
  • 博文数量: 72
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 632
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-08 16:54
文章分类

全部博文(72)

文章存档

2007年(54)

2006年(18)

我的朋友

分类:

2006-11-08 20:36:26

更改分区后,引导Linux小结
 
前些天装完Slack后,想装一个Suse,就在Slack前的分区一分为二,作为Suse的/和/home,共用Swap,在安装过程中,仔细的观察了一下分区和Grub的信息,其实引导也不是那么麻烦。当然,首先还是在网上找了些相关的资料,所以才知道会出现情况,分区时特别小心,呵呵。。
 
来源:互联网 时间: 2006-04-11 今天整理硬盘,把整个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基本用法啦,不然会很痛苦哟 :)
#################################################################################

总结:经过验证,像这些问题完全可以解决,先说明一下,我的Linux系统是用grub for Dos来引导和安装的,包括Slackware和Suse。
 
(小弟也是凭自己的试验和理解来写的,如果有误的话,请各位指出来,让小弟也学习一下,谢了)
 
1、首先确定要怎么样对分区操作,是在Windows下,还是在Linux下,是合并分区还是增加分区,是在Linux系统前面还是后面,这些很关键。
 
2、不管在Windows下还是Linux下完成更改分区的操作,在执行前要先进入Linux系统,然后修改以下几个地方:
 
a、/etc/fstab,修改其中的载入点地址,在原来分区的基础上增加或减少,如增加1个分区,且在Linux系统前面,那么就载入点的值相应的增加1,减少也一样,如果在Linux后面,则不用任何修改。
如我在安装Suse前的硬盘分配如下:
### 前面4个为主分区,我用了两个,一个做扩展分区。
/dev/hda1  ----------- C(Windows XP安装目录)
### 以下为扩展分区
/dev/hda5  ----------- D盘
/dev/hda6  ----------- E盘
/dev/hda7  ----------- swap(交换分区)
/dev/hda8  ----------- /(Slack)
/dev/hda9  ----------- /home(Slack)

/dev/hda10 ----------- F盘
现在要将E盘分为3个区,来安装Suse系统,分配后硬盘分区如下:
### 前面4个为主分区,我用了两个,一个做扩展分区。
/dev/hda1  ----------- C(Windows XP安装目录)
### 以下为扩展分区
/dev/hda5  ----------- D盘
/dev/hda6  ----------- /boot(Suse)
/dev/hda7  ----------- /(Suse)
/dev/hda8  ----------- /home(Suse)
/dev/hda9  ----------- swap(交换分区)
/dev/hda10  ----------- /(Slack)
/dev/hda11  ----------- /home(Slack)

/dev/hda12 ----------- F盘
分区后比原来多了2个分区,然后原来Slack的分区号都增加2,那么fstab中的分区也应该加2
如原fstab内容如下:
# /etc/fstab
/dev/hda7       swap        swap       defaults    0   0
/dev/hda8       /         ext2        defaults    1   1
/dev/hda9       /home       ext2       defaults    1   2
/dev/hdb        /cdrom      iso9660       noauto,user   0   0
none          /proc        proc       defaults     0   0
none          /dev/pts      devpts         gid=5,mode=620 0   0
 
这时应修改为:
# /etc/fstab
/dev/hda9        swap        swap        defaults    0   0
/dev/hda10       /          ext2        defaults    1   1
/dev/hda11       /home        ext2        defaults     1   2
/dev/hdb         /cdrom       iso9660      noauto,user    0   0
none           /proc        proc        defaults     0   0
none           /dev/pts        devpts         gid=5,mode=620 0   0
 
b、修改Slack系统/boot/grub下的menu.lst文件,重新指向Slack分区。
原/boot/grub/menu.lst内容:
title Slackware 11.0
root   (hd0,7)
kernel (hd0,7)/boot/vmlinuz root=/dev/hda8 vga=791 ro
修改为:
title Slackware 11.0
root   (hd0,9)
kernel (hd0,9)/boot/vmlinuz root=/dev/hda10 vga=791 ro
 
3、按照计划好的空间进行格式化,建立分区,然后在C盘根目录下的menu.lst中添加上Suse的引导信息,
title SUSE 10.1 Linux
fallback 2
kernel (hd0,5)/boot/vmlinuz root=/dev/hda7 vga=791 ro
initrd (hd0,5)/boot/initrd
 
注意:在“(hd0,5)/boot/vmlinuz root=/dev/hda7 vga=791 ro”里面,第一个(hd0,5)其实就是/dev/hda6,因为grub是从(hd0,0)开始,而Linux是从/dev/hda1开始的,我也是反复用TAB试了好多次才确定的,因为不这样的话,系统就引导不了,最后只能这么解释,后来查了些资料也证实了这一点。
 
后记:其实fstab文件可以不修改的,在安装好系统后用single模式进入,然后再修改也可以。

##################################################################################
双系统由于win修改分区引起的linux无法启动问题的解决方法-Grub问题
 
   在装有windows和linux双操作系统上,由于更改了windows分区(合并或拆分)而导致linux无法启动的解决方法(多操作系统也如此):
问题起因:在windows上合并了两个分区,导致linux系统的分区符发生了变化,原来是sda10,现在变成了sda9,重新启动时无法看到grub菜单,显示 Grub loading ...... Please waiting.(死掉了)
解决方法:
准备:一张fedora急救盘或者redhat急救盘。我的系统是debian,fedora的急救盘仍然管用。
以debian为例讲述修复过程:
步骤:1.插入光盘,重新启动(BIOS设置光盘启动)
     2、在boot提示符下,输入:linux rescue
        boot> linux rescue
     3、选择默认(询问选择语言和键盘,直接回车就可以了)
     4、按Tab选择No (询问是否配置网络,这个就不用了)
     5、continue (是否继续,选择是)
     6、回车(无法映像到/mnt/sysimage,直接启动shell(因为我的是debian))
     7、fdisk -l(查看分区)
        找到你安装debian的分区ext3格式,记下盘符sda*(*为数字),下面是我的fdisk列表
/dev/sda1   *           1        1275    10241406    7  HPFS/NTFS
/dev/sda2            1276        9726    67882657+   f  W95 Ext'd (LBA)
/dev/sda5            1276        2550    10241406    7  HPFS/NTFS
/dev/sda6            2551        4462    15358108+   7  HPFS/NTFS
/dev/sda7            4463        7116    21318223+   b  W95 FAT32
/dev/sda8            7117        7179      506016   82  Linux swap / Solaris
/dev/sda9            7180        9064    15141231   83  Linux

     8、mkdir /mnt/linux
         创建linux下ext3的映像文件夹
     9、mkdir /mnt/linux/boot
         创建linux下boot的映像文件夹(无boot分区可跳过)
     10、mount -t ext3 /dev/sda* /mnt/linux
         挂载linux的ext3(sda*为linux的ext3分区)
     11、mount -t ext3 /dev/sda* /mnt/linux/boot(无boot分区可跳过)
         挂载linux的boot分区(sda*为linux的boot分区)
     12、chroot /mnt/linux
         现在你已经进到你的debian的shell了
     13、vi /boot/grub/menu.lst
         此刻开始进入关键的核心步骤,修改menu,将linux的ext3分区的标号-1替换原来的标号.
         例如:原linux系统是sda10,更改分区后linux的ext3变为sda9,则将(hd0,9)变为(hd0,8);root=/dev/sda10变为root=/dev/sda9
title Debian GNU/Linux, kernel 2.6.11-1-686-smp
        root (hd0,8)
        kernel /boot/vmlinuz-2.6.11-1-686-smp root=/dev/sda9 ro
        initrd /boot/initrd.img-2.6.11-1-686-smp
......
linux的其他核菜单类似修改,windows不变仍然是(hd0,0)
     14、vi /etc/fstab
        修改ext3和swap(和boot)的引导位置,将ext3的路径/dev/sda10改为/dev/sda9;swap的路径/dev/sda9改为/dev/sda8(如上例)
/dev/sda9      /               ext3    defaults,errors=remount-ro 0       1
/dev/sda8       none            swap    sw              0       0
    
     15、exit
退出chroot模式
     16、exit
退出急救模式
系统会自动重启,退出光盘,看看是不是一切ok了,呵呵,偷着笑吧,刚才的担忧都风消云散了。
备注:如果你的系统是redhat或者fedora就更简单了,按照前面的步骤运行到5,然后查看分区fdisk -l,这之后执行chroot /mnt/sysimage接13步。如果是其他的原因引起grub错误,那这里的步骤仅供参考,可能需要重装grub(这个我就不赘述了,google一下就会找到解决方法)。
 
 
建议使用 knoppix,做这种恢复系统的事情非常方便。
1. 用 knoppix 引导系统,如果不想进图形界面,在启动的时候打 "knoppix 2"
2. 挂原来系统的 / 分区,一般只要挂这个分区就好了,譬如 /mnt/hda9 之类
3. 修改 /mnt/hda9/etc/fstab
4. 修改 /mnt/hda9/boot/grub/menu.lst
5. 执行 grub-install --root-directory=/mnt/hda9 /dev/hda
6. reboot 
该方法对Ide硬盘可以,但是Scsi的硬盘就不行,如果knoppix用的内核是2.6也许能用,2.4的内核肯定不行(试过的)。大家根据自己的情况选择吧!
 
阅读(4987) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-03-22 21:03:31

很专业,我看不懂。 我另有一个办法。鉴于我的fc8是由硬盘上的dvd镜像安装的,且一直没敢删(怕以后重装,因为自己太菜),决定充分利用一下fedora-dvd-i386.iso。其实很简单,我重新引导后,安装界面就有升级现有系统,选择后会有三个选项:第一个是引导程序不做改变,更新引导;第二个是跳过;第三个是更改引导程序。选3的时候引导时还是不行,在试试1,果然原来的界面出来了,但背景没了。然后按e编辑一下,把原来分区前的分区号改成分区后的分区号(在grub中用find命令找回来的),果然能引导了,设置也没该, [:D] 。 (没有刻录机,只能充分利用硬盘了)