云南背包游记(二)

Day 2 石林

石林离大理有一段距离,开车大约要1个半钟头,前一天就在纠结怎么去的问题,俩女生包车太不安全,打车么又太贵。正好前一日在滇池拿到一张旅行社发的小传单,石林一日游一个人只要120块钱,还包门票和午餐,就决定打电话去和旅行社定,毕竟跟团有大巴交通便利很多。

事实证明:打死都不要跟团!

早上7点旅行社的小面包车就停在青旅门口接我们了,在市区里沿途接客人然后统一送到长途车站上大巴。上大巴,登记身份证 ,看着导游的样子还觉得挺正规挺靠谱的,这一想法到中午就彻底没有了。

石林分大石林和小石林,最有名的是阿诗玛,景区不大,门票175,园区内接驳的电瓶车25,都逛下来大概半天就够了。没什么特别的,随意拍照 到此一游即可。

中午的团餐基本连食堂水平都没有,吃完饭上了大巴,导游就开始介绍下午的活动:购物。跟团游有购物是意料之中的事情,万万没想到导游以进入云南世博园区需要身份证登记为理由,收走了我们的身份证。下午的购物点有3个,都是卖玉的,对于我这种对珠宝玉器无感的人来说,就算再便宜,也绝对不会买。在展馆里闲逛了一圈,见识了一下几十万一件的玉镯子啥的当开开眼。第一个购物点结束后上了大巴才发现原来一车人没有一个人花钱,导游的脸色瞬间就难看起来,各种冷嘲热讽,说自己赚的是干干净净的辛苦钱,我们不尊重导游等blabla的,然后迅速变脸,说下一个购物点,我们一定会出手。下一个购物点更不靠谱,一个标榜是什么经理的90后小男生,各种给我们优惠价,标价签上3w多的玉镯子,最后3k就可以拿走。一车人没人敢买,就一位看起来很土豪的上海阿姨买了个100块钱的小玩意。

逛了差不多1个小时,大家陆陆续续走出了购物点,才发现导游不见了。又等了半个小时也没见导游出来,忍不住跑回去找,见导游黑着脸站在里面数我们的身份证玩。我们以晚上要赶火车为理由想拿回身份证提前开溜,被拒,只好默默的继续等。大概拖到晚上7点半的样子,导游才一脸冤孽的上车,在全车人的抗议之下把身份证还给我们就地散团,还不忘说几句狠话撒撒怨气。

经验教训:1、能不跟团就不跟团 2、手机里备着身份证的照片,用于旅行团登记信息时用,如果有导游来收证件,一定要说没带or丢了,千万不能把证件压在导游手里,跑都跑不掉。3、在购物点不要买东西,谁买谁sb

脱离了傻逼的一日游,一身轻松,决定晚上吃点好吃的犒劳自己。云南的汽锅鸡是特色,查到了老字号福照楼,导航了一下有公交直达,二话不说马上冲过去。店很难找,小巷子黑漆漆的吓得我们差点半途而返。吃的很满足,推荐:凉米线(分量大的足够4个人)、乌鸡汽锅鸡、火焰土豆泥(有点咸)

酒足饭饱后散步回青旅拿寄存的背包,晚上22:55的火车去大理。本来以为21:30出门打车时间绰绰有余,没想到路上压根没空车,黑车倒是不少,好不容易拦到一辆空车还不去火车站,拒载一刚!万般无奈下只好搜公交线路,还好走2个路口就有直达公交车 ,一路狂奔,才没有误火车。

Tips:1、打车不靠谱,公共交通是王道 2、导航软件必须有,强推高德地图(顺便吐槽下百度地图不靠谱)3、多备着点零钱 ,公交车一次2元

好久没有坐红皮火车啦,好久没睡卧铺了,伸个懒腰,下一站:大理。

         

 

云南背包游记(一)

行动派决定出行只需要30秒:听见faya说买好了机票中秋假期一个人去云南,立即要求被捎上。麻利的订好机票,就这么愉快的决定和妹子一起背包去云南了。

行程路线如下:上海-昆明-大理-双廊-丽江-昆明-上海,头尾是灰机,中间是夜间的卧铺,省时间省住宿费。

Day 1 上海-昆明

怕延误,所以选择了7:20的早班机,春秋的,经济实惠。。。 40升的背包不用托运,直接扛着上飞机,过安检的时候,包里的小黄瓜水还被当做不明液体,被勒令打开闻个味道以辨真假。

那天应该是RP爆发,登机的时候登机牌刷不出,地勤直接帮我换到了第一排的商务经济舱,人生第一次升舱啊!还是不要钱的!第一次在春秋的飞机上吃到了飞机餐,还是粥!还喝了2杯咖啡!(我的没出息在此时暴露的彻彻底底)

也许是长了一张“低能欠照顾”的脸,在我好奇心泛滥的把玩着配早餐的一小包酱油的时候,空少很紧张的跑来提醒我:“这是酱油,不要倒进咖啡里”。。。

11点半,飞机准点到达昆明长水机场,出门前查了下,机场是有地铁的,不过是从一个“鸟不拉屎的地方”通往一个“鸟不太拉屎的地方”(某高级黑原话),查了下机场大巴,正好有去市中心的,就果断买票跳上车 ,25块钱。

昆明的天气是真心好,或者说,太阳是真心好,大中午的各种晃眼。下了机场大巴,先寻觅午饭,第一顿当然是云南特色过桥米线!找到老字号桥香园,一大份米线22元,口感和上海吃到的完全不一样哦。吃饱喝足查了下落脚的旅店就在1公里开外,决定散个步溜达过去,顺便看看翠湖。

在青旅卸下大背包,休整了一下,下午的目的地:西山滇池!(昆明没啥好玩的,也就滇池了吧),带我们过去的出租车司机说,滇池在下面看没啥好看的,一定要坐上缆车俯瞰才有感觉。往返缆车票70块,从滇池边一路爬上西山,风光不错,就是滇池上富营养化的藻类,怎么看怎么像抹茶。上了西山就随便逛逛了,最晚的回程缆车是17:30,没赶上就住山上吧。

西山脚下还有个民族村,有各种民族的服饰啦歌舞表演啥的,不是太感兴趣就没去。

出了西山不是很好打车,有5块钱的电瓶车接驳送到最近的公交站,在那边打车、公交进市区都很方便。

住宿:昆明倾城国际青年旅舍  昆明市华山西路92号 (非常市中心,各种方便)

好吃的:桥香园过桥米线(翠湖店) 五华区翠湖南路4号(近翠湖公园) 

晚上有当地的朋友带着吃点好的打牙祭。听说正宗的滇菜是又酸又辣的,用柠檬汁加上辣椒汁入菜,外地人根本吃不惯。宣威 菜相对好一些。尝了一家宣威年猪饭,黄豆腐超级赞,酸汤猪蹄也好评!

Resovling AM_ICONV undefined error when building osxfuse

I got this issue when building osxfuse code:

 
wum@osxfuse$ ./build.sh -t lib
OSXFUSEBuildTool()            : supported platforms: 10.7 10.8
OSXFUSEBuildTool(lib)         : initiating Universal build for 10.7
OSXFUSEBuildTool(lib)         : configuring library source
Running libtoolize…
Running autoreconf…
configure.in:82: warning: macro `AM_ICONV' not found in library
glibtoolize: putting auxiliary files in `.'.
glibtoolize: copying file `./ltmain.sh'
glibtoolize: Consider adding `AC_CONFIG_MACRO_DIR([m4])' to configure.in and
glibtoolize: rerunning glibtoolize, to keep the correct libtool macros in-tree.
glibtoolize: Consider adding `-I m4' to ACLOCAL_AMFLAGS in Makefile.am.
configure.in:82: warning: macro `AM_ICONV' not found in library
configure.in:82: error: possibly undefined macro: AM_ICONV
      If this token and others are legitimate, please use m4_pattern_allow.
      See the Autoconf documentation.
autoreconf: /usr/bin/autoconf failed with exit status: 1
Linking kernel header file…
To compile run './configure', and then 'make'.
configure: error: cannot find install-sh or install.sh in "." "./.." "./../.."
OSXFUSEBuildTool(lib) failed: cannot configure OSXFUSE library source for compilation.
 
I soon googled and find that I was short of the get text library. However installing the library with homebrew didn't help. I try other workarounds but they didn't appear to work.
 
The major problem is that AM_ICONV (used in some automate script) is defined in iconv.m4
 
Soon I realized if there's an issue in the include path. autoconf/glibtoolize is searching the m4 file in /usr/share/aclocal, but gettext's m4 file was installed to /opt/local/share/aclocal/ by my homebrew. I copied all the m4 files from /opt/local/share/aclocal/ to /usr/share/aclocal, and everything was resolved…
 

wheel 用户组

UNIX系统里有个wheel用户组,大概相当于root组的权限,比如sudoer。这个名字的由来可见下面这个帖子——来源于big wheel这个俚语,指的是有权势权力的人。另外也有一种说法是当初在搞这个功能的哥们,一边弄一边在听"Wheel in the Sky"这首歌,然后就把用户组命名为wheel

参考资料:
http://unix.stackexchange.com/questions/1262/where-did-the-wheel-group-get-its-name

Mac OSX Tips (1)——彩色化ls输出

Mac OSX终端彩色化ls输出似乎和linux不一样。

 
最简单的就是ls -G,然后在.bash_profile里用alias把ls 定义成ls -G: (上面是简单的ls,下面是ls -G)
 

 
或者在.bash_proflie里
export CLICOLOR=1
export LSCOLORS=GxFxCxDxBxegedabagaced
 
 

西安自驾行(二)

第二天

这一天预计路途最长,也是从来没有经受过的考验。第一天晚上马路上的渣土车肆虐,没怎么休息好。不过好消息是出太阳了,天气很好。

办好了退房手续,成功打着了火(怕电瓶又没电),吃了路边买的大肉包,物价还算便宜,两块钱好大一个。8点20上路。本来已经查好了的加油站发现是自助的,只能用油卡不收现金。只好直接先上高速了。这自助的加油站不收现金至少让人刷信用卡吧?不过联想到盗刷的风险还是算了。

还没拐上绕城,就远远看到凤台南路的车流在缓缓挪动,心想不好,过江麻烦了。曾经打算走长江隧道后来听说出口修路还是作罢。缓行了3、4公里后发现大量车流是走宁马高速的,三桥没什么车,运气还可以。下了三桥找了个休息站把油箱加满了。

在江浦过高旺互通的时候看到一个牌子——宁合(G40/42)拥堵请从SXXX绕行,没有在意,因为也不知道怎么绕,结果就一头扎进了前方延绵不绝的车流中。在出江苏省界前十几公里的路段大概花了将近三个小时,期间不断和各种插队的、巨型货车搏斗。原本以为是有事故,的确也看到了几个,不过过了事故点开了一两百米又堵死了。

大概将近十一点的时候终于爬出了滚滚车流开始撒欢。在合肥绕城高速北边的一个休息站吃了泡面,闭眼小憩了二十分钟接着赶路。路上车不多,四周景色长时间没什么变化,加上前一天晚上没怎么休息好,下午时间很容易犯困。还好在和G42分道扬镳,进入河南地界换了一种景色,才把睡意逐渐驱散。

河南境内的G40路况非常好,三车道,车少,半分钟经常见不到别的车。晚上六点半顺利抵达南阳,一天开了620公里基本没啥压力。

南阳的酒店是一大惊喜。本来只是冲着三百一晚上的holiday inn来的,没想到南阳建业森林半岛假日酒店档次还很不错,至少设施比成都的四星级holiday inn要高出一截,也不低于复旦皇冠——至少第一次见识了电动的窗帘——一开始扯了半天还以为坏了怎么扯不动。

晚上到城区里转转,说大不大说小不小,热闹的地区也就那一两个街区。对比卫星地图郊区还是有很大变化的,四处林立的脚手架和吊车。

第三天

今天的路途压力小,只有400多公里,所以赖到了11点才出发(五星级酒店就多享受一点吧)。G40的路况依旧很好,不过车越来越少,还下了点雨。进入山区,感觉行车方向有点间歇性的跑偏,一开始以为是下雨的缘故,减速到90公里。后来进入不下雨的路段发现依然如此,才明白是肆虐的横风。特别是进入秦岭山区(更准确说是伏牛山,秦岭在河南西部的南支,北支)后,速度就是降到80,都能感觉到有一股无形的力量在拽着你的方向盘。山区车也少——是我开过的车最少的高速了——最长的一次5分钟同方向没看到一辆车。

过了无数的小隧道和两个长隧道之后终于进入关中地区,眼前的风貌和河南又有不同,至少植被覆盖更少了。刚出秦岭隧道就看在左边看到有一块非常长的台状高地,延绵几十公里估计,后来才知道这就是白鹿原。隔开白鹿原和我们之间的河流是灞水,往西北注入渭河。在纺织城下了绕城高速入城,马上就有市区的感觉。西安城市建设紧锣密鼓的进行中,路上碰到无数施工围挡以及附带的堵车。下午5点左右到达永宁门附近的汉庭。

晚上走去附近的回民街打打牙祭。由于是清明假期,游人如织,几条小巷子连走路都很困难,但也有熟练的居民和店员能够驾着小电驴在不断吆喝中前行。第一次知道这里泡馍需要自己掰膜,和老婆两个人很土逼的掰了估计二十分钟才基本达到要求。附带吐槽一下回民街的价格完全不能体现西安本身的物价,羊肉汤要35,泡馍也要30,基本以宰外地游客为主。

西安自驾行(一)

临时起意

这个念头是清明节前两天早上在床上迷糊时蹦出来的——连续买房受挫,决定出去清明出门玩玩;两周前租车赶赴外地同学婚礼,感觉很不错;清明高速公路还不收费;周末假日租车贵,还得麻烦开回来,于是想起了顺风车这回事——然后在早上蹲马桶的片刻我用手中的iPad决定了清明出行的目的地。既不能太近,限制日期太短,不够玩,又得是好玩的地方,十几辆上海出发的顺风车里剩下可选的只剩下了西安。

原本的计划是在武汉停留一天,小玩半天,不过经过简单考虑放弃。半天玩不了什么东西,又多绕了200公里,影响西安游玩。另外为了节省时间,提前到清明前一天下班前出发,开前半夜的沪宁高速在南京过夜,减轻清明当天的压力和拥堵时间(G2你懂的)。

匆忙准备

第二天下午就要出发,除了规划路线,简单制作路书外,还要订返程飞机票。周六晚上太贵,干脆就周日请一天假,好好逛逛,也降低开车压力。酒店也订好,有的房间因为到得晚还提前付好了钱。当天中午临时想起来买点汽车用品,包括应急灯逃生锤和手持胎压检测表(跑长途还是小心点)。

出发插曲

顺风车车型没得选,一辆赛拉图一辆乐风。上次开过通用的车子想试试别的于是就定了赛拉图。到了虹桥机场店取车,办好柜台手续后等取车却等了很久,我有点不详的预感。过了十五分钟后小哥说车停了太久电瓶没电……找了别的车搭了电,然后在一边怠速充电。趁着这一空挡我顺便量了量胎压。其他轮子都好,不过左后轮测了几次都只有其他轮子的一般压力。其实如果几百公里的路途可能也就算了,不过去西安一路遥远,还是小心点。当即要求充气,工作人员一会儿推脱气泵被借走了,一会儿说让我们自己到路边摊充一下。经过老婆的反复交涉和一个小时的等待,终于弄好了发车,不过比原定晚了一个多小时。虹桥机场上G50开始几天的旅途。

第一天

节假日前一天晚上肯定堵,我们也有心里准备,不过没想到刚过G15崧泽收费站就开始堵……不过不是因为车多、事故而是修路。10公里的车速挪了半个多小时好不容易上了G2,好消息是绕过了江桥收费站。

到南京路上碰到两次拥堵,都是因为车祸,半途还下起了小雨。一开始还因为对车况不熟,不会打远光灯紧张了半天(后来才知道是拨相反方向)。半路在无锡休息一次,买了茶叶蛋和油条充饥。怕电瓶充电不够在休息站也没熄火(后来在高速上一路上都如此)。

挨到南京出口时已经十点多了,老婆看见南京的大字很开心~为了好好休息就不多等一个小时省一百多块钱了。另外不得不吐槽的是南京绕城公路上的收费站的确是毒瘤,小小的一段路要价十五块。下绕城时原本查好的雨润大街匝道却早已封闭(估计是为了安全因素),只好从宁芜公路多绕了十几公里回来。到达河西格林豪泰已经十一点半了。里程大概360公里。

入睡前最后一次修改了行程,原本打算第二天晚上在襄阳过夜的,想了想还是裁弯取直,在南阳休整。对这个地方一点概念都没有(除了诸葛亮的“臣本布衣,躬耕于南阳”),酒店干脆就订了一个最好的——Holiday Inn

 

Fixing “error checking mount status” when using mkfs.btrfs to a new file

(Update: Fix is also available at http://permalink.gmane.org/gmane.comp.file-systems.btrfs/15906)

Symptom

When you're following instructions to debug btrfs with gdb and UML (User Mode Linux), you might come across this error when making btrfs on a file:

error checking <file name> mount status

And here're the steps before:
1. Download latest btrfs-prog(git clone git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-progs.git)
2. Build the tools
3. Run mkfs.btrfs <image file>

Root cause

If you're sure that you just created the file with dd and not touching it, then it is quite likely you hit an issue in the mkfs.btrfs code which works well on later linux kernel.

mkfs.btrfs will check if the target device/file is mounted anywhere or it is formatted in btrfs before it do any write. One last thing is to check that the file is not backing a loop device. In utils.c, it resolves the loop device by parsing /sys/block/<loop name>/loop/backing_file, which doens't exist until 2.6.37 (I'm running on 2.6.29). Failure in opening the file results in failure of the whole operation.

Fix

Unmount any loop device

I'm not going to file any bug request or provide any fix myself, due to the fact that this issue won't happen in the real environment (should be running a later linux kernel). So just put it down with the workaround for your reference.

宝山图书馆半日游

计划很久的一次探访,上次似乎是在两年前,那会儿宝图还在改建,事先没做好功课(或者是网上信息提示不够充分),家门口坐了116B(那会儿还叫116)直接杀过去,下车了却发现是一个工地(虽然封顶了)。后话是直接在宝杨路坐车去了顾村,然后再转528回家。

直接上图:

宝图建筑外立面,字体很特殊

 

进门处的自助办证机,非常方便,1分钟完成办证。另外罚款通过充值完成。我忍不住也办了一张,借了本书。后来想到还书还得回来,囧。

 

一楼的英文杂志区,数量不多,不过居然有《Mac World》

 

历年国家地理杂志合订本,这个很不错,而且可以外借

 

所有的电脑的主机就是显示器后面一个小盒子,目测似乎是瘦终端,跑虚拟化。

 

一楼的露天平台,远处是二楼和三楼的平台,可以拿着图书馆的书坐着看。

 

从二楼看一楼的入口

 

3楼的指示牌

 

上海中心图书馆的书架,占了3楼的一小块

 

回来在海江路上看到的温德姆酒店,有点像威尼斯人酒店

 

回来路上碰到3号线北段的悲剧间隔

MBR,GPT与Boot Camp

MBR

作为BIOS时代的分区管理格式,MBR (Master Boot Record)已经走过了31个年头。1982年,MBR被引入IBM PC DOS 2.0,用来支持10MB大小的硬盘。

MBR的结构非常简单。前面446字节是引导代码,接着4条16字节的主分区信息,最后是两个字节的签名(魔数):

Start Size Description
0 446 Boot code
446 16 Primary partition entry 1
462 16 Primary partition entry 2
478 16 Primary partition entry 3
494 16 Primary partition entry 3
510 2 Signature (0xaa55)

这么看每个磁盘的分区数被限死在了4个,不过后来又引入了扩展分区技术(EBR)解决(或者说是绕过)了这个问题。简单来说,EBR就是把最后一个主分区特别对待,这个分区(又称扩展分区)的第一个扇区看成是一个MBR,又叫EBR,不过不同的是EBR只用了前两个分区项(同样从446字节处开始),第一项指明了新的普通分区,而第二项除了可以指新的普通分区外,还可能用来指向新的扩展分区。这样通过链表的形式把非主分区(又称逻辑分区)给串起来。下面这两张张图(来自MSDN)基本说明了是怎么回事:

 

上图前三个主分区项都指向了普通分区,最后一项指向了扩展分区。下图则演示了扩展分区的细节:

 

EBR

扩展分区里只用了两项分区项,第一项指向普通分区,第二项指向下一个扩展分区。前一级扩展分区总是涵盖了后面的所有分区,形成了嵌套的链接关系。

这样的做法缺点很明显,链表当中要是断了,后面的可就都丢掉了。另外要让一些主流操作系统从分主分区启动也要花一些功夫。

下面简单说说分区项的具体内容:

Start Size Descripton
0 1 Status (0x80 = boot flag)
1 3 CHS start (deprecated, use 0xfeffff)
4 1 Partition type
5 3 CHS end (deprecated, 0xfeffff)
8 4 LBA start (in sectors)
12 4 LBA size (in sectors)

可以看到一个明显的限制是磁盘的大小。LBA的宽度只有4个字节,这样只能用来描述最大2TB的磁盘,再大就不够了(有别的hack,不过至少肯定不能用来当启动盘)。另外分区类型最多256种,不够描述当今所有的文件系统类型(包括操作系统)。MBR格式(以及其背后的BIOS)过于古老,严重阻碍了新技术的推广。但是PC市场这么大,想要改也没那么容易,涉及到硬件软件以及大量第三方公司和整个产业链。

EFI

Intel和HP在90年代一起研发Itanium的时候,就打算趁引入新架构的机会也把老掉牙的BIOS踢到一边去。98年搞了一个项目叫Intel Boot Initiative,后来更名为EFI,2005年又更名为现在的名字UEFI。Itanium算是没做起来,UEFI这些年的势头开始起来了,除了Intel架构的Mac以外,Windows 8的加入无疑将大大加速UEFI的推广(虽然Secure Boot备受争议)。

EFI的一个组成部分是规定了新的磁盘分区格式GPT(GUID Partition Table)。首先GPT支持最高达8ZB(4PB*2M)的磁盘容量(在可见的未来足够了),以及最多128项磁盘分区。另外出于保护数据的目的,分区表在磁盘上存放了两份,分别放在磁盘的开头和结尾,以防以外丢失。

保护MBR(Protective MBR)

由于市场上大量非EFI机器的存在,GPT通过保护MBR来达成与MBR的兼容,或者说是保护GPT分区不被非EFI机器破坏。方法很简单,结合上面MBR的描述就可以明白:

  1. 占领MBR的第一项分区项;
  2. 分区类别设定为特殊类型;
  3. 起始地址为扇区1;
  4. 分区大小为磁盘大小-1。

这样非EFI机器读MBR的时候,就会发现整个磁盘已经被别的分区全部占满了,而用户也不会轻易的重新分区。这就是所谓的“保护性”。

GPT头和分区项

GPT头描述了磁盘和分区表的基本信息,如磁盘的GUID和分区表的大小。分区项最多有128项,一般4项为一个单位。分区项每项占128字节:

Start Size Descrption
0 16 Partition type GUID
16 16 Unique Partion GUID
32 8 Start LBA
40 8 Last LBA
48 8 Flags
56 72 Partition name

(令人意外的是,分区类型虽然是GUID,不过已经有冲突了)

GPT和MBR这两种磁盘分区格式可以说是天差地别,融合起来可不是很容易。不过好在GPT给MBR让出了扇区0作为保护MBR,在一个磁盘上支持两种分区格式也成为可能。典型的做法是Boot Camp的实现。

Boot Camp

苹果在2005年宣布使用Intel作为Mac平台以后,由于控制了硬件软件平台,使得它应用EFI没有什么问题。不过大部分Windows并不支持GPT而只能从MBR磁盘启动,苹果也提供了Boot Camp方便使用者在Mac上安装双系统。

Boot Camp的原理是混合MBR (Hybrid MBR)。利用MBR里的空余主分区项,使得一个分区在两个分区表里都有份。

前面说过了保护性MBR的做法是把整个磁盘写成一个大分区,这时候这个大分区被Mac OSX占据了。如果我们把Mac OSX分区缩小(比如一半),那后面一半分区就可以腾出来给Windows用了。要做到这一步很简单,只需要把保护性MBR里那条特殊的分区项的分区大小改小就可以了,另外需要往MBR里再加一条分区项(并设置成启动),描述后面半个磁盘上的Windows分区。

操作系统按道理可以安装启动了,不过下一步我们还需要在两个操作系统里分别都能看到对方操作系统的分区,至少方便拷贝数据(假定都有相应文件系统的驱动)。对于Windows来说,由于MBR里已经有两条分区项充分描述了这两个分区,所以Windows里能够看到两个分区;但是对于Mac OSX来说,它只认识GPT的分区,所以还看不到Windows的分区。当然这也很简单,只要往GPT分区表里加一条描述Windows分区的分区项就可以了。

具体来说Boot Camp做了三件事:

  • 把Mac OSX分区缩小(Shrink HFS+)
  • 改动GPT和MBR的分区表;
  • 在启动菜单里加上其他操作系统的选项,另外给其他操作系统提供驱动。

下面是我启用了Boot Camp的MBR导出结果:

00fe ffff eefe ffff 0100 0000 2740 0600   <<<< EFI partition (200M ESP)
00fe ffff affe ffff 2840 0600 0047 0740   <<<< Mac main partition, size 0x40074700 (512G)
00fe ffff abfe ffff 2887 0d40 205f 1300   <<<< Mac recovery partition
80fe ffff 07fe ffff 00e8 2040 0078 3317   <<<< Windows partition, size 0x1733008 (185G), boot bit             
                                               (first bit) is set

或者是用fdisk导出结果

wum@dev$ sudo fdisk -d /dev/rdisk0

1,409639,0xEE,-,1023,254,63,1023,254,63
409640,1074218752,0xAF,-,1023,254,63,1023,254,63
1074628392,1269536,0xAB,-,1023,254,63,1023,254,63
1075898368,389249024,0×07,*,1023,254,63,1023,254,63

参考文献

Hybrid MBRs

What's a GPT?

Apple support of GPT