改变了/dev/hdaX的序号造成的安装内核自动配置grub的问题[已经解决]

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
vulcan
帖子: 9
注册时间: 2006-02-07 15:21
来自: Civil Aviation University of China
联系:

改变了/dev/hdaX的序号造成的安装内核自动配置grub的问题[已经解决]

#1

帖子 vulcan » 2007-02-08 11:25

硬盘被重新Fdisk过,但是记得分隔分区的扇区位置,重新建立分区表并不会影响系统的运行,也就是说分区还是跟以前一样的。
但是这个过程/dev/hda的序号号变了。比如以前linux根分区是/dev/hda8, 现在变成了/dev/hda6, 尽管在物理硬盘中是同一块区域没有变。
但是之后却发现安装自己编译的内核包之后,自动配置的menu.lst还是把启动项中的root设为了/dev/hda8,而不是/dev/hda6,要手动改到/dev/hda6才是正确的,才可以启动。用dpkg-reconfigure效果也一样。由于南方电信的网络访问gentoo源的问题,所以从gentoo转来使用ubuntu,对debian(ubuntu)的这种自动配置的机制不了解,有什么办法能让自动设置正确吗?是否这个reconfigure有个模板一样的东西存在,在第一次安装好系统之后,这个东西就定了?google了很久找不到,想来请教熟悉debian(ubuntu)的朋友

之前想错了方向,原来总想可能deb包中有一个脚本会根据某个设置的情况来做此设置,但是实际的情况是这个postinst调用的就是update-grub,
#/etc/kernel-img.conf
do_symlinks = yes
relative_links = yes
do_bootloader = no
do_bootfloppy = no
do_initrd = yes
link_in_boot = no
postinst_hook = /sbin/update-grub #调用update-grub
postrm_hook = /sbin/update-grub

也就是说直接运行update-grub就可以自动的更新menu.lst设置。
而update-grub是根据什么来自动生成menu.lst呢?
答案很简单,但是容易让人忽略,实际上就是/boot/menu.lst,当menu.lst文件不存在时,update-grub将会生成一个新的menu.lst,但是可能不正确。有则直接根据之前的menu.lst模板生成新的实际的menu.lst,老的进行备份。

所以要解决我提出来的情况,就是修改menu.lst模板就可以了,然后重新运行update-grub即可。修改menu.lst如下:
59 ## default kernel options
60 ## default kernel options for automagic boot options
61 ## If you want special options for specific kernels use kopt_x_y_z
62 ## where x.y.z is kernel version. Minor versions can be omitted.
63 ## e.g. kopt=root=/dev/hda1 ro
64 ## kopt_2_6_8=root=/dev/hdc1 ro
65 ## kopt_2_6_8_2_686=root=/dev/hdc2 ro
66 # kopt=root=UUID=a764e67f-e242-4d6e-b874-3f5ffcf30bfc ro
67 # kopt_2_6=root=/dev/hda6 ro
68
69 ## default grub root device
70 ## e.g. groot=(hd0,0)
71 # groot=(hd0,5)
改变以单个#的行中间的值即可,比如我改为了 kopt_2_6=root=/dev/hda6, groot=(hd0,5)
引申开去,如果要给内核加其他的启动选项,也可以加到这个模板当中,那么下次安装内核时,那些选项就不会被去掉了,比如vga=792等等内核参数。具体的,请建menu.lst中间的注释。
回复