当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 11 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 内核和grub产生的磁盘分区编号不同,导致每次升级引导失败
帖子发表于 : 2009-09-03 11:06 

注册: 2008-06-23 14:42
帖子: 308
送出感谢: 0 次
接收感谢: 0 次
我办公室电脑的硬盘有两个主分区,一个扩展分区,包含两个逻辑分区。
debian装在第二主分区。正常情况下应该是sda2是吧?而grub里应该写root (hd0, 1)。
我家里的电脑分区模式基本相同的是这样没错。

但这台里按照fstab里面的配置,sda3是root,而且内核配置grub时,产生的是root (hd0,2)。
一直以来没在意这个问题。当时grub安装在mbr上。

因为升级内核时总会把windows引导项丢掉,我复原了windows的mbr,并用live系统试图把grub4dos安装在分区里。
但grub4dos不认(hd0,2)。tab列表一看,只有(hd0,1)了。这没什么不好,于是将menu.lst里的(hd0,2)都换成(hd0,1),启动成功。

结果内核一升级,又启动不能了。用live启动一看,menu.lst又被改回了(hd0,2),grub4dos不认。
我只好又手动改回。并用默认的grub 0.97重写引导。可是没用,grub还是认(hd0,1),而内核照旧写(hd0,2)。

我该怎么样它正常一点?@_@

现在自己都没法搞清楚sda2 sda3哪个是debian分区,哪个是扩展分区。因为fstab里面还是/dev/sda3 /
但GParted显示sda3是扩展分区,sda2居然“无法找到挂载点”。。。


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 内核和grub产生的磁盘分区编号不同,导致每次升级引导失败
帖子发表于 : 2009-09-03 11:14 
头像

注册: 2007-08-05 17:40
帖子: 4979
送出感谢: 0 次
接收感谢: 6
学ubuntu的,使用UUID,怎么都错不了!
代码:
title      Ubuntu 9.04, kernel 2.6.28-15-generic
uuid      c9705c84-3f9a-4463-b4cc-1b85c11eb250
kernel      /boot/vmlinuz-2.6.28-15-generic root=UUID=c9705c84-3f9a-4463-b4cc-1b85c11eb250 ro quiet splash
initrd      /boot/initrd.img-2.6.28-15-generic
quiet


_________________
free VPN
YouKuDownLoader
代码:
pip3 install ykdl

install YouKuDownLoader, have fun in downloading.
YouKuDownLoader所支持网站列表


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 内核和grub产生的磁盘分区编号不同,导致每次升级引导失败
帖子发表于 : 2009-09-03 11:14 
头像

注册: 2007-05-06 2:46
帖子: 15634
送出感谢: 0 次
接收感谢: 2
一直眼专家门诊


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 内核和grub产生的磁盘分区编号不同,导致每次升级引导失败
帖子发表于 : 2009-09-03 11:31 
头像

注册: 2008-11-07 8:41
帖子: 234
送出感谢: 0 次
接收感谢: 0 次
恩 2楼正解 用UUID才是王道
虽然有的时候 UUID有点麻烦 但是 确实可以解决lz的问题


_________________
fall again
smooth criminal
they don't care about us
billie jean
beat it
dangerous
the lost children
childhood
ben
i will be there
speechless
she is out of my life
rock with you
...
LOVE U FOREVER


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 内核和grub产生的磁盘分区编号不同,导致每次升级引导失败
帖子发表于 : 2009-09-03 11:31 

注册: 2008-06-23 14:42
帖子: 308
送出感谢: 0 次
接收感谢: 0 次
2楼的UUID代替root让我明白了一个问题,就是fstab里root的挂载点设置是无效的。debian的内核启动参数里也有root=UUID=...

我刚试了把fstab里的sda3改成sda2并重启,我都准备好它启动失败后用live恢复了,但它居然完全正常!
而且GParted里显示的sda2的挂载点也正确了。fstab反而起了一个混淆的作用。
剩下的就是看看内核再次升级的时候自动配置是否正确了。

好奇怪,难道grub是否装在mbr上会使内核对分区逻辑产生不同的认知?


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 内核和grub产生的磁盘分区编号不同,导致每次升级引导失败
帖子发表于 : 2009-09-03 11:37 

注册: 2008-06-23 14:42
帖子: 308
送出感谢: 0 次
接收感谢: 0 次
UUID不错啊,但解决的不是debian分区对应错乱的问题,我都要手动编辑它,那么编辑回(hd0,1)还更简单


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 内核和grub产生的磁盘分区编号不同,导致每次升级引导失败
帖子发表于 : 2009-09-03 12:21 
头像

注册: 2007-12-17 21:41
帖子: 782
送出感谢: 67
接收感谢: 23
1
引用:
复原了windows的mbr


可能导致分区表顺序混乱,这应该就是问题根源所在。可以运行
sudo fdisk /dev/sda
再选择相应选项,修正分区顺序,以后就不会出现这种情况。

2
引用:
因为升级内核时总会把windows引导项丢掉


在 menu.lst 中加上 win 的启动项就行,文件中自带样例


_________________
* 日本人说:就算我们不拜靖国神社,韩国人也不会买我们的东西;
就算我们拜靖国神社,中国人照样买我们的东西。

* 历史不相信眼泪。能挡住狼的不是篱笆,而是棍子和猎枪。
--------------
Careone <emacslocale^126.com>
https://sourceforge.net/projects/emacslocale/files/


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 内核和grub产生的磁盘分区编号不同,导致每次升级引导失败
帖子发表于 : 2009-09-03 15:05 

注册: 2008-06-23 14:42
帖子: 308
送出感谢: 0 次
接收感谢: 0 次
careone 写道:
1
引用:
复原了windows的mbr


可能导致分区表顺序混乱,这应该就是问题根源所在。可以运行
sudo fdisk /dev/sda
再选择相应选项,修正分区顺序,以后就不会出现这种情况。

2
引用:
因为升级内核时总会把windows引导项丢掉


在 menu.lst 中加上 win 的启动项就行,文件中自带样例


应该没有。其实我用的不是真的windows的MBR,而是syslinux附带的,用dd命令写入的,440字节,完全不接触分区表,我开始想用windows的,但发现没安装盘不行,diskpart不会单独做这件事。
我就是烦每次一升内核就非得改menu.lst,才有这些问题。


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

编辑一下,你说的第一点不无可能。回想起来diskpart我用了一次,虽然没起作用,但它不知做了什么多余事使syslinux的引导代码失败了,于是我又写了一次mbr。可能diskpart做了另一件多余事就是动了分区表的顺序。之前的MBR没保存,没法证明了。


页首
 用户资料  
 
9 楼 
 文章标题 : Re: 内核和grub产生的磁盘分区编号不同,导致每次升级引导失败
帖子发表于 : 2009-09-03 15:24 

注册: 2008-05-03 23:42
帖子: 3681
送出感谢: 4
接收感谢: 6
1. 为什么 (hd0,2) 会变成 (hd0,1)
显然原来的分区是乱序的,linux 可以容忍 sda1-sda3-sda2 这样的顺序。你在 windows 下面整了一下, windows 一旦逮到机会就把它按顺序编号了,于是变成 sda1-sda2-sda3

2.为什么升级内核时总会把windows引导项丢掉;以及为什么升级内核后 menu.lst 又被改回了 (hd0,2)
仔细阅读 viewtopic.php?f=77&t=187058 的 8 楼。
简单地说,menu.lst 中带 # 的行不仅仅是注释这么简单。你需要修改这一行
# groot=(hd0,2)
并且把 windows 的启动项放在 ### BEGIN AUTOMAGIC KERNELS LIST 之前,或者 ### END DEBIAN AUTOMAGIC KERNELS LIST 之后。

3. 关于 fstab:
如果用的是像 /dev/sda3 这样的设备名,现在应该改成 sda2,因为 sda3 现在已经变成 sda2 了。
至于没改时也能启动,实际上是以 sda3 挂载 根 失败,根分区仍然保持为 grub 指定的 root=UUID=... ,它是正确的。
实际上 fstab 里不写关于 / 的那一行,也是可以启动的。/ 在 menu.lst 里已经指定了。如果不知道根分区是哪个 ,如何访问 /etc/fstab? 所以根分区一定早在 fstab 之前就已经挂载。 fstab 会把根重新挂载一次,用 fstab 里指定的挂载选项。


页首
 用户资料  
 
10 楼 
 文章标题 : Re: 内核和grub产生的磁盘分区编号不同,导致每次升级引导失败
帖子发表于 : 2009-09-03 15:34 

注册: 2008-05-03 23:42
帖子: 3681
送出感谢: 4
接收感谢: 6
引用:
编辑一下,你说的第一点不无可能。回想起来diskpart我用了一次,虽然没起作用,但它不知做了什么多余事使syslinux的引导代码失败了,于是我又写了一次mbr。可能diskpart做了另一件多余事就是动了分区表的顺序。之前的MBR没保存,没法证明了。

windows 下大部分的分区软件都有这种行为,哪怕你什么也没干,只是看一下分区再退出,它都会悄悄排列编号。 windows 恨乱序的分区。而 linux ,恨分区编号的变化,因为这会使 grub 出毛病。linux 经常制造乱序分区,为的是保持原有序号不变。比如你在磁盘中部的空白处建立新分区,在 Linux 下通常会给它分配一个最末的编号,而不是把后面的分区编号都改变,这就造成乱序。


页首
 用户资料  
 
11 楼 
 文章标题 : Re: 内核和grub产生的磁盘分区编号不同,导致每次升级引导失败
帖子发表于 : 2009-09-03 15:40 

注册: 2008-06-23 14:42
帖子: 308
送出感谢: 0 次
接收感谢: 0 次
billbear 写道:
1. 为什么 (hd0,2) 会变成 (hd0,1)
显然原来的分区是乱序的,linux 可以容忍 sda1-sda3-sda2 这样的顺序。你在 windows 下面整了一下, windows 一旦逮到机会就把它按顺序编号了,于是变成 sda1-sda2-sda3

2.为什么升级内核时总会把windows引导项丢掉;以及为什么升级内核后 menu.lst 又被改回了 (hd0,2)
仔细阅读 viewtopic.php?f=77&t=187058 的 8 楼。
简单地说,menu.lst 中带 # 的行不仅仅是注释这么简单。你需要修改这一行
# groot=(hd0,2)
并且把 windows 的启动项放在 ### BEGIN AUTOMAGIC KERNELS LIST 之前,或者 ### END DEBIAN AUTOMAGIC KERNELS LIST 之后。

3. 关于 fstab:
如果用的是像 /dev/sda3 这样的设备名,现在应该改成 sda2,因为 sda3 现在已经变成 sda2 了。
至于没改时也能启动,实际上是以 sda3 挂载 根 失败,根分区仍然保持为 grub 指定的 root=UUID=... ,它是正确的。
实际上 fstab 里不写关于 / 的那一行,也是可以启动的。/ 在 menu.lst 里已经指定了。如果不知道根分区是哪个 ,如何访问 /etc/fstab? 所以根分区一定早在 fstab 之前就已经挂载。 fstab 会把根重新挂载一次,用 fstab 里指定的挂载选项。


强!彻底明白了 :em11 感谢!
于是我才发现menu.lst里的注释说的很明白,只是我不看。。。 :em06


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 11 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译