如果说飞蛾喜欢扑火是处于本性,那么工程师喜欢处理棘手问题也是出于本性。
这个棘手的问题就是,在没有光驱,没有u盘启动支持的机子上,通过硬盘安装的方式安装ubuntu?
虽然网上有3种方式可以做到,但事实上我都试过但没有成功,但我可以说,我尝试过很多错误。
作为一种纪念,我决定记录下来这个过程:
下载iso档
10.04版
12.10版
14.20版
8.10版
desktop版
alternative版
initrd
vmlinux
最后可行的方式:
网购一个光驱,用光驱安装到硬盘,然后用克隆方式到SSD固态硬盘,
修改menu.list和fstab,引导到SSD硬盘上
把sdb4作为home目录挂载到系统
menu.list和fstab的关系:
系统是靠grub引导的,grub安装的时候会往mbr写东西,大概就是一段跳转代码,然后就跳转到linux的按照分区里面的grub执行程序。一旦这个mbr被grub该掉,原先window的引导也要依赖grub这套机制来跳转了,事实上grub在安装时,也会扫描当前机器里面的各个硬盘,看看是否存在window系统,如果有,它会在里面提供一条路径,引导到windows自己的引导界面。window的引导程序好像叫ntldr。
还是说说menu.lst,这个在后期的版本改为grub.cfg, 它是给grub看的,也就是原始安装的那个ubuntu里面的grub,而不是克隆之后的grub,因为写在mbr里面的指针是指向原始的那个盘的grub。
关于fstab,它是告诉系统要挂载的硬盘,首先root是必须要挂载的,所以必须指定一个root。
fstab里面是以UUID为主,也就是每一个分区都有一个这样的id,而且是唯一的。但如果克隆的硬盘,则这个id会跟原来的一样,要用tune2fs -U命令去重新产生一个UUID, 当然也可以手工指定一个,我后来就是手工制定的,因为前面的menu.lst和fstab都改好了,重新生成的话就又要修改这2个地方。
而事实上克隆的那个分区上面的fstab跟原始的分区上的fstab应该不一样,也就是说他们挂的root分区不一样。
新学到的命令:
dd if= of= bs= count=
parted
fdisk
blkid
tune2fs -U
新接触到的文件:
/etc/fstab
/boot/grub/menu.list
/etc/apt/sources.list
首先是图片:
1. 这张图片,是当初想用硬盘安装,已经下载好iso文件,据说要用一个grub4dos来引导,具体如何引导也不是很清楚,所以装了个一键ghost,装好之后,果然没有让我失望,有一个boot from iso选项,于是尝试用这种方式引导安装,结果就出现这个错误。
2. 这张是也是把旧硬盘里面的winxp克隆到固态硬盘上面,启动时失败,然后提示这个错误,这个原因并不是真的没有这个文件,而是由于我修改了boot.ini,这个我特别有一篇博文: http://blog.csdn.net/johnny_nass_hu/article/details/27075107
它主要的原因是:
3. 由于我的电脑太老了,CPU不支持PAE特性,PAE是Physical Address Extension,也就是物理地址扩展,想不到当年最先进的技术,现在已经很过时了,连号称对配置要求最低的ubuntu都不兼容了。ubuntu应该是从12.xx版本开始强制要求兼容PAE,严格来讲,是release版不再兼容没有PAE flag的CPU,但是如果自己编译内核,把PAE去掉估计还是可以装成功的,只是过于折腾。
4. 这个原因是引导程序没有找到安装文件,原来光盘里面的initrd只支持从cdrom读取文件,不支持从硬盘里读取文件,因此找不到,如果要读取硬盘的话,要去下载专门的支持硬盘引导的initrd。而且这个initrd必须要跟被安装的版本配套一致才行。
5.尝试用alternative方式安装,然后已经下载了支持硬盘启动的initrd,然后能找到硬盘上的光盘映像,但是后面还是出问题,就是内核不兼容,如果选择跳过内核的安装,则后面需要自己编译内核。
6. 没有找到内核模块,Alternative安装奇怪的地方,就是,即使没有内核,它也允许你继续安装其他部分的文件,而不会就此结束。
7. 居然也不识别网卡
8. 对home目录加密,即使计算机被偷了,别人也看不到里面的数据,这个安全性考虑得很周到
9. 分区,sdb就是我的固态硬盘
10. 最终的分区方案是这样的,sda是原先的40G硬盘,sdb是固态硬盘,分区1和2已经被windows用了,5可以用作linux,6是交换空间,交换空间是不需要格式化的,linux里面有专门的命令来设置交换空间,它可以是一个分区,也可以是一个文件。
11. 进入安装,尽管没有成功,不过这一次是路程走得最远,最陌生,也就是最接近终点的一次失败。
12. 回到刚才选内核的界面,有下面3种预置的内核,可惜都不能匹配得上。
13.很多时候,它都不直接告诉你为什么不行,它只告诉你,有一个log在那个隐蔽的地方,你自己去找吧。
14. 基础系统也没有成功,为啥?啥也不说,你懂得,你是expert吗?否则别问。
15.也许是这里的原因,这里安装initrd,也就是用来引导linux的那个东东,generic的意思应该是比较庞大但兼容的硬件比较多的,targeted就是兼容性不高但比较小。
16. 又是失败,从第一次接触linux开始就不断被这种error折磨
17. 更早期一点,在导入阶段,谢天谢地,它认出iso来了。那一刻,感觉充满了希望。
18. 不记得是那时候出来的,Debootstrap不懂啥意思,第四虚拟控制台又是啥东西?sha1sum估计是一种校验码。也就是校验码出错的意思吧?这就是程序员,这就是英文老师教的,Keep It Short and Simple,短而且简单,但就是费解,像古文。
19. 这是另外一台机的,大概是某个模块崩溃了,要发个报告给服务器,可是我没有感觉到啊。
20. 安装好的系统是这样的,看看路径是不是正常。
21. GCC的版本是4.4
这个棘手的问题就是,在没有光驱,没有u盘启动支持的机子上,通过硬盘安装的方式安装ubuntu?
虽然网上有3种方式可以做到,但事实上我都试过但没有成功,但我可以说,我尝试过很多错误。
作为一种纪念,我决定记录下来这个过程:
下载iso档
10.04版
12.10版
14.20版
8.10版
desktop版
alternative版
initrd
vmlinux
最后可行的方式:
网购一个光驱,用光驱安装到硬盘,然后用克隆方式到SSD固态硬盘,
修改menu.list和fstab,引导到SSD硬盘上
把sdb4作为home目录挂载到系统
menu.list和fstab的关系:
系统是靠grub引导的,grub安装的时候会往mbr写东西,大概就是一段跳转代码,然后就跳转到linux的按照分区里面的grub执行程序。一旦这个mbr被grub该掉,原先window的引导也要依赖grub这套机制来跳转了,事实上grub在安装时,也会扫描当前机器里面的各个硬盘,看看是否存在window系统,如果有,它会在里面提供一条路径,引导到windows自己的引导界面。window的引导程序好像叫ntldr。
还是说说menu.lst,这个在后期的版本改为grub.cfg, 它是给grub看的,也就是原始安装的那个ubuntu里面的grub,而不是克隆之后的grub,因为写在mbr里面的指针是指向原始的那个盘的grub。
关于fstab,它是告诉系统要挂载的硬盘,首先root是必须要挂载的,所以必须指定一个root。
fstab里面是以UUID为主,也就是每一个分区都有一个这样的id,而且是唯一的。但如果克隆的硬盘,则这个id会跟原来的一样,要用tune2fs -U命令去重新产生一个UUID, 当然也可以手工指定一个,我后来就是手工制定的,因为前面的menu.lst和fstab都改好了,重新生成的话就又要修改这2个地方。
而事实上克隆的那个分区上面的fstab跟原始的分区上的fstab应该不一样,也就是说他们挂的root分区不一样。
新学到的命令:
dd if= of= bs= count=
parted
fdisk
blkid
tune2fs -U
新接触到的文件:
/etc/fstab
/boot/grub/menu.list
/etc/apt/sources.list
首先是图片:
1. 这张图片,是当初想用硬盘安装,已经下载好iso文件,据说要用一个grub4dos来引导,具体如何引导也不是很清楚,所以装了个一键ghost,装好之后,果然没有让我失望,有一个boot from iso选项,于是尝试用这种方式引导安装,结果就出现这个错误。
2. 这张是也是把旧硬盘里面的winxp克隆到固态硬盘上面,启动时失败,然后提示这个错误,这个原因并不是真的没有这个文件,而是由于我修改了boot.ini,这个我特别有一篇博文: http://blog.csdn.net/johnny_nass_hu/article/details/27075107
它主要的原因是:
因以下文件的损坏或者丢失windows无法启动,windows root\system32\hal.dll
然后我就傻傻地重新拷贝hal.dll
结果还是不行,查了网上的说明,不一定是因为文件的问题,而是因为改了boot.ini的原因,导致路径出错。
所以说这个所谓的路径,真的很让人恼火,它永远不会告诉你它自己搞错了路径,它只会告诉你文件损坏和丢失。
知道了原因,可是还是不知道解决办法,难道windows不支持这种2个硬盘的情况下,默认到第二块硬盘是不行的?
于是,在一个偶然的发现下,无意之中有一个猜想,会不会跟后面的排列顺序有关,也就是说你想把默认项设置在disk(0),那么这个默认项也应该要排在前面,而现在我希望把默认项设定在disk(1),也应该要把disk(1)的启动项放到最前面。
修改成这样,结果就ok了:
3. 由于我的电脑太老了,CPU不支持PAE特性,PAE是Physical Address Extension,也就是物理地址扩展,想不到当年最先进的技术,现在已经很过时了,连号称对配置要求最低的ubuntu都不兼容了。ubuntu应该是从12.xx版本开始强制要求兼容PAE,严格来讲,是release版不再兼容没有PAE flag的CPU,但是如果自己编译内核,把PAE去掉估计还是可以装成功的,只是过于折腾。
4. 这个原因是引导程序没有找到安装文件,原来光盘里面的initrd只支持从cdrom读取文件,不支持从硬盘里读取文件,因此找不到,如果要读取硬盘的话,要去下载专门的支持硬盘引导的initrd。而且这个initrd必须要跟被安装的版本配套一致才行。
5.尝试用alternative方式安装,然后已经下载了支持硬盘启动的initrd,然后能找到硬盘上的光盘映像,但是后面还是出问题,就是内核不兼容,如果选择跳过内核的安装,则后面需要自己编译内核。
6. 没有找到内核模块,Alternative安装奇怪的地方,就是,即使没有内核,它也允许你继续安装其他部分的文件,而不会就此结束。
7. 居然也不识别网卡
8. 对home目录加密,即使计算机被偷了,别人也看不到里面的数据,这个安全性考虑得很周到
9. 分区,sdb就是我的固态硬盘
10. 最终的分区方案是这样的,sda是原先的40G硬盘,sdb是固态硬盘,分区1和2已经被windows用了,5可以用作linux,6是交换空间,交换空间是不需要格式化的,linux里面有专门的命令来设置交换空间,它可以是一个分区,也可以是一个文件。
11. 进入安装,尽管没有成功,不过这一次是路程走得最远,最陌生,也就是最接近终点的一次失败。
12. 回到刚才选内核的界面,有下面3种预置的内核,可惜都不能匹配得上。
13.很多时候,它都不直接告诉你为什么不行,它只告诉你,有一个log在那个隐蔽的地方,你自己去找吧。
14. 基础系统也没有成功,为啥?啥也不说,你懂得,你是expert吗?否则别问。
15.也许是这里的原因,这里安装initrd,也就是用来引导linux的那个东东,generic的意思应该是比较庞大但兼容的硬件比较多的,targeted就是兼容性不高但比较小。
16. 又是失败,从第一次接触linux开始就不断被这种error折磨
17. 更早期一点,在导入阶段,谢天谢地,它认出iso来了。那一刻,感觉充满了希望。
18. 不记得是那时候出来的,Debootstrap不懂啥意思,第四虚拟控制台又是啥东西?sha1sum估计是一种校验码。也就是校验码出错的意思吧?这就是程序员,这就是英文老师教的,Keep It Short and Simple,短而且简单,但就是费解,像古文。
19. 这是另外一台机的,大概是某个模块崩溃了,要发个报告给服务器,可是我没有感觉到啊。
20. 安装好的系统是这样的,看看路径是不是正常。
21. GCC的版本是4.4