Archives for 转载

EFI/GPT上的Windows – Linux双系统

很长一段时间都没有鼓捣重装系统了。前些日子旧笔记本坏了,买不起MBP的咱只好入手了一台惠普的win8系统的本本。 近来需要一个linux环境进行线下测试,这台本本就成了实验对象。本以为装个linux还不简单么,装个ubuntu分分钟搞定的事情,没想到居然屡遭挫折。最简单的方法就是通过easybcd软件进行硬盘安装了。然后遇到的第一个难题就是怎么重启机器。win8新的电源管理模式,所谓关机其实只是打瞌睡。网上查到在控制面板-电源管理中可以关闭这个功能。OK,重启。进入引导界面却引导失败,提示找不到文件。这个问题纠结了很久,我以为是自己填写的磁盘号错了,通过存储管理可以看到除了系统可见的C盘D盘E盘外,还有好几个分区,此时我还没了解到这是GPT分区表的特征,从(hd0,0)到(hd0,5)试了个遍,通通无效。 经过这么多纠结我终于决定放弃硬盘安装,转而采取刻录光盘安装,还好新本本光驱还没坏(不得不吐槽下本本光驱的脆弱身板。。)。结果再次挫折。。光驱引导界面进去之后无法进入到liveCD的试用模式,也无法直接安装,于是使用检测光盘那个选项吧,统统黑屏,进去光盘也不转。试用模式的最后会输出两行字,说是无法从cd0的某扇区读取数据。莫非是烧CD烧坏了?于是再烧一张,并且烧写结束的检测光盘步骤也检测正确了,ubuntu的iso检测checksum也检测正确了,应该没问题了吧,用新盘重试,还是一样的问题,甚至提示错误的扇区编号都是一样的,我看着状况应该不是烧写的问题。 只好再度重启去BIOS看看了(其实应当是叫做EFI,这个时候我还没意识到这个问题)。发现boot option中有一个选项是开启legacy support模式。注解中说这个模式用于引导win7及以前版本,推荐不要开启可能会导致(win8)系统无法引导。我晕,估计问题就出在这了。首先先不管一层层的警告先把这个选项开了,然后我也注意到这说明这台机器的引导方式已经与以往不同了,以往的引导方式已经是legacy了。。 重启之后还有提示,说有延迟的修改,不顾各种警告允许修改生效,再次通过liveCD引导,终于可以进入熟悉的ubuntu试用界面了。不管那么多进入安装。根据ubuntu以往的尿性,应该是对windows超级友好兼容,不用担心引导项问题的(我还是没意识到EFI这个问题的严重性)。结果装好发现就是败在这个疏忽上了,grub没有正确地安装,还是直接进入到windows引导界面了。 不过这时候已经知道病因了,那么在网上求医问药就比较顺当,找到了许多文章,介绍了许多不同的解决办法。我采取的是这篇文章中介绍的办法,通过liveCD进入ubuntu后,挂载sda2,这是gpt的引导分区。其文件夹结构为 <DIR> Boot <DIR> HP <DIR> Microsoft <DIR> Ubuntu 其中Boot文件夹中有Bootx64.efi文件,Microsoft/Boot文件夹下有Bootmgfw.efi文件,Ubuntu文件夹下有grubx64.efi文件。可以看出Ubuntu安装程序已经安装了Ubuntu的引导文件,可是EFI系统没有识别出新的引导项,依旧直接启动了windows的引导文件。由于对EFI也是昨天折腾这个事才刚从网上了解,我还说不出所以然,为什么Ubuntu的安装程序无法正确替换windows引导文件,并且事实上ubuntu自动生成的windows引导项也是错的无法启动windows。应该说是新设备加上新系统吧,兼容工作不可能那么快跟得上。 网上提供的另一种解决方案是将linux引导信息写到U盘,通过U盘启动linux,这样做就避免修改windows的引导文件,应该说是方便企业级客户吧。这个方案来自linuxsir.org。可是对我来说太麻烦,不想采用。于是还是使用了上面引用的方案,将Ubuntu引导文件强行替换windows的引导文件,并将ubuntu的grub中增加一个项目,指向原来的windows引导文件(备份更名),从而解决问题。不得不佩服下这个方案的作者,这样强行替换引导文件确实是需要足够的知识和勇气的。。。 这里说明一下,我的系统引导文件分区与文章中一样是sda2,但可能不同系统不同,可以分别挂载查看一下目录结构就能确定具体是哪个。 好吧,长篇的唠叨说完,总结一下要点: windows 8 电源管理关闭快速启动策略 EFI(BIOS)设置中启用boot options/legacy support(网上说法还需关闭secure boot,我是后来才看到,没有采用) 完成ubuntu安装后用ubuntu的grubx64.efi文件替换windows的bootmgfw.efi文件(注意备份) 在ubuntu的grub配置中增加指向原bootmgfw.efi的条目 当前版本的easybcd暂不支持efi/gpt引导方式(我使用的是2.0.2,文章中称2.2也不支持) 后记 总结完才意识到可能由于我没有关闭secure boot才导致ubuntu引导项安装失败以及easybcd设置启动项失败。由于昨天经历漫长的战役已经重启笔记本30次以上消耗了一整天的时间,暂时没有心情去继续研究了。附上似乎是比较官方的介绍easybcd双启动linux和win8的文章供参考。 how to dual boot windows 8 and linux 最后是参考来源: 关于Windows Boot Manager、Bootmgfw.efi、Bootx64.efi、bcdboot.exe 的详解 全局唯一标识分区表 UEFI模式+GPT硬盘实现Windows 8与Ubuntu双系统启动 在EFI/GPT硬盘上利用grub2实现Ubuntu/Win7等多重启动 Ubuntu官方文档:UEFIBooting – Booting Linux natively […]

程序员精进 – 自勉

今天读了这篇文章How to Interview an Engineer for your Startup,看了看人家大牛如何面试Engineer,学习了不少。 其实关于link shortener,本来也有思考过一些。不过确实没有像此文思考如此之细。尤其关于数据库优化方面是我软肋,更是无法了解如此之多。 也不仅单是这个case吧,也不仅单是服务器、数据库或者网站吧。总归一个好的Engineer应该随时把握着开发-性能-质量-产品周期,把事情做到最好。要不断历练自己。 复制原文红字自勉吧: These days, people that can cross between frontend, backend and design are the true rockstars and exactly what we’re looking for, so I like to get a feel for whether they “just like to code requirements” or they can truly get proactive and […]

android sdk install fail

明明装了jdk的,各种环境变量配得好好的,android sdk就是不肯安装,说什么找不到jdk,哼。 网上查了半天,其实解决这种傲娇娘最简单的办法就是不理她。 点击back转身走开,然后再点next回来,她就什么都答应你了。 引用: http://kurtyu1209.blogspot.com/2011/03/android-sdk-jdk.html

emacs + cygwin fail

真郁闷啊,装了cygwin还没怎么好好玩过。最近因为拆机-重装系统,暂时没装linux,就想着也摸索摸索cygwin,结果上来就给我难题。。 xemacs不太会用,关键是貌似函数名什么的都变掉了,配置文件还要重新写?麻烦啊。 于是emacs有什么问题呢? 居然ctrl-c 是默认绑定到ctrl-g上面去了。。所以怎么退出emacs啊C x C c啊。 查了查资料,原来这个问题04年就有人在问了。真的没有解吗。。 cygwin’s emacs 这里转载一下内容: >On Tue, Mar 09, 2004 at 10:46:47PM -0500, George Hester wrote: >>I go into emacs easy enough. I start cygwin and type emacs and there I >>am in emacs. The directions say to exit type C-x C-c where C is the >>control key. […]

协程的C实现

今天正好跟ownwaterloo聊到协程,于是查了查资料,顺便写个博客记录一下吧。 我主要参考的是这篇资料http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html,是Simon Tatham提出的一个协程的C实现,非常有意思。 协程的思想主要是为了解决多个任务如何分享CPU这个问题的。线程在很多协作问题上处理的不好,而且需要锁机制,导致运行缓慢,不易理解,容易出错。协程的思想是,一系列互相依赖的协程间依次使用CPU,每次只有一个协程工作,而其他协程处于休眠状态。与线程不同,协程是自己主动让出CPU,并交付他期望的下一个协程运行,而不是在任何时候都有可能被系统调度打断。因此协程的使用更加清晰易懂,并且多数情况下不需要锁机制(或者说他本身就是一个全局锁)。 Simon的举例是一个生产者消费者例子。传统的程序可能是生产者一个循环不断产生字符,之后退出。而消费者一个循环不断读取字符,并处理之。使用时或许会用一个管道,将生产者的输出重定向到消费者的输入。从而使两者协作。 Simon提出,如何使这样的简单任务无需通过管道这类操作系统相关的重型机制,就能完成。他提出,生产者或者消费者之间,有一方需要改变自己的工作模式。不再是在循环中不断处理任务,而是一次只处理一个字符然后立刻返回。而另一方依旧保持原状,只需在原本输出到或读取自标准IO的地方修改为调用对方的那个函数就可以了。 但这种写法难以维护。他提出了协程的概念,并期待写出类似这样的代码: int function(void) { int i; for (i = 0; i < 10; i++) return i; /* won’t work, but wouldn’t it be nice */ } 在这里return语句并不是终止函数,而是将函数转入睡眠的状态,并将CPU交付给另一个函数执行。例如生产者写入一个字符后,调用类似的return语句,交付消费者处理这个字符。稍后当消费者处理完并调用return语句后,能重新激活生产者协程,并继续这个for循环。 如何在C语言中实现这样的功能而不需使用汇编代码去hack堆栈和寄存器呢?他给出的最初的实现是使用goto语句。 int function(void) { static int i, state = 0; switch (state) { case 0: goto LABEL0; case 1: goto LABEL1; } […]

关于生存还是死亡这个热门问题的讨论

今天突如其来的在推上聊了些或许旁人会认为是无趣的事情。。 其实缘起自@rainux的一些及其严肃的问题们。或许虚大大只是扔了这么块板砖进TL的池塘然后在一旁偷笑吧。总之大家都很有劲头地摆出了严肃的哲学家的脸谱认真论战了一番。值得记录,值得记录。 总之,虚黍熟在一番委婉之后,在推上抛出了他宿构已久的这个问题: @rainux: 所以本来还打算找天晚上在 Twitter 上跟大家讨论死亡的问题,结果都不知道该不该说了。 @pipitu: 没关系吧。。。 @littlepush: 连结婚生子都还没想好要怎么做的某只表示死不死的这种问题不在考虑范围内…虽然说死掉了就死掉了,不管活着的人有什么看法、感想、感情,对于死人来说没有任何意义 @rainux: 虽然我也没想好结婚生子的问题但真是越来越觉得时光飞逝如电,死亡越来越近了,我甚至经常想象哪天自己回过神来突然发现生命之火已经快要熄灭时的状态。无论如何也不知道应该如何面对自己的死亡。 对于这个问题,当然每个人的看法都是不一样的。 @pipitu: 不会啊,会很平静的,一辈子下来什么都经历过了,有什么好痛苦的,人总归要死的 @littlepush: 活着和死了的唯一区别就是体内的C14含量… 感觉我好冷血,不过生和死,对于自身来说并没有什么差异,因为死了你自己也不会有感觉。而对于身边的人来说,是你认为他们会在乎还是他们自己认为会在乎?时间是一切的良药,而已。 @yamimasho: 所以死了之后的事情,都是还活着时候的一种期望呀。。。 @hawkwithwind: 这就我前面说的生死由自己决定的意思,你还不想放弃人生,其实就说明生命力强,(除非意外)不会离开这个世界,反之,假如对人生失去了兴趣,意志消沉,那么死亡就在眼前了。 @rainux: 大概是我太自私?虽然亲人朋友的死也难面对,但应该说自己的死才是最在乎的吧?就是很不愿意接受死亡这件事,虽然很理性地清楚这是毫无悬念不得不接受的。 接下来,@rainux着重定义了自己对生命的眷恋,其强度和其范围。 @rainux: 其实在我看来与其说是能真的想开,不如说是到了那个时候不得不接受而已。 @rainux: 在我最痛苦,觉得生活毫无色彩的时候,我也一样贪恋生命站在18楼窗前也不敢再往前。 @rainux: 孤独痛苦我已经习惯了,但失去意识是如论如何也不能接受的。 @hawkwithwind: 都说了没有高低之分了。。||假如说秦始皇唐太宗也贪恋人生,那说明贪恋人生是伟人气质,我们都比不上你呢。。 @rainux: 不,我觉得我只是单纯地贪恋生命而已。就算是生命力强我也没什么强大的毅力成为什么强人,而且就算是强人又如何,对死亡的恐惧丝毫不能减轻。 @pipitu: 说到底还是不能接受自己的存在被时间抹杀不留痕迹:没有人记得我,没有人能证明我在这个世界上存在过,有过什么样的经历和感情,那些记得我的人记得的也只是他们脑海中的我,并不是真正的我,他们也将死亡,就更没有人记得我了,就和我从未来到过这个世上一样[之前GT你跟我说的一些话的感受] @rainux: @pipitu 完全不对。我不能接受的仅仅是自我意识的消失,是“我”的消失,而非存在的证据之类无聊的东西。名垂青史或者遗臭万年对我来说都毫无意义,我只是想要“我”能继续存在继续感知世界感受自己的存在。 不知道阿虚之前经历什么样的大开大阖,居然走到了“站在18楼窗前也不敢再往前”的地步。这里先给大叔加把油!幸而现在的阿虚已经能淡定的坐在电脑前面跟我们畅谈这个话题了。无论能否看开生死,都绝不应该蔑视生命。其实惧怕死亡,是大自然深深刻在我们内心深处的对生命的敬畏之情也说不定吧。 接下来讨论支离破碎,变成了多个开放式的分支,当然,对每一个子问题,都没有人有答案。把追寻这些问题的答案变成我们生命的理由,也是个不错的主意吧~ 病痛: @hawkwithwind: 考虑一种极端的情况,假如身患重病,活着就是要被各种痛苦的治疗折磨,而没有享受思考和精神物质世界的心情,恐怕对生命的热情就大打折扣了吧。 @rainux: 这么说大多数人年老之后都要经历各种病痛然后死去其实是为了能更容易地接受死亡? @hawkwithwind: 不知道。。生老病死。。这是大自然的鬼斧神工。。不敢揣测。。||根据道的观点,自然是无情无为的,“目的”是人后天附加上去的。 看破红尘: @pipitu: 我不是说现在啊,我是说你确实到了油尽灯枯感觉到自己的生命快要消失于这个世界的时候,那时候应该就很坦然了,因为世间一切事物都有兴衰,死亡是必然的结局啊 @hawkwithwind: @rainux […]

ID秀

reddit上有一个组织大家说出自己ID含义的帖子,蛮有劲的 mandolinhero |—————–|—————–|—————–|—————–| |—————–|—————–|————-0—|—————–| |——-0-2—2-3-|-2-0—2-0—2—|——-0-2-5—5-|-2-0—2-0——-| |-2-4-5———–|—–5—–5—5-|-2-4-5———–|—–5—–5-4-5-| 曼陀林英雄回了一首歌 comment-repeater |—————–|—————–|—————–|—————–| |—————–|—————–|————-0—|—————–| |——-0-2—2-3-|-2-0—2-0—2—|——-0-2-5—5-|-2-0—2-0——-| |-2-4-5———–|—–5—–5—5-|-2-4-5———–|—–5—–5-4-5-| 于是评论复读机就把他复读了一下 Hibernator Pretty music makes me sooo … sleeeepy …. zzzzzzzz 冬眠家说:优美的音乐搞得我好困啊zzzz hush_hush Shhhhhh 嘘~说:嘘~ ~ IAmARealDoctor You have cancer. 我是个纯医生说:你得了绝症 rocketsurgery You have moon cancer. 火箭医疗师说:你得的是月亮癌 TheG00GLE Did you mean: You have a new form of cancer google说:您是不是要找:你得了一种新类型的癌症 i_just_lost_the game 我刚刚输掉了说:比赛 winrar […]