移动硬盘上安装的ubuntu9.10以后版本无法启动

系统安装、升级讨论
iceliushuai
帖子: 42
注册时间: 2006-12-12 20:31
送出感谢: 0
接收感谢: 0
联系:

移动硬盘上安装的ubuntu9.10以后版本无法启动

#1

帖子 iceliushuai » 2010-03-31 12:53

关键字: Checking battery state.... APCI gdm/gnome无法启动 安装到USB移动硬盘 install to USB Hard-disk
2010-5-29 更新
今天安装了一个server 版本的内核,没有想到可以直接使用了。安装之后也是报着试试的态度,没想到可以正常启动了。
现系统 Ubuntu 10.04 内核版本2.6.32-22-generic-pae为,可以正常启动。在两台笔记本上测试通过 Think Pad R50e, Lenovo 旭日125
如果不方便升级操作系统版本,可以更新下内核。
以下为理论,至少在我的系统和机器上执行是成功的,因为系统无法启动,可以重新编译内核来启动,更新内核也可以解决这种问题。不保证所有机器可行,如果没 有解决可留言共同讨论。
系统无法启动的,可以使用LiveCD启动或启动其它系统,然后挂接USB系统。
以我的系统为例
/dev/sdb1 #boot分区
/dev/ubuntu/root # LVM root 分区
/dev/ubuntu/usr # LVM usr 分区
/dev/ubuntu/home # LVM home 分区

sudo mount /dev/ubuntu/root /mnt
sudo mount /dev/ubuntu/usr /mnt/usr
sudo mount /dev/ubuntu/home /mnt/home # 这个可以不挂载
sudo mount /dev/sdb1 /mnt
sudo mount --bind /dev /mnt/dev
然后执行 sudo chroot /mnt
然后执行 apt-get install linux-image-server #因为chroot后已经是root权限

如果提示无法连网的,可以新开一个Terminal,执行sudo cp /etc/resolv.conf /mnt/etc/resolv.conf
再回到原来的窗口重新执行apt-get install linux-image-server
最好再执行一下 update-grub #因为chroot后已经是root权限

更新完grub后,exit退出,重启机器。如果有一个内核为2.6.32-22-generic-pae,选择就可以了。

如果解决了问题,可以无视以下部分。
首先感謝:
TengCY's Weblog
利用你提供的‘野蛮‘方法,我也暂解决了问题。
相关网址:移动硬盘上安装的ubuntu 9.10(karmic)无法启动gdm/gnome的解决办法
TengCY's Weblog 写了: 移动硬盘安装ubuntu9.10后无法正常启动,ubuntu自带内核的usb/sata转换器驱动存在一个bug,向移动硬盘发送无效的命令,导致移动硬盘失去响应。
nnd这个问题导致我浪费了几乎一个周末的时间。
patch如下,做法比较野蛮,暂时先解决掉,凑活着看吧:

代码: 全选

    — drivers/usb/storage/usb.c.2009112214 2009-11-22 14:12:02.000000000 +0800
    +++ drivers/usb/storage/usb.c 2009-11-22 01:26:23.000000000 +0800
    @@ -329,8 +329,9 @@

    /* we’ve got a command, let’s do it! */
    else {
    - US_DEBUG(usb_stor_show_command(us->srb));
    - us->proto_handler(us->srb, us);
    + US_DEBUGP(usb_stor_show_command(us->srb));
    + if (us->srb->cmnd[0] != 0x85)
    + us->proto_handler(us->srb, us);
    }

    /* lock access to the state */ 
之前安装的ubuntu9.04在移动硬盘上使用的很正常,因为经常在外边,所以使用相当方便 :em01
可是自从9.10RC版本,到现在的10.04正式版(之后的版本没有试过),安装到USB移动硬盘,都无法启动了只有再退回到9.04 :em20
无论是升级还是全新安装都无法避免,在网上google找到一些文章说是Ubuntu更新电源管理程序导致的,参照网上提供的加上acpi=off noapic参数也无法解决问题,因为这里虽然不挂在 Checking battery state.... 了,但是无法启动gdm/gnome,可以启动到终端模式。
之后又在网上看到上面提到的TengCY's Weblog 博客中的描述,他描述的并不清楚。我就根据他的提示,从网上下载了内核,重新编译内核,然后就成功引导 :em09
参照网上内核编译方法,从www.kernel.com 下载最新的内核的Full Source
编译就可以了。

内核怎么安装到系统中,参照下面的步骤。
但是根据网上提供的编译方法,有一次编译安装后发现没有生成相应的initrd映像文件,grub.cfg是

代码: 全选

menuentry "Ubuntu, with Linux 2.6.32.10shily-ubuntu" --class ubuntu --class gnu-linux --class gnu --class os {
	recordfail
	insmod reiserfs
	set root='(/dev/sdb,6)'
	search --no-floppy --fs-uuid --set c7b52cfb-140d-4e87-9601-7507a04d0f25
	linux	/boot/vmlinuz-2.6.32.10shily-ubuntu root=/dev/sdb6 ro   crashkernel=384M-2G:64M,2G-:128M quiet splash
}
去查看/boot目录下的文件,如果没有initrd文件的话,应该安装内核以后使用下面的命令生成相应的initrd映像。

代码: 全选

mkinitramfs -o initrd.img-2.6.32.10shily-ubuntu           2.6.32.10shily-ubuntu
initrd.img-2.6.32.10shily-ubuntu是生成的映像名, 2.6.32.10shily-ubuntu是指定的内核模块的目录名(在/lib/modules),在我的机器上执行的过程

代码: 全选

hh@hh-desktop:~/Documents$ ls
hh@hh-desktop:~/Documents$ ls /lib/modules/
2.6.32.10shily-ubuntu  2.6.32-14-generic  2.6.32-17-generic  2.6.32-18-generic
hh@hh-desktop:~/Documents$ mkinitramfs -o initrd.img-2.6.32.10shily-ubuntu2.6.32.10shily-ubuntu
hh@hh-desktop:~/Documents$ ls
initrd.img-2.6.32.10shily-ubuntu2.6.32.10shily-ubuntu
hh@hh-desktop:~/Documents$ 
把生成的文件initrd.img-2.6.32.10shily-ubuntu2.6.32.10shily-ubuntu复制到/boot目录,更新grub

代码: 全选

update-grub
重新启动后选择你自己编译的内核即可。
如果启动不了的话,查看相应的内核编译的问题。因为仅仅修改这一样是不会影响到启动的。
操作步骤:
  1. 安装Ubuntu系统到USB移动硬盘(你知道怎么安装,是吧!要不也不来解决问题)。
  2. 编译内核,Linux下编译内核,怎么样编译无所谓,在别人的机器上,在LIVECD下,在虚拟机中都行。
    编译前一定要修改 driver/usb/storge/usb.c文件(别忘了修改哦)。我就是直接复制原来的博客上的,没想到他写的 0x85 中间的 x 是中文下的乘號,实际应该是字母 x .然后就杯具了。编译了好几个钟头,发现有错误。
  3. 安装一个Vmware(推荐Vmware的,其它的不熟悉),如果不熟悉使用,google一下吧。
  4. 新建一个Ubuntu的虚拟机,选择不安装系统,硬盘大小无所谓(默认是20G,这个没有关系,它也没占空间),因为我们不使用它。新建完成以后不要急着启动,要修改配置从我们的USB硬盘上启动。
  5. 编辑虚拟机,添加一个硬盘,在添加硬盘页中,选择“使用物理硬盘”,“使用整块硬盘”,在设备里选择“PhysicalDrive1" 。(我的电脑上只连接一个USB硬盘,所以是PhysicalDrive1,你可以选择,使用独立的分区,然后点下一步,看看是不是你所希望的分区,然后再退回去选择整个硬盘)。
  6. 启动虚拟机了,如果有什么SCSI等的警告,可以忽略。这时就会启动USB上的系统了。
  7. 安装编译好的内核
  8. 使用上面提到的命令生成initrd映像,复制到/boot下。如果你编译的deb安装包安装后生成了initrd映像文件,则就不需要生成initrd映像同时也不需要修改grub.cfg
  9. 更新grub,如果你编译的deb安装包安装后生成了initrd映像文件,则就不需要修改grub.cfg
    修改grub.cfg

    代码: 全选

    menuentry "Ubuntu, with Linux 2.6.32.10shily-ubuntu" --class ubuntu --class gnu-linux --class gnu --class os {
    	recordfail
    	insmod reiserfs
    	set root='(/dev/sdb,6)'
    	search --no-floppy --fs-uuid --set c7b52cfb-140d-4e87-9601-7507a04d0f25
    	linux	/boot/vmlinuz-2.6.32.10shily-ubuntu root=/dev/sdb6 ro   crashkernel=384M-2G:64M,2G-:128M quiet splash
    ####  添加以下两行
    	echo	Loading initial ramdisk ...
    	initrd	/boot/initrd.img-2.6.33.1-shilyubuntu
    }
    
    =,= 说明:如果你生成的映像文件的名称和内核文件的名称是一致的,则不需要手动的修改grub.cfg,直接update-grub时,就会自动添加那那两行。
    如果内核文件为vmlinuz-2.6.32.10shily-ubuntu
    则initrd映像文件应为initrd.img-2.6.32.10shily-ubuntu

    理论是initrd.img-2.6.32.10shily-ubuntu可以为任务名称,但是只有它们的名字一致时,grub更新程序才会生成自应的
    echo Loading initial ramdisk ...
    initrd /boot/initrd.img-2.6.33.1-shilyubuntu
    行,如果不一致,则每次update-grub时,都需要手动修改。
  10. 重新启动虚拟机,测试新内核能否启动,先不要在实际的机器上测试,能在虚拟机上启动了之后再拿到实际的机器测试。
  11. OK,如果实际的机器像我一样能启动的话。如果不能启动,则再找问题了,可能是编译内核的问题,也可以是其它的问题。
=============================================
相关内核编译的文章:
ubuntu 环境下编译内核详解
上次由 iceliushuai 在 2010-05-29 10:51,总共编辑 3 次。
头像
pityonline
帖子: 3864
注册时间: 2008-12-09 12:44
来自: 北京
送出感谢: 0
接收感谢: 2 次
联系:

Re: 移动硬盘上安装的ubuntu9.10以后版本无法启动

#2

帖子 pityonline » 2010-03-31 23:08

Mark!有机会学习一下……
Pity is the bomp!
活着就是折腾!生命不息,折腾不止!
看这帮家伙在干什么?@pityonline/u
Dropbox+Vps+PC 跑起来了!这是邀请链接
killer214
帖子: 1
注册时间: 2010-03-30 13:50
送出感谢: 0
接收感谢: 0

Re: 移动硬盘上安装的ubuntu9.10以后版本无法启动

#3

帖子 killer214 » 2010-04-06 12:48

— drivers/usb/storage/usb.c.2009112214 2009-11-22 14:12:02.000000000 +0800
+++ drivers/usb/storage/usb.c 2009-11-22 01:26:23.000000000 +0800
@@ -329,8 +329,9 @@

/* we’ve got a command, let’s do it! */
else {
- US_DEBUG(usb_stor_show_command(us->srb));
- us->proto_handler(us->srb, us);
+ US_DEBUGP(usb_stor_show_command(us->srb));
+ if (us->srb->cmnd[0] != 0x85)
+ us->proto_handler(us->srb, us);
}

/* lock access to the state */

楼主能不能具体说一下这段代码是复制到什么地方?
是整篇不知道usb.c里么?里边的 - 和 + 是什么意思阿,我整个复制过去之后编译出错
还有这一段
— drivers/usb/storage/usb.c.2009112214 2009-11-22 14:12:02.000000000 +0800
+++ drivers/usb/storage/usb.c 2009-11-22 01:26:23.000000000 +0800
@@ -329,8 +329,9 @@
是什么意思阿,请帮忙,谢谢。
wusongwww
帖子: 47
注册时间: 2007-12-14 14:17
送出感谢: 0
接收感谢: 0
联系:

Re: 移动硬盘上安装的ubuntu9.10以后版本无法启动

#4

帖子 wusongwww » 2010-04-06 16:28

换g2ldr和g2ldr.mbr放在C,在boot.ini里面加一行
头像
wangdu2002
帖子: 13284
注册时间: 2008-12-13 19:39
来自: 物华天宝人杰地灵
送出感谢: 1 次
接收感谢: 6 次

Re: 移动硬盘上安装的ubuntu9.10以后版本无法启动

#5

帖子 wangdu2002 » 2010-04-06 16:34

没看明白。。。路过学习下。 :em06
行到水穷处,坐看云起时。
海内生明月,天涯共此夕。
--------------------吾本独!
supertcy
帖子: 8
注册时间: 2006-04-06 13:32
送出感谢: 0
接收感谢: 0

Re: 移动硬盘上安装的ubuntu9.10以后版本无法启动

#6

帖子 supertcy » 2010-04-09 11:13

TengCY's Blog的主人来顶一下,嘿嘿 :em04
头像
innsot
帖子: 2
注册时间: 2010-04-21 17:48
送出感谢: 0
接收感谢: 0

Re: 移动硬盘上安装的ubuntu9.10以后版本无法启动

#7

帖子 innsot » 2010-04-21 17:57

好复杂,学习中
kabaji007
帖子: 1
注册时间: 2010-04-21 18:34
送出感谢: 0
接收感谢: 0

Re: 移动硬盘上安装的ubuntu9.10以后版本无法启动

#8

帖子 kabaji007 » 2010-04-21 18:47

为什么我的电脑安装以后 重启的时候出现 有NO root file is finded??
haotiangood
帖子: 23
注册时间: 2010-02-22 19:39
送出感谢: 0
接收感谢: 0

Re: 移动硬盘上安装的ubuntu9.10以后版本无法启动

#9

帖子 haotiangood » 2010-04-24 16:54

哇,好强啊!
zhangxindeshui
帖子: 3
注册时间: 2010-04-24 12:02
送出感谢: 0
接收感谢: 0

Re: 移动硬盘上安装的ubuntu9.10以后版本无法启动

#10

帖子 zhangxindeshui » 2010-04-24 17:44

顶,虽然看不懂
这几天一直尝试把10.04或者9.10装到移动硬盘,试了N种方法装了N次都启动不了,郁闷得要死
今天用VMware装9.04就成功了。。。。
试用了10.04就不舍得扔了~希望大牛们弄出容易点的方法啊~~~~~~~~~ :em11
daydreamx
帖子: 2
注册时间: 2010-05-13 15:30
送出感谢: 0
接收感谢: 0

Re: 移动硬盘上安装的ubuntu9.10以后版本无法启动

#11

帖子 daydreamx » 2010-05-13 15:38

好复杂..等硬盘托到了再装试试
wang020612
帖子: 427
注册时间: 2009-11-07 21:05
送出感谢: 1 次
接收感谢: 0
联系:

Re: 移动硬盘上安装的ubuntu9.10以后版本无法启动

#12

帖子 wang020612 » 2010-05-13 18:29

:em06 好复杂,我也mark学习
iceliushuai
帖子: 42
注册时间: 2006-12-12 20:31
送出感谢: 0
接收感谢: 0
联系:

Re: 移动硬盘上安装的ubuntu9.10以后版本无法启动

#13

帖子 iceliushuai » 2010-05-29 10:37

killer214 写了:— drivers/usb/storage/usb.c.2009112214 2009-11-22 14:12:02.000000000 +0800
+++ drivers/usb/storage/usb.c 2009-11-22 01:26:23.000000000 +0800
@@ -329,8 +329,9 @@

/* we’ve got a command, let’s do it! */
else {
- US_DEBUG(usb_stor_show_command(us->srb));
- us->proto_handler(us->srb, us);
+ US_DEBUGP(usb_stor_show_command(us->srb));
+ if (us->srb->cmnd[0] != 0x85)
+ us->proto_handler(us->srb, us);
}

/* lock access to the state */

楼主能不能具体说一下这段代码是复制到什么地方?
是整篇不知道usb.c里么?里边的 - 和 + 是什么意思阿,我整个复制过去之后编译出错
还有这一段
— drivers/usb/storage/usb.c.2009112214 2009-11-22 14:12:02.000000000 +0800
+++ drivers/usb/storage/usb.c 2009-11-22 01:26:23.000000000 +0800
@@ -329,8 +329,9 @@
是什么意思阿,请帮忙,谢谢。
这个是diff文件,就是说在原来的文件中找到标示---的行,删除,添加 +++的行
其实意思就是说把文件中标示为 ---的修改成+++的行
原文件为:在329行下:
/* we’ve got a command, let’s do it! */
else {
US_DEBUG(usb_stor_show_command(us->srb));
us->proto_handler(us->srb, us);
}

修改为:
/* we’ve got a command, let’s do it! */
else {
US_DEBUGP(usb_stor_show_command(us->srb));
if (us->srb->cmnd[0] != 0x85)
us->proto_handler(us->srb, us);
}
iceliushuai
帖子: 42
注册时间: 2006-12-12 20:31
送出感谢: 0
接收感谢: 0
联系:

Re: 移动硬盘上安装的ubuntu9.10以后版本无法启动

#14

帖子 iceliushuai » 2010-05-29 10:40

zhangxindeshui 写了:顶,虽然看不懂
这几天一直尝试把10.04或者9.10装到移动硬盘,试了N种方法装了N次都启动不了,郁闷得要死
今天用VMware装9.04就成功了。。。。
试用了10.04就不舍得扔了~希望大牛们弄出容易点的方法啊~~~~~~~~~ :em11
好像10.04直接安装到USB上可以正常启动吧,你安装的10.04是在USB硬盘上的么?
iceliushuai
帖子: 42
注册时间: 2006-12-12 20:31
送出感谢: 0
接收感谢: 0
联系:

Re: 移动硬盘上安装的ubuntu9.10以后版本无法启动

#15

帖子 iceliushuai » 2010-05-29 10:41

supertcy 写了:TengCY's Blog的主人来顶一下,嘿嘿 :em04
tcy 牛人在这儿还有一马甲啊。
比我还来的还早,也是潜水一族啊。
回复

回到 “系统安装和升级”